pup-recorder 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build_rust.ts +28 -19
- package/dist/cjs/app.cjs +2 -2
- package/dist/cjs/cli.cjs +2 -2
- package/dist/cjs/index.cjs +2 -2
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/rust/darwin-arm64.node +0 -0
- package/rust/darwin-x64.node +0 -0
- package/rust/linux-arm64.node +0 -0
- package/rust/linux-x64.node +0 -0
- package/rust/win32-arm64.node +0 -0
- package/rust/win32-x64.node +0 -0
- package/rust-toolchain.toml +10 -0
- package/src/base/ffmpeg.ts +2 -0
- package/src/base/network.ts +2 -2
- package/src/base/window.ts +2 -7
- package/src/pup.ts +0 -5
- package/x265/darwin-arm64 +0 -0
- package/x265/darwin-x64 +0 -0
- package/x265/linux-arm64 +0 -0
- package/x265/linux-x64 +0 -0
- package/x265/win32-arm64.exe +0 -0
- package/x265/win32-x64.exe +0 -0
package/build_rust.ts
CHANGED
|
@@ -13,12 +13,23 @@ function getTriple(platform: string, arch: string) {
|
|
|
13
13
|
if (arch === "x64") return "x86_64-unknown-linux-gnu";
|
|
14
14
|
if (arch === "arm64") return "aarch64-unknown-linux-gnu";
|
|
15
15
|
}
|
|
16
|
+
if (platform === "win32") {
|
|
17
|
+
if (arch === "x64") return "x86_64-pc-windows-msvc";
|
|
18
|
+
if (arch === "arm64") return "aarch64-pc-windows-msvc";
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function getArtifactName(platform: string) {
|
|
24
|
+
if (platform === "darwin") return "libnative.dylib";
|
|
25
|
+
if (platform === "linux") return "libnative.so";
|
|
26
|
+
if (platform === "win32") return "native.dll";
|
|
16
27
|
return null;
|
|
17
28
|
}
|
|
18
29
|
|
|
19
30
|
async function copyArtifact(platform: string, arch: string, dir: string) {
|
|
20
|
-
const
|
|
21
|
-
|
|
31
|
+
const libName = getArtifactName(platform);
|
|
32
|
+
if (!libName) return;
|
|
22
33
|
const src = join(dir, libName);
|
|
23
34
|
const destDir = join("rust");
|
|
24
35
|
const dest = join(destDir, `${platform}-${arch}.node`);
|
|
@@ -26,30 +37,28 @@ async function copyArtifact(platform: string, arch: string, dir: string) {
|
|
|
26
37
|
await copyFile(src, dest);
|
|
27
38
|
}
|
|
28
39
|
|
|
29
|
-
async function
|
|
40
|
+
async function cargoBuild(platform: string, arch: string) {
|
|
30
41
|
const triple = getTriple(platform, arch);
|
|
31
42
|
if (triple) {
|
|
32
|
-
|
|
33
|
-
|
|
43
|
+
if (platform === "win32") {
|
|
44
|
+
await $`cargo xwin build --release --quiet --target ${triple}`;
|
|
45
|
+
} else {
|
|
46
|
+
await $`cargo zigbuild --release --quiet --target ${triple}`;
|
|
47
|
+
}
|
|
34
48
|
await copyArtifact(platform, arch, `target/${triple}/release`);
|
|
35
49
|
}
|
|
36
50
|
}
|
|
37
51
|
|
|
52
|
+
const PLATFORMS = ["darwin", "linux", "win32"];
|
|
53
|
+
const ARCHS = ["x64", "arm64"];
|
|
54
|
+
|
|
38
55
|
async function buildRust() {
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
platforms
|
|
46
|
-
.map((platform) => {
|
|
47
|
-
return archs.map((arch) => {
|
|
48
|
-
return build(platform, arch);
|
|
49
|
-
});
|
|
50
|
-
})
|
|
51
|
-
.flat(),
|
|
52
|
-
);
|
|
56
|
+
await $`cargo install --quiet cargo-zigbuild cargo-xwin`;
|
|
57
|
+
for (const platform of PLATFORMS) {
|
|
58
|
+
for (const arch of ARCHS) {
|
|
59
|
+
await cargoBuild(platform, arch);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
buildRust();
|
package/dist/cjs/app.cjs
CHANGED
|
@@ -158,6 +158,6 @@
|
|
|
158
158
|
})();
|
|
159
159
|
</script>
|
|
160
160
|
</body>
|
|
161
|
-
</html>`}function Ne(t,e){let{width:r,height:o}=e;if(r<32||o<2)return;let i=o-1,n=0;for(let u=0;u<32;u++){let a=(i*r+u)*4,p=(t[a]??0)>127?1:0;n=n<<1|p;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function Be(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_recording__()"})}function He(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_recording__()"})}function je(t){let e=t.getSize();return e.width===0||e.height===0?true:t.isEmpty()}var pe=["file:","http:","https:","data:"],At=/^(file:|https?:|data:)/;function qe(t){if(At.test(t))return;let e=t.split(":")[0]+":",r=pe.includes(e)?`unsupported protocol: ${e}, expected ${pe.join(", ")}`:`invalid source format, expected ${pe.join(", ")}`;throw new Error(r)}var B=class{constructor(e){this.maxConcurrency=e;}_active=0;_queue=[];_ended=false;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e){if(this._ended)throw new Error("ended");return new Promise((r,o)=>{let i=()=>{this._active++,e().then(n=>{this._active--,r(n),this.next();}).catch(n=>{this._active--,o(n),this.next();});};this._queue.push(i),this.next();})}async end(){if(!this._ended)for(this._ended=true;this._active>0||this.pending>0;)await new Promise(e=>setTimeout(e,50));}next(){this._active<this.maxConcurrency&&this._queue.shift()?.();}};var H=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(r=>{this._resolve=r,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),r();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var j="[Network]",Et=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function de(t){if(!t.startsWith("http"))return t;let e=new url.URL(t),r=Et.get(e.hostname);return r?(e.hostname=r,e.protocol="http:",e.toString()):t}function ze({source:t,window:e,useInnerProxy:r}){let o=e.webContents.session.webRequest,i=new B(
|
|
161
|
+
</html>`}function Ne(t,e){let{width:r,height:o}=e;if(r<32||o<2)return;let i=o-1,n=0;for(let u=0;u<32;u++){let a=(i*r+u)*4,p=(t[a]??0)>127?1:0;n=n<<1|p;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function Be(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_recording__()"})}function He(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_recording__()"})}function je(t){let e=t.getSize();return e.width===0||e.height===0?true:t.isEmpty()}var pe=["file:","http:","https:","data:"],At=/^(file:|https?:|data:)/;function qe(t){if(At.test(t))return;let e=t.split(":")[0]+":",r=pe.includes(e)?`unsupported protocol: ${e}, expected ${pe.join(", ")}`:`invalid source format, expected ${pe.join(", ")}`;throw new Error(r)}var B=class{constructor(e){this.maxConcurrency=e;}_active=0;_queue=[];_ended=false;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e){if(this._ended)throw new Error("ended");return new Promise((r,o)=>{let i=()=>{this._active++,e().then(n=>{this._active--,r(n),this.next();}).catch(n=>{this._active--,o(n),this.next();});};this._queue.push(i),this.next();})}async end(){if(!this._ended)for(this._ended=true;this._active>0||this.pending>0;)await new Promise(e=>setTimeout(e,50));}next(){this._active<this.maxConcurrency&&this._queue.shift()?.();}};var H=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(r=>{this._resolve=r,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),r();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var j="[Network]",Et=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function de(t){if(!t.startsWith("http"))return t;let e=new url.URL(t),r=Et.get(e.hostname);return r?(e.hostname=r,e.protocol="http:",e.toString()):t}function ze({source:t,window:e,useInnerProxy:r}){let o=e.webContents.session.webRequest,i=new B(64),n=new Map;async function u(s,p){let d=new H;n.set(s,d),await d.wait({timeout:5e3,onTimeout:p}).finally(()=>n.delete(s));}function a(s){n.get(s)?.signal();}o.onBeforeRequest((s,p)=>{let d=s.url,c=r?de(d):d;i.schedule(()=>{let g=`${e.id}_${s.id}`;return f.debug(j,"start:",{key:g,url:d,proxied:c,method:s.method,source:t,stats:i.stats}),p(c===d?{cancel:false}:{cancel:false,redirectURL:c}),u(g,()=>{f.warn(j,"maybe timeout:",{key:g,url:d,proxied:c,method:s.method,source:t});})});}),o.onHeadersReceived(({responseHeaders:s},p)=>{delete s?.["x-frame-options"],delete s?.["X-Frame-Options"],delete s?.["content-security-policy"],delete s?.["Content-Security-Policy"],p({cancel:false,responseHeaders:s});}),o.onCompleted(s=>{let p=`${e.id}_${s.id}`;a(p),f.debug(j,"completed:",{key:p,url:s.url,method:s.method,statusCode:s.statusCode,source:t});}),o.onErrorOccurred(s=>{let p=`${e.id}_${s.id}`;a(p),f.error(j,"error:",{key:p,url:s.url,method:s.method,error:s.error,source:t});});}function Ge(t){let e=t.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}function Ke(t){return new Promise(e=>setTimeout(e,t))}function Ve({fn:t,maxAttempts:e=3,timeout:r}){let o=new Error(`timeout over ${r}ms`);return async function(...i){let n=0;for(;;)try{let u=[t(...i)];return r&&u.push(promises$1.setTimeout(r).then(()=>{throw o})),await Promise.race(u)}catch(u){if(n++,n>=e)throw u;await Ke(Math.pow(2,n)*100+Math.random()*100);}}}var Ye="[Window]";function Ft(t,e){return new Promise((r,o)=>{let i=setTimeout(()=>o(new Error("load window timeout")),3e4),n=u=>{clearTimeout(i),u?o(u):r();};t.webContents.once("did-finish-load",()=>n()),t.webContents.once("did-fail-load",(u,a,s,p)=>n(new Error(`failed to load ${p}: [${a}] ${s}`))),t.webContents.once("render-process-gone",(u,{exitCode:a,reason:s})=>n(new Error(`renderer crashed: ${a}, ${s}`))),e();})}async function Je(t,e,r){qe(e);let{width:o,height:i,useInnerProxy:n}=r,u=e;n&&(u=de(e)),t.forEach(d=>{d.webContents.removeAllListeners(),Ge(d),f.debug(Ye,"destroy window:",d.id);});let a=new electron.BrowserWindow({width:o,height:i+1,show:false,transparent:true,backgroundColor:void 0,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});ze({source:e,window:a,useInnerProxy:n}),t.splice(0).forEach(d=>d.destroy()),t.push(a),a.webContents.on("console-message",({level:d,message:c,lineNumber:g,sourceId:h})=>{d==="error"&&f.error(Ye,"console:",{message:c,lineNumber:g,sourceId:h,source:e});});let s=Me(u,{width:o,height:i}),p=`data:text/html;charset=utf-8,${encodeURIComponent(s)}`;return await Ft(a,()=>a.loadURL(p)),a}async function Xe(t,e){try{let r=[];return await Ve({fn:Je,maxAttempts:2})(r,t,e),await Je(r,t,e)}catch(r){let{message:o,stack:i}=r,n={source:t,message:o,stack:i};throw new Error(`failed to load window: ${JSON.stringify(n)}`)}}var le="[Record]";async function Qe(t,e){f.info(le,"progress: 0%");let{outDir:r,fps:o,width:i,height:n,duration:u,withAudio:a}=e;await promises.mkdir(r,{recursive:true});let s=path.join(r,"output.pcm"),p=a?await Oe(s):void 0,d=await Xe(t,e),c=d.webContents.debugger;c.attach("1.3"),d.webContents.setFrameRate(o),d.webContents.isPainting()||d.webContents.startPainting();let g=path.join(r,"output.bgra"),h=Math.ceil(o*u),y=1e3/o,U=i*n*4,F=new M(g,U,o),x=0,w,R=0,l,A,fe,Y=C=>{x++;try{F.write(C);}catch(E){l??=E;}},he=(C,E,J)=>{if(l){fe?.(l);return}if(x>=h){A?.();return}if(je(J))return;let we=J.toBitmap(),O=Ne(we,J.getSize());if(O===void 0){l??=new Error(`no timestamp @ ${x}`);return}let ot=i*4,X=we.subarray(0,n*ot);if(w===void 0){Y(X),w=O;return}let Q=O-w;if(Q<y*.8)return;if(Q<=y*1.2)Y(X);else {let nt=Math.round(Q/y);for(let xe=0;xe<nt&&x<h;xe++)Y(X);}w=O;let ge=Math.floor(x/h*100);Math.abs(ge-R)>10&&(R=ge,f.info(le,`progress: ${Math.round(R)}%`));};d.webContents.on("paint",he),await Be(c);try{await new Promise((C,E)=>[A,fe]=[C,E]);}finally{await He(c),d.webContents.off("paint",he),await F.close(),await p?.teardown();}if(l||x===0)throw l??new Error("no frames captured");try{let C=p?.sampleRate?{pcmPath:s,sampleRate:p.sampleRate}:void 0,E={options:e,written:x,bgra:g,audio:C};await promises.writeFile(path.join(r,"record.json"),JSON.stringify(E)),f.info(le,`progress: 100%, ${x} frames written`);}finally{d.close();}}function $(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Lt="--pup-priv-args";function Ze(){let t=process.argv,e=t.find(o=>o.startsWith(Lt));if(!e)return f.debug("procargv",t),process.argv;let r=["exec",...t.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),r.push(...JSON.parse(e)),f.debug("pupargs",r),r}var q=1920,z=1080,G=30,K=5,V="out";___default.default.object({duration:___default.default.number().optional().default(K).describe("Recording duration in seconds"),width:___default.default.number().optional().default(q).describe("Video width"),height:___default.default.number().optional().default(z).describe("Video height"),fps:___default.default.number().optional().default(G).describe("Frames per second"),withAlphaChannel:___default.default.boolean().optional().default(false).describe("Output with alpha channel"),withAudio:___default.default.boolean().optional().default(false).describe("Capture and encode audio"),outDir:___default.default.string().optional().default(V).describe("Output directory"),useInnerProxy:___default.default.boolean().optional().default(false).describe("Use bilibili inner proxy for resource access")});async function tt(t,e){commander.program.name(t).argument("<source>","file://, http(s)://, \u6216 data: URI").option("-w, --width <number>","\u89C6\u9891\u5BBD\u5EA6",`${q}`).option("-h, --height <number>","\u89C6\u9891\u9AD8\u5EA6",`${z}`).option("-f, --fps <number>","\u5E27\u7387",`${G}`).option("-t, --duration <number>","\u5F55\u5236\u65F6\u957F\uFF08\u79D2\uFF09",`${K}`).option("-o, --out-dir <path>","\u8F93\u51FA\u76EE\u5F55",`${V}`).option("-a, --with-alpha-channel","\u8F93\u51FA\u5305\u542B alpha \u901A\u9053\u7684\u89C6\u9891",false).option("-s, --with-audio","\u6355\u83B7\u5E76\u6DF7\u5165\u97F3\u9891",false).option("--use-inner-proxy","\u4F7F\u7528 B \u7AD9\u5185\u7F51\u4EE3\u7406\u52A0\u901F\u8D44\u6E90\u8BBF\u95EE",ne).action(async(r,o)=>{try{await e(r,{width:$(T,q)(o.width),height:$(T,z)(o.height),fps:$(T,G)(o.fps),duration:$(T,K)(o.duration),outDir:o.outDir??V,withAlphaChannel:o.withAlphaChannel??!1,withAudio:o.withAudio??!1,useInnerProxy:o.useInnerProxy??ne});}catch(i){f.fatal(i);}}),await commander.program.parseAsync(Ze());}process.once("exit",()=>electron.app.quit());var Wt="[App]";function rt(){f.debug(Wt,"gpu features:",electron.app.getGPUFeatureStatus());}electron.app.dock?.hide();tt("app",async(t,e)=>{try{electron.app.on("gpu-info-update",rt),await electron.app.whenReady(),rt(),await Qe(t,e);}finally{electron.app.quit();}});
|
|
162
162
|
//# sourceMappingURL=app.cjs.map
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMzNlMjQ2NTBmNWFlZDE3YS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vLi4vc3JjL2Jhc2UvYmFzZWRpci50cyIsIi4uLy4uL3NyYy9iYXNlL2Vudi50cyIsIi4uLy4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uLy4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uLy4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi8uLi9zcmMvcnVzdC9saWIudHMiLCIuLi8uLi9zcmMvYmFzZS9hdWRpb19jYXB0dXJlLnRzIiwiLi4vLi4vc3JjL2Jhc2UvZnJhbWVfc3luYy50cyIsIi4uLy4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vLi4vc3JjL2Jhc2UvaHRtbF9jaGVjay50cyIsIi4uLy4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi8uLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uLy4uL3NyYy9iYXNlL25ldHdvcmsudHMiLCIuLi8uLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi8uLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uLy4uL3NyYy9iYXNlL3dpbmRvdy50cyIsIi4uLy4uL3NyYy9iYXNlL3JlY29yZC50cyIsIi4uLy4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uLy4uL3NyYy9iYXNlL3NjaGVtYS50cyIsIi4uLy4uL3NyYy9jb21tb24udHMiLCIuLi8uLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwiYmFzZWRpciIsImRpcm5hbWUiLCJmaWxlVVJMVG9QYXRoIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsInZhbHVlIiwibnVtIiwicHVwQXBwU2VhcmNoUGF0aHMiLCJqb2luIiwiZXhpc3RzU3luYyIsImVudiIsInB1cExvZ0xldmVsIiwicHVwVXNlSW5uZXJQcm94eSIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsInJ1c3RQYXRoIiwicGxhdGZvcm0iLCJhcmNoIiwibmF0aXZlU2VhcmNoUGF0aHMiLCJtb2QiLCJfX3JlcXVpcmUiLCJGaXhlZEJ1ZmZlcldyaXRlciIsIkFVRElPX0NBUFRVUkVfU0NSSVBUIiwic2V0dXBBdWRpb0NhcHR1cmUiLCJwY21QYXRoIiwicHJlbG9hZFBhdGgiLCJ0bXBkaXIiLCJyYW5kb21VVUlEIiwid3JpdGVGaWxlIiwic2Vzc2lvbiIsIndyaXRlciIsImNhcHR1cmUiLCJpcGNNYWluIiwicm0iLCJfZSIsImJ1ZmZlciIsImJ1aWxkV3JhcHBlckhUTUwiLCJ0YXJnZXRVUkwiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJkZWNvZGVUaW1lc3RhbXAiLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN5bmMiLCJjZHAiLCJzdG9wU3luYyIsImlzRW1wdHkiLCJpbWFnZSIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsInNvdXJjZSIsInByb3RvY29sIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJmbiIsInJ1biIsInYiLCJlIiwiciIsIldhaXRhYmxlRXZlbnQiLCJvcHRpb25zIiwiVEFHIiwibWFwIiwicHJveGllZFVybCIsInVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsInJlcSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwidW5zZXRJbnRlcmNlcHRvciIsInNsZWVwIiwibXMiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dCIsInRpbWVvdXRFcnJvciIsImFyZ3MiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0Iiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJvcGVuV2luZG93Iiwid2lucyIsInNyYyIsInciLCJCcm93c2VyV2luZG93IiwibGV2ZWwiLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJ3cmFwcGVySFRNTCIsImRhdGFVUkwiLCJsb2FkV2luZG93Iiwic3RhY2siLCJyZWNvcmQiLCJvdXREaXIiLCJmcHMiLCJkdXJhdGlvbiIsIndpdGhBdWRpbyIsIm1rZGlyIiwiYXVkaW9DYXB0dXJlIiwiYmdyYSIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImJ1ZmZlclNpemUiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJmcmFtZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsInNjaGVkdWxlV3JpdGUiLCJwYWludCIsIl9yIiwiY3VycmVudFRpbWUiLCJieXRlc1BlclJvdyIsImNyb3BwZWQiLCJ0aW1lU2luY2VMYXN0RnJhbWUiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiaiIsImF1ZGlvIiwicmVzdWx0Iiwibm9lcnIiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRElSIiwieiIsIm1ha2VDTEkiLCJwcm9ncmFtIiwib3B0cyIsImFwcCIsInByaW50RmVhdHVyZXMiXSwibWFwcGluZ3MiOiJpYUFLQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLHdCQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxPQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsS0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsTUFBQSxLQUFBLENBQUEsc0JBQUEsQ0FBQSxDQUFBLENBQUEsb0JBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQU1BLEdBQW1CLElBQ3ZCLE9BQU8sUUFBQSxDQUFhLEdBQUEsQ0FDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxDQUFBLENBQUUsRUFBRSxJQUFBLENBQzdCLFFBQUEsQ0FBUyxlQUFpQixRQUFBLENBQVMsYUFBQSxDQUFjLFFBQVEsV0FBQSxFQUFZLEdBQU0sUUFBQSxDQUMxRSxRQUFBLENBQVMsY0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLElBQUEsQ0FFaENDLENBQUFB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QUEsQ0FBSyxTQUFBLEVBQWEsQ0FBQSxDQUFBLENBQzdCLGFBQUEsQ0FBZUEsQ0FBQUEsQ0FBSyxhQUFBLEVBQWlCekwsRUFDdkMsQ0FBQyxFQUNILENBQUEsTUFBU3dGLENBQUFBLENBQUcsQ0FDVmpELENBQUFBLENBQU8sS0FBQSxDQUFNaUQsQ0FBQyxFQUNoQixDQUNGLENBQUMsQ0FBQSxDQUNILE1BQU1nRyxpQkFBQUEsQ0FBUSxVQUFBLENBQVdYLEVBQUFBLEVBQU8sRUFDbEMsQ0NoREEsT0FBQSxDQUFRLElBQUEsQ0FBSyxNQUFBLENBQVEsSUFBTWEsWUFBQUEsQ0FBSSxJQUFBLEVBQU0sQ0FBQSxDQUVyQyxJQUFNOUYsRUFBQUEsQ0FBTSxPQUFBLENBRVosU0FBUytGLEVBQUFBLEVBQWdCLENBQ3ZCcEosQ0FBQUEsQ0FBTyxLQUFBLENBQU1xRCxFQUFBQSxDQUFLLGVBQUEsQ0FBaUI4RixZQUFBQSxDQUFJLG1CQUFBLEVBQXFCLEVBQzlELENBRUFBLFlBQUFBLENBQUksSUFBQSxFQUFNLElBQUEsRUFBSyxDQUVmSCxFQUFBQSxDQUFRLE1BQU8sTUFBT3RHLENBQUFBLENBQVFVLENBQUFBLEdBQVksQ0FDeEMsR0FBSSxDQUNGK0YsWUFBQUEsQ0FBSSxFQUFBLENBQUcsaUJBQUEsQ0FBbUJDLEVBQWEsQ0FBQSxDQUN2QyxNQUFNRCxZQUFBQSxDQUFJLFNBQUEsRUFBVSxDQUNwQkMsRUFBQUEsRUFBYyxDQUNkLE1BQU05QyxFQUFBQSxDQUFPNUQsQ0FBQUEsQ0FBUVUsQ0FBTyxFQUM5QixDQUFBLE9BQUUsQ0FDQStGLFlBQUFBLENBQUksSUFBQSxHQUNOLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcInVybFwiO1xuXG5leHBvcnQgY29uc3QgYmFzZWRpciA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KFxuICBuYW1lOiBzdHJpbmcsXG4gIHBhcnNlcjogRW52UGFyc2VyPFQ+LFxuICBkZWZhdWx0VmFsdWU/OiBULFxuKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KFxuICBuYW1lOiBzdHJpbmcsXG4gIHBhcnNlcjogRW52UGFyc2VyPFQ+LFxuICBkZWZhdWx0VmFsdWU/OiBULFxuKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3ZhbHVlfSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBiYXNlZGlyIH0gZnJvbSBcIi4vYmFzZWRpclwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcHVwQXBwU2VhcmNoUGF0aHMgPSBbXG4gIGpvaW4oYmFzZWRpciwgXCJjanMvYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIGRpc3RcbiAgam9pbihiYXNlZGlyLCBcImFwcC5janNcIiksIC8vIHByb2Nlc3MgZnJvbSBkaXN0L2Nqc1xuICBqb2luKGJhc2VkaXIsIFwiLi4vLi4vY2pzL2FwcC5janNcIiksIC8vIHByb2Nlc3MgZnJvbSBzcmNcbl07XG5leHBvcnQgY29uc3QgcHVwQXBwUGF0aCA9IHB1cEFwcFNlYXJjaFBhdGhzLmZpbmQoZXhpc3RzU3luYykhO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcbmV4cG9ydCBjb25zdCBwdXBVc2VJbm5lclByb3h5ID0gZW52W1wiUFVQX1VTRV9JTk5FUl9QUk9YWVwiXSA9PT0gXCIxXCI7XG5leHBvcnQgY29uc3QgcHVwRkZtcGVnUGF0aCA9IGVudltcIlBVUF9GRk1QRUdfUEFUSFwiXSA/PyBgZmZtcGVnYDtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB7IENoaWxkUHJvY2VzcywgdHlwZSBTZXJpYWxpemFibGUgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBwdXBMb2dMZXZlbCA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBwdXBMb2dMZXZlbCA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IHB1cExvZ0xldmVsID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IHB1cExvZ0xldmVsID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1ZyhtZXNzYWdlLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2Uuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2FybihtZXNzYWdlLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMTAuXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGFyY2gsIHBsYXRmb3JtIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGJhc2VkaXIgfSBmcm9tIFwiLi4vYmFzZS9iYXNlZGlyXCI7XG5cbmNvbnN0IHJ1c3RQYXRoID0gYHJ1c3QvJHtwbGF0Zm9ybSgpfS0ke2FyY2goKX0ubm9kZWA7XG5cbmNvbnN0IG5hdGl2ZVNlYXJjaFBhdGhzID0gW1xuICBqb2luKGJhc2VkaXIsIGAuLi8uLi8ke3J1c3RQYXRofWApLCAvLyBwcm9jZXNzIHN0YXJ0IGZyb20gc3JjXG4gIGpvaW4oYmFzZWRpciwgYC4uLyR7cnVzdFBhdGh9YCksIC8vIHByb2Nlc3Mgc3RhcnQgZnJvbSBkaXN0XG5dO1xuY29uc3QgbW9kID0gcmVxdWlyZShuYXRpdmVTZWFyY2hQYXRocy5maW5kKGV4aXN0c1N5bmMpISk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRml4ZWRCdWZmZXJXcml0ZXIge1xuICBuZXcgKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBidWZmZXJTaXplOiBudW1iZXIsXG4gICAgcXVldWVEZXB0aD86IG51bWJlcixcbiAgKTogRml4ZWRCdWZmZXJXcml0ZXI7XG5cbiAgd3JpdGUoYnVmZmVyOiBCdWZmZXIpOiB2b2lkO1xuXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBjb25zdCBGaXhlZEJ1ZmZlcldyaXRlciA9IG1vZC5GaXhlZEJ1ZmZlcldyaXRlciBhcyBGaXhlZEJ1ZmZlcldyaXRlcjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBpcGNNYWluLCBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBybSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRml4ZWRCdWZmZXJXcml0ZXIgfSBmcm9tIFwiLi4vcnVzdC9saWJcIjtcblxuY29uc3QgQVVESU9fQ0FQVFVSRV9TQ1JJUFQgPSBgXG4oZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18pIHJldHVybjtcbiAgd2luZG93Ll9fcHVwX2F1ZGlvX2NhcHR1cmluZ19fID0gdHJ1ZTtcblxuICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICBjb25zdCBjYXB0dXJlZENvbnRleHRzID0gbmV3IFdlYWtTZXQoKTtcbiAgY29uc3Qgc291cmNlZEVsZW1lbnRzID0gbmV3IFdlYWtTZXQoKTtcbiAgbGV0IG1ldGFTZW50ID0gZmFsc2U7XG5cbiAgY29uc3Qgb3JpZ0NyZWF0ZU1FUyA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlO1xuICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgc291cmNlZEVsZW1lbnRzLmFkZChlbCk7XG4gICAgcmV0dXJuIG9yaWdDcmVhdGVNRVMuY2FsbCh0aGlzLCBlbCk7XG4gIH07XG5cbiAgY29uc3Qgb3JpZ0Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG4gIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKGRlc3QsIG91dElkeCwgaW5JZHgpIHtcbiAgICBjb25zdCBjYXB0dXJlTm9kZSA9IGRlc3Q/LmNvbnRleHQ/Ll9fcHVwX2NhcHR1cmVOb2RlX187XG4gICAgaWYgKGNhcHR1cmVOb2RlICYmIGRlc3QgPT09IGRlc3QuY29udGV4dC5kZXN0aW5hdGlvbiAmJiB0aGlzICE9PSBjYXB0dXJlTm9kZSkge1xuICAgICAgb3JpZ0Nvbm5lY3QuY2FsbCh0aGlzLCBjYXB0dXJlTm9kZSwgb3V0SWR4LCBpbklkeCk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGRlc3QsIG91dElkeCwgaW5JZHgpO1xuICB9O1xuXG4gIGNvbnN0IE9yaWdBQyA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcbiAgaWYgKCFPcmlnQUMpIHJldHVybjtcblxuICBmdW5jdGlvbiBQYXRjaGVkQUMoKSB7XG4gICAgY29uc3QgY3R4ID0gbmV3IE9yaWdBQyguLi5hcmd1bWVudHMpO1xuICAgIGlmICghY2FwdHVyZWRDb250ZXh0cy5oYXMoY3R4KSkge1xuICAgICAgY2FwdHVyZWRDb250ZXh0cy5hZGQoY3R4KTtcbiAgICAgIGlmICghbWV0YVNlbnQpIHtcbiAgICAgICAgbWV0YVNlbnQgPSB0cnVlO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1tZXRhJywgeyBzYW1wbGVSYXRlOiBjdHguc2FtcGxlUmF0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlU2NyaXB0UHJvY2Vzc29yKDQwOTYsIDIsIDIpO1xuICAgICAgbm9kZS5vbmF1ZGlvcHJvY2VzcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IEwgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgICAgICBjb25zdCBSID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShMLmxlbmd0aCAqIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvdXRbaSAqIDJdID0gTFtpXTtcbiAgICAgICAgICBvdXRbaSAqIDIgKyAxXSA9IFJbaV07XG4gICAgICAgIH1cbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnYXVkaW8tY2h1bmsnLCBCdWZmZXIuZnJvbShvdXQuYnVmZmVyKSk7XG4gICAgICB9O1xuICAgICAgbm9kZS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICBjdHguX19wdXBfY2FwdHVyZU5vZGVfXyA9IG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbiAgUGF0Y2hlZEFDLnByb3RvdHlwZSA9IE9yaWdBQy5wcm90b3R5cGU7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihQYXRjaGVkQUMsIE9yaWdBQyk7XG4gIHdpbmRvdy5BdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG4gIGlmICgnd2Via2l0QXVkaW9Db250ZXh0JyBpbiB3aW5kb3cpIHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG5cbiAgY29uc3Qgb3JpZ1BsYXkgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5O1xuICBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9fcHVwX2NhcHR1cmVkX18pIHtcbiAgICAgIHRoaXMuX19wdXBfY2FwdHVyZWRfXyA9IHRydWU7XG4gICAgICBjb25zdCBlbCA9IHRoaXM7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzb3VyY2VkRWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICAgIGNvbnN0IGN0eCA9IG5ldyBQYXRjaGVkQUMoKTtcbiAgICAgICAgICBjdHguY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsKS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ1BsYXkuY2FsbCh0aGlzKTtcbiAgfTtcbn0pKCk7XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZSB7XG4gIHNhbXBsZVJhdGU/OiBudW1iZXI7XG4gIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEF1ZGlvQ2FwdHVyZShcbiAgcGNtUGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxBdWRpb0NhcHR1cmU+IHtcbiAgY29uc3QgcHJlbG9hZFBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX2F1ZGlvX3ByZWxvYWRfJHtyYW5kb21VVUlEKCl9LmpzYCk7XG4gIGF3YWl0IHdyaXRlRmlsZShwcmVsb2FkUGF0aCwgQVVESU9fQ0FQVFVSRV9TQ1JJUFQpO1xuICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnJlZ2lzdGVyUHJlbG9hZFNjcmlwdCh7XG4gICAgdHlwZTogXCJmcmFtZVwiLFxuICAgIGlkOiBcInB1cC1hdWRpb1wiLFxuICAgIGZpbGVQYXRoOiBwcmVsb2FkUGF0aCxcbiAgfSk7XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEZpeGVkQnVmZmVyV3JpdGVyKHBjbVBhdGgsIDQwOTYgKiAyICogNCk7XG4gIGNvbnN0IGNhcHR1cmU6IEF1ZGlvQ2FwdHVyZSA9IHtcbiAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXG4gICAgYXN5bmMgdGVhcmRvd24oKSB7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLWNodW5rXCIpO1xuICAgICAgaXBjTWFpbi5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJhdWRpby1tZXRhXCIpO1xuICAgICAgYXdhaXQgd3JpdGVyLmNsb3NlKCk7XG4gICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnVucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KFwicHVwLWF1ZGlvXCIpO1xuICAgICAgYXdhaXQgcm0ocHJlbG9hZFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcblxuICBpcGNNYWluLm9uY2UoXCJhdWRpby1tZXRhXCIsIChfZSwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNhcHR1cmUuc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgfSk7XG4gIGlwY01haW4ub24oXCJhdWRpby1jaHVua1wiLCAoX2UsIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgd3JpdGVyLndyaXRlKGJ1ZmZlcik7XG4gIH0pO1xuICByZXR1cm4gY2FwdHVyZTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV3JhcHBlckhUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28geyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAxcHg7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfcmVjb3JkaW5nX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3JlY29yZGluZ19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUaW1lc3RhbXAoXG4gIGJpdG1hcDogQnVmZmVyLFxuICBzaXplOiBTaXplLFxuKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTeW5jKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIlJ1bnRpbWUuZXZhbHVhdGVcIiwge1xuICAgIGV4cHJlc3Npb246IGB3aW5kb3cuX19wdXBfc3RhcnRfcmVjb3JkaW5nX18oKWAsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN5bmMoY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdG9wX3JlY29yZGluZ19fKClgLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmNvbnN0IFNVUFBPUlRFRF9QUk9UT0NPTFMgPSBbXCJmaWxlOlwiLCBcImh0dHA6XCIsIFwiaHR0cHM6XCIsIFwiZGF0YTpcIl07XG5jb25zdCBTT1VSQ0VfUEFUVEVSTiA9IC9eKGZpbGU6fGh0dHBzPzp8ZGF0YTopLztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSFRNTChzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoU09VUkNFX1BBVFRFUk4udGVzdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBzb3VyY2Uuc3BsaXQoXCI6XCIpWzBdICsgXCI6XCI7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBWb2lkRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF9lbmRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5kZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICBmbigpXG4gICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2gocnVuKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5kKCkge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbmRlZCA9IHRydWU7XG4gICAgd2hpbGUgKHRoaXMuX2FjdGl2ZSA+IDAgfHwgdGhpcy5wZW5kaW5nID4gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4vd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7XG4gIHNvdXJjZSxcbiAgd2luZG93LFxuICB1c2VJbm5lclByb3h5LFxufTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMTApO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnRcbiAgICAgIC53YWl0KHsgdGltZW91dDogMTBfMDAwLCBvblRpbWVvdXQgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhaXQoa2V5LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmVycm9yKFRBRywgYGVycm9yOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgZXJyb3I6IGRldGFpbHMuZXJyb3IsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoXG4gIGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsXG4gIG1zOiBudW1iZXIsXG4pIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oe1xuICBmbixcbiAgbWF4QXR0ZW1wdHMgPSAzLFxuICB0aW1lb3V0LFxufTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkV3JhcHBlckhUTUwgfSBmcm9tIFwiLi9mcmFtZV9zeW5jXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4vcmV0cnlcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2god2luOiBCcm93c2VyV2luZG93LCBhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJsb2FkIHdpbmRvdyB0aW1lb3V0XCIpKSxcbiAgICAgIDMwXzAwMCxcbiAgICApO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmluaXNoLWxvYWRcIiwgKCkgPT4gZG9uZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHt1cmx9OiBbJHtjb2RlfV0gJHtkZXNjfWApKSxcbiAgICApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYHJlbmRlcmVyIGNyYXNoZWQ6ICR7ZXhpdENvZGV9LCAke3JlYXNvbn1gKSksXG4gICAgKTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coXG4gIHdpbnM6IEJyb3dzZXJXaW5kb3dbXSxcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSBvcHRpb25zO1xuXG4gIGxldCBzcmMgPSBzb3VyY2U7XG4gIGlmICh1c2VJbm5lclByb3h5KSB7XG4gICAgc3JjID0gcHJveGllZFVybChzb3VyY2UpO1xuICB9XG5cbiAgd2lucy5mb3JFYWNoKCh3KSA9PiB7XG4gICAgdy53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBkZXN0cm95IHdpbmRvdzpgLCB3LmlkKTtcbiAgfSk7XG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgIG9mZnNjcmVlbjogdHJ1ZSxcbiAgICAgIGJhY2tncm91bmRUaHJvdHRsaW5nOiBmYWxzZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5Xb3JrZXI6IHRydWUsXG4gICAgICBjb250ZXh0SXNvbGF0aW9uOiBmYWxzZSxcbiAgICAgIHdlYlNlY3VyaXR5OiBmYWxzZSxcbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xuICBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93OiB3aW4sIHVzZUlubmVyUHJveHkgfSk7XG4gIHdpbnMuc3BsaWNlKDApLmZvckVhY2goKHcpID0+IHcuZGVzdHJveSgpKTtcbiAgd2lucy5wdXNoKHdpbik7XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFxuICAgIFwiY29uc29sZS1tZXNzYWdlXCIsXG4gICAgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICAgIGlmIChsZXZlbCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihUQUcsIFwiY29uc29sZTpcIiwge1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgbGluZU51bWJlcixcbiAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgY29uc3Qgd3JhcHBlckhUTUwgPSBidWlsZFdyYXBwZXJIVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICBjb25zdCBkYXRhVVJMID0gYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQod3JhcHBlckhUTUwpfWA7XG4gIGF3YWl0IHdhaXRGb3JGaW5pc2god2luLCAoKSA9PiB3aW4ubG9hZFVSTChkYXRhVVJMKSk7XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zLFxuKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luczogQnJvd3NlcldpbmRvd1tdID0gW107XG4gICAgY29uc3Qgd2luID0gYXdhaXQgdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSkoXG4gICAgICB3aW5zLFxuICAgICAgc291cmNlLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2god2luLCAoKSA9PiB3aW4ucmVsb2FkKCkpO1xuICAgIHJldHVybiB3aW47XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIGNvbnN0IGRlc2MgPSB7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeShkZXNjKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgdHlwZSBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGaXhlZEJ1ZmZlcldyaXRlciB9IGZyb20gXCIuLi9ydXN0L2xpYlwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUgfSBmcm9tIFwiLi9hdWRpb19jYXB0dXJlXCI7XG5pbXBvcnQgeyBkZWNvZGVUaW1lc3RhbXAsIHN0YXJ0U3luYywgc3RvcFN5bmMgfSBmcm9tIFwiLi9mcmFtZV9zeW5jXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4vaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkT3B0aW9ucywgUmVjb3JkUmVzdWx0IH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlY29yZF1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29yZChcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6IDAlYCk7XG4gIGNvbnN0IHsgb3V0RGlyLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8gfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgbWtkaXIob3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBwY21QYXRoID0gam9pbihvdXREaXIsIFwib3V0cHV0LnBjbVwiKTtcbiAgY29uc3QgYXVkaW9DYXB0dXJlID0gd2l0aEF1ZGlvID8gYXdhaXQgc2V0dXBBdWRpb0NhcHR1cmUocGNtUGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyhzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gIGlmICghd2luLndlYkNvbnRlbnRzLmlzUGFpbnRpbmcoKSkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gIH1cblxuICBjb25zdCBiZ3JhID0gam9pbihvdXREaXIsIFwib3V0cHV0LmJncmFcIik7XG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGJ1ZmZlclNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEZpeGVkQnVmZmVyV3JpdGVyKGJncmEsIGJ1ZmZlclNpemUsIGZwcyk7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBmcmFtZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzY2hlZHVsZVdyaXRlID0gKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIHRyeSB7XG4gICAgICB3cml0ZXIud3JpdGUoYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZnJhbWVFcnJvciA/Pz0gZXJyb3IgYXMgRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGZyYW1lRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZnJhbWVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVUaW1lc3RhbXAoYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlc1BlclJvdyA9IHdpZHRoICogNDtcbiAgICBjb25zdCBjcm9wcGVkID0gYml0bWFwLnN1YmFycmF5KDAsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVXcml0ZShjcm9wcGVkKTtcbiAgICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RGcmFtZSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgIGlmICh0aW1lU2luY2VMYXN0RnJhbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RGcmFtZSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICBzY2hlZHVsZVdyaXRlKGNyb3BwZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZVNpbmNlTGFzdEZyYW1lIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgIHNjaGVkdWxlV3JpdGUoY3JvcHBlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAke01hdGgucm91bmQocHJvZ3Jlc3MpfSVgKTtcbiAgICB9XG4gIH07XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICBhd2FpdCBzdGFydFN5bmMoY2RwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4gKFtyZXNvbHZlciwgcmVqZWN0ZXJdID0gW3IsIGpdKSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc3RvcFN5bmMoY2RwKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpO1xuICAgIGF3YWl0IGF1ZGlvQ2FwdHVyZT8udGVhcmRvd24oKTtcbiAgfVxuXG4gIGlmIChmcmFtZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBmcmFtZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYXVkaW8gPSBhdWRpb0NhcHR1cmU/LnNhbXBsZVJhdGVcbiAgICAgID8geyBwY21QYXRoLCBzYW1wbGVSYXRlOiBhdWRpb0NhcHR1cmUuc2FtcGxlUmF0ZSB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZFJlc3VsdCA9IHsgb3B0aW9ucywgd3JpdHRlbiwgYmdyYSwgYXVkaW8gfTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihvdXREaXIsIFwicmVjb3JkLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAxMDAlLCAke3dyaXR0ZW59IGZyYW1lcyB3cml0dGVuYCk7XG4gIH0gZmluYWxseSB7XG4gICAgd2luLmNsb3NlKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgcmV0dXJuIHsgcHJvY2VzczogcHJvYywgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TcGVjIHtcbiAgZnBzOiBudW1iZXI7XG4gIGZyYW1lczogbnVtYmVyO1xuICBzaXplOiBTaXplO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRmlsZXMge1xuICBtcDQ/OiBzdHJpbmc7XG4gIHdlYm0/OiBzdHJpbmc7XG4gIG1vdj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZpbGVzV2l0aENvdmVyIGV4dGVuZHMgVmlkZW9GaWxlcyB7XG4gIGNvdmVyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9ESVIgPSBcIm91dFwiO1xuXG5leHBvcnQgY29uc3QgUmVjb3JkU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoREVGQVVMVF9EVVJBVElPTilcbiAgICAuZGVzY3JpYmUoXCJSZWNvcmRpbmcgZHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KERFRkFVTFRfV0lEVEgpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoREVGQVVMVF9IRUlHSFQpXG4gICAgLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KERFRkFVTFRfRlBTKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQWxwaGFDaGFubmVsOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLmRlc2NyaWJlKFwiT3V0cHV0IHdpdGggYWxwaGEgY2hhbm5lbFwiKSxcbiAgd2l0aEF1ZGlvOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXREaXI6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KERFRkFVTFRfT1VUX0RJUilcbiAgICAuZGVzY3JpYmUoXCJPdXRwdXQgZGlyZWN0b3J5XCIpLFxuICB1c2VJbm5lclByb3h5OiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRPcHRpb25zIHtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICB3aXRoQWxwaGFDaGFubmVsOiBib29sZWFuO1xuICB3aXRoQXVkaW86IGJvb2xlYW47XG4gIG91dERpcjogc3RyaW5nO1xuICB1c2VJbm5lclByb3h5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvU3BlYyB7XG4gIHBjbVBhdGg6IHN0cmluZztcbiAgc2FtcGxlUmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgYmdyYTogc3RyaW5nO1xuICBhdWRpbz86IEF1ZGlvU3BlYztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9EVVJBVElPTixcbiAgREVGQVVMVF9GUFMsXG4gIERFRkFVTFRfSEVJR0hULFxuICBERUZBVUxUX09VVF9ESVIsXG4gIERFRkFVTFRfV0lEVEgsXG4gIHR5cGUgUmVjb3JkT3B0aW9ucyxcbn0gZnJvbSBcIi4vYmFzZS9zY2hlbWFcIjtcblxuZXhwb3J0IHR5cGUgQ0xJQ2FsbGJhY2sgPSAoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zLFxuKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBDTElDYWxsYmFjaykge1xuICBwcm9ncmFtXG4gICAgLm5hbWUobmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIOaIliBkYXRhOiBVUklcIilcbiAgICAub3B0aW9uKFwiLXcsIC0td2lkdGggPG51bWJlcj5cIiwgXCLop4bpopHlrr3luqZcIiwgYCR7REVGQVVMVF9XSURUSH1gKVxuICAgIC5vcHRpb24oXCItaCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgXCLop4bpopHpq5jluqZcIiwgYCR7REVGQVVMVF9IRUlHSFR9YClcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIFwi5bin546HXCIsIGAke0RFRkFVTFRfRlBTfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIFwi5b2V5Yi25pe26ZW/77yI56eS77yJXCIsIGAke0RFRkFVTFRfRFVSQVRJT059YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWRpciA8cGF0aD5cIiwgXCLovpPlh7rnm67lvZVcIiwgYCR7REVGQVVMVF9PVVRfRElSfWApXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYWxwaGEtY2hhbm5lbFwiLCBcIui+k+WHuuWMheWQqyBhbHBoYSDpgJrpgZPnmoTop4bpopFcIiwgZmFsc2UpXG4gICAgLm9wdGlvbihcIi1zLCAtLXdpdGgtYXVkaW9cIiwgXCLmjZXojrflubbmt7flhaXpn7PpopFcIiwgZmFsc2UpXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS11c2UtaW5uZXItcHJveHlcIixcbiAgICAgIFwi5L2/55SoIEIg56uZ5YaF572R5Luj55CG5Yqg6YCf6LWE5rqQ6K6/6ZeuXCIsXG4gICAgICBwdXBVc2VJbm5lclByb3h5LFxuICAgIClcbiAgICAuYWN0aW9uKGFzeW5jIChzb3VyY2U6IHN0cmluZywgb3B0cykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2FsbGJhY2soc291cmNlLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX1dJRFRIKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX0hFSUdIVCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfRlBTKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX0RVUkFUSU9OKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXREaXI6IG9wdHMub3V0RGlyID8/IERFRkFVTFRfT1VUX0RJUixcbiAgICAgICAgICB3aXRoQWxwaGFDaGFubmVsOiBvcHRzLndpdGhBbHBoYUNoYW5uZWwgPz8gZmFsc2UsXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBmYWxzZSxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gcHVwVXNlSW5uZXJQcm94eSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgYXBwIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHJlY29yZCB9IGZyb20gXCIuL2Jhc2UvcmVjb3JkXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbnByb2Nlc3Mub25jZShcImV4aXRcIiwgKCkgPT4gYXBwLnF1aXQoKSk7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5hcHAuZG9jaz8uaGlkZSgpO1xuXG5tYWtlQ0xJKFwiYXBwXCIsIGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgdHJ5IHtcbiAgICBhcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG4gICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICBhd2FpdCByZWNvcmQoc291cmNlLCBvcHRpb25zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhcHAucXVpdCgpO1xuICB9XG59KTtcbiJdfQ==
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMzNlMjQ2NTBmNWFlZDE3YS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vLi4vc3JjL2Jhc2UvYmFzZWRpci50cyIsIi4uLy4uL3NyYy9iYXNlL2Vudi50cyIsIi4uLy4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uLy4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uLy4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi8uLi9zcmMvcnVzdC9saWIudHMiLCIuLi8uLi9zcmMvYmFzZS9hdWRpb19jYXB0dXJlLnRzIiwiLi4vLi4vc3JjL2Jhc2UvZnJhbWVfc3luYy50cyIsIi4uLy4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vLi4vc3JjL2Jhc2UvaHRtbF9jaGVjay50cyIsIi4uLy4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi8uLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uLy4uL3NyYy9iYXNlL25ldHdvcmsudHMiLCIuLi8uLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi8uLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uLy4uL3NyYy9iYXNlL3dpbmRvdy50cyIsIi4uLy4uL3NyYy9iYXNlL3JlY29yZC50cyIsIi4uLy4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uLy4uL3NyYy9iYXNlL3NjaGVtYS50cyIsIi4uLy4uL3NyYy9jb21tb24udHMiLCIuLi8uLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwiYmFzZWRpciIsImRpcm5hbWUiLCJmaWxlVVJMVG9QYXRoIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsInZhbHVlIiwibnVtIiwicHVwQXBwU2VhcmNoUGF0aHMiLCJqb2luIiwiZXhpc3RzU3luYyIsImVudiIsInB1cExvZ0xldmVsIiwicHVwVXNlSW5uZXJQcm94eSIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsInJ1c3RQYXRoIiwicGxhdGZvcm0iLCJhcmNoIiwibmF0aXZlU2VhcmNoUGF0aHMiLCJtb2QiLCJfX3JlcXVpcmUiLCJGaXhlZEJ1ZmZlcldyaXRlciIsIkFVRElPX0NBUFRVUkVfU0NSSVBUIiwic2V0dXBBdWRpb0NhcHR1cmUiLCJwY21QYXRoIiwicHJlbG9hZFBhdGgiLCJ0bXBkaXIiLCJyYW5kb21VVUlEIiwid3JpdGVGaWxlIiwic2Vzc2lvbiIsIndyaXRlciIsImNhcHR1cmUiLCJpcGNNYWluIiwicm0iLCJfZSIsImJ1ZmZlciIsImJ1aWxkV3JhcHBlckhUTUwiLCJ0YXJnZXRVUkwiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJkZWNvZGVUaW1lc3RhbXAiLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN5bmMiLCJjZHAiLCJzdG9wU3luYyIsImlzRW1wdHkiLCJpbWFnZSIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsInNvdXJjZSIsInByb3RvY29sIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJmbiIsInJ1biIsInYiLCJlIiwiciIsIldhaXRhYmxlRXZlbnQiLCJvcHRpb25zIiwiVEFHIiwibWFwIiwicHJveGllZFVybCIsInVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsInJlcSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwidW5zZXRJbnRlcmNlcHRvciIsInNsZWVwIiwibXMiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dCIsInRpbWVvdXRFcnJvciIsImFyZ3MiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0Iiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJvcGVuV2luZG93Iiwid2lucyIsInNyYyIsInciLCJCcm93c2VyV2luZG93IiwibGV2ZWwiLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJ3cmFwcGVySFRNTCIsImRhdGFVUkwiLCJsb2FkV2luZG93Iiwic3RhY2siLCJyZWNvcmQiLCJvdXREaXIiLCJmcHMiLCJkdXJhdGlvbiIsIndpdGhBdWRpbyIsIm1rZGlyIiwiYXVkaW9DYXB0dXJlIiwiYmdyYSIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImJ1ZmZlclNpemUiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJmcmFtZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsInNjaGVkdWxlV3JpdGUiLCJwYWludCIsIl9yIiwiY3VycmVudFRpbWUiLCJieXRlc1BlclJvdyIsImNyb3BwZWQiLCJ0aW1lU2luY2VMYXN0RnJhbWUiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiaiIsImF1ZGlvIiwicmVzdWx0Iiwibm9lcnIiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRElSIiwieiIsIm1ha2VDTEkiLCJwcm9ncmFtIiwib3B0cyIsImFwcCIsInByaW50RmVhdHVyZXMiXSwibWFwcGluZ3MiOiJpYUFLQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLHdCQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxPQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsS0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsTUFBQSxLQUFBLENBQUEsc0JBQUEsQ0FBQSxDQUFBLENBQUEsb0JBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQU1BLEdBQW1CLElBQ3ZCLE9BQU8sUUFBQSxDQUFhLEdBQUEsQ0FDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxDQUFBLENBQUUsRUFBRSxJQUFBLENBQzdCLFFBQUEsQ0FBUyxlQUFpQixRQUFBLENBQVMsYUFBQSxDQUFjLFFBQVEsV0FBQSxFQUFZLEdBQU0sUUFBQSxDQUMxRSxRQUFBLENBQVMsY0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLElBQUEsQ0FFaENDLENBQUFB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YSxDQUFBLENBQUEsQ0FDN0IsYUFBQSxDQUFlQSxDQUFBQSxDQUFLLGFBQUEsRUFBaUJ6TCxFQUN2QyxDQUFDLEVBQ0gsQ0FBQSxNQUFTd0YsQ0FBQUEsQ0FBRyxDQUNWakQsQ0FBQUEsQ0FBTyxLQUFBLENBQU1pRCxDQUFDLEVBQ2hCLENBQ0YsQ0FBQyxDQUFBLENBQ0gsTUFBTWdHLGlCQUFBQSxDQUFRLFVBQUEsQ0FBV1gsRUFBQUEsRUFBTyxFQUNsQyxDQ2hEQSxPQUFBLENBQVEsSUFBQSxDQUFLLE1BQUEsQ0FBUSxJQUFNYSxZQUFBQSxDQUFJLElBQUEsRUFBTSxDQUFBLENBRXJDLElBQU05RixFQUFBQSxDQUFNLE9BQUEsQ0FFWixTQUFTK0YsRUFBQUEsRUFBZ0IsQ0FDdkJwSixDQUFBQSxDQUFPLEtBQUEsQ0FBTXFELEVBQUFBLENBQUssZUFBQSxDQUFpQjhGLFlBQUFBLENBQUksbUJBQUEsRUFBcUIsRUFDOUQsQ0FFQUEsWUFBQUEsQ0FBSSxJQUFBLEVBQU0sSUFBQSxFQUFLLENBRWZILEVBQUFBLENBQVEsTUFBTyxNQUFPdEcsQ0FBQUEsQ0FBUVUsQ0FBQUEsR0FBWSxDQUN4QyxHQUFJLENBQ0YrRixZQUFBQSxDQUFJLEVBQUEsQ0FBRyxpQkFBQSxDQUFtQkMsRUFBYSxDQUFBLENBQ3ZDLE1BQU1ELFlBQUFBLENBQUksU0FBQSxFQUFVLENBQ3BCQyxFQUFBQSxFQUFjLENBQ2QsTUFBTTlDLEVBQUFBLENBQU81RCxDQUFBQSxDQUFRVSxDQUFPLEVBQzlCLENBQUEsT0FBRSxDQUNBK0YsWUFBQUEsQ0FBSSxJQUFBLEdBQ04sQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjb25zdCBiYXNlZGlyID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcGFyc2VyOiBFbnZQYXJzZXI8VD4sXG4gIGRlZmF1bHRWYWx1ZT86IFQsXG4pOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcGFyc2VyOiBFbnZQYXJzZXI8VD4sXG4gIGRlZmF1bHRWYWx1ZT86IFQsXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGJhc2VkaXIgfSBmcm9tIFwiLi9iYXNlZGlyXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCBwdXBBcHBTZWFyY2hQYXRocyA9IFtcbiAgam9pbihiYXNlZGlyLCBcImNqcy9hcHAuY2pzXCIpLCAvLyBwcm9jZXNzIGZyb20gZGlzdFxuICBqb2luKGJhc2VkaXIsIFwiYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIGRpc3QvY2pzXG4gIGpvaW4oYmFzZWRpciwgXCIuLi8uLi9janMvYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIHNyY1xuXTtcbmV4cG9ydCBjb25zdCBwdXBBcHBQYXRoID0gcHVwQXBwU2VhcmNoUGF0aHMuZmluZChleGlzdHNTeW5jKSE7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBGRm1wZWdQYXRoID0gZW52W1wiUFVQX0ZGTVBFR19QQVRIXCJdID8/IGBmZm1wZWdgO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVHUFUgPSBlbnZbXCJQVVBfRElTQUJMRV9HUFVcIl0gPT09IFwiMVwiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCB0eXBlIFNlcmlhbGl6YWJsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5jbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IHB1cExvZ0xldmVsID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IHB1cExvZ0xldmVsID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogcHVwTG9nTGV2ZWwgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogcHVwTG9nTGV2ZWwgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1lc3NhZ2Uuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obWVzc2FnZS5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1lc3NhZ2Uuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1lc3NhZ2Uuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIgfCBTZXJpYWxpemFibGUpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJtZXNzYWdlXCIsIGRpc3BhdGNoKVxuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8xMC5cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgYXJjaCwgcGxhdGZvcm0gfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgYmFzZWRpciB9IGZyb20gXCIuLi9iYXNlL2Jhc2VkaXJcIjtcblxuY29uc3QgcnVzdFBhdGggPSBgcnVzdC8ke3BsYXRmb3JtKCl9LSR7YXJjaCgpfS5ub2RlYDtcblxuY29uc3QgbmF0aXZlU2VhcmNoUGF0aHMgPSBbXG4gIGpvaW4oYmFzZWRpciwgYC4uLy4uLyR7cnVzdFBhdGh9YCksIC8vIHByb2Nlc3Mgc3RhcnQgZnJvbSBzcmNcbiAgam9pbihiYXNlZGlyLCBgLi4vJHtydXN0UGF0aH1gKSwgLy8gcHJvY2VzcyBzdGFydCBmcm9tIGRpc3Rcbl07XG5jb25zdCBtb2QgPSByZXF1aXJlKG5hdGl2ZVNlYXJjaFBhdGhzLmZpbmQoZXhpc3RzU3luYykhKTtcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZEJ1ZmZlcldyaXRlciB7XG4gIG5ldyAoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJ1ZmZlclNpemU6IG51bWJlcixcbiAgICBxdWV1ZURlcHRoPzogbnVtYmVyLFxuICApOiBGaXhlZEJ1ZmZlcldyaXRlcjtcblxuICB3cml0ZShidWZmZXI6IEJ1ZmZlcik6IHZvaWQ7XG5cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGNvbnN0IEZpeGVkQnVmZmVyV3JpdGVyID0gbW9kLkZpeGVkQnVmZmVyV3JpdGVyIGFzIEZpeGVkQnVmZmVyV3JpdGVyO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGlwY01haW4sIHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGaXhlZEJ1ZmZlcldyaXRlciB9IGZyb20gXCIuLi9ydXN0L2xpYlwiO1xuXG5jb25zdCBBVURJT19DQVBUVVJFX1NDUklQVCA9IGBcbihmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF9hdWRpb19jYXB0dXJpbmdfXykgcmV0dXJuO1xuICB3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18gPSB0cnVlO1xuXG4gIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gIGNvbnN0IGNhcHR1cmVkQ29udGV4dHMgPSBuZXcgV2Vha1NldCgpO1xuICBjb25zdCBzb3VyY2VkRWxlbWVudHMgPSBuZXcgV2Vha1NldCgpO1xuICBsZXQgbWV0YVNlbnQgPSBmYWxzZTtcblxuICBjb25zdCBvcmlnQ3JlYXRlTUVTID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2U7XG4gIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlID0gZnVuY3Rpb24oZWwpIHtcbiAgICBzb3VyY2VkRWxlbWVudHMuYWRkKGVsKTtcbiAgICByZXR1cm4gb3JpZ0NyZWF0ZU1FUy5jYWxsKHRoaXMsIGVsKTtcbiAgfTtcblxuICBjb25zdCBvcmlnQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcbiAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oZGVzdCwgb3V0SWR4LCBpbklkeCkge1xuICAgIGNvbnN0IGNhcHR1cmVOb2RlID0gZGVzdD8uY29udGV4dD8uX19wdXBfY2FwdHVyZU5vZGVfXztcbiAgICBpZiAoY2FwdHVyZU5vZGUgJiYgZGVzdCA9PT0gZGVzdC5jb250ZXh0LmRlc3RpbmF0aW9uICYmIHRoaXMgIT09IGNhcHR1cmVOb2RlKSB7XG4gICAgICBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGNhcHR1cmVOb2RlLCBvdXRJZHgsIGluSWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdDb25uZWN0LmNhbGwodGhpcywgZGVzdCwgb3V0SWR4LCBpbklkeCk7XG4gIH07XG5cbiAgY29uc3QgT3JpZ0FDID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuICBpZiAoIU9yaWdBQykgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIFBhdGNoZWRBQygpIHtcbiAgICBjb25zdCBjdHggPSBuZXcgT3JpZ0FDKC4uLmFyZ3VtZW50cyk7XG4gICAgaWYgKCFjYXB0dXJlZENvbnRleHRzLmhhcyhjdHgpKSB7XG4gICAgICBjYXB0dXJlZENvbnRleHRzLmFkZChjdHgpO1xuICAgICAgaWYgKCFtZXRhU2VudCkge1xuICAgICAgICBtZXRhU2VudCA9IHRydWU7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJ2F1ZGlvLW1ldGEnLCB7IHNhbXBsZVJhdGU6IGN0eC5zYW1wbGVSYXRlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGN0eC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoNDA5NiwgMiwgMik7XG4gICAgICBub2RlLm9uYXVkaW9wcm9jZXNzID0gKGUpID0+IHtcbiAgICAgICAgY29uc3QgTCA9IGUuaW5wdXRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgICAgIGNvbnN0IFIgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDEpO1xuICAgICAgICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KEwubGVuZ3RoICogMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG91dFtpICogMl0gPSBMW2ldO1xuICAgICAgICAgIG91dFtpICogMiArIDFdID0gUltpXTtcbiAgICAgICAgfVxuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1jaHVuaycsIEJ1ZmZlci5mcm9tKG91dC5idWZmZXIpKTtcbiAgICAgIH07XG4gICAgICBub2RlLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgIGN0eC5fX3B1cF9jYXB0dXJlTm9kZV9fID0gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuICBQYXRjaGVkQUMucHJvdG90eXBlID0gT3JpZ0FDLnByb3RvdHlwZTtcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFBhdGNoZWRBQywgT3JpZ0FDKTtcbiAgd2luZG93LkF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcbiAgaWYgKCd3ZWJraXRBdWRpb0NvbnRleHQnIGluIHdpbmRvdykgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcblxuICBjb25zdCBvcmlnUGxheSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXk7XG4gIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX19wdXBfY2FwdHVyZWRfXykge1xuICAgICAgdGhpcy5fX3B1cF9jYXB0dXJlZF9fID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVsID0gdGhpcztcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXNvdXJjZWRFbGVtZW50cy5oYXMoZWwpKSB7XG4gICAgICAgICAgY29uc3QgY3R4ID0gbmV3IFBhdGNoZWRBQygpO1xuICAgICAgICAgIGN0eC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoZWwpLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnUGxheS5jYWxsKHRoaXMpO1xuICB9O1xufSkoKTtcbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlIHtcbiAgc2FtcGxlUmF0ZT86IG51bWJlcjtcbiAgdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQXVkaW9DYXB0dXJlKFxuICBwY21QYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEF1ZGlvQ2FwdHVyZT4ge1xuICBjb25zdCBwcmVsb2FkUGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfYXVkaW9fcHJlbG9hZF8ke3JhbmRvbVVVSUQoKX0uanNgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHByZWxvYWRQYXRoLCBBVURJT19DQVBUVVJFX1NDUklQVCk7XG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KHtcbiAgICB0eXBlOiBcImZyYW1lXCIsXG4gICAgaWQ6IFwicHVwLWF1ZGlvXCIsXG4gICAgZmlsZVBhdGg6IHByZWxvYWRQYXRoLFxuICB9KTtcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgRml4ZWRCdWZmZXJXcml0ZXIocGNtUGF0aCwgNDA5NiAqIDIgKiA0KTtcbiAgY29uc3QgY2FwdHVyZTogQXVkaW9DYXB0dXJlID0ge1xuICAgIHNhbXBsZVJhdGU6IHVuZGVmaW5lZCxcbiAgICBhc3luYyB0ZWFyZG93bigpIHtcbiAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKFwiYXVkaW8tY2h1bmtcIik7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLW1ldGFcIik7XG4gICAgICBhd2FpdCB3cml0ZXIuY2xvc2UoKTtcbiAgICAgIHNlc3Npb24uZGVmYXVsdFNlc3Npb24udW5yZWdpc3RlclByZWxvYWRTY3JpcHQoXCJwdXAtYXVkaW9cIik7XG4gICAgICBhd2FpdCBybShwcmVsb2FkUGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xuXG4gIGlwY01haW4ub25jZShcImF1ZGlvLW1ldGFcIiwgKF9lLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY2FwdHVyZS5zYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICB9KTtcbiAgaXBjTWFpbi5vbihcImF1ZGlvLWNodW5rXCIsIChfZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB3cml0ZXIud3JpdGUoYnVmZmVyKTtcbiAgfSk7XG4gIHJldHVybiBjYXB0dXJlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRXcmFwcGVySFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgV0lEVEggPSAke3dpZHRofTtcbiAgICAgIGNvbnN0IE1BUktFUl9XSURUSCA9ICR7RlJBTUVfU1lOQ19NQVJLRVJfV0lEVEh9O1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZWdvJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHJhZklkID0gbnVsbDtcblxuICAgICAgZnVuY3Rpb24gZW5jb2RlVGltZXN0YW1wKHRpbWVzdGFtcE1zKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEoV0lEVEgsIDEpO1xuICAgICAgICBjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaSA9IE1BUktFUl9XSURUSDsgaSA8IFdJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9yZWNvcmRpbmdfXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3BfcmVjb3JkaW5nX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRpbWVzdGFtcChcbiAgYml0bWFwOiBCdWZmZXIsXG4gIHNpemU6IFNpemUsXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN5bmMoY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdGFydF9yZWNvcmRpbmdfXygpYCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3luYyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJSdW50aW1lLmV2YWx1YXRlXCIsIHtcbiAgICBleHByZXNzaW9uOiBgd2luZG93Ll9fcHVwX3N0b3BfcmVjb3JkaW5nX18oKWAsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFZvaWRGdW5jdGlvbltdID0gW107XG4gIHByaXZhdGUgX2VuZGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX2VuZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmRlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgIGZuKClcbiAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5fcXVldWUucHVzaChydW4pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2VuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VuZGVkID0gdHJ1ZTtcbiAgICB3aGlsZSAodGhpcy5fYWN0aXZlID4gMCB8fCB0aGlzLnBlbmRpbmcgPiAwKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8uKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyY2VwdG9yKHtcbiAgc291cmNlLFxuICB3aW5kb3csXG4gIHVzZUlubmVyUHJveHksXG59OiBOZXR3b3JrT3B0aW9ucykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICBjb25zdCBsaW1pdGVyID0gbmV3IENvbmN1cnJlbmN5TGltaXRlcig2NCk7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudFxuICAgICAgLndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pXG4gICAgICAuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKFxuICBjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLFxuICBtczogbnVtYmVyLFxuKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHtcbiAgZm4sXG4gIG1heEF0dGVtcHRzID0gMyxcbiAgdGltZW91dCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFdyYXBwZXJIVE1MIH0gZnJvbSBcIi4vZnJhbWVfc3luY1wiO1xuaW1wb3J0IHsgY2hlY2tIVE1MIH0gZnJvbSBcIi4vaHRtbF9jaGVja1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuL3JldHJ5XCI7XG5pbXBvcnQgdHlwZSB7IFJlY29yZE9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHdpbjogQnJvd3NlcldpbmRvdywgYWN0aW9uOiAoKSA9PiB2b2lkKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiByZWplY3QobmV3IEVycm9yKFwibG9hZCB3aW5kb3cgdGltZW91dFwiKSksXG4gICAgICAzMF8wMDAsXG4gICAgKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IEVycm9yKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZpbmlzaC1sb2FkXCIsICgpID0+IGRvbmUoKSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkICR7dXJsfTogWyR7Y29kZX1dICR7ZGVzY31gKSksXG4gICAgKTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInJlbmRlci1wcm9jZXNzLWdvbmVcIiwgKF9lLCB7IGV4aXRDb2RlLCByZWFzb24gfSkgPT5cbiAgICAgIGRvbmUobmV3IEVycm9yKGByZW5kZXJlciBjcmFzaGVkOiAke2V4aXRDb2RlfSwgJHtyZWFzb259YCkpLFxuICAgICk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuV2luZG93KFxuICB3aW5zOiBCcm93c2VyV2luZG93W10sXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zLFxuKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gb3B0aW9ucztcblxuICBsZXQgc3JjID0gc291cmNlO1xuICBpZiAodXNlSW5uZXJQcm94eSkge1xuICAgIHNyYyA9IHByb3hpZWRVcmwoc291cmNlKTtcbiAgfVxuXG4gIHdpbnMuZm9yRWFjaCgodykgPT4ge1xuICAgIHcud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgZGVzdHJveSB3aW5kb3c6YCwgdy5pZCk7XG4gIH0pO1xuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5IH0pO1xuICB3aW5zLnNwbGljZSgwKS5mb3JFYWNoKCh3KSA9PiB3LmRlc3Ryb3koKSk7XG4gIHdpbnMucHVzaCh3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcbiAgICBcImNvbnNvbGUtbWVzc2FnZVwiLFxuICAgICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgICBpZiAobGV2ZWwgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoVEFHLCBcImNvbnNvbGU6XCIsIHtcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgc291cmNlSWQsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICApO1xuXG4gIGNvbnN0IHdyYXBwZXJIVE1MID0gYnVpbGRXcmFwcGVySFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgY29uc3QgZGF0YVVSTCA9IGBkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KHdyYXBwZXJIVE1MKX1gO1xuICBhd2FpdCB3YWl0Rm9yRmluaXNoKHdpbiwgKCkgPT4gd2luLmxvYWRVUkwoZGF0YVVSTCkpO1xuXG4gIHJldHVybiB3aW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KFxuICBzb3VyY2U6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb3JkT3B0aW9ucyxcbik6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICB0cnkge1xuICAgIGNvbnN0IHdpbnM6IEJyb3dzZXJXaW5kb3dbXSA9IFtdO1xuICAgIGF3YWl0IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pKHdpbnMsIHNvdXJjZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW5XaW5kb3cod2lucywgc291cmNlLCBvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgY29uc3QgZGVzYyA9IHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KGRlc2MpfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEZpeGVkQnVmZmVyV3JpdGVyIH0gZnJvbSBcIi4uL3J1c3QvbGliXCI7XG5pbXBvcnQgeyBzZXR1cEF1ZGlvQ2FwdHVyZSB9IGZyb20gXCIuL2F1ZGlvX2NhcHR1cmVcIjtcbmltcG9ydCB7IGRlY29kZVRpbWVzdGFtcCwgc3RhcnRTeW5jLCBzdG9wU3luYyB9IGZyb20gXCIuL2ZyYW1lX3N5bmNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRPcHRpb25zLCBSZWNvcmRSZXN1bHQgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVjb3JkXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3JkKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb3JkT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaW5mbyhUQUcsIGBwcm9ncmVzczogMCVgKTtcbiAgY29uc3QgeyBvdXREaXIsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCBta2RpcihvdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHBjbVBhdGggPSBqb2luKG91dERpciwgXCJvdXRwdXQucGNtXCIpO1xuICBjb25zdCBhdWRpb0NhcHR1cmUgPSB3aXRoQXVkaW8gPyBhd2FpdCBzZXR1cEF1ZGlvQ2FwdHVyZShwY21QYXRoKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjZHAuYXR0YWNoKFwiMS4zXCIpO1xuXG4gIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgaWYgKCF3aW4ud2ViQ29udGVudHMuaXNQYWludGluZygpKSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IGJncmEgPSBqb2luKG91dERpciwgXCJvdXRwdXQuYmdyYVwiKTtcbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgY29uc3QgYnVmZmVyU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDtcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgRml4ZWRCdWZmZXJXcml0ZXIoYmdyYSwgYnVmZmVyU2l6ZSwgZnBzKTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGZyYW1lRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNjaGVkdWxlV3JpdGUgPSAoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgdHJ5IHtcbiAgICAgIHdyaXRlci53cml0ZShidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmcmFtZUVycm9yID8/PSBlcnJvciBhcyBFcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBpZiAoZnJhbWVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihmcmFtZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0VtcHR5KGltYWdlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVRpbWVzdGFtcChiaXRtYXAsIGltYWdlLmdldFNpemUoKSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZyYW1lRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0O1xuICAgIGNvbnN0IGNyb3BwZWQgPSBiaXRtYXAuc3ViYXJyYXkoMCwgaGVpZ2h0ICogYnl0ZXNQZXJSb3cpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZVdyaXRlKGNyb3BwZWQpO1xuICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlTGFzdEZyYW1lID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgaWYgKHRpbWVTaW5jZUxhc3RGcmFtZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGltZVNpbmNlTGFzdEZyYW1lIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgIHNjaGVkdWxlV3JpdGUoY3JvcHBlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lU2luY2VMYXN0RnJhbWUgLyBmcmFtZUludGVydmFsKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgc2NoZWR1bGVXcml0ZShjcm9wcGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6ICR7TWF0aC5yb3VuZChwcm9ncmVzcyl9JWApO1xuICAgIH1cbiAgfTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gIGF3YWl0IHN0YXJ0U3luYyhjZHApO1xuICB0cnkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiAoW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal0pKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBzdG9wU3luYyhjZHApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgYXdhaXQgd3JpdGVyLmNsb3NlKCk7XG4gICAgYXdhaXQgYXVkaW9DYXB0dXJlPy50ZWFyZG93bigpO1xuICB9XG5cbiAgaWYgKGZyYW1lRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGZyYW1lRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhdWRpbyA9IGF1ZGlvQ2FwdHVyZT8uc2FtcGxlUmF0ZVxuICAgICAgPyB7IHBjbVBhdGgsIHNhbXBsZVJhdGU6IGF1ZGlvQ2FwdHVyZS5zYW1wbGVSYXRlIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkUmVzdWx0ID0geyBvcHRpb25zLCB3cml0dGVuLCBiZ3JhLCBhdWRpbyB9O1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKG91dERpciwgXCJyZWNvcmQuanNvblwiKSwgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6IDEwMCUsICR7d3JpdHRlbn0gZnJhbWVzIHdyaXR0ZW5gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3aW4uY2xvc2UoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4geyBwcm9jZXNzOiBwcm9jLCB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NwZWMge1xuICBmcHM6IG51bWJlcjtcbiAgZnJhbWVzOiBudW1iZXI7XG4gIHNpemU6IFNpemU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GaWxlcyB7XG4gIG1wND86IHN0cmluZztcbiAgd2VibT86IHN0cmluZztcbiAgbW92Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRmlsZXNXaXRoQ292ZXIgZXh0ZW5kcyBWaWRlb0ZpbGVzIHtcbiAgY292ZXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0RJUiA9IFwib3V0XCI7XG5cbmV4cG9ydCBjb25zdCBSZWNvcmRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChERUZBVUxUX0RVUkFUSU9OKVxuICAgIC5kZXNjcmliZShcIlJlY29yZGluZyBkdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlZmF1bHQoREVGQVVMVF9XSURUSCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChERUZBVUxUX0hFSUdIVClcbiAgICAuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlZmF1bHQoREVGQVVMVF9GUFMpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBbHBoYUNoYW5uZWw6IHpcbiAgICAuYm9vbGVhbigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAuZGVzY3JpYmUoXCJPdXRwdXQgd2l0aCBhbHBoYSBjaGFubmVsXCIpLFxuICB3aXRoQXVkaW86IHpcbiAgICAuYm9vbGVhbigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dERpcjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoREVGQVVMVF9PVVRfRElSKVxuICAgIC5kZXNjcmliZShcIk91dHB1dCBkaXJlY3RvcnlcIiksXG4gIHVzZUlubmVyUHJveHk6IHpcbiAgICAuYm9vbGVhbigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZE9wdGlvbnMge1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBbHBoYUNoYW5uZWw6IGJvb2xlYW47XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgb3V0RGlyOiBzdHJpbmc7XG4gIHVzZUlubmVyUHJveHk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9TcGVjIHtcbiAgcGNtUGF0aDogc3RyaW5nO1xuICBzYW1wbGVSYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkUmVzdWx0IHtcbiAgb3B0aW9uczogUmVjb3JkT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBiZ3JhOiBzdHJpbmc7XG4gIGF1ZGlvPzogQXVkaW9TcGVjO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHB1cFVzZUlubmVyUHJveHkgfSBmcm9tIFwiLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQge1xuICBERUZBVUxUX0RVUkFUSU9OLFxuICBERUZBVUxUX0ZQUyxcbiAgREVGQVVMVF9IRUlHSFQsXG4gIERFRkFVTFRfT1VUX0RJUixcbiAgREVGQVVMVF9XSURUSCxcbiAgdHlwZSBSZWNvcmRPcHRpb25zLFxufSBmcm9tIFwiLi9iYXNlL3NjaGVtYVwiO1xuXG5leHBvcnQgdHlwZSBDTElDYWxsYmFjayA9IChcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pID0+IFByb21pc2U8dW5rbm93bj47XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG5hbWU6IHN0cmluZywgY2FsbGJhY2s6IENMSUNhbGxiYWNrKSB7XG4gIHByb2dyYW1cbiAgICAubmFtZShuYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywg5oiWIGRhdGE6IFVSSVwiKVxuICAgIC5vcHRpb24oXCItdywgLS13aWR0aCA8bnVtYmVyPlwiLCBcIuinhumikeWuveW6plwiLCBgJHtERUZBVUxUX1dJRFRIfWApXG4gICAgLm9wdGlvbihcIi1oLCAtLWhlaWdodCA8bnVtYmVyPlwiLCBcIuinhumikemrmOW6plwiLCBgJHtERUZBVUxUX0hFSUdIVH1gKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgXCLluKfnjodcIiwgYCR7REVGQVVMVF9GUFN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgXCLlvZXliLbml7bplb/vvIjnp5LvvIlcIiwgYCR7REVGQVVMVF9EVVJBVElPTn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZGlyIDxwYXRoPlwiLCBcIui+k+WHuuebruW9lVwiLCBgJHtERUZBVUxUX09VVF9ESVJ9YClcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hbHBoYS1jaGFubmVsXCIsIFwi6L6T5Ye65YyF5ZCrIGFscGhhIOmAmumBk+eahOinhumikVwiLCBmYWxzZSlcbiAgICAub3B0aW9uKFwiLXMsIC0td2l0aC1hdWRpb1wiLCBcIuaNleiOt+W5tua3t+WFpemfs+mikVwiLCBmYWxzZSlcbiAgICAub3B0aW9uKFxuICAgICAgXCItLXVzZS1pbm5lci1wcm94eVwiLFxuICAgICAgXCLkvb/nlKggQiDnq5nlhoXnvZHku6PnkIbliqDpgJ/otYTmupDorr/pl65cIixcbiAgICAgIHB1cFVzZUlubmVyUHJveHksXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjYWxsYmFjayhzb3VyY2UsIHtcbiAgICAgICAgICB3aWR0aDogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfV0lEVEgpKG9wdHMud2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfSEVJR0hUKShvcHRzLmhlaWdodCksXG4gICAgICAgICAgZnBzOiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9GUFMpKG9wdHMuZnBzKSxcbiAgICAgICAgICBkdXJhdGlvbjogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfRFVSQVRJT04pKG9wdHMuZHVyYXRpb24pLFxuICAgICAgICAgIG91dERpcjogb3B0cy5vdXREaXIgPz8gREVGQVVMVF9PVVRfRElSLFxuICAgICAgICAgIHdpdGhBbHBoYUNoYW5uZWw6IG9wdHMud2l0aEFscGhhQ2hhbm5lbCA/PyBmYWxzZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGZhbHNlLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBwdXBVc2VJbm5lclByb3h5LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgcmVjb3JkIH0gZnJvbSBcIi4vYmFzZS9yZWNvcmRcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcblxucHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoKSA9PiBhcHAucXVpdCgpKTtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmFwcC5kb2NrPy5oaWRlKCk7XG5cbm1ha2VDTEkoXCJhcHBcIiwgYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICB0cnkge1xuICAgIGFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbiAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgcHJpbnRGZWF0dXJlcygpO1xuICAgIGF3YWl0IHJlY29yZChzb3VyY2UsIG9wdGlvbnMpO1xuICB9IGZpbmFsbHkge1xuICAgIGFwcC5xdWl0KCk7XG4gIH1cbn0pO1xuIl19
|