pup-recorder 0.4.2 → 0.4.3

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/dist/app.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var S=require('zod'),crypto=require('crypto'),api=require('node-av/api'),os=require('os'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var S__default=/*#__PURE__*/_interopDefault(S);var Zr=Object.create;var Je=Object.defineProperty;var eo=Object.getOwnPropertyDescriptor;var Se=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),z=r=>{throw TypeError(r)};var Rt=(r,e,t)=>e in r?Je(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var It=r=>[,,,Zr(null)],Bt=["class","method","getter","setter","accessor","field","value","get","set"],he=r=>r!==void 0&&typeof r!="function"?z("Function expected"):r,to=(r,e,t,o,i)=>({kind:Bt[r],name:e,metadata:o,addInitializer:n=>t._?z("Already initialized"):i.push(he(n||null))}),Ze=(r,e)=>Rt(e,Se("metadata"),r[3]),Ot=(r,e,t,o)=>{for(var i=0,n=r[e>>1],s=n&&n.length;i<s;i++)n[i].call(t);return o},te=(r,e,t,o,i,n)=>{var d,a,c,p,u=e&7,h=false,f=false,w=2,b=Bt[u+5],y=r[w]||(r[w]=[]),g=((i=i.prototype),eo(i,t));for(var v=o.length-1;v>=0;v--)c=to(u,t,a={},r[3],y),(c.static=h,c.private=f,p=c.access={has:_=>t in _},(p.get=_=>_[t]),u>2),d=(0, o[v])(g[b],c),a._=1,he(d)&&(g[b]=d);return g&&Je(i,t,g),i},Mt=(r,e,t)=>Rt(r,e+"",t);var P=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&z("Object expected");var o,i;t&&(o=e[Se("asyncDispose")]),o===void 0&&(o=e[Se("dispose")],t&&(i=o)),typeof o!="function"&&z("Object not disposable"),i&&(o=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},E=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,d,a,c){return c=Error(a),c.name="SuppressedError",c.error=s,c.suppressed=d,c},i=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=r.pop();)try{var d=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(d).then(n,a=>(i(a),n()))}catch(a){i(a);}if(t)throw e};return n()};var io=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=io();function Lt(r,e,t){try{return e(process.env[r])}catch{return t}}function j(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var ao=module$1.createRequire(m),Nt=Lt("PUP_LOG_LEVEL",j,2),rt=path.dirname(ao.resolve("pup-recorder/package.json"));path.join(rt,"dist","app.cjs");var Dt=path.join(rt,"dist","audio_preload.cjs"),Vt=path.join(rt,"dist","iframe_preload.cjs");var ot="<pup@debug>",it="<pup@info>",nt="<pup@warn>",st="<pup@error>",at="<pup@fatal>";function we(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var Ht,Ut,Wt,$t,Gt,q;Gt=[we],$t=[we],Wt=[we],Ut=[we],Ht=[we];var O=class{constructor(e=Nt){this._level=e;Ot(q,5,this);Mt(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 t=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?i:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(ot,...e);}info(...e){this.impl?.info?.(it,...e);}warn(...e){this.impl?.warn?.(nt,...e);}error(...e){this.impl?.error?.(st,...e);}fatal(...e){this.impl?.error?.(at,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ot)?this.debug(t.slice(ot.length+1)):t.startsWith(it)?this.info(t.slice(it.length+1)):t.startsWith(nt)?this.warn(t.slice(nt.length+1)):t.startsWith(st)?this.error(t.slice(st.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",s=d=>{let a=d.toString();a.startsWith(at)?n+=a.slice(at.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",d=>{n+=d.message,e.kill();}).once("close",(d,a)=>{d||a||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:d,signal:a,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",d=>{this.error(`${t}.unhandled`,d);}).on("uncaughtExceptionMonitor",d=>{this.error(`${t}.unhandled`,d);});})}};q=It(),te(q,1,"debug",Gt,O),te(q,1,"info",$t,O),te(q,1,"warn",Wt,O),te(q,1,"error",Ut,O),te(q,1,"fatal",Ht,O),Ze(q,O);var l=new O;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?l.error(t):r<=constants.AV_LOG_WARNING&&l.warn(t));});var ho="[Crash]";function jt(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),l.debug(ho,"set dump to",r);}function ge(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var wo="--pup-priv-args";function qt(){let r=process.argv,e=r.find(o=>o.startsWith(wo));if(!e)return l.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),l.debug("pupargs",t),t}var go=1920,bo=1080,_o=30,xo=5,vo="out/html.mp4,out/html.webm",Yt=S__default.default.object({duration:S__default.default.number().describe("Duration in seconds"),width:S__default.default.number().describe("Video width"),height:S__default.default.number().describe("Video height"),fps:S__default.default.number().describe("Frames per second"),withAudio:S__default.default.boolean().describe("Capture and encode audio"),outFile:S__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:S__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:S__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:S__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:S__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:S__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Xt={width:go,height:bo,fps:_o,duration:xo,outFile:vo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false};function Eo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function Qt(r){let e=Yt.shape,t=Xt;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,i)=>{try{await r.run(Eo(o),{width:ge(j,t.width)(i.width),height:ge(j,t.height)(i.height),fps:ge(j,t.fps)(i.fps),duration:ge(j,t.duration)(i.duration),outFile:i.outFile??t.outFile,withAudio:i.withAudio??t.withAudio,useInnerProxy:i.useInnerProxy??t.useInnerProxy,deterministic:i.deterministic??t.deterministic,disableGpu:i.disableGpu??t.disableGpu,disableHwCodec:i.disableHwCodec??t.disableHwCodec,windowTolerant:i.windowTolerant??t.windowTolerant});}catch(n){l.fatal(n);}}),await commander.program.parseAsync(qt());}var Ce=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};var ko="[DecodeSession]",To=5e3,Ro=4,Io=16,Fe=class{constructor(e,t){this.meta=e;this.src=t;this.pump();}meta;src;buf=new Map;ready=0;want=1;done=false;closed=false;gen=0;ctrl=new AbortController;waiters=new Set;resume;restart;async getFrame(e){e<1&&(e=1);let t=this.buf.get(e);return t||(this.done&&e>this.ready?Buffer.alloc(0):(e>this.ready?(e>this.want&&(this.want=e),this.wake()):(this.want=e,this.requestRestart()),this.wait(e)))}close(){this.closed=true,this.done=true,this.ctrl.abort(),this.wake(),this.requestRestart();for(let{w:e}of this.waiters)clearTimeout(e.timer),e.resolve(Buffer.alloc(0));this.waiters.clear(),this.buf.clear();}wait(e){return new Promise(t=>{let o={resolve:t,timer:setTimeout(()=>{this.waiters.delete(i),t(Buffer.alloc(0));},To)},i={idx:e,w:o};this.waiters.add(i);})}wake(){let e=this.resume;this.resume=void 0,e?.();}requestRestart(){this.gen++;let e=this.restart;this.restart=void 0,e?.(),this.wake();}async pump(){for(;!this.closed;){let e=this.gen;this.ready=0,this.done=false,this.buf.clear();try{await this.decodePass(e);}catch(t){!this.closed&&this.gen===e&&l.warn(ko,`[${this.meta.id.slice(0,8)}] decode ended: ${t instanceof Error?t.message:String(t)}`);}if(this.closed)break;this.gen===e&&(this.done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){var v=[];try{let t=this.ctrl.signal;let o=P(v,await api.Demuxer.open(this.src,{signal:t}),!0);let i=o.streams?.find(k=>k.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!i)throw new Error("no video stream");let n=P(v,await api.Decoder.create(i,{signal:t}));let{frameWidth:s,frameHeight:d,width:a,height:c,fps:p}=this.meta;let u=s!==a||d!==c?`scale=${s}:${d},`:"";let h=P(v,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let f=0;for await(var w of h.frames(n.frames(o.packets(i.index)))){var b=[];try{let k=P(b,w);if(this.closed||this.gen!==e)return;if(k){for(f++;!this.closed&&this.gen===e&&f>this.want+Ro;)await this.pause();if(this.closed||this.gen!==e)return;this.buf.set(f,Bo(k)),this.ready=f,this.evict(),this.drainWaiters();}}catch(x){var y=x,g=!0;}finally{E(b,y,g);}}}catch(_){var A=_,B=true;}finally{var L=E(v,A,B);L&&await L;}}pause(){return new Promise(e=>this.resume=e)}untilRestart(){return this.closed?Promise.resolve():new Promise(e=>this.restart=e)}evict(){let e=this.want-Io;for(let t of this.buf.keys())t<e&&this.buf.delete(t);}drainWaiters(){for(let e of [...this.waiters]){let t=this.buf.get(e.idx);t?(this.waiters.delete(e),clearTimeout(e.w.timer),e.w.resolve(t)):this.done&&(this.waiters.delete(e),clearTimeout(e.w.timer),e.w.resolve(Buffer.alloc(0)));}}};function Bo(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let i=Buffer.allocUnsafe(e*r.height);for(let n=0;n<r.height;n++)o.copy(i,n*e,n*t,n*t+e);return i}var Lo=5e3;async function Jt(r){var n=[];try{let e=AbortSignal.timeout(Lo);let t=P(n,await api.Demuxer.open(r,{signal:e}),!0);let o=t.streams?.find(p=>p.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!o)throw new Error(`probe: no video stream in ${r}`);let i=t.duration>0?t.duration:0;return {width:o.codecpar.width,height:o.codecpar.height,duration:i}}catch(s){var d=s,a=true;}finally{var c=E(n,d,a);c&&await c;}}var Zt="[VideoSrcCache]",Ae=path.join(os.tmpdir(),"pup-video-cache"),ke=class{inFlight=new Map;ctrl=new AbortController;localize(e){if(!e.startsWith("http://")&&!e.startsWith("https://"))return Promise.resolve(e);let t=this.inFlight.get(e);return t||(t=this.download(e),this.inFlight.set(e,t)),t}abort(){this.ctrl.abort(),this.inFlight.clear();}async clear(){this.abort(),await promises.rm(Ae,{recursive:true,force:true}),l.debug(Zt,`cleaned cache ${Ae}`);}async download(e){await promises.mkdir(Ae,{recursive:true});let t=path.join(Ae,`${crypto.createHash("sha1").update(e).digest("hex")}${$o(e)}`);if(fs.existsSync(t))return t;let o=Date.now(),i=await fetch(e,{signal:this.ctrl.signal});if(!i.ok)throw new Error(`video src download failed ${i.status}: ${e}`);return await promises.writeFile(t,Buffer.from(await i.arrayBuffer())),l.debug(Zt,`cached ${e} -> ${t} in ${Date.now()-o}ms`),t}};function $o(r){let e=r.match(/\.(mp4|mov|webm|m4v)(?:\?|$|#)/i);return e?.[1]?`.${e[1].toLowerCase()}`:".mp4"}var ct=class{sessions=new Map;srcs=new ke;inFlightOpens=new Set;closed=false;async open(e){let t=this.openInner(e);this.inFlightOpens.add(t);try{return await t}finally{this.inFlightOpens.delete(t);}}async openInner(e){if(this.closed)throw new Error("frame-server: closed");let t=zo(e),o=this.sessions.get(t);if(o)return o.refs++,o.session.meta;let i=await this.srcs.localize(e.src);if(this.closed)throw new Error("frame-server: closed");let n=await Jt(i);if(this.closed)throw new Error("frame-server: closed");let s=n.width,d=n.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let c=Math.min(1,Math.max(e.dstW/n.width,e.dstH/n.height));s=tr(n.width*c),d=tr(n.height*c);}let a={id:t,width:n.width,height:n.height,frameWidth:s,frameHeight:d,fps:e.fps,duration:n.duration};return this.sessions.set(t,{session:new Fe(a,i),refs:1}),a}getFrame(e,t){let o=this.sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}close(e){let t=this.sessions.get(e);t&&(--t.refs>0||(t.session.close(),this.sessions.delete(e)));}async closeAll(){this.closed=true,this.srcs.abort(),await Promise.allSettled([...this.inFlightOpens]);for(let[,e]of this.sessions)e.session.close();this.sessions.clear(),await this.srcs.clear();}};function zo(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function tr(r){let e=Math.round(r);return Math.max(2,e-e%2)}var re=new ct;var qo="[FrameProtocol]",Yo="pup-frame",Y={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function rr(){electron.protocol.handle(Yo,async r=>{if(r.method==="OPTIONS")return new Response(null,{status:204,headers:Y});let e=new URL(r.url);l.debug(qo,`${r.method} ${e.hostname}${e.search}`);try{switch(e.hostname){case "open":return Xo(await re.open({src:e.searchParams.get("src")??"",fps:Te(e,"fps",30),dstW:Te(e,"w",0),dstH:Te(e,"h",0),fit:e.searchParams.get("fit")??void 0}));case "frame":return Ko(await re.getFrame(e.searchParams.get("id")??"",Te(e,"idx",1)));case "close":return re.close(e.searchParams.get("id")??""),new Response(null,{status:204,headers:Y});default:return new Response(`unknown action: ${e.hostname}`,{status:404,headers:Y})}}catch(t){let o=t instanceof Error?t.message:String(t);return new Response(o,{status:500,headers:Y})}});}function Xo(r){return new Response(JSON.stringify(r),{headers:{...Y,"content-type":"application/json"}})}function Ko(r){if(r.byteLength===0)return new Response(null,{status:410,headers:Y});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...Y,"content-type":"application/octet-stream","cache-control":"no-store"}})}function Te(r,e,t){let o=r.searchParams.get(e),i=o?parseInt(o,10):NaN;return Number.isFinite(i)?i:t}function Re(r){return new Promise(e=>setTimeout(e,r))}function M(r,e,t){return new Promise((o,i)=>{let n=setTimeout(()=>i(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,i).finally(()=>clearTimeout(n));})}var Ie=5e3;function Be(r,e,t){return M(r.sendCommand(e,t),Ie,`cdp.${e}`)}function dt(r,e){return M(Be(r,"Runtime.evaluate",{expression:e}),Ie,"evalIn")}function or(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error(`advanceVirtualTime timed out after ${Ie}ms`));},Ie),n=(s,d)=>{d==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),Be(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e,maxVirtualTimeTaskStarvationCount:1}).catch(s=>{clearTimeout(i),r.off("message",n),o(s);});})}async function ir(r){await Be(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Oe(r,e){await Be(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var ut=32;var nr="stego-tick";function sr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
1
+ 'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var C=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var Jr=Object.create;var Qe=Object.defineProperty;var Zr=Object.getOwnPropertyDescriptor;var Se=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),z=r=>{throw TypeError(r)};var It=(r,e,t)=>e in r?Qe(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Rt=r=>[,,,Jr(null)],Bt=["class","method","getter","setter","accessor","field","value","get","set"],we=r=>r!==void 0&&typeof r!="function"?z("Function expected"):r,eo=(r,e,t,o,i)=>({kind:Bt[r],name:e,metadata:o,addInitializer:n=>t._?z("Already initialized"):i.push(we(n||null))}),Je=(r,e)=>It(e,Se("metadata"),r[3]),Mt=(r,e,t,o)=>{for(var i=0,n=r[e>>1],s=n&&n.length;i<s;i++)n[i].call(t);return o},te=(r,e,t,o,i,n)=>{var a,c,d,p,u=e&7,w=false,h=false,l=2,g=Bt[u+5],P=r[l]||(r[l]=[]),_=((i=i.prototype),Zr(i,t));for(var y=o.length-1;y>=0;y--)d=eo(u,t,c={},r[3],P),(d.static=w,d.private=h,p=d.access={has:b=>t in b},(p.get=b=>b[t]),u>2),a=(0, o[y])(_[g],d),c._=1,we(a)&&(_[g]=a);return _&&Qe(i,t,_),i},Ot=(r,e,t)=>It(r,e+"",t);var v=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&z("Object expected");var o,i;t&&(o=e[Se("asyncDispose")]),o===void 0&&(o=e[Se("dispose")],t&&(i=o)),typeof o!="function"&&z("Object not disposable"),i&&(o=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},E=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,d},i=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=r.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(n,c=>(i(c),n()))}catch(c){i(c);}if(t)throw e};return n()};var oo=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=oo();function Lt(r,e,t){try{return e(process.env[r])}catch{return t}}function N(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var so=module$1.createRequire(m),Nt=Lt("PUP_LOG_LEVEL",N,2),tt=path.dirname(so.resolve("pup-recorder/package.json"));path.join(tt,"dist","app.cjs");var Dt=path.join(tt,"dist","runtime","audio_preload.cjs"),Vt=path.join(tt,"dist","runtime","iframe_preload.cjs");var rt="<pup@debug>",ot="<pup@info>",it="<pup@warn>",nt="<pup@error>",st="<pup@fatal>";function ge(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var Ht,Ut,Wt,$t,Gt,j;Gt=[ge],$t=[ge],Wt=[ge],Ut=[ge],Ht=[ge];var O=class{constructor(e=Nt){this._level=e;Mt(j,5,this);Ot(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 t=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?i:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(rt,...e);}info(...e){this.impl?.info?.(ot,...e);}warn(...e){this.impl?.warn?.(it,...e);}error(...e){this.impl?.error?.(nt,...e);}fatal(...e){this.impl?.error?.(st,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(rt)?this.debug(t.slice(rt.length+1)):t.startsWith(ot)?this.info(t.slice(ot.length+1)):t.startsWith(it)?this.warn(t.slice(it.length+1)):t.startsWith(nt)?this.error(t.slice(nt.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",s=a=>{let c=a.toString();c.startsWith(st)?n+=c.slice(st.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",a=>{n+=a.message,e.kill();}).once("close",(a,c)=>{a||c||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};j=Rt(),te(j,1,"debug",Gt,O),te(j,1,"info",$t,O),te(j,1,"warn",Wt,O),te(j,1,"error",Ut,O),te(j,1,"fatal",Ht,O),Je(j,O);var f=new O;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?f.error(t):r<=constants.AV_LOG_WARNING&&f.warn(t));});var fo="[Crash]";function jt(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),f.debug(fo,"set dump to",r);}function re(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var ho="--pup-priv-args";function qt(){let r=process.argv,e=r.find(o=>o.startsWith(ho));if(!e)return f.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),f.debug("pupargs",t),t}var wo=1920,go=1080,_o=30,bo=5,xo=10,vo="out/html.mp4,out/html.webm",Yt=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFile:C__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:C__default.default.number().describe("Window load timeout in seconds")}),Xt={width:wo,height:go,fps:_o,duration:bo,outFile:vo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:xo};function Eo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function Qt(r){let e=Yt.shape,t=Xt;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,i)=>{try{await r.run(Eo(o),{width:re(N,t.width)(i.width),height:re(N,t.height)(i.height),fps:re(N,t.fps)(i.fps),duration:re(N,t.duration)(i.duration),outFile:i.outFile??t.outFile,withAudio:i.withAudio??t.withAudio,useInnerProxy:i.useInnerProxy??t.useInnerProxy,deterministic:i.deterministic??t.deterministic,disableGpu:i.disableGpu??t.disableGpu,disableHwCodec:i.disableHwCodec??t.disableHwCodec,windowTolerant:i.windowTolerant??t.windowTolerant,windowTimeout:re(N,t.windowTimeout)(i.windowTimeout)});}catch(n){f.fatal(n);}}),await commander.program.parseAsync(qt());}var Ce=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function Fe(r){return new Promise(e=>setTimeout(e,r))}function q(r,e,t){return new Promise((o,i)=>{let n=setTimeout(()=>i(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,i).finally(()=>clearTimeout(n));})}function at(r,e){return e?new Promise((t,o)=>{let i=()=>o(e.reason);e.addEventListener("abort",i,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",i));}):r}var Ae=5e3;function ke(r,e,t){return q(r.sendCommand(e,t),Ae,`cdp.${e}`)}function ct(r,e){return q(ke(r,"Runtime.evaluate",{expression:e}),Ae,"evalIn")}function Jt(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error(`advanceVirtualTime timed out after ${Ae}ms`));},Ae),n=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),ke(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(i),r.off("message",n),o(s);});})}async function Zt(r){await ke(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Te(r,e){await ke(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var dt=32;var er="stego-tick";function tr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -57,7 +57,7 @@
57
57
  (function() {
58
58
  const { ipcRenderer } = require('electron');
59
59
  const WIDTH = ${t};
60
- const MARKER_WIDTH = ${ut};
60
+ const MARKER_WIDTH = ${dt};
61
61
  const canvas = document.getElementById('stego');
62
62
  const ctx = canvas.getContext('2d', { willReadFrequently: true });
63
63
  let startTime = null;
@@ -88,7 +88,7 @@
88
88
  }
89
89
 
90
90
  ctx.putImageData(imageData, 0, 0);
91
- ipcRenderer.send('${nr}');
91
+ ipcRenderer.send('${er}');
92
92
  }
93
93
 
94
94
  function updateLoop() {
@@ -117,6 +117,6 @@
117
117
  })();
118
118
  </script>
119
119
  </body>
120
- </html>`}function Me(r,e){let{width:t,height:o}=e;if(t<ut||o<2)return;let i=o-1,n=0;for(let s=0;s<ut;s++){let d=(i*t+s)*4,c=(r[d]??0)>127?1:0;n=n<<1|c;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function ar(r){return dt(r,"__pup_start_stego__()")}async function cr(r,e,t){let o=new Promise(i=>r.ipc.once(nr,i));await dt(r.debugger,`__pup_draw_stego__(${e})`),await or(r.debugger,t),await M(o,5e3,"swapBuffer");}var pt="pup",Qo="pup-frame",dr={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:pt,privileges:dr},{scheme:Qo,privileges:dr}]);function pr(){electron.protocol.handle(pt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=sr(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function mr(r,e){let t=new URL(`${pt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var oe=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(n=>{this._active--,o(n),this.next();}).catch(n=>{this._active--,i(n),this.next();});},reject:i,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};async function X(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function K(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function F(){let r=new nodeAv.Packet;return r.alloc(),r}async function ie(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var D=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=K(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=K(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=F();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=P(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var n=i,s=true;}finally{E(o,n,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var _i={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Le=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=F(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${_i[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,c=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,p,c),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)isFinite(o[p])||(o[p]=0);let i=o.length>>1;let n=P(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(d){var a=d,c=true;}finally{E(s,a,c);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return ie(this._ctx,this._pkt,this._stream,e)}};function H(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var V=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},C=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var U=Buffer.from([0,0,0,1]);var ft=16;var ht=23,se=32,ae=33,Ne=34,xr=39;function vr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function wt(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function R(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let n=r.length;for(let a=i+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){n=a;break}let{type:s,layerId:d}=vr(r[i],r[i+1]);e.push({type:s,layerId:d,data:r.subarray(i,n)}),t=n;}return e}function gt(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=vr(t[0],t[1]),[n,s]=wt(o,e,i);return t[0]=n,t[1]=s,t}function I(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function Q(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var xi=48,Er=24,vi=2,Pi=10,bt=0,yi=1;function Pr(r,e,t){let o=e>>3,i=1<<7-(e&7),n=r[o]??0;r[o]=t?n|i:n&~i;}function yr(r,e){let t=I(r);return Pr(t,e+vi,0),Pr(t,e+Pi,1),Q(t)}function De(r){let e=R(r);if(e.length===0)return r;let t=[];for(let o of e){let i=o.data;o.type===se?i=yr(o.data,xi):o.type===ae&&(i=yr(o.data,Er)),t.push(U,i);}return Buffer.concat(t)}function Ei(r,e,t){let o=I(r),i=new C(o),n=new V;for(let s=0;s<e;s++)n.bits.push(i.read(1));for(i.readUe(),n.ue(t);i.pos<i.bits.length;)n.bits.push(i.read(1));for(;n.bits.length%8!==0;)n.bits.push(0);return Q(H(n.bits))}function Si(r,e,t,o){let i=I(r),n=new C(i),s=new V;for(let d=0;d<e;d++)s.bits.push(n.read(1));for(n.readUe(),n.readUe(),s.ue(t),s.ue(o);n.pos<n.bits.length;)s.bits.push(n.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return Q(H(s.bits))}function Sr(r){let e=Er+96;return Ei(r,e,1)}function Cr(r){return Si(r,16,1,1)}function Ci(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Fi(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let i=0;i<=e;i++)r.read(1)||r.read(1);}else {let o=r.readUe(),i=r.readUe();for(let n=0;n<o;n++)r.readUe(),r.read(1);for(let n=0;n<i;n++)r.readUe(),r.read(1);}}function Ai(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=ft&&e<=ht;o&&r.read(1),r.readUe();let i=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):Fi(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(i===yi||i===bt)&&(r.read(1)&&(r.readUe(),i===bt&&r.readUe()),i===bt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),Ci(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Fr(r,e,t){let o=I(r),i=new C(o),n=new C(o),s=Ai(n,e,t),d=s%8===0?8:8-s%8,a=(s+d)/8,c=new V;for(let u=0;u<16;u++)c.bits.push(i.read(1));for(c.bits.push(i.read(1)),e>=ft&&e<=ht&&c.bits.push(i.read(1)),i.readUe(),c.ue(1);i.pos<s;)c.bits.push(i.read(1));for(c.bits.push(1);c.bits.length%8!==0;)c.bits.push(0);return Q(Buffer.concat([H(c.bits),o.subarray(a)]))}function ki(r){let e=new C(I(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function Ti(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Ri(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Ar(r,e,t){let o=ki(r);if(!o)return r;let i=new V;return Ti(i,o),Ri(i,o,e,t),i.bits.push(1),i.align(0),Q(H(i.bits))}function kr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let i=r.width,n=r.height,s=i*n;if(t.byteOffset%4===0&&o===i*4){let d=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=d[a]>>>24;}else for(let d=0;d<n;d++){let a=d*o+3,c=d*i;for(let p=0;p<i;p++)e[c+p]=t[a+p*4];}}function Ii(r,e){return r===ae?Sr(e):r===Ne?Cr(e):e}function Tr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=R(e),i=R(t),n=new Map;for(let a of i){if(a.type===se)continue;let c=n.get(a.type)??[];c.push(a),n.set(a.type,c);}let s=[],d=new Set;for(let a of o){let c=a.type===se?Ar(a.data,r.width,r.height):a.data;if(s.push(U,c),!d.has(a.type)){d.add(a.type);for(let p of n.get(a.type)??[]){let u=Ii(a.type,p.data);s.push(U,gt(u,1));}}}return s.push(Bi()),Buffer.concat(s)}function Bi(){let[t,o]=wt(xr,0,1),i=[],n=(s,d)=>{for(let a=d-1;a>=0;a--)i.push(s>>a&1);};for(n(0,1),n(0,3),n(0,3),n(0,9),n(255,9),n(0,1),n(0,1),n(1,1);i.length%8!==0;)n(0,1);return Buffer.concat([U,Buffer.from([t,o]),Buffer.from([165,4]),H(i),Buffer.from([128])])}function Rr(r,e,t){let o=[];for(let i of r)o.push(U,i.data);for(let i of e)if(i.type<se){let n=Fr(i.data,i.type,t);o.push(U,gt(n,1));}return Buffer.concat(o)}var Ve=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,i,"base")),this._alphaQueue.push(...await this.receiveAll(o,n,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let i=[];for(;;){let n=await e.receivePacket(t);if(n>=0){i.push(this.snapshot(t)),t.unref();continue}if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)return i;nodeAv.FFmpegError.throwIfError(n,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:i,baseCtx:n,stream:s,hevcCfg:d}=this._s,a=Rr(R(e.data),R(t.data),d);i.data=De(a),i.pts=e.pts,i.dts=e.dts,i.duration=e.duration===0n?1n:e.duration,i.flags=e.flags,i.streamIndex=s.index,i.rescaleTs(n.timeBase,s.timeBase),await o.writePacket(i),i.unref();}};function W(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Ni(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let i=0;i<e;i++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let i=e;i<8;i++)r.read(2);for(let i=0;i<e;i++)t[i]&&r.read(88),o[i]&&r.read(8);}function Di(r){let e=new C(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&W("sps_max_sub_layers_minus1",t,"0"),e.read(1),Ni(e,t),e.readUe();let o=e.readUe();o===3&&W("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let i=e.readUe()+4,s=e.read(1)?t+1:1;for(let h=0;h<s;h++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&W("scaling_list_enabled_flag",1,"0"),e.read(1);let d=e.read(1)===1;e.read(1)&&W("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&W("num_short_term_ref_pic_sets",a,"\u22641");let c=0;if(a===1){let h=e.readUe(),f=e.readUe();c=h+f;for(let w=0;w<h;w++)e.readUe(),e.read(1);for(let w=0;w<f;w++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&W("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:i,saoEnabled:d,numShortTermRefPicSets:a,numDeltaPocsSet0:c,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Vi(r){let e=new C(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&W("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&W("tiles_enabled_flag",1,"0"),e.read(1);let i=e.read(1)===1,n=e.read(1),s=false;return n&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:i&&!s}}function Ir(r){let e=R(r),t=e.find(s=>s.type===ae),o=e.find(s=>s.type===Ne);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let i=Di(I(t.data)),n=Vi(I(o.data));return {...i,...n}}var He=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Ve({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:s}=e,d=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!d)throw new Error("hevc_nvenc encoder not found");let c={codec:d,width:t,height:o,fps:i,bitrate:n,options:{preset:"p4",bf:"0",tier:"main"}},p=await X({...c,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),u,h,f,w;try{if(u=await X({...c,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),!p.extraData||!u.extraData)throw new Error("nvenc: codec extradata missing");let b=Ir(p.extraData),x=s.addStream(p,"hvc1"),y=Tr({baseExtradata:p.extraData,alphaExtradata:u.extraData,width:t,height:o});x.codecpar.extradata=De(y);let g=t*o,v=(t+1>>1)*(o+1>>1),_=Buffer.alloc(g+v*2);return _.fill(128,g),h=F(),f=F(),w=K(t,o,constants.AV_PIX_FMT_YUV420P),new r({baseCtx:p,alphaCtx:u,basePkt:h,alphaPkt:f,stream:x,alphaSwFrame:w,alphaBuf:_,hevcCfg:b})}catch(b){throw h?.free(),f?.free(),w?.free(),u?.freeContext(),p.freeContext(),b}}async encode(e,t){let{baseCtx:o,alphaCtx:i,alphaSwFrame:n,alphaBuf:s}=this._s,d=this._pts++;kr(e,s),nodeAv.FFmpegError.throwIfError(n.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(n.fromBuffer(s),"alphaSw.fromBuffer"),n.pts=d,n.duration=1n,e.pts=d,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await i.sendFrame(n),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i,alphaSwFrame:n}=this._s;e.free(),t.free(),n.free(),i.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var ce=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:n,...s}=e,d=nodeAv.Codec.findEncoderByName(t);if(!d)throw new Error(`Video encoder not found: ${t}`);let a=await X({codec:d,...s,codecTag:o,options:i},"videoCtx.open2"),c=n.addStream(a,o);return new r(a,F(),c)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return ie(this._ctx,this._pkt,this._stream,e)}};var Ue=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:n,bitrate:s,muxer:d}=e,a=n.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let c=await X({codec:a,width:t,height:o,fps:i,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p;try{let u=d.addStream(c,"hvc1");return p=F(),new r(c,p,u)}catch(u){throw p?.free(),c.freeContext(),u}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return ie(this._ctx,this._pkt,this._stream,e)}};var We="[Encoder]";async function Or(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:s=false,sharedHw:d}=r,a=d??(s?void 0:api.HardwareContext.auto()??void 0),c=!d&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return l.debug(We,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ue.create({width:t,height:o,fps:i,hw:a,bitrate:n,muxer:e}),hw:a,ownsHw:c};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return l.debug(We,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await He.create({width:t,height:o,fps:i,hw:a,bitrate:n,muxer:e}),hw:a,ownsHw:c}}catch(u){l.warn(We,"Hardware codec session limits reached, use software encoder",u),c&&a?.dispose();}return l.debug(We,"using software libx265 HEVC alpha encoder"),{video:await ce.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await D.create(t,o),ownsHw:false}}var $e=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=P(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var i=o,n=true;}finally{E(t,i,n);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(this._opened){this._opened=false;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose]();}}}};var un="libvpx-vp9",xe=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new $e(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),i=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:i,opts:e})}static mp4Video(e,t){let{width:o,height:i,fps:n,disableHwCodec:s,sharedHw:d}=e;return Or({width:o,height:i,fps:n,disableHwCodec:s,sharedHw:d},t)}static async webmVideo(e,t){let{width:o,height:i,fps:n}=e;return {video:await ce.create({width:o,height:i,fps:n,codecName:un,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await D.create(o,i),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Le.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:i}=this._s;await o?.flush(i),e?await e.flush(i):await t.flush(i);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:i,codec:n,hw:s,ownsHw:d}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),i?.[Symbol.dispose](),n?.[Symbol.dispose](),await e[Symbol.asyncDispose](),d&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:i}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,i);}};var de=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:i,outFile:n,withAudio:s=false,disableHwCodec:d=false}=e,a=n.split(",").map(w=>w.trim()).filter(Boolean);if(a.length===0)throw new Error("outFile must contain at least one path");let c=a.map(w=>xe.kindFromPath(w)),u=!d&&c.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,h=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,f=[];for(let w=0;w<a.length;w++){let b=await xe.create({outFile:a[w],kind:c[w],width:t,height:o,fps:i,withAudio:s,disableHwCodec:d,sharedHw:c[w]==="mp4"&&h?u:void 0});f.push(b);}return new r({sinks:f,sharedHw:u,limiter:new oe(1),outFiles:a,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=P(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(d=>d.encodeBGRA(t)));}catch(i){var n=i,s=true;}finally{E(o,n,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await D.create(t,o);let i=await this._s.pngCodec.decodePNG(e);for(let n of this._s.sinks)await n.encodeDecodedFrame(i);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=K(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var Ge=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let c=Math.max(0,a-1);t+=(c/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,s=Math.min(1,t),d=1-(1-n)*(1-s);return {global:n,local:s,jank:d,expected:i,actual:this._actual,maxBurst:o}}};function ze(r,e){return r.width===e.width&&r.height===e.height}var Lr="audio-meta",Nr="audio-chunk";function Dr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let i=async(s,d)=>{let a=d.sampleRate,c=t();e.setupAudio(a);let p=Math.ceil(c*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},n=async(s,d)=>{try{await e.encodeAudio(d);}catch(a){o(a);}};return r.ipc.on(Lr,i),r.ipc.on(Nr,n),()=>{r.ipc.removeListener(Lr,i),r.ipc.removeListener(Nr,n);}}function Vr({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let i=new Error(`timeout over ${t}ms`);return async function(...n){let s=0;for(;;){o?.throwIfAborted();try{let d=[r(...n)];return t&&d.push(promises$1.setTimeout(t).then(()=>{throw i})),await Promise.race(d)}catch(d){if(o?.throwIfAborted(),s++,s>=e)throw d;await Re(Math.pow(2,s)*100+Math.random()*100);}}}}var _t=["file:","http:","https:","data:"],gn=/^(file:|https?:|data:)/;function Hr(r){if(gn.test(r))return;let e=r.split(":")[0]+":",t=_t.includes(e)?`unsupported protocol: ${e}, expected ${_t.join(", ")}`:`invalid source format, expected ${_t.join(", ")}`;throw new Error(t)}var je=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var qe="[Network]",_n=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),xn=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function vn(r){for(let e of xn)if(r.startsWith(e))return true;return false}function xt(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=_n.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Ur({source:r,window:e,useInnerProxy:t,cancelMedia:o}){let i=e.webContents.session.webRequest,n=new oe(256),s=new Map;async function d(c,p){let u=new je;s.set(c,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(c));}function a(c){s.get(c)?.signal();}i.onBeforeRequest((c,p)=>{let u=c.url;if(o&&c.resourceType==="media"){p({cancel:true});return}let h=t?xt(u):u;n.schedule(()=>{let f=`${e.id}_${c.id}`;return l.debug(qe,"start:",{key:f,url:u,proxied:h,method:c.method,source:r,stats:n.stats}),p(h===u?{cancel:false}:{cancel:false,redirectURL:h}),vn(u)?Promise.resolve():d(f,()=>{l.warn(qe,"maybe timeout:",{key:f,url:u,proxied:h,method:c.method,source:r});})});}),i.onHeadersReceived(({responseHeaders:c},p)=>{delete c?.["x-frame-options"],delete c?.["X-Frame-Options"],delete c?.["content-security-policy"],delete c?.["Content-Security-Policy"],p({cancel:false,responseHeaders:c});}),i.onCompleted(c=>{let p=`${e.id}_${c.id}`;a(p),l.debug(qe,"completed:",{key:p,url:c.url,method:c.method,statusCode:c.statusCode,source:r});}),i.onErrorOccurred(c=>{let p=`${e.id}_${c.id}`;a(p),!(o&&c.resourceType==="media"&&c.error==="net::ERR_BLOCKED_BY_CLIENT")&&l.error(qe,"error:",{key:p,url:c.url,method:c.method,error:c.error,resourceType:c.resourceType,source:r});});}function vt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var J="[Window]",Wr=new Error("window timeout");function yn({source:r,win:e,action:t,tolerant:o,signal:i}){return new Promise((n,s)=>{let d=setTimeout(()=>a(Wr),1e4),a=c=>{clearTimeout(d),c?s(c):n();};i?.throwIfAborted(),i?.addEventListener("abort",()=>a(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{l.debug(J,"dom-ready:",{source:r}),o&&a();}),e.webContents.once("did-stop-loading",()=>{l.debug(J,"did-stop-loading:",{source:r}),a();}),e.webContents.once("did-fail-load",(c,p,u,h)=>{let f=`did-fail-load: ${JSON.stringify({url:h,source:r,code:p,desc:u})}`;l.error(J,f),a(new Error(f));}),e.webContents.once("render-process-gone",(c,{exitCode:p,reason:u})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:p,reason:u})}`;l.error(J,h),a(new Error(h));}),t();})}function ue(r){return new Promise(e=>{vt(r);let t=setTimeout(()=>{try{l.warn(J,"force close"),r.destroy();}catch{}o();},1e3),o=()=>(clearTimeout(t),e());r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function En(r){if(r.deterministic)return Vt;if(r.withAudio)return Dt}async function $r({source:r,renderer:e,tolerant:t,signal:o,onCreated:i}){let{width:n,height:s,useInnerProxy:d}=e,a=d?xt(r):r,c=new electron.BrowserWindow({width:n,height:s+1,minWidth:n,minHeight:s+1,maxWidth:n,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:En(e)}});Ur({source:r,window:c,useInnerProxy:d,cancelMedia:e.deterministic}),c.webContents.debugger.attach("1.3"),await i?.(c),c.webContents.on("console-message",({level:p,message:u,lineNumber:h,sourceId:f})=>{let w=[J,"console:",{message:u,lineNumber:h,sourceId:f,source:r}];p==="error"?l.error(...w):l.debug(...w),!(p==="warning"&&u.startsWith("%cElectron Security Warning"))&&e.onConsole(p,u);});try{let p=mr(a,{width:n,height:s});await yn({source:r,win:c,action:()=>c.loadURL(p),tolerant:t,signal:o});}catch(p){throw await ue(c),p}return c}var Sn=Vr({fn:$r,maxAttempts:2});async function Ye({source:r,renderer:e,onCreated:t,signal:o}){Hr(r),o?.throwIfAborted();let i,n;try{i=await Sn({source:r,renderer:e,signal:o});}catch(d){n=d;}let s=()=>$r({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&n===Wr)return l.warn(J,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(n){let{message:d,stack:a}=n;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:d,stack:a})}`)}i&&(i.webContents.removeAllListeners(),vt(i),await Re(2e3),await ue(i));try{return await s()}catch(d){let{message:a,stack:c}=d;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:a,stack:c})}`)}}var Cn="[Render]";async function Gr(r){var Z=[];try{let{source:e,fps:t,width:o,height:i,duration:n,withAudio:s,outFile:d,disableHwCodec:a,signal:c,onProgress:p}=r;let u=P(Z,await de.create({width:o,height:i,fps:t,outFile:d,withAudio:s,disableHwCodec:a}),!0);let h=Math.ceil(t*n);let f=1e3/t;let w={width:o,height:i+1};let b=0;let x;let y=0;let g;let v;let _;let A;let B=new Ge(t);let L;let k=N=>{b++,u.encodeBGRA(N).catch(ee=>g??=ee);};let Pe=(N,ee,le)=>{if(g??=c?.reason,g){_?.(g);return}let G=le.getSize();if(!ze(G,w)){Oe(pe,w);return}let Ke=le.toBitmap(),fe=Me(Ke,G);if(fe===void 0){g??=new Error(`no timestamp @ ${b}`);return}if(x!==void 0&&fe-x<f*.8)return;let Qe=Buffer.from(Ke.buffer,Ke.byteOffset,i*o*4);if(x===void 0)k(Qe),B.wrote();else {let St=fe-x;if(St<=f*1.2)k(Qe),B.wrote();else {let Ct=Math.round(St/f);B.dropped(Ct-1),B.wrote();for(let Ft=0;Ft<Ct&&b<h;Ft++)k(Qe);}}x=fe;let Et=Math.floor(b/h*100);Et!==y&&(y=Et,p(y));let Jr=n*1e3;(fe>=Jr-f*.5||b>=h)&&v?.();};let T=await Ye({source:e,renderer:r,signal:c,onCreated:N=>{s&&(L=Dr({wc:N.webContents,encoder:u,getVideoTimeMs:()=>x??0,onError:ee=>g??=ee}));}});let pe=T.webContents.debugger;try{T.webContents.stopPainting(),T.webContents.setFrameRate(t),T.webContents.on("paint",Pe),T.webContents.startPainting(),c?.throwIfAborted(),c?.addEventListener("abort",()=>_?.(c.reason),{once:!0}),await ar(pe),await new Promise((N,ee)=>{[v,_]=[N,ee];let le=0,G=0;A=setInterval(()=>{if(b!==le){le=b,G=0;return}if(G>=3){_?.(new Error("drawable timeout"));return}l.warn(Cn,`${e} render is extremely slow, written=${b} stuck=${G}`),G++,T.webContents.invalidate();},1e3);});}finally{clearInterval(A),T.webContents.off("paint",Pe),await ue(T),L?.(),await u.finish();}if(g||b===0)throw g??new Error("no frames captured");else {let N=B.finalize();return {written:b,jank:N.jank,outFile:d}}}catch(me){var Xe=me,ye=true;}finally{var Ee=E(Z,Xe,ye);Ee&&await Ee;}}var Fn="[Rerender]",zr=3;async function jr(r,e){let t;for(let o=0;o<zr;o++)try{return await e()}catch(i){if(r.aborted)throw i;t=i,l.warn(Fn,`retry ${o+1}/${zr}: ${i.message}`);}throw t}var An="[Video]",kn=5e3;async function qr(r,e){if(!(!r||!r.url))try{let t=`window.__pup_video__&&window.__pup_video__.advance(${e})`,o=r.executeJavaScript(t);await M(o,kn,"video.advance");}catch(t){l.warn(An,`advance skipped: ${t instanceof Error?t.message:String(t)}`);}}var Yr="__pup_tick__";async function Xr(r,e){if(!r)return;let t=`window.${Yr}&&window.${Yr}.process(${e})`,o=r.executeJavaScript(t);await Promise.all([M(o,5e3,"tick.executeJavaScript"),qr(r,e)]);}var Pt="[Shoot]";async function Tn({source:r,win:e,size:t,ms:o}){let i,n=0,s=0,d,a=e.webContents.debugger,c={width:t.width,height:t.height+1};try{return await new Promise((p,u)=>{d=setInterval(()=>{if(s>=3){u(new Error("drawable timeout"));return}s++,l.warn(Pt,`${r} render is extremely slow @ ${o}, current: ${i} with ${s} repeats`),e.webContents.invalidate();},1e3);let h=(f,w,b)=>{let x=b.getSize();if(!ze(x,c)){Oe(a,c);return}let y=b.toBitmap(),g=Me(y,x);if(g===void 0||Math.abs(g-o)>1){i=g,n++;return}e.webContents.off("paint",h),p(Buffer.from(y.buffer,y.byteOffset,t.height*t.width*4)),e.webContents.stopPainting(),e.webContents.setFrameRate(240);};e.webContents.on("paint",h),e.webContents.startPainting();})}finally{clearInterval(d);}}async function Kr(r){var L=[];try{let{source:e,fps:t,width:o,height:i,duration:n,withAudio:s,outFile:d,disableHwCodec:a,signal:c,onProgress:p}=r;s&&l.warn(Pt,"audio will be ignored on this mode");let u=performance.now();let h=Ye({source:e,renderer:r,signal:c});let f=P(L,await de.create({width:o,height:i,fps:t,outFile:d,withAudio:s,disableHwCodec:a}),!0);let w=await h;l.debug(Pt,"init done:",{source:e,cost:performance.now()-u});let b=Math.ceil(t*n);let x=1e3/t;let y=0;let g=0;let v;let _=w.webContents.debugger;let A=w.webContents.mainFrame;let B=A.frames[0];try{w.webContents.setFrameRate(t),w.webContents.stopPainting(),await ir(_);for(let Z=0;Z<b;Z++){c?.throwIfAborted();let me=(Z+1)*x;await Xr(B,me),await cr(w.webContents,me,x);let Xe=await Tn({source:e,win:w,size:{width:o,height:i},ms:me});if(f.encodeBGRA(Xe).catch(Ee=>v??=Ee),y++,v)throw v;let ye=Math.floor(y/b*100);ye!==g&&(g=ye,p(g));}}finally{await re.closeAll(),await ue(w),await f.finish();}if(v)throw v;if(y===0)throw new Error("no frames captured");else return {written:y,jank:0,outFile:d}}catch(k){var Pe=k,T=true;}finally{var pe=E(L,Pe,T);pe&&await pe;}}var Mn="[App]";function Qr(){l.debug(Mn,"gpu features:",electron.app.getGPUFeatureStatus());}var ve=new AbortController,yt=false;jt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Qr);electron.app.on("before-quit",r=>!yt&&r.preventDefault());electron.app.on("will-quit",r=>!yt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>ve.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&ve.abort(e.reason);});Qt({name:"app",run:async(r,e)=>{let t=new Ce;try{await electron.app.whenReady(),pr(),rr(),Qr();for(let n of e.outFile.split(","))await promises.mkdir(path.dirname(n),{recursive:!0});let o=e.deterministic?Kr:Gr;ve.signal.throwIfAborted();let i=await jr(ve.signal,()=>o({source:r,...e,signal:ve.signal,onProgress:n=>t.writeProgress(n),onConsole:(n,s)=>t.writeConsole(n,s)}));await t.writeDone(i);}catch(o){let i=o,n=i.stack??i.message??String(o??"unknown error");await t.writeError(n);}finally{yt=true,electron.app.exit();}}});
120
+ </html>`}function Ie(r,e){let{width:t,height:o}=e;if(t<dt||o<2)return;let i=o-1,n=0;for(let s=0;s<dt;s++){let a=(i*t+s)*4,d=(r[a]??0)>127?1:0;n=n<<1|d;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function rr(r){return ct(r,"__pup_start_stego__()")}async function or(r,e,t){let o=new Promise(i=>r.ipc.once(er,i));await ct(r.debugger,`__pup_draw_stego__(${e})`),await Jt(r.debugger,t),await q(o,5e3,"swapBuffer");}var ut="pup",So="pup-frame",ir={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:ut,privileges:ir},{scheme:So,privileges:ir}]);function sr(){electron.protocol.handle(ut,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=tr(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function ar(r,e){let t=new URL(`${ut}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var oe=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(n=>{this._active--,o(n),this.next();}).catch(n=>{this._active--,i(n),this.next();});},reject:i,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};async function Y(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function X(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function I(){let r=new nodeAv.Packet;return r.alloc(),r}async function ie(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var D=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=X(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=X(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=I();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=v(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var n=i,s=true;}finally{E(o,n,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var qo={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Re=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=I(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let c=`aformat=sample_fmts=${qo[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(c,p,d),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let i=o.length>>1;let n=v(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,d=true;}finally{E(s,c,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return ie(this._ctx,this._pkt,this._stream,e)}};function H(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var V=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},T=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var U=Buffer.from([0,0,0,1]);var lt=16;var ft=23,se=32,ae=33,Be=34,hr=39;function wr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function ht(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function B(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let n=r.length;for(let c=i+2;c<r.length-2;c++)if(r[c]===0&&r[c+1]===0&&(r[c+2]===1||c+3<r.length&&r[c+2]===0&&r[c+3]===1)){n=c;break}let{type:s,layerId:a}=wr(r[i],r[i+1]);e.push({type:s,layerId:a,data:r.subarray(i,n)}),t=n;}return e}function wt(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=wr(t[0],t[1]),[n,s]=ht(o,e,i);return t[0]=n,t[1]=s,t}function M(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function K(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var Yo=48,br=24,Xo=2,Ko=10,gt=0,Qo=1;function gr(r,e,t){let o=e>>3,i=1<<7-(e&7),n=r[o]??0;r[o]=t?n|i:n&~i;}function _r(r,e){let t=M(r);return gr(t,e+Xo,0),gr(t,e+Ko,1),K(t)}function Me(r){let e=B(r);if(e.length===0)return r;let t=[];for(let o of e){let i=o.data;o.type===se?i=_r(o.data,Yo):o.type===ae&&(i=_r(o.data,br)),t.push(U,i);}return Buffer.concat(t)}function Jo(r,e,t){let o=M(r),i=new T(o),n=new V;for(let s=0;s<e;s++)n.bits.push(i.read(1));for(i.readUe(),n.ue(t);i.pos<i.bits.length;)n.bits.push(i.read(1));for(;n.bits.length%8!==0;)n.bits.push(0);return K(H(n.bits))}function Zo(r,e,t,o){let i=M(r),n=new T(i),s=new V;for(let a=0;a<e;a++)s.bits.push(n.read(1));for(n.readUe(),n.readUe(),s.ue(t),s.ue(o);n.pos<n.bits.length;)s.bits.push(n.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return K(H(s.bits))}function xr(r){let e=br+96;return Jo(r,e,1)}function vr(r){return Zo(r,16,1,1)}function ei(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function ti(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let i=0;i<=e;i++)r.read(1)||r.read(1);}else {let o=r.readUe(),i=r.readUe();for(let n=0;n<o;n++)r.readUe(),r.read(1);for(let n=0;n<i;n++)r.readUe(),r.read(1);}}function ri(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=lt&&e<=ft;o&&r.read(1),r.readUe();let i=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):ti(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(i===Qo||i===gt)&&(r.read(1)&&(r.readUe(),i===gt&&r.readUe()),i===gt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),ei(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function yr(r,e,t){let o=M(r),i=new T(o),n=new T(o),s=ri(n,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new V;for(let u=0;u<16;u++)d.bits.push(i.read(1));for(d.bits.push(i.read(1)),e>=lt&&e<=ft&&d.bits.push(i.read(1)),i.readUe(),d.ue(1);i.pos<s;)d.bits.push(i.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return K(Buffer.concat([H(d.bits),o.subarray(c)]))}function oi(r){let e=new T(M(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function ii(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function ni(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Pr(r,e,t){let o=oi(r);if(!o)return r;let i=new V;return ii(i,o),ni(i,o,e,t),i.bits.push(1),i.align(0),K(H(i.bits))}function Er(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let i=r.width,n=r.height,s=i*n;if(t.byteOffset%4===0&&o===i*4){let a=new Uint32Array(t.buffer,t.byteOffset,s);for(let c=0;c<s;c++)e[c]=a[c]>>>24;}else for(let a=0;a<n;a++){let c=a*o+3,d=a*i;for(let p=0;p<i;p++)e[d+p]=t[c+p*4];}}function si(r,e){return r===ae?xr(e):r===Be?vr(e):e}function Sr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=B(e),i=B(t),n=new Map;for(let c of i){if(c.type===se)continue;let d=n.get(c.type)??[];d.push(c),n.set(c.type,d);}let s=[],a=new Set;for(let c of o){let d=c.type===se?Pr(c.data,r.width,r.height):c.data;if(s.push(U,d),!a.has(c.type)){a.add(c.type);for(let p of n.get(c.type)??[]){let u=si(c.type,p.data);s.push(U,wt(u,1));}}}return s.push(ai()),Buffer.concat(s)}function ai(){let[t,o]=ht(hr,0,1),i=[],n=(s,a)=>{for(let c=a-1;c>=0;c--)i.push(s>>c&1);};for(n(0,1),n(0,3),n(0,3),n(0,9),n(255,9),n(0,1),n(0,1),n(1,1);i.length%8!==0;)n(0,1);return Buffer.concat([U,Buffer.from([t,o]),Buffer.from([165,4]),H(i),Buffer.from([128])])}function Cr(r,e,t){let o=[];for(let i of r)o.push(U,i.data);for(let i of e)if(i.type<se){let n=yr(i.data,i.type,t);o.push(U,wt(n,1));}return Buffer.concat(o)}var Oe=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,i,"base")),this._alphaQueue.push(...await this.receiveAll(o,n,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let i=[];for(;;){let n=await e.receivePacket(t);if(n>=0){i.push(this.snapshot(t)),t.unref();continue}if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)return i;nodeAv.FFmpegError.throwIfError(n,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:i,baseCtx:n,stream:s,hevcCfg:a}=this._s,c=Cr(B(e.data),B(t.data),a);i.data=Me(c),i.pts=e.pts,i.dts=e.dts,i.duration=e.duration===0n?1n:e.duration,i.flags=e.flags,i.streamIndex=s.index,i.rescaleTs(n.timeBase,s.timeBase),await o.writePacket(i),i.unref();}};function W(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function pi(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let i=0;i<e;i++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let i=e;i<8;i++)r.read(2);for(let i=0;i<e;i++)t[i]&&r.read(88),o[i]&&r.read(8);}function mi(r){let e=new T(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&W("sps_max_sub_layers_minus1",t,"0"),e.read(1),pi(e,t),e.readUe();let o=e.readUe();o===3&&W("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let i=e.readUe()+4,s=e.read(1)?t+1:1;for(let w=0;w<s;w++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&W("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&W("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&W("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let w=e.readUe(),h=e.readUe();d=w+h;for(let l=0;l<w;l++)e.readUe(),e.read(1);for(let l=0;l<h;l++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&W("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:i,saoEnabled:a,numShortTermRefPicSets:c,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function li(r){let e=new T(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&W("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&W("tiles_enabled_flag",1,"0"),e.read(1);let i=e.read(1)===1,n=e.read(1),s=false;return n&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:i&&!s}}function Fr(r){let e=B(r),t=e.find(s=>s.type===ae),o=e.find(s=>s.type===Be);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let i=mi(M(t.data)),n=li(M(o.data));return {...i,...n}}var Le=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Oe({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:s}=e,a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let d={codec:a,width:t,height:o,fps:i,bitrate:n,options:{preset:"p4",bf:"0",tier:"main"}},p=await Y({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),u,w,h,l;try{if(u=await Y({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),!p.extraData||!u.extraData)throw new Error("nvenc: codec extradata missing");let g=Fr(p.extraData),x=s.addStream(p,"hvc1"),P=Sr({baseExtradata:p.extraData,alphaExtradata:u.extraData,width:t,height:o});x.codecpar.extradata=Me(P);let _=t*o,y=(t+1>>1)*(o+1>>1),b=Buffer.alloc(_+y*2);return b.fill(128,_),w=I(),h=I(),l=X(t,o,constants.AV_PIX_FMT_YUV420P),new r({baseCtx:p,alphaCtx:u,basePkt:w,alphaPkt:h,stream:x,alphaSwFrame:l,alphaBuf:b,hevcCfg:g})}catch(g){throw w?.free(),h?.free(),l?.free(),u?.freeContext(),p.freeContext(),g}}async encode(e,t){let{baseCtx:o,alphaCtx:i,alphaSwFrame:n,alphaBuf:s}=this._s,a=this._pts++;Er(e,s),nodeAv.FFmpegError.throwIfError(n.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(n.fromBuffer(s),"alphaSw.fromBuffer"),n.pts=a,n.duration=1n,e.pts=a,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await i.sendFrame(n),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i,alphaSwFrame:n}=this._s;e.free(),t.free(),n.free(),i.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var ce=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:n,...s}=e,a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=await Y({codec:a,...s,codecTag:o,options:i},"videoCtx.open2"),d=n.addStream(c,o);return new r(c,I(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return ie(this._ctx,this._pkt,this._stream,e)}};var Ne=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:n,bitrate:s,muxer:a}=e,c=n.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let d=await Y({codec:c,width:t,height:o,fps:i,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p;try{let u=a.addStream(d,"hvc1");return p=I(),new r(d,p,u)}catch(u){throw p?.free(),d.freeContext(),u}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return ie(this._ctx,this._pkt,this._stream,e)}};var De="[Encoder]";async function kr(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:s=false,sharedHw:a}=r,c=a??(s?void 0:api.HardwareContext.auto()??void 0),d=!a&&!!c;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return f.debug(De,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ne.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c,ownsHw:d};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return f.debug(De,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Le.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c,ownsHw:d}}catch(u){f.warn(De,"Hardware codec session limits reached, use software encoder",u),d&&c?.dispose();}return f.debug(De,"using software libx265 HEVC alpha encoder"),{video:await ce.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await D.create(t,o),ownsHw:false}}var Ve=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=v(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var i=o,n=true;}finally{E(t,i,n);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(this._opened){this._opened=false;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose]();}}}};var Ni="libvpx-vp9",xe=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new Ve(e.outFile),o=e.kind==="mp4"?await r.mp4Video(e,t):await r.webmVideo(e,t),i=e.withAudio?await r.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:i,opts:e})}static mp4Video(e,t){let{width:o,height:i,fps:n,disableHwCodec:s,sharedHw:a}=e;return kr({width:o,height:i,fps:n,disableHwCodec:s,sharedHw:a},t)}static async webmVideo(e,t){let{width:o,height:i,fps:n}=e;return {video:await ce.create({width:o,height:i,fps:n,codecName:Ni,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await D.create(o,i),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Re.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:i}=this._s;await o?.flush(i),e?await e.flush(i):await t.flush(i);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:i,codec:n,hw:s,ownsHw:a}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),i?.[Symbol.dispose](),n?.[Symbol.dispose](),await e[Symbol.asyncDispose](),a&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:i}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,i);}};var de=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:i,outFile:n,withAudio:s=false,disableHwCodec:a=false}=e,c=n.split(",").map(l=>l.trim()).filter(Boolean);if(c.length===0)throw new Error("outFile must contain at least one path");let d=c.map(l=>xe.kindFromPath(l)),u=!a&&d.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,w=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,h=[];for(let l=0;l<c.length;l++){let g=await xe.create({outFile:c[l],kind:d[l],width:t,height:o,fps:i,withAudio:s,disableHwCodec:a,sharedHw:d[l]==="mp4"&&w?u:void 0});h.push(g);}return new r({sinks:h,sharedHw:u,limiter:new oe(1),outFiles:c,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=v(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(a=>a.encodeBGRA(t)));}catch(i){var n=i,s=true;}finally{E(o,n,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await D.create(t,o);let i=await this._s.pngCodec.decodePNG(e);for(let n of this._s.sinks)await n.encodeDecodedFrame(i);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=X(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var He=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let c of this._bursts){e+=c,o=Math.max(o,c);let d=Math.max(0,c-1);t+=(d/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,s=Math.min(1,t),a=1-(1-n)*(1-s);return {global:n,local:s,jank:a,expected:i,actual:this._actual,maxBurst:o}}};function Ue(r,e){return r.width===e.width&&r.height===e.height}var Ir="audio-meta",Rr="audio-chunk";function Br({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let i=async(s,a)=>{let c=a.sampleRate,d=t();e.setupAudio(c);let p=Math.ceil(d*c/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},n=async(s,a)=>{try{await e.encodeAudio(a);}catch(c){o(c);}};return r.ipc.on(Ir,i),r.ipc.on(Rr,n),()=>{r.ipc.removeListener(Ir,i),r.ipc.removeListener(Rr,n);}}function Mr({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let i=new Error(`timeout over ${t}ms`);return async(...n)=>{let s=0;for(;;){o?.throwIfAborted();try{let a=[r(...n)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw i})),await Promise.race(a)}catch(a){if(o?.throwIfAborted(),s++,s>=e)throw a;await Fe(2**s*100+Math.random()*100);}}}}var _t=["file:","http:","https:","data:"],Gi=/^(file:|https?:|data:)/;function Or(r){if(Gi.test(r))return;let e=`${r.split(":")[0]}:`,t=_t.includes(e)?`unsupported protocol: ${e}, expected ${_t.join(", ")}`:`invalid source format, expected ${_t.join(", ")}`;throw new Error(t)}var We=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var $e="[Network]",ji=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),qi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function Yi(r){for(let e of qi)if(r.startsWith(e))return true;return false}function bt(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=ji.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Lr({source:r,window:e,useInnerProxy:t,cancelMedia:o}){let i=e.webContents.session.webRequest,n=new oe(256),s=new Map;async function a(d,p){let u=new We;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function c(d){s.get(d)?.signal();}i.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"){p({cancel:true});return}let w=t?bt(u):u;n.schedule(()=>{let h=`${e.id}_${d.id}`;return f.debug($e,"start:",{key:h,url:u,proxied:w,method:d.method,source:r,stats:n.stats}),p(w===u?{cancel:false}:{cancel:false,redirectURL:w}),Yi(u)?Promise.resolve():a(h,()=>{f.warn($e,"maybe timeout:",{key:h,url:u,proxied:w,method:d.method,source:r});})});}),i.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),i.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),f.debug($e,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),i.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;c(p),!(o&&d.resourceType==="media"&&d.error==="net::ERR_BLOCKED_BY_CLIENT")&&f.error($e,"error:",{key:p,url:d.url,method:d.method,error:d.error,resourceType:d.resourceType,source:r});});}function xt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Q="[Window]",Nr=new Error("window timeout");function Ki({source:r,win:e,action:t,timeoutMs:o,tolerant:i,signal:n}){return new Promise((s,a)=>{let c=false,d=setTimeout(()=>p(i&&c?void 0:Nr),o),p=u=>{clearTimeout(d),u?a(u):s();};n?.throwIfAborted(),n?.addEventListener("abort",()=>p(n.reason),{once:true}),e.webContents.once("dom-ready",()=>{f.debug(Q,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{f.debug(Q,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,w,h,l)=>{let g=`did-fail-load: ${JSON.stringify({url:l,source:r,code:w,desc:h})}`;f.error(Q,g),p(new Error(g));}),e.webContents.once("render-process-gone",(u,{exitCode:w,reason:h})=>{let l=`render-process-gone: ${JSON.stringify({source:r,exitCode:w,reason:h})}`;f.error(Q,l),p(new Error(l));}),t();})}function ue(r){return new Promise(e=>{xt(r);let t=setTimeout(()=>{try{f.warn(Q,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function Qi(r){if(r.deterministic)return Vt;if(r.withAudio)return Dt}async function Dr({source:r,renderer:e,tolerant:t,signal:o,onCreated:i}){let{width:n,height:s,useInnerProxy:a}=e,c=a?bt(r):r,d=new electron.BrowserWindow({width:n,height:s+1,minWidth:n,minHeight:s+1,maxWidth:n,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Qi(e)}});Lr({source:r,window:d,useInnerProxy:a,cancelMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await i?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:w,sourceId:h})=>{let l=[Q,"console:",{message:u,lineNumber:w,sourceId:h,source:r}];p==="error"?f.error(...l):f.debug(...l),!(p==="warning"&&u.startsWith("%cElectron Security Warning"))&&e.onConsole(p,u);});try{let p=ar(c,{width:n,height:s});await Ki({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await ue(d),p}return d}var Ji=Mr({fn:Dr,maxAttempts:2});async function Ge({source:r,renderer:e,onCreated:t,signal:o}){Or(r),o?.throwIfAborted();let i,n;try{i=await Ji({source:r,renderer:e,signal:o});}catch(a){n=a;}let s=()=>Dr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&n===Nr)return f.warn(Q,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(n){let{message:a,stack:c}=n;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}i&&(i.webContents.removeAllListeners(),xt(i),await Fe(2e3),await ue(i));try{return await s()}catch(a){let{message:c,stack:d}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:d})}`)}}var Zi="[Render]";async function Vr(r){var Z=[];try{let{source:e,fps:t,width:o,height:i,duration:n,withAudio:s,outFile:a,disableHwCodec:c,signal:d,onProgress:p}=r;let u=v(Z,await de.create({width:o,height:i,fps:t,outFile:a,withAudio:s,disableHwCodec:c}),!0);let w=Math.ceil(t*n);let h=1e3/t;let l={width:o,height:i+1};let g=0;let x;let P=0;let _;let y;let b;let F;let A=new He(t);let k;let S=L=>{g++,u.encodeBGRA(L).catch(ee=>_??=ee);};let ye=(L,ee,fe)=>{if(_??=d?.reason,_){b?.(_);return}let G=fe.getSize();if(!Ue(G,l)){Te(me,l);return}let Xe=fe.toBitmap(),he=Ie(Xe,G);if(he===void 0){_??=new Error(`no timestamp @ ${g}`);return}if(x!==void 0&&he-x<h*.8)return;let Ke=Buffer.from(Xe.buffer,Xe.byteOffset,i*o*4);if(x===void 0)S(Ke),A.wrote();else {let St=he-x;if(St<=h*1.2)S(Ke),A.wrote();else {let Ct=Math.round(St/h);A.dropped(Ct-1),A.wrote();for(let Ft=0;Ft<Ct&&g<w;Ft++)S(Ke);}}x=he;let Et=Math.floor(g/w*100);Et!==P&&(P=Et,p(P));let Qr=n*1e3;(he>=Qr-h*.5||g>=w)&&y?.();};let R=await Ge({source:e,renderer:r,signal:d,onCreated:L=>{s&&(k=Br({wc:L.webContents,encoder:u,getVideoTimeMs:()=>x??0,onError:ee=>_??=ee}));}});let me=R.webContents.debugger;try{R.webContents.stopPainting(),R.webContents.setFrameRate(t),R.webContents.on("paint",ye),R.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>b?.(d.reason),{once:!0}),await rr(me),await new Promise((L,ee)=>{[y,b]=[L,ee];let fe=0,G=0;F=setInterval(()=>{if(g!==fe){fe=g,G=0;return}if(G>=3){b?.(new Error("drawable timeout"));return}f.warn(Zi,`${e} render is extremely slow, written=${g} stuck=${G}`),G++,R.webContents.invalidate();},1e3);});}finally{clearInterval(F),R.webContents.off("paint",ye),await ue(R),k?.(),await u.finish();}if(_||g===0)throw _??new Error("no frames captured");else {let L=A.finalize();return {written:g,jank:L.jank,outFile:a}}}catch(le){var Ye=le,Pe=true;}finally{var Ee=E(Z,Ye,Pe);Ee&&await Ee;}}var en="[Rerender]",Hr=3;async function Ur(r,e){let t;for(let o=0;o<Hr;o++)try{return await e()}catch(i){if(r.aborted)throw i;t=i,f.warn(en,`retry ${o+1}/${Hr}: ${i.message}`);}throw t}var tn="[Video]";async function Wr({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await at(r.executeJavaScript("window.__pup_video__&&window.__pup_video__.ready()"),t),await at(r.executeJavaScript(`window.__pup_video__&&window.__pup_video__.advance(${e})`),t);}catch(o){t?.throwIfAborted(),f.warn(tn,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var $r="__pup_tick__";async function Gr(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${$r}&&window.${$r}.process(${t})`,i=e.executeJavaScript(o);await Promise.all([q(i,5e3,"tick.executeJavaScript"),Wr(r)]);}var on="8000000";function ze(r,e){let t={signal:e,options:{rw_timeout:on}};return api.Demuxer.open(r,t)}async function*zr(r,e,t){var y=[];try{let o=v(y,await ze(r,t),!0);let i=o.streams?.find(S=>S.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!i)throw new Error("no video stream");let n=v(y,await api.Decoder.create(i,{signal:t}));let{frameWidth:s,frameHeight:a,width:c,height:d,fps:p}=e;let u=s!==c||a!==d?`scale=${s}:${a},`:"";let w=v(y,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let h=0;for await(var l of w.frames(n.frames(o.packets(i.index)))){var g=[];try{let S=v(g,l);S&&(yield {idx:++h,buf:cn(S)});}catch(x){var P=x,_=!0;}finally{E(g,P,_);}}}catch(b){var F=b,A=true;}finally{var k=E(y,F,A);k&&await k;}}function cn(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let i=Buffer.allocUnsafe(e*r.height);for(let n=0;n<r.height;n++)o.copy(i,n*e,n*t,n*t+e);return i}var dn="[DecodeSession]",un=4,pn=16,mn=256*1024*1024,ln=3,je=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(pn,Math.floor(mn/(e.frameWidth*e.frameHeight*4))),this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear();}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(i){!this._closed&&this._gen===t&&(o=true,f.warn(dn,`[${this.meta.id.slice(0,8)}] decode pass failed: ${i instanceof Error?i.message:String(i)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=ln||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){for await(let{idx:t,buf:o}of zr(this._src,this.meta,this._ctrl.signal)){if(this._closed||this._gen!==e)return;let i=this._leadFrames+t;for(;!this._closed&&this._gen===e&&i>this._want+un;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,o),this._ready=i,this.evict(),this.drainWaiters();}}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};var wn=5e3;async function jr(r){var _=[];try{let e=AbortSignal.timeout(wn);let t=v(_,await ze(r,e),!0);let o=t.streams?.find(k=>k.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!o)throw new Error("probe: no video stream");let i=t.duration>0?t.duration:0;let n=o.timeBase.num/o.timeBase.den;let s=v(_,await api.Decoder.create(o,{threadCount:1,signal:e}));let a=0;e:for await(var h of t.packets(o.index)){var l=[];try{let k=v(l,h);try{for await(var c of s.frames(k)){var d=[];try{let S=v(d,c);if(S?.decodeErrorFlags===0){a=Math.max(0,Number(S.pts)*n);break e}}catch(p){var u=p,w=!0;}finally{E(d,u,w);}}}catch{}}catch(g){var x=g,P=!0;}finally{E(l,x,P);}}return {width:o.codecpar.width,height:o.codecpar.height,duration:i,leadGap:a}}catch(y){var b=y,F=true;}finally{var A=E(_,b,F);A&&await A;}}var vt=class{_sessions=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=_n(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let i=await jr(e.src);if(this._closed)throw new Error("frame-server: closed");let n=i.width,s=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let c=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));n=qr(i.width*c),s=qr(i.height*c);}let a={id:t,width:i.width,height:i.height,frameWidth:n,frameHeight:s,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new je(a,e.src),refs:1}),a}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(t.session.close(),this._sessions.delete(e)));}closeAll(){this._closed=true;for(let[,e]of this._sessions)e.session.close();this._sessions.clear();}};function _n(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function qr(r){let e=Math.round(r);return Math.max(2,e-e%2)}var pe=new vt;var yt="[Shoot]";async function bn({source:r,win:e,size:t,ms:o}){let i,n=0,s,a=e.webContents.debugger,c={width:t.width,height:t.height+1};try{return await new Promise((d,p)=>{s=setInterval(()=>{if(n>=3){p(new Error("drawable timeout"));return}n++,f.warn(yt,`${r} render is extremely slow @ ${o}, current: ${i} with ${n} repeats`),e.webContents.invalidate();},1e3);let u=(w,h,l)=>{let g=l.getSize();if(!Ue(g,c)){Te(a,c);return}let x=l.toBitmap(),P=Ie(x,g);if(P===void 0||Math.abs(P-o)>1){i=P;return}e.webContents.off("paint",u),d(Buffer.from(x.buffer,x.byteOffset,t.height*t.width*4)),e.webContents.stopPainting(),e.webContents.setFrameRate(240);};e.webContents.on("paint",u),e.webContents.startPainting();})}finally{clearInterval(s);}}async function Yr(r){var k=[];try{let{source:e,fps:t,width:o,height:i,duration:n,withAudio:s,outFile:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&f.warn(yt,"audio will be ignored on this mode");let u=performance.now();let w=Ge({source:e,renderer:r,signal:d});let h=v(k,await de.create({width:o,height:i,fps:t,outFile:a,withAudio:s,disableHwCodec:c}),!0);let l=await w;f.debug(yt,"init done:",{source:e,cost:performance.now()-u});let g=Math.ceil(t*n);let x=1e3/t;let P=0;let _=0;let y;let b=l.webContents.debugger;let F=l.webContents.mainFrame;let A=F.frames[0];try{l.webContents.setFrameRate(t),l.webContents.stopPainting(),await Zt(b);for(let Z=0;Z<g;Z++){d?.throwIfAborted();let le=(Z+1)*x;await Gr({frame:A,timestampMs:le,signal:d}),await or(l.webContents,le,x);let Ye=await bn({source:e,win:l,size:{width:o,height:i},ms:le});if(h.encodeBGRA(Ye).catch(Ee=>y??=Ee),P++,y)throw y;let Pe=Math.floor(P/g*100);Pe!==_&&(_=Pe,p(_));}}finally{pe.closeAll(),await ue(l),await h.finish();}if(y)throw y;if(P===0)throw new Error("no frames captured");else return {written:P,jank:0,outFile:a}}catch(S){var ye=S,R=true;}finally{var me=E(k,ye,R);me&&await me;}}var vn="[FrameProtocol]",yn="pup-frame",J={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function Xr(){electron.protocol.handle(yn,async r=>{if(r.method==="OPTIONS")return new Response(null,{status:204,headers:J});let e=new URL(r.url);f.debug(vn,`${r.method} ${e.hostname}${e.search}`);try{switch(e.hostname){case "open":return Pn(await pe.open({src:e.searchParams.get("src")??"",fps:qe(e,"fps",30),dstW:qe(e,"w",0),dstH:qe(e,"h",0),fit:e.searchParams.get("fit")??void 0}));case "frame":return En(await pe.getFrame(e.searchParams.get("id")??"",qe(e,"idx",1)));case "close":return pe.close(e.searchParams.get("id")??""),new Response(null,{status:204,headers:J});default:return new Response(`unknown action: ${e.hostname}`,{status:404,headers:J})}}catch(t){let o=t instanceof Error?t.message:String(t);return new Response(o,{status:500,headers:J})}});}function Pn(r){return new Response(JSON.stringify(r),{headers:{...J,"content-type":"application/json"}})}function En(r){if(r.byteLength===0)return new Response(null,{status:410,headers:J});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"application/octet-stream","cache-control":"no-store"}})}function qe(r,e,t){let o=r.searchParams.get(e),i=o?parseInt(o,10):NaN;return Number.isFinite(i)?i:t}var kn="[App]";function Kr(){f.debug(kn,"gpu features:",electron.app.getGPUFeatureStatus());}var ve=new AbortController,Pt=false;jt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Kr);electron.app.on("before-quit",r=>!Pt&&r.preventDefault());electron.app.on("will-quit",r=>!Pt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>ve.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&ve.abort(e.reason);});Qt({name:"app",run:async(r,e)=>{let t=new Ce;try{await electron.app.whenReady(),sr(),Xr(),Kr();for(let n of e.outFile.split(","))await promises.mkdir(path.dirname(n),{recursive:!0});let o=e.deterministic?Yr:Vr;ve.signal.throwIfAborted();let i=await Ur(ve.signal,()=>o({source:r,...e,signal:ve.signal,onProgress:n=>t.writeProgress(n),onConsole:(n,s)=>t.writeConsole(n,s)}));await t.writeDone(i);}catch(o){let i=o,n=i.stack??i.message??String(o??"unknown error");await t.writeError(n);}finally{Pt=true,electron.app.exit();}}});
121
121
  //# sourceMappingURL=app.cjs.map
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNTBiNzk5NjAzMDk2YTFmNy9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZV9zZXNzaW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3Byb2JlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3NyY19jYWNoZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9jZHAudHMiLCIuLi9zcmMvcmVuZGVyZXIvc3RlZ28udHMiLCIuLi9zcmMvcmVuZGVyZXIvcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwicHVwSWZyYW1lUHJlbG9hZCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwiVEFHIiwic3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIiLCJkdW1wRGlyIiwiYXBwIiwibWtkaXJTeW5jIiwiY3Jhc2hSZXBvcnRlciIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJSZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJub3JtYWxpemVTb3VyY2UiLCJzIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwiV0FJVF9USU1FT1VUX01TIiwiREVDT0RFX0FIRUFEIiwiS0VFUF9CRUhJTkQiLCJEZWNvZGVTZXNzaW9uIiwibWV0YSIsInNyYyIsImlkeCIsImhpdCIsInciLCJlbnRyeSIsInIiLCJnZW4iLCJfc3RhY2siLCJpbnB1dCIsIl9fdXNpbmciLCJEZW11eGVyIiwic3RyZWFtIiwiQVZNRURJQV9UWVBFX1ZJREVPIiwiZGVjIiwiRGVjb2RlciIsImZyYW1lV2lkdGgiLCJmcmFtZUhlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwiZnBzIiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJmcmFtZSIsInBhY2tSZ2JhIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJfcHJvbWlzZSIsImZsb29yIiwiayIsInJvdyIsInN0cmlkZSIsIm91dCIsInkiLCJQUk9CRV9USU1FT1VUX01TIiwicHJvYmUiLCJkdXJhdGlvbiIsIkNBQ0hFX0RJUiIsInRtcGRpciIsIlNyY0NhY2hlIiwicCIsInJtIiwibWtkaXIiLCJkc3QiLCJjcmVhdGVIYXNoIiwicGlja0V4dCIsImV4aXN0c1N5bmMiLCJ0MCIsInJlcyIsIndyaXRlRmlsZSIsInVybCIsIm0iLCJGcmFtZVNlcnZlciIsImlkIiwia2V5IiwibG9jYWxQYXRoIiwiZXZlbiIsIm4iLCJmcmFtZVNlcnZlciIsIlNDSEVNRSIsIkNPUlNfSEVBREVSUyIsInNldHVwRnJhbWVQcm90b2NvbCIsInByb3RvY29sIiwicmVxIiwianNvbk9rIiwiaW50IiwicmdiYU9rIiwiYnl0ZXMiLCJjb3B5IiwiZmFsbGJhY2siLCJ2Iiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwibGFiZWwiLCJ0aW1lciIsIkNEUF9USU1FT1VUX01TIiwic2VuZCIsImNkcCIsIm1ldGhvZCIsInBhcmFtcyIsImV2YWxJbiIsImV4cHJlc3Npb24iLCJhZHZhbmNlVmlydHVhbFRpbWUiLCJidWRnZXQiLCJ0aW1lb3V0IiwiaGFuZGxlciIsInBhdXNlVmlydHVhbFRpbWUiLCJyZXNpemVEcmF3YWJsZSIsInNpemUiLCJGUkFNRV9TWU5DX01BUktFUl9XSURUSCIsIlNURUdPX1RJQ0tfQ0hBTk5FTCIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwic3dhcEJ1ZmZlciIsIndjIiwiZXhwZWN0ZWQiLCJpbnRlcnZhbCIsInN3YXBwZWQiLCJQVVBfU0NIRU1FIiwiRlJBTUVfU0NIRU1FIiwiUFJJVklMRUdFRF9QUklWSUxFR0VTIiwic2V0dXBQdXBQcm90b2NvbCIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5Iiwia2VlcCIsIm9wZW5WaWRlb0N0eCIsImN0eCIsIkNvZGVjQ29udGV4dCIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiRkZtcGVnRXJyb3IiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJGcmFtZSIsIm1ha2VQYWNrZXQiLCJwa3QiLCJQYWNrZXQiLCJkcmFpblBhY2tldHMiLCJtdXhlciIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJjb2RlYyIsIkNvZGVjIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIkFWX1BJWF9GTVRfWVVWQTQyMFAiLCJwbmdEYXRhIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJmbXQiLCJTV1NfQklMSU5FQVIiLCJTQU1QTEVfRk1UX05BTUUiLCJBVl9TQU1QTEVfRk1UX0ZMVCIsIkFWX1NBTVBMRV9GTVRfRkxUUCIsIkF1ZGlvRW5jb2RlciIsIl9BdWRpb0VuY29kZXIiLCJvdXRGbXQiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJ6ZXJvcyIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsIk5BTF9CTEFfV19MUCIsIk5BTF9SU1ZfSVJBUF9WQ0wyMyIsIk5BTF9WUFMiLCJOQUxfU1BTIiwiTkFMX1BQUyIsIk5BTF9TRUlfUFJFRklYIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiVlBTX1BUTF9CSVQiLCJTUFNfUFRMX0JJVCIsIlBUTF9USUVSX0JJVCIsIlBUTF9DT01QQVQyX0JJVCIsIlNMSUNFX1RZUEVfQiIsIlNMSUNFX1RZUEVfUCIsInNldEJpdCIsImJpdE9mZnNldCIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwicm93QmFzZSIsImRzdEJhc2UiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYWxwaGFTd0ZyYW1lIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJEaWN0aW9uYXJ5IiwiRkZfRU5DT0RFUl9MSUJWUFhfVlA5IiwiT3V0cHV0U2luayIsIl9PdXRwdXRTaW5rIiwicGF0aCIsImxvd2VyIiwidmlkZW8iLCJhdWRpbyIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsIm91dEZpbGVzIiwia2luZHMiLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwiZyIsImwiLCJzY29yZSIsInNpemVFcXVhbHMiLCJhIiwiQVVESU9fTUVUQV9DSEFOTkVMIiwiQVVESU9fQ0hVTktfQ0hBTk5FTCIsImF0dGFjaEF1ZGlvTGlzdGVuZXJzIiwiZW5jb2RlciIsImdldFZpZGVvVGltZU1zIiwib25FcnJvciIsIm9uTWV0YSIsIl9lIiwic3RhcnRNcyIsInNpbGVuY2VTYW1wbGVzIiwib25DaHVuayIsImJ1ZmZlciIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwiV2FpdGFibGVFdmVudCIsIm1hcCIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsImNhbmNlbE1lZGlhIiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0b2xlcmFudCIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJkaXNwb3NlV2luZG93IiwicGlja1ByZWxvYWQiLCJyZW5kZXJlciIsIm9wZW5XaW5kb3ciLCJvbkNyZWF0ZWQiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsIm9wZW5XaW5kb3dXaXRoUmV0cnkiLCJsb2FkV2luZG93Iiwid2FybXVwIiwib3BlbiIsInN0YWNrIiwicmVuZGVyIiwib25Qcm9ncmVzcyIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImVuY29kZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJkcm9wU2NvcmUiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsIkFEVkFOQ0VfVElNRU9VVF9NUyIsImFkdmFuY2VWaWRlb3MiLCJ0aW1lc3RhbXBNcyIsImV4cHIiLCJldiIsIlRJQ0tfU1lNQk9MIiwidGljayIsInRpY2tFdiIsImxhc3RUcyIsImxhZ2d5IiwiX2QiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJtYWluIiwiaWZyYW1lIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXci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QSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUsrQixDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksT0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNUQvQixDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRXROLEVBQU8sRUFBRSxDQUFBLENBQ2RzTixDQUFBQSxDQUFHLENBQUEsQ0FBRXJOLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZxTixDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMs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QUFJckgsQ0FBQUEsQ0FBTSxLQUFBLEVBQVNBLEVBQU0sT0FBQSxFQUFXLE1BQUEsQ0FBT3VELENBQUFBLEVBQUssZUFBZSxDQUFBLENBQ3JFLE1BQU1zZ0IsQ0FBQUEsQ0FBSSxVQUFBLENBQVd4YyxDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBcWMsRUFBQUEsQ0FBVSxLQUNWbGlCLFlBQUFBLENBQUksSUFBQSxHQUNOLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHg7XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwQXVkaW9QcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhdWRpb19wcmVsb2FkLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBJZnJhbWVQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJpZnJhbWVfcHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltDcmFzaF1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCkge1xuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcInVzZXJEYXRhXCIpLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSByZXR1cm47XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIGVsc2UgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0L2h0bWwubXA0LG91dC9odG1sLndlYm1cIjtcblxuZXhwb3J0IGNvbnN0IFJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29tbWEtc2VwYXJhdGVkIG91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCBSZW5kZXJTY2hlbWEsIHR5cGUgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHJldHVybiBzO1xuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENPTlNPTEUgPSBcImNvbnNvbGVcIixcbiAgUFJPR1JFU1MgPSBcInByb2dyZXNzXCIsXG4gIERPTkUgPSBcImRvbmVcIixcbiAgRVJST1IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ0FOQ0VMID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DT05TT0xFO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DQU5DRUw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLlBST0dSRVNTO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbmVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkRPTkU7XG4gIHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5FUlJPUjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSXBjTXNnID0gQ29uc29sZU1zZyB8IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnIHwgQ2FuY2VsTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIGNvbnNvbGU6IFtsZXZlbDogc3RyaW5nLCBtc2c6IHN0cmluZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlQ29uc29sZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkNPTlNPTEUsIGxldmVsLCBtZXNzYWdlIH0pO1xuICB9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FUlJPUiwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5ET05FLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogSXBjTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5DT05TT0xFOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUFJPR1JFU1M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVSUk9SOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBEZWNvZGVyLCBEZW11eGVyLCBGaWx0ZXJBUEkgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRGVjb2RlU2Vzc2lvbl1cIjtcbmNvbnN0IFdBSVRfVElNRU9VVF9NUyA9IDVfMDAwO1xuY29uc3QgREVDT0RFX0FIRUFEID0gNDsgLy8gZGVjb2RlIGEgZmV3IGZyYW1lcyBwYXN0IHRoZSBoaWdoZXN0IHJlcXVlc3Q7IHRoZSBwYWdlIGFscmVhZHkgcHJlZmV0Y2hlc1xuY29uc3QgS0VFUF9CRUhJTkQgPSAxNjsgLy8gbXVzdCBleGNlZWQgdGhlIHBhZ2UncyBwcmVmZXRjaCBsZWFkIChBSEVBRD0xMCkgb3IgdGhlIHBhaW50ZWQgZnJhbWUgZ2V0cyBldmljdGVkIOKGkiByZXN0YXJ0IHRocmFzaFxuXG5pbnRlcmZhY2UgV2FpdGVyIHtcbiAgcmVzb2x2ZTogKGI6IEJ1ZmZlcikgPT4gdm9pZDtcbiAgdGltZXI6IE5vZGVKUy5UaW1lb3V0O1xufVxuXG4vLyBJbi1wcm9jZXNzIGRlY29kZTogRGVtdXhlciDihpIgRGVjb2RlciDihpIgYGZwcz1OLHNjYWxlLGZvcm1hdD1yZ2JhYCBmaWx0ZXIsIHNlcnZpbmcgdGhlIE50aCBmaWx0ZXJlZCBmcmFtZVxuLy8gYXMgdGlnaHQgUkdCQSBieSBpbmRleC4gRGVtYW5kLWRyaXZlbiAoZGVjb2RlcyBhaGVhZCBvZiB0aGUgaGlnaGVzdCByZXF1ZXN0LCB0aGVuIHBhdXNlcykgc28gb25seSBhXG4vLyB+MjAtZnJhbWUgd2luZG93IHN0YXlzIHJlc2lkZW50LiBBIHJlcXVlc3QgZm9yIGFuIGFscmVhZHktcGFzc2VkIGZyYW1lIChsb29wL2JhY2t3YXJkIHNlZWspIHJlc3RhcnRzIHRoZVxuLy8gcGFzcyBmcm9tIGZyYW1lIDEg4oCUIHRoZSBkZWNvZGVyIGlzIGZvcndhcmQtb25seSwgc28gcmV3aW5kID0gcmUtZGVjb2RlLlxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIGJ1ZiA9IG5ldyBNYXA8bnVtYmVyLCBCdWZmZXI+KCk7XG4gIHByaXZhdGUgcmVhZHkgPSAwO1xuICBwcml2YXRlIHdhbnQgPSAxO1xuICBwcml2YXRlIGRvbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBnZW4gPSAwO1xuICBwcml2YXRlIGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgd2FpdGVycyA9IG5ldyBTZXQ8eyBpZHg6IG51bWJlcjsgdzogV2FpdGVyIH0+KCk7XG4gIHByaXZhdGUgcmVzdW1lOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1ldGE6IFZpZGVvTWV0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNyYzogc3RyaW5nLFxuICApIHtcbiAgICB2b2lkIHRoaXMucHVtcCgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RnJhbWUoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmIChpZHggPCAxKSBpZHggPSAxO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHJldHVybiBoaXQ7XG4gICAgaWYgKHRoaXMuZG9uZSAmJiBpZHggPiB0aGlzLnJlYWR5KSByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIGlmIChpZHggPiB0aGlzLnJlYWR5KSB7XG4gICAgICAvLyBmb3J3YXJkLCBub3QgeWV0IGRlY29kZWQgaW4gdGhpcyBwYXNzXG4gICAgICBpZiAoaWR4ID4gdGhpcy53YW50KSB0aGlzLndhbnQgPSBpZHg7XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWxyZWFkeSBwYXNzZWQgYnV0IGV2aWN0ZWQgKGxvb3AgLyBiYWNrd2FyZCBzZWVrKSDihpIgcmUtZGVjb2RlIGZyb20gdGhlIHN0YXJ0LCB0YXJnZXRpbmcgaWR4XG4gICAgICB0aGlzLndhbnQgPSBpZHg7XG4gICAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhaXQoaWR4KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuY3RybC5hYm9ydCgpO1xuICAgIHRoaXMud2FrZSgpO1xuICAgIHRoaXMucmVxdWVzdFJlc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IHsgdyB9IG9mIHRoaXMud2FpdGVycykge1xuICAgICAgY2xlYXJUaW1lb3V0KHcudGltZXIpO1xuICAgICAgdy5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHRoaXMud2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuYnVmLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCB3OiBXYWl0ZXIgPSB7XG4gICAgICAgIHJlc29sdmUsXG4gICAgICAgIHRpbWVyOiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLndhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgICAgIH0sIFdBSVRfVElNRU9VVF9NUyksXG4gICAgICB9O1xuICAgICAgY29uc3QgZW50cnkgPSB7IGlkeCwgdyB9O1xuICAgICAgdGhpcy53YWl0ZXJzLmFkZChlbnRyeSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMucmVzdW1lO1xuICAgIHRoaXMucmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICB9XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgcnVubmluZyBwYXNzIChvciB3YWtlIGEgcGFya2VkIG9uZSkgc28gcHVtcCgpIHN0YXJ0cyBhIGZyZXNoIGRlY29kZSBmcm9tIGZyYW1lIDEuXG4gIHByaXZhdGUgcmVxdWVzdFJlc3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5yZXN0YXJ0O1xuICAgIHRoaXMucmVzdGFydCA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgICB0aGlzLndha2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVtcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzLmdlbjtcbiAgICAgIHRoaXMucmVhZHkgPSAwO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmJ1Zi5jbGVhcigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQgJiYgdGhpcy5nZW4gPT09IGdlbilcbiAgICAgICAgICBsb2dnZXIud2FybihUQUcsIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgZW5kZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKSBicmVhaztcbiAgICAgIGlmICh0aGlzLmdlbiAhPT0gZ2VuKSBjb250aW51ZTsgLy8gcmVzdGFydCByZXF1ZXN0ZWQgbWlkLXBhc3NcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgYXdhaXQgdGhpcy51bnRpbFJlc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlY29kZVBhc3MoZ2VuOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzaWduYWwgPSB0aGlzLmN0cmwuc2lnbmFsO1xuICAgIGF3YWl0IHVzaW5nIGlucHV0ID0gYXdhaXQgRGVtdXhlci5vcGVuKHRoaXMuc3JjLCB7IHNpZ25hbCB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBpbnB1dC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgICBpZiAoIXN0cmVhbSkgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICAgIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gICAgY29uc3QgeyBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSB0aGlzLm1ldGE7XG4gICAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gICAgdXNpbmcgZmlsdGVyID0gRmlsdGVyQVBJLmNyZWF0ZShgZnBzPSR7ZnBzfSwke3NjYWxlfWZvcm1hdD1yZ2JhYCwgeyBzaWduYWwgfSk7XG4gICAgbGV0IGlkeCA9IDA7XG4gICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBmaWx0ZXIuZnJhbWVzKGRlYy5mcmFtZXMoaW5wdXQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSkpIHtcbiAgICAgIGlmICh0aGlzLmNsb3NlZCB8fCB0aGlzLmdlbiAhPT0gZ2VuKSByZXR1cm47XG4gICAgICBpZiAoIWZyYW1lKSBjb250aW51ZTtcbiAgICAgIGlkeCsrO1xuICAgICAgd2hpbGUgKCF0aGlzLmNsb3NlZCAmJiB0aGlzLmdlbiA9PT0gZ2VuICYmIGlkeCA+IHRoaXMud2FudCArIERFQ09ERV9BSEVBRCkgYXdhaXQgdGhpcy5wYXVzZSgpO1xuICAgICAgaWYgKHRoaXMuY2xvc2VkIHx8IHRoaXMuZ2VuICE9PSBnZW4pIHJldHVybjtcbiAgICAgIHRoaXMuYnVmLnNldChpZHgsIHBhY2tSZ2JhKGZyYW1lKSk7XG4gICAgICB0aGlzLnJlYWR5ID0gaWR4O1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gKHRoaXMucmVzdW1lID0gcikpO1xuICB9XG5cbiAgLy8gUGFyayB1bnRpbCBhIGxvb3AvYmFja3dhcmQgcmVxdWVzdCAob3IgY2xvc2UpIGNhbGxzIHJlcXVlc3RSZXN0YXJ0KCkuXG4gIHByaXZhdGUgdW50aWxSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gKHRoaXMucmVzdGFydCA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLndhbnQgLSBLRUVQX0JFSElORDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5idWYua2V5cygpKSBpZiAoayA8IGZsb29yKSB0aGlzLmJ1Zi5kZWxldGUoayk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluV2FpdGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi50aGlzLndhaXRlcnNdKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLmJ1Zi5nZXQoZW50cnkuaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgdGhpcy53YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGNsZWFyVGltZW91dChlbnRyeS53LnRpbWVyKTtcbiAgICAgICAgZW50cnkudy5yZXNvbHZlKGhpdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aGlzLndhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LncudGltZXIpO1xuICAgICAgICBlbnRyeS53LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBjb3B5IChkcm9wIGxpYmF2IHJvdyBwYWRkaW5nKSBzbyB0aGUgcGFnZSBjYW4gd3JhcCBpdCBzdHJhaWdodCBpbnRvIEltYWdlRGF0YS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IGZyYW1lLndpZHRoICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdykgcmV0dXJuIEJ1ZmZlci5mcm9tKHNyYy5zdWJhcnJheSgwLCByb3cgKiBmcmFtZS5oZWlnaHQpKTtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHJvdyAqIGZyYW1lLmhlaWdodCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgZnJhbWUuaGVpZ2h0OyB5KyspIHNyYy5jb3B5KG91dCwgeSAqIHJvdywgeSAqIHN0cmlkZSwgeSAqIHN0cmlkZSArIHJvdyk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZW11eGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuY29uc3QgUFJPQkVfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlUmVzdWx0IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dChQUk9CRV9USU1FT1VUX01TKTtcbiAgYXdhaXQgdXNpbmcgZCA9IGF3YWl0IERlbXV4ZXIub3BlbihzcmMsIHsgc2lnbmFsIH0pO1xuICBjb25zdCBzdHJlYW0gPSBkLnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkgdGhyb3cgbmV3IEVycm9yKGBwcm9iZTogbm8gdmlkZW8gc3RyZWFtIGluICR7c3JjfWApO1xuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24gfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMjIuXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBta2Rpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9TcmNDYWNoZV1cIjtcbmNvbnN0IENBQ0hFX0RJUiA9IGpvaW4odG1wZGlyKCksIFwicHVwLXZpZGVvLWNhY2hlXCIpO1xuXG5leHBvcnQgY2xhc3MgU3JjQ2FjaGUge1xuICBwcml2YXRlIGluRmxpZ2h0ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nPj4oKTtcbiAgcHJpdmF0ZSBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxvY2FsaXplKHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXNyYy5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSAmJiAhc3JjLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzcmMpO1xuICAgIGxldCBwID0gdGhpcy5pbkZsaWdodC5nZXQoc3JjKTtcbiAgICBpZiAoIXApIHtcbiAgICAgIHAgPSB0aGlzLmRvd25sb2FkKHNyYyk7XG4gICAgICB0aGlzLmluRmxpZ2h0LnNldChzcmMsIHApO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIGFib3J0cyBpbi1mbGlnaHQgZmV0Y2hlcyBzbyBjYWxsZXJzIHdhaXRpbmcgb24gY2xvc2VBbGwoKSBkb24ndCBoYW5nIG9uIGEgc2xvdyBDRE4uXG4gIGFib3J0KCk6IHZvaWQge1xuICAgIHRoaXMuY3RybC5hYm9ydCgpO1xuICAgIHRoaXMuaW5GbGlnaHQuY2xlYXIoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgICBhd2FpdCBybShDQUNIRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY2xlYW5lZCBjYWNoZSAke0NBQ0hFX0RJUn1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG93bmxvYWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IG1rZGlyKENBQ0hFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3QgZHN0ID0gam9pbihDQUNIRV9ESVIsIGAke2NyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShzcmMpLmRpZ2VzdChcImhleFwiKX0ke3BpY2tFeHQoc3JjKX1gKTtcbiAgICBpZiAoZXhpc3RzU3luYyhkc3QpKSByZXR1cm4gZHN0O1xuICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChzcmMsIHsgc2lnbmFsOiB0aGlzLmN0cmwuc2lnbmFsIH0pO1xuICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYHZpZGVvIHNyYyBkb3dubG9hZCBmYWlsZWQgJHtyZXMuc3RhdHVzfTogJHtzcmN9YCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGRzdCwgQnVmZmVyLmZyb20oYXdhaXQgcmVzLmFycmF5QnVmZmVyKCkpKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY2FjaGVkICR7c3JjfSAtPiAke2RzdH0gaW4gJHtEYXRlLm5vdygpIC0gdDB9bXNgKTtcbiAgICByZXR1cm4gZHN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpY2tFeHQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtID0gdXJsLm1hdGNoKC9cXC4obXA0fG1vdnx3ZWJtfG00dikoPzpcXD98JHwjKS9pKTtcbiAgcmV0dXJuIG0/LlsxXSA/IGAuJHttWzFdLnRvTG93ZXJDYXNlKCl9YCA6IFwiLm1wNFwiO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgcHJvYmUgfSBmcm9tIFwiLi9wcm9iZVwiO1xuaW1wb3J0IHsgU3JjQ2FjaGUgfSBmcm9tIFwiLi9zcmNfY2FjaGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3Blbk9wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIC8qKiBEaXNwbGF5LWJveCBwaXhlbHMgKGNhbnZhcyBiYWNraW5nIHN0b3JlKTsgZGVjb2RlIGlzIGRvd25zY2FsZWQgdG8gY292ZXIgdGhpcywgbmV2ZXIgdXBzY2FsZWQuICovXG4gIGRzdFc/OiBudW1iZXI7XG4gIGRzdEg/OiBudW1iZXI7XG4gIC8qKiBvYmplY3RGaXQ7IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzIHNvIGl0IHNraXBzIGRvd25zY2FsZS4gKi9cbiAgZml0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRW50cnkge1xuICBzZXNzaW9uOiBEZWNvZGVTZXNzaW9uO1xuICByZWZzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgRW50cnk+KCk7XG4gIHByaXZhdGUgc3JjcyA9IG5ldyBTcmNDYWNoZSgpO1xuICBwcml2YXRlIGluRmxpZ2h0T3BlbnMgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHByaXZhdGUgY2xvc2VkID0gZmFsc2U7XG5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgY29uc3QgcCA9IHRoaXMub3BlbklubmVyKG9wdHMpO1xuICAgIHRoaXMuaW5GbGlnaHRPcGVucy5hZGQocCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmluRmxpZ2h0T3BlbnMuZGVsZXRlKHApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNsb3NlZC1jaGVja2VkIGFmdGVyIGV2ZXJ5IGF3YWl0IHNvIGNsb3NlQWxsKCkgY2FuJ3QgcmFjZSBzcmNzLmNsZWFyKCkgYWdhaW5zdCBsb2NhbGl6ZS9wcm9iZS5cbiAgcHJpdmF0ZSBhc3luYyBvcGVuSW5uZXIob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgY29uc3QgaWQgPSBrZXkob3B0cyk7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgdGhpcy5zcmNzLmxvY2FsaXplKG9wdHMuc3JjKTtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBwcm9iZShsb2NhbFBhdGgpO1xuICAgIGlmICh0aGlzLmNsb3NlZCkgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgbGV0IGZyYW1lV2lkdGggPSBpbmZvLndpZHRoO1xuICAgIGxldCBmcmFtZUhlaWdodCA9IGluZm8uaGVpZ2h0O1xuICAgIC8vIERvd25zY2FsZSB0byBjb3ZlciB0aGUgZGlzcGxheSBib3ggKG5ldmVyIHVwc2NhbGUpOyBvYmplY3RGaXQgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMuXG4gICAgaWYgKG9wdHMuZHN0VyAmJiBvcHRzLmRzdEggJiYgb3B0cy5maXQgIT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5taW4oMSwgTWF0aC5tYXgob3B0cy5kc3RXIC8gaW5mby53aWR0aCwgb3B0cy5kc3RIIC8gaW5mby5oZWlnaHQpKTtcbiAgICAgIGZyYW1lV2lkdGggPSBldmVuKGluZm8ud2lkdGggKiBzKTtcbiAgICAgIGZyYW1lSGVpZ2h0ID0gZXZlbihpbmZvLmhlaWdodCAqIHMpO1xuICAgIH1cbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7XG4gICAgICBpZCxcbiAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgIGZyYW1lV2lkdGgsXG4gICAgICBmcmFtZUhlaWdodCxcbiAgICAgIGZwczogb3B0cy5mcHMsXG4gICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICB9O1xuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KGlkLCB7IHNlc3Npb246IG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIGxvY2FsUGF0aCksIHJlZnM6IDEgfSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICByZXR1cm4gZS5zZXNzaW9uLmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBjbG9zZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHJldHVybjtcbiAgICBpZiAoLS1lLnJlZnMgPiAwKSByZXR1cm47XG4gICAgZS5zZXNzaW9uLmNsb3NlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5kZWxldGUoaWQpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYWJvcnQgaW4tZmxpZ2h0IGZldGNoZXMgZmlyc3Qgc28gYWxsU2V0dGxlZCBkb2Vzbid0IGhhbmcgb24gYSBzbG93IENETi5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5zcmNzLmFib3J0KCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi50aGlzLmluRmxpZ2h0T3BlbnNdKTtcbiAgICBmb3IgKGNvbnN0IFssIGVdIG9mIHRoaXMuc2Vzc2lvbnMpIGUuc2Vzc2lvbi5jbG9zZSgpO1xuICAgIHRoaXMuc2Vzc2lvbnMuY2xlYXIoKTtcbiAgICBhd2FpdCB0aGlzLnNyY3MuY2xlYXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuXG5leHBvcnQgY29uc3QgZnJhbWVTZXJ2ZXIgPSBuZXcgRnJhbWVTZXJ2ZXIoKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBmcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBGcmFtZVByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3JlcS5tZXRob2R9ICR7dXJsLmhvc3RuYW1lfSR7dXJsLnNlYXJjaH1gKTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXR1cm4ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnJhbWVTZXJ2ZXIub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIHJldHVybiByZ2JhT2soYXdhaXQgZnJhbWVTZXJ2ZXIuZ2V0RnJhbWUodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiLCBpbnQodXJsLCBcImlkeFwiLCAxKSkpO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBmcmFtZVNlcnZlci5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7IHN0YXR1czogNDA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBqc29uT2sobWV0YTogVmlkZW9NZXRhKTogUmVzcG9uc2Uge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KG1ldGEpLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDEwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gU3RhcnZhdGlvbj0xIGZvcmNlcyBidWRnZXQgdG8gZXhwaXJlIGV2ZW4gaWYgYSBzbG93IGZldGNoIHRhc2sgaXMgcGVuZGluZzsgZGVmYXVsdCB1bmJvdW5kZWQgZGVhZGxvY2tzLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgICAgbWF4VmlydHVhbFRpbWVUYXNrU3RhcnZhdGlvbkNvdW50OiAxLFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNpemVEcmF3YWJsZShjZHA6IERlYnVnZ2VyLCBzaXplOiBTaXplKSB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgIC4uLnNpemUsXG4gICAgZGV2aWNlU2NhbGVGYWN0b3I6IDEsXG4gICAgbW9iaWxlOiBmYWxzZSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIERlYnVnZ2VyLCB0eXBlIFNpemUsIHR5cGUgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gICAgLyogSGVhcnRiZWF0OiBpbnZpc2libGUgYWx3YXlzLW9uIHRpY2suIEZvcmNlcyBDaHJvbWl1bSBjb21wb3NpdG9yIHRvIGlzc3VlIEJlZ2luRnJhbWUgZWFjaFxuICAgICAgIHZpcnR1YWwgdGljayBvbiBvdGhlcndpc2Utc3RhdGljIHBhZ2VzIHNvIGNhbnZhcyNzdGVnbyBwdXRJbWFnZURhdGEgdXBkYXRlcyBsYW5kIGluIHRoZVxuICAgICAgIGNhcHR1cmVkIHBhaW50IGV2ZW50LiBXaXRob3V0IHRoaXMsIGEgc3RhdGljIGlmcmFtZSArIHBhdXNlZCB2aXJ0dWFsIHRpbWUgbGVhdmVzIHRoZVxuICAgICAgIGNvbXBvc2l0b3IncyBsYXN0IGZyYW1lIGNhY2hlZCBldmVuIGFmdGVyIGNhbnZhcyBkaXJ0aWVzOyBpbnZhbGlkYXRlKCkgb25seSByZS1lbWl0cyB0aGVcbiAgICAgICBjYWNoZWQgZnJhbWUuICovXG4gICAgLyogSGVhcnRiZWF0OiBpbnZpc2libGUgYWx3YXlzLW9uIHRpY2suIEZvcmNlcyBDaHJvbWl1bSBjb21wb3NpdG9yIHRvIGlzc3VlIEJlZ2luRnJhbWUgZWFjaFxuICAgICAgIHZpcnR1YWwgdGljayBvbiBvdGhlcndpc2Utc3RhdGljIHBhZ2VzIHNvIGNhbnZhcyNzdGVnbyBwdXRJbWFnZURhdGEgdXBkYXRlcyBsYW5kIGluIHRoZVxuICAgICAgIGNhcHR1cmVkIHBhaW50IGV2ZW50LiBXaXRob3V0IHRoaXMsIGEgc3RhdGljIGlmcmFtZSArIHBhdXNlZCB2aXJ0dWFsIHRpbWUgbGVhdmVzIHRoZVxuICAgICAgIGNvbXBvc2l0b3IncyBsYXN0IGZyYW1lIGNhY2hlZCBldmVuIGFmdGVyIGNhbnZhcyBkaXJ0aWVzOyBpbnZhbGlkYXRlKCkgb25seSByZS1lbWl0cyB0aGVcbiAgICAgICBjYWNoZWQgZnJhbWUuICovXG4gICAgQGtleWZyYW1lcyBwdXBfaGVhcnRiZWF0IHtcbiAgICAgIDAlIHsgb3BhY2l0eTogMC41OyB9XG4gICAgICAxMDAlIHsgb3BhY2l0eTogMTsgfVxuICAgIH1cbiAgICAjaGVhcnRiZWF0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgYmFja2dyb3VuZDogIzAwMDtcbiAgICAgIGFuaW1hdGlvbjogcHVwX2hlYXJ0YmVhdCAxcyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8ZGl2IGlkPVwiaGVhcnRiZWF0XCI+PC9kaXY+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBlbmNvZGVUaW1lc3RhbXAobXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzd2FwQnVmZmVyKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlciwgaW50ZXJ2YWw6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG4gIGF3YWl0IGFkdmFuY2VWaXJ0dWFsVGltZSh3Yy5kZWJ1Z2dlciwgaW50ZXJ2YWwpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzd2FwQnVmZmVyXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIGBwcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWRgIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5XG4vLyBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIHBsYWNlLiBOZXcgc2NoZW1lcyBtdXN0IGJlIGFkZGVkIHRvIFBSSVZJTEVHRURfU0NIRU1FUyBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkgcmV0dXJuO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgSGFyZHdhcmVGcmFtZXNDb250ZXh0LCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkgYnJlYWs7XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXdyaXRlIG5hbF91bml0X3R5cGUgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsVHlwZShuYWw6IEJ1ZmZlciwgbmV3VHlwZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyBsYXllcklkLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKG5ld1R5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHplcm9zKys7XG4gICAgZWxzZSB6ZXJvcyA9IDA7XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBQYXRjaCBOVkVOQyBvdXRwdXQgdG8gY29uZm9ybSB0byBBcHBsZSBIRVZDIFZpZGVvIHdpdGggQWxwaGEgSW50ZXJvcGVyYWJpbGl0eSBQcm9maWxlLlxuLy8gU3BlYzogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcbi8vIFNsaWNlIHBhcnNlciBpcyBjb25maWctZHJpdmVuOiBOdmVuY0hldmNDb25maWcgZnJvbSBwYXJzZS50cyBkZXJpdmVzIGZsYWdzIGF0IGVuY29kZXIgaW5pdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSByZXR1cm4gYml0c3RyZWFtO1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IHdoZW4gc2xpY2UgaGFzIHNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWc9MC5cbi8vIHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIHNvIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICBici5yZWFkKDEpOyAvLyBkZWx0YV9ycHNfc2lnblxuICAgIGJyLnJlYWRVZSgpOyAvLyBhYnNfZGVsdGFfcnBzX21pbnVzMVxuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG51bURlbHRhUG9jc1NldDA7IGorKykge1xuICAgICAgY29uc3QgdXNlZCA9IGJyLnJlYWQoMSk7XG4gICAgICBpZiAoIXVzZWQpIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICBlbHNlIGlmIChjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cyA+IDEpIGJyLnJlYWQoTWF0aC5jZWlsKE1hdGgubG9nMihjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cykpKTtcbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gIH1cbiAgaWYgKGNmZy5zYW9FbmFibGVkKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2x1bWFfZmxhZ1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19jaHJvbWFfZmxhZ1xuICB9XG4gIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfUCB8fCBzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgIGNvbnN0IG92ZXJyaWRlRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKG92ZXJyaWRlRmxhZykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWRVZSgpO1xuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICBpZiAoY2ZnLmNhYmFjSW5pdFByZXNlbnQpIGJyLnJlYWQoMSk7IC8vIGNhYmFjX2luaXRfZmxhZ1xuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyByZXdyaXRlQWxwaGFQcHMsIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyLCByZXdyaXRlQWxwaGFTcHMgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX1NFSV9QUkVGSVgsXG4gIE5BTF9TUFMsXG4gIE5BTF9QUFMsXG4gIE5BTF9WUFMsXG4gIHR5cGUgTmFsVW5pdCxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUC4gQ2FsbGVyIHByZS1maWxscyBVVj0xMjguXG4vLyBVaW50MzIgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICBpZiAodHlwZSA9PT0gTkFMX1BQUykgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSBjb250aW51ZTtcbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikgcmV0dXJuIG91dDtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBmbGFncyB0aGUgc2xpY2UgaGVhZGVyIHBhcnNlciBkZXBlbmRzIG9uLlxuLy8gRGVmdXNlcyBmcmFnaWxlIGhhcmRjb2RlZCBhc3N1bXB0aW9uczogaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQsIHRocm93cyB3aXRoIGFjdGlvbmFibGUgZXJyb3IuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykgYnIucmVhZCgyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkgYnIucmVhZCg4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7IGxvZzJNYXhQb2NMc2IsIHNhb0VuYWJsZWQsIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLCBudW1EZWx0YVBvY3NTZXQwLCBsb25nVGVybVJlZlBpY3NQcmVzZW50LCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBpbiBzbGljZSBoZWFkZXIgaXMgcHJlc2VudCBpZmZcbiAgLy8gcHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgaWYgKCFwcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCDigJQgTlZFTkMgY29udmVydHMgaW50ZXJuYWxseSwgbm8gQ1BVIFNXUywgbm8gaHdGcmFtZXNDdHggbmVlZGVkLlxuICAgIGNvbnN0IGJhc2VDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpO1xuXG4gICAgbGV0IGFscGhhQ3R4OiBDb2RlY0NvbnRleHQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJhc2VQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFTd0ZyYW1lOiBGcmFtZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgICBjb25zdCBoZXZjQ2ZnID0gcGFyc2VOdmVuY0hldmNDb25maWcoYmFzZUN0eC5leHRyYURhdGEpO1xuXG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bCh1bmlmaWVkKTtcblxuICAgICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgICBjb25zdCBjaHJvbWFTaXplID0gKCh3aWR0aCArIDEpID4+IDEpICogKChoZWlnaHQgKyAxKSA+PiAxKTtcbiAgICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgICAgYmFzZVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgYWxwaGFTd0ZyYW1lID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCk7XG5cbiAgICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgICAgYmFzZUN0eCxcbiAgICAgICAgYWxwaGFDdHgsXG4gICAgICAgIGJhc2VQa3QsXG4gICAgICAgIGFscGhhUGt0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgICAgYWxwaGFCdWYsXG4gICAgICAgIGhldmNDZmcsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIGJhc2VQa3Q/LmZyZWUoKTtcbiAgICAgIGFscGhhUGt0Py5mcmVlKCk7XG4gICAgICBhbHBoYVN3RnJhbWU/LmZyZWUoKTtcbiAgICAgIGFscGhhQ3R4Py5mcmVlQ29udGV4dCgpO1xuICAgICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEV4dHJhY3QgdGhlIGFscGhhIHBsYW5lIGJlZm9yZSBiYXNlLnNlbmRGcmFtZSDigJQgdGhlIGVuY29kZXIgdW5yZWZzIHRoZSBpbnB1dCBmcmFtZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmJhc2VDdHgsIFwiYmFzZVwiKTtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5hbHBoYUN0eCwgXCJhbHBoYVwiKTtcbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICAgIGNvbnN0IGRlc3luYyA9IHRoaXMuX211eC5kZXN5bmNBZnRlckVvZigpO1xuICAgIGlmIChkZXN5bmMpIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiAke2Rlc3luY31gKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgd2hlbiBOVkVOQyBzZXNzaW9ucyBmcmVlZCBpbiBjcmVhdGlvbiBvcmRlci5cbiAgICAvLyBMSUZPIGRlc3Ryb3kgYXZvaWRzIHRoZSBzZWdmYXVsdC4gUGVyIE5WSURJQSBmb3J1bSAvdC8yNjk5NzQuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICBsZXQgcGt0OiBQYWNrZXQgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICAgIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIHBrdD8uZnJlZSgpO1xuICAgICAgY3R4LmZyZWVDb250ZXh0KCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHdWaWRlb0VuY29kZXIob3B0czogSHdWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICBjb25zdCBodyA9IHNoYXJlZEh3ID8/IChkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkpO1xuICBjb25zdCBvd25zSHcgPSAhc2hhcmVkSHcgJiYgISFodztcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwiZmFzdFwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0zOnBvb2xzPSs6ZnJhbWUtdGhyZWFkcz0wXCIgfSxcbiAgICBiaXRyYXRlLFxuICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgIG11eGVyLFxuICB9KTtcbiAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSwgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgLy8gK2Zhc3RzdGFydCByZWxvY2F0ZXMgbW9vdiB0byBmaWxlIGZyb250IG9uIHdyaXRlVHJhaWxlciBzbyBwbGF5ZXJzIGNhbiBiZWdpbiBwbGF5YmFjayBiZWZvcmUgZnVsbCBkb3dubG9hZC5cbiAgICB1c2luZyBvcHRzID0gRGljdGlvbmFyeS5mcm9tT2JqZWN0KHsgbW92ZmxhZ3M6IFwiK2Zhc3RzdGFydFwiIH0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIob3B0cyksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBBIGZhaWxlZC90cnVuY2F0ZWQgdHJhaWxlciB3cml0ZSBtdXN0IG5vdCBsZWFrIHRoZSBGRCArIG5hdGl2ZSBjb250ZXh0LlxuICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLm1wNFwiKSB8fCBsb3dlci5lbmRzV2l0aChcIi5tb3ZcIikpIHJldHVybiBcIm1wNFwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSk7XG4gICAgY29uc3QgdmlkZW8gPSBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCB0aGlzLm1wNFZpZGVvKG9wdHMsIG11eGVyKSA6IGF3YWl0IHRoaXMud2VibVZpZGVvKG9wdHMsIG11eGVyKTtcbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgdGhpcy5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi52aWRlbywgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIsIFwicm93LW10XCI6IFwiMVwiLCB0aHJlYWRzOiBcIjJcIiB9LFxuICAgICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhdWRpb0ZvcihvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICAvLyBPcHVzIHJlamVjdHMgNDQuMWsuXG4gICAgY29uc3QgY2ZnID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIlxuICAgICAgICA/IHsgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyB9XG4gICAgICAgIDogeyBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTIH07XG4gICAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoeyAuLi5jZmcsIGdsb2JhbEhlYWRlcjogdHJ1ZSwgYml0cmF0ZTogMTI4XzAwMCwgbXV4ZXIgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShzcmMpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmF1ZGlvPy5lbmNvZGUocGNtLCB0aGlzLl9zLm11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGF1ZGlvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgIGlmIChod1ZpZGVvKSBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICBlbHNlIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBvdXRGaWxlcyA9IG91dEZpbGVcbiAgICAgIC5zcGxpdChcIixcIilcbiAgICAgIC5tYXAoKHApID0+IHAudHJpbSgpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGF0aFwiKTtcblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fcy5zaW5rcy5tYXAoKHNpbmspID0+IHNpbmsuZW5jb2RlQkdSQShmcmFtZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9zLm9wdHM7XG4gICAgICB0aGlzLl9zLnBuZ0NvZGVjID8/PSBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IHRoaXMuX3MucG5nQ29kZWMuZGVjb2RlUE5HKHBuZ0RhdGEpO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5mbHVzaCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZXM7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5wbmdDb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3Muc2hhcmVkSHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmdyYUZyYW1lKGlucHV0OiBCdWZmZXIpOiBGcmFtZSB7XG4gICAgY29uc3QgZnJhbWUgPSBtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjMuXG5cbi8qKlxuICogRnJhbWUgZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KS5cbiAqXG4gKiBDb21iaW5lcyB0d28gZGltZW5zaW9uczpcbiAqIC0gR2xvYmFsOiBvdmVyYWxsIGRyb3AgcmF0ZSBhY3Jvc3MgdGhlIHRpbWVsaW5lXG4gKiAtIExvY2FsOiBwZXJjZXB0dWFsIHNldmVyaXR5IG9mIGNvbnNlY3V0aXZlIGRyb3BzIChidXJzdHMpXG4gKlxuICogVXNlcyBjb21wbGVtZW50YXJ5IG11bHRpcGxpY2F0aW9uOiBzY29yZSA9IDEgLSAoMS1nKSgxLWwpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJhbWVEcm9wU2NvcmUge1xuICBnbG9iYWw6IG51bWJlcjtcbiAgbG9jYWw6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBleHBlY3RlZDogbnVtYmVyO1xuICBhY3R1YWw6IG51bWJlcjtcbiAgbWF4QnVyc3Q6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYW1lRHJvcFN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnBzOiBudW1iZXI7XG4gIHByaXZhdGUgX2FjdHVhbCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRCdXJzdCA9IDA7XG4gIHByaXZhdGUgX2J1cnN0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihmcHM6IG51bWJlcikge1xuICAgIHRoaXMuX2ZwcyA9IGZwcztcbiAgfVxuXG4gIC8qKiBDYWxsIHdoZW4gYSBmcmFtZSBpcyBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSBlbmNvZGVyLiAqL1xuICB3cm90ZShjb3VudCA9IDEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuICAgIHRoaXMuX2FjdHVhbCArPSBjb3VudDtcbiAgfVxuXG4gIC8qKiBDYWxsIHdoZW4gYSBmcmFtZSBpcyBkcm9wcGVkLiAqL1xuICBkcm9wcGVkKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRCdXJzdCArPSBjb3VudDtcbiAgfVxuXG4gIC8qKiBGaW5hbGl6ZSBhbmQgcmV0dXJuIHRoZSBzY29yZS4gKi9cbiAgZmluYWxpemUoKTogRnJhbWVEcm9wU2NvcmUge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxEcm9wcGVkID0gMDtcbiAgICBsZXQgbG9jYWxTdW0gPSAwO1xuICAgIGxldCBtYXhCdXJzdCA9IDA7XG4gICAgZm9yIChjb25zdCBidXJzdCBvZiB0aGlzLl9idXJzdHMpIHtcbiAgICAgIHRvdGFsRHJvcHBlZCArPSBidXJzdDtcbiAgICAgIG1heEJ1cnN0ID0gTWF0aC5tYXgobWF4QnVyc3QsIGJ1cnN0KTtcbiAgICAgIGNvbnN0IHBlcmNlcHRpYmxlID0gTWF0aC5tYXgoMCwgYnVyc3QgLSAxKTtcbiAgICAgIGxvY2FsU3VtICs9IChwZXJjZXB0aWJsZSAvIHRoaXMuX2ZwcykgKiogMjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuX2FjdHVhbCArIHRvdGFsRHJvcHBlZDtcbiAgICBjb25zdCBnID0gZXhwZWN0ZWQgPiAwID8gdG90YWxEcm9wcGVkIC8gZXhwZWN0ZWQgOiAwO1xuICAgIGNvbnN0IGwgPSBNYXRoLm1pbigxLCBsb2NhbFN1bSk7XG4gICAgY29uc3Qgc2NvcmUgPSAxIC0gKDEgLSBnKSAqICgxIC0gbCk7XG5cbiAgICByZXR1cm4geyBnbG9iYWw6IGcsIGxvY2FsOiBsLCBqYW5rOiBzY29yZSwgZXhwZWN0ZWQsIGFjdHVhbDogdGhpcy5fYWN0dWFsLCBtYXhCdXJzdCB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGltYWdlOiBOYXRpdmVJbWFnZSkge1xuICBjb25zdCBzaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBpbWFnZS5pc0VtcHR5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplRXF1YWxzKGE6IFNpemUsIGI6IFNpemUpIHtcbiAgcmV0dXJuIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgdHlwZSBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHR5cGUgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5cbmV4cG9ydCBjb25zdCBBVURJT19NRVRBX0NIQU5ORUwgPSBcImF1ZGlvLW1ldGFcIjtcbmV4cG9ydCBjb25zdCBBVURJT19DSFVOS19DSEFOTkVMID0gXCJhdWRpby1jaHVua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvTGlzdGVuZXJPcHRpb25zIHtcbiAgd2M6IFdlYkNvbnRlbnRzO1xuICBlbmNvZGVyOiBFbmNvZGVyUGlwZWxpbmU7XG4gIGdldFZpZGVvVGltZU1zOiAoKSA9PiBudW1iZXI7XG4gIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEF1ZGlvRGlzcG9zYWwgPSAoKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoeyB3YywgZW5jb2RlciwgZ2V0VmlkZW9UaW1lTXMsIG9uRXJyb3IgfTogQXVkaW9MaXN0ZW5lck9wdGlvbnMpOiBBdWRpb0Rpc3Bvc2FsIHtcbiAgY29uc3Qgb25NZXRhID0gYXN5bmMgKF9lOiB1bmtub3duLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgICBjb25zdCBzdGFydE1zID0gZ2V0VmlkZW9UaW1lTXMoKTtcbiAgICBlbmNvZGVyLnNldHVwQXVkaW8oc2FtcGxlUmF0ZSk7XG4gICAgY29uc3Qgc2lsZW5jZVNhbXBsZXMgPSBNYXRoLmNlaWwoKHN0YXJ0TXMgKiBzYW1wbGVSYXRlKSAvIDEwMDApO1xuICAgIGlmIChzaWxlbmNlU2FtcGxlcyA8PSAwKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gV2hlbiBwcm92aWRlZCwgdXNlUmV0cnkgYmFpbHMgb3V0IGltbWVkaWF0ZWx5IG9uIGFib3J0IGluc3RlYWQgb2YgcmV0cnlpbmcuIFRoZSBzaWduYWxcbiAgLy8gaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIG11c3Qgd2lyZSBpdCB3aGVyZSBpdCBtYXR0ZXJzIChlLmcuIGZldGNoLCBTMyBzZW5kKS5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0LCBzaWduYWwgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmNvbnN0IExPQ0FMX1NDSEVNRVMgPSBbXCJwdXA6XCIsIFwicHVwLWZyYW1lOlwiLCBcImZpbGU6XCIsIFwiZGF0YTpcIiwgXCJibG9iOlwiLCBcImNocm9tZS1leHRlbnNpb246XCIsIFwiZGV2dG9vbHM6XCJdO1xuXG5mdW5jdGlvbiBpc0xvY2FsU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcyBvZiBMT0NBTF9TQ0hFTUVTKSBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbiAgY2FuY2VsTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgY2FuY2VsTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIGlmIChjYW5jZWxNZWRpYSAmJiBkZXRhaWxzLnJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiKSB7XG4gICAgICBjYWxsYmFjayh7IGNhbmNlbDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xvY2FsU2NoZW1lKHVybCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGlmIChjYW5jZWxNZWRpYSAmJiBkZXRhaWxzLnJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiICYmIGRldGFpbHMuZXJyb3IgPT09IFwibmV0OjpFUlJfQkxPQ0tFRF9CWV9DTElFTlRcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIuZXJyb3IoVEFHLCBgZXJyb3I6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBlcnJvcjogZGV0YWlscy5lcnJvcixcbiAgICAgIHJlc291cmNlVHlwZTogZGV0YWlscy5yZXNvdXJjZVR5cGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQsIHB1cElmcmFtZVByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5jb25zdCBUSU1FT1VUX0VSUk9SID0gbmV3IEVycm9yKFwid2luZG93IHRpbWVvdXRcIik7XG5cbmludGVyZmFjZSBGaW5pc2hPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdG9sZXJhbnQsIHNpZ25hbCB9OiBGaW5pc2hPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZG9uZShUSU1FT1VUX0VSUk9SKSwgMTBfMDAwKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IHVua25vd24pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpO1xuICAgICAgZWxzZSByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gZG9uZShzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGlmICh0b2xlcmFudCkgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYGRpZC1mYWlsLWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoeyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBcImZvcmNlIGNsb3NlXCIpO1xuICAgICAgICB3aW4uZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgZG9uZSgpO1xuICAgIH0sIDEwMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiAoY2xlYXJUaW1lb3V0KHRpbWVyKSwgcmVzb2x2ZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiBwaWNrUHJlbG9hZChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZW5kZXJlci5kZXRlcm1pbmlzdGljKSByZXR1cm4gcHVwSWZyYW1lUHJlbG9hZDtcbiAgaWYgKHJlbmRlcmVyLndpdGhBdWRpbykgcmV0dXJuIHB1cEF1ZGlvUHJlbG9hZDtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHBpY2tQcmVsb2FkKHJlbmRlcmVyKSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5LCBjYW5jZWxNZWRpYTogcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIG1lc3NhZ2Uuc3RhcnRzV2l0aChgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCkpIHJldHVybjtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLCB0b2xlcmFudCwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgb25DcmVhdGVkLCBzaWduYWwgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjaGVja0hUTUwoc291cmNlKTtcblxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIGxldCB3YXJtdXA6IEJyb3dzZXJXaW5kb3cgfCB1bmRlZmluZWQ7XG4gIGxldCBlcnJvcjogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB3YXJtdXAgPSBhd2FpdCBvcGVuV2luZG93V2l0aFJldHJ5KHsgc291cmNlLCByZW5kZXJlciwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG5cbiAgY29uc3Qgb3BlbiA9ICgpID0+IG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCwgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50IH0pO1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgdHlwZSBOYXRpdmVJbWFnZSwgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgRnJhbWVEcm9wU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9mcmFtZV9kcm9wXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGF0dGFjaEF1ZGlvTGlzdGVuZXJzLCB0eXBlIEF1ZGlvRGlzcG9zYWwgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRnJhbWVEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgZW5jb2Rlci5lbmNvZGVCR1JBKGZyYW1lKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBlbmNvZGVFcnJvciA/Pz0gc2lnbmFsPy5yZWFzb247XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgc3RlZ28gdGltZXN0YW1wIGZyb20gdGhlIGJvdHRvbSBwaXhlbCByb3cgd2l0aG91dCBmdWxsIGJpdG1hcCBjb3B5XG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RlRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgZnJhbWVzIHRoYXQgYXJyaXZlIHRvbyBzb29uICg8IDgwJSBvZiBmcmFtZSBpbnRlcnZhbClcbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lICE9PSB1bmRlZmluZWQgJiYgY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWUgPCBmcmFtZUludGVydmFsICogMC44KSByZXR1cm47XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3csIHdyaXR0ZW49JHt3cml0dGVufSBzdHVjaz0ke3N0dWNrfWApO1xuICAgICAgICBzdHVjaysrO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlcmVuZGVyPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBsZXQgbGFzdEVycjogdW5rbm93bjtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgZTtcbiAgICAgIGxhc3RFcnIgPSBlO1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcmV0cnkgJHthdHRlbXB0ICsgMX0vJHtNQVhfUkVOREVSX0FUVEVNUFRTfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbGFzdEVycjtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi8uLi9iYXNlL3RpbWluZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb11cIjtcbmNvbnN0IEFEVkFOQ0VfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyhmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZnJhbWUgfHwgIWZyYW1lLnVybCkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IGV4cHIgPSBgd2luZG93Ll9fcHVwX3ZpZGVvX18mJndpbmRvdy5fX3B1cF92aWRlb19fLmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pYDtcbiAgICBjb25zdCBldiA9IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGV4cHIpO1xuICAgIGF3YWl0IHdpdGhUaW1lb3V0KGV2LCBBRFZBTkNFX1RJTUVPVVRfTVMsIFwidmlkZW8uYWR2YW5jZVwiKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYGFkdmFuY2Ugc2tpcHBlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgYWR2YW5jZVZpZGVvcyB9IGZyb20gXCIuL3ZpZGVvL2FkdmFuY2VcIjtcblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpY2soZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZCwgdGltZXN0YW1wTXM6IG51bWJlcikge1xuICBpZiAoIWZyYW1lKSByZXR1cm47XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhmcmFtZSwgdGltZXN0YW1wTXMpXSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQge1xuICB0eXBlIEJyb3dzZXJXaW5kb3csXG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgTmF0aXZlSW1hZ2UsXG4gIHR5cGUgUmVjdGFuZ2xlLFxuICB0eXBlIFNpemUsXG4gIHR5cGUgV2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zLFxufSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHBhdXNlVmlydHVhbFRpbWUsIHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHR5cGUgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN3YXBCdWZmZXIgfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgdGljayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGZyYW1lU2VydmVyIH0gZnJvbSBcIi4vdmlkZW8vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IGxhc3RUczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgbGFnZ3kgPSAwO1xuICBsZXQgc3R1Y2sgPSAwO1xuICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSAzKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcImRyYXdhYmxlIHRpbWVvdXRcIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gcmVuZGVyIGlzIGV4dHJlbWVseSBzbG93IEAgJHttc30sIGN1cnJlbnQ6ICR7bGFzdFRzfSB3aXRoICR7c3R1Y2t9IHJlcGVhdHNgKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLmludmFsaWRhdGUoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgICAgY29uc3QgaGFuZGxlciA9IChfZTogRXZlbnQ8V2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zPiwgX2Q6IFJlY3RhbmdsZSwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICBjb25zdCB0cyA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgTWF0aC5hYnModHMgLSBtcykgPiAxKSB7XG4gICAgICAgICAgbGFzdFRzID0gdHM7XG4gICAgICAgICAgbGFnZ3krKztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBzaXplLmhlaWdodCAqIHNpemUud2lkdGggKiA0KSk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICAgICAgLy8gQ29tcG9zaXRvciBjYXAsIE5PVCBvdXRwdXQgZnBzLiBNYXggaXQgc28gcGFpbnQgZXZlbnRzIGFycml2ZSB3aXRob3V0IGludGVyLWZyYW1lIHdhbGwgZGVsYXkuXG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoMjQwKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob290KG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuXG4gIGNvbnN0IHRJbml0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHdpblAgPSBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlcjogb3B0aW9ucywgc2lnbmFsIH0pO1xuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHdpbiA9IGF3YWl0IHdpblA7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiaW5pdCBkb25lOlwiLCB7IHNvdXJjZSwgY29zdDogcGVyZm9ybWFuY2Uubm93KCkgLSB0SW5pdCB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG5cbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWUgKyAxKSAqIGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgIGF3YWl0IHRpY2soaWZyYW1lLCBmcmFtZU1zKTtcbiAgICAgIGF3YWl0IHN3YXBCdWZmZXIod2luLndlYkNvbnRlbnRzLCBmcmFtZU1zLCBmcmFtZUludGVydmFsKTtcbiAgICAgIGNvbnN0IGJpdG1hcCA9IGF3YWl0IHBhaW50KHsgc291cmNlLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIC8vIEtpY2sgb2ZmIGVuY29kZSB3aXRob3V0IGF3YWl0aW5nOyBwaXBlbGluZSBsaW1pdGVyIHNlcmlhbGl6ZXMgaW50ZXJuYWxseS5cbiAgICAgIC8vIEVuY29kZSBydW5zIGNvbmN1cnJlbnQgd2l0aCBuZXh0IGZyYW1lJ3MgQ0RQL3BhaW50IHNldHVwLlxuICAgICAgcGlwZWxpbmUuZW5jb2RlQkdSQShiaXRtYXApLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgICAgIHdyaXR0ZW4rKztcbiAgICAgIGlmIChlbmNvZGVFcnJvcikgdGhyb3cgZW5jb2RlRXJyb3I7XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcmFtZVNlcnZlci5jbG9zZUFsbCgpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvcikgdGhyb3cgZW5jb2RlRXJyb3I7XG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBJcGNNc2dUeXBlLCBJcGNXcml0ZXIsIHR5cGUgSXBjTXNnIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cEZyYW1lUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci92aWRlby9wcm90b2NvbFwiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ0FOQ0VMKSBjdHJsLmFib3J0KG1zZy5yZWFzb24pO1xufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHNldHVwRnJhbWVQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aFJlcmVuZGVyKGN0cmwuc2lnbmFsLCAoKSA9PlxuICAgICAgICBhY3Rpb24oe1xuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHNpZ25hbDogY3RybC5zaWduYWwsXG4gICAgICAgICAgb25Qcm9ncmVzczogKHApID0+IGlwYy53cml0ZVByb2dyZXNzKHApLFxuICAgICAgICAgIG9uQ29uc29sZTogKGwsIG0pID0+IGlwYy53cml0ZUNvbnNvbGUobCwgbSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZURvbmUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNWI0ZjdkOTU0MzRiNGM1MS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ZyYW1lX2Ryb3AudHMiLCIuLi9zcmMvYmFzZS9pbWFnZS50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL3JldHJ5LnRzIiwiLi4vc3JjL3JlbmRlcmVyL2h0bWxfY2hlY2sudHMiLCIuLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uL3NyYy9yZW5kZXJlci9uZXR3b3JrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3dpbmRvdy50cyIsIi4uL3NyYy9yZW5kZXJlci9yZW5kZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvcmVyZW5kZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vYWR2YW5jZS50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL29wZW4udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZV9zZXNzaW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3Byb2JlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2ZyYW1lX3NlcnZlci50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm90b2NvbC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBBdWRpb1ByZWxvYWQiLCJwdXBJZnJhbWVQcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJub3JtYWxpemVTb3VyY2UiLCJzIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJhYm9ydGFibGUiLCJvbkFib3J0IiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsInBhdXNlVmlydHVhbFRpbWUiLCJyZXNpemVEcmF3YWJsZSIsInNpemUiLCJGUkFNRV9TWU5DX01BUktFUl9XSURUSCIsIlNURUdPX1RJQ0tfQ0hBTk5FTCIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwid2lkdGgiLCJoZWlnaHQiLCJkZWNvZGVTdGVnbyIsImJpdG1hcCIsIm1hcmtlclJvdyIsInRpbWVzdGFtcCIsImkiLCJwaXhlbElkeCIsImJpdCIsInN0YXJ0U3RlZ28iLCJzd2FwQnVmZmVyIiwid2MiLCJleHBlY3RlZCIsImludGVydmFsIiwic3dhcHBlZCIsInIiLCJQVVBfU0NIRU1FIiwiRlJBTUVfU0NIRU1FIiwiUFJJVklMRUdFRF9QUklWSUxFR0VTIiwicHJvdG9jb2wiLCJzZXR1cFB1cFByb3RvY29sIiwicmVxIiwidXJsIiwic3JjIiwiaHRtbCIsImNyZWF0ZVN0ZWdvVVJMIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJ2Iiwia2VlcCIsImVudHJ5Iiwib3BlblZpZGVvQ3R4IiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwiRkZtcGVnRXJyb3IiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJfc3RhY2siLCJfX3VzaW5nIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwiblNhbXBsZXMiLCJwYWNrQml0cyIsImJpdHMiLCJidWYiLCJieXRlIiwiYiIsIkJpdFdyaXRlciIsInZhbCIsIm4iLCJsZW4iLCJwYWQiLCJzdGFydCIsIkJpdFJlYWRlciIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwiTkFMX0JMQV9XX0xQIiwiTkFMX1JTVl9JUkFQX1ZDTDIzIiwiTkFMX1ZQUyIsIk5BTF9TUFMiLCJOQUxfUFBTIiwiTkFMX1NFSV9QUkVGSVgiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJvdXQiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJWUFNfUFRMX0JJVCIsIlNQU19QVExfQklUIiwiUFRMX1RJRVJfQklUIiwiUFRMX0NPTVBBVDJfQklUIiwiU0xJQ0VfVFlQRV9CIiwiU0xJQ0VfVFlQRV9QIiwic2V0Qml0IiwiYml0T2Zmc2V0IiwibWFzayIsImN1ciIsInBhdGNoUHRsIiwibmFsRGF0YSIsInB0bFN0YXJ0Qml0IiwicmJzcCIsInBhdGNoSGV2Y0FscGhhUHRsIiwiY2h1bmtzIiwicmV3cml0ZU9uZVVlIiwibmFsSW4iLCJuZXdWYWwiLCJiciIsImJ3IiwicmV3cml0ZVR3b1VlIiwibmV3VmFsMSIsIm5ld1ZhbDIiLCJyZXdyaXRlQWxwaGFTcHMiLCJzcHMiLCJTUFNfU0VRX0lEX0JJVCIsInJld3JpdGVBbHBoYVBwcyIsInBwcyIsInJlYWRTZSIsInVlIiwicGFyc2VJbmxpbmVTdFJlZlBpY1NldCIsIm51bURlbHRhUG9jc1NldDAiLCJkZWx0YUlkeE1pbnVzMSIsIm51bU5lZyIsIm51bVBvcyIsInBhcnNlSGVhZGVyVG9BbGlnbm1lbnQiLCJuYWxUeXBlIiwiY2ZnIiwiaXNJcmFwIiwic2xpY2VUeXBlIiwicmV3cml0ZUFscGhhU2xpY2VIZWFkZXIiLCJzbGljZSIsInByb2JlIiwiQiIsIm9sZEFsaWduQml0cyIsInNsaWNlRGF0YUJ5dGVPZmZzZXQiLCJleHRyYWN0UFRMIiwidnBzRGF0YSIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwicHRsIiwid3JpdGVWUFNFeHRlbnNpb24iLCJidWlsZEFscGhhVlBTIiwiZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIiwiYmdyYUZyYW1lIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwic3JjMzIiLCJ5Iiwicm93QmFzZSIsImRzdEJhc2UiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYWxwaGFTd0ZyYW1lIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJEaWN0aW9uYXJ5IiwiRkZfRU5DT0RFUl9MSUJWUFhfVlA5IiwiT3V0cHV0U2luayIsIl9PdXRwdXRTaW5rIiwicGF0aCIsImxvd2VyIiwidmlkZW8iLCJhdWRpbyIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsIm91dEZpbGVzIiwia2luZHMiLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJGcmFtZURyb3BTdGF0cyIsImNvdW50IiwidG90YWxEcm9wcGVkIiwibG9jYWxTdW0iLCJtYXhCdXJzdCIsImJ1cnN0IiwicGVyY2VwdGlibGUiLCJnIiwibCIsInNjb3JlIiwic2l6ZUVxdWFscyIsImEiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwiTE9DQUxfU0NIRU1FUyIsImlzTG9jYWxTY2hlbWUiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5IiwiY2FuY2VsTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsImtleSIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsImNhbGxiYWNrIiwicHJveGllZCIsInJlc3BvbnNlSGVhZGVycyIsInVuc2V0SW50ZXJjZXB0b3IiLCJUSU1FT1VUX0VSUk9SIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsInRpbWVvdXRNcyIsInRvbGVyYW50IiwiZG9tUmVhZHkiLCJkb25lIiwiZGVzYyIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsInBpY2tQcmVsb2FkIiwicmVuZGVyZXIiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJzdGFjayIsInJlbmRlciIsImR1cmF0aW9uIiwib25Qcm9ncmVzcyIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImVuY29kZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJkcm9wU2NvcmUiLCJfcHJvbWlzZSIsIk1BWF9SRU5ERVJfQVRURU1QVFMiLCJ3aXRoUmVyZW5kZXIiLCJsYXN0RXJyIiwiYWR2YW5jZVZpZGVvcyIsInRpbWVzdGFtcE1zIiwiVElDS19TWU1CT0wiLCJ0aWNrIiwiZXhwciIsInRpY2tFdiIsIlJXX1RJTUVPVVRfVVMiLCJvcGVuSW5wdXQiLCJEZW11eGVyIiwiZGVjb2RlRnJhbWVzIiwibWV0YSIsIkFWTUVESUFfVFlQRV9WSURFTyIsImRlYyIsIkRlY29kZXIiLCJmcmFtZVdpZHRoIiwiZnJhbWVIZWlnaHQiLCJzY2FsZSIsImZpbHRlciIsIkZpbHRlckFQSSIsIl9mcmFtZSIsInBhY2tSZ2JhIiwicm93Iiwic3RyaWRlIiwiREVDT0RFX0FIRUFEIiwiS0VFUF9CRUhJTkQiLCJNRU1PUllfQlVER0VUIiwiTUFYX1BBU1NfUkVUUlkiLCJEZWNvZGVTZXNzaW9uIiwiX3NyYyIsImlkeCIsImhpdCIsImZhaWxzIiwiZ2VuIiwiZmFpbGVkIiwiYXQiLCJmbG9vciIsIlBST0JFX1RJTUVPVVRfTVMiLCJ0YiIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJGcmFtZVNlcnZlciIsImlkIiwiZXZlbiIsImNyZWF0ZUhhc2giLCJmcmFtZVNlcnZlciIsImxhc3RUcyIsIl9kIiwidHMiLCJzaG9vdCIsInRJbml0Iiwid2luUCIsInBpcGVsaW5lIiwibWFpbiIsImlmcmFtZSIsImZyYW1lTXMiLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJzZXR1cEZyYW1lUHJvdG9jb2wiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJieXRlcyIsImNvcHkiLCJmYWxsYmFjayIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCIsIm0iXSwibWFwcGluZ3MiOiJ5eEVBS0EsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsSUFDaEIsSUFBSSxHQUFBLENBQUksUUFBUSxVQUFVLENBQUEsQ0FBRSxFQUFFLElBQUEsQ0FDN0IsUUFBQSxDQUFTLGVBQWlCLFFBQUEsQ0FBUyxhQUFBLENBQWMsUUFBUSxXQUFBLEVBQVksR0FBTSxRQUFBLENBQzFFLFFBQUEsQ0FBUyxhQUFBLENBQWMsR0FBQSxDQUN2QixJQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVcsU0FBUyxPQUFPLENBQUEsQ0FBRSxLQUVoQ0MsQ0FBQUEsQ0FBZ0NELEVBQUFBLEdDTnRDLFNBQVNFLEdBQVFDLENBQUFBLENBQWNDLENBQUFBLENBQXNCQyxFQUFpQyxDQUMzRixHQUFJLENBQ0YsT0FBT0QsQ0FBQUEsQ0FBTyxPQUFBLENBQVEsR0FBQSxDQUFJRCxDQUFJLENBQUMsQ0FDakMsQ0FBQSxLQUFRLENBQ04sT0FBT0UsQ0FDVCxDQUNGLENDVk8sU0FBU0MsQ0FBQUEsQ0FBWUMsRUFBb0IsQ0FDOUMsR0FBSSxPQUFPQSxDQUFBQSxFQUFNLFFBQUEsQ0FDZixPQUFPQSxDQUFBQSxDQUVULElBQU1DLEVBQU0sTUFBQSxDQUFPRCxDQUFDLENBQUEsQ0FDcEIsR0FBSSxNQUFBLENBQU8sS0FBQSxDQUFNQyxDQUFHLENBQUEsQ0FDbEIsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLE1BQUEsRUFBU0QsQ0FBQyxDQUFBLHNCQUFBLENBQXdCLENBQUEsQ0FFcEQsT0FBT0MsQ0FDVCxDQ0pBLElBQU1DLEdBQVVDLHNCQUFBQSxDQUFjVCxDQUFlLEVBRWhDVSxFQUFBQSxDQUFjVCxFQUFBQSxDQUFLLGdCQUFpQkksQ0FBQUEsQ0FBYSxDQUFDLENBQUEsQ0FFbERNLEVBQUFBLENBQWFDLFlBQUFBLENBQVFK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QUEsQ0FBRyxFQUFJQSxDQUFBQSxDQUFJLGtCQUFBLENBQW9CLElBQzFDaEMsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFFWCxJQUFBLElBQVMsQ0FBQSxDQUFJZ0MsRUFBSSxrQkFBQSxDQUFvQixDQUFBLENBQUksRUFBRyxDQUFBLEVBQUEsQ0FDMUNoQyxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxFQUViLENBRUFBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNULElBQUEsSUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLEVBQUksRUFBQSxDQUFJLENBQUEsRUFBQSxDQUN0QkEsRUFBRyxJQUFBLENBQUssQ0FBQSxHQUFNLEdBQUssQ0FBQSxHQUFNLENBQUMsQ0FBQSxDQUU1QkEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBS2dDLENBQUFBLENBQUksT0FBQSxDQUFTQSxFQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxPQUFTQSxDQUFBQSxDQUFJLFFBQVEsRUFFNURoQyxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFekosQ0FBQUEsQ0FBTyxFQUFFLENBQUEsQ0FDZHlKLENBQUFBLENBQUcsRUFBRXhKLENBQUFBLENBQVEsRUFBRSxFQUNmd0osQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FFUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENB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QUEsQ0FBSyxNQUFBLENBQVEsSUFDN0N2SCxDQUFBQSxDQUFPLENBQ0wsT0FBQTdZLENBQUFBLENBQ0EsR0FBR0osRUFDSCxNQUFBLENBQVF3Z0IsRUFBQUEsQ0FBSyxNQUFBLENBQ2IsVUFBQSxDQUFhNWYsR0FBTWdnQixDQUFBQSxDQUFJLGFBQUEsQ0FBY2hnQixDQUFDLENBQUEsQ0FDdEMsU0FBQSxDQUFXLENBQUNtVixDQUFBQSxDQUFHZ0wsQ0FBQUEsR0FBTUgsQ0FBQUEsQ0FBSSxZQUFBLENBQWE3SyxFQUFHZ0wsQ0FBQyxDQUM1QyxDQUFDLENBQ0gsQ0FBQSxDQUNBLE1BQU1ILENBQUFBLENBQUksU0FBQSxDQUFVRSxDQUFNLEVBQzVCLE9BQVN4Z0IsQ0FBQUEsQ0FBRyxDQUNWLElBQU14RCxDQUFBQSxDQUFRd0QsQ0FBQUEsQ0FDUnlnQixFQUFJamtCLENBQUFBLENBQU0sS0FBQSxFQUFTQSxDQUFBQSxDQUFNLE9BQUEsRUFBVyxPQUFPd0QsQ0FBQUEsRUFBSyxlQUFlLEVBQ3JFLE1BQU1zZ0IsQ0FBQUEsQ0FBSSxXQUFXRyxDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBTixHQUFVLElBQUEsQ0FDVm5pQixZQUFBQSxDQUFJLE9BQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwQXVkaW9QcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwiYXVkaW9fcHJlbG9hZC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSWZyYW1lUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImlmcmFtZV9wcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pID0+IHVua25vd24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIHtcbiAgICBsb2dnZXIuZXJyb3IobXNnKTtcbiAgfSBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykge1xuICAgIGxvZ2dlci53YXJuKG1zZyk7XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjEuXG5cbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIC8vIGFwcERhdGEgKG5vdCB0aGUgcGVyLXJ1biB1c2VyLWRhdGEtZGlyKSBzbyBldmVyeSBwdXAgYXBwJ3MgZHVtcHMgYWNjdW11bGF0ZSBpbiBvbmUgc2hhcmVkLCBwZXJzaXN0ZW50IGRpci5cbiAgY29uc3QgZHVtcERpciA9IGpvaW4oYXBwLmdldFBhdGgoXCJhcHBEYXRhXCIpLCBcInB1cC1yZWNvcmRlclwiLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICB9XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkge1xuICAgICAgICB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lORE9XX1RJTUVPVVQgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXQvaHRtbC5tcDQsb3V0L2h0bWwud2VibVwiO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb21tYS1zZXBhcmF0ZWQgb3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlOiBERUZBVUxUX09VVF9GSUxFLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyByZWFscGF0aFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHJlbmRlclNjaGVtYSB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSByZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICAgIHdpbmRvd1RpbWVvdXQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpbmRvd1RpbWVvdXQpKG9wdHMud2luZG93VGltZW91dCksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbmVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkRvbmU7XG4gIHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5FcnJvcjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSXBjTXNnID0gQ29uc29sZU1zZyB8IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnIHwgQ2FuY2VsTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIGNvbnNvbGU6IFtsZXZlbDogc3RyaW5nLCBtc2c6IHN0cmluZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlQ29uc29sZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGUsIGxldmVsLCBtZXNzYWdlIH0pO1xuICB9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FcnJvciwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Eb25lLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogSXBjTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5zZW5kKG1zZywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXBjUmVhZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPElwY0V2ZW50cz4ge1xuICBjb25zdHJ1Y3RvcihjaGlsZDogQ2hpbGRQcm9jZXNzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjaGlsZC5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICAgICAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkNvbnNvbGU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJjb25zb2xlXCIsIG1zZy5sZXZlbCwgbXNnLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Qcm9ncmVzczoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIG1zZy52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkRvbmU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJkb25lXCIsIG1zZy5wYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRXJyb3I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IobXNnLmVycm9yKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjaGlsZC5vbmNlKFwiZXhpdFwiLCAoYykgPT4gdGhpcy5lbWl0KFwiY2xvc2VcIiwgYykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuLy8gUmVqZWN0IGFzIHNvb24gYXMgYHNpZ25hbGAgYWJvcnRzLCBlbHNlIHNldHRsZSB3aXRoIGBwYDsgbm8tb3AgcGFzc3Rocm91Z2ggd2hlbiBubyBzaWduYWwuXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRhYmxlPFQ+KHA6IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gTm8gc3RhcnZhdGlvbiBjYXAgKHdvdWxkIHNraXAgcGVuZGluZyB3b3JrIG5vbi1kZXRlcm1pbmlzdGljYWxseSk7IGNhcHR1cmUgc3RhcnRzIHBvc3QgZGlkLXN0b3AtbG9hZGluZywgYW5kIENEUF9USU1FT1VUX01TIHR1cm5zIGEgcmVhbCBzdGFsbCBpbnRvIGEgZmFpbGVkIHJlbmRlci5cbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzaXplRHJhd2FibGUoY2RwOiBEZWJ1Z2dlciwgc2l6ZTogU2l6ZSkge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHtcbiAgICAuLi5zaXplLFxuICAgIGRldmljZVNjYWxlRmFjdG9yOiAxLFxuICAgIG1vYmlsZTogZmFsc2UsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSwgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gICAgLyogSGVhcnRiZWF0OiBpbnZpc2libGUgYWx3YXlzLW9uIHRpY2suIEZvcmNlcyBDaHJvbWl1bSBjb21wb3NpdG9yIHRvIGlzc3VlIEJlZ2luRnJhbWUgZWFjaFxuICAgICAgIHZpcnR1YWwgdGljayBvbiBvdGhlcndpc2Utc3RhdGljIHBhZ2VzIHNvIGNhbnZhcyNzdGVnbyBwdXRJbWFnZURhdGEgdXBkYXRlcyBsYW5kIGluIHRoZVxuICAgICAgIGNhcHR1cmVkIHBhaW50IGV2ZW50LiBXaXRob3V0IHRoaXMsIGEgc3RhdGljIGlmcmFtZSArIHBhdXNlZCB2aXJ0dWFsIHRpbWUgbGVhdmVzIHRoZVxuICAgICAgIGNvbXBvc2l0b3IncyBsYXN0IGZyYW1lIGNhY2hlZCBldmVuIGFmdGVyIGNhbnZhcyBkaXJ0aWVzOyBpbnZhbGlkYXRlKCkgb25seSByZS1lbWl0cyB0aGVcbiAgICAgICBjYWNoZWQgZnJhbWUuICovXG4gICAgLyogSGVhcnRiZWF0OiBpbnZpc2libGUgYWx3YXlzLW9uIHRpY2suIEZvcmNlcyBDaHJvbWl1bSBjb21wb3NpdG9yIHRvIGlzc3VlIEJlZ2luRnJhbWUgZWFjaFxuICAgICAgIHZpcnR1YWwgdGljayBvbiBvdGhlcndpc2Utc3RhdGljIHBhZ2VzIHNvIGNhbnZhcyNzdGVnbyBwdXRJbWFnZURhdGEgdXBkYXRlcyBsYW5kIGluIHRoZVxuICAgICAgIGNhcHR1cmVkIHBhaW50IGV2ZW50LiBXaXRob3V0IHRoaXMsIGEgc3RhdGljIGlmcmFtZSArIHBhdXNlZCB2aXJ0dWFsIHRpbWUgbGVhdmVzIHRoZVxuICAgICAgIGNvbXBvc2l0b3IncyBsYXN0IGZyYW1lIGNhY2hlZCBldmVuIGFmdGVyIGNhbnZhcyBkaXJ0aWVzOyBpbnZhbGlkYXRlKCkgb25seSByZS1lbWl0cyB0aGVcbiAgICAgICBjYWNoZWQgZnJhbWUuICovXG4gICAgQGtleWZyYW1lcyBwdXBfaGVhcnRiZWF0IHtcbiAgICAgIDAlIHsgb3BhY2l0eTogMC41OyB9XG4gICAgICAxMDAlIHsgb3BhY2l0eTogMTsgfVxuICAgIH1cbiAgICAjaGVhcnRiZWF0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgYmFja2dyb3VuZDogIzAwMDtcbiAgICAgIGFuaW1hdGlvbjogcHVwX2hlYXJ0YmVhdCAxcyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8ZGl2IGlkPVwiaGVhcnRiZWF0XCI+PC9kaXY+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBlbmNvZGVUaW1lc3RhbXAobXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzd2FwQnVmZmVyKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlciwgaW50ZXJ2YWw6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG4gIGF3YWl0IGFkdmFuY2VWaXJ0dWFsVGltZSh3Yy5kZWJ1Z2dlciwgaW50ZXJ2YWwpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzd2FwQnVmZmVyXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIGBwcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWRgIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5XG4vLyBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIHBsYWNlLiBOZXcgc2NoZW1lcyBtdXN0IGJlIGFkZGVkIHRvIFBSSVZJTEVHRURfU0NIRU1FUyBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICB0eXBlIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGcmFtZSxcbiAgdHlwZSBIYXJkd2FyZUZyYW1lc0NvbnRleHQsXG4gIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaHdGcmFtZXNDdHg/OiBIYXJkd2FyZUZyYW1lc0NvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSB7XG4gICAgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgfVxuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgfVxuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkge1xuICAgIGN0eC5od0ZyYW1lc0N0eCA9IG9wdHMuaHdGcmFtZXNDdHg7XG4gIH1cbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkge1xuICAgIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIH1cbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSB7XG4gICAgICBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICB9XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgdHlwZSBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSB7XG4gICAgICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICB9XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgfVxuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzcmNbaV0hKSkge1xuICAgICAgICBzcmNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykge1xuICAgICAgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICB9XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gICAgfVxuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkge1xuICAgICAgICB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gUGF0Y2ggTlZFTkMgb3V0cHV0IHRvIGNvbmZvcm0gdG8gQXBwbGUgSEVWQyBWaWRlbyB3aXRoIEFscGhhIEludGVyb3BlcmFiaWxpdHkgUHJvZmlsZS5cbi8vIFNwZWM6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG4vLyBTbGljZSBwYXJzZXIgaXMgY29uZmlnLWRyaXZlbjogTnZlbmNIZXZjQ29uZmlnIGZyb20gcGFyc2UudHMgZGVyaXZlcyBmbGFncyBhdCBlbmNvZGVyIGluaXQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBiaXRzdHJlYW07XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIH0gZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCB3aGVuIHNsaWNlIGhhcyBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X3Nwc19mbGFnPTAuXG4vLyBzdFJwc0lkeCA9IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyBzbyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgfVxuICAgIGJyLnJlYWQoMSk7IC8vIGRlbHRhX3Jwc19zaWduXG4gICAgYnIucmVhZFVlKCk7IC8vIGFic19kZWx0YV9ycHNfbWludXMxXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPD0gbnVtRGVsdGFQb2NzU2V0MDsgaisrKSB7XG4gICAgICBjb25zdCB1c2VkID0gYnIucmVhZCgxKTtcbiAgICAgIGlmICghdXNlZCkge1xuICAgICAgICBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIH1cbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHtcbiAgICAgIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICB9IGVsc2UgaWYgKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzID4gMSkge1xuICAgICAgYnIucmVhZChNYXRoLmNlaWwoTWF0aC5sb2cyKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzKSkpO1xuICAgIH1cbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICAgIH1cbiAgfVxuICBpZiAoY2ZnLnNhb0VuYWJsZWQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fbHVtYV9mbGFnXG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2Nocm9tYV9mbGFnXG4gIH1cbiAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9QIHx8IHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAob3ZlcnJpZGVGbGFnKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgICBici5yZWFkVWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgfVxuICAgIGlmIChjZmcuY2FiYWNJbml0UHJlc2VudCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gY2FiYWNfaW5pdF9mbGFnXG4gICAgfVxuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICB9XG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIH1cbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcbiAgfVxuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICB9XG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICB9XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIH1cbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkge1xuICAgIHJldHVybiB2cHNEYXRhO1xuICB9XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHJld3JpdGVBbHBoYVBwcywgcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIsIHJld3JpdGVBbHBoYVNwcyB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgZW5jb2RlTmFsSGVhZGVyLFxuICBOQUxfUFBTLFxuICBOQUxfU0VJX1BSRUZJWCxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgdHlwZSBOYWxVbml0LFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG4vLyBCR1JBIGFscGhhIOKGkiBZIHBsYW5lIG9mIHBhY2tlZCBZVVY0MjBQLiBDYWxsZXIgcHJlLWZpbGxzIFVWPTEyOC5cbi8vIFVpbnQzMiBwYXRoOiBCR1JBIExFIHUzMiA+Pj4gMjQgPSBBIGJ5dGUuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZTogRnJhbWUsIGJ1ZjogQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gIGlmICghc3JjIHx8ICFzcmNMcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIH1cbiAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gIGlmIChzcmMuYnl0ZU9mZnNldCAlIDQgPT09IDAgJiYgc3JjTHMgPT09IHcgKiA0KSB7XG4gICAgY29uc3Qgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHlTaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlTaXplOyBpKyspIHtcbiAgICAgIGJ1ZltpXSA9IHNyYzMyW2ldISA+Pj4gMjQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIGJ1Zltkc3RCYXNlICsgeF0gPSBzcmNbcm93QmFzZSArIHggKiA0XSE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBBcHBsZSBIRVZDIEFscGhhIFByb2ZpbGU6IGFscGhhIFNQUyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ9MSwgYWxwaGEgUFBTIHBpYytzZXEgaWQ9MS5cbmZ1bmN0aW9uIHJld3JpdGVBbHBoYVBhcmFtU2V0KHR5cGU6IG51bWJlciwgZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgaWYgKHR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICB9XG4gIGlmICh0eXBlID09PSBOQUxfUFBTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShvcHRzOiBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHsgYmFzZUV4dHJhZGF0YSwgYWxwaGFFeHRyYWRhdGEgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlRXh0cmFkYXRhKTtcbiAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYUV4dHJhZGF0YSk7XG5cbiAgY29uc3QgYWxwaGFCeVR5cGUgPSBuZXcgTWFwPG51bWJlciwgTmFsVW5pdFtdPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gICAgfVxuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkYyAoMCA9IHVuc3BlY2lmaWVkL3ByZW11bHRpcGxpZWQ7IG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgd3JpdGVCaXRzKDAsIDEpO1xuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCBOQUxfVlBTKSB7XG4gICAgICBjb25zdCBkYXRhID0gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIobmFsLmRhdGEsIG5hbC50eXBlLCBjZmcpO1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChkYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YsIHR5cGUgQVZQYWNrZXRGbGFnIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgeyBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBQZW5kaW5nUGFja2V0IHtcbiAgZGF0YTogQnVmZmVyO1xuICBwdHM6IGJpZ2ludDtcbiAgZHRzOiBiaWdpbnQ7XG4gIGR1cmF0aW9uOiBiaWdpbnQ7XG4gIGZsYWdzOiBBVlBhY2tldEZsYWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVhbExheWVyTXV4T3B0aW9ucyB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG4vLyBEcmFpbnMgdGhlIGJhc2UgKyBhbHBoYSBOVkVOQyBzZXNzaW9ucyBhbmQgd3JpdGVzIGludGVybGVhdmVkIEhFVkMtYWxwaGEgYWNjZXNzIHVuaXRzLlxuZXhwb3J0IGNsYXNzIER1YWxMYXllck11eCB7XG4gIHByaXZhdGUgX3M6IER1YWxMYXllck11eE9wdGlvbnM7XG4gIHByaXZhdGUgX2Jhc2VRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG4gIHByaXZhdGUgX2FscGhhUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHM6IER1YWxMYXllck11eE9wdGlvbnMpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0IH0gPSB0aGlzLl9zO1xuICAgIC8vIERyYWluIGVhY2ggc2Vzc2lvbiBmdWxseSDigJQgaW5kZXBlbmRlbnQgTlZFTkMgc2Vzc2lvbnMgcnVuIGEgZnJhbWUgYXBhcnQgdHJhbnNpZW50bHkuXG4gICAgdGhpcy5fYmFzZVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChiYXNlQ3R4LCBiYXNlUGt0LCBcImJhc2VcIikpKTtcbiAgICB0aGlzLl9hbHBoYVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChhbHBoYUN0eCwgYWxwaGFQa3QsIFwiYWxwaGFcIikpKTtcbiAgICAvLyBiZj0wIOKGkiBubyByZW9yZGVyOyBxdWV1ZSBpbmRleCBOIGlzIHRoZSBzYW1lIGZyYW1lIGZvciBib3RoLiBMZWZ0b3ZlciB3YWl0cyBmb3IgbmV4dCBkcmFpbi5cbiAgICB3aGlsZSAodGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiB0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy53cml0ZVBhaXIodGhpcy5fYmFzZVF1ZXVlLnNoaWZ0KCkhLCB0aGlzLl9hbHBoYVF1ZXVlLnNoaWZ0KCkhLCBtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gVW5wYWlyZWQgbGVmdG92ZXJzIGFmdGVyIEVPRiA9IHRydWUgYmFzZS9hbHBoYSBkZXN5bmM7IHJldHVybnMgYSBkZXNjcmlwdGlvbiwgZWxzZSB1bmRlZmluZWQuXG4gIGRlc3luY0FmdGVyRW9mKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmICF0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGBiYXNlPSR7dGhpcy5fYmFzZVF1ZXVlLmxlbmd0aH0sIGFscGhhPSR7dGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGh9IHVucGFpcmVkYDtcbiAgfVxuXG4gIC8vIEVBR0FJTi9FT0YgPSBub3JtYWwgc3RvcDsgYW55IG90aGVyIG5lZ2F0aXZlIGlzIGEgcmVhbCBmYXVsdCwgbm90IFwiZHJhaW5lZFwiLlxuICBwcml2YXRlIGFzeW5jIHJlY2VpdmVBbGwoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ1BhY2tldFtdPiB7XG4gICAgY29uc3Qgb3V0OiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgIGlmIChyZXQgPj0gMCkge1xuICAgICAgICBvdXQucHVzaCh0aGlzLnNuYXBzaG90KHBrdCkpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBBVkVSUk9SX0VBR0FJTiB8fCByZXQgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnJlY2VpdmVQYWNrZXRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNuYXBzaG90KHBrdDogUGFja2V0KTogUGVuZGluZ1BhY2tldCB7XG4gICAgLy8gcGt0LmRhdGEgaXMgbmF0aXZlIG1lbW9yeSBmcmVlZCBvbiB1bnJlZiDigJQgY29weSBiZWZvcmUgcXVldWVpbmcuXG4gICAgcmV0dXJuIHsgZGF0YTogQnVmZmVyLmZyb20ocGt0LmRhdGEhKSwgcHRzOiBwa3QucHRzLCBkdHM6IHBrdC5kdHMsIGR1cmF0aW9uOiBwa3QuZHVyYXRpb24sIGZsYWdzOiBwa3QuZmxhZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVQYWlyKGJhc2U6IFBlbmRpbmdQYWNrZXQsIGFscGhhOiBQZW5kaW5nUGFja2V0LCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGJhc2VDdHgsIHN0cmVhbSwgaGV2Y0NmZyB9ID0gdGhpcy5fcztcbiAgICAvLyBQYXRjaCBpbi1iYW5kIFZQUy9TUFMgUFRMIGJpdHMgZm9yIEFwcGxlLVZUQiBjb21wYXQgKGVuY29kZXIgcmVwZWF0cyBoZWFkZXJzIHBlciBJRFIpLlxuICAgIGNvbnN0IGludGVybGVhdmVkID0gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZS5kYXRhKSwgc3BsaXROYWxVbml0cyhhbHBoYS5kYXRhKSwgaGV2Y0NmZyk7XG4gICAgLy8gZGF0YSBzZXR0ZXIgd2lwZXMgcHRzL2R0cy9kdXJhdGlvbi9mbGFncyDigJQgcmVzdG9yZTsgZmxhZ3MnIEtFWSBiaXQgZHJpdmVzIG1vdiBzdHNzLlxuICAgIGJhc2VQa3QuZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKGludGVybGVhdmVkKTtcbiAgICBiYXNlUGt0LnB0cyA9IGJhc2UucHRzO1xuICAgIGJhc2VQa3QuZHRzID0gYmFzZS5kdHM7XG4gICAgYmFzZVBrdC5kdXJhdGlvbiA9IGJhc2UuZHVyYXRpb24gPT09IDBuID8gMW4gOiBiYXNlLmR1cmF0aW9uO1xuICAgIGJhc2VQa3QuZmxhZ3MgPSBiYXNlLmZsYWdzO1xuICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgYmFzZVBrdC5yZXNjYWxlVHMoYmFzZUN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcbiAgICBiYXNlUGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIFBhcnNlIE5WRU5DIFNQUy9QUFMgZXh0cmFkYXRhIGF0IGVuY29kZXIgaW5pdCB0byBkZXJpdmUgZmxhZ3MgdGhlIHNsaWNlIGhlYWRlciBwYXJzZXIgZGVwZW5kcyBvbi5cbi8vIERlZnVzZXMgZnJhZ2lsZSBoYXJkY29kZWQgYXNzdW1wdGlvbnM6IGlmIE5WRU5DIGRlZmF1bHRzIHNoaWZ0LCB0aHJvd3Mgd2l0aCBhY3Rpb25hYmxlIGVycm9yLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IE5BTF9QUFMsIE5BTF9TUFMsIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOdmVuY0hldmNDb25maWcge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47XG4gIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBmYWlsKGZpZWxkOiBzdHJpbmcsIGdvdDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBoZXZjX2FscGhhOiBOVkVOQyBTUFMvUFBTIHVuc3VwcG9ydGVkOiAke2ZpZWxkfT0ke2dvdH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9YCk7XG59XG5cbmZ1bmN0aW9uIHNraXBQdGwoYnI6IEJpdFJlYWRlciwgbWF4U3ViTGF5ZXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgYnIucmVhZCgyICsgMSArIDUpOyAvLyBwcm9maWxlX3NwYWNlLCB0aWVyLCBwcm9maWxlX2lkY1xuICBici5yZWFkKDMyKTsgLy8gcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdbMC4uMzFdXG4gIGJyLnJlYWQoNDgpOyAvLyA0IHNvdXJjZS9wYWNrZWQgZmxhZ3MgKyA0MyBjb25zdHJhaW50L3Jlc2VydmVkICsgMSBpbmJsZFxuICBici5yZWFkKDgpOyAvLyBsZXZlbF9pZGNcbiAgY29uc3Qgc3ViUHJvZmlsZVByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHN1YkxldmVsUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIHN1YlByb2ZpbGVQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gICAgc3ViTGV2ZWxQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgaWYgKG1heFN1YkxheWVycyA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gbWF4U3ViTGF5ZXJzOyBpIDwgODsgaSsrKSB7XG4gICAgICBici5yZWFkKDIpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgaWYgKHN1YlByb2ZpbGVQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDggKyAzMiArIDQ4KTtcbiAgICB9XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTcHMoc3BzUmJzcDogQnVmZmVyKToge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG59IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHNwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBtYXhTdWJMYXllcnMgPSBici5yZWFkKDMpO1xuICAvLyBhbHBoYV9kYXJ3aW4ucmV3cml0ZUFscGhhU3BzICsgdnBzLmV4dHJhY3RQVEwgaGFyZGNvZGUgOTYtYml0IFBUTCDigJQgb25seSB2YWxpZCB3aGVuIHN1Yl9sYXllcnM9MC5cbiAgaWYgKG1heFN1YkxheWVycyAhPT0gMCkge1xuICAgIGZhaWwoXCJzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxXCIsIG1heFN1YkxheWVycywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWdcbiAgc2tpcFB0bChiciwgbWF4U3ViTGF5ZXJzKTtcbiAgYnIucmVhZFVlKCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBjaHJvbWFGb3JtYXQgPSBici5yZWFkVWUoKTtcbiAgaWYgKGNocm9tYUZvcm1hdCA9PT0gMykge1xuICAgIGZhaWwoXCJjaHJvbWFfZm9ybWF0X2lkY1wiLCBjaHJvbWFGb3JtYXQsIFwi4omgM1wiKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc1xuICBici5yZWFkVWUoKTsgLy8gcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBjb25zdCBsb2cyTWF4UG9jTHNiID0gYnIucmVhZFVlKCkgKyA0O1xuICBjb25zdCBzdWJPcmRlckluZm8gPSBici5yZWFkKDEpO1xuICBjb25zdCBvcmRlckNvdW50ID0gc3ViT3JkZXJJbmZvID8gbWF4U3ViTGF5ZXJzICsgMSA6IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJDb3VudDsgaSsrKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gYW1wX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBzYW9FbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3QgbnVtU3RScHMgPSBici5yZWFkVWUoKTtcbiAgaWYgKG51bVN0UnBzID4gMSkge1xuICAgIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgfVxuICBsZXQgbnVtRGVsdGFQb2NzU2V0MCA9IDA7XG4gIGlmIChudW1TdFJwcyA9PT0gMSkge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIG51bURlbHRhUG9jc1NldDAgPSBudW1OZWcgKyBudW1Qb3M7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxvbmdUZXJtUmVmUGljc1ByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAobG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgIGZhaWwoXCJsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICByZXR1cm4ge1xuICAgIGxvZzJNYXhQb2NMc2IsXG4gICAgc2FvRW5hYmxlZCxcbiAgICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1TdFJwcyxcbiAgICBudW1EZWx0YVBvY3NTZXQwLFxuICAgIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQsXG4gICAgc3BzVGVtcG9yYWxNdnBFbmFibGVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBwcyhwcHNSYnNwOiBCdWZmZXIpOiB7IGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuIH0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocHBzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkKDEpOyAvLyBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZ1xuICBjb25zdCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cyA9IGJyLnJlYWQoMyk7XG4gIGlmIChudW1FeHRyYVNsaWNlSGVhZGVyQml0cyAhPT0gMCkge1xuICAgIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBjYWJhY0luaXRQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBpbml0X3FwX21pbnVzMjYgKHNlLCBidXQgdWUgcGFyc2VyIGZpbmUgdG8gYWR2YW5jZSlcbiAgYnIucmVhZCgxKTsgLy8gY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jYl9xcF9vZmZzZXRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jcl9xcF9vZmZzZXRcbiAgYnIucmVhZCgxKTsgLy8gcHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfYmlwcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWdcbiAgY29uc3QgcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBjb25zdCBkZWJsb2NraW5nQ29udHJvbFByZXNlbnQgPSBici5yZWFkKDEpO1xuICBsZXQgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGZhbHNlO1xuICBpZiAoZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50KSB7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnXG4gICAgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGJyLnJlYWQoMSkgPT09IDE7IC8vIHBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnXG4gICAgaWYgKCFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBpbiBzbGljZSBoZWFkZXIgaXMgcHJlc2VudCBpZmZcbiAgLy8gcHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBTUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgaWYgKCFwcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBQUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuLi92aWRlb3Rvb2xib3hcIjtcbmltcG9ydCB7IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBEdWFsTGF5ZXJNdXggfSBmcm9tIFwiLi9kdWFsX2xheWVyX211eFwiO1xuaW1wb3J0IHsgdHlwZSBOdmVuY0hldmNDb25maWcsIHBhcnNlTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBhbHBoYVN3RnJhbWU6IEZyYW1lO1xuICBhbHBoYUJ1ZjogQnVmZmVyO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfbXV4OiBEdWFsTGF5ZXJNdXg7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogTnZlbmNTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICAgIHRoaXMuX211eCA9IG5ldyBEdWFsTGF5ZXJNdXgoe1xuICAgICAgYmFzZUN0eDogcy5iYXNlQ3R4LFxuICAgICAgYWxwaGFDdHg6IHMuYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0OiBzLmJhc2VQa3QsXG4gICAgICBhbHBoYVBrdDogcy5hbHBoYVBrdCxcbiAgICAgIHN0cmVhbTogcy5zdHJlYW0sXG4gICAgICBoZXZjQ2ZnOiBzLmhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG4gICAgfVxuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCDigJQgTlZFTkMgY29udmVydHMgaW50ZXJuYWxseSwgbm8gQ1BVIFNXUywgbm8gaHdGcmFtZXNDdHggbmVlZGVkLlxuICAgIGNvbnN0IGJhc2VDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpO1xuXG4gICAgbGV0IGFscGhhQ3R4OiBDb2RlY0NvbnRleHQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJhc2VQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFTd0ZyYW1lOiBGcmFtZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgICBjb25zdCB1bmlmaWVkID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICB9KTtcbiAgICAgIC8vIEFwcGxlLVZUQiBjb21wYXQ6IHJld3JpdGUgVlBTK1NQUyBQVEwgYml0cyB0byBtYXRjaCB4MjY1L1ZUQiBvdXRwdXQgKHRpZXI9TWFpbiwgY29tcGF0WzJdPTEpLlxuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgLy8gWVVWNDIwUCBjaHJvbWEgcGxhbmVzIGFyZSBjZWlsKHcvMinDl2NlaWwoaC8yKTsgZmxvb3IgdW5kZXJmbG93cyBvbiBvZGQgZGltZW5zaW9ucy5cbiAgICAgIGNvbnN0IGNocm9tYVNpemUgPSAoKHdpZHRoICsgMSkgPj4gMSkgKiAoKGhlaWdodCArIDEpID4+IDEpO1xuICAgICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgICBhbHBoYUJ1Zi5maWxsKDEyOCwgeVNpemUpO1xuXG4gICAgICBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgYWxwaGFQa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICBhbHBoYVN3RnJhbWUgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKTtcblxuICAgICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgICBiYXNlQ3R4LFxuICAgICAgICBhbHBoYUN0eCxcbiAgICAgICAgYmFzZVBrdCxcbiAgICAgICAgYWxwaGFQa3QsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgICBhbHBoYUJ1ZixcbiAgICAgICAgaGV2Y0NmZyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFBhcnRpYWwgY29uc3RydWN0aW9uOiBlbmNvZGVyIG5ldmVyIHJldHVybmVkLCBzbyBbU3ltYm9sLmRpc3Bvc2VdIGlzIHVucmVhY2hhYmxlLlxuICAgICAgYmFzZVBrdD8uZnJlZSgpO1xuICAgICAgYWxwaGFQa3Q/LmZyZWUoKTtcbiAgICAgIGFscGhhU3dGcmFtZT8uZnJlZSgpO1xuICAgICAgYWxwaGFDdHg/LmZyZWVDb250ZXh0KCk7XG4gICAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUsIGFscGhhQnVmIH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgYWxwaGEgcGxhbmUgYmVmb3JlIGJhc2Uuc2VuZEZyYW1lIOKAlCB0aGUgZW5jb2RlciB1bnJlZnMgdGhlIGlucHV0IGZyYW1lLlxuICAgIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWUsIGFscGhhQnVmKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImFscGhhU3cubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUuZnJvbUJ1ZmZlcihhbHBoYUJ1ZiksIFwiYWxwaGFTdy5mcm9tQnVmZmVyXCIpO1xuICAgIGFscGhhU3dGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFTd0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYmFzZUN0eCwgXCJiYXNlXCIpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmFscGhhQ3R4LCBcImFscGhhXCIpO1xuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gICAgY29uc3QgZGVzeW5jID0gdGhpcy5fbXV4LmRlc3luY0FmdGVyRW9mKCk7XG4gICAgaWYgKGRlc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6ICR7ZGVzeW5jfWApO1xuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgd2hlbiBOVkVOQyBzZXNzaW9ucyBmcmVlZCBpbiBjcmVhdGlvbiBvcmRlci5cbiAgICAvLyBMSUZPIGRlc3Ryb3kgYXZvaWRzIHRoZSBzZWdmYXVsdC4gUGVyIE5WSURJQSBmb3J1bSAvdC8yNjk5NzQuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBBVlBpeGVsRm9ybWF0LCBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyBjb2RlYywgLi4ucmVzdCwgY29kZWNUYWcsIG9wdGlvbnM6IGNvZGVjT3B0cyB9LCBcInZpZGVvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIG1ha2VQYWNrZXQoKSwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgbGV0IHBrdDogUGFja2V0IHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgICBwa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gUGFydGlhbCBjb25zdHJ1Y3Rpb246IGVuY29kZXIgbmV2ZXIgcmV0dXJuZWQsIHNvIFtTeW1ib2wuZGlzcG9zZV0gaXMgdW5yZWFjaGFibGUuXG4gICAgICBwa3Q/LmZyZWUoKTtcbiAgICAgIGN0eC5mcmVlQ29udGV4dCgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKG9wdHM6IEh3VmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBzaGFyZWRIdyA/PyAoZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpKTtcbiAgY29uc3Qgb3duc0h3ID0gIXNoYXJlZEh3ICYmICEhaHc7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRGljdGlvbmFyeSwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIHR5cGUgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICAvLyArZmFzdHN0YXJ0IHJlbG9jYXRlcyBtb292IHRvIGZpbGUgZnJvbnQgb24gd3JpdGVUcmFpbGVyIHNvIHBsYXllcnMgY2FuIGJlZ2luIHBsYXliYWNrIGJlZm9yZSBmdWxsIGRvd25sb2FkLlxuICAgIHVzaW5nIG9wdHMgPSBEaWN0aW9uYXJ5LmZyb21PYmplY3QoeyBtb3ZmbGFnczogXCIrZmFzdHN0YXJ0XCIgfSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihvcHRzKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX29wZW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBBIGZhaWxlZC90cnVuY2F0ZWQgdHJhaWxlciB3cml0ZSBtdXN0IG5vdCBsZWFrIHRoZSBGRCArIG5hdGl2ZSBjb250ZXh0LlxuICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgRkZfRU5DT0RFUl9BQUMsXG4gIEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgdHlwZSBGRlZpZGVvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVId1ZpZGVvRW5jb2RlciwgdHlwZSBId0VuY29kZXIsIHR5cGUgVmlkZW9TZXR1cCB9IGZyb20gXCIuL2ZhY3RvcnlcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuY29uc3QgRkZfRU5DT0RFUl9MSUJWUFhfVlA5ID0gXCJsaWJ2cHgtdnA5XCIgYXMgRkZWaWRlb0VuY29kZXI7XG5cbmV4cG9ydCB0eXBlIFNpbmtLaW5kID0gXCJtcDRcIiB8IFwid2VibVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmtPcHRpb25zIHtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBraW5kOiBTaW5rS2luZDtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICB3aXRoQXVkaW86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjOiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuaW50ZXJmYWNlIFNpbmtTdGF0ZSB7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGF1ZGlvPzogQXVkaW9FbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIG93bnNIdzogYm9vbGVhbjtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG9wdHM6IFNpbmtPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgT3V0cHV0U2luayBpbXBsZW1lbnRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IFNpbmtTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFNpbmtTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGtpbmRGcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBTaW5rS2luZCB7XG4gICAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLndlYm1cIikpIHtcbiAgICAgIHJldHVybiBcIndlYm1cIjtcbiAgICB9XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLm1wNFwiKSB8fCBsb3dlci5lbmRzV2l0aChcIi5tb3ZcIikpIHtcbiAgICAgIHJldHVybiBcIm1wNFwiO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG91dHB1dCBleHRlbnNpb246ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogU2lua09wdGlvbnMpOiBQcm9taXNlPE91dHB1dFNpbms+IHtcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvcHRzLm91dEZpbGUpO1xuICAgIGNvbnN0IHZpZGVvID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIiA/IGF3YWl0IE91dHB1dFNpbmsubXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgT3V0cHV0U2luay53ZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCBPdXRwdXRTaW5rLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnZpZGVvLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHsgZGVhZGxpbmU6IFwicmVhbHRpbWVcIiwgXCJjcHUtdXNlZFwiOiBcIjhcIiwgXCJyb3ctbXRcIjogXCIxXCIsIHRocmVhZHM6IFwiMlwiIH0sXG4gICAgICBiaXRyYXRlOiA0XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksIG93bnNIdzogZmFsc2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGF1ZGlvRm9yKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIC8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbiAgICBjb25zdCBjZmcgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiXG4gICAgICAgID8geyBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLCBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDIH1cbiAgICAgICAgOiB7IG91dFNhbXBsZVJhdGU6IDQ4XzAwMCwgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQk9QVVMgfTtcbiAgICByZXR1cm4gQXVkaW9FbmNvZGVyLmNyZWF0ZSh7IC4uLmNmZywgZ2xvYmFsSGVhZGVyOiB0cnVlLCBiaXRyYXRlOiAxMjhfMDAwLCBtdXhlciB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbyA9IGZhbHNlLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlIH0gPSBvcHRzO1xuICAgIGNvbnN0IG91dEZpbGVzID0gb3V0RmlsZVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgocCkgPT4gcC50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChvdXRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm91dEZpbGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mub3B0cy53aWR0aCwgdGhpcy5fcy5vcHRzLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB0eXBlIHsgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgd2MuaXBjLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgd2MuaXBjLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBXaGVuIHByb3ZpZGVkLCB1c2VSZXRyeSBiYWlscyBvdXQgaW1tZWRpYXRlbHkgb24gYWJvcnQgaW5zdGVhZCBvZiByZXRyeWluZy4gVGhlIHNpZ25hbFxuICAvLyBpcyBub3QgYXV0by10aHJlYWRlZCBpbnRvIGZuIOKAlCBjYWxsZXIgbXVzdCB3aXJlIGl0IHdoZXJlIGl0IG1hdHRlcnMgKGUuZy4gZmV0Y2gsIFMzIHNlbmQpLlxuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4oe1xuICBmbixcbiAgbWF4QXR0ZW1wdHMgPSAzLFxuICB0aW1lb3V0LFxuICBzaWduYWwsXG59OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBBcmdzKSA9PiB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMiAqKiBhdHRlbXB0ICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IGAke3NvdXJjZS5zcGxpdChcIjpcIilbMF19OmA7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuY29uc3QgTE9DQUxfU0NIRU1FUyA9IFtcInB1cDpcIiwgXCJwdXAtZnJhbWU6XCIsIFwiZmlsZTpcIiwgXCJkYXRhOlwiLCBcImJsb2I6XCIsIFwiY2hyb21lLWV4dGVuc2lvbjpcIiwgXCJkZXZ0b29sczpcIl07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTY2hlbWUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBzIG9mIExPQ0FMX1NDSEVNRVMpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbiAgY2FuY2VsTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgY2FuY2VsTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIGlmIChjYW5jZWxNZWRpYSAmJiBkZXRhaWxzLnJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiKSB7XG4gICAgICBjYWxsYmFjayh7IGNhbmNlbDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xvY2FsU2NoZW1lKHVybCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhaXQoa2V5LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgaWYgKGNhbmNlbE1lZGlhICYmIGRldGFpbHMucmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCIgJiYgZGV0YWlscy5lcnJvciA9PT0gXCJuZXQ6OkVSUl9CTE9DS0VEX0JZX0NMSUVOVFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgcmVzb3VyY2VUeXBlOiBkZXRhaWxzLnJlc291cmNlVHlwZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHB1cEF1ZGlvUHJlbG9hZCwgcHVwSWZyYW1lUHJlbG9hZCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdGltZW91dE1zLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZG9tUmVhZHkgPSBmYWxzZTtcbiAgICAvLyBUb2xlcmFudCBwcm9jZWVkcyBvbiBhIHBhcnRpYWwgRE9NIG9ubHkgYXMgYSB0aW1lb3V0IGZhbGxiYWNrIOKAlCBzdGFydGluZyBvbiBiYXJlIGRvbS1yZWFkeSBsZWF2ZXMgdGhlIGxvYWQgcGVuZGluZyBhbmQgd2VkZ2VzIHZpcnR1YWwgdGltZS5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKHRvbGVyYW50ICYmIGRvbVJlYWR5ID8gdW5kZWZpbmVkIDogVElNRU9VVF9FUlJPUiksIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiB1bmtub3duKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGRvbmUoc2lnbmFsLnJlYXNvbiksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb21SZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiBwaWNrUHJlbG9hZChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZW5kZXJlci5kZXRlcm1pbmlzdGljKSB7XG4gICAgcmV0dXJuIHB1cElmcmFtZVByZWxvYWQ7XG4gIH1cbiAgaWYgKHJlbmRlcmVyLndpdGhBdWRpbykge1xuICAgIHJldHVybiBwdXBBdWRpb1ByZWxvYWQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHBpY2tQcmVsb2FkKHJlbmRlcmVyKSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5LCBjYW5jZWxNZWRpYTogcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIG1lc3NhZ2Uuc3RhcnRzV2l0aChgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVuZGVyZXIub25Db25zb2xlKGxldmVsLCBtZXNzYWdlKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHdpbixcbiAgICAgIGFjdGlvbjogKCkgPT4gd2luLmxvYWRVUkwodXJsKSxcbiAgICAgIHRpbWVvdXRNczogcmVuZGVyZXIud2luZG93VGltZW91dCAqIDEwMDAsXG4gICAgICB0b2xlcmFudCxcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuY29uc3Qgb3BlbldpbmRvd1dpdGhSZXRyeSA9IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCwgc2lnbmFsIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHNpZ25hbCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiBvcGVuV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgb25DcmVhdGVkLCBzaWduYWwsIHRvbGVyYW50OiByZW5kZXJlci53aW5kb3dUb2xlcmFudCB9KTtcblxuICBpZiAocmVuZGVyZXIud2luZG93VG9sZXJhbnQgJiYgZXJyb3IgPT09IFRJTUVPVVRfRVJST1IpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIGB3YXJtdXAgdGltZW91dDogJHtzb3VyY2V9LCBmYWxsaW5nIGJhY2sgdG8gZG9tLXJlYWR5YCk7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGVycm9yIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHdhcm11cCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG5cbiAgaWYgKHdhcm11cCkge1xuICAgIHdhcm11cC53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHdhcm11cCk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3YXJtdXApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgdXNpbmcgZW5jb2RlciA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgKyAxIH07XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVqZWN0ZXI6ICgocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBGcmFtZURyb3BTdGF0cyhmcHMpO1xuXG4gIGxldCBkaXNwb3NlQXVkaW86IEF1ZGlvRGlzcG9zYWwgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3csIHdyaXR0ZW49JHt3cml0dGVufSBzdHVjaz0ke3N0dWNrfWApO1xuICAgICAgICBzdHVjaysrO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlcmVuZGVyPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBsZXQgbGFzdEVycjogdW5rbm93bjtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbGFzdEVyciA9IGU7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGByZXRyeSAke2F0dGVtcHQgKyAxfS8ke01BWF9SRU5ERVJfQVRURU1QVFN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICB0aHJvdyBsYXN0RXJyO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGFib3J0YWJsZSB9IGZyb20gXCIuLi8uLi9iYXNlL3RpbWluZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb11cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlT3B0aW9ucyB7XG4gIGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQ7XG4gIHRpbWVzdGFtcE1zOiBudW1iZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBPbmx5IHRoZSBkZXRlcm1pbmlzdGljIHJlbmRlcmVyIChzaG9vdCkgZHJpdmVzIHRoaXM7IHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrIHZpYSByQUYgaW4gdGhlIHBhZ2UuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyh7IGZyYW1lLCB0aW1lc3RhbXBNcywgc2lnbmFsIH06IEFkdmFuY2VPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZnJhbWU/LnVybCkge1xuICAgIHJldHVybjtcbiAgfVxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIHRyeSB7XG4gICAgLy8gU291cmNlIG9wZW5zIGFyZSB3YWxsLXRpbWUgYXN5bmM7IHNldHRsZSB0aGVtIGZpcnN0IHNvIHZpcnR1YWwgdGltZSBjYW4ndCBzdGVwIG9udG8gYSBibGFuaywgbm90LXlldC1vcGVuZWQgPHZpZGVvPi5cbiAgICBhd2FpdCBhYm9ydGFibGUoZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYHdpbmRvdy5fX3B1cF92aWRlb19fJiZ3aW5kb3cuX19wdXBfdmlkZW9fXy5yZWFkeSgpYCksIHNpZ25hbCk7XG4gICAgLy8gTm8gd2FsbC1jbG9jayBjYXA6IGEgc2xvdyBmZXRjaCBkZWxheXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgZHJvcHBpbmcgaXQsIGtlZXBpbmcgLWQgb3V0cHV0IGRldGVybWluaXN0aWMuXG4gICAgYXdhaXQgYWJvcnRhYmxlKFxuICAgICAgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYHdpbmRvdy5fX3B1cF92aWRlb19fJiZ3aW5kb3cuX19wdXBfdmlkZW9fXy5hZHZhbmNlKCR7dGltZXN0YW1wTXN9KWApLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQWR2YW5jZU9wdGlvbnMsIGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9hZHZhbmNlXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGFyZ3M6IEFkdmFuY2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgZnJhbWUsIHRpbWVzdGFtcE1zIH0gPSBhcmdzO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhhcmdzKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yMy5cblxuaW1wb3J0IHsgRGVtdXhlciwgdHlwZSBEZW11eGVyT3B0aW9ucyB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuXG4vLyBmZm1wZWcgcmVhZC93cml0ZSBkZWFkbGluZSAowrVzKTsgYSBibG9ja2luZyBvcGVuIGlnbm9yZXMgQWJvcnRTaWduYWwsIHNvIHRoaXMgYm91bmRzIGEgc3R1Y2sgQ0ROLlxuY29uc3QgUldfVElNRU9VVF9VUyA9IFwiODAwMDAwMFwiO1xuXG4vLyBmZm1wZWcgb3BlbnMgaHR0cC9odHRwcyB3aXRoIG5hdGl2ZSBieXRlLXJhbmdlIHJlcXVlc3RzLCBzbyBvbmx5IHRoZSBkZWNvZGVkIHJhbmdlcyBkb3dubG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSW5wdXQoc3JjOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZW11eGVyPiB7XG4gIGNvbnN0IG9wdGlvbnM6IERlbXV4ZXJPcHRpb25zID0geyBzaWduYWwsIG9wdGlvbnM6IHsgcndfdGltZW91dDogUldfVElNRU9VVF9VUyB9IH07XG4gIHJldHVybiBEZW11eGVyLm9wZW4oc3JjLCBvcHRpb25zKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjUuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgRGVjb2RlciwgRmlsdGVyQVBJIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlZEZyYW1lIHtcbiAgaWR4OiBudW1iZXI7XG4gIGJ1ZjogQnVmZmVyO1xufVxuXG4vLyBEZWNvZGUgYSBzb3VyY2UgdG8gZnBzLXJlc2FtcGxlZCwgZGlzcGxheS1zY2FsZWQsIHRpZ2h0LVJHQkEgZnJhbWVzIGluIG9yZGVyIChpZHggPSAxLWJhc2VkIGRlY29kZSBwb3NpdGlvbikuIENvbnN1bWVyIGJhY2twcmVzc3VyZSBpcyBqdXN0IHB1bGxpbmcgc2xvd2VyLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBkZWNvZGVGcmFtZXMoc3JjOiBzdHJpbmcsIG1ldGE6IFZpZGVvTWV0YSwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IEFzeW5jR2VuZXJhdG9yPERlY29kZWRGcmFtZT4ge1xuICBhd2FpdCB1c2luZyBpbnB1dCA9IGF3YWl0IG9wZW5JbnB1dChzcmMsIHNpZ25hbCk7XG4gIGNvbnN0IHN0cmVhbSA9IGlucHV0LnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgc2lnbmFsIH0pO1xuICBjb25zdCB7IGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG1ldGE7XG4gIGNvbnN0IHNjYWxlID0gZnJhbWVXaWR0aCAhPT0gd2lkdGggfHwgZnJhbWVIZWlnaHQgIT09IGhlaWdodCA/IGBzY2FsZT0ke2ZyYW1lV2lkdGh9OiR7ZnJhbWVIZWlnaHR9LGAgOiBcIlwiO1xuICB1c2luZyBmaWx0ZXIgPSBGaWx0ZXJBUEkuY3JlYXRlKGBmcHM9JHtmcHN9LCR7c2NhbGV9Zm9ybWF0PXJnYmFgLCB7IHNpZ25hbCB9KTtcbiAgbGV0IGsgPSAwO1xuICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGZpbHRlci5mcmFtZXMoZGVjLmZyYW1lcyhpbnB1dC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpKSkge1xuICAgIGlmICghZnJhbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB5aWVsZCB7IGlkeDogKytrLCBidWY6IHBhY2tSZ2JhKGZyYW1lKSB9O1xuICB9XG59XG5cbi8vIFRpZ2h0IFJHQkEgY29weSAoZHJvcCBsaWJhdiByb3cgcGFkZGluZykgc28gdGhlIHBhZ2UgY2FuIHdyYXAgaXQgc3RyYWlnaHQgaW50byBJbWFnZURhdGEuXG5mdW5jdGlvbiBwYWNrUmdiYShmcmFtZTogRnJhbWUpOiBCdWZmZXIge1xuICBjb25zdCByb3cgPSBmcmFtZS53aWR0aCAqIDQ7XG4gIGNvbnN0IHN0cmlkZSA9IGZyYW1lLmxpbmVzaXplWzBdITtcbiAgY29uc3Qgc3JjID0gZnJhbWUuZGF0YSFbMF0hO1xuICBpZiAoc3RyaWRlID09PSByb3cpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3JjLnN1YmFycmF5KDAsIHJvdyAqIGZyYW1lLmhlaWdodCkpO1xuICB9XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShyb3cgKiBmcmFtZS5oZWlnaHQpO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGZyYW1lLmhlaWdodDsgeSsrKSB7XG4gICAgc3JjLmNvcHkob3V0LCB5ICogcm93LCB5ICogc3RyaWRlLCB5ICogc3RyaWRlICsgcm93KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZGVjb2RlRnJhbWVzIH0gZnJvbSBcIi4vZGVjb2RlXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltEZWNvZGVTZXNzaW9uXVwiO1xuY29uc3QgREVDT0RFX0FIRUFEID0gNDsgLy8gZGVjb2RlIGEgZmV3IGZyYW1lcyBwYXN0IHRoZSBoaWdoZXN0IHJlcXVlc3Q7IHRoZSBwYWdlIGFscmVhZHkgcHJlZmV0Y2hlc1xuY29uc3QgS0VFUF9CRUhJTkQgPSAxNjsgLy8gbWluIGZyYW1lcyBoZWxkIGJlaGluZCB0aGUgaGVhZDsgbXVzdCBleGNlZWQgdGhlIHBhZ2UncyBwcmVmZXRjaCBsZWFkIChBSEVBRD0xMClcbmNvbnN0IE1FTU9SWV9CVURHRVQgPSAyNTYgKiAxMDI0ICogMTAyNDsgLy8gcmV0YWluIGRlY29kZWQgZnJhbWVzIHVwIHRvIHRoaXMgcGVyLXNlc3Npb24gYnVkZ2V0IHNvIGEgc21hbGwgbG9vcGluZyB2aWRlbyByZS1zZXJ2ZXMgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiByZS1kZWNvZGluZ1xuY29uc3QgTUFYX1BBU1NfUkVUUlkgPSAzOyAvLyByZS1vcGVuIGEgc3RyZWFtZWQgc291cmNlIHRoaXMgbWFueSB0aW1lcyBvbiBhIHRyYW5zaWVudCBkZWNvZGUgZXJyb3IgYmVmb3JlIHJlcG9ydGluZyBlbmQtb2Ytc3RyZWFtXG5cbmludGVyZmFjZSBXYWl0ZXIge1xuICBpZHg6IG51bWJlcjtcbiAgcmVzb2x2ZTogKGI6IEJ1ZmZlcikgPT4gdm9pZDtcbn1cblxuLy8gRGVtYW5kLWRyaXZlbiBpbi1wcm9jZXNzIGRlY29kZSAoRGVtdXhlcuKGkkRlY29kZXLihpJmcHMvc2NhbGUvcmdiYSBmaWx0ZXIpIHNlcnZpbmcgZnJhbWUgTiBhcyB0aWdodCBSR0JBOyBmb3J3YXJkLW9ubHkg4oCUIGEgbG9vcC9yZXdpbmQgcmUtZGVjb2RlcyBmcm9tIGZyYW1lIDEgdW5sZXNzIHRoZSB3aG9sZSBjbGlwIHN0aWxsIGZpdHMgdGhlIG1lbW9yeSBidWRnZXQuXG5leHBvcnQgY2xhc3MgRGVjb2RlU2Vzc2lvbiB7XG4gIHByaXZhdGUgX2J1ZiA9IG5ldyBNYXA8bnVtYmVyLCBCdWZmZXI+KCk7XG4gIHByaXZhdGUgX3JlYWR5ID0gMDtcbiAgcHJpdmF0ZSBfd2FudCA9IDE7XG4gIHByaXZhdGUgX2RvbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgX2dlbiA9IDA7XG4gIHByaXZhdGUgX2N0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgX3dhaXRlcnMgPSBuZXcgU2V0PFdhaXRlcj4oKTtcbiAgcHJpdmF0ZSBfcmVzdW1lOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Jlc3RhcnQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgLy8gTGVhZCBmcmFtZXMgaGVsZCBvbiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBjb250ZW50IGlkeCBpcyBvZmZzZXQgcGFzdCB0aGVtLlxuICBwcml2YXRlIHJlYWRvbmx5IF9sZWFkRnJhbWVzOiBudW1iZXI7XG4gIC8vIEZyYW1lcyBrZXB0IGJlaGluZCB0aGUgaGVhZDsgYSBjbGlwIHRoYXQgZml0cyB0aGUgYnVkZ2V0IHJldGFpbnMgZXZlcnkgZnJhbWUsIHNvIGxvb3BzIHJlLXNlcnZlIGZyb20gbWVtb3J5LlxuICBwcml2YXRlIHJlYWRvbmx5IF9rZWVwQ291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHZvaWQgdGhpcy5wdW1wKCk7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKGlkeCA8IDEpIHtcbiAgICAgIGlkeCA9IDE7XG4gICAgfVxuICAgIGlmIChpZHggPD0gdGhpcy5fbGVhZEZyYW1lcykge1xuICAgICAgaWR4ID0gdGhpcy5fbGVhZEZyYW1lcyArIDE7IC8vIGhvbGQgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZSBhY3Jvc3MgdGhlIGxlYWRcbiAgICB9XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIH1cbiAgICBpZiAoaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIC8vIGZvcndhcmQsIG5vdCB5ZXQgZGVjb2RlZCBpbiB0aGlzIHBhc3NcbiAgICAgIGlmIChpZHggPiB0aGlzLl93YW50KSB7XG4gICAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB9XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZpY3RlZCAobG9vcC9yZXdpbmQpOiBjbGVhciByZWFkeS9kb25lIHN5bmNocm9ub3VzbHkgc28gdGhlIHdyYXAncyBwcmVmZXRjaCBidXJzdCBjb2FsZXNjZXMgaW50byBvbmUgcmVzdGFydCwgbm90IG9uZSBwZXIgZnJhbWUuXG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWl0KGlkeCk7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgIHRoaXMuX2N0cmwuYWJvcnQoKTtcbiAgICB0aGlzLndha2UoKTtcbiAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIHcucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgIH1cbiAgICB0aGlzLl93YWl0ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gIH1cblxuICAvLyAtZC1vbmx5IHN1YnN5c3RlbSwgc28gbmV2ZXIgdGltZSBvdXQ6IGRyYWluV2FpdGVycyByZXNvbHZlcyBvbiBkZWNvZGUsIEVPRiwgb3IgY2xvc2Ug4oCUIG91dHB1dCBuZXZlciBkZXBlbmRzIG9uIGZldGNoIGxhdGVuY3kuXG4gIHByaXZhdGUgd2FpdChpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUpID0+IHRoaXMuX3dhaXRlcnMuYWRkKHsgaWR4LCByZXNvbHZlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgd2FrZSgpOiB2b2lkIHtcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdW1lO1xuICAgIHRoaXMuX3Jlc3VtZSA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgfVxuXG4gIC8vIEludmFsaWRhdGUgdGhlIHJ1bm5pbmcgcGFzcyAob3Igd2FrZSBhIHBhcmtlZCBvbmUpIHNvIHB1bXAoKSBzdGFydHMgYSBmcmVzaCBkZWNvZGUgZnJvbSBmcmFtZSAxLlxuICBwcml2YXRlIHJlcXVlc3RSZXN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX2dlbisrO1xuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN0YXJ0O1xuICAgIHRoaXMuX3Jlc3RhcnQgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gICAgdGhpcy53YWtlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHB1bXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGZhaWxzID0gMDtcbiAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCkge1xuICAgICAgY29uc3QgZ2VuID0gdGhpcy5fZ2VuO1xuICAgICAgdGhpcy5fcmVhZHkgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gICAgICBsZXQgZmFpbGVkID0gZmFsc2U7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlY29kZVBhc3MoZ2VuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4pIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgVEFHLFxuICAgICAgICAgICAgYFske3RoaXMubWV0YS5pZC5zbGljZSgwLCA4KX1dIGRlY29kZSBwYXNzIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIGZhaWxzID0gMDtcbiAgICAgICAgY29udGludWU7IC8vIHJlc3RhcnQgcmVxdWVzdGVkIG1pZC1wYXNzXG4gICAgICB9XG4gICAgICAvLyBBIHRocm93biBwYXNzIGlzIGEgdHJhbnNpZW50IHNvdXJjZSBlcnJvciAoZS5nLiBhIHN0cmVhbWVkIGxvb3AgcmUtb3Blbik7IHJldHJ5IGluc3RlYWQgb2YgcmVwb3J0aW5nIEVPRiwgd2hpY2ggd291bGQgYmxhbmsgdGhlIGZyYW1lLlxuICAgICAgaWYgKGZhaWxlZCAmJiArK2ZhaWxzIDw9IE1BWF9QQVNTX1JFVFJZKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmFpbHMgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgYXdhaXQgdGhpcy51bnRpbFJlc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlY29kZVBhc3MoZ2VuOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBkZWNvZGVGcmFtZXModGhpcy5fc3JjLCB0aGlzLm1ldGEsIHRoaXMuX2N0cmwuc2lnbmFsKSkge1xuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhdCA9IHRoaXMuX2xlYWRGcmFtZXMgKyBpZHg7IC8vIG1hcCBkZWNvZGUgcG9zaXRpb24gcGFzdCB0aGUgaGVsZCBsZWFkLWdhcCBmcmFtZXNcbiAgICAgIHdoaWxlICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuICYmIGF0ID4gdGhpcy5fd2FudCArIERFQ09ERV9BSEVBRCkge1xuICAgICAgICBhd2FpdCB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1Zi5zZXQoYXQsIGJ1Zik7XG4gICAgICB0aGlzLl9yZWFkeSA9IGF0O1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdW1lID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBhcmsgdW50aWwgYSBsb29wL2JhY2t3YXJkIHJlcXVlc3QgKG9yIGNsb3NlKSBjYWxscyByZXF1ZXN0UmVzdGFydCgpLlxuICBwcml2YXRlIHVudGlsUmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdGFydCA9IHI7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2aWN0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZsb29yID0gdGhpcy5fd2FudCAtIHRoaXMuX2tlZXBDb3VudDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5fYnVmLmtleXMoKSkge1xuICAgICAgaWYgKGsgPCBmbG9vcikge1xuICAgICAgICB0aGlzLl9idWYuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5XYWl0ZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnRoaXMuX3dhaXRlcnNdKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLl9idWYuZ2V0KGVudHJ5LmlkeCk7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShoaXQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgRGVjb2RlciB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmNvbnN0IFBST0JFX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9iZVJlc3VsdCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogUFRTIChzKSBvZiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBhIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBydW4gaXMgaGVsZCBvbiBpdCwgbGlrZSBDaHJvbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KFBST0JFX1RJTUVPVVRfTVMpO1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgb3BlbklucHV0KHNyYywgc2lnbmFsKTtcbiAgY29uc3Qgc3RyZWFtID0gZC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9iZTogbm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIGNvbnN0IGR1cmF0aW9uID0gZC5kdXJhdGlvbiA+IDAgPyBkLmR1cmF0aW9uIDogMDtcbiAgY29uc3QgdGIgPSBzdHJlYW0udGltZUJhc2UubnVtIC8gc3RyZWFtLnRpbWVCYXNlLmRlbjtcbiAgdXNpbmcgZGVjID0gYXdhaXQgRGVjb2Rlci5jcmVhdGUoc3RyZWFtLCB7IHRocmVhZENvdW50OiAxLCBzaWduYWwgfSk7XG4gIGxldCBsZWFkR2FwID0gMDtcbiAgLy8gRmlyc3QgY2xlYW4gZnJhbWUncyBQVFMgPSB3aGVyZSBjb250ZW50IGJlZ2luczsgc2tpcCBjb3JydXB0IGZyYW1lcyBsaWtlIGEgYnJvd3Nlci5cbiAgb3V0ZXI6IGZvciBhd2FpdCAodXNpbmcgcGt0IG9mIGQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZGVjLmZyYW1lcyhwa3QpKSB7XG4gICAgICAgIGlmIChmcmFtZT8uZGVjb2RlRXJyb3JGbGFncyAhPT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxlYWRHYXAgPSBNYXRoLm1heCgwLCBOdW1iZXIoZnJhbWUucHRzKSAqIHRiKTtcbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBjb3JydXB0IHBhY2tldCDigJQgc2tpcCB0byB0aGUgbmV4dFxuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogc3RyZWFtLmNvZGVjcGFyLndpZHRoLCBoZWlnaHQ6IHN0cmVhbS5jb2RlY3Bhci5oZWlnaHQsIGR1cmF0aW9uLCBsZWFkR2FwIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBEZWNvZGVTZXNzaW9uIH0gZnJvbSBcIi4vZGVjb2RlX3Nlc3Npb25cIjtcbmltcG9ydCB7IHByb2JlIH0gZnJvbSBcIi4vcHJvYmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBjb250ZW50IGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICAvKiogRGlzcGxheS1ib3ggcGl4ZWxzIChjYW52YXMgYmFja2luZyBzdG9yZSk7IGRlY29kZSBpcyBkb3duc2NhbGVkIHRvIGNvdmVyIHRoaXMsIG5ldmVyIHVwc2NhbGVkLiAqL1xuICBkc3RXPzogbnVtYmVyO1xuICBkc3RIPzogbnVtYmVyO1xuICAvKiogb2JqZWN0Rml0OyBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscyBzbyBpdCBza2lwcyBkb3duc2NhbGUuICovXG4gIGZpdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVudHJ5IHtcbiAgc2Vzc2lvbjogRGVjb2RlU2Vzc2lvbjtcbiAgcmVmczogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIF9zZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG5cbiAgLy8gY2xvc2VkLWNoZWNrZWQgYWZ0ZXIgcHJvYmUgc28gY2xvc2VBbGwoKSBjYW4ndCByYWNlIGEgc2xvdyBvcGVuIGludG8gYSBsZWFrZWQgc2Vzc2lvbi5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0ga2V5KG9wdHMpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgaGl0LnJlZnMrKztcbiAgICAgIHJldHVybiBoaXQuc2Vzc2lvbi5tZXRhO1xuICAgIH1cbiAgICBjb25zdCBpbmZvID0gYXdhaXQgcHJvYmUob3B0cy5zcmMpO1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBsZXQgZnJhbWVXaWR0aCA9IGluZm8ud2lkdGg7XG4gICAgbGV0IGZyYW1lSGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgLy8gRG93bnNjYWxlIHRvIGNvdmVyIHRoZSBkaXNwbGF5IGJveCAobmV2ZXIgdXBzY2FsZSk7IG9iamVjdEZpdCBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscy5cbiAgICBpZiAob3B0cy5kc3RXICYmIG9wdHMuZHN0SCAmJiBvcHRzLmZpdCAhPT0gXCJub25lXCIpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbigxLCBNYXRoLm1heChvcHRzLmRzdFcgLyBpbmZvLndpZHRoLCBvcHRzLmRzdEggLyBpbmZvLmhlaWdodCkpO1xuICAgICAgZnJhbWVXaWR0aCA9IGV2ZW4oaW5mby53aWR0aCAqIHMpO1xuICAgICAgZnJhbWVIZWlnaHQgPSBldmVuKGluZm8uaGVpZ2h0ICogcyk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHtcbiAgICAgIGlkLFxuICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aCxcbiAgICAgIGZyYW1lSGVpZ2h0LFxuICAgICAgZnBzOiBvcHRzLmZwcyxcbiAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgbGVhZEdhcDogaW5mby5sZWFkR2FwLFxuICAgIH07XG4gICAgdGhpcy5fc2Vzc2lvbnMuc2V0KGlkLCB7IHNlc3Npb246IG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIG9wdHMuc3JjKSwgcmVmczogMSB9KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIGdldEZyYW1lKGlkOiBzdHJpbmcsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuc2Vzc2lvbi5nZXRGcmFtZShpZHgpO1xuICB9XG5cbiAgY2xvc2UoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoLS1lLnJlZnMgPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUuc2Vzc2lvbi5jbG9zZSgpO1xuICAgIHRoaXMuX3Nlc3Npb25zLmRlbGV0ZShpZCk7XG4gIH1cblxuICBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3QgWywgZV0gb2YgdGhpcy5fc2Vzc2lvbnMpIHtcbiAgICAgIGUuc2Vzc2lvbi5jbG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGtleShvcHRzOiBPcGVuT3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKVxuICAgIC51cGRhdGUoYCR7b3B0cy5zcmN9fCR7b3B0cy5mcHN9fCR7b3B0cy5kc3RXID8/IFwiXCJ9fCR7b3B0cy5kc3RIID8/IFwiXCJ9fCR7b3B0cy5maXQgPz8gXCJcIn1gKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8vIFJvdW5kIGRvd24gdG8gYW4gZXZlbiBpbnRlZ2VyICjiiaUyKSBmb3IgdGhlIHNjYWxlci5cbmZ1bmN0aW9uIGV2ZW4objogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgciA9IE1hdGgucm91bmQobik7XG4gIHJldHVybiBNYXRoLm1heCgyLCByIC0gKHIgJSAyKSk7XG59XG5cbmV4cG9ydCBjb25zdCBmcmFtZVNlcnZlciA9IG5ldyBGcmFtZVNlcnZlcigpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93LCBFdmVudCwgTmF0aXZlSW1hZ2UsIFJlY3RhbmdsZSwgU2l6ZSwgV2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwYXVzZVZpcnR1YWxUaW1lLCByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzd2FwQnVmZmVyIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyBmcmFtZVNlcnZlciB9IGZyb20gXCIuL3ZpZGVvL2ZyYW1lX3NlcnZlclwiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcblxuaW50ZXJmYWNlIFBhaW50T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIHNpemU6IFNpemU7XG4gIG1zOiBudW1iZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KHsgc291cmNlLCB3aW4sIHNpemUsIG1zIH06IFBhaW50T3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGxldCBsYXN0VHM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHN0dWNrID0gMDtcbiAgbGV0IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgMSB9O1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJkcmF3YWJsZSB0aW1lb3V0XCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3R1Y2srKztcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IHJlbmRlciBpcyBleHRyZW1lbHkgc2xvdyBAICR7bXN9LCBjdXJyZW50OiAke2xhc3RUc30gd2l0aCAke3N0dWNrfSByZXBlYXRzYCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5pbnZhbGlkYXRlKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IEV2ZW50PFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcz4sIF9kOiBSZWN0YW5nbGUsIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlU2l6ZSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIGxhc3RUcyA9IHRzO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgICAgICAvLyBDb21wb3NpdG9yIGNhcCwgTk9UIG91dHB1dCBmcHMuIE1heCBpdCBzbyBwYWludCBldmVudHMgYXJyaXZlIHdpdGhvdXQgaW50ZXItZnJhbWUgd2FsbCBkZWxheS5cbiAgICAgICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZSgyNDApO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG5cbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBwZXJmb3JtYW5jZS5ub3coKSAtIHRJbml0IH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgYXdhaXQgdGljayh7IGZyYW1lOiBpZnJhbWUsIHRpbWVzdGFtcE1zOiBmcmFtZU1zLCBzaWduYWwgfSk7XG4gICAgICBhd2FpdCBzd2FwQnVmZmVyKHdpbi53ZWJDb250ZW50cywgZnJhbWVNcywgZnJhbWVJbnRlcnZhbCk7XG4gICAgICBjb25zdCBiaXRtYXAgPSBhd2FpdCBwYWludCh7IHNvdXJjZSwgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICAvLyBFbmNvZGUgd2l0aG91dCBhd2FpdGluZyAobGltaXRlciBzZXJpYWxpemVzKSwgc28gaXQgb3ZlcmxhcHMgdGhlIG5leHQgZnJhbWUncyBDRFAvcGFpbnQgc2V0dXAuXG4gICAgICBwaXBlbGluZS5lbmNvZGVCR1JBKGJpdG1hcCkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICAgICAgd3JpdHRlbisrO1xuICAgICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICAgIHRocm93IGVuY29kZUVycm9yO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWVTZXJ2ZXIuY2xvc2VBbGwoKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgfVxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiAwLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBmcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBGcmFtZVByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmV0dXJuIGpzb25PayhcbiAgICAgICAgICAgIGF3YWl0IGZyYW1lU2VydmVyLm9wZW4oe1xuICAgICAgICAgICAgICBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsXG4gICAgICAgICAgICAgIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApLFxuICAgICAgICAgICAgICBkc3RXOiBpbnQodXJsLCBcIndcIiwgMCksXG4gICAgICAgICAgICAgIGRzdEg6IGludCh1cmwsIFwiaFwiLCAwKSxcbiAgICAgICAgICAgICAgZml0OiB1cmwuc2VhcmNoUGFyYW1zLmdldChcImZpdFwiKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZnJhbWVcIjpcbiAgICAgICAgICByZXR1cm4gcmdiYU9rKGF3YWl0IGZyYW1lU2VydmVyLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKTtcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgICAgZnJhbWVTZXJ2ZXIuY2xvc2UodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGB1bmtub3duIGFjdGlvbjogJHt1cmwuaG9zdG5hbWV9YCwgeyBzdGF0dXM6IDQwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobXNnLCB7IHN0YXR1czogNTAwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuLy8gUmF3IFJHQkEgcGl4ZWxzOyB0aGUgcGFnZSB3cmFwcyB0aGVtIGluIEltYWdlRGF0YSB1c2luZyBtZXRhLndpZHRoL2hlaWdodCBpdCBnb3QgZnJvbSBgb3BlbmAuXG5mdW5jdGlvbiByZ2JhT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiA0MTAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgfVxuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLCBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnQodXJsOiBVUkwsIGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgdiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG4gIGNvbnN0IG4gPSB2ID8gcGFyc2VJbnQodiwgMTApIDogTmFOO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyB0eXBlIElwY01zZywgSXBjTXNnVHlwZSwgSXBjV3JpdGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgd2l0aFJlcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVyZW5kZXJcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcbmltcG9ydCB7IHNldHVwRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3ZpZGVvL3Byb3RvY29sXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ2FuY2VsKSB7XG4gICAgY3RybC5hYm9ydChtc2cucmVhc29uKTtcbiAgfVxufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHNldHVwRnJhbWVQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aFJlcmVuZGVyKGN0cmwuc2lnbmFsLCAoKSA9PlxuICAgICAgICBhY3Rpb24oe1xuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHNpZ25hbDogY3RybC5zaWduYWwsXG4gICAgICAgICAgb25Qcm9ncmVzczogKHApID0+IGlwYy53cml0ZVByb2dyZXNzKHApLFxuICAgICAgICAgIG9uQ29uc29sZTogKGwsIG0pID0+IGlwYy53cml0ZUNvbnNvbGUobCwgbSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZURvbmUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19