pup-recorder 0.4.3 → 0.4.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/biome.json +1 -0
- package/build.ts +2 -2
- package/dist/_tsup-dts-rollup.d.ts +17 -16
- package/dist/app.cjs +4 -4
- package/dist/chunk-UC6U2DFE.js +4 -0
- package/dist/cli.js +1 -1
- package/dist/index.js +2 -2
- package/dist/runtime/iframe_preload.cjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-XRCHOYPZ.js +0 -4
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');function v(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,o=[],s={},a=1,d=()=>(r+=.01,r);function m(...i){return this instanceof m?i.length?new(Function.prototype.bind.apply(n,[null,...i])):new n(t+e+d()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+d(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+d(),window.requestAnimationFrame=i=>{let c=a++;return o.push({id:c,cb:i}),c},window.cancelAnimationFrame=i=>{o=o.filter(c=>c.id!==i);},window.setTimeout=(i,c)=>{let u=a++;return s[u]={type:"timeout",cb:i,delay:c||0,next:e+(c||0)},u},window.clearTimeout=i=>{typeof i=="number"&&delete s[i];},window.setInterval=(i,c)=>{let u=a++,l=Math.max(c||0,1);return s[u]={type:"interval",cb:i,delay:l,next:e+l},u},window.clearInterval=i=>{typeof i=="number"&&delete s[i];};function g(i){try{typeof i=="string"?new Function(i)():i();}catch(c){console.error("[Tick] error:",c instanceof Error&&c.stack||c);}}function p(i,c){try{i(c);}catch(u){console.error("[Tick] error:",u instanceof Error&&u.stack||u);}}let T=new WeakMap;function h(i){let c;try{c=document.getAnimations();}catch{return}for(let u of c){let l=u.playState;if(l==="idle"||l==="finished"){T.delete(u);continue}let E=typeof u.playbackRate=="number"?u.playbackRate:1;if(E===0)continue;let w=T.get(u);if(!w){let N=typeof u.currentTime=="number"?u.currentTime:0;w={startMs:i-N/E,pausedAccum:0,pausedAt:-1},T.set(u,w);}if(l==="paused"){w.pausedAt<0&&(w.pausedAt=i);continue}w.pausedAt>=0&&(w.pausedAccum+=i-w.pausedAt,w.pausedAt=-1),u.currentTime=(i-w.startMs-w.pausedAccum)*E;}}function b(i){e=i,r=0;for(let u of Object.keys(s)){let l=s[Number(u)];if(l)for(;l.next<=e;){if(g(l.cb),l.type==="timeout"){delete s[Number(u)];break}l.next+=l.delay;}}let c=o.splice(0);for(let u of c)p(u.cb,e);h(e);}window.__pup_tick__={process:b};}var $=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function R(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let d of $){if(d==="position"||d==="left"||d==="top"||d==="right"||d==="bottom")continue;let m=e.getPropertyValue(R(d));m&&t.style.setProperty(R(d),m);}let r=n.getBoundingClientRect(),o=window.devicePixelRatio||1,s=Math.max(1,Math.round(r.width*o)),a=Math.max(1,Math.round(r.height*o));t.width!==s&&(t.width=s),t.height!==a&&(t.height=a);}function H(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),_(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function A(n,t,e,r,o){if(o==="none")return [(e-n)/2,(r-t)/2,n,t];if(o==="contain"||o==="scale-down"){let s=Math.min(e/n,r/t),a=o==="scale-down"?Math.min(1,s):s,d=a*n,m=a*t;return [(e-d)/2,(r-m)/2,d,m]}if(o==="cover"){let s=Math.max(e/n,r/t),a=s*n,d=s*t;return [(e-a)/2,(r-d)/2,a,d]}return [0,0,e,r]}var M="pup-frame://";var L="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function f(n,t){n.dispatchEvent(new Event(t));}function j(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),r={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let o of t)o(e,r);}async function W(n,t,e,r){let o=n.cache.cacheOf(e.meta.id);o.readers.set(e,r);let s=o.bitmaps.get(r);if(!s){n.cache.prefetch(e,r+1,9);let m=await n.cache.fetch(e,r);if(n.sessions.get(t)!==e)return;if(!m){!e.paused&&!e.waiting&&(e.waiting=true,f(t,"waiting"));return}s=m;}e.waiting&&(e.waiting=false,e.paused||f(t,"playing"));let a=e.cv,d=A(s.width,s.height,a.width,a.height,e.objectFit);e.ctx.clearRect(0,0,a.width,a.height),e.ctx.drawImage(s,d[0],d[1],d[2],d[3]),e.lastDrawnIdx=r,e.presentedFrames++,j(e),n.cache.prefetch(e,r+1,10),n.cache.evict(o);}function C(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(o=>{let s=o,a=n.sessions.get(s);if(!a||a.dead||(_(s,a.cv),!a.meta))return;if(a.meta.frameWidth<a.meta.width&&a.cv.width>a.meta.frameWidth*1.05&&!n.attaching.has(s)){n.reattach(s,a);return}!a.paused&&!a.ended&&(a.currentTime+=e*(s.playbackRate||1),a.maxReached=Math.max(a.maxReached,a.currentTime),a.currentTime>=a.meta.duration?s.loop?a.currentTime=a.currentTime%a.meta.duration:(a.currentTime=a.meta.duration,a.paused=true,a.ended=true,f(s,"ended")):f(s,"timeupdate"));let d=Math.max(1,Math.round(a.currentTime*a.meta.fps));d!==a.lastDrawnIdx&&r.push(W(n,s,a,d));}),Promise.all(r)}var x=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let r=t.meta;if(!r)return Promise.resolve(null);let o=this.cacheOf(r.id),s=o.inFlight.get(e);if(s)return s;let a=o.bitmaps.get(e);if(a)return Promise.resolve(a);let d=r.frameWidth,m=r.frameHeight,g=fetch(`${M}frame?id=${r.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():null).then(p=>p&&p.byteLength===d*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),d,m)):null).then(p=>(o.inFlight.delete(e),p&&o.bitmaps.set(e,p),p)).catch(()=>(o.inFlight.delete(e),null));return o.inFlight.set(e,g),g}prefetch(t,e,r){let o=t.meta;if(!o)return;let s=Math.max(1,Math.round(o.duration*o.fps));for(let a=e;a<e+r;a++)a<1||a>s||this.fetch(t,a);}evict(t){let e=1/0;if(t.readers.forEach(o=>{o<e&&(e=o);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((o,s)=>{s<r&&(o.close(),t.bitmaps.delete(s));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(o=>{o.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function O(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=i=>Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(e,i),o=r("currentTime"),s=r("src"),a=r("playbackRate"),d=t.pause,m=t.requestVideoFrameCallback,g=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,T=t.load,h=n.sessions,b=(i,c)=>{let u=r(i)?.get;if(!u)throw new Error(`media_shim: no native getter for ${i}`);Object.defineProperty(t,i,{configurable:true,get(){let l=h.get(this);return l?c(l):u.call(this)}});};if(b("paused",i=>i.paused),b("ended",i=>i.ended),b("readyState",i=>i.readyState),b("networkState",i=>i.networkState),b("error",i=>i.error??null),b("seeking",i=>i.seeking),b("buffered",i=>V(i.meta?i.meta.duration:0)),b("seekable",i=>V(i.meta?i.meta.duration:0)),b("played",i=>V(i.maxReached)),t.play=function(){let i=h.get(this);return i?(n.resume(this,i),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let i=h.get(this);if(!i){d.call(this);return}i.paused||(i.paused=true,f(this,"pause"));},o?.get&&o.set){let i=o.get,c=o.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let u=h.get(this);return u?u.currentTime:i.call(this)},set(u){let l=h.get(this);if(!l){c.call(this,u);return}let E=l.meta?l.meta.duration:u;l.currentTime=Math.max(0,Math.min(u,E)),l.maxReached=Math.max(l.maxReached,l.currentTime),l.currentTime<E&&(l.ended=false),l.seeking=true,f(this,"seeking"),l.seeking=false,f(this,"seeked"),f(this,"timeupdate");}});}if(a?.set){let i=a.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:a.get,set(c){i.call(this,c),h.has(this)&&f(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(i){let c=h.get(this);if(!c)return m.call(this,i);let u=++n.rvfcSeq;return c.rvfc.set(u,i),u},t.cancelVideoFrameCallback=function(i){let c=h.get(this);if(!c){g.call(this,i);return}c.rvfc.delete(i);},t.getVideoPlaybackQuality=function(){let i=h.get(this);return i?{creationTime:performance.now(),totalVideoFrames:i.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!h.has(this))return T.call(this);n.detach(this),f(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},s?.set){let i=s.set;Object.defineProperty(t,"src",{configurable:true,get:s.get,set(c){i.call(this,c),n.onSrcChange(this);}});}}function D(n,t){return {meta:null,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function F(n,t,e){return t.dead=true,t.error=e,t.networkState=3,console.warn(L,`${e.message} src=${n.src||n.currentSrc}`),f(n,"error"),null}async function P(n,t){let{video:e,state:r,src:o,birthMs:s,native:a}=t,d=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,f(e,"loadstart");let m;try{let p=a?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${d}${p}`);}catch(p){return F(e,r,{code:2,message:`open failed: ${p instanceof Error?p.message:String(p)}`})}if(n.sessions.get(e)!==r)return null;if(!m.ok)return F(e,r,{code:3,message:`open ${m.status}: ${await m.text()}`});let g=await m.json();return n.sessions.get(e)!==r?null:(r.meta=g,r.currentTime=r.paused?0:Math.max(0,(n.currMs-s)/1e3),Object.defineProperty(e,"videoWidth",{value:g.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:g.height,configurable:true}),Object.defineProperty(e,"duration",{value:g.duration,configurable:true}),r.readyState=1,f(e,"durationchange"),f(e,"loadedmetadata"),r.readyState=4,f(e,"loadeddata"),f(e,"canplay"),f(e,"canplaythrough"),r.networkState=1,f(e,"suspend"),r.paused||(f(e,"play"),f(e,"playing")),n.cache.prefetch(r,1,10),r)}var k=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new x;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){O(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(r=>{r instanceof Element&&this.scan(r);}),e.removedNodes.forEach(r=>{r instanceof HTMLVideoElement&&this.detach(r);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>C(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let o=this.attaching.get(t);if(o)return o;let s=t.src||t.currentSrc;if(!s||/^(blob:|data:|mediastream:)/i.test(s))return Promise.resolve(null);let a=H(t,this._lastSnapshot.get(t)),d=D(t,a);this.sessions.set(t,d);let m=P(this,{video:t,state:d,src:s,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(m);});return this.attaching.set(t,m),this.opening.add(m),m}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,f(t,"play"),f(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let r=new OffscreenCanvas(e.cv.width,e.cv.height),o=r.getContext("2d");if(!o)throw new Error("no 2d context");o.drawImage(e.cv,0,0),this._lastSnapshot.set(t,r);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pupLastSrc!==e&&(t.__pupLastSrc=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let r=e.currentTime,o=e.paused,s=e.ended;this.detach(t),this.attach(t,true).then(a=>{a&&(a.currentTime=r,a.paused=o,a.ended=s);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function I(){window.__pup_video__||new k().install();}window.self!==window.top&&(v(),I());
|
|
1
|
+
'use strict';require('source-map-support/register.js');function v(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,o=[],s={},a=1,u=()=>(r+=.01,r);function m(...i){return this instanceof m?i.length?new(Function.prototype.bind.apply(n,[null,...i])):new n(t+e+u()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+u(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+u(),window.requestAnimationFrame=i=>{let c=a++;return o.push({id:c,cb:i}),c},window.cancelAnimationFrame=i=>{o=o.filter(c=>c.id!==i);},window.setTimeout=(i,c)=>{let d=a++;return s[d]={type:"timeout",cb:i,delay:c||0,next:e+(c||0)},d},window.clearTimeout=i=>{typeof i=="number"&&delete s[i];},window.setInterval=(i,c)=>{let d=a++,f=Math.max(c||0,1);return s[d]={type:"interval",cb:i,delay:f,next:e+f},d},window.clearInterval=i=>{typeof i=="number"&&delete s[i];};function g(i){try{typeof i=="string"?new Function(i)():i();}catch(c){console.error("[Tick] error:",c instanceof Error&&c.stack||c);}}function p(i,c){try{i(c);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let T=new WeakMap;function h(i){let c;try{c=document.getAnimations();}catch{return}for(let d of c){let f=d.playState;if(f==="idle"||f==="finished"){T.delete(d);continue}let E=typeof d.playbackRate=="number"?d.playbackRate:1;if(E===0)continue;let w=T.get(d);if(!w){let N=typeof d.currentTime=="number"?d.currentTime:0;w={startMs:i-N/E,pausedAccum:0,pausedAt:-1},T.set(d,w);}if(f==="paused"){w.pausedAt<0&&(w.pausedAt=i);continue}w.pausedAt>=0&&(w.pausedAccum+=i-w.pausedAt,w.pausedAt=-1),d.currentTime=(i-w.startMs-w.pausedAccum)*E;}}function b(i){e=i,r=0;for(let d of Object.keys(s)){let f=s[Number(d)];if(f)for(;f.next<=e;){if(g(f.cb),f.type==="timeout"){delete s[Number(d)];break}f.next+=f.delay;}}let c=o.splice(0);for(let d of c)p(d.cb,e);h(e);}window.__pup_tick__={process:b};}var $=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function R(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let u of $){if(u==="position"||u==="left"||u==="top"||u==="right"||u==="bottom")continue;let m=e.getPropertyValue(R(u));m&&t.style.setProperty(R(u),m);}let r=n.getBoundingClientRect(),o=window.devicePixelRatio||1,s=Math.max(1,Math.round(r.width*o)),a=Math.max(1,Math.round(r.height*o));t.width!==s&&(t.width=s),t.height!==a&&(t.height=a);}function H(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),_(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function A(n,t,e,r,o){if(o==="none")return [(e-n)/2,(r-t)/2,n,t];if(o==="contain"||o==="scale-down"){let s=Math.min(e/n,r/t),a=o==="scale-down"?Math.min(1,s):s,u=a*n,m=a*t;return [(e-u)/2,(r-m)/2,u,m]}if(o==="cover"){let s=Math.max(e/n,r/t),a=s*n,u=s*t;return [(e-a)/2,(r-u)/2,a,u]}return [0,0,e,r]}var M="pup-frame://";var L="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function j(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),r={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let o of t)o(e,r);}async function W(n,t,e,r){let o=n.cache.cacheOf(e.meta.id);o.readers.set(e,r);let s=o.bitmaps.get(r);if(!s){n.cache.prefetch(e,r+1,9);let m=await n.cache.fetch(e,r);if(n.sessions.get(t)!==e)return;if(!m){!e.paused&&!e.waiting&&(e.waiting=true,l(t,"waiting"));return}s=m;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let a=e.cv,u=A(s.width,s.height,a.width,a.height,e.objectFit);e.ctx.clearRect(0,0,a.width,a.height),e.ctx.drawImage(s,u[0],u[1],u[2],u[3]),e.lastDrawnIdx=r,e.presentedFrames++,j(e),n.cache.prefetch(e,r+1,10),n.cache.evict(o);}function C(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(o=>{let s=o,a=n.sessions.get(s);if(!a||a.dead||(_(s,a.cv),!a.meta))return;if(a.meta.frameWidth<a.meta.width&&a.cv.width>a.meta.frameWidth*1.05&&!n.attaching.has(s)){n.reattach(s,a);return}!a.paused&&!a.ended&&(a.currentTime+=e*(s.playbackRate||1),a.maxReached=Math.max(a.maxReached,a.currentTime),a.currentTime>=a.meta.duration?s.loop?a.currentTime=a.currentTime%a.meta.duration:(a.currentTime=a.meta.duration,a.paused=true,a.ended=true,l(s,"ended")):l(s,"timeupdate"));let u=Math.max(1,Math.round(a.currentTime*a.meta.fps));u!==a.lastDrawnIdx&&r.push(W(n,s,a,u));}),Promise.all(r)}var x=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let r=t.meta;if(!r)return Promise.resolve(void 0);let o=this.cacheOf(r.id),s=o.inFlight.get(e);if(s)return s;let a=o.bitmaps.get(e);if(a)return Promise.resolve(a);let u=r.frameWidth,m=r.frameHeight,g=fetch(`${M}frame?id=${r.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===u*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),u,m)):void 0).then(p=>(o.inFlight.delete(e),p&&o.bitmaps.set(e,p),p)).catch(()=>{o.inFlight.delete(e);});return o.inFlight.set(e,g),g}prefetch(t,e,r){let o=t.meta;if(!o)return;let s=Math.max(1,Math.round(o.duration*o.fps));for(let a=e;a<e+r;a++)a<1||a>s||this.fetch(t,a);}evict(t){let e=1/0;if(t.readers.forEach(o=>{o<e&&(e=o);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((o,s)=>{s<r&&(o.close(),t.bitmaps.delete(s));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(o=>{o.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function O(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=i=>Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(e,i),o=r("currentTime"),s=r("src"),a=r("playbackRate"),u=t.pause,m=t.requestVideoFrameCallback,g=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,T=t.load,h=n.sessions,b=(i,c)=>{let d=r(i)?.get;if(!d)throw new Error(`media_shim: no native getter for ${i}`);Object.defineProperty(t,i,{configurable:true,get(){let f=h.get(this);return f?c(f):d.call(this)}});};if(b("paused",i=>i.paused),b("ended",i=>i.ended),b("readyState",i=>i.readyState),b("networkState",i=>i.networkState),b("error",i=>i.error??null),b("seeking",i=>i.seeking),b("buffered",i=>V(i.meta?i.meta.duration:0)),b("seekable",i=>V(i.meta?i.meta.duration:0)),b("played",i=>V(i.maxReached)),t.play=function(){let i=h.get(this);return i?(n.resume(this,i),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let i=h.get(this);if(!i){u.call(this);return}i.paused||(i.paused=true,l(this,"pause"));},o?.get&&o.set){let i=o.get,c=o.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let d=h.get(this);return d?d.currentTime:i.call(this)},set(d){let f=h.get(this);if(!f){c.call(this,d);return}let E=f.meta?f.meta.duration:d;f.currentTime=Math.max(0,Math.min(d,E)),f.maxReached=Math.max(f.maxReached,f.currentTime),f.currentTime<E&&(f.ended=false),f.seeking=true,l(this,"seeking"),f.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(a?.set){let i=a.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:a.get,set(c){i.call(this,c),h.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(i){let c=h.get(this);if(!c)return m.call(this,i);let d=++n.rvfcSeq;return c.rvfc.set(d,i),d},t.cancelVideoFrameCallback=function(i){let c=h.get(this);if(!c){g.call(this,i);return}c.rvfc.delete(i);},t.getVideoPlaybackQuality=function(){let i=h.get(this);return i?{creationTime:performance.now(),totalVideoFrames:i.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!h.has(this))return T.call(this);n.detach(this),l(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},s?.set){let i=s.set;Object.defineProperty(t,"src",{configurable:true,get:s.get,set(c){i.call(this,c),n.onSrcChange(this);}});}}function D(n,t){return {meta:void 0,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function F(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(L,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function P(n,t){let{video:e,state:r,src:o,birthMs:s,native:a}=t,u=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,l(e,"loadstart");let m;try{let p=a?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${u}${p}`);}catch(p){return F(e,r,{code:2,message:`open failed: ${p instanceof Error?p.message:String(p)}`})}if(n.sessions.get(e)!==r)return;if(!m.ok)return F(e,r,{code:3,message:`open ${m.status}: ${await m.text()}`});let g=await m.json();if(n.sessions.get(e)===r)return r.meta=g,r.currentTime=r.paused?0:Math.max(0,(n.currMs-s)/1e3),Object.defineProperty(e,"videoWidth",{value:g.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:g.height,configurable:true}),Object.defineProperty(e,"duration",{value:g.duration,configurable:true}),r.readyState=1,l(e,"durationchange"),l(e,"loadedmetadata"),r.readyState=4,l(e,"loadeddata"),l(e,"canplay"),l(e,"canplaythrough"),r.networkState=1,l(e,"suspend"),r.paused||(l(e,"play"),l(e,"playing")),n.cache.prefetch(r,1,10),r}var k=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new x;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){O(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(r=>{r instanceof Element&&this.scan(r);}),e.removedNodes.forEach(r=>{r instanceof HTMLVideoElement&&this.detach(r);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>C(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let o=this.attaching.get(t);if(o)return o;let s=t.src||t.currentSrc;if(!s||/^(blob:|data:|mediastream:)/i.test(s))return Promise.resolve(void 0);let a=H(t,this._lastSnapshot.get(t)),u=D(t,a);this.sessions.set(t,u);let m=P(this,{video:t,state:u,src:s,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(m);});return this.attaching.set(t,m),this.opening.add(m),m}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,l(t,"play"),l(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let r=new OffscreenCanvas(e.cv.width,e.cv.height),o=r.getContext("2d");if(!o)throw new Error("no 2d context");o.drawImage(e.cv,0,0),this._lastSnapshot.set(t,r);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pupLastSrc!==e&&(t.__pupLastSrc=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let r=e.currentTime,o=e.paused,s=e.ended;this.detach(t),this.attach(t,true).then(a=>{a&&(a.currentTime=r,a.paused=o,a.ended=s);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function I(){window.__pup_video__||new k().install();}window.self!==window.top&&(v(),I());
|
|
2
2
|
//# sourceMappingURL=iframe_preload.cjs.map
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2lmcmFtZV9ob29rLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vb3ZlcmxheS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL3R5cGVzLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZHJpdmVyLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZnJhbWVfY2FjaGUudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9tZWRpYV9zaGltLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vc2Vzc2lvbi50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL2hvb2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS9pZnJhbWVfcHJlbG9hZC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwic3luY0FuaW1hdGlvbnMiLCJtcyIsImFuaW1zIiwiYSIsInN0YXRlIiwicmF0ZSIsInMiLCJjdDAiLCJwcm9jZXNzIiwidGltZXN0YW1wTXMiLCJ0IiwicmFmcyIsIk1JUlJPUl9QUk9QUyIsImNzc0Nhc2UiLCJjIiwic3luY092ZXJsYXkiLCJ2aWRlbyIsImN2IiwiY3MiLCJwIiwidiIsInZyIiwiZHByIiwidyIsImgiLCJzZXR1cENhbnZhcyIsInNuYXAiLCJmaXRSZWN0Iiwic3JjVyIsInNyY0giLCJkc3RXIiwiZHN0SCIsImZpdCIsInNjIiwiayIsIndzIiwiaHMiLCJzYzIiLCJ3czIiLCJoczIiLCJTQ0hFTUUiLCJUQUciLCJ0aW1lUmFuZ2VzIiwiZW5kIiwiZmlyZSIsImVsIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJibSIsImZldGNoZWQiLCJhZHZhbmNlIiwiZHQiLCJwcyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsImJ1ZiIsImZyb21JZHgiLCJjb3VudCIsIm1heElkeCIsImkiLCJtaW5JZHgiLCJmbG9vciIsImluc3RhbGxNZWRpYVNoaW0iLCJIVkUiLCJNRURJQSIsIm1kZXNjIiwiY3REZXNjIiwic3JjRGVzYyIsInJhdGVEZXNjIiwib3JpZ1BhdXNlIiwib3JpZ1JWRkMiLCJvcmlnQ2FuY2VsUlZGQyIsIm9yaWdRdWFsaXR5Iiwib3JpZ0xvYWQiLCJzZXNzaW9ucyIsImRlZiIsInByb3AiLCJwaWNrIiwibmF0aXZlR2V0IiwibnMiLCJjdEdldCIsImN0U2V0IiwiZHVyIiwicmF0ZVNldCIsInNyY1NldCIsIm5ld1ZpZGVvU3RhdGUiLCJmYWlsT3BlbiIsImVycm9yIiwib3BlblNlc3Npb24iLCJzcmMiLCJiaXJ0aE1zIiwibmF0aXZlIiwiZnBzIiwicmVzIiwicSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwibiIsInBlbmRpbmciLCJzY3R4IiwicGF1c2VkIiwiZW5kZWQiLCJyb290IiwiaW5zdGFsbFZpZGVvSG9vayJdLCJtYXBwaW5ncyI6InVEQXdCTyxTQUFTQSxHQUF3QixDQUN0QyxHQUFJLE9BQU8sWUFBQSxDQUNULE9BR0YsSUFBTUMsQ0FBQUEsQ0FBWSxJQUFBLENBQ1pDLENBQUFBLENBQWFELENBQUFBLENBQVUsS0FBSSxDQUM3QkUsQ0FBQUEsQ0FBUyxFQUNUQyxDQUFBQSxDQUFhLENBQUEsQ0FDYkMsRUFBdUIsRUFBQyxDQUN0QkMsQ0FBQUEsQ0FBNEMsR0FDOUNDLENBQUFBLENBQVMsQ0FBQSxDQUNQQyxFQUFPLEtBQ1hKLENBQUFBLEVBQWMsSUFDUEEsQ0FBQUEsQ0FBQUEsQ0FHVCxTQUFTSyxDQUFBQSxDQUFBQSxHQUEyQkMsQ0FBQUEsQ0FBZ0Ms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RyxDQUFBQSxDQUFRekcsRUFBTSxLQUFBLENBQ3BCLElBQUEsQ0FBSyxPQUFPWSxDQUFLLENBQUEsQ0FDWixJQUFBLENBQUssTUFBQSxDQUFPQSxFQUFPLElBQUksQ0FBQSxDQUFFLEtBQU1zRSxDQUFBQSxFQUFPLENBQ3BDQSxJQUdMQSxDQUFBQSxDQUFHLFdBQUEsQ0FBYzVFLEVBQ2pCNEUsQ0FBQUEsQ0FBRyxNQUFBLENBQVNzQixFQUNadEIsQ0FBQUEsQ0FBRyxLQUFBLENBQVF1QixHQUNiLENBQUMsRUFDSCxDQUVRLElBQUEsQ0FBS0MsQ0FBQUEsQ0FBNEIsQ0FDbENBLENBQUFBLEdBR0RBLEVBQUssT0FBQSxHQUFZLE9BQUEsRUFDbkIsS0FBSyxNQUFBLENBQU9BLENBQXdCLEVBRWxDQSxDQUFBQSxDQUFLLGdCQUFBLEVBQ1BBLENBQUFBLENBQUssZ0JBQUEsQ0FBaUIsT0FBTyxDQUFBLENBQUUsT0FBQSxDQUFTMUYsR0FBTSxDQUM1QyxJQUFBLENBQUssT0FBT0EsQ0FBQyxFQUNmLENBQUMsQ0FBQSxFQUVMLENBQ0YsQ0FBQSxDQUVPLFNBQVMyRixHQUF5QixDQUNuQyxNQUFBLENBQU8sZUFHWCxJQUFJVCxDQUFBQSxHQUFZLE9BQUEsR0FDbEIsQ0NsS0ksTUFBQSxDQUFPLElBQUEsR0FBUyxPQUFPLEdBQUEsR0FDekI1SCxDQUFBQSxHQUNBcUksQ0FBQUEsRUFBaUIsQ0FBQSIsImZpbGUiOiJpZnJhbWVfcHJlbG9hZC5janMiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fcHVwX3RpY2tfXz86IHsgcHJvY2VzczogKG1zOiBudW1iZXIpID0+IHZvaWQgfTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVGltZXIge1xuICB0eXBlOiBcInRpbWVvdXRcIiB8IFwiaW50ZXJ2YWxcIjtcbiAgY2I6IFRpbWVySGFuZGxlcjtcbiAgZGVsYXk6IG51bWJlcjtcbiAgbmV4dDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmFmRW50cnkge1xuICBpZDogbnVtYmVyO1xuICBjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2s7XG59XG5cbmludGVyZmFjZSBBbmltRW50cnkge1xuICBzdGFydE1zOiBudW1iZXI7XG4gIHBhdXNlZEFjY3VtOiBudW1iZXI7XG4gIHBhdXNlZEF0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVGlja0hvb2soKTogdm9pZCB7XG4gIGlmICh3aW5kb3cuX19wdXBfdGlja19fKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgUkVBTF9EQVRFID0gRGF0ZTtcbiAgY29uc3QgZGF0ZU9yaWdpbiA9IFJFQUxfREFURS5ub3coKTtcbiAgbGV0IGN1cnJNcyA9IDA7XG4gIGxldCB0aW1lT2Zmc2V0ID0gMDtcbiAgbGV0IHJhZlF1ZXVlOiBSYWZFbnRyeVtdID0gW107XG4gIGNvbnN0IHRpbWVyczogUmVjb3JkPG51bWJlciwgVGltZXIgfCB1bmRlZmluZWQ+ID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgIHRpbWVPZmZzZXQgKz0gMC4wMTtcbiAgICByZXR1cm4gdGltZU9mZnNldDtcbiAgfTtcblxuICBmdW5jdGlvbiBGYWtlRGF0ZSh0aGlzOiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW10pOiBEYXRlIHwgc3RyaW5nIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRmFrZURhdGUpKSB7XG4gICAgICByZXR1cm4gbmV3IFJFQUxfREFURShkYXRlT3JpZ2luICsgY3Vyck1zKS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncy5sZW5ndGhcbiAgICAgID8gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShSRUFMX0RBVEUsIFtudWxsLCAuLi5hcmdzXSkpKClcbiAgICAgIDogbmV3IFJFQUxfREFURShkYXRlT3JpZ2luICsgY3Vyck1zICsgdGljaygpKTtcbiAgfVxuICBGYWtlRGF0ZS5wcm90b3R5cGUgPSBSRUFMX0RBVEUucHJvdG90eXBlO1xuICBGYWtlRGF0ZS5ub3cgPSAoKSA9PiBkYXRlT3JpZ2luICsgY3Vyck1zICsgdGljaygpO1xuICBGYWtlRGF0ZS5wYXJzZSA9IFJFQUxfREFURS5wYXJzZTtcbiAgRmFrZURhdGUuVVRDID0gUkVBTF9EQVRFLlVUQztcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgRGF0ZTogdW5rbm93biB9KS5EYXRlID0gRmFrZURhdGU7XG4gIHBlcmZvcm1hbmNlLm5vdyA9ICgpID0+IGN1cnJNcyArIHRpY2soKTtcblxuICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKGNiKSA9PiB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICByYWZRdWV1ZS5wdXNoKHsgaWQsIGNiIH0pO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gKGlkKSA9PiB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgc2V0VGltZW91dDogdW5rbm93biB9KS5zZXRUaW1lb3V0ID0gKGNiOiBUaW1lckhhbmRsZXIsIGRlbGF5PzogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiBcInRpbWVvdXRcIiwgY2IsIGRlbGF5OiBkZWxheSB8fCAwLCBuZXh0OiBjdXJyTXMgKyAoZGVsYXkgfHwgMCkgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhclRpbWVvdXQgPSAoaWQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcIm51bWJlclwiKSB7XG4gICAgICBkZWxldGUgdGltZXJzW2lkXTtcbiAgICB9XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldEludGVydmFsOiB1bmtub3duIH0pLnNldEludGVydmFsID0gKGNiOiBUaW1lckhhbmRsZXIsIGRlbGF5PzogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICBjb25zdCBkID0gTWF0aC5tYXgoZGVsYXkgfHwgMCwgMSk7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJpbnRlcnZhbFwiLCBjYiwgZGVsYXk6IGQsIG5leHQ6IGN1cnJNcyArIGQgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhckludGVydmFsID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNhZmVJbnZva2VUaW1lcihmbjogVGltZXJIYW5kbGVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgZm4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8gU3RyaW5nIHRpbWVyIGhhbmRsZXIgcnVucyBhcyBwYWdlIHNjcmlwdCBpbiBnbG9iYWwgc2NvcGUgKEhUTUwgc3BlYyk7IEZ1bmN0aW9uIGN0b3IgbWF0Y2hlcyB0aGF0LCBhdm9pZHMgZXZhbC5cbiAgICAgICAgbmV3IEZ1bmN0aW9uKGZuKSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW1RpY2tdIGVycm9yOlwiLCAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHx8IGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzYWZlSW52b2tlUmFmKGNiOiBGcmFtZVJlcXVlc3RDYWxsYmFjaywgdHM6IG51bWJlcikge1xuICAgIHRyeSB7XG4gICAgICBjYih0cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhbmltU3RhdGUgPSBuZXcgV2Vha01hcDxBbmltYXRpb24sIEFuaW1FbnRyeT4oKTtcbiAgZnVuY3Rpb24gc3luY0FuaW1hdGlvbnMobXM6IG51bWJlcikge1xuICAgIGxldCBhbmltczogQW5pbWF0aW9uW107XG4gICAgdHJ5IHtcbiAgICAgIGFuaW1zID0gZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGEgb2YgYW5pbXMpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYS5wbGF5U3RhdGU7XG4gICAgICBpZiAoc3RhdGUgPT09IFwiaWRsZVwiIHx8IHN0YXRlID09PSBcImZpbmlzaGVkXCIpIHtcbiAgICAgICAgYW5pbVN0YXRlLmRlbGV0ZShhKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYXRlID0gdHlwZW9mIGEucGxheWJhY2tSYXRlID09PSBcIm51bWJlclwiID8gYS5wbGF5YmFja1JhdGUgOiAxO1xuICAgICAgaWYgKHJhdGUgPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgcyA9IGFuaW1TdGF0ZS5nZXQoYSk7XG4gICAgICBpZiAoIXMpIHtcbiAgICAgICAgY29uc3QgY3QwID0gdHlwZW9mIGEuY3VycmVudFRpbWUgPT09IFwibnVtYmVyXCIgPyBhLmN1cnJlbnRUaW1lIDogMDtcbiAgICAgICAgcyA9IHsgc3RhcnRNczogbXMgLSBjdDAgLyByYXRlLCBwYXVzZWRBY2N1bTogMCwgcGF1c2VkQXQ6IC0xIH07XG4gICAgICAgIGFuaW1TdGF0ZS5zZXQoYSwgcyk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUgPT09IFwicGF1c2VkXCIpIHtcbiAgICAgICAgaWYgKHMucGF1c2VkQXQgPCAwKSB7XG4gICAgICAgICAgcy5wYXVzZWRBdCA9IG1zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHMucGF1c2VkQXQgPj0gMCkge1xuICAgICAgICBzLnBhdXNlZEFjY3VtICs9IG1zIC0gcy5wYXVzZWRBdDtcbiAgICAgICAgcy5wYXVzZWRBdCA9IC0xO1xuICAgICAgfVxuICAgICAgYS5jdXJyZW50VGltZSA9IChtcyAtIHMuc3RhcnRNcyAtIHMucGF1c2VkQWNjdW0pICogcmF0ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zOiBudW1iZXIpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICB0aW1lT2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHRpbWVycykpIHtcbiAgICAgIGNvbnN0IHQgPSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICBpZiAoIXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB3aGlsZSAodC5uZXh0IDw9IGN1cnJNcykge1xuICAgICAgICBzYWZlSW52b2tlVGltZXIodC5jYik7XG4gICAgICAgIGlmICh0LnR5cGUgPT09IFwidGltZW91dFwiKSB7XG4gICAgICAgICAgZGVsZXRlIHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0Lm5leHQgKz0gdC5kZWxheTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFmcyA9IHJhZlF1ZXVlLnNwbGljZSgwKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgcmFmcykge1xuICAgICAgc2FmZUludm9rZVJhZihyLmNiLCBjdXJyTXMpO1xuICAgIH1cbiAgICBzeW5jQW5pbWF0aW9ucyhjdXJyTXMpO1xuICB9XG5cbiAgd2luZG93Ll9fcHVwX3RpY2tfXyA9IHsgcHJvY2VzcyB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxudHlwZSBWZWM0ID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmNvbnN0IE1JUlJPUl9QUk9QUyA9IFtcbiAgXCJib3JkZXJSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wUmlnaHRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcbiAgXCJ0cmFuc2Zvcm1cIixcbiAgXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgXCJmaWx0ZXJcIixcbiAgXCJjbGlwUGF0aFwiLFxuICBcImJveFNoYWRvd1wiLFxuICBcIm9wYWNpdHlcIixcbiAgXCJtaXhCbGVuZE1vZGVcIixcbiAgXCJtYXNrXCIsXG4gIFwiekluZGV4XCIsXG4gIFwicG9zaXRpb25cIixcbiAgXCJsZWZ0XCIsXG4gIFwidG9wXCIsXG4gIFwicmlnaHRcIixcbiAgXCJib3R0b21cIixcbl0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGNzc0Nhc2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvW0EtWl0vZywgKGMpID0+IGAtJHtjLnRvTG93ZXJDYXNlKCl9YCk7XG59XG5cbi8vIFRyYWNrIHRoZSBvdmVybGF5IGNhbnZhcyB0byB0aGUgdmlkZW8gZWxlbWVudCdzIGxpdmUgYm94IChwb3NpdGlvbiwgc2l6ZcOXZHByLCBtaXJyb3JlZCB2aXN1YWwgc3R5bGVzKS5cbmV4cG9ydCBmdW5jdGlvbiBzeW5jT3ZlcmxheSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogdm9pZCB7XG4gIGNvbnN0IGNzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodmlkZW8pO1xuICBjdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgLy8gb2Zmc2V0KiBhcmUgcHJlLXRyYW5zZm9ybSBjb29yZHMgZnJvbSBvZmZzZXRQYXJlbnQncyBwYWRkaW5nIGVkZ2UgPSB0aGUgYWJzIGNvbnRhaW5pbmctYmxvY2sgb3JpZ2luOyBtYXAgZGlyZWN0LlxuICBjdi5zdHlsZS5sZWZ0ID0gYCR7dmlkZW8ub2Zmc2V0TGVmdH1weGA7XG4gIGN2LnN0eWxlLnRvcCA9IGAke3ZpZGVvLm9mZnNldFRvcH1weGA7XG4gIGN2LnN0eWxlLndpZHRoID0gYCR7dmlkZW8ub2Zmc2V0V2lkdGh9cHhgO1xuICBjdi5zdHlsZS5oZWlnaHQgPSBgJHt2aWRlby5vZmZzZXRIZWlnaHR9cHhgO1xuICBmb3IgKGNvbnN0IHAgb2YgTUlSUk9SX1BST1BTKSB7XG4gICAgaWYgKHAgPT09IFwicG9zaXRpb25cIiB8fCBwID09PSBcImxlZnRcIiB8fCBwID09PSBcInRvcFwiIHx8IHAgPT09IFwicmlnaHRcIiB8fCBwID09PSBcImJvdHRvbVwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdiA9IGNzLmdldFByb3BlcnR5VmFsdWUoY3NzQ2FzZShwKSk7XG4gICAgaWYgKHYpIHtcbiAgICAgIGN2LnN0eWxlLnNldFByb3BlcnR5KGNzc0Nhc2UocCksIHYpO1xuICAgIH1cbiAgfVxuICAvLyBCYWNraW5nIHN0b3JlIGF0IG9uLXNjcmVlbiBwaXhlbCBzaXplIChwb3N0LXRyYW5zZm9ybSkgc28gZGVjb2RlIHJlc29sdXRpb24gbWF0Y2hlcyBkaXNwbGF5ZWQgcGl4ZWxzLlxuICBjb25zdCB2ciA9IHZpZGVvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICBjb25zdCB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci53aWR0aCAqIGRwcikpO1xuICBjb25zdCBoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci5oZWlnaHQgKiBkcHIpKTtcbiAgaWYgKGN2LndpZHRoICE9PSB3KSB7XG4gICAgY3Yud2lkdGggPSB3O1xuICB9XG4gIGlmIChjdi5oZWlnaHQgIT09IGgpIHtcbiAgICBjdi5oZWlnaHQgPSBoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENhbnZhcyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc25hcDogT2Zmc2NyZWVuQ2FudmFzIHwgdW5kZWZpbmVkKTogSFRNTENhbnZhc0VsZW1lbnQge1xuICBjb25zdCBjdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGN2LmRhdGFzZXRbXCJwdXBWaWRlb092ZXJsYXlcIl0gPSBcIjFcIjtcbiAgY3Yuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICB2aWRlby5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICBjb25zdCBwYXJlbnQgPSB2aWRlby5wYXJlbnROb2RlIHx8IGRvY3VtZW50LmJvZHk7XG4gIHBhcmVudC5pbnNlcnRCZWZvcmUoY3YsIHZpZGVvLm5leHRTaWJsaW5nKTtcbiAgc3luY092ZXJsYXkodmlkZW8sIGN2KTtcbiAgaWYgKHNuYXApIHtcbiAgICB0cnkge1xuICAgICAgY3YuZ2V0Q29udGV4dChcIjJkXCIpIS5kcmF3SW1hZ2Uoc25hcCwgMCwgMCwgY3Yud2lkdGgsIGN2LmhlaWdodCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBjdjtcbn1cblxuLy8gRHJhdyByZWN0IGZvciB0aGUgYml0bWFwIHdpdGhpbiB0aGUgY2FudmFzIHBlciBvYmplY3RGaXQuXG5leHBvcnQgZnVuY3Rpb24gZml0UmVjdChzcmNXOiBudW1iZXIsIHNyY0g6IG51bWJlciwgZHN0VzogbnVtYmVyLCBkc3RIOiBudW1iZXIsIGZpdDogc3RyaW5nKTogVmVjNCB7XG4gIGlmIChmaXQgPT09IFwibm9uZVwiKSB7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHNyY1cpIC8gMiwgKGRzdEggLSBzcmNIKSAvIDIsIHNyY1csIHNyY0hdO1xuICB9XG4gIGlmIChmaXQgPT09IFwiY29udGFpblwiIHx8IGZpdCA9PT0gXCJzY2FsZS1kb3duXCIpIHtcbiAgICBjb25zdCBzYyA9IE1hdGgubWluKGRzdFcgLyBzcmNXLCBkc3RIIC8gc3JjSCk7XG4gICAgY29uc3QgayA9IGZpdCA9PT0gXCJzY2FsZS1kb3duXCIgPyBNYXRoLm1pbigxLCBzYykgOiBzYztcbiAgICBjb25zdCB3cyA9IGsgKiBzcmNXO1xuICAgIGNvbnN0IGhzID0gayAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvdmVyXCIpIHtcbiAgICBjb25zdCBzYzIgPSBNYXRoLm1heChkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IHdzMiA9IHNjMiAqIHNyY1c7XG4gICAgY29uc3QgaHMyID0gc2MyICogc3JjSDtcbiAgICByZXR1cm4gWyhkc3RXIC0gd3MyKSAvIDIsIChkc3RIIC0gaHMyKSAvIDIsIHdzMiwgaHMyXTtcbiAgfVxuICByZXR1cm4gWzAsIDAsIGRzdFcsIGRzdEhdO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuZXhwb3J0IGNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lOi8vXCI7XG5leHBvcnQgY29uc3QgQUhFQUQgPSAxMDtcbmV4cG9ydCBjb25zdCBUQUcgPSBcIltWaWRlb0hvb2tdXCI7XG5cbmV4cG9ydCBjb25zdCBNRURJQV9FUlJfTkVUV09SSyA9IDI7XG5leHBvcnQgY29uc3QgTUVESUFfRVJSX0RFQ09ERSA9IDM7XG5leHBvcnQgY29uc3QgSEFWRV9OT1RISU5HID0gMDtcbmV4cG9ydCBjb25zdCBIQVZFX01FVEFEQVRBID0gMTtcbmV4cG9ydCBjb25zdCBIQVZFX0VOT1VHSF9EQVRBID0gNDtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0VNUFRZID0gMDtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0lETEUgPSAxO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTE9BRElORyA9IDI7XG5leHBvcnQgY29uc3QgTkVUV09SS19OT19TT1VSQ0UgPSAzO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvTWV0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRnJhbWVNZXRhIHtcbiAgcHJlc2VudGF0aW9uVGltZTogbnVtYmVyO1xuICBleHBlY3RlZERpc3BsYXlUaW1lOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBtZWRpYVRpbWU6IG51bWJlcjtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEZyYW1lQ2IgPSAobm93OiBudW1iZXIsIG1ldGE6IFZpZGVvRnJhbWVNZXRhKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhRXJyb3JMaWtlIHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DYWNoZSB7XG4gIGJpdG1hcHM6IE1hcDxudW1iZXIsIEltYWdlQml0bWFwPjtcbiAgaW5GbGlnaHQ6IE1hcDxudW1iZXIsIFByb21pc2U8SW1hZ2VCaXRtYXAgfCBudWxsPj47XG4gIHJlYWRlcnM6IE1hcDxWaWRlb1N0YXRlLCBudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3RhdGUge1xuICBtZXRhOiBWaWRlb01ldGEgfCBudWxsO1xuICBjdjogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gIGVuZGVkOiBib29sZWFuO1xuICBsYXN0RHJhd25JZHg6IG51bWJlcjtcbiAgZGVhZDogYm9vbGVhbjtcbiAgb2JqZWN0Rml0OiBzdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgbmV0d29ya1N0YXRlOiBudW1iZXI7XG4gIHNlZWtpbmc6IGJvb2xlYW47XG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBNZWRpYUVycm9yTGlrZSB8IHVuZGVmaW5lZDtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG4gIG1heFJlYWNoZWQ6IG51bWJlcjtcbiAgcnZmYzogTWFwPG51bWJlciwgRnJhbWVDYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlc0xpa2Uge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgc3RhcnQoaTogbnVtYmVyKTogbnVtYmVyO1xuICBlbmQoaTogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vLyBXaG9sZSBjbGlwIGlzIGRlY29kZS1vbi1kZW1hbmQsIHNvIHRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgYWx3YXlzIFswLCBlbmRdIChvbmUgVGltZVJhbmdlcyBlbnRyeSkuXG5leHBvcnQgZnVuY3Rpb24gdGltZVJhbmdlcyhlbmQ6IG51bWJlcik6IFRpbWVSYW5nZXNMaWtlIHtcbiAgcmV0dXJuIHsgbGVuZ3RoOiBlbmQgPiAwID8gMSA6IDAsIHN0YXJ0OiAoKSA9PiAwLCBlbmQ6ICgpID0+IGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyZShlbDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0eXBlKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IGZpdFJlY3QsIHN5bmNPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIHR5cGUgVmlkZW9GcmFtZU1ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUucnZmYy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNicyA9IFsuLi5zdGF0ZS5ydmZjLnZhbHVlcygpXTtcbiAgc3RhdGUucnZmYy5jbGVhcigpO1xuICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgbWV0YTogVmlkZW9GcmFtZU1ldGEgPSB7XG4gICAgcHJlc2VudGF0aW9uVGltZTogbm93LFxuICAgIGV4cGVjdGVkRGlzcGxheVRpbWU6IG5vdyxcbiAgICB3aWR0aDogc3RhdGUubWV0YSEuZnJhbWVXaWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLm1ldGEhLmZyYW1lSGVpZ2h0LFxuICAgIG1lZGlhVGltZTogc3RhdGUuY3VycmVudFRpbWUsXG4gICAgcHJlc2VudGVkRnJhbWVzOiBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMsXG4gIH07XG4gIGZvciAoY29uc3QgY2Igb2YgY2JzKSB7XG4gICAgY2Iobm93LCBtZXRhKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludChob29rOiBWaWRlb0hvb2ssIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IGhvb2suY2FjaGUuY2FjaGVPZihzdGF0ZS5tZXRhIS5pZCk7XG4gIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gIGxldCBibSA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgaWYgKCFibSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGhvb2suY2FjaGUuZmV0Y2goc3RhdGUsIGlkeCk7XG4gICAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmZXRjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUud2FpdGluZykge1xuICAgICAgICBzdGF0ZS53YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ3YWl0aW5nXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibSA9IGZldGNoZWQ7XG4gIH1cbiAgaWYgKHN0YXRlLndhaXRpbmcpIHtcbiAgICBzdGF0ZS53YWl0aW5nID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgc3RhdGUucHJlc2VudGVkRnJhbWVzKys7XG4gIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZSk7XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEKTtcbiAgaG9vay5jYWNoZS5ldmljdChjKTtcbn1cblxuLy8gVmlydHVhbC10aW1lIHRpY2s6IHN5bmMgb3ZlcmxheXMsIGFkdmFuY2UgZWFjaCBob29rZWQgdmlkZW8ncyBjbG9jayAobG9vcC9lbmQpLCBwYWludCB0aGUgZHVlIGZyYW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2UoaG9vazogVmlkZW9Ib29rLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgdGltZXN0YW1wTXMgLSBob29rLmN1cnJNcykgLyAxMDAwO1xuICBob29rLmN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICBjb25zdCBwczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGNvbnN0IHZpZGVvID0gZWwgYXMgSFRNTFZpZGVvRWxlbWVudDtcbiAgICBjb25zdCBzdGF0ZSA9IGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KTtcbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRWxlbWVudCBncmV3IHBhc3QgdGhlIGRlY29kZWQgKGRvd25zY2FsZWQpIHJlcyDihpIgcmUtZGVjb2RlIGF0IG5hdGl2ZSwgb25lLXNob3QgKGNvdmVycyB6b29tKS5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggPCBzdGF0ZS5tZXRhLndpZHRoICYmXG4gICAgICBzdGF0ZS5jdi53aWR0aCA+IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCAqIDEuMDUgJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pXG4gICAgKSB7XG4gICAgICBob29rLnJlYXR0YWNoKHZpZGVvLCBzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFRpbWUgKz0gZHQgKiAodmlkZW8ucGxheWJhY2tSYXRlIHx8IDEpO1xuICAgICAgc3RhdGUubWF4UmVhY2hlZCA9IE1hdGgubWF4KHN0YXRlLm1heFJlYWNoZWQsIHN0YXRlLmN1cnJlbnRUaW1lKTtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50VGltZSA+PSBzdGF0ZS5tZXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIGlmICh2aWRlby5sb29wKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5jdXJyZW50VGltZSAlIHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIGZpcmUodmlkZW8sIFwiZW5kZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcmUodmlkZW8sIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKSk7XG4gICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBzLnB1c2gocGFpbnQoaG9vaywgdmlkZW8sIHN0YXRlLCBpZHgpKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBTQ0hFTUUsIHR5cGUgVmlkZW9DYWNoZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCBudWxsPiB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlLm1ldGE7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBjb25zdCBjID0gdGhpcy5jYWNoZU9mKG1ldGEuaWQpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYy5pbkZsaWdodC5nZXQoaWR4KTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkKTtcbiAgICB9XG4gICAgY29uc3QgdyA9IG1ldGEuZnJhbWVXaWR0aDtcbiAgICBjb25zdCBoID0gbWV0YS5mcmFtZUhlaWdodDtcbiAgICBjb25zdCBwID0gZmV0Y2goYCR7U0NIRU1FfWZyYW1lP2lkPSR7bWV0YS5pZH0maWR4PSR7aWR4fWApXG4gICAgICAudGhlbigocikgPT4gKHIub2sgPyByLmFycmF5QnVmZmVyKCkgOiBudWxsKSlcbiAgICAgIC50aGVuKChidWYpID0+XG4gICAgICAgIGJ1ZiAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gdyAqIGggKiA0ID8gY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmKSwgdywgaCkpIDogbnVsbCxcbiAgICAgIClcbiAgICAgIC50aGVuKChibSkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICBpZiAoYm0pIHtcbiAgICAgICAgICBjLmJpdG1hcHMuc2V0KGlkeCwgYm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIGMuaW5GbGlnaHQuc2V0KGlkeCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBwcmVmZXRjaChzdGF0ZTogVmlkZW9TdGF0ZSwgZnJvbUlkeDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlLm1ldGE7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1heElkeCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQobWV0YS5kdXJhdGlvbiAqIG1ldGEuZnBzKSk7XG4gICAgZm9yIChsZXQgaSA9IGZyb21JZHg7IGkgPCBmcm9tSWR4ICsgY291bnQ7IGkrKykge1xuICAgICAgaWYgKGkgPCAxIHx8IGkgPiBtYXhJZHgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2b2lkIHRoaXMuZmV0Y2goc3RhdGUsIGkpO1xuICAgIH1cbiAgfVxuXG4gIGV2aWN0KGM6IFZpZGVvQ2FjaGUpOiB2b2lkIHtcbiAgICBsZXQgbWluSWR4ID0gSW5maW5pdHk7XG4gICAgYy5yZWFkZXJzLmZvckVhY2goKGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IG1pbklkeCkge1xuICAgICAgICBtaW5JZHggPSBpZHg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluSWR4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbG9vciA9IG1pbklkeCAtIDI7XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBmbG9vcikge1xuICAgICAgICBibS5jbG9zZSgpO1xuICAgICAgICBjLmJpdG1hcHMuZGVsZXRlKGlkeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBEcm9wIGEgcmVhZGVyOyB3aGVuIHRoZSBsYXN0IGxlYXZlcywgY2xvc2UgYml0bWFwcyBhbmQgdGVsbCB0aGUgc2VydmVyIHRvIHJlbGVhc2UgdGhlIGRlY29kZSBzZXNzaW9uLlxuICByZWxlYXNlKGlkOiBzdHJpbmcsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjLnJlYWRlcnMuZGVsZXRlKHN0YXRlKTtcbiAgICBpZiAoYy5yZWFkZXJzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMuYml0bWFwcy5mb3JFYWNoKChibSkgPT4ge1xuICAgICAgYm0uY2xvc2UoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9jYWNoZXMuZGVsZXRlKGlkKTtcbiAgICBmZXRjaChgJHtTQ0hFTUV9Y2xvc2U/aWQ9JHtpZH1gLCB7IGtlZXBhbGl2ZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyB0eXBlIEZyYW1lQ2IsIGZpcmUsIHRpbWVSYW5nZXMsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIE92ZXJyaWRlIHRoZSBIVE1MTWVkaWFFbGVtZW50IHN1cmZhY2UgZm9yIGhvb2tlZCA8dmlkZW8+OyB1bmhvb2tlZCBlbGVtZW50cyBmYWxsIHRocm91Z2ggdG8gbmF0aXZlLlxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxNZWRpYVNoaW0oaG9vazogVmlkZW9Ib29rKTogdm9pZCB7XG4gIGNvbnN0IEhWRSA9IEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBNRURJQSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBtZGVzYyA9IChwOiBzdHJpbmcpID0+IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFZFLCBwKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1FRElBLCBwKTtcbiAgY29uc3QgY3REZXNjID0gbWRlc2MoXCJjdXJyZW50VGltZVwiKTtcbiAgY29uc3Qgc3JjRGVzYyA9IG1kZXNjKFwic3JjXCIpO1xuICBjb25zdCByYXRlRGVzYyA9IG1kZXNjKFwicGxheWJhY2tSYXRlXCIpO1xuICBjb25zdCBvcmlnUGF1c2UgPSBIVkUucGF1c2U7XG4gIGNvbnN0IG9yaWdSVkZDID0gSFZFLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2s7XG4gIGNvbnN0IG9yaWdDYW5jZWxSVkZDID0gSFZFLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ1F1YWxpdHkgPSBIVkUuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHk7XG4gIGNvbnN0IG9yaWdMb2FkID0gSFZFLmxvYWQ7XG4gIGNvbnN0IHNlc3Npb25zID0gaG9vay5zZXNzaW9ucztcblxuICAvLyBTZXNzaW9uLWJhY2tlZCByZWFkLW9ubHkgcHJvcGVydHkgd2l0aCBuYXRpdmUgZmFsbGJhY2sgd2hlbiB0aGUgZWxlbWVudCBpc24ndCBob29rZWQuXG4gIGNvbnN0IGRlZiA9IChwcm9wOiBzdHJpbmcsIHBpY2s6IChzOiBWaWRlb1N0YXRlKSA9PiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbmF0aXZlR2V0ID0gbWRlc2MocHJvcCk/LmdldDtcbiAgICBpZiAoIW5hdGl2ZUdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtZWRpYV9zaGltOiBubyBuYXRpdmUgZ2V0dGVyIGZvciAke3Byb3B9YCk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIHByb3AsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIHJldHVybiBzID8gcGljayhzKSA6IG5hdGl2ZUdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbiAgZGVmKFwicGF1c2VkXCIsIChzKSA9PiBzLnBhdXNlZCk7XG4gIGRlZihcImVuZGVkXCIsIChzKSA9PiBzLmVuZGVkKTtcbiAgZGVmKFwicmVhZHlTdGF0ZVwiLCAocykgPT4gcy5yZWFkeVN0YXRlKTtcbiAgZGVmKFwibmV0d29ya1N0YXRlXCIsIChzKSA9PiBzLm5ldHdvcmtTdGF0ZSk7XG4gIGRlZihcImVycm9yXCIsIChzKSA9PiBzLmVycm9yID8/IG51bGwpO1xuICBkZWYoXCJzZWVraW5nXCIsIChzKSA9PiBzLnNlZWtpbmcpO1xuICBkZWYoXCJidWZmZXJlZFwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiAwKSk7XG4gIGRlZihcInNlZWthYmxlXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwicGxheWVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWF4UmVhY2hlZCkpO1xuXG4gIEhWRS5wbGF5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIGhvb2suYXR0YWNoKHRoaXMpLnRoZW4oKG5zKSA9PiB7XG4gICAgICAgIGlmIChucykge1xuICAgICAgICAgIGhvb2sucmVzdW1lKHRoaXMsIG5zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGhvb2sucmVzdW1lKHRoaXMsIHMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcbiAgSFZFLnBhdXNlID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgb3JpZ1BhdXNlLmNhbGwodGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcy5wYXVzZWQpIHtcbiAgICAgIHMucGF1c2VkID0gdHJ1ZTtcbiAgICAgIGZpcmUodGhpcywgXCJwYXVzZVwiKTtcbiAgICB9XG4gIH07XG4gIGlmIChjdERlc2M/LmdldCAmJiBjdERlc2Muc2V0KSB7XG4gICAgY29uc3QgY3RHZXQgPSBjdERlc2MuZ2V0O1xuICAgIGNvbnN0IGN0U2V0ID0gY3REZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcImN1cnJlbnRUaW1lXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIHJldHVybiBzID8gcy5jdXJyZW50VGltZSA6IGN0R2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICBjdFNldC5jYWxsKHRoaXMsIHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkdXIgPSBzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiB0O1xuICAgICAgICBzLmN1cnJlbnRUaW1lID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odCwgZHVyKSk7XG4gICAgICAgIHMubWF4UmVhY2hlZCA9IE1hdGgubWF4KHMubWF4UmVhY2hlZCwgcy5jdXJyZW50VGltZSk7XG4gICAgICAgIGlmIChzLmN1cnJlbnRUaW1lIDwgZHVyKSB7XG4gICAgICAgICAgcy5lbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHMuc2Vla2luZyA9IHRydWU7XG4gICAgICAgIGZpcmUodGhpcywgXCJzZWVraW5nXCIpO1xuICAgICAgICBzLnNlZWtpbmcgPSBmYWxzZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtlZFwiKTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInRpbWV1cGRhdGVcIik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGlmIChyYXRlRGVzYz8uc2V0KSB7XG4gICAgY29uc3QgcmF0ZVNldCA9IHJhdGVEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInBsYXliYWNrUmF0ZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHJhdGVEZXNjLmdldCxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCByOiBudW1iZXIpIHtcbiAgICAgICAgcmF0ZVNldC5jYWxsKHRoaXMsIHIpO1xuICAgICAgICBpZiAoc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgZmlyZSh0aGlzLCBcInJhdGVjaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgSFZFLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgY2IpOiBudW1iZXIge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gb3JpZ1JWRkMuY2FsbCh0aGlzLCBjYik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gKytob29rLnJ2ZmNTZXE7XG4gICAgcy5ydmZjLnNldChpZCwgY2IgYXMgRnJhbWVDYik7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgb3JpZ0NhbmNlbFJWRkMuY2FsbCh0aGlzLCBpZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHMucnZmYy5kZWxldGUoaWQpO1xuICB9O1xuICBIVkUuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gb3JpZ1F1YWxpdHkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0aW9uVGltZTogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICB0b3RhbFZpZGVvRnJhbWVzOiBzLnByZXNlbnRlZEZyYW1lcyxcbiAgICAgIGRyb3BwZWRWaWRlb0ZyYW1lczogMCxcbiAgICAgIGNvcnJ1cHRlZFZpZGVvRnJhbWVzOiAwLFxuICAgIH0gYXMgVmlkZW9QbGF5YmFja1F1YWxpdHk7XG4gIH07XG4gIEhWRS5sb2FkID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAoIXNlc3Npb25zLmhhcyh0aGlzKSkge1xuICAgICAgcmV0dXJuIG9yaWdMb2FkLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIGhvb2suZGV0YWNoKHRoaXMpO1xuICAgIGZpcmUodGhpcywgXCJlbXB0aWVkXCIpO1xuICAgIHRoaXMuX19wdXBMYXN0U3JjID0gdW5kZWZpbmVkO1xuICAgIGhvb2suYXR0YWNoKHRoaXMpO1xuICB9O1xuICBpZiAoc3JjRGVzYz8uc2V0KSB7XG4gICAgY29uc3Qgc3JjU2V0ID0gc3JjRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJzcmNcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBzcmNEZXNjLmdldCxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB2OiBzdHJpbmcpIHtcbiAgICAgICAgc3JjU2V0LmNhbGwodGhpcywgdik7XG4gICAgICAgIGhvb2sub25TcmNDaGFuZ2UodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7XG4gIEFIRUFELFxuICBmaXJlLFxuICBIQVZFX0VOT1VHSF9EQVRBLFxuICBIQVZFX01FVEFEQVRBLFxuICBIQVZFX05PVEhJTkcsXG4gIE1FRElBX0VSUl9ERUNPREUsXG4gIE1FRElBX0VSUl9ORVRXT1JLLFxuICB0eXBlIE1lZGlhRXJyb3JMaWtlLFxuICBORVRXT1JLX0VNUFRZLFxuICBORVRXT1JLX0lETEUsXG4gIE5FVFdPUktfTE9BRElORyxcbiAgTkVUV09SS19OT19TT1VSQ0UsXG4gIFNDSEVNRSxcbiAgVEFHLFxuICB0eXBlIFZpZGVvTWV0YSxcbiAgdHlwZSBWaWRlb1N0YXRlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaEFyZ3Mge1xuICB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgc3RhdGU6IFZpZGVvU3RhdGU7XG4gIHNyYzogc3RyaW5nO1xuICBiaXJ0aE1zOiBudW1iZXI7XG4gIG5hdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld1ZpZGVvU3RhdGUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IFZpZGVvU3RhdGUge1xuICByZXR1cm4ge1xuICAgIG1ldGE6IG51bGwsXG4gICAgY3YsXG4gICAgY3R4OiBjdi5nZXRDb250ZXh0KFwiMmRcIikhLFxuICAgIHBhdXNlZDogISh2aWRlby5hdXRvcGxheSB8fCAhdmlkZW8ucGF1c2VkKSxcbiAgICBjdXJyZW50VGltZTogMCxcbiAgICBlbmRlZDogZmFsc2UsXG4gICAgbGFzdERyYXduSWR4OiAtMSxcbiAgICBkZWFkOiBmYWxzZSxcbiAgICBvYmplY3RGaXQ6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKS5vYmplY3RGaXQgfHwgXCJmaWxsXCIsXG4gICAgcmVhZHlTdGF0ZTogSEFWRV9OT1RISU5HLFxuICAgIG5ldHdvcmtTdGF0ZTogTkVUV09SS19FTVBUWSxcbiAgICBzZWVraW5nOiBmYWxzZSxcbiAgICB3YWl0aW5nOiBmYWxzZSxcbiAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgIHByZXNlbnRlZEZyYW1lczogMCxcbiAgICBtYXhSZWFjaGVkOiAwLFxuICAgIHJ2ZmM6IG5ldyBNYXAoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmFpbE9wZW4odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBlcnJvcjogTWVkaWFFcnJvckxpa2UpOiBudWxsIHtcbiAgc3RhdGUuZGVhZCA9IHRydWU7XG4gIHN0YXRlLmVycm9yID0gZXJyb3I7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9fU09VUkNFO1xuICBjb25zb2xlLndhcm4oVEFHLCBgJHtlcnJvci5tZXNzYWdlfSBzcmM9JHt2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyY31gKTtcbiAgZmlyZSh2aWRlbywgXCJlcnJvclwiKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIE9wZW4gdGhlIGZyYW1lIHNlcnZlciBzZXNzaW9uLCB0aGVuIGVtaXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgbG9hZCBzZXF1ZW5jZSAocmVhZHlTdGF0ZS9uZXR3b3JrU3RhdGUgKyBldmVudHMpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uKGhvb2s6IFZpZGVvSG9vaywgYXJnczogQXR0YWNoQXJncyk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IG51bGw+IHtcbiAgY29uc3QgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNcywgbmF0aXZlIH0gPSBhcmdzO1xuICBjb25zdCBmcHMgPSBOdW1iZXIucGFyc2VJbnQodmlkZW8uZGF0YXNldFtcInB1cEZwc1wiXSB8fCBcIjMwXCIsIDEwKTtcbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19MT0FESU5HO1xuICBmaXJlKHZpZGVvLCBcImxvYWRzdGFydFwiKTtcbiAgbGV0IHJlczogUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcSA9IG5hdGl2ZSA/IFwiXCIgOiBgJnc9JHtzdGF0ZS5jdi53aWR0aH0maD0ke3N0YXRlLmN2LmhlaWdodH0mZml0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN0YXRlLm9iamVjdEZpdCl9YDtcbiAgICByZXMgPSBhd2FpdCBmZXRjaChgJHtTQ0hFTUV9b3Blbj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQoc3JjKX0mZnBzPSR7ZnBzfSR7cX1gKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWlsT3Blbih2aWRlbywgc3RhdGUsIHtcbiAgICAgIGNvZGU6IE1FRElBX0VSUl9ORVRXT1JLLFxuICAgICAgbWVzc2FnZTogYG9wZW4gZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgIH0pO1xuICB9XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFyZXMub2spIHtcbiAgICByZXR1cm4gZmFpbE9wZW4odmlkZW8sIHN0YXRlLCB7XG4gICAgICBjb2RlOiBNRURJQV9FUlJfREVDT0RFLFxuICAgICAgbWVzc2FnZTogYG9wZW4gJHtyZXMuc3RhdHVzfTogJHthd2FpdCByZXMudGV4dCgpfWAsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWV0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBWaWRlb01ldGE7XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgc3RhdGUubWV0YSA9IG1ldGE7XG4gIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUucGF1c2VkID8gMCA6IE1hdGgubWF4KDAsIChob29rLmN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb1dpZHRoXCIsIHsgdmFsdWU6IG1ldGEud2lkdGgsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvSGVpZ2h0XCIsIHsgdmFsdWU6IG1ldGEuaGVpZ2h0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJkdXJhdGlvblwiLCB7IHZhbHVlOiBtZXRhLmR1cmF0aW9uLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX01FVEFEQVRBO1xuICBmaXJlKHZpZGVvLCBcImR1cmF0aW9uY2hhbmdlXCIpO1xuICBmaXJlKHZpZGVvLCBcImxvYWRlZG1ldGFkYXRhXCIpO1xuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9FTk9VR0hfREFUQTtcbiAgZmlyZSh2aWRlbywgXCJsb2FkZWRkYXRhXCIpO1xuICBmaXJlKHZpZGVvLCBcImNhbnBsYXlcIik7XG4gIGZpcmUodmlkZW8sIFwiY2FucGxheXRocm91Z2hcIik7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTtcbiAgZmlyZSh2aWRlbywgXCJzdXNwZW5kXCIpO1xuICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gIH1cbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgMSwgQUhFQUQpO1xuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBhZHZhbmNlIH0gZnJvbSBcIi4vZHJpdmVyXCI7XG5pbXBvcnQgeyBGcmFtZUNhY2hlIH0gZnJvbSBcIi4vZnJhbWVfY2FjaGVcIjtcbmltcG9ydCB7IGluc3RhbGxNZWRpYVNoaW0gfSBmcm9tIFwiLi9tZWRpYV9zaGltXCI7XG5pbXBvcnQgeyBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgZmlyZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBMYXN0U3JjPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0hvb2sge1xuICByZWFkb25seSBzZXNzaW9ucyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFZpZGVvU3RhdGU+KCk7XG4gIHJlYWRvbmx5IGF0dGFjaGluZyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFByb21pc2U8VmlkZW9TdGF0ZSB8IG51bGw+PigpO1xuICAvLyBFbnVtZXJhYmxlIG1pcnJvciBvZiBpbi1mbGlnaHQgb3BlbnMgKFdlYWtNYXAgaXNuJ3QgaXRlcmFibGUpIHNvIHJlYWR5KCkgY2FuIGF3YWl0IHRoZW0uXG4gIHJlYWRvbmx5IG9wZW5pbmcgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGNhY2hlID0gbmV3IEZyYW1lQ2FjaGUoKTtcbiAgcnZmY1NlcSA9IDA7XG4gIGN1cnJNcyA9IDA7XG4gIHByaXZhdGUgX2xhc3RTbmFwc2hvdCA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIE9mZnNjcmVlbkNhbnZhcz4oKTtcblxuICBpbnN0YWxsKCk6IHZvaWQge1xuICAgIGluc3RhbGxNZWRpYVNoaW0odGhpcyk7XG4gICAgdGhpcy5zY2FuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRzKSB7XG4gICAgICAgIGlmIChtLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09IFwic3JjXCIpIHtcbiAgICAgICAgICB0aGlzLm9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zY2FuKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG0ucmVtb3ZlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wic3JjXCJdIH0pO1xuICAgIHdpbmRvdy5fX3B1cF92aWRlb19fID0geyBhZHZhbmNlOiAobXMpID0+IGFkdmFuY2UodGhpcywgbXMpLCByZWFkeTogKCkgPT4gdGhpcy5yZWFkeSgpIH07XG4gIH1cblxuICBhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIG5hdGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgbnVsbD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShleGlzdGluZyk7XG4gICAgfVxuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLmF0dGFjaGluZy5nZXQodmlkZW8pO1xuICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICByZXR1cm4gcGVuZGluZztcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuICAgIGlmICgvXihibG9iOnxkYXRhOnxtZWRpYXN0cmVhbTopL2kudGVzdChzcmMpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvLCB0aGlzLl9sYXN0U25hcHNob3QuZ2V0KHZpZGVvKSk7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXdWaWRlb1N0YXRlKHZpZGVvLCBjdik7XG4gICAgdGhpcy5zZXNzaW9ucy5zZXQodmlkZW8sIHN0YXRlKTtcbiAgICBjb25zdCBwID0gb3BlblNlc3Npb24odGhpcywgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNczogdGhpcy5jdXJyTXMsIG5hdGl2ZSB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gICAgICB0aGlzLm9wZW5pbmcuZGVsZXRlKHApO1xuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNoaW5nLnNldCh2aWRlbywgcCk7XG4gICAgdGhpcy5vcGVuaW5nLmFkZChwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIEF3YWl0IG9ubHkgdGhlIG9wZW5zIGluIGZsaWdodCByaWdodCBub3cg4oCUIG5ldmVyIGNoYXNlIG5ld2x5LXNwYXduZWQgb25lcywgb3IgYSByZXRyeWluZyBwYWdlIGxvb3BzIGZvcmV2ZXIuXG4gIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4udGhpcy5vcGVuaW5nXSk7XG4gIH1cblxuICByZXN1bWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgIHN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgfVxuXG4gIGRldGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1ldGEpIHtcbiAgICAgIGlmIChzdGF0ZS5sYXN0RHJhd25JZHggPj0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHN0YXRlLmN2LndpZHRoLCBzdGF0ZS5jdi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IHNjdHggPSBzbmFwLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgICBpZiAoIXNjdHgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIDJkIGNvbnRleHRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjdHguZHJhd0ltYWdlKHN0YXRlLmN2LCAwLCAwKTtcbiAgICAgICAgICB0aGlzLl9sYXN0U25hcHNob3Quc2V0KHZpZGVvLCBzbmFwKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgICAgdGhpcy5jYWNoZS5yZWxlYXNlKHN0YXRlLm1ldGEuaWQsIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUuY3YucmVtb3ZlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5kZWxldGUodmlkZW8pO1xuICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gIH1cblxuICBvblNyY0NoYW5nZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjIHx8IFwiXCI7XG4gICAgaWYgKHZpZGVvLl9fcHVwTGFzdFNyYyA9PT0gc3JjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZpZGVvLl9fcHVwTGFzdFNyYyA9IHNyYztcbiAgICBpZiAodGhpcy5zZXNzaW9ucy5oYXModmlkZW8pKSB7XG4gICAgICB0aGlzLmRldGFjaCh2aWRlbyk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNoKHZpZGVvKTtcbiAgfVxuXG4gIC8vIFJlLW9wZW4gYXQgbmF0aXZlIHJlc29sdXRpb24gKHRoZSBlbGVtZW50IG91dGdyZXcgdGhlIGRvd25zY2FsZWQgZGVjb2RlKSwgcHJlc2VydmluZyBwbGF5YmFjayBzdGF0ZS5cbiAgcmVhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgdCA9IHN0YXRlLmN1cnJlbnRUaW1lO1xuICAgIGNvbnN0IHBhdXNlZCA9IHN0YXRlLnBhdXNlZDtcbiAgICBjb25zdCBlbmRlZCA9IHN0YXRlLmVuZGVkO1xuICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB2b2lkIHRoaXMuYXR0YWNoKHZpZGVvLCB0cnVlKS50aGVuKChucykgPT4ge1xuICAgICAgaWYgKCFucykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBucy5jdXJyZW50VGltZSA9IHQ7XG4gICAgICBucy5wYXVzZWQgPSBwYXVzZWQ7XG4gICAgICBucy5lbmRlZCA9IGVuZGVkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuKHJvb3Q6IEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyb290LnRhZ05hbWUgPT09IFwiVklERU9cIikge1xuICAgICAgdGhpcy5hdHRhY2gocm9vdCBhcyBIVE1MVmlkZW9FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKHJvb3QucXVlcnlTZWxlY3RvckFsbCkge1xuICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwidmlkZW9cIikuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICB0aGlzLmF0dGFjaCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFZpZGVvSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF92aWRlb19fKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5ldyBWaWRlb0hvb2soKS5pbnN0YWxsKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzI2LlxuXG5pbXBvcnQgeyBpbnN0YWxsVGlja0hvb2sgfSBmcm9tIFwiLi9pZnJhbWVfaG9va1wiO1xuaW1wb3J0IHsgaW5zdGFsbFZpZGVvSG9vayB9IGZyb20gXCIuL3ZpZGVvL2hvb2tcIjtcblxuaWYgKHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wKSB7XG4gIGluc3RhbGxUaWNrSG9vaygpO1xuICBpbnN0YWxsVmlkZW9Ib29rKCk7XG59XG4iXX0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2lmcmFtZV9ob29rLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vb3ZlcmxheS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL3R5cGVzLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZHJpdmVyLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZnJhbWVfY2FjaGUudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9tZWRpYV9zaGltLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vc2Vzc2lvbi50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL2hvb2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS9pZnJhbWVfcHJlbG9hZC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwic3luY0FuaW1hdGlvbnMiLCJtcyIsImFuaW1zIiwiYSIsInN0YXRlIiwicmF0ZSIsInMiLCJjdDAiLCJwcm9jZXNzIiwidGltZXN0YW1wTXMiLCJ0IiwicmFmcyIsIk1JUlJPUl9QUk9QUyIsImNzc0Nhc2UiLCJjIiwic3luY092ZXJsYXkiLCJ2aWRlbyIsImN2IiwiY3MiLCJwIiwidiIsInZyIiwiZHByIiwidyIsImgiLCJzZXR1cENhbnZhcyIsInNuYXAiLCJmaXRSZWN0Iiwic3JjVyIsInNyY0giLCJkc3RXIiwiZHN0SCIsImZpdCIsInNjIiwiayIsIndzIiwiaHMiLCJzYzIiLCJ3czIiLCJoczIiLCJTQ0hFTUUiLCJUQUciLCJ0aW1lUmFuZ2VzIiwiZW5kIiwiZmlyZSIsImVsIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJibSIsImZldGNoZWQiLCJhZHZhbmNlIiwiZHQiLCJwcyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsImJ1ZiIsImZyb21JZHgiLCJjb3VudCIsIm1heElkeCIsImkiLCJtaW5JZHgiLCJmbG9vciIsImluc3RhbGxNZWRpYVNoaW0iLCJIVkUiLCJNRURJQSIsIm1kZXNjIiwiY3REZXNjIiwic3JjRGVzYyIsInJhdGVEZXNjIiwib3JpZ1BhdXNlIiwib3JpZ1JWRkMiLCJvcmlnQ2FuY2VsUlZGQyIsIm9yaWdRdWFsaXR5Iiwib3JpZ0xvYWQiLCJzZXNzaW9ucyIsImRlZiIsInByb3AiLCJwaWNrIiwibmF0aXZlR2V0IiwibnMiLCJjdEdldCIsImN0U2V0IiwiZHVyIiwicmF0ZVNldCIsInNyY1NldCIsIm5ld1ZpZGVvU3RhdGUiLCJmYWlsT3BlbiIsImVycm9yIiwib3BlblNlc3Npb24iLCJzcmMiLCJiaXJ0aE1zIiwibmF0aXZlIiwiZnBzIiwicmVzIiwicSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwibiIsInBlbmRpbmciLCJzY3R4IiwicGF1c2VkIiwiZW5kZWQiLCJyb290IiwiaW5zdGFsbFZpZGVvSG9vayJdLCJtYXBwaW5ncyI6InVEQXdCTyxTQUFTQSxHQUF3QixDQUN0QyxHQUFJLE9BQU8sWUFBQSxDQUNULE9BR0YsSUFBTUMsQ0FBQUEsQ0FBWSxJQUFBLENBQ1pDLENBQUFBLENBQWFELENBQUFBLENBQVUsS0FBSSxDQUM3QkUsQ0FBQUEsQ0FBUyxFQUNUQyxDQUFBQSxDQUFhLENBQUEsQ0FDYkMsRUFBdUIsRUFBQyxDQUN0QkMsQ0FBQUEsQ0FBNEMsR0FDOUNDLENBQUFBLENBQVMsQ0FBQSxDQUNQQyxFQUFPLEtBQ1hKLENBQUFBLEVBQWMsSUFDUEEsQ0FBQUEsQ0FBQUEsQ0FHVCxTQUFTSyxDQUFBQSxDQUFBQSxHQUEyQkMsQ0FBQUEsQ0FBZ0MsQ0FDbEUsT0FBTSxJQUFBLFlBQWdCRCxFQUdmQyxDQUFBQSxDQUFLLE1BQUEsQ0FDUixJQUFLLFFBQUEsQ0FBUyxTQUFBLENBQVUsSUFBQSxDQUFLLEtBQUEsQ0FBTVQsRUFBVyxDQUFDLElBQUEsQ0FBTSxHQUFHUyxDQUFJLENBQUMsR0FDN0QsSUFBSVQsQ0FBQUEsQ0FBVUMsQ0FBQUEsQ0FBYUMsQ0FBQUEsQ0FBU0ssR0FBTSxDQUFBLENBSnJDLElBQUlQLENBQUFBLENBQVVDLENBQUFBLENBQWFDLENBQU0sQ0FBQSxDQUFFLFFBQUEsRUFLOUMsQ0FDQU0sRUFBUyxTQUFBLENBQVlSLENBQUFBLENBQVUsVUFDL0JRLENBQUFBLENBQVMsR0FBQSxDQUFNLElBQU1QLENBQUFBLENBQWFDLENBQUFBLENBQVNLLEdBQUssQ0FDaERDLENBQUFBLENBQVMsTUFBUVIsQ0FBQUEsQ0FBVSxLQUFBLENBQzNCUSxFQUFTLEdBQUEsQ0FBTVIsQ0FBQUEsQ0FBVSxJQUN4QixNQUFBLENBQXdDLElBQUEsQ0FBT1EsQ0FBQUEsQ0FDaEQsV0FBQSxDQUFZLElBQU0sSUFBTU4sQ0FBQUEsQ0FBU0ssR0FBSyxDQUV0QyxNQUFBLENBQU8sc0JBQXlCRyxDQUFBQSxFQUFPLENBQ3JDLElBQU1DLENBQUFBLENBQUtMLElBQ1gsT0FBQUYsQ0FBQUEsQ0FBUyxLQUFLLENBQUUsRUFBQSxDQUFBTyxFQUFJLEVBQUEsQ0FBQUQsQ0FBRyxDQUFDLENBQUEsQ0FDakJDLENBQ1QsQ0FBQSxDQUNBLE1BQUEsQ0FBTyxxQkFBd0JBLENBQUFBLEVBQU8sQ0FDcENQLEVBQVdBLENBQUFBLENBQVMsTUFBQSxDQUFRUSxHQUFNQSxDQUFBQSxDQUFFLEVBQUEsR0FBT0QsQ0FBRSxFQUMvQyxDQUFBLENBQ0MsT0FBOEMsVUFBQSxDQUFhLENBQUNELEVBQWtCRyxDQUFBQSxHQUFtQixDQUNoRyxJQUFNRixDQUFBQSxDQUFLTCxJQUNYLE9BQUFELENBQUFBLENBQU9NLENBQUUsQ0FBQSxDQUFJLENBQUUsS0FBTSxTQUFBLENBQVcsRUFBQSxDQUFBRCxDQUFBQSxDQUFJLEtBQUEsQ0FBT0csR0FBUyxDQUFBLENBQUcsSUFBQSxDQUFNWCxHQUFVVyxDQUFBQSxFQUFTLENBQUEsQ0FBRyxFQUM1RUYsQ0FDVCxDQUFBLENBQ0EsTUFBQSxDQUFPLFlBQUEsQ0FBZ0JBLEdBQU8sQ0FDeEIsT0FBT0EsR0FBTyxRQUFBLEVBQ2hCLE9BQU9OLEVBQU9NLENBQUUsRUFFcEIsRUFDQyxNQUFBLENBQStDLFdBQUEsQ0FBYyxDQUFDRCxDQUFBQSxDQUFrQkcsQ0FBQUEsR0FBbUIsQ0FDbEcsSUFBTUYsQ0FBQUEsQ0FBS0wsSUFDTFEsQ0FBQUEsQ0FBSSxJQUFBLENBQUssR0FBQSxDQUFJRCxDQUFBQSxFQUFTLEVBQUcsQ0FBQyxDQUFBLENBQ2hDLE9BQUFSLENBQUFBLENBQU9NLENBQUUsRUFBSSxDQUFFLElBQUEsQ0FBTSxVQUFBLENBQVksRUFBQSxDQUFBRCxFQUFJLEtBQUEsQ0FBT0ksQ0FBQUEsQ0FBRyxLQUFNWixDQUFBQSxDQUFTWSxDQUFFLEVBQ3pESCxDQUNULENBQUEsQ0FDQSxNQUFBLENBQU8sYUFBQSxDQUFpQkEsR0FBTyxDQUN6QixPQUFPQSxHQUFPLFFBQUEsRUFDaEIsT0FBT04sRUFBT00sQ0FBRSxFQUVwQixFQUVBLFNBQVNJLENBQUFBLENBQWdCQyxFQUFrQixDQUN6QyxHQUFJLENBQ0UsT0FBT0EsQ0FBQUEsRUFBTyxTQUVoQixJQUFJLFFBQUEsQ0FBU0EsQ0FBRSxDQUFBLEdBRWZBLENBQUFBLEdBRUosT0FBU0MsQ0FBQUEsQ0FBRyxDQUNWLFFBQVEsS0FBQSxDQUFNLGVBQUEsQ0FBa0JBLENBQUFBLFlBQWEsS0FBQSxFQUFTQSxFQUFFLEtBQUEsRUFBVUEsQ0FBQyxFQUNyRSxDQUNGLENBQ0EsU0FBU0MsQ0FBQUEsQ0FBY1IsQ0FBQUEsQ0FBMEJTLENBQUFBLENBQVksQ0FDM0QsR0FBSSxDQUNGVCxDQUFBQSxDQUFHUyxDQUFFLEVBQ1AsQ0FBQSxNQUFTRixFQUFHLENBQ1YsT0FBQSxDQUFRLE1BQU0sZUFBQSxDQUFrQkEsQ0FBQUEsWUFBYSxPQUFTQSxDQUFBQSxDQUFFLEtBQUEsRUFBVUEsQ0FBQyxFQUNyRSxDQUNGLENBRUEsSUFBTUcsQ0FBQUEsQ0FBWSxJQUFJLE9BQUEsQ0FDdEIsU0FBU0MsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBWSxDQUNsQyxJQUFJQyxDQUFBQSxDQUNKLEdBQUksQ0FDRkEsQ0FBQUEsQ0FBUSxRQUFBLENBQVMsYUFBQSxHQUNuQixDQUFBLEtBQVEsQ0FDTixNQUNGLENBQ0EsSUFBQSxJQUFXQyxLQUFLRCxDQUFBQSxDQUFPLENBQ3JCLElBQU1FLENBQUFBLENBQVFELEVBQUUsU0FBQSxDQUNoQixHQUFJQyxJQUFVLE1BQUEsRUFBVUEsQ0FBQUEsR0FBVSxXQUFZLENBQzVDTCxDQUFBQSxDQUFVLE9BQU9JLENBQUMsQ0FBQSxDQUNsQixRQUNGLENBQ0EsSUFBTUUsRUFBTyxPQUFPRixDQUFBQSxDQUFFLGNBQWlCLFFBQUEsQ0FBV0EsQ0FBQUEsQ0FBRSxZQUFBLENBQWUsQ0FBQSxDQUNuRSxHQUFJRSxDQUFBQSxHQUFTLENBQUEsQ0FDWCxTQUVGLElBQUlDLENBQUFBLENBQUlQLEVBQVUsR0FBQSxDQUFJSSxDQUFDLENBQUEsQ0FDdkIsR0FBSSxDQUFDRyxDQUFBQSxDQUFHLENBQ04sSUFBTUMsQ0FBQUEsQ0FBTSxPQUFPSixFQUFFLFdBQUEsRUFBZ0IsUUFBQSxDQUFXQSxDQUFBQSxDQUFFLFdBQUEsQ0FBYyxFQUNoRUcsQ0FBQUEsQ0FBSSxDQUFFLFFBQVNMLENBQUFBLENBQUtNLENBQUFBLENBQU1GLEVBQU0sV0FBQSxDQUFhLENBQUEsQ0FBRyxTQUFVLEVBQUcsQ0FBQSxDQUM3RE4sRUFBVSxHQUFBLENBQUlJLENBQUFBLENBQUdHLENBQUMsRUFDcEIsQ0FDQSxHQUFJRixDQUFBQSxHQUFVLFFBQUEsQ0FBVSxDQUNsQkUsQ0FBQUEsQ0FBRSxTQUFXLENBQUEsR0FDZkEsQ0FBQUEsQ0FBRSxTQUFXTCxDQUFBQSxDQUFBQSxDQUVmLFFBQ0YsQ0FDSUssQ0FBQUEsQ0FBRSxRQUFBLEVBQVksQ0FBQSxHQUNoQkEsQ0FBQUEsQ0FBRSxhQUFlTCxDQUFBQSxDQUFLSyxDQUFBQSxDQUFFLFNBQ3hCQSxDQUFBQSxDQUFFLFFBQUEsQ0FBVyxJQUVmSCxDQUFBQSxDQUFFLFdBQUEsQ0FBQSxDQUFlRixDQUFBQSxDQUFLSyxDQUFBQSxDQUFFLFFBQVVBLENBQUFBLENBQUUsV0FBQSxFQUFlRCxFQUNyRCxDQUNGLENBRUEsU0FBU0csQ0FBQUEsQ0FBUUMsQ0FBQUEsQ0FBcUIsQ0FDcEM1QixDQUFBQSxDQUFTNEIsRUFDVDNCLENBQUFBLENBQWEsQ0FBQSxDQUNiLFFBQVdRLENBQUFBLElBQU0sTUFBQSxDQUFPLEtBQUtOLENBQU0sQ0FBQSxDQUFHLENBQ3BDLElBQU0wQixFQUFJMUIsQ0FBQUEsQ0FBTyxNQUFBLENBQU9NLENBQUUsQ0FBQyxDQUFBLENBQzNCLEdBQUtvQixDQUFBQSxDQUdMLEtBQU9BLENBQUFBLENBQUUsSUFBQSxFQUFRN0IsR0FBUSxDQUV2QixHQURBYSxFQUFnQmdCLENBQUFBLENBQUUsRUFBRSxFQUNoQkEsQ0FBQUEsQ0FBRSxJQUFBLEdBQVMsU0FBQSxDQUFXLENBQ3hCLE9BQU8xQixDQUFBQSxDQUFPLE1BQUEsQ0FBT00sQ0FBRSxDQUFDLENBQUEsQ0FDeEIsS0FDRixDQUNBb0IsQ0FBQUEsQ0FBRSxNQUFRQSxDQUFBQSxDQUFFLE1BQ2QsQ0FDRixDQUNBLElBQU1DLEVBQU81QixDQUFBQSxDQUFTLE1BQUEsQ0FBTyxDQUFDLENBQUEsQ0FDOUIsSUFBQSxJQUFXUSxDQUFBQSxJQUFLb0IsQ0FBQUEsQ0FDZGQsRUFBY04sQ0FBQUEsQ0FBRSxFQUFBLENBQUlWLENBQU0sQ0FBQSxDQUU1Qm1CLENBQUFBLENBQWVuQixDQUFNLEVBQ3ZCLENBRUEsTUFBQSxDQUFPLFlBQUEsQ0FBZSxDQUFFLE9BQUEsQ0FBQTJCLENBQVEsRUFDbEMsQ0NyS0EsSUFBTUksRUFBZSxDQUNuQixjQUFBLENBQ0EscUJBQUEsQ0FDQSxzQkFBQSxDQUNBLHlCQUNBLHlCQUFBLENBQ0EsV0FBQSxDQUNBLGtCQUNBLFFBQUEsQ0FDQSxVQUFBLENBQ0EsWUFDQSxTQUFBLENBQ0EsY0FBQSxDQUNBLE9BQ0EsUUFBQSxDQUNBLFVBQUEsQ0FDQSxPQUNBLEtBQUEsQ0FDQSxPQUFBLENBQ0EsUUFDRixDQUFBLENBRUEsU0FBU0MsRUFBUVAsQ0FBQUEsQ0FBbUIsQ0FDbEMsT0FBT0EsQ0FBQUEsQ0FBRSxRQUFRLFFBQUEsQ0FBV1EsQ0FBQUEsRUFBTSxJQUFJQSxDQUFBQSxDQUFFLFdBQUEsRUFBYSxDQUFBLENBQUUsQ0FDekQsQ0FHTyxTQUFTQyxFQUFZQyxDQUFBQSxDQUF5QkMsQ0FBQUEsQ0FBNkIsQ0FDaEYsSUFBTUMsQ0FBQUEsQ0FBSyxPQUFPLGdCQUFBLENBQWlCRixDQUFLLENBQUEsQ0FDeENDLENBQUFBLENBQUcsTUFBTSxRQUFBLENBQVcsVUFBQSxDQUVwQkEsRUFBRyxLQUFBLENBQU0sSUFBQSxDQUFPLEdBQUdELENBQUFBLENBQU0sVUFBVSxLQUNuQ0MsQ0FBQUEsQ0FBRyxLQUFBLENBQU0sSUFBTSxDQUFBLEVBQUdELENBQUFBLENBQU0sU0FBUyxDQUFBLEVBQUEsQ0FBQSxDQUNqQ0MsQ0FBQUEsQ0FBRyxNQUFNLEtBQUEsQ0FBUSxDQUFBLEVBQUdELENBQUFBLENBQU0sV0FBVyxLQUNyQ0MsQ0FBQUEsQ0FBRyxLQUFBLENBQU0sT0FBUyxDQUFBLEVBQUdELENBQUFBLENBQU0sWUFBWSxDQUFBLEVBQUEsQ0FBQSxDQUN2QyxJQUFBLElBQVdHLENBQUFBLElBQUtQLENBQUFBLENBQWMsQ0FDNUIsR0FBSU8sQ0FBQUEsR0FBTSxZQUFjQSxDQUFBQSxHQUFNLE1BQUEsRUFBVUEsSUFBTSxLQUFBLEVBQVNBLENBQUFBLEdBQU0sT0FBQSxFQUFXQSxDQUFBQSxHQUFNLFNBQzVFLFNBRUYsSUFBTUMsRUFBSUYsQ0FBQUEsQ0FBRyxnQkFBQSxDQUFpQkwsRUFBUU0sQ0FBQyxDQUFDLEVBQ3BDQyxDQUFBQSxFQUNGSCxDQUFBQSxDQUFHLE1BQU0sV0FBQSxDQUFZSixDQUFBQSxDQUFRTSxDQUFDLENBQUEsQ0FBR0MsQ0FBQyxFQUV0QyxDQUVBLElBQU1DLENBQUFBLENBQUtMLENBQUFBLENBQU0sdUJBQXNCLENBQ2pDTSxDQUFBQSxDQUFNLE9BQU8sZ0JBQUEsRUFBb0IsQ0FBQSxDQUNqQ0MsRUFBSSxJQUFBLENBQUssR0FBQSxDQUFJLENBQUEsQ0FBRyxJQUFBLENBQUssTUFBTUYsQ0FBQUEsQ0FBRyxLQUFBLENBQVFDLENBQUcsQ0FBQyxDQUFBLENBQzFDRSxFQUFJLElBQUEsQ0FBSyxHQUFBLENBQUksQ0FBQSxDQUFHLElBQUEsQ0FBSyxNQUFNSCxDQUFBQSxDQUFHLE1BQUEsQ0FBU0MsQ0FBRyxDQUFDLENBQUEsQ0FDN0NMLEVBQUcsS0FBQSxHQUFVTSxDQUFBQSxHQUNmTixFQUFHLEtBQUEsQ0FBUU0sQ0FBQUEsQ0FBQUEsQ0FFVE4sRUFBRyxNQUFBLEdBQVdPLENBQUFBLEdBQ2hCUCxFQUFHLE1BQUEsQ0FBU08sQ0FBQUEsRUFFaEIsQ0FFTyxTQUFTQyxDQUFBQSxDQUFZVCxDQUFBQSxDQUF5QlUsQ0FBQUEsQ0FBc0QsQ0FDekcsSUFBTVQsQ0FBQUEsQ0FBSyxTQUFTLGFBQUEsQ0FBYyxRQUFRLEVBUTFDLEdBUEFBLENBQUFBLENBQUcsT0FBQSxDQUFRLGVBQUEsQ0FBcUIsSUFDaENBLENBQUFBLENBQUcsS0FBQSxDQUFNLGNBQWdCLE1BQUEsQ0FDekJELENBQUFBLENBQU0sTUFBTSxVQUFBLENBQWEsUUFBQSxDQUN6QkEsQ0FBQUEsQ0FBTSxLQUFBLENBQVEsTUFDQ0EsQ0FBQUEsQ0FBTSxVQUFBLEVBQWMsU0FBUyxJQUFBLEVBQ3JDLFlBQUEsQ0FBYUMsRUFBSUQsQ0FBQUEsQ0FBTSxXQUFXLEVBQ3pDRCxDQUFBQSxDQUFZQyxDQUFBQSxDQUFPQyxDQUFFLENBQUEsQ0FDakJTLENBQUFBLENBQ0YsR0FBSSxDQUNGVCxDQUFBQSxDQUFHLFdBQVcsSUFBSSxDQUFBLENBQUcsU0FBQSxDQUFVUyxDQUFBQSxDQUFNLEVBQUcsQ0FBQSxDQUFHVCxDQUFBQSxDQUFHLE1BQU9BLENBQUFBLENBQUcsTUFBTSxFQUNoRSxDQUFBLEtBQVEsQ0FBQyxDQUVYLE9BQU9BLENBQ1QsQ0FHTyxTQUFTVSxFQUFRQyxDQUFBQSxDQUFjQyxDQUFBQSxDQUFjQyxFQUFjQyxDQUFBQSxDQUFjQyxDQUFBQSxDQUFtQixDQUNqRyxHQUFJQSxJQUFRLE1BQUEsQ0FDVixPQUFPLEVBQUVGLENBQUFBLENBQU9GLENBQUFBLEVBQVEsR0FBSUcsQ0FBQUEsQ0FBT0YsQ0FBQUEsRUFBUSxFQUFHRCxDQUFBQSxDQUFNQyxDQUFJLEVBRTFELEdBQUlHLENBQUFBLEdBQVEsV0FBYUEsQ0FBQUEsR0FBUSxZQUFBLENBQWMsQ0FDN0MsSUFBTUMsQ0FBQUEsQ0FBSyxJQUFBLENBQUssR0FBQSxDQUFJSCxFQUFPRixDQUFBQSxDQUFNRyxDQUFBQSxDQUFPRixDQUFJLENBQUEsQ0FDdENLLENBQUFBLENBQUlGLElBQVEsWUFBQSxDQUFlLElBQUEsQ0FBSyxHQUFBLENBQUksQ0FBQSxDQUFHQyxDQUFFLENBQUEsQ0FBSUEsQ0FBQUEsQ0FDN0NFLEVBQUtELENBQUFBLENBQUlOLENBQUFBLENBQ1RRLEVBQUtGLENBQUFBLENBQUlMLENBQUFBLENBQ2YsT0FBTyxDQUFBLENBQUVDLEVBQU9LLENBQUFBLEVBQU0sQ0FBQSxDQUFBLENBQUlKLEVBQU9LLENBQUFBLEVBQU0sQ0FBQSxDQUFHRCxFQUFJQyxDQUFFLENBQ2xELENBQ0EsR0FBSUosSUFBUSxPQUFBLENBQVMsQ0FDbkIsSUFBTUssQ0FBQUEsQ0FBTSxJQUFBLENBQUssSUFBSVAsQ0FBQUEsQ0FBT0YsQ0FBQUEsQ0FBTUcsQ0FBQUEsQ0FBT0YsQ0FBSSxFQUN2Q1MsQ0FBQUEsQ0FBTUQsQ0FBQUEsQ0FBTVQsRUFDWlcsQ0FBQUEsQ0FBTUYsQ0FBQUEsQ0FBTVIsRUFDbEIsT0FBTyxDQUFBLENBQUVDLENBQUFBLENBQU9RLENBQUFBLEVBQU8sR0FBSVAsQ0FBQUEsQ0FBT1EsQ0FBQUEsRUFBTyxFQUFHRCxDQUFBQSxDQUFLQyxDQUFHLENBQ3RELENBQ0EsT0FBTyxDQUFDLENBQUEsQ0FBRyxFQUFHVCxDQUFBQSxDQUFNQyxDQUFJLENBQzFCLENDL0ZPLElBQU1TLEVBQVMsY0FBQSxDQUVmLElBQU1DLEVBQU0sYUFBQSxDQXVFWixTQUFTQyxFQUFXQyxDQUFBQSxDQUE2QixDQUN0RCxPQUFPLENBQUUsTUFBQSxDQUFRQSxFQUFNLENBQUEsQ0FBSSxDQUFBLENBQUksQ0FBQSxDQUFHLEtBQUEsQ0FBTyxJQUFNLENBQUEsQ0FBRyxHQUFBLENBQUssSUFBTUEsQ0FBSSxDQUNuRSxDQUVPLFNBQVNDLENBQUFBLENBQUtDLENBQUFBLENBQWlCQyxDQUFBQSxDQUFvQixDQUN4REQsQ0FBQUEsQ0FBRyxhQUFBLENBQWMsSUFBSSxLQUFBLENBQU1DLENBQUksQ0FBQyxFQUNsQyxDQzNFQSxTQUFTQyxDQUFBQSxDQUFtQjNDLEVBQXlCLENBQ25ELEdBQUlBLEVBQU0sSUFBQSxDQUFLLElBQUEsR0FBUyxFQUN0QixPQUVGLElBQU00QyxFQUFNLENBQUMsR0FBRzVDLEVBQU0sSUFBQSxDQUFLLE1BQUEsRUFBUSxDQUFBLENBQ25DQSxDQUFBQSxDQUFNLEtBQUssS0FBQSxFQUFNLENBQ2pCLElBQU02QyxDQUFBQSxDQUFNLFlBQVksR0FBQSxFQUFJLENBQ3RCQyxFQUF1QixDQUMzQixnQkFBQSxDQUFrQkQsRUFDbEIsbUJBQUEsQ0FBcUJBLENBQUFBLENBQ3JCLEtBQUEsQ0FBTzdDLENBQUFBLENBQU0sS0FBTSxVQUFBLENBQ25CLE1BQUEsQ0FBUUEsRUFBTSxJQUFBLENBQU0sV0FBQSxDQUNwQixVQUFXQSxDQUFBQSxDQUFNLFdBQUEsQ0FDakIsZUFBQSxDQUFpQkEsQ0FBQUEsQ0FBTSxlQUN6QixDQUFBLENBQ0EsSUFBQSxJQUFXZixLQUFNMkQsQ0FBQUEsQ0FDZjNELENBQUFBLENBQUc0RCxFQUFLQyxDQUFJLEVBRWhCLENBRUEsZUFBZUMsQ0FBQUEsQ0FBTUMsRUFBaUJwQyxDQUFBQSxDQUF5QlosQ0FBQUEsQ0FBbUJpRCxFQUE0QixDQUM1RyxJQUFNdkMsRUFBSXNDLENBQUFBLENBQUssS0FBQSxDQUFNLE9BQUEsQ0FBUWhELENBQUFBLENBQU0sS0FBTSxFQUFFLENBQUEsQ0FDM0NVLEVBQUUsT0FBQSxDQUFRLEdBQUEsQ0FBSVYsRUFBT2lELENBQUcsQ0FBQSxDQUN4QixJQUFJQyxDQUFBQSxDQUFLeEMsRUFBRSxPQUFBLENBQVEsR0FBQSxDQUFJdUMsQ0FBRyxDQUFBLENBQzFCLEdBQUksQ0FBQ0MsQ0FBQUEsQ0FBSSxDQUNQRixDQUFBQSxDQUFLLEtBQUEsQ0FBTSxTQUFTaEQsQ0FBQUEsQ0FBT2lELENBQUFBLENBQU0sRUFBRyxDQUFTLENBQUEsQ0FDN0MsSUFBTUUsQ0FBQUEsQ0FBVSxNQUFNSCxFQUFLLEtBQUEsQ0FBTSxLQUFBLENBQU1oRCxFQUFPaUQsQ0FBRyxDQUFBLENBQ2pELEdBQUlELENBQUFBLENBQUssUUFBQSxDQUFTLElBQUlwQyxDQUFLLENBQUEsR0FBTVosQ0FBQUEsQ0FDL0IsT0FFRixHQUFJLENBQUNtRCxDQUFBQSxDQUFTLENBQ1IsQ0FBQ25ELENBQUFBLENBQU0sUUFBVSxDQUFDQSxDQUFBQSxDQUFNLE9BQUEsR0FDMUJBLENBQUFBLENBQU0sUUFBVSxJQUFBLENBQ2hCd0MsQ0FBQUEsQ0FBSzVCLEVBQU8sU0FBUyxDQUFBLENBQUEsQ0FFdkIsTUFDRixDQUNBc0MsQ0FBQUEsQ0FBS0MsRUFDUCxDQUNJbkQsRUFBTSxPQUFBLEdBQ1JBLENBQUFBLENBQU0sUUFBVSxLQUFBLENBQ1hBLENBQUFBLENBQU0sUUFDVHdDLENBQUFBLENBQUs1QixDQUFBQSxDQUFPLFNBQVMsQ0FBQSxDQUFBLENBR3pCLElBQU1DLEVBQUtiLENBQUFBLENBQU0sRUFBQSxDQUNYYixFQUFJb0MsQ0FBQUEsQ0FBUTJCLENBQUFBLENBQUcsTUFBT0EsQ0FBQUEsQ0FBRyxNQUFBLENBQVFyQyxDQUFBQSxDQUFHLEtBQUEsQ0FBT0EsRUFBRyxNQUFBLENBQVFiLENBQUFBLENBQU0sU0FBUyxDQUFBLENBQzNFQSxDQUFBQSxDQUFNLElBQUksU0FBQSxDQUFVLENBQUEsQ0FBRyxDQUFBLENBQUdhLENBQUFBLENBQUcsTUFBT0EsQ0FBQUEsQ0FBRyxNQUFNLEVBQzdDYixDQUFBQSxDQUFNLEdBQUEsQ0FBSSxVQUFVa0QsQ0FBQUEsQ0FBSS9ELENBQUFBLENBQUUsQ0FBQyxDQUFBLENBQUdBLEVBQUUsQ0FBQyxDQUFBLENBQUdBLEVBQUUsQ0FBQyxDQUFBLENBQUdBLEVBQUUsQ0FBQyxDQUFDLEVBQzlDYSxDQUFBQSxDQUFNLFlBQUEsQ0FBZWlELEVBQ3JCakQsQ0FBQUEsQ0FBTSxlQUFBLEVBQUEsQ0FDTjJDLEVBQW1CM0MsQ0FBSyxDQUFBLENBQ3hCZ0QsRUFBSyxLQUFBLENBQU0sUUFBQSxDQUFTaEQsQ0FBQUEsQ0FBT2lELENBQUFBLENBQU0sRUFBRyxFQUFLLENBQUEsQ0FDekNELEVBQUssS0FBQSxDQUFNLEtBQUEsQ0FBTXRDLENBQUMsRUFDcEIsQ0FHTyxTQUFTMEMsQ0FBQUEsQ0FBUUosRUFBaUIzQyxDQUFBQSxDQUF1QyxDQUM5RSxJQUFNZ0QsQ0FBQUEsQ0FBSyxJQUFBLENBQUssSUFBSSxDQUFBLENBQUdoRCxDQUFBQSxDQUFjMkMsQ0FBQUEsQ0FBSyxNQUFNLEVBQUksR0FBQSxDQUNwREEsQ0FBQUEsQ0FBSyxPQUFTM0MsQ0FBQUEsQ0FDZCxJQUFNaUQsRUFBeUIsRUFBQyxDQUNoQyxnQkFBUyxnQkFBQSxDQUFpQixPQUFPLEVBQUUsT0FBQSxDQUFTYixDQUFBQSxFQUFPLENBQ2pELElBQU03QixDQUFBQSxDQUFRNkIsRUFDUnpDLENBQUFBLENBQVFnRCxDQUFBQSxDQUFLLFFBQUEsQ0FBUyxHQUFBLENBQUlwQyxDQUFLLENBQUEsQ0FLckMsR0FKSSxDQUFDWixDQUFBQSxFQUFTQSxDQUFBQSxDQUFNLE9BR3BCVyxDQUFBQSxDQUFZQyxDQUFBQSxDQUFPWixDQUFBQSxDQUFNLEVBQUUsRUFDdkIsQ0FBQ0EsQ0FBQUEsQ0FBTSxNQUNULE9BR0YsR0FDRUEsRUFBTSxJQUFBLENBQUssVUFBQSxDQUFhQSxDQUFBQSxDQUFNLElBQUEsQ0FBSyxPQUNuQ0EsQ0FBQUEsQ0FBTSxFQUFBLENBQUcsTUFBUUEsQ0FBQUEsQ0FBTSxJQUFBLENBQUssV0FBYSxJQUFBLEVBQ3pDLENBQUNnRCxFQUFLLFNBQUEsQ0FBVSxHQUFBLENBQUlwQyxDQUFLLENBQUEsQ0FDekIsQ0FDQW9DLEVBQUssUUFBQSxDQUFTcEMsQ0FBQUEsQ0FBT1osQ0FBSyxDQUFBLENBQzFCLE1BQ0YsQ0FDSSxDQUFDQSxFQUFNLE1BQUEsRUFBVSxDQUFDQSxFQUFNLEtBQUEsR0FDMUJBLENBQUFBLENBQU0sYUFBZXFELENBQUFBLEVBQU16QyxDQUFBQSxDQUFNLFlBQUEsRUFBZ0IsQ0FBQSxDQUFBLENBQ2pEWixFQUFNLFVBQUEsQ0FBYSxJQUFBLENBQUssSUFBSUEsQ0FBQUEsQ0FBTSxVQUFBLENBQVlBLEVBQU0sV0FBVyxDQUFBLENBQzNEQSxDQUFBQSxDQUFNLFdBQUEsRUFBZUEsRUFBTSxJQUFBLENBQUssUUFBQSxDQUM5QlksRUFBTSxJQUFBLENBQ1JaLENBQUFBLENBQU0sWUFBY0EsQ0FBQUEsQ0FBTSxXQUFBLENBQWNBLEVBQU0sSUFBQSxDQUFLLFFBQUEsRUFFbkRBLEVBQU0sV0FBQSxDQUFjQSxDQUFBQSxDQUFNLEtBQUssUUFBQSxDQUMvQkEsQ0FBQUEsQ0FBTSxPQUFTLElBQUEsQ0FDZkEsQ0FBQUEsQ0FBTSxLQUFBLENBQVEsSUFBQSxDQUNkd0MsRUFBSzVCLENBQUFBLENBQU8sT0FBTyxHQUdyQjRCLENBQUFBLENBQUs1QixDQUFBQSxDQUFPLFlBQVksQ0FBQSxDQUFBLENBRzVCLElBQU1xQyxDQUFBQSxDQUFNLElBQUEsQ0FBSyxJQUFJLENBQUEsQ0FBRyxJQUFBLENBQUssTUFBTWpELENBQUFBLENBQU0sV0FBQSxDQUFjQSxFQUFNLElBQUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxDQUNsRWlELElBQVFqRCxDQUFBQSxDQUFNLFlBQUEsRUFHbEJzRCxFQUFHLElBQUEsQ0FBS1AsQ0FBQUEsQ0FBTUMsRUFBTXBDLENBQUFBLENBQU9aLENBQUFBLENBQU9pRCxDQUFHLENBQUMsRUFDeEMsQ0FBQyxDQUFBLENBQ00sT0FBQSxDQUFRLElBQUlLLENBQUUsQ0FDdkIsQ0N4R08sSUFBTUMsQ0FBQUEsQ0FBTixLQUFpQixDQUNkLFFBQVUsSUFBSSxHQUFBLENBRXRCLFFBQVFyRSxDQUFBQSxDQUF3QixDQUM5QixJQUFJd0IsQ0FBQUEsQ0FBSSxJQUFBLENBQUssT0FBQSxDQUFRLEdBQUEsQ0FBSXhCLENBQUUsQ0FBQSxDQUMzQixPQUFLd0IsSUFDSEEsQ0FBQUEsQ0FBSSxDQUFFLFFBQVMsSUFBSSxHQUFBLENBQU8sUUFBQSxDQUFVLElBQUksSUFBTyxPQUFBLENBQVMsSUFBSSxHQUFNLENBQUEsQ0FDbEUsSUFBQSxDQUFLLFFBQVEsR0FBQSxDQUFJeEIsQ0FBQUEsQ0FBSXdCLENBQUMsQ0FBQSxDQUFBLENBRWpCQSxDQUNULENBRUEsS0FBQSxDQUFNVixDQUFBQSxDQUFtQmlELEVBQStDLENBQ3RFLElBQU1ILEVBQU85QyxDQUFBQSxDQUFNLElBQUEsQ0FDbkIsR0FBSSxDQUFDOEMsRUFDSCxPQUFPLE9BQUEsQ0FBUSxRQUFRLE1BQVMsQ0FBQSxDQUVsQyxJQUFNcEMsQ0FBQUEsQ0FBSSxJQUFBLENBQUssT0FBQSxDQUFRb0MsQ0FBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDeEJVLENBQUFBLENBQVc5QyxFQUFFLFFBQUEsQ0FBUyxHQUFBLENBQUl1QyxDQUFHLENBQUEsQ0FDbkMsR0FBSU8sQ0FBQUEsQ0FDRixPQUFPQSxFQUVULElBQU1DLENBQUFBLENBQVMvQyxFQUFFLE9BQUEsQ0FBUSxHQUFBLENBQUl1QyxDQUFHLENBQUEsQ0FDaEMsR0FBSVEsRUFDRixPQUFPLE9BQUEsQ0FBUSxRQUFRQSxDQUFNLENBQUEsQ0FFL0IsSUFBTXRDLENBQUFBLENBQUkyQixDQUFBQSxDQUFLLFdBQ1QxQixDQUFBQSxDQUFJMEIsQ0FBQUEsQ0FBSyxXQUFBLENBQ1QvQixDQUFBQSxDQUFJLE1BQU0sQ0FBQSxFQUFHcUIsQ0FBTSxZQUFZVSxDQUFBQSxDQUFLLEVBQUUsUUFBUUcsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUN0RCxJQUFBLENBQU05RCxHQUFPQSxDQUFBQSxDQUFFLEVBQUEsQ0FBS0EsRUFBRSxXQUFBLEVBQVksQ0FBSSxNQUFVLENBQUEsQ0FDaEQsSUFBQSxDQUFNdUUsQ0FBQUEsRUFDTEEsQ0FBQUEsRUFBT0EsRUFBSSxVQUFBLEdBQWV2QyxDQUFBQSxDQUFJQyxFQUFJLENBQUEsQ0FDOUIsaUJBQUEsQ0FBa0IsSUFBSSxTQUFBLENBQVUsSUFBSSxrQkFBa0JzQyxDQUFHLENBQUEsQ0FBR3ZDLEVBQUdDLENBQUMsQ0FBQyxFQUNqRSxNQUNOLENBQUEsQ0FDQyxLQUFNOEIsQ0FBQUEsR0FDTHhDLENBQUFBLENBQUUsUUFBQSxDQUFTLE1BQUEsQ0FBT3VDLENBQUcsQ0FBQSxDQUNqQkMsQ0FBQUEsRUFDRnhDLEVBQUUsT0FBQSxDQUFRLEdBQUEsQ0FBSXVDLEVBQUtDLENBQUUsQ0FBQSxDQUVoQkEsQ0FBQUEsQ0FDUixDQUFBLENBQ0EsTUFBTSxJQUFNLENBQ1h4QyxFQUFFLFFBQUEsQ0FBUyxNQUFBLENBQU91QyxDQUFHLEVBRXZCLENBQUMsQ0FBQSxDQUNILE9BQUF2QyxFQUFFLFFBQUEsQ0FBUyxHQUFBLENBQUl1QyxFQUFLbEMsQ0FBQyxDQUFBLENBQ2RBLENBQ1QsQ0FFQSxRQUFBLENBQVNmLEVBQW1CMkQsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQXFCLENBQ2hFLElBQU1kLENBQUFBLENBQU85QyxFQUFNLElBQUEsQ0FDbkIsR0FBSSxDQUFDOEMsQ0FBQUEsQ0FDSCxPQUVGLElBQU1lLENBQUFBLENBQVMsS0FBSyxHQUFBLENBQUksQ0FBQSxDQUFHLEtBQUssS0FBQSxDQUFNZixDQUFBQSxDQUFLLFNBQVdBLENBQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FDL0QsUUFBU2dCLENBQUFBLENBQUlILENBQUFBLENBQVNHLEVBQUlILENBQUFBLENBQVVDLENBQUFBLENBQU9FLElBQ3JDQSxDQUFBQSxDQUFJLENBQUEsRUFBS0EsQ0FBQUEsQ0FBSUQsQ0FBQUEsRUFHWixLQUFLLEtBQUEsQ0FBTTdELENBQUFBLENBQU84RCxDQUFDLEVBRTVCLENBRUEsTUFBTXBELENBQUFBLENBQXFCLENBQ3pCLElBQUlxRCxDQUFBQSxDQUFTLENBQUEsQ0FBQSxDQUFBLENBTWIsR0FMQXJELENBQUFBLENBQUUsT0FBQSxDQUFRLFFBQVN1QyxDQUFBQSxFQUFRLENBQ3JCQSxFQUFNYyxDQUFBQSxHQUNSQSxDQUFBQSxDQUFTZCxDQUFBQSxFQUViLENBQUMsRUFDRyxDQUFDLE1BQUEsQ0FBTyxTQUFTYyxDQUFNLENBQUEsQ0FDekIsT0FFRixJQUFNQyxDQUFBQSxDQUFRRCxDQUFBQSxDQUFTLENBQUEsQ0FDdkJyRCxFQUFFLE9BQUEsQ0FBUSxPQUFBLENBQVEsQ0FBQ3dDLENBQUFBLENBQUlELENBQUFBLEdBQVEsQ0FDekJBLENBQUFBLENBQU1lLENBQUFBLEdBQ1JkLENBQUFBLENBQUcsS0FBQSxHQUNIeEMsQ0FBQUEsQ0FBRSxPQUFBLENBQVEsT0FBT3VDLENBQUcsQ0FBQSxFQUV4QixDQUFDLEVBQ0gsQ0FHQSxPQUFBLENBQVEvRCxDQUFBQSxDQUFZYyxFQUF5QixDQUMzQyxJQUFNVSxFQUFJLElBQUEsQ0FBSyxPQUFBLENBQVEsSUFBSXhCLENBQUUsQ0FBQSxDQUN4QndCLENBQUFBLEdBR0xBLENBQUFBLENBQUUsUUFBUSxNQUFBLENBQU9WLENBQUssRUFDbEIsRUFBQVUsQ0FBQUEsQ0FBRSxRQUFRLElBQUEsQ0FBTyxDQUFBLENBQUEsR0FHckJBLENBQUFBLENBQUUsT0FBQSxDQUFRLFFBQVN3QyxDQUFBQSxFQUFPLENBQ3hCQSxFQUFHLEtBQUEsR0FDTCxDQUFDLENBQUEsQ0FDRCxJQUFBLENBQUssT0FBQSxDQUFRLE1BQUEsQ0FBT2hFLENBQUUsQ0FBQSxDQUN0QixLQUFBLENBQU0sR0FBR2tELENBQU0sQ0FBQSxTQUFBLEVBQVlsRCxDQUFFLENBQUEsQ0FBQSxDQUFJLENBQUUsVUFBVyxJQUFLLENBQUMsSUFDdEQsQ0FDRixDQUFBLENDbEdPLFNBQVMrRSxDQUFBQSxDQUFpQmpCLENBQUFBLENBQXVCLENBQ3RELElBQU1rQixDQUFBQSxDQUFNLGdCQUFBLENBQWlCLFNBQUEsQ0FDdkJDLEVBQVEsZ0JBQUEsQ0FBaUIsU0FBQSxDQUN6QkMsRUFBU3JELENBQUFBLEVBQWMsTUFBQSxDQUFPLHlCQUF5Qm1ELENBQUFBLENBQUtuRCxDQUFDLENBQUEsRUFBSyxNQUFBLENBQU8seUJBQXlCb0QsQ0FBQUEsQ0FBT3BELENBQUMsRUFDMUdzRCxDQUFBQSxDQUFTRCxDQUFBQSxDQUFNLGFBQWEsQ0FBQSxDQUM1QkUsQ0FBQUEsQ0FBVUYsQ0FBQUEsQ0FBTSxLQUFLLEVBQ3JCRyxDQUFBQSxDQUFXSCxDQUFBQSxDQUFNLGNBQWMsQ0FBQSxDQUMvQkksQ0FBQUEsQ0FBWU4sRUFBSSxLQUFBLENBQ2hCTyxDQUFBQSxDQUFXUCxFQUFJLHlCQUFBLENBQ2ZRLENBQUFBLENBQWlCUixFQUFJLHdCQUFBLENBQ3JCUyxDQUFBQSxDQUFjVCxFQUFJLHVCQUFBLENBQ2xCVSxDQUFBQSxDQUFXVixFQUFJLElBQUEsQ0FDZlcsQ0FBQUEsQ0FBVzdCLENBQUFBLENBQUssUUFBQSxDQUdoQjhCLEVBQU0sQ0FBQ0MsQ0FBQUEsQ0FBY0MsSUFBcUMsQ0FDOUQsSUFBTUMsRUFBWWIsQ0FBQUEsQ0FBTVcsQ0FBSSxDQUFBLEVBQUcsR0FBQSxDQUMvQixHQUFJLENBQUNFLENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSxvQ0FBb0NGLENBQUksQ0FBQSxDQUFFLENBQUEsQ0FFNUQsTUFBQSxDQUFPLGVBQWViLENBQUFBLENBQUthLENBQUFBLENBQU0sQ0FDL0IsWUFBQSxDQUFjLElBQUEsQ0FDZCxLQUE0QixDQUMxQixJQUFNN0UsRUFBSTJFLENBQUFBLENBQVMsR0FBQSxDQUFJLElBQUksQ0FBQSxDQUMzQixPQUFPM0UsRUFBSThFLENBQUFBLENBQUs5RSxDQUFDLEVBQUkrRSxDQUFBQSxDQUFVLElBQUEsQ0FBSyxJQUFJLENBQzFDLENBQ0YsQ0FBQyxFQUNILEVBa0NBLEdBakNBSCxDQUFBQSxDQUFJLFNBQVc1RSxDQUFBQSxFQUFNQSxDQUFBQSxDQUFFLE1BQU0sQ0FBQSxDQUM3QjRFLEVBQUksT0FBQSxDQUFVNUUsQ0FBQUEsRUFBTUEsRUFBRSxLQUFLLENBQUEsQ0FDM0I0RSxFQUFJLFlBQUEsQ0FBZTVFLENBQUFBLEVBQU1BLENBQUFBLENBQUUsVUFBVSxFQUNyQzRFLENBQUFBLENBQUksY0FBQSxDQUFpQjVFLEdBQU1BLENBQUFBLENBQUUsWUFBWSxFQUN6QzRFLENBQUFBLENBQUksT0FBQSxDQUFVNUUsR0FBTUEsQ0FBQUEsQ0FBRSxLQUFBLEVBQVMsSUFBSSxDQUFBLENBQ25DNEUsQ0FBQUEsQ0FBSSxVQUFZNUUsQ0FBQUEsRUFBTUEsQ0FBQUEsQ0FBRSxPQUFPLENBQUEsQ0FDL0I0RSxDQUFBQSxDQUFJLFVBQUEsQ0FBYTVFLENBQUFBLEVBQU1vQyxFQUFXcEMsQ0FBQUEsQ0FBRSxJQUFBLENBQU9BLEVBQUUsSUFBQSxDQUFLLFFBQUEsQ0FBVyxDQUFDLENBQUMsQ0FBQSxDQUMvRDRFLENBQUFBLENBQUksVUFBQSxDQUFhNUUsR0FBTW9DLENBQUFBLENBQVdwQyxDQUFBQSxDQUFFLEtBQU9BLENBQUFBLENBQUUsSUFBQSxDQUFLLFNBQVcsQ0FBQyxDQUFDLENBQUEsQ0FDL0Q0RSxDQUFBQSxDQUFJLFNBQVc1RSxDQUFBQSxFQUFNb0MsQ0FBQUEsQ0FBV3BDLEVBQUUsVUFBVSxDQUFDLEVBRTdDZ0UsQ0FBQUEsQ0FBSSxJQUFBLENBQU8sVUFBa0MsQ0FDM0MsSUFBTWhFLEVBQUkyRSxDQUFBQSxDQUFTLEdBQUEsQ0FBSSxJQUFJLENBQUEsQ0FDM0IsT0FBSzNFLEdBT0w4QyxDQUFBQSxDQUFLLE1BQUEsQ0FBTyxJQUFBLENBQU05QyxDQUFDLEVBQ1osT0FBQSxDQUFRLE9BQUEsSUFQTjhDLENBQUFBLENBQUssTUFBQSxDQUFPLElBQUksQ0FBQSxDQUFFLElBQUEsQ0FBTWtDLENBQUFBLEVBQU8sQ0FDaENBLEdBQ0ZsQyxDQUFBQSxDQUFLLE1BQUEsQ0FBTyxLQUFNa0MsQ0FBRSxFQUV4QixDQUFDLENBSUwsQ0FBQSxDQUNBaEIsQ0FBQUEsQ0FBSSxLQUFBLENBQVEsVUFBa0MsQ0FDNUMsSUFBTWhFLEVBQUkyRSxDQUFBQSxDQUFTLEdBQUEsQ0FBSSxJQUFJLENBQUEsQ0FDM0IsR0FBSSxDQUFDM0UsQ0FBQUEsQ0FBRyxDQUNOc0UsRUFBVSxJQUFBLENBQUssSUFBSSxFQUNuQixNQUNGLENBQ0t0RSxFQUFFLE1BQUEsR0FDTEEsQ0FBQUEsQ0FBRSxNQUFBLENBQVMsSUFBQSxDQUNYc0MsRUFBSyxJQUFBLENBQU0sT0FBTyxHQUV0QixDQUFBLENBQ0k2QixDQUFBQSxFQUFRLEtBQU9BLENBQUFBLENBQU8sR0FBQSxDQUFLLENBQzdCLElBQU1jLEVBQVFkLENBQUFBLENBQU8sR0FBQSxDQUNmZSxFQUFRZixDQUFBQSxDQUFPLEdBQUEsQ0FDckIsT0FBTyxjQUFBLENBQWVILENBQUFBLENBQUssYUFBQSxDQUFlLENBQ3hDLGFBQWMsSUFBQSxDQUNkLEdBQUEsRUFBNEIsQ0FDMUIsSUFBTWhFLENBQUFBLENBQUkyRSxFQUFTLEdBQUEsQ0FBSSxJQUFJLEVBQzNCLE9BQU8zRSxDQUFBQSxDQUFJQSxFQUFFLFdBQUEsQ0FBY2lGLENBQUFBLENBQU0sS0FBSyxJQUFJLENBQzVDLEVBQ0EsR0FBQSxDQUE0QjdFLENBQUFBLENBQVcsQ0FDckMsSUFBTUosRUFBSTJFLENBQUFBLENBQVMsR0FBQSxDQUFJLElBQUksQ0FBQSxDQUMzQixHQUFJLENBQUMzRSxDQUFBQSxDQUFHLENBQ05rRixDQUFBQSxDQUFNLElBQUEsQ0FBSyxLQUFNOUUsQ0FBQyxDQUFBLENBQ2xCLE1BQ0YsQ0FDQSxJQUFNK0UsRUFBTW5GLENBQUFBLENBQUUsSUFBQSxDQUFPQSxDQUFBQSxDQUFFLElBQUEsQ0FBSyxTQUFXSSxDQUFBQSxDQUN2Q0osQ0FBQUEsQ0FBRSxZQUFjLElBQUEsQ0FBSyxHQUFBLENBQUksRUFBRyxJQUFBLENBQUssR0FBQSxDQUFJSSxDQUFBQSxDQUFHK0UsQ0FBRyxDQUFDLENBQUEsQ0FDNUNuRixDQUFBQSxDQUFFLFdBQWEsSUFBQSxDQUFLLEdBQUEsQ0FBSUEsRUFBRSxVQUFBLENBQVlBLENBQUFBLENBQUUsV0FBVyxDQUFBLENBQy9DQSxFQUFFLFdBQUEsQ0FBY21GLENBQUFBLEdBQ2xCbkYsRUFBRSxLQUFBLENBQVEsS0FBQSxDQUFBLENBRVpBLEVBQUUsT0FBQSxDQUFVLElBQUEsQ0FDWnNDLENBQUFBLENBQUssSUFBQSxDQUFNLFNBQVMsQ0FBQSxDQUNwQnRDLENBQUFBLENBQUUsUUFBVSxLQUFBLENBQ1pzQyxDQUFBQSxDQUFLLEtBQU0sUUFBUSxDQUFBLENBQ25CQSxDQUFBQSxDQUFLLElBQUEsQ0FBTSxZQUFZLEVBQ3pCLENBQ0YsQ0FBQyxFQUNILENBQ0EsR0FBSStCLENBQUFBLEVBQVUsR0FBQSxDQUFLLENBQ2pCLElBQU1lLENBQUFBLENBQVVmLEVBQVMsR0FBQSxDQUN6QixNQUFBLENBQU8sZUFBZUwsQ0FBQUEsQ0FBSyxjQUFBLENBQWdCLENBQ3pDLFlBQUEsQ0FBYyxJQUFBLENBQ2QsR0FBQSxDQUFLSyxDQUFBQSxDQUFTLElBQ2QsR0FBQSxDQUE0QnBGLENBQUFBLENBQVcsQ0FDckNtRyxDQUFBQSxDQUFRLElBQUEsQ0FBSyxLQUFNbkcsQ0FBQyxDQUFBLENBQ2hCMEYsQ0FBQUEsQ0FBUyxHQUFBLENBQUksSUFBSSxDQUFBLEVBQ25CckMsQ0FBQUEsQ0FBSyxLQUFNLFlBQVksRUFFM0IsQ0FDRixDQUFDLEVBQ0gsQ0F1Q0EsR0F0Q0EwQixFQUFJLHlCQUFBLENBQTRCLFNBQWtDakYsRUFBWSxDQUM1RSxJQUFNaUIsRUFBSTJFLENBQUFBLENBQVMsR0FBQSxDQUFJLElBQUksQ0FBQSxDQUMzQixHQUFJLENBQUMzRSxDQUFBQSxDQUNILE9BQU91RSxFQUFTLElBQUEsQ0FBSyxJQUFBLENBQU14RixDQUFFLENBQUEsQ0FFL0IsSUFBTUMsQ0FBQUEsQ0FBSyxFQUFFOEQsRUFBSyxPQUFBLENBQ2xCLE9BQUE5QyxFQUFFLElBQUEsQ0FBSyxHQUFBLENBQUloQixFQUFJRCxDQUFhLENBQUEsQ0FDckJDLENBQ1QsQ0FBQSxDQUNBZ0YsRUFBSSx3QkFBQSxDQUEyQixTQUFrQ2hGLEVBQWtCLENBQ2pGLElBQU1nQixFQUFJMkUsQ0FBQUEsQ0FBUyxHQUFBLENBQUksSUFBSSxDQUFBLENBQzNCLEdBQUksQ0FBQzNFLENBQUFBLENBQUcsQ0FDTndFLENBQUFBLENBQWUsSUFBQSxDQUFLLEtBQU14RixDQUFFLENBQUEsQ0FDNUIsTUFDRixDQUNBZ0IsQ0FBQUEsQ0FBRSxLQUFLLE1BQUEsQ0FBT2hCLENBQUUsRUFDbEIsQ0FBQSxDQUNBZ0YsQ0FBQUEsQ0FBSSx3QkFBMEIsVUFBa0MsQ0FDOUQsSUFBTWhFLENBQUFBLENBQUkyRSxFQUFTLEdBQUEsQ0FBSSxJQUFJLEVBQzNCLE9BQUszRSxDQUFBQSxDQUdFLENBQ0wsWUFBQSxDQUFjLFdBQUEsQ0FBWSxHQUFBLEVBQUksQ0FDOUIsaUJBQWtCQSxDQUFBQSxDQUFFLGVBQUEsQ0FDcEIsbUJBQW9CLENBQUEsQ0FDcEIsb0JBQUEsQ0FBc0IsQ0FDeEIsQ0FBQSxDQVBTeUUsQ0FBQUEsQ0FBWSxJQUFBLENBQUssSUFBSSxDQVFoQyxDQUFBLENBQ0FULENBQUFBLENBQUksS0FBTyxVQUFrQyxDQUMzQyxHQUFJLENBQUNXLENBQUFBLENBQVMsSUFBSSxJQUFJLENBQUEsQ0FDcEIsT0FBT0QsQ0FBQUEsQ0FBUyxJQUFBLENBQUssSUFBSSxDQUFBLENBRTNCNUIsQ0FBQUEsQ0FBSyxPQUFPLElBQUksQ0FBQSxDQUNoQlIsQ0FBQUEsQ0FBSyxJQUFBLENBQU0sU0FBUyxDQUFBLENBQ3BCLElBQUEsQ0FBSyxhQUFlLE1BQUEsQ0FDcEJRLENBQUFBLENBQUssT0FBTyxJQUFJLEVBQ2xCLENBQUEsQ0FDSXNCLENBQUFBLEVBQVMsSUFBSyxDQUNoQixJQUFNaUIsRUFBU2pCLENBQUFBLENBQVEsR0FBQSxDQUN2QixPQUFPLGNBQUEsQ0FBZUosQ0FBQUEsQ0FBSyxLQUFBLENBQU8sQ0FDaEMsYUFBYyxJQUFBLENBQ2QsR0FBQSxDQUFLSSxFQUFRLEdBQUEsQ0FDYixHQUFBLENBQTRCdEQsRUFBVyxDQUNyQ3VFLENBQUFBLENBQU8sS0FBSyxJQUFBLENBQU12RSxDQUFDLEVBQ25CZ0MsQ0FBQUEsQ0FBSyxXQUFBLENBQVksSUFBSSxFQUN2QixDQUNGLENBQUMsRUFDSCxDQUNGLENDaElPLFNBQVN3QyxFQUFjNUUsQ0FBQUEsQ0FBeUJDLENBQUFBLENBQW1DLENBQ3hGLE9BQU8sQ0FDTCxLQUFNLE1BQUEsQ0FDTixFQUFBLENBQUFBLENBQUFBLENBQ0EsR0FBQSxDQUFLQSxFQUFHLFVBQUEsQ0FBVyxJQUFJLEVBQ3ZCLE1BQUEsQ0FBUSxFQUFFRCxFQUFNLFFBQUEsRUFBWSxDQUFDQSxDQUFBQSxDQUFNLE1BQUEsQ0FBQSxDQUNuQyxZQUFhLENBQUEsQ0FDYixLQUFBLENBQU8sTUFDUCxZQUFBLENBQWMsRUFBQSxDQUNkLEtBQU0sS0FBQSxDQUNOLFNBQUEsQ0FBVyxPQUFPLGdCQUFBLENBQWlCQSxDQUFLLEVBQUUsU0FBQSxFQUFhLE1BQUEsQ0FDdkQsV0FBWSxDQUFBLENBQ1osWUFBQSxDQUFjLEVBQ2QsT0FBQSxDQUFTLEtBQUEsQ0FDVCxPQUFBLENBQVMsS0FBQSxDQUNULE1BQU8sTUFBQSxDQUNQLGVBQUEsQ0FBaUIsRUFDakIsVUFBQSxDQUFZLENBQUEsQ0FDWixLQUFNLElBQUksR0FDWixDQUNGLENBRUEsU0FBUzZFLENBQUFBLENBQVM3RSxDQUFBQSxDQUF5QlosRUFBbUIwRixDQUFBQSxDQUFrQyxDQUM5RjFGLEVBQU0sSUFBQSxDQUFPLElBQUEsQ0FDYkEsQ0FBQUEsQ0FBTSxLQUFBLENBQVEwRixFQUNkMUYsQ0FBQUEsQ0FBTSxZQUFBLENBQWUsRUFDckIsT0FBQSxDQUFRLEtBQUEsQ0FBTXFDLEVBQUssQ0FBQSxFQUFHcUQsQ0FBQUEsQ0FBTSxPQUFPLENBQUEsS0FBQSxFQUFROUUsQ0FBQUEsQ0FBTSxLQUFPQSxDQUFBQSxDQUFNLFVBQVUsRUFBRSxDQUFBLENBQzFFNEIsQ0FBQUEsQ0FBSzVCLEVBQU8sT0FBTyxFQUVyQixDQUdBLGVBQXNCK0UsRUFBWTNDLENBQUFBLENBQWlCaEUsQ0FBQUEsQ0FBbUQsQ0FDcEcsR0FBTSxDQUFFLE1BQUE0QixDQUFBQSxDQUFPLEtBQUEsQ0FBQVosQ0FBQUEsQ0FBTyxHQUFBLENBQUE0RixFQUFLLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBUyxPQUFBQyxDQUFPLENBQUEsQ0FBSTlHLEVBQ3pDK0csQ0FBQUEsQ0FBTSxNQUFBLENBQU8sUUFBQSxDQUFTbkYsQ0FBQUEsQ0FBTSxRQUFRLE1BQUEsRUFBYSxJQUFBLENBQU0sRUFBRSxDQUFBLENBQy9EWixDQUFBQSxDQUFNLGFBQWUsQ0FBQSxDQUNyQndDLENBQUFBLENBQUs1QixDQUFBQSxDQUFPLFdBQVcsRUFDdkIsSUFBSW9GLENBQUFBLENBQ0osR0FBSSxDQUNGLElBQU1DLEVBQUlILENBQUFBLENBQVMsRUFBQSxDQUFLLENBQUEsR0FBQSxFQUFNOUYsQ0FBQUEsQ0FBTSxHQUFHLEtBQUssQ0FBQSxHQUFBLEVBQU1BLEVBQU0sRUFBQSxDQUFHLE1BQU0sUUFBUSxrQkFBQSxDQUFtQkEsQ0FBQUEsQ0FBTSxTQUFTLENBQUMsR0FDNUdnRyxDQUFBQSxDQUFNLE1BQU0sTUFBTSxDQUFBLEVBQUc1RCxDQUFNLFlBQVksa0JBQUEsQ0FBbUJ3RCxDQUFHLENBQUMsQ0FBQSxLQUFBLEVBQVFHLENBQUcsQ0FBQSxFQUFHRSxDQUFDLEVBQUUsRUFDakYsQ0FBQSxNQUFTekcsRUFBRyxDQUNWLE9BQU9pRyxFQUFTN0UsQ0FBQUEsQ0FBT1osQ0FBQUEsQ0FBTyxDQUM1QixJQUFBLENBQU0sQ0FBQSxDQUNOLFFBQVMsQ0FBQSxhQUFBLEVBQWdCUixDQUFBQSxZQUFhLE1BQVFBLENBQUFBLENBQUUsT0FBQSxDQUFVLE1BQUEsQ0FBT0EsQ0FBQyxDQUFDLENBQUEsQ0FDckUsQ0FBQyxDQUNILENBQ0EsR0FBSXdELEVBQUssUUFBQSxDQUFTLEdBQUEsQ0FBSXBDLENBQUssQ0FBQSxHQUFNWixFQUMvQixPQUVGLEdBQUksQ0FBQ2dHLENBQUFBLENBQUksRUFBQSxDQUNQLE9BQU9QLENBQUFBLENBQVM3RSxDQUFBQSxDQUFPWixDQUFBQSxDQUFPLENBQzVCLEtBQU0sQ0FBQSxDQUNOLE9BQUEsQ0FBUyxRQUFRZ0csQ0FBQUEsQ0FBSSxNQUFNLEtBQUssTUFBTUEsQ0FBQUEsQ0FBSSxNQUFNLENBQUEsQ0FDbEQsQ0FBQyxDQUFBLENBRUgsSUFBTWxELEVBQVEsTUFBTWtELENBQUFBLENBQUksTUFBSyxDQUM3QixHQUFJaEQsQ0FBQUEsQ0FBSyxRQUFBLENBQVMsSUFBSXBDLENBQUssQ0FBQSxHQUFNWixFQUdqQyxPQUFBQSxDQUFBQSxDQUFNLEtBQU84QyxDQUFBQSxDQUNiOUMsQ0FBQUEsQ0FBTSxXQUFBLENBQWNBLENBQUFBLENBQU0sT0FBUyxDQUFBLENBQUksSUFBQSxDQUFLLElBQUksQ0FBQSxDQUFBLENBQUlnRCxDQUFBQSxDQUFLLE9BQVM2QyxDQUFBQSxFQUFXLEdBQUksQ0FBQSxDQUNqRixNQUFBLENBQU8sZUFBZWpGLENBQUFBLENBQU8sWUFBQSxDQUFjLENBQUUsS0FBQSxDQUFPa0MsQ0FBQUEsQ0FBSyxNQUFPLFlBQUEsQ0FBYyxJQUFLLENBQUMsQ0FBQSxDQUNwRixNQUFBLENBQU8sZUFBZWxDLENBQUFBLENBQU8sYUFBQSxDQUFlLENBQUUsS0FBQSxDQUFPa0MsQ0FBQUEsQ0FBSyxPQUFRLFlBQUEsQ0FBYyxJQUFLLENBQUMsQ0FBQSxDQUN0RixPQUFPLGNBQUEsQ0FBZWxDLENBQUFBLENBQU8sV0FBWSxDQUFFLEtBQUEsQ0FBT2tDLEVBQUssUUFBQSxDQUFVLFlBQUEsQ0FBYyxJQUFLLENBQUMsRUFDckY5QyxDQUFBQSxDQUFNLFVBQUEsQ0FBYSxFQUNuQndDLENBQUFBLENBQUs1QixDQUFBQSxDQUFPLGdCQUFnQixDQUFBLENBQzVCNEIsQ0FBQUEsQ0FBSzVCLENBQUFBLENBQU8sZ0JBQWdCLEVBQzVCWixDQUFBQSxDQUFNLFVBQUEsQ0FBYSxFQUNuQndDLENBQUFBLENBQUs1QixDQUFBQSxDQUFPLFlBQVksQ0FBQSxDQUN4QjRCLENBQUFBLENBQUs1QixFQUFPLFNBQVMsQ0FBQSxDQUNyQjRCLEVBQUs1QixDQUFBQSxDQUFPLGdCQUFnQixFQUM1QlosQ0FBQUEsQ0FBTSxZQUFBLENBQWUsRUFDckJ3QyxDQUFBQSxDQUFLNUIsQ0FBQUEsQ0FBTyxTQUFTLENBQUEsQ0FDaEJaLEVBQU0sTUFBQSxHQUNUd0MsQ0FBQUEsQ0FBSzVCLEVBQU8sTUFBTSxDQUFBLENBQ2xCNEIsRUFBSzVCLENBQUFBLENBQU8sU0FBUyxDQUFBLENBQUEsQ0FFdkJvQyxDQUFBQSxDQUFLLE1BQU0sUUFBQSxDQUFTaEQsQ0FBQUEsQ0FBTyxFQUFHLEVBQUssQ0FBQSxDQUM1QkEsQ0FDVCxDQzVGTyxJQUFNa0csQ0FBQUEsQ0FBTixLQUFnQixDQUNaLFFBQUEsQ0FBVyxJQUFJLFFBQ2YsU0FBQSxDQUFZLElBQUksUUFFaEIsT0FBQSxDQUFVLElBQUksSUFDZCxLQUFBLENBQVEsSUFBSTNDLEVBQ3JCLE9BQUEsQ0FBVSxDQUFBLENBQ1YsT0FBUyxDQUFBLENBQ0QsYUFBQSxDQUFnQixJQUFJLE9BQUEsQ0FFNUIsT0FBQSxFQUFnQixDQUNkVSxDQUFBQSxDQUFpQixJQUFJLENBQUEsQ0FDckIsSUFBQSxDQUFLLEtBQUssUUFBQSxDQUFTLGVBQWUsRUFDbEMsSUFBSSxnQkFBQSxDQUFrQmtDLENBQUFBLEVBQVMsQ0FDN0IsUUFBV0MsQ0FBQUEsSUFBS0QsQ0FBQUEsQ0FBTSxDQUNwQixHQUFJQyxDQUFBQSxDQUFFLE9BQVMsWUFBQSxFQUFnQkEsQ0FBQUEsQ0FBRSxNQUFBLFlBQWtCLGdCQUFBLEVBQW9CQSxFQUFFLGFBQUEsR0FBa0IsS0FBQSxDQUFPLENBQ2hHLElBQUEsQ0FBSyxXQUFBLENBQVlBLEVBQUUsTUFBTSxDQUFBLENBQ3pCLFFBQ0YsQ0FDQUEsQ0FBQUEsQ0FBRSxXQUFXLE9BQUEsQ0FBU0MsQ0FBQUEsRUFBTSxDQUN0QkEsQ0FBQUEsWUFBYSxPQUFBLEVBQ2YsS0FBSyxJQUFBLENBQUtBLENBQUMsRUFFZixDQUFDLEVBQ0RELENBQUFBLENBQUUsWUFBQSxDQUFhLFFBQVNDLENBQUFBLEVBQU0sQ0FDeEJBLGFBQWEsZ0JBQUEsRUFDZixJQUFBLENBQUssTUFBQSxDQUFPQSxDQUFDLEVBRWpCLENBQUMsRUFDSCxDQUNGLENBQUMsQ0FBQSxDQUFFLFFBQVEsUUFBQSxDQUFVLENBQUUsT0FBQSxDQUFTLElBQUEsQ0FBTSxVQUFXLElBQUEsQ0FBTSxVQUFBLENBQVksS0FBTSxlQUFBLENBQWlCLENBQUMsS0FBSyxDQUFFLENBQUMsRUFDbkcsTUFBQSxDQUFPLGFBQUEsQ0FBZ0IsQ0FBRSxPQUFBLENBQVV4RyxDQUFBQSxFQUFPdUQsRUFBUSxJQUFBLENBQU12RCxDQUFFLEVBQUcsS0FBQSxDQUFPLElBQU0sSUFBQSxDQUFLLEtBQUEsRUFBUSxFQUN6RixDQUVBLE9BQU9lLENBQUFBLENBQXlCa0YsQ0FBQUEsQ0FBUyxNQUF3QyxDQUMvRSxJQUFNdEMsQ0FBQUEsQ0FBVyxJQUFBLENBQUssU0FBUyxHQUFBLENBQUk1QyxDQUFLLEVBQ3hDLEdBQUk0QyxDQUFBQSxDQUNGLE9BQU8sT0FBQSxDQUFRLE9BQUEsQ0FBUUEsQ0FBUSxDQUFBLENBRWpDLElBQU04QyxDQUFBQSxDQUFVLElBQUEsQ0FBSyxVQUFVLEdBQUEsQ0FBSTFGLENBQUssRUFDeEMsR0FBSTBGLENBQUFBLENBQ0YsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNVixFQUFNaEYsQ0FBQUEsQ0FBTSxHQUFBLEVBQU9BLEVBQU0sVUFBQSxDQUkvQixHQUhJLENBQUNnRixDQUFBQSxFQUdELDhCQUFBLENBQStCLElBQUEsQ0FBS0EsQ0FBRyxFQUN6QyxPQUFPLE9BQUEsQ0FBUSxRQUFRLE1BQVMsQ0FBQSxDQUVsQyxJQUFNL0UsQ0FBQUEsQ0FBS1EsQ0FBQUEsQ0FBWVQsQ0FBQUEsQ0FBTyxJQUFBLENBQUssY0FBYyxHQUFBLENBQUlBLENBQUssQ0FBQyxDQUFBLENBQ3JEWixDQUFBQSxDQUFRd0YsRUFBYzVFLENBQUFBLENBQU9DLENBQUUsQ0FBQSxDQUNyQyxJQUFBLENBQUssU0FBUyxHQUFBLENBQUlELENBQUFBLENBQU9aLENBQUssQ0FBQSxDQUM5QixJQUFNZSxFQUFJNEUsQ0FBQUEsQ0FBWSxJQUFBLENBQU0sQ0FBRSxLQUFBLENBQUEvRSxDQUFBQSxDQUFPLE1BQUFaLENBQUFBLENBQU8sR0FBQSxDQUFBNEYsRUFBSyxPQUFBLENBQVMsSUFBQSxDQUFLLE9BQVEsTUFBQSxDQUFBRSxDQUFPLENBQUMsQ0FBQSxDQUFFLFFBQVEsSUFBTSxDQUM3RixLQUFLLFNBQUEsQ0FBVSxNQUFBLENBQU9sRixDQUFLLENBQUEsQ0FDM0IsSUFBQSxDQUFLLE9BQUEsQ0FBUSxNQUFBLENBQU9HLENBQUMsRUFDdkIsQ0FBQyxFQUNELE9BQUEsSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJSCxDQUFBQSxDQUFPRyxDQUFDLENBQUEsQ0FDM0IsSUFBQSxDQUFLLFFBQVEsR0FBQSxDQUFJQSxDQUFDLEVBQ1hBLENBQ1QsQ0FHQSxNQUFNLEtBQUEsRUFBdUIsQ0FDM0IsTUFBTSxPQUFBLENBQVEsVUFBQSxDQUFXLENBQUMsR0FBRyxJQUFBLENBQUssT0FBTyxDQUFDLEVBQzVDLENBRUEsTUFBQSxDQUFPSCxDQUFBQSxDQUF5QlosQ0FBQUEsQ0FBeUIsQ0FDbkQsQ0FBQ0EsQ0FBQUEsQ0FBTSxNQUFBLEVBQVUsQ0FBQ0EsQ0FBQUEsQ0FBTSxLQUFBLEdBRzVCQSxFQUFNLE1BQUEsQ0FBUyxLQUFBLENBQ2ZBLENBQUFBLENBQU0sS0FBQSxDQUFRLE1BQ2R3QyxDQUFBQSxDQUFLNUIsQ0FBQUEsQ0FBTyxNQUFNLENBQUEsQ0FDbEI0QixDQUFBQSxDQUFLNUIsRUFBTyxTQUFTLENBQUEsRUFDdkIsQ0FFQSxNQUFBLENBQU9BLEVBQStCLENBQ3BDLElBQU1aLEVBQVEsSUFBQSxDQUFLLFFBQUEsQ0FBUyxJQUFJWSxDQUFLLENBQUEsQ0FDckMsR0FBS1osQ0FBQUEsQ0FHTCxDQUFBLEdBQUlBLEVBQU0sSUFBQSxDQUFNLENBQ2QsR0FBSUEsQ0FBQUEsQ0FBTSxZQUFBLEVBQWdCLEVBQ3hCLEdBQUksQ0FDRixJQUFNc0IsQ0FBQUEsQ0FBTyxJQUFJLGVBQUEsQ0FBZ0J0QixDQUFBQSxDQUFNLEdBQUcsS0FBQSxDQUFPQSxDQUFBQSxDQUFNLEdBQUcsTUFBTSxDQUFBLENBQzFEdUcsQ0FBQUEsQ0FBT2pGLENBQUFBLENBQUssV0FBVyxJQUFJLENBQUEsQ0FDakMsR0FBSSxDQUFDaUYsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLGVBQWUsQ0FBQSxDQUVqQ0EsRUFBSyxTQUFBLENBQVV2RyxDQUFBQSxDQUFNLEdBQUksQ0FBQSxDQUFHLENBQUMsRUFDN0IsSUFBQSxDQUFLLGFBQUEsQ0FBYyxJQUFJWSxDQUFBQSxDQUFPVSxDQUFJLEVBQ3BDLENBQUEsS0FBUSxDQUFDLENBRVgsSUFBQSxDQUFLLEtBQUEsQ0FBTSxRQUFRdEIsQ0FBQUEsQ0FBTSxJQUFBLENBQUssRUFBQSxDQUFJQSxDQUFLLEVBQ3pDLENBQ0FBLENBQUFBLENBQU0sR0FBRyxNQUFBLEVBQU8sQ0FDaEIsS0FBSyxRQUFBLENBQVMsTUFBQSxDQUFPWSxDQUFLLENBQUEsQ0FDMUIsS0FBSyxTQUFBLENBQVUsTUFBQSxDQUFPQSxDQUFLLEVBQUEsQ0FDN0IsQ0FFQSxZQUFZQSxDQUFBQSxDQUErQixDQUN6QyxJQUFNZ0YsQ0FBQUEsQ0FBTWhGLEVBQU0sR0FBQSxFQUFPQSxDQUFBQSxDQUFNLFlBQWMsRUFBQSxDQUN6Q0EsQ0FBQUEsQ0FBTSxlQUFpQmdGLENBQUFBLEdBRzNCaEYsQ0FBQUEsQ0FBTSxhQUFlZ0YsQ0FBQUEsQ0FDakIsSUFBQSxDQUFLLFNBQVMsR0FBQSxDQUFJaEYsQ0FBSyxHQUN6QixJQUFBLENBQUssTUFBQSxDQUFPQSxDQUFLLENBQUEsQ0FFbkIsSUFBQSxDQUFLLE1BQUEsQ0FBT0EsQ0FBSyxHQUNuQixDQUdBLFFBQUEsQ0FBU0EsRUFBeUJaLENBQUFBLENBQXlCLENBQ3pELElBQU1NLENBQUFBLENBQUlOLENBQUFBLENBQU0sV0FBQSxDQUNWd0csQ0FBQUEsQ0FBU3hHLEVBQU0sTUFBQSxDQUNmeUcsQ0FBQUEsQ0FBUXpHLEVBQU0sS0FBQSxDQUNwQixJQUFBLENBQUssT0FBT1ksQ0FBSyxDQUFBLENBQ1osSUFBQSxDQUFLLE1BQUEsQ0FBT0EsRUFBTyxJQUFJLENBQUEsQ0FBRSxLQUFNc0UsQ0FBQUEsRUFBTyxDQUNwQ0EsSUFHTEEsQ0FBQUEsQ0FBRyxXQUFBLENBQWM1RSxFQUNqQjRFLENBQUFBLENBQUcsTUFBQSxDQUFTc0IsRUFDWnRCLENBQUFBLENBQUcsS0FBQSxDQUFRdUIsR0FDYixDQUFDLEVBQ0gsQ0FFUSxJQUFBLENBQUtDLENBQUFBLENBQTRCLENBQ2xDQSxDQUFBQSxHQUdEQSxFQUFLLE9BQUEsR0FBWSxPQUFBLEVBQ25CLEtBQUssTUFBQSxDQUFPQSxDQUF3QixFQUVsQ0EsQ0FBQUEsQ0FBSyxnQkFBQSxFQUNQQSxDQUFBQSxDQUFLLGdCQUFBLENBQWlCLE9BQU8sQ0FBQSxDQUFFLE9BQUEsQ0FBUzFGLEdBQU0sQ0FDNUMsSUFBQSxDQUFLLE9BQU9BLENBQUMsRUFDZixDQUFDLENBQUEsRUFFTCxDQUNGLENBQUEsQ0FFTyxTQUFTMkYsR0FBeUIsQ0FDbkMsTUFBQSxDQUFPLGVBR1gsSUFBSVQsQ0FBQUEsR0FBWSxPQUFBLEdBQ2xCLENDbEtJLE1BQUEsQ0FBTyxJQUFBLEdBQVMsT0FBTyxHQUFBLEdBQ3pCNUgsQ0FBQUEsR0FDQXFJLENBQUFBLEVBQWlCLENBQUEiLCJmaWxlIjoiaWZyYW1lX3ByZWxvYWQuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF90aWNrX18/OiB7IHByb2Nlc3M6IChtczogbnVtYmVyKSA9PiB2b2lkIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRpbWVyIHtcbiAgdHlwZTogXCJ0aW1lb3V0XCIgfCBcImludGVydmFsXCI7XG4gIGNiOiBUaW1lckhhbmRsZXI7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG5leHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJhZkVudHJ5IHtcbiAgaWQ6IG51bWJlcjtcbiAgY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrO1xufVxuXG5pbnRlcmZhY2UgQW5pbUVudHJ5IHtcbiAgc3RhcnRNczogbnVtYmVyO1xuICBwYXVzZWRBY2N1bTogbnVtYmVyO1xuICBwYXVzZWRBdDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpY2tIb29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3RpY2tfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFJFQUxfREFURSA9IERhdGU7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBSRUFMX0RBVEUubm93KCk7XG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgdGltZU9mZnNldCA9IDA7XG4gIGxldCByYWZRdWV1ZTogUmFmRW50cnlbXSA9IFtdO1xuICBjb25zdCB0aW1lcnM6IFJlY29yZDxudW1iZXIsIFRpbWVyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICB0aW1lT2Zmc2V0ICs9IDAuMDE7XG4gICAgcmV0dXJuIHRpbWVPZmZzZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gRmFrZURhdGUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZha2VEYXRlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoXG4gICAgICA/IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoUkVBTF9EQVRFLCBbbnVsbCwgLi4uYXJnc10pKSgpXG4gICAgICA6IG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKSk7XG4gIH1cbiAgRmFrZURhdGUucHJvdG90eXBlID0gUkVBTF9EQVRFLnByb3RvdHlwZTtcbiAgRmFrZURhdGUubm93ID0gKCkgPT4gZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKTtcbiAgRmFrZURhdGUucGFyc2UgPSBSRUFMX0RBVEUucGFyc2U7XG4gIEZha2VEYXRlLlVUQyA9IFJFQUxfREFURS5VVEM7XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IERhdGU6IHVua25vd24gfSkuRGF0ZSA9IEZha2VEYXRlO1xuICBwZXJmb3JtYW5jZS5ub3cgPSAoKSA9PiBjdXJyTXMgKyB0aWNrKCk7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChjYikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IChpZCkgPT4ge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldFRpbWVvdXQ6IHVua25vd24gfSkuc2V0VGltZW91dCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJ0aW1lb3V0XCIsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRJbnRlcnZhbDogdW5rbm93biB9KS5zZXRJbnRlcnZhbCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwiaW50ZXJ2YWxcIiwgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlVGltZXIoZm46IFRpbWVySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFN0cmluZyB0aW1lciBoYW5kbGVyIHJ1bnMgYXMgcGFnZSBzY3JpcHQgaW4gZ2xvYmFsIHNjb3BlIChIVE1MIHNwZWMpOyBGdW5jdGlvbiBjdG9yIG1hdGNoZXMgdGhhdCwgYXZvaWRzIGV2YWwuXG4gICAgICAgIG5ldyBGdW5jdGlvbihmbikoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2FmZUludm9rZVJhZihjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2ssIHRzOiBudW1iZXIpIHtcbiAgICB0cnkge1xuICAgICAgY2IodHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5pbVN0YXRlID0gbmV3IFdlYWtNYXA8QW5pbWF0aW9uLCBBbmltRW50cnk+KCk7XG4gIGZ1bmN0aW9uIHN5bmNBbmltYXRpb25zKG1zOiBudW1iZXIpIHtcbiAgICBsZXQgYW5pbXM6IEFuaW1hdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBhbmltcyA9IGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhIG9mIGFuaW1zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGEucGxheVN0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImlkbGVcIiB8fCBzdGF0ZSA9PT0gXCJmaW5pc2hlZFwiKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF0ZSA9IHR5cGVvZiBhLnBsYXliYWNrUmF0ZSA9PT0gXCJudW1iZXJcIiA/IGEucGxheWJhY2tSYXRlIDogMTtcbiAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHMgPSBhbmltU3RhdGUuZ2V0KGEpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGNvbnN0IGN0MCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMgPSB7IHN0YXJ0TXM6IG1zIC0gY3QwIC8gcmF0ZSwgcGF1c2VkQWNjdW06IDAsIHBhdXNlZEF0OiAtMSB9O1xuICAgICAgICBhbmltU3RhdGUuc2V0KGEsIHMpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlID09PSBcInBhdXNlZFwiKSB7XG4gICAgICAgIGlmIChzLnBhdXNlZEF0IDwgMCkge1xuICAgICAgICAgIHMucGF1c2VkQXQgPSBtcztcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzLnBhdXNlZEF0ID49IDApIHtcbiAgICAgICAgcy5wYXVzZWRBY2N1bSArPSBtcyAtIHMucGF1c2VkQXQ7XG4gICAgICAgIHMucGF1c2VkQXQgPSAtMTtcbiAgICAgIH1cbiAgICAgIGEuY3VycmVudFRpbWUgPSAobXMgLSBzLnN0YXJ0TXMgLSBzLnBhdXNlZEFjY3VtKSAqIHJhdGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgdGltZU9mZnNldCA9IDA7XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aW1lcnMpKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW051bWJlcihpZCldO1xuICAgICAgaWYgKCF0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgc2FmZUludm9rZVRpbWVyKHQuY2IpO1xuICAgICAgICBpZiAodC50eXBlID09PSBcInRpbWVvdXRcIikge1xuICAgICAgICAgIGRlbGV0ZSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChjb25zdCByIG9mIHJhZnMpIHtcbiAgICAgIHNhZmVJbnZva2VSYWYoci5jYiwgY3Vyck1zKTtcbiAgICB9XG4gICAgc3luY0FuaW1hdGlvbnMoY3Vyck1zKTtcbiAgfVxuXG4gIHdpbmRvdy5fX3B1cF90aWNrX18gPSB7IHByb2Nlc3MgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbnR5cGUgVmVjNCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBNSVJST1JfUFJPUFMgPSBbXG4gIFwiYm9yZGVyUmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzXCIsXG4gIFwidHJhbnNmb3JtXCIsXG4gIFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gIFwiZmlsdGVyXCIsXG4gIFwiY2xpcFBhdGhcIixcbiAgXCJib3hTaGFkb3dcIixcbiAgXCJvcGFjaXR5XCIsXG4gIFwibWl4QmxlbmRNb2RlXCIsXG4gIFwibWFza1wiLFxuICBcInpJbmRleFwiLFxuICBcInBvc2l0aW9uXCIsXG4gIFwibGVmdFwiLFxuICBcInRvcFwiLFxuICBcInJpZ2h0XCIsXG4gIFwiYm90dG9tXCIsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjc3NDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApO1xufVxuXG4vLyBUcmFjayB0aGUgb3ZlcmxheSBjYW52YXMgdG8gdGhlIHZpZGVvIGVsZW1lbnQncyBsaXZlIGJveCAocG9zaXRpb24sIHNpemXDl2RwciwgbWlycm9yZWQgdmlzdWFsIHN0eWxlcykuXG5leHBvcnQgZnVuY3Rpb24gc3luY092ZXJsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgY3Yuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIC8vIG9mZnNldCogYXJlIHByZS10cmFuc2Zvcm0gY29vcmRzIGZyb20gb2Zmc2V0UGFyZW50J3MgcGFkZGluZyBlZGdlID0gdGhlIGFicyBjb250YWluaW5nLWJsb2NrIG9yaWdpbjsgbWFwIGRpcmVjdC5cbiAgY3Yuc3R5bGUubGVmdCA9IGAke3ZpZGVvLm9mZnNldExlZnR9cHhgO1xuICBjdi5zdHlsZS50b3AgPSBgJHt2aWRlby5vZmZzZXRUb3B9cHhgO1xuICBjdi5zdHlsZS53aWR0aCA9IGAke3ZpZGVvLm9mZnNldFdpZHRofXB4YDtcbiAgY3Yuc3R5bGUuaGVpZ2h0ID0gYCR7dmlkZW8ub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgIGlmIChwID09PSBcInBvc2l0aW9uXCIgfHwgcCA9PT0gXCJsZWZ0XCIgfHwgcCA9PT0gXCJ0b3BcIiB8fCBwID09PSBcInJpZ2h0XCIgfHwgcCA9PT0gXCJib3R0b21cIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKGNzc0Nhc2UocCkpO1xuICAgIGlmICh2KSB7XG4gICAgICBjdi5zdHlsZS5zZXRQcm9wZXJ0eShjc3NDYXNlKHApLCB2KTtcbiAgICB9XG4gIH1cbiAgLy8gQmFja2luZyBzdG9yZSBhdCBvbi1zY3JlZW4gcGl4ZWwgc2l6ZSAocG9zdC10cmFuc2Zvcm0pIHNvIGRlY29kZSByZXNvbHV0aW9uIG1hdGNoZXMgZGlzcGxheWVkIHBpeGVscy5cbiAgY29uc3QgdnIgPSB2aWRlby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgY29uc3QgdyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIud2lkdGggKiBkcHIpKTtcbiAgY29uc3QgaCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIuaGVpZ2h0ICogZHByKSk7XG4gIGlmIChjdi53aWR0aCAhPT0gdykge1xuICAgIGN2LndpZHRoID0gdztcbiAgfVxuICBpZiAoY3YuaGVpZ2h0ICE9PSBoKSB7XG4gICAgY3YuaGVpZ2h0ID0gaDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDYW52YXModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHNuYXA6IE9mZnNjcmVlbkNhbnZhcyB8IHVuZGVmaW5lZCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgY29uc3QgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjdi5kYXRhc2V0W1wicHVwVmlkZW9PdmVybGF5XCJdID0gXCIxXCI7XG4gIGN2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgdmlkZW8uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgY29uc3QgcGFyZW50ID0gdmlkZW8ucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5O1xuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gIHN5bmNPdmVybGF5KHZpZGVvLCBjdik7XG4gIGlmIChzbmFwKSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2LmdldENvbnRleHQoXCIyZFwiKSEuZHJhd0ltYWdlKHNuYXAsIDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gY3Y7XG59XG5cbi8vIERyYXcgcmVjdCBmb3IgdGhlIGJpdG1hcCB3aXRoaW4gdGhlIGNhbnZhcyBwZXIgb2JqZWN0Rml0LlxuZXhwb3J0IGZ1bmN0aW9uIGZpdFJlY3Qoc3JjVzogbnVtYmVyLCBzcmNIOiBudW1iZXIsIGRzdFc6IG51bWJlciwgZHN0SDogbnVtYmVyLCBmaXQ6IHN0cmluZyk6IFZlYzQge1xuICBpZiAoZml0ID09PSBcIm5vbmVcIikge1xuICAgIHJldHVybiBbKGRzdFcgLSBzcmNXKSAvIDIsIChkc3RIIC0gc3JjSCkgLyAyLCBzcmNXLCBzcmNIXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvbnRhaW5cIiB8fCBmaXQgPT09IFwic2NhbGUtZG93blwiKSB7XG4gICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IGsgPSBmaXQgPT09IFwic2NhbGUtZG93blwiID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgY29uc3Qgd3MgPSBrICogc3JjVztcbiAgICBjb25zdCBocyA9IGsgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3cykgLyAyLCAoZHN0SCAtIGhzKSAvIDIsIHdzLCBoc107XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgc2MyID0gTWF0aC5tYXgoZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCB3czIgPSBzYzIgKiBzcmNXO1xuICAgIGNvbnN0IGhzMiA9IHNjMiAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzMikgLyAyLCAoZHN0SCAtIGhzMikgLyAyLCB3czIsIGhzMl07XG4gIH1cbiAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmV4cG9ydCBjb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZTovL1wiO1xuZXhwb3J0IGNvbnN0IEFIRUFEID0gMTA7XG5leHBvcnQgY29uc3QgVEFHID0gXCJbVmlkZW9Ib29rXVwiO1xuXG5leHBvcnQgY29uc3QgTUVESUFfRVJSX05FVFdPUksgPSAyO1xuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ERUNPREUgPSAzO1xuZXhwb3J0IGNvbnN0IEhBVkVfTk9USElORyA9IDA7XG5leHBvcnQgY29uc3QgSEFWRV9NRVRBREFUQSA9IDE7XG5leHBvcnQgY29uc3QgSEFWRV9FTk9VR0hfREFUQSA9IDQ7XG5leHBvcnQgY29uc3QgTkVUV09SS19FTVBUWSA9IDA7XG5leHBvcnQgY29uc3QgTkVUV09SS19JRExFID0gMTtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0xPQURJTkcgPSAyO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTk9fU09VUkNFID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZyYW1lTWV0YSB7XG4gIHByZXNlbnRhdGlvblRpbWU6IG51bWJlcjtcbiAgZXhwZWN0ZWREaXNwbGF5VGltZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWVkaWFUaW1lOiBudW1iZXI7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGcmFtZUNiID0gKG5vdzogbnVtYmVyLCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUVycm9yTGlrZSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FjaGUge1xuICBiaXRtYXBzOiBNYXA8bnVtYmVyLCBJbWFnZUJpdG1hcD47XG4gIGluRmxpZ2h0OiBNYXA8bnVtYmVyLCBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRlcnM6IE1hcDxWaWRlb1N0YXRlLCBudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3RhdGUge1xuICBtZXRhPzogVmlkZW9NZXRhO1xuICBjdjogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gIGVuZGVkOiBib29sZWFuO1xuICBsYXN0RHJhd25JZHg6IG51bWJlcjtcbiAgZGVhZDogYm9vbGVhbjtcbiAgb2JqZWN0Rml0OiBzdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgbmV0d29ya1N0YXRlOiBudW1iZXI7XG4gIHNlZWtpbmc6IGJvb2xlYW47XG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBNZWRpYUVycm9yTGlrZSB8IHVuZGVmaW5lZDtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG4gIG1heFJlYWNoZWQ6IG51bWJlcjtcbiAgcnZmYzogTWFwPG51bWJlciwgRnJhbWVDYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlc0xpa2Uge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgc3RhcnQoaTogbnVtYmVyKTogbnVtYmVyO1xuICBlbmQoaTogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vLyBXaG9sZSBjbGlwIGlzIGRlY29kZS1vbi1kZW1hbmQsIHNvIHRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgYWx3YXlzIFswLCBlbmRdIChvbmUgVGltZVJhbmdlcyBlbnRyeSkuXG5leHBvcnQgZnVuY3Rpb24gdGltZVJhbmdlcyhlbmQ6IG51bWJlcik6IFRpbWVSYW5nZXNMaWtlIHtcbiAgcmV0dXJuIHsgbGVuZ3RoOiBlbmQgPiAwID8gMSA6IDAsIHN0YXJ0OiAoKSA9PiAwLCBlbmQ6ICgpID0+IGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyZShlbDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0eXBlKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IGZpdFJlY3QsIHN5bmNPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIHR5cGUgVmlkZW9GcmFtZU1ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUucnZmYy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNicyA9IFsuLi5zdGF0ZS5ydmZjLnZhbHVlcygpXTtcbiAgc3RhdGUucnZmYy5jbGVhcigpO1xuICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgbWV0YTogVmlkZW9GcmFtZU1ldGEgPSB7XG4gICAgcHJlc2VudGF0aW9uVGltZTogbm93LFxuICAgIGV4cGVjdGVkRGlzcGxheVRpbWU6IG5vdyxcbiAgICB3aWR0aDogc3RhdGUubWV0YSEuZnJhbWVXaWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLm1ldGEhLmZyYW1lSGVpZ2h0LFxuICAgIG1lZGlhVGltZTogc3RhdGUuY3VycmVudFRpbWUsXG4gICAgcHJlc2VudGVkRnJhbWVzOiBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMsXG4gIH07XG4gIGZvciAoY29uc3QgY2Igb2YgY2JzKSB7XG4gICAgY2Iobm93LCBtZXRhKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludChob29rOiBWaWRlb0hvb2ssIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IGhvb2suY2FjaGUuY2FjaGVPZihzdGF0ZS5tZXRhIS5pZCk7XG4gIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gIGxldCBibSA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgaWYgKCFibSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGhvb2suY2FjaGUuZmV0Y2goc3RhdGUsIGlkeCk7XG4gICAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmZXRjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUud2FpdGluZykge1xuICAgICAgICBzdGF0ZS53YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ3YWl0aW5nXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibSA9IGZldGNoZWQ7XG4gIH1cbiAgaWYgKHN0YXRlLndhaXRpbmcpIHtcbiAgICBzdGF0ZS53YWl0aW5nID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgc3RhdGUucHJlc2VudGVkRnJhbWVzKys7XG4gIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZSk7XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEKTtcbiAgaG9vay5jYWNoZS5ldmljdChjKTtcbn1cblxuLy8gVmlydHVhbC10aW1lIHRpY2s6IHN5bmMgb3ZlcmxheXMsIGFkdmFuY2UgZWFjaCBob29rZWQgdmlkZW8ncyBjbG9jayAobG9vcC9lbmQpLCBwYWludCB0aGUgZHVlIGZyYW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2UoaG9vazogVmlkZW9Ib29rLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgdGltZXN0YW1wTXMgLSBob29rLmN1cnJNcykgLyAxMDAwO1xuICBob29rLmN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICBjb25zdCBwczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGNvbnN0IHZpZGVvID0gZWwgYXMgSFRNTFZpZGVvRWxlbWVudDtcbiAgICBjb25zdCBzdGF0ZSA9IGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KTtcbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRWxlbWVudCBncmV3IHBhc3QgdGhlIGRlY29kZWQgKGRvd25zY2FsZWQpIHJlcyDihpIgcmUtZGVjb2RlIGF0IG5hdGl2ZSwgb25lLXNob3QgKGNvdmVycyB6b29tKS5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggPCBzdGF0ZS5tZXRhLndpZHRoICYmXG4gICAgICBzdGF0ZS5jdi53aWR0aCA+IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCAqIDEuMDUgJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pXG4gICAgKSB7XG4gICAgICBob29rLnJlYXR0YWNoKHZpZGVvLCBzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFRpbWUgKz0gZHQgKiAodmlkZW8ucGxheWJhY2tSYXRlIHx8IDEpO1xuICAgICAgc3RhdGUubWF4UmVhY2hlZCA9IE1hdGgubWF4KHN0YXRlLm1heFJlYWNoZWQsIHN0YXRlLmN1cnJlbnRUaW1lKTtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50VGltZSA+PSBzdGF0ZS5tZXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIGlmICh2aWRlby5sb29wKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5jdXJyZW50VGltZSAlIHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIGZpcmUodmlkZW8sIFwiZW5kZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcmUodmlkZW8sIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKSk7XG4gICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBzLnB1c2gocGFpbnQoaG9vaywgdmlkZW8sIHN0YXRlLCBpZHgpKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBTQ0hFTUUsIHR5cGUgVmlkZW9DYWNoZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgYyA9IHRoaXMuY2FjaGVPZihtZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZCA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZCk7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBtZXRhLmZyYW1lV2lkdGg7XG4gICAgY29uc3QgaCA9IG1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgcCA9IGZldGNoKGAke1NDSEVNRX1mcmFtZT9pZD0ke21ldGEuaWR9JmlkeD0ke2lkeH1gKVxuICAgICAgLnRoZW4oKHIpID0+IChyLm9rID8gci5hcnJheUJ1ZmZlcigpIDogdW5kZWZpbmVkKSlcbiAgICAgIC50aGVuKChidWYpID0+XG4gICAgICAgIGJ1ZiAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gdyAqIGggKiA0XG4gICAgICAgICAgPyBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShidWYpLCB3LCBoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIClcbiAgICAgIC50aGVuKChibSkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICBpZiAoYm0pIHtcbiAgICAgICAgICBjLmJpdG1hcHMuc2V0KGlkeCwgYm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgYy5pbkZsaWdodC5zZXQoaWR4LCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIHByZWZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBmcm9tSWR4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChtZXRhLmR1cmF0aW9uICogbWV0YS5mcHMpKTtcbiAgICBmb3IgKGxldCBpID0gZnJvbUlkeDsgaSA8IGZyb21JZHggKyBjb3VudDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDEgfHwgaSA+IG1heElkeCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZvaWQgdGhpcy5mZXRjaChzdGF0ZSwgaSk7XG4gICAgfVxuICB9XG5cbiAgZXZpY3QoYzogVmlkZW9DYWNoZSk6IHZvaWQge1xuICAgIGxldCBtaW5JZHggPSBJbmZpbml0eTtcbiAgICBjLnJlYWRlcnMuZm9yRWFjaCgoaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgbWluSWR4KSB7XG4gICAgICAgIG1pbklkeCA9IGlkeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5JZHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsb29yID0gbWluSWR4IC0gMjtcbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0sIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IGZsb29yKSB7XG4gICAgICAgIGJtLmNsb3NlKCk7XG4gICAgICAgIGMuYml0bWFwcy5kZWxldGUoaWR4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIERyb3AgYSByZWFkZXI7IHdoZW4gdGhlIGxhc3QgbGVhdmVzLCBjbG9zZSBiaXRtYXBzIGFuZCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gcmVsZWFzZSB0aGUgZGVjb2RlIHNlc3Npb24uXG4gIHJlbGVhc2UoaWQ6IHN0cmluZywgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMucmVhZGVycy5kZWxldGUoc3RhdGUpO1xuICAgIGlmIChjLnJlYWRlcnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtKSA9PiB7XG4gICAgICBibS5jbG9zZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2NhY2hlcy5kZWxldGUoaWQpO1xuICAgIGZldGNoKGAke1NDSEVNRX1jbG9zZT9pZD0ke2lkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IHR5cGUgRnJhbWVDYiwgZmlyZSwgdGltZVJhbmdlcywgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gT3ZlcnJpZGUgdGhlIEhUTUxNZWRpYUVsZW1lbnQgc3VyZmFjZSBmb3IgaG9va2VkIDx2aWRlbz47IHVuaG9va2VkIGVsZW1lbnRzIGZhbGwgdGhyb3VnaCB0byBuYXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1lZGlhU2hpbShob29rOiBWaWRlb0hvb2spOiB2b2lkIHtcbiAgY29uc3QgSFZFID0gSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IE1FRElBID0gSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IG1kZXNjID0gKHA6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsIHApIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsIHApO1xuICBjb25zdCBjdERlc2MgPSBtZGVzYyhcImN1cnJlbnRUaW1lXCIpO1xuICBjb25zdCBzcmNEZXNjID0gbWRlc2MoXCJzcmNcIik7XG4gIGNvbnN0IHJhdGVEZXNjID0gbWRlc2MoXCJwbGF5YmFja1JhdGVcIik7XG4gIGNvbnN0IG9yaWdQYXVzZSA9IEhWRS5wYXVzZTtcbiAgY29uc3Qgb3JpZ1JWRkMgPSBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ0NhbmNlbFJWRkMgPSBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnUXVhbGl0eSA9IEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgY29uc3Qgb3JpZ0xvYWQgPSBIVkUubG9hZDtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBob29rLnNlc3Npb25zO1xuXG4gIC8vIFNlc3Npb24tYmFja2VkIHJlYWQtb25seSBwcm9wZXJ0eSB3aXRoIG5hdGl2ZSBmYWxsYmFjayB3aGVuIHRoZSBlbGVtZW50IGlzbid0IGhvb2tlZC5cbiAgY29uc3QgZGVmID0gKHByb3A6IHN0cmluZywgcGljazogKHM6IFZpZGVvU3RhdGUpID0+IHVua25vd24pID0+IHtcbiAgICBjb25zdCBuYXRpdmVHZXQgPSBtZGVzYyhwcm9wKT8uZ2V0O1xuICAgIGlmICghbmF0aXZlR2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1lZGlhX3NoaW06IG5vIG5hdGl2ZSBnZXR0ZXIgZm9yICR7cHJvcH1gKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgcHJvcCwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBwaWNrKHMpIDogbmF0aXZlR2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuICBkZWYoXCJwYXVzZWRcIiwgKHMpID0+IHMucGF1c2VkKTtcbiAgZGVmKFwiZW5kZWRcIiwgKHMpID0+IHMuZW5kZWQpO1xuICBkZWYoXCJyZWFkeVN0YXRlXCIsIChzKSA9PiBzLnJlYWR5U3RhdGUpO1xuICBkZWYoXCJuZXR3b3JrU3RhdGVcIiwgKHMpID0+IHMubmV0d29ya1N0YXRlKTtcbiAgZGVmKFwiZXJyb3JcIiwgKHMpID0+IHMuZXJyb3IgPz8gbnVsbCk7XG4gIGRlZihcInNlZWtpbmdcIiwgKHMpID0+IHMuc2Vla2luZyk7XG4gIGRlZihcImJ1ZmZlcmVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwic2Vla2FibGVcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJwbGF5ZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tYXhSZWFjaGVkKSk7XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gaG9vay5hdHRhY2godGhpcykudGhlbigobnMpID0+IHtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgaG9vay5yZXN1bWUodGhpcywgbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG9vay5yZXN1bWUodGhpcywgcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICBIVkUucGF1c2UgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnUGF1c2UuY2FsbCh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzLnBhdXNlZCkge1xuICAgICAgcy5wYXVzZWQgPSB0cnVlO1xuICAgICAgZmlyZSh0aGlzLCBcInBhdXNlXCIpO1xuICAgIH1cbiAgfTtcbiAgaWYgKGN0RGVzYz8uZ2V0ICYmIGN0RGVzYy5zZXQpIHtcbiAgICBjb25zdCBjdEdldCA9IGN0RGVzYy5nZXQ7XG4gICAgY29uc3QgY3RTZXQgPSBjdERlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwiY3VycmVudFRpbWVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3RHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgIGN0U2V0LmNhbGwodGhpcywgdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1ciA9IHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IHQ7XG4gICAgICAgIHMuY3VycmVudFRpbWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0LCBkdXIpKTtcbiAgICAgICAgcy5tYXhSZWFjaGVkID0gTWF0aC5tYXgocy5tYXhSZWFjaGVkLCBzLmN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKHMuY3VycmVudFRpbWUgPCBkdXIpIHtcbiAgICAgICAgICBzLmVuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcy5zZWVraW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtpbmdcIik7XG4gICAgICAgIHMuc2Vla2luZyA9IGZhbHNlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2VkXCIpO1xuICAgICAgICBmaXJlKHRoaXMsIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJhdGVEZXNjPy5zZXQpIHtcbiAgICBjb25zdCByYXRlU2V0ID0gcmF0ZURlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwicGxheWJhY2tSYXRlXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogcmF0ZURlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHI6IG51bWJlcikge1xuICAgICAgICByYXRlU2V0LmNhbGwodGhpcywgcik7XG4gICAgICAgIGlmIChzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgICAgICBmaXJlKHRoaXMsIFwicmF0ZWNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBjYik6IG51bWJlciB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUlZGQy5jYWxsKHRoaXMsIGNiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSArK2hvb2sucnZmY1NlcTtcbiAgICBzLnJ2ZmMuc2V0KGlkLCBjYiBhcyBGcmFtZUNiKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnQ2FuY2VsUlZGQy5jYWxsKHRoaXMsIGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcy5ydmZjLmRlbGV0ZShpZCk7XG4gIH07XG4gIEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUXVhbGl0eS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRpb25UaW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIHRvdGFsVmlkZW9GcmFtZXM6IHMucHJlc2VudGVkRnJhbWVzLFxuICAgICAgZHJvcHBlZFZpZGVvRnJhbWVzOiAwLFxuICAgICAgY29ycnVwdGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgfSBhcyBWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgfTtcbiAgSFZFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICghc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICByZXR1cm4gb3JpZ0xvYWQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgaG9vay5kZXRhY2godGhpcyk7XG4gICAgZmlyZSh0aGlzLCBcImVtcHRpZWRcIik7XG4gICAgdGhpcy5fX3B1cExhc3RTcmMgPSB1bmRlZmluZWQ7XG4gICAgaG9vay5hdHRhY2godGhpcyk7XG4gIH07XG4gIGlmIChzcmNEZXNjPy5zZXQpIHtcbiAgICBjb25zdCBzcmNTZXQgPSBzcmNEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInNyY1wiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHY6IHN0cmluZykge1xuICAgICAgICBzcmNTZXQuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgaG9vay5vblNyY0NoYW5nZSh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHtcbiAgQUhFQUQsXG4gIGZpcmUsXG4gIEhBVkVfRU5PVUdIX0RBVEEsXG4gIEhBVkVfTUVUQURBVEEsXG4gIEhBVkVfTk9USElORyxcbiAgTUVESUFfRVJSX0RFQ09ERSxcbiAgTUVESUFfRVJSX05FVFdPUkssXG4gIHR5cGUgTWVkaWFFcnJvckxpa2UsXG4gIE5FVFdPUktfRU1QVFksXG4gIE5FVFdPUktfSURMRSxcbiAgTkVUV09SS19MT0FESU5HLFxuICBORVRXT1JLX05PX1NPVVJDRSxcbiAgU0NIRU1FLFxuICBUQUcsXG4gIHR5cGUgVmlkZW9NZXRhLFxuICB0eXBlIFZpZGVvU3RhdGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoQXJncyB7XG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50O1xuICBzdGF0ZTogVmlkZW9TdGF0ZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGJpcnRoTXM6IG51bWJlcjtcbiAgbmF0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3VmlkZW9TdGF0ZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogVmlkZW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbWV0YTogdW5kZWZpbmVkLFxuICAgIGN2LFxuICAgIGN0eDogY3YuZ2V0Q29udGV4dChcIjJkXCIpISxcbiAgICBwYXVzZWQ6ICEodmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZCksXG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgZW5kZWQ6IGZhbHNlLFxuICAgIGxhc3REcmF3bklkeDogLTEsXG4gICAgZGVhZDogZmFsc2UsXG4gICAgb2JqZWN0Rml0OiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbykub2JqZWN0Rml0IHx8IFwiZmlsbFwiLFxuICAgIHJlYWR5U3RhdGU6IEhBVkVfTk9USElORyxcbiAgICBuZXR3b3JrU3RhdGU6IE5FVFdPUktfRU1QVFksXG4gICAgc2Vla2luZzogZmFsc2UsXG4gICAgd2FpdGluZzogZmFsc2UsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IDAsXG4gICAgbWF4UmVhY2hlZDogMCxcbiAgICBydmZjOiBuZXcgTWFwKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhaWxPcGVuKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgZXJyb3I6IE1lZGlhRXJyb3JMaWtlKTogdW5kZWZpbmVkIHtcbiAgc3RhdGUuZGVhZCA9IHRydWU7XG4gIHN0YXRlLmVycm9yID0gZXJyb3I7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9fU09VUkNFO1xuICBjb25zb2xlLmVycm9yKFRBRywgYCR7ZXJyb3IubWVzc2FnZX0gc3JjPSR7dmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmN9YCk7XG4gIGZpcmUodmlkZW8sIFwiZXJyb3JcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE9wZW4gdGhlIGZyYW1lIHNlcnZlciBzZXNzaW9uLCB0aGVuIGVtaXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgbG9hZCBzZXF1ZW5jZSAocmVhZHlTdGF0ZS9uZXR3b3JrU3RhdGUgKyBldmVudHMpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uKGhvb2s6IFZpZGVvSG9vaywgYXJnczogQXR0YWNoQXJncyk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zLCBuYXRpdmUgfSA9IGFyZ3M7XG4gIGNvbnN0IGZwcyA9IE51bWJlci5wYXJzZUludCh2aWRlby5kYXRhc2V0W1wicHVwRnBzXCJdIHx8IFwiMzBcIiwgMTApO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7XG4gIGZpcmUodmlkZW8sIFwibG9hZHN0YXJ0XCIpO1xuICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBxID0gbmF0aXZlID8gXCJcIiA6IGAmdz0ke3N0YXRlLmN2LndpZHRofSZoPSR7c3RhdGUuY3YuaGVpZ2h0fSZmaXQ9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUub2JqZWN0Rml0KX1gO1xuICAgIHJlcyA9IGF3YWl0IGZldGNoKGAke1NDSEVNRX1vcGVuP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZmcHM9JHtmcHN9JHtxfWApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX05FVFdPUkssXG4gICAgICBtZXNzYWdlOiBgb3BlbiBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghcmVzLm9rKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX0RFQ09ERSxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuICR7cmVzLnN0YXR1c306ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1ldGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVmlkZW9NZXRhO1xuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc3RhdGUubWV0YSA9IG1ldGE7XG4gIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUucGF1c2VkID8gMCA6IE1hdGgubWF4KDAsIChob29rLmN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb1dpZHRoXCIsIHsgdmFsdWU6IG1ldGEud2lkdGgsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvSGVpZ2h0XCIsIHsgdmFsdWU6IG1ldGEuaGVpZ2h0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJkdXJhdGlvblwiLCB7IHZhbHVlOiBtZXRhLmR1cmF0aW9uLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX01FVEFEQVRBO1xuICBmaXJlKHZpZGVvLCBcImR1cmF0aW9uY2hhbmdlXCIpO1xuICBmaXJlKHZpZGVvLCBcImxvYWRlZG1ldGFkYXRhXCIpO1xuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9FTk9VR0hfREFUQTtcbiAgZmlyZSh2aWRlbywgXCJsb2FkZWRkYXRhXCIpO1xuICBmaXJlKHZpZGVvLCBcImNhbnBsYXlcIik7XG4gIGZpcmUodmlkZW8sIFwiY2FucGxheXRocm91Z2hcIik7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTtcbiAgZmlyZSh2aWRlbywgXCJzdXNwZW5kXCIpO1xuICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gIH1cbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgMSwgQUhFQUQpO1xuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBhZHZhbmNlIH0gZnJvbSBcIi4vZHJpdmVyXCI7XG5pbXBvcnQgeyBGcmFtZUNhY2hlIH0gZnJvbSBcIi4vZnJhbWVfY2FjaGVcIjtcbmltcG9ydCB7IGluc3RhbGxNZWRpYVNoaW0gfSBmcm9tIFwiLi9tZWRpYV9zaGltXCI7XG5pbXBvcnQgeyBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgZmlyZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBMYXN0U3JjPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0hvb2sge1xuICByZWFkb25seSBzZXNzaW9ucyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFZpZGVvU3RhdGU+KCk7XG4gIHJlYWRvbmx5IGF0dGFjaGluZyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4+KCk7XG4gIC8vIEVudW1lcmFibGUgbWlycm9yIG9mIGluLWZsaWdodCBvcGVucyAoV2Vha01hcCBpc24ndCBpdGVyYWJsZSkgc28gcmVhZHkoKSBjYW4gYXdhaXQgdGhlbS5cbiAgcmVhZG9ubHkgb3BlbmluZyA9IG5ldyBTZXQ8UHJvbWlzZTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgY2FjaGUgPSBuZXcgRnJhbWVDYWNoZSgpO1xuICBydmZjU2VxID0gMDtcbiAgY3Vyck1zID0gMDtcbiAgcHJpdmF0ZSBfbGFzdFNuYXBzaG90ID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgT2Zmc2NyZWVuQ2FudmFzPigpO1xuXG4gIGluc3RhbGwoKTogdm9pZCB7XG4gICAgaW5zdGFsbE1lZGlhU2hpbSh0aGlzKTtcbiAgICB0aGlzLnNjYW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0cykgPT4ge1xuICAgICAgZm9yIChjb25zdCBtIG9mIG11dHMpIHtcbiAgICAgICAgaWYgKG0udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIgJiYgbS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50ICYmIG0uYXR0cmlidXRlTmFtZSA9PT0gXCJzcmNcIikge1xuICAgICAgICAgIHRoaXMub25TcmNDaGFuZ2UobS50YXJnZXQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG0uYWRkZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNjYW4obik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbS5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2gobik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5vYnNlcnZlKGRvY3VtZW50LCB7IHN1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJzcmNcIl0gfSk7XG4gICAgd2luZG93Ll9fcHVwX3ZpZGVvX18gPSB7IGFkdmFuY2U6IChtcykgPT4gYWR2YW5jZSh0aGlzLCBtcyksIHJlYWR5OiAoKSA9PiB0aGlzLnJlYWR5KCkgfTtcbiAgfVxuXG4gIGF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgbmF0aXZlID0gZmFsc2UpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXhpc3RpbmcpO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5hdHRhY2hpbmcuZ2V0KHZpZGVvKTtcbiAgICBpZiAocGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjO1xuICAgIGlmICghc3JjKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmICgvXihibG9iOnxkYXRhOnxtZWRpYXN0cmVhbTopL2kudGVzdChzcmMpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IGN2ID0gc2V0dXBDYW52YXModmlkZW8sIHRoaXMuX2xhc3RTbmFwc2hvdC5nZXQodmlkZW8pKTtcbiAgICBjb25zdCBzdGF0ZSA9IG5ld1ZpZGVvU3RhdGUodmlkZW8sIGN2KTtcbiAgICB0aGlzLnNlc3Npb25zLnNldCh2aWRlbywgc3RhdGUpO1xuICAgIGNvbnN0IHAgPSBvcGVuU2Vzc2lvbih0aGlzLCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zOiB0aGlzLmN1cnJNcywgbmF0aXZlIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgICAgIHRoaXMub3BlbmluZy5kZWxldGUocCk7XG4gICAgfSk7XG4gICAgdGhpcy5hdHRhY2hpbmcuc2V0KHZpZGVvLCBwKTtcbiAgICB0aGlzLm9wZW5pbmcuYWRkKHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgLy8gQXdhaXQgb25seSB0aGUgb3BlbnMgaW4gZmxpZ2h0IHJpZ2h0IG5vdyDigJQgbmV2ZXIgY2hhc2UgbmV3bHktc3Bhd25lZCBvbmVzLCBvciBhIHJldHJ5aW5nIHBhZ2UgbG9vcHMgZm9yZXZlci5cbiAgYXN5bmMgcmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi50aGlzLm9wZW5pbmddKTtcbiAgfVxuXG4gIHJlc3VtZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gICAgc3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlcIik7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICB9XG5cbiAgZGV0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubWV0YSkge1xuICAgICAgaWYgKHN0YXRlLmxhc3REcmF3bklkeCA+PSAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc25hcCA9IG5ldyBPZmZzY3JlZW5DYW52YXMoc3RhdGUuY3Yud2lkdGgsIHN0YXRlLmN2LmhlaWdodCk7XG4gICAgICAgICAgY29uc3Qgc2N0eCA9IHNuYXAuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgIGlmICghc2N0eCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gMmQgY29udGV4dFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2N0eC5kcmF3SW1hZ2Uoc3RhdGUuY3YsIDAsIDApO1xuICAgICAgICAgIHRoaXMuX2xhc3RTbmFwc2hvdC5zZXQodmlkZW8sIHNuYXApO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgICB0aGlzLmNhY2hlLnJlbGVhc2Uoc3RhdGUubWV0YS5pZCwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5jdi5yZW1vdmUoKTtcbiAgICB0aGlzLnNlc3Npb25zLmRlbGV0ZSh2aWRlbyk7XG4gICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIG9uU3JjQ2hhbmdlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmMgfHwgXCJcIjtcbiAgICBpZiAodmlkZW8uX19wdXBMYXN0U3JjID09PSBzcmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlkZW8uX19wdXBMYXN0U3JjID0gc3JjO1xuICAgIGlmICh0aGlzLnNlc3Npb25zLmhhcyh2aWRlbykpIHtcbiAgICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2godmlkZW8pO1xuICB9XG5cbiAgLy8gUmUtb3BlbiBhdCBuYXRpdmUgcmVzb2x1dGlvbiAodGhlIGVsZW1lbnQgb3V0Z3JldyB0aGUgZG93bnNjYWxlZCBkZWNvZGUpLCBwcmVzZXJ2aW5nIHBsYXliYWNrIHN0YXRlLlxuICByZWF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCB0ID0gc3RhdGUuY3VycmVudFRpbWU7XG4gICAgY29uc3QgcGF1c2VkID0gc3RhdGUucGF1c2VkO1xuICAgIGNvbnN0IGVuZGVkID0gc3RhdGUuZW5kZWQ7XG4gICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIHZvaWQgdGhpcy5hdHRhY2godmlkZW8sIHRydWUpLnRoZW4oKG5zKSA9PiB7XG4gICAgICBpZiAoIW5zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5zLmN1cnJlbnRUaW1lID0gdDtcbiAgICAgIG5zLnBhdXNlZCA9IHBhdXNlZDtcbiAgICAgIG5zLmVuZGVkID0gZW5kZWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW4ocm9vdDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gXCJWSURFT1wiKSB7XG4gICAgICB0aGlzLmF0dGFjaChyb290IGFzIEhUTUxWaWRlb0VsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmlkZW9Ib29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3ZpZGVvX18pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3IFZpZGVvSG9vaygpLmluc3RhbGwoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMjYuXG5cbmltcG9ydCB7IGluc3RhbGxUaWNrSG9vayB9IGZyb20gXCIuL2lmcmFtZV9ob29rXCI7XG5pbXBvcnQgeyBpbnN0YWxsVmlkZW9Ib29rIH0gZnJvbSBcIi4vdmlkZW8vaG9va1wiO1xuXG5pZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHtcbiAgaW5zdGFsbFRpY2tIb29rKCk7XG4gIGluc3RhbGxWaWRlb0hvb2soKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
package/dist/chunk-XRCHOYPZ.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import'source-map-support/register.js';import {Log}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING}from'node-av/constants';import {createRequire}from'module';import {dirname,join}from'path';import m from'zod';import {rmSync}from'fs';import {mkdtemp}from'fs/promises';import {tmpdir,platform}from'os';import {HardwareContext}from'node-av/api';import {spawn}from'child_process';import Ue from'tree-kill';import {EventEmitter}from'events';var be=Object.create;var L=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var q=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),E=t=>{throw TypeError(t)};var Y=(t,e,r)=>e in t?L(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var Q=t=>[,,,be(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],C=t=>t!==void 0&&typeof t!="function"?E("Function expected"):t,ve=(t,e,r,o,n)=>({kind:X[t],name:e,metadata:o,addInitializer:s=>r._?E("Already initialized"):n.push(C(s||null))}),M=(t,e)=>Y(e,q("metadata"),t[3]),Z=(t,e,r,o)=>{for(var n=0,s=t[e>>1],l=s&&s.length;n<l;n++)s[n].call(r);return o},_=(t,e,r,o,n,s)=>{var i,p,y,w,a=e&7,T=false,u=false,x=2,P=X[a+5],fe=t[x]||(t[x]=[]),b=((n=n.prototype),we(n,r));for(var D=o.length-1;D>=0;D--)y=ve(a,r,p={},t[3],fe),(y.static=T,y.private=u,w=y.access={has:d=>r in d},(w.get=d=>d[r]),a>2),i=(0, o[D])(b[P],y),p._=1,C(i)&&(b[P]=i);return b&&L(n,r,b),n},ee=(t,e,r)=>Y(t,e+"",r);var re=class{_written=0;_shown=false;_total;_out;_tty;_showCount;constructor(e){this._total=e.total,this._out=e.out,this._tty=!!e.out.isTTY,this._showCount=e.showCount??false;}get total(){return this._total}update(e){this._written=Math.min(this._total,Math.max(0,e)),this.render();}updatePercent(e){this.update(Math.round(e/100*this._total));}clear(){this._tty&&this._shown&&this._out.write("\r\x1B[2K");}redraw(){this.render();}log(e){this.clear(),this._out.write(`${e}
|
|
2
|
-
`),this.redraw();}finish(e){this.clear(),this._out.write(`${e}
|
|
3
|
-
`),this._shown=false;}render(){if(!this._tty||this._written===0&&!this._shown)return;let e=this._total>0?this._written/this._total:0,r=Math.round(e*40),o="#".repeat(r)+"-".repeat(40-r),n=Math.round(e*100),s=this._showCount?`${this._written}/${this._total} (${n}%)`:`${n}%`;this._out.write(`\r[${o}] ${s}`),this._shown=true;}};function ze(t){let e=r=>(...o)=>{t.clear(),r(...o),t.redraw();};return {debug:e(console.debug),info:e(console.info),warn:e(console.warn),error:e(console.error)}}function te(t,e,r){try{return e(process.env[t])}catch{return r}}function oe(t){if(typeof t=="number")return t;let e=Number(t);if(Number.isNaN(e))throw new Error(`Value ${t} is not a valid number`);return e}var _e=createRequire(import.meta.url),I=te("PUP_LOG_LEVEL",oe,2),G=dirname(_e.resolve("pup-recorder/package.json")),ne=join(G,"dist","app.cjs");join(G,"dist","runtime","audio_preload.cjs");join(G,"dist","runtime","iframe_preload.cjs");var F="<pup@debug>",U="<pup@info>",N="<pup@warn>",H="<pup@error>",W="<pup@fatal>";function A(t,e){return function(...r){let o=r.map(n=>n instanceof Error?n.stack??String(n):n);return t.call(this,...o)}}var se,ie,ae,le,pe,k;pe=[A],le=[A],ae=[A],ie=[A],se=[A];var v=class{constructor(e=I){this._level=e;Z(k,5,this);ee(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let r=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,s=e.error??console.error,l=this._level;this._impl={debug:l>=3?r:void 0,info:l>=2?o:void 0,warn:l>=1?n:void 0,error:l>=0?s:void 0};}debug(...e){this.impl?.debug?.(F,...e);}info(...e){this.impl?.info?.(U,...e);}warn(...e){this.impl?.warn?.(N,...e);}error(...e){this.impl?.error?.(H,...e);}fatal(...e){this.impl?.error?.(W,...e),process.exit(1);}dispatch(e){let r=e.trimEnd();r.startsWith(F)?this.debug(r.slice(F.length+1)):r.startsWith(U)?this.info(r.slice(U.length+1)):r.startsWith(N)?this.warn(r.slice(N.length+1)):r.startsWith(H)?this.error(r.slice(H.length+1)):this.info(r);}attach(e,r){return new Promise((o,n)=>{this.debug(`${r}.attach`);let s="",l=i=>{let p=i.toString();p.startsWith(W)?s+=p.slice(W.length+1):this.dispatch(p);};e.stderr?.on("data",l),e.stdout?.on("data",l),e.on("error",i=>{s+=i.message,e.kill();}).once("close",(i,p)=>{i||p||s?(s||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:i,signal:p,fatal:s}),n(new Error(s))):(this.debug(`${r}.close`),o());}).on("unhandledRejection",i=>{this.error(`${r}.unhandled`,i);}).on("uncaughtExceptionMonitor",i=>{this.error(`${r}.unhandled`,i);});})}};k=Q(),_(k,1,"debug",pe,v),_(k,1,"info",le,v),_(k,1,"warn",ae,v),_(k,1,"error",ie,v),_(k,1,"fatal",se,v),M(k,v);var c=new v;Log.setCallback((t,e)=>{let r=e.trimEnd();r&&(t<=AV_LOG_ERROR?c.error(r):t<=AV_LOG_WARNING&&c.warn(r));});function hr(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Ae=1920,Ie=1080,Re=30,De=5,Oe=10,Le="out/html.mp4,out/html.webm",vr=m.object({duration:m.number().describe("Duration in seconds"),width:m.number().describe("Video width"),height:m.number().describe("Video height"),fps:m.number().describe("Frames per second"),withAudio:m.boolean().describe("Capture and encode audio"),outFile:m.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:m.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:m.boolean().describe("Render by frame rather than recording"),disableGpu:m.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:m.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:m.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:m.number().describe("Window load timeout in seconds")}),ce={width:Ae,height:Ie,fps:Re,duration:De,outFile:Le,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Oe};var $e="[HWAccel]";async function Se(){let t=HardwareContext.auto(),e=t!==null;return t?.dispose(),e}var ue=Se().then(t=>(c.debug($e,"gpu:",t),t));async function de(t){let e=["no-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","deny-permission-prompts","use-mock-keychain","force-device-scale-factor=1","force-color-profile=srgb","ignore-gpu-blocklist","use-gl=angle","deterministic-mode","enable-begin-frame-control","disable-new-content-rendering-timeout","run-all-compositor-stages-before-draw","disable-threaded-animation","disable-threaded-scrolling","disable-checker-imaging","disable-image-animation-resync","enable-surface-synchronization","font-render-hinting=none","disable-background-networking","js-flags=--max-old-space-size=512","renderer-process-limit=1","num-raster-threads=2","disable-background-timer-throttling","disable-renderer-backgrounding","disable-backgrounding-occluded-windows","enable-logging=stderr"];I>=3?e.push("log-level=0","v=1"):e.push("log-level=3");let r=["FontationBackend"];if(!(await ue&&!t))e.push("use-angle=swiftshader","enable-unsafe-swiftshader");else {e.push("disable-gpu-sandbox","enable-unsafe-webgpu");let n=platform();n==="darwin"?e.push("use-angle=metal"):n==="win32"?e.push("use-angle=d3d11"):(e.push("use-angle=vulkan","disable-vulkan-surface"),r.push("Vulkan"));}return e.push(`enable-features=${r.join(",")}`),e}var j="--pup-priv-args";function Mr(){let t=process.argv,e=t.find(o=>o.startsWith(j));if(!e)return c.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)),c.debug("pupargs",r),r}function me(t,e){let r=t.split(" ").filter(i=>i.length),[o,...n]=r;if(!o)throw new Error("empty command");let s=spawn(o,n,{stdio:"inherit",...e}),l=false;return {process:s,wait:c.attach(s,o),get killed(){return l},kill(){if(l)return;l=true;let i=s.pid;i?Ue(i,"SIGKILL"):s.kill("SIGKILL");}}}async function Be(t){return [...await de(t),"headless=new"]}var ge="[Electron]";async function he({args:t}){let{default:e}=await import('electron'),r=await Be(t.includes("--disable-gpu")),o=await mkdtemp(join(tmpdir(),"pup-profile-")),n=r.map(p=>`--${p}`);n.push(`--user-data-dir=${o}`),n.push(`${j}=${Buffer.from(JSON.stringify(t)).toString("base64")}`);let s=[e,...n,ne].join(" ");c.debug(ge,s);let l={...process.env,RUST_BACKTRACE:"full"},i=me(s,{stdio:["ignore","pipe","pipe","ipc"],env:l});return i.process.once("exit",()=>{try{rmSync(o,{recursive:!0,force:!0});}catch(p){c.warn(ge,"profile cleanup failed:",p);}}),i}var R=class extends EventEmitter{constructor(e){super(),e.on("message",r=>{let o=r;switch(o.type){case "console":{this.emit("console",o.level,o.message);break}case "progress":{this.emit("progress",o.value);break}case "done":{this.emit("done",o.payload);break}case "error":{this.emit("error",new Error(o.error));break}}}),e.once("exit",r=>this.emit("close",r));}};var B="[pup]";async function Ke(t,e){c.debug(B,"runPupApp",t,e);let r=[t,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--window-timeout",`${e.windowTimeout}`,"--out-file",`${e.outFile}`];return e.withAudio&&r.push("--with-audio"),e.useInnerProxy&&r.push("--use-inner-proxy"),e.deterministic&&r.push("--deterministic"),e.disableGpu&&r.push("--disable-gpu"),e.disableHwCodec&&r.push("--disable-hw-codec"),e.windowTolerant&&r.push("--window-tolerant"),he({args:r})}var f=ce;async function rt(t,e){c.debug(B,"pup",t,e);let{signal:r}=e;r?.throwIfAborted();let o=e.outFile??f.outFile,n={width:e.width??f.width,height:e.height??f.height,fps:e.fps??f.fps,duration:e.duration??f.duration,withAudio:e.withAudio??f.withAudio,useInnerProxy:e.useInnerProxy??f.useInnerProxy,deterministic:e.deterministic??f.deterministic,disableGpu:e.disableGpu??f.disableGpu,disableHwCodec:e.disableHwCodec??f.disableHwCodec,windowTolerant:e.windowTolerant??f.windowTolerant,windowTimeout:e.windowTimeout??f.windowTimeout,outFile:o},s=performance.now(),l=0,i=w=>{l=w,e.onProgress?.(w);},p=await Ke(t,n),y=()=>{p.process.send?.({type:"cancel",reason:String(r?.reason??"abort")}),setTimeout(()=>p.kill(),5e3);};r?.addEventListener("abort",y,{once:true});try{let w=new Promise((T,u)=>{new R(p.process).on("close",x=>{let P=JSON.stringify({source:t,progress:l,code:x,killed:p.killed});u(new Error(`crashed: ${P}`));}).on("progress",i).on("console",(x,P)=>e.onConsole?.(x,P)).on("done",T).on("error",u);});i(0);let[a]=await Promise.all([w,p.wait]);return i(100),c.debug(B,`done ${o} in ${Math.round(performance.now()-s)}ms`),{...a,options:n}}catch(w){throw p.kill(),r?.throwIfAborted(),w}finally{r?.removeEventListener("abort",y);}}export{re as a,ze as b,te as c,oe as d,v as e,c as f,hr as g,Mr as h,Ae as i,Ie as j,Re as k,De as l,Oe as m,vr as n,ce as o,rt as p};//# sourceMappingURL=chunk-XRCHOYPZ.js.map
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2NsaV91aS50cyIsIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vc3JjL2Jhc2UvY2hyb21pdW0udHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2VsZWN0cm9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9wdXAudHMiXSwibmFtZXMiOlsiUHJvZ3Jlc3NCYXIiLCJvcHRzIiwid3JpdHRlbiIsInBjdCIsImxpbmUiLCJyYXRpbyIsImZpbGxlZCIsImJhciIsInN1ZmZpeCIsImJhckxvZ2dlciIsIndyYXAiLCJmbiIsImFyZ3MiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsInB1cEFwcCIsImpvaW4iLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIm5vZXJyIiwicmV0IiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJUQUciLCJkZXRlY3RHUFVEcml2ZXIiLCJodyIsIkhhcmR3YXJlQ29udGV4dCIsInJlc3VsdCIsImNhbklVc2VHUFUiLCJjaHJvbWl1bU9wdGlvbnMiLCJkaXNhYmxlR3B1IiwiZmVhdHVyZXMiLCJwbGF0IiwicGxhdGZvcm0iLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiZXhlYyIsImNtZCIsIm9wdGlvbnMiLCJwYXJ0cyIsInMiLCJjb21tYW5kIiwic3Bhd24iLCJraWxsZWQiLCJwaWQiLCJ0cmVlS2lsbCIsImVsZWN0cm9uT3B0cyIsInJ1bkVsZWN0cm9uQXBwIiwiZWxlY3Ryb24iLCJwcm9maWxlRGlyIiwibWtkdGVtcCIsInRtcGRpciIsImVsZWN0cm9uQXJncyIsImEiLCJlbnYiLCJoYW5kbGUiLCJybVN5bmMiLCJlIiwiSXBjUmVhZGVyIiwiRXZlbnRFbWl0dGVyIiwiY2hpbGQiLCJyYXciLCJjIiwicnVuUHVwQXBwIiwic291cmNlIiwicmVuZGVyIiwiZCIsInB1cCIsIm91dEZpbGUiLCJyZW5kZXJPcHRzIiwidDAiLCJwcm9ncmVzcyIsInRpY2siLCJwIiwib25BYm9ydCIsImwiLCJtIiwic3VtbWFyeSJdLCJtYXBwaW5ncyI6InU0Q0FZTyxJ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UFouanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzI2LlxuXG5pbXBvcnQgdHlwZSB7IExvZ2dlckxpa2UgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IEJBUl9XSURUSCA9IDQwO1xuXG5pbnRlcmZhY2UgQmFyT3B0aW9ucyB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIG91dDogTm9kZUpTLldyaXRlU3RyZWFtO1xuICBzaG93Q291bnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCYXIge1xuICBwcml2YXRlIF93cml0dGVuID0gMDtcbiAgcHJpdmF0ZSBfc2hvd24gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG90YWw6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0OiBOb2RlSlMuV3JpdGVTdHJlYW07XG4gIHByaXZhdGUgcmVhZG9ubHkgX3R0eTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2hvd0NvdW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEJhck9wdGlvbnMpIHtcbiAgICB0aGlzLl90b3RhbCA9IG9wdHMudG90YWw7XG4gICAgdGhpcy5fb3V0ID0gb3B0cy5vdXQ7XG4gICAgdGhpcy5fdHR5ID0gISFvcHRzLm91dC5pc1RUWTtcbiAgICB0aGlzLl9zaG93Q291bnQgPSBvcHRzLnNob3dDb3VudCA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCB0b3RhbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbDtcbiAgfVxuXG4gIHVwZGF0ZSh3cml0dGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl93cml0dGVuID0gTWF0aC5taW4odGhpcy5fdG90YWwsIE1hdGgubWF4KDAsIHdyaXR0ZW4pKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXBkYXRlUGVyY2VudChwY3Q6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKE1hdGgucm91bmQoKHBjdCAvIDEwMCkgKiB0aGlzLl90b3RhbCkpO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3R0eSAmJiB0aGlzLl9zaG93bikge1xuICAgICAgdGhpcy5fb3V0LndyaXRlKFwiXFxyXFx4MWJbMktcIik7XG4gICAgfVxuICB9XG5cbiAgcmVkcmF3KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsb2cobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuX291dC53cml0ZShgJHtsaW5lfVxcbmApO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICBmaW5pc2gobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuX291dC53cml0ZShgJHtsaW5lfVxcbmApO1xuICAgIHRoaXMuX3Nob3duID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3R0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fd3JpdHRlbiA9PT0gMCAmJiAhdGhpcy5fc2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLl90b3RhbCA+IDAgPyB0aGlzLl93cml0dGVuIC8gdGhpcy5fdG90YWwgOiAwO1xuICAgIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQocmF0aW8gKiBCQVJfV0lEVEgpO1xuICAgIGNvbnN0IGJhciA9IFwiI1wiLnJlcGVhdChmaWxsZWQpICsgXCItXCIucmVwZWF0KEJBUl9XSURUSCAtIGZpbGxlZCk7XG4gICAgY29uc3QgcGN0ID0gTWF0aC5yb3VuZChyYXRpbyAqIDEwMCk7XG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5fc2hvd0NvdW50ID8gYCR7dGhpcy5fd3JpdHRlbn0vJHt0aGlzLl90b3RhbH0gKCR7cGN0fSUpYCA6IGAke3BjdH0lYDtcbiAgICB0aGlzLl9vdXQud3JpdGUoYFxcclske2Jhcn1dICR7c3VmZml4fWApO1xuICAgIHRoaXMuX3Nob3duID0gdHJ1ZTtcbiAgfVxufVxuXG4vLyBBcm91bmQgZWFjaCBjb25zb2xlLiogY2FsbCwgY2xlYXIgdGhlIGJhciBsaW5lIHRoZW4gcmVkcmF3IOKAlCBrZWVwcyBuYXRpdmUgY29uc29sZSBjb2xvcmluZyBpbnRhY3QuXG5leHBvcnQgZnVuY3Rpb24gYmFyTG9nZ2VyKGJhcjogUHJvZ3Jlc3NCYXIpOiBMb2dnZXJMaWtlIHtcbiAgY29uc3Qgd3JhcCA9XG4gICAgPFQgZXh0ZW5kcyAoLi4uYTogdW5rbm93bltdKSA9PiB2b2lkPihmbjogVCkgPT5cbiAgICAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBiYXIuY2xlYXIoKTtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgYmFyLnJlZHJhdygpO1xuICAgIH07XG4gIHJldHVybiB7XG4gICAgZGVidWc6IHdyYXAoY29uc29sZS5kZWJ1ZyksXG4gICAgaW5mbzogd3JhcChjb25zb2xlLmluZm8pLFxuICAgIHdhcm46IHdyYXAoY29uc29sZS53YXJuKSxcbiAgICBlcnJvcjogd3JhcChjb25zb2xlLmVycm9yKSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwQXVkaW9QcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwiYXVkaW9fcHJlbG9hZC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSWZyYW1lUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImlmcmFtZV9wcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pID0+IHVua25vd24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIHtcbiAgICBsb2dnZXIuZXJyb3IobXNnKTtcbiAgfSBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykge1xuICAgIGxvZ2dlci53YXJuKG1zZyk7XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxBIGV4dGVuZHMgdW5rbm93bltdLCBSLCBEPihmbjogKC4uLmFyZ3M6IEEpID0+IFIsIGRlZmF1bHRWYWx1ZTogRCk6ICguLi5hcmdzOiBBKSA9PiBSIHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKSBhcyBSIHwgRDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lORE9XX1RJTUVPVVQgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXQvaHRtbC5tcDQsb3V0L2h0bWwud2VibVwiO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb21tYS1zZXBhcmF0ZWQgb3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlOiBERUZBVUxUX09VVF9GSUxFLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbSFdBY2NlbF1cIjtcblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0R1BVRHJpdmVyKCkge1xuICBjb25zdCBodyA9IEhhcmR3YXJlQ29udGV4dC5hdXRvKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGh3ICE9PSBudWxsO1xuICBodz8uZGlzcG9zZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgY2FuSVVzZUdQVSA9IGRldGVjdEdQVURyaXZlcigpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdTpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNhbklVc2VHUFUgfSBmcm9tIFwiLi9od2FjY2VsXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaHJvbWl1bU9wdGlvbnMoZGlzYWJsZUdwdTogYm9vbGVhbikge1xuICBjb25zdCBvcHRzID0gW1xuICAgIC8vIOWuueWZqOaymeeusVxuICAgIFwibm8tc2FuZGJveFwiLFxuICAgIFwiZGlzYWJsZS1kZXYtc2htLXVzYWdlXCIsXG4gICAgLy8g6Leo5Z+fL+WuieWFqFxuICAgIFwiZGlzYWJsZS13ZWItc2VjdXJpdHlcIixcbiAgICBcImRpc2FibGUtc2l0ZS1pc29sYXRpb24tdHJpYWxzXCIsXG4gICAgXCJpZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsXG4gICAgLy8g5b2V5Yi26KGM5Li6XG4gICAgXCJkaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkXCIsXG4gICAgXCJtdXRlLWF1ZGlvXCIsXG4gICAgXCJhdXRvcGxheS1wb2xpY3k9bm8tdXNlci1nZXN0dXJlLXJlcXVpcmVkXCIsXG4gICAgXCJkaXNhYmxlLWV4dGVuc2lvbnNcIixcbiAgICBcImRlbnktcGVybWlzc2lvbi1wcm9tcHRzXCIsXG4gICAgXCJ1c2UtbW9jay1rZXljaGFpblwiLFxuICAgIC8vIOa4suafk1xuICAgIFwiZm9yY2UtZGV2aWNlLXNjYWxlLWZhY3Rvcj0xXCIsXG4gICAgXCJmb3JjZS1jb2xvci1wcm9maWxlPXNyZ2JcIixcbiAgICBcImlnbm9yZS1ncHUtYmxvY2tsaXN0XCIsXG4gICAgXCJ1c2UtZ2w9YW5nbGVcIixcbiAgICBcImRldGVybWluaXN0aWMtbW9kZVwiLFxuICAgIFwiZW5hYmxlLWJlZ2luLWZyYW1lLWNvbnRyb2xcIixcbiAgICBcImRpc2FibGUtbmV3LWNvbnRlbnQtcmVuZGVyaW5nLXRpbWVvdXRcIixcbiAgICBcInJ1bi1hbGwtY29tcG9zaXRvci1zdGFnZXMtYmVmb3JlLWRyYXdcIixcbiAgICBcImRpc2FibGUtdGhyZWFkZWQtYW5pbWF0aW9uXCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLXNjcm9sbGluZ1wiLFxuICAgIFwiZGlzYWJsZS1jaGVja2VyLWltYWdpbmdcIixcbiAgICBcImRpc2FibGUtaW1hZ2UtYW5pbWF0aW9uLXJlc3luY1wiLFxuICAgIFwiZW5hYmxlLXN1cmZhY2Utc3luY2hyb25pemF0aW9uXCIsXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3B1cHBldGVlci9wdXBwZXRlZXIvaXNzdWVzLzI0MTBcbiAgICBcImZvbnQtcmVuZGVyLWhpbnRpbmc9bm9uZVwiLFxuICAgIC8vIOi1hOa6kOaOp+WItlxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLW5ldHdvcmtpbmdcIixcbiAgICBcImpzLWZsYWdzPS0tbWF4LW9sZC1zcGFjZS1zaXplPTUxMlwiLFxuICAgIFwicmVuZGVyZXItcHJvY2Vzcy1saW1pdD0xXCIsXG4gICAgXCJudW0tcmFzdGVyLXRocmVhZHM9MlwiLFxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLXRpbWVyLXRocm90dGxpbmdcIixcbiAgICBcImRpc2FibGUtcmVuZGVyZXItYmFja2dyb3VuZGluZ1wiLFxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kaW5nLW9jY2x1ZGVkLXdpbmRvd3NcIixcbiAgICAvLyDml6Xlv5fov73ouKpcbiAgICBcImVuYWJsZS1sb2dnaW5nPXN0ZGVyclwiLFxuICBdO1xuXG4gIGlmIChwdXBMb2dMZXZlbCA+PSAzKSB7XG4gICAgb3B0cy5wdXNoKFwibG9nLWxldmVsPTBcIiwgXCJ2PTFcIik7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5wdXNoKFwibG9nLWxldmVsPTNcIik7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IFtcIkZvbnRhdGlvbkJhY2tlbmRcIl07XG4gIGNvbnN0IGVuYWJsZUdwdSA9IChhd2FpdCBjYW5JVXNlR1BVKSAmJiAhZGlzYWJsZUdwdTtcbiAgaWYgKCFlbmFibGVHcHUpIHtcbiAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9c3dpZnRzaGFkZXJcIiwgXCJlbmFibGUtdW5zYWZlLXN3aWZ0c2hhZGVyXCIpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMucHVzaChcImRpc2FibGUtZ3B1LXNhbmRib3hcIiwgXCJlbmFibGUtdW5zYWZlLXdlYmdwdVwiKTtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBpZiAocGxhdCA9PT0gXCJkYXJ3aW5cIikge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPW1ldGFsXCIpO1xuICAgIH0gZWxzZSBpZiAocGxhdCA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9ZDNkMTFcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT12dWxrYW5cIiwgXCJkaXNhYmxlLXZ1bGthbi1zdXJmYWNlXCIpO1xuICAgICAgZmVhdHVyZXMucHVzaChcIlZ1bGthblwiKTtcbiAgICB9XG4gIH1cblxuICBvcHRzLnB1c2goYGVuYWJsZS1mZWF0dXJlcz0ke2ZlYXR1cmVzLmpvaW4oXCIsXCIpfWApO1xuICByZXR1cm4gb3B0cztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAgZ2V0IGtpbGxlZCgpOiBib29sZWFuO1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIH1cbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIGxldCBraWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzOiBwcm9jLFxuICAgIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCksXG4gICAgZ2V0IGtpbGxlZCgpIHtcbiAgICAgIHJldHVybiBraWxsZWQ7XG4gICAgfSxcbiAgICBraWxsKCkge1xuICAgICAgaWYgKGtpbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB7XG4gICAgICAgIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IG1rZHRlbXAgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjaHJvbWl1bU9wdGlvbnMgfSBmcm9tIFwiLi4vYmFzZS9jaHJvbWl1bVwiO1xuaW1wb3J0IHsgcHVwQXBwIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBleGVjLCBQVVBfQVJHU19LRVkgfSBmcm9tIFwiLi4vYmFzZS9wcm9jZXNzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbGVjdHJvbk9wdHMoZGlzYWJsZUdwdTogYm9vbGVhbikge1xuICByZXR1cm4gWy4uLihhd2FpdCBjaHJvbWl1bU9wdGlvbnMoZGlzYWJsZUdwdSkpLCBcImhlYWRsZXNzPW5ld1wiXTtcbn1cblxuY29uc3QgVEFHID0gXCJbRWxlY3Ryb25dXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuRWxlY3Ryb25BcHBPcHRpb25zIHtcbiAgYXJnczogdW5rbm93bltdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRWxlY3Ryb25BcHAoeyBhcmdzIH06IFJ1bkVsZWN0cm9uQXBwT3B0aW9ucykge1xuICAvLyBMYXp5OiBlbGVjdHJvbidzIGVudHJ5IHRocm93cyBpZiB0aGUgYmluYXJ5IGlzIGFic2VudCwgc28gdXRpbC1vbmx5IGNvbnN1bWVycyBtdXN0IG5vdCBsb2FkIGl0IGF0IGltcG9ydCB0aW1lLlxuICBjb25zdCB7IGRlZmF1bHQ6IGVsZWN0cm9uIH0gPSBhd2FpdCBpbXBvcnQoXCJlbGVjdHJvblwiKTtcbiAgY29uc3Qgb3B0cyA9IGF3YWl0IGVsZWN0cm9uT3B0cyhhcmdzLmluY2x1ZGVzKFwiLS1kaXNhYmxlLWdwdVwiKSk7XG4gIC8vIFBlci1wcm9jZXNzIHByb2ZpbGU6IGlzb2xhdGVzIHRoaXMgY2FsbCdzIENocm9taXVtIGNhY2hlICh3YXJtdXAgd2luZG93cyBzaGFyZSBpdCB2aWEgZGVmYXVsdFNlc3Npb24pLCB3aXBlZCBvbiBleGl0LlxuICBjb25zdCBwcm9maWxlRGlyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCBcInB1cC1wcm9maWxlLVwiKSk7XG4gIGNvbnN0IGVsZWN0cm9uQXJncyA9IG9wdHMubWFwKChhKSA9PiBgLS0ke2F9YCk7XG4gIGVsZWN0cm9uQXJncy5wdXNoKGAtLXVzZXItZGF0YS1kaXI9JHtwcm9maWxlRGlyfWApO1xuICBlbGVjdHJvbkFyZ3MucHVzaChgJHtQVVBfQVJHU19LRVl9PSR7QnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXJncykpLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWApO1xuICBjb25zdCBjbWQgPSBbZWxlY3Ryb24sIC4uLmVsZWN0cm9uQXJncywgcHVwQXBwXS5qb2luKFwiIFwiKTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgY21kKTtcblxuICBjb25zdCBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0geyAuLi5wcm9jZXNzLmVudiwgUlVTVF9CQUNLVFJBQ0U6IFwiZnVsbFwiIH07XG4gIGNvbnN0IGhhbmRsZSA9IGV4ZWMoY21kLCB7IHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiLCBcImlwY1wiXSwgZW52IH0pO1xuICBoYW5kbGUucHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJtU3luYyhwcm9maWxlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBcInByb2ZpbGUgY2xlYW51cCBmYWlsZWQ6XCIsIGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoYW5kbGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuXG5leHBvcnQgZW51bSBJcGNNc2dUeXBlIHtcbiAgLy8gY2hpbGQg4oaSIHBhcmVudFxuICBDb25zb2xlID0gXCJjb25zb2xlXCIsXG4gIFByb2dyZXNzID0gXCJwcm9ncmVzc1wiLFxuICBEb25lID0gXCJkb25lXCIsXG4gIEVycm9yID0gXCJlcnJvclwiLFxuICAvLyBwYXJlbnQg4oaSIGNoaWxkXG4gIENhbmNlbCA9IFwiY2FuY2VsXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc29sZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZTtcbiAgbGV2ZWw6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbE1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ2FuY2VsO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBydW5FbGVjdHJvbkFwcCB9IGZyb20gXCIuL3JlbmRlcmVyL2VsZWN0cm9uXCI7XG5pbXBvcnQgeyB0eXBlIElwY0RvbmVQYXlsb2FkLCBJcGNNc2dUeXBlLCBJcGNSZWFkZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ29uc29sZUNhbGxiYWNrLFxuICBkZWZhdWx0UmVuZGVyT3B0aW9ucyxcbiAgdHlwZSBQcm9ncmVzc0NhbGxiYWNrLFxuICB0eXBlIFJlbmRlck9wdGlvbnMsXG4gIHR5cGUgUmVuZGVyUmVzdWx0LFxufSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbcHVwXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1cE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlbmRlck9wdGlvbnM+IHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU/OiBDb25zb2xlQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVwUmVzdWx0IGV4dGVuZHMgUmVuZGVyUmVzdWx0IHt9XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blB1cEFwcChzb3VyY2U6IHN0cmluZywgcmVuZGVyOiBSZW5kZXJPcHRpb25zKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGBydW5QdXBBcHBgLCBzb3VyY2UsIHJlbmRlcik7XG5cbiAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXG4gICAgc291cmNlLFxuICAgIGAtLXdpZHRoYCxcbiAgICBgJHtyZW5kZXIud2lkdGh9YCxcbiAgICBgLS1oZWlnaHRgLFxuICAgIGAke3JlbmRlci5oZWlnaHR9YCxcbiAgICBgLS1mcHNgLFxuICAgIGAke3JlbmRlci5mcHN9YCxcbiAgICBgLS1kdXJhdGlvbmAsXG4gICAgYCR7cmVuZGVyLmR1cmF0aW9ufWAsXG4gICAgYC0td2luZG93LXRpbWVvdXRgLFxuICAgIGAke3JlbmRlci53aW5kb3dUaW1lb3V0fWAsXG4gICAgYC0tb3V0LWZpbGVgLFxuICAgIGAke3JlbmRlci5vdXRGaWxlfWAsXG4gIF07XG4gIGlmIChyZW5kZXIud2l0aEF1ZGlvKSB7XG4gICAgYXJncy5wdXNoKGAtLXdpdGgtYXVkaW9gKTtcbiAgfVxuICBpZiAocmVuZGVyLnVzZUlubmVyUHJveHkpIHtcbiAgICBhcmdzLnB1c2goYC0tdXNlLWlubmVyLXByb3h5YCk7XG4gIH1cbiAgaWYgKHJlbmRlci5kZXRlcm1pbmlzdGljKSB7XG4gICAgYXJncy5wdXNoKGAtLWRldGVybWluaXN0aWNgKTtcbiAgfVxuICBpZiAocmVuZGVyLmRpc2FibGVHcHUpIHtcbiAgICBhcmdzLnB1c2goYC0tZGlzYWJsZS1ncHVgKTtcbiAgfVxuICBpZiAocmVuZGVyLmRpc2FibGVId0NvZGVjKSB7XG4gICAgYXJncy5wdXNoKGAtLWRpc2FibGUtaHctY29kZWNgKTtcbiAgfVxuICBpZiAocmVuZGVyLndpbmRvd1RvbGVyYW50KSB7XG4gICAgYXJncy5wdXNoKGAtLXdpbmRvdy10b2xlcmFudGApO1xuICB9XG5cbiAgcmV0dXJuIHJ1bkVsZWN0cm9uQXBwKHsgYXJncyB9KTtcbn1cblxuY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBQYXJ0aWFsPFB1cE9wdGlvbnM+KTogUHJvbWlzZTxQdXBSZXN1bHQ+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHB1cGAsIHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICBjb25zdCBvdXRGaWxlID0gb3B0aW9ucy5vdXRGaWxlID8/IGQub3V0RmlsZTtcbiAgY29uc3QgcmVuZGVyT3B0czogUmVuZGVyT3B0aW9ucyA9IHtcbiAgICB3aWR0aDogb3B0aW9ucy53aWR0aCA/PyBkLndpZHRoLFxuICAgIGhlaWdodDogb3B0aW9ucy5oZWlnaHQgPz8gZC5oZWlnaHQsXG4gICAgZnBzOiBvcHRpb25zLmZwcyA/PyBkLmZwcyxcbiAgICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiA/PyBkLmR1cmF0aW9uLFxuICAgIHdpdGhBdWRpbzogb3B0aW9ucy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgdXNlSW5uZXJQcm94eTogb3B0aW9ucy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICBkZXRlcm1pbmlzdGljOiBvcHRpb25zLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgIGRpc2FibGVHcHU6IG9wdGlvbnMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgZGlzYWJsZUh3Q29kZWM6IG9wdGlvbnMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICB3aW5kb3dUb2xlcmFudDogb3B0aW9ucy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgIHdpbmRvd1RpbWVvdXQ6IG9wdGlvbnMud2luZG93VGltZW91dCA/PyBkLndpbmRvd1RpbWVvdXQsXG4gICAgb3V0RmlsZSxcbiAgfTtcblxuICBjb25zdCB0MCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBjb25zdCB0aWNrID0gKHA6IG51bWJlcikgPT4ge1xuICAgIHByb2dyZXNzID0gcDtcbiAgICBvcHRpb25zLm9uUHJvZ3Jlc3M/LihwKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGUgPSBhd2FpdCBydW5QdXBBcHAoc291cmNlLCByZW5kZXJPcHRzKTtcblxuICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgIGhhbmRsZS5wcm9jZXNzLnNlbmQ/Lih7IHR5cGU6IElwY01zZ1R5cGUuQ2FuY2VsLCByZWFzb246IFN0cmluZyhzaWduYWw/LnJlYXNvbiA/PyBcImFib3J0XCIpIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gaGFuZGxlLmtpbGwoKSwgNV8wMDApO1xuICB9O1xuICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmV3IElwY1JlYWRlcihoYW5kbGUucHJvY2VzcylcbiAgICAgICAgLm9uKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgcHJvZ3Jlc3MsIGNvZGUsIGtpbGxlZDogaGFuZGxlLmtpbGxlZCB9KTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBjcmFzaGVkOiAke21zZ31gKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInByb2dyZXNzXCIsIHRpY2spXG4gICAgICAgIC5vbihcImNvbnNvbGVcIiwgKGwsIG0pID0+IG9wdGlvbnMub25Db25zb2xlPy4obCwgbSkpXG4gICAgICAgIC5vbihcImRvbmVcIiwgcmVzb2x2ZSlcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbiAgICB0aWNrKDApO1xuICAgIGNvbnN0IFtzdW1tYXJ5XSA9IGF3YWl0IFByb21pc2UuYWxsKFtyZXN1bHQsIGhhbmRsZS53YWl0XSk7XG4gICAgdGljaygxMDApO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBkb25lICR7b3V0RmlsZX0gaW4gJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdDApfW1zYCk7XG4gICAgcmV0dXJuIHsgLi4uc3VtbWFyeSwgb3B0aW9uczogcmVuZGVyT3B0cyB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlLmtpbGwoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgfVxufVxuIl19
|