pup-recorder 0.2.6 → 0.2.8

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.
@@ -1,2 +0,0 @@
1
- import'source-map-support/register.js';import {createRequire}from'module';import {dirname,join}from'path';import {Log,FormatContext,FFmpegError,SoftwareScaleContext,Frame,Codec,CodecContext,Rational,Packet,FilterGraph,Filter,FilterInOut}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING,FF_ENCODER_LIBX265,FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,AV_PIX_FMT_BGRA,AV_PIX_FMT_YUVA420P,SWS_BILINEAR,AV_CODEC_FLAG_GLOBAL_HEADER,AVERROR_EAGAIN,AVERROR_EOF,AV_CHANNEL_LAYOUT_STEREO,AV_SAMPLE_FMT_FLT}from'node-av/constants';import {spawn}from'child_process';import x from'zod';import {randomUUID}from'crypto';import {rmSync}from'fs';import {readdir,readFile,mkdir,open,stat}from'fs/promises';import {platform,tmpdir}from'os';import dr from'tree-kill';import {ok}from'assert';import rr from'electron';import {fileURLToPath}from'url';import {graphics}from'systeminformation';var at=Object.create;var J=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var U=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),R=r=>{throw TypeError(r)};var be=(r,e,t)=>e in r?J(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Fe=r=>[,,,at(null)],ve=["class","method","getter","setter","accessor","field","value","get","set"],N=r=>r!==void 0&&typeof r!="function"?R("Function expected"):r,ct=(r,e,t,o,n)=>({kind:ve[r],name:e,metadata:o,addInitializer:i=>t._?R("Already initialized"):n.push(N(i||null))}),Q=(r,e)=>be(e,U("metadata"),r[3]),xe=(r,e,t,o)=>{for(var n=0,i=r[e>>1],a=i&&i.length;n<a;n++)i[n].call(t);return o},O=(r,e,t,o,n,i)=>{var s,u,c,m,d=e&7,p=false,l=false,b=2,f=ve[d+5],y=r[b]||(r[b]=[]),F=((n=n.prototype),st(n,t));for(var L=o.length-1;L>=0;L--)c=ct(d,t,u={},r[3],y),(c.static=p,c.private=l,m=c.access={has:h=>t in h},(m.get=h=>h[t]),d>2),s=(0, o[L])(F[f],c),u._=1,N(s)&&(F[f]=s);return F&&J(n,t,F),n},ye=(r,e,t)=>be(r,e+"",t);var P=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&R("Object expected");var o,n;t&&(o=e[U("asyncDispose")]),o===void 0&&(o=e[U("dispose")],t&&(n=o)),typeof o!="function"&&R("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},I=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(a,s,u,c){return c=Error(u),c.name="SuppressedError",c.error=a,c.suppressed=s,c},n=a=>e=t?new o(a,e,"An error was suppressed during disposal"):(t=true,a),i=a=>{for(;a=r.pop();)try{var s=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(s).then(i,u=>(n(u),i()))}catch(u){n(u);}if(t)throw e};return i()};function Pe(r,e,t){try{return e(process.env[r])}catch{return t}}function $(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}function hr(r){return typeof r=="string"?r:String(r)}var ft=createRequire(import.meta.url),ee=process.env,H=Pe("PUP_LOG_LEVEL",$,2),Ee=ee.PUP_USE_INNER_PROXY==="1",Se=ee.PUP_DISABLE_GPU==="1",Ae=ee.PUP_DETERMINISTIC==="1",ht=dirname(ft.resolve("pup-recorder/package.json")),te=join(ht,"dist","app.cjs");var re="<pup@debug>",oe="<pup@info>",ie="<pup@warn>",ne="<pup@error>",ae="<pup@fatal>";function V(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Re,ke,Ce,Te,Le,k;Le=[V],Te=[V],Ce=[V],ke=[V],Re=[V];var v=class{constructor(e=H){this._level=e;xe(k,5,this);ye(this,"_impl");this.impl=console;}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,n=e.warn??console.warn,i=e.error??console.error,a=this._level;this._impl={debug:a>=3?t:void 0,info:a>=2?o:void 0,warn:a>=1?n:void 0,error:a>=0?i:void 0};}debug(...e){this.impl?.debug?.(re,...e);}info(...e){this.impl?.info?.(oe,...e);}warn(...e){this.impl?.warn?.(ie,...e);}error(...e){this.impl?.error?.(ne,...e);}fatal(...e){this.impl?.error?.(ae,...e),process.exit(1);}dispatch(e){e.startsWith(re)?this.debug(e.slice(re.length+1)):e.startsWith(oe)?this.info(e.slice(oe.length+1)):e.startsWith(ie)?this.warn(e.slice(ie.length+1)):e.startsWith(ne)?this.error(e.slice(ne.length+1)):this.info(e);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",a=s=>{let u=s.toString();u.startsWith(ae)?i+=u.slice(ae.length+1):this.dispatch(u);};e.stderr?.on("data",a),e.stdout?.on("data",a),e.on("message",a).on("error",s=>{i+=s.message,e.kill();}).once("close",(s,u)=>{s||u||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:s,signal:u,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",s=>{this.error(`${t}.unhandled`,s);}).on("uncaughtExceptionMonitor",s=>{this.error(`${t}.unhandled`,s);});})}};k=Fe(),O(k,1,"debug",Le,v),O(k,1,"info",Te,v),O(k,1,"warn",Ce,v),O(k,1,"error",ke,v),O(k,1,"fatal",Re,v),Q(k,v);var _=new v;Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=AV_LOG_ERROR?_.error(t):r<=AV_LOG_WARNING&&_.warn(t));});function Cr(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var se="--pup-priv-args";function Mr(){let r=process.argv,e=r.find(o=>o.startsWith(se));if(!e)return _.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)),_.debug("pupargs",t),t}function Oe(r,e){let t=r.split(" ").filter(a=>a.length),[o,...n]=t;if(!o)throw new Error("empty command");let i=spawn(o,n,{stdio:"inherit",...e});return {process:i,wait:_.attach(i,o)}}var Ft=1920,vt=1080,xt=30,yt=5,Pt="output.mp4",Dr=x.object({duration:x.number().describe("Duration in seconds"),width:x.number().describe("Video width"),height:x.number().describe("Video height"),fps:x.number().describe("Frames per second"),withAudio:x.boolean().describe("Capture and encode audio"),outFile:x.string().describe("Output mp4 file path"),useInnerProxy:x.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:x.boolean().describe("Render by frame rather than recording")}),Ie={width:Ft,height:vt,fps:xt,duration:yt,outFile:Pt,withAudio:false,useInnerProxy:Ee,deterministic:Ae};var W=class{constructor(e){this.maxConcurrency=e;}_active=0;_queue=[];_ended=false;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e){if(this._ended)throw new Error("ended");return new Promise((t,o)=>{let n=()=>{this._active++,e().then(i=>{this._active--,t(i),this.next();}).catch(i=>{this._active--,o(i),this.next();});};this._queue.push(n),this.next();})}async end(){if(!this._ended)for(this._ended=true;this._active>0||this.pending>0;)await new Promise(e=>setTimeout(e,50));}next(){this._active<this.maxConcurrency&&this._queue.shift()?.();}};var j=class{_ctx;_opened=false;constructor(e){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};var Ot={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},z=class r{_ctx;_stream;_outRate;_outFmt;_frameSize;_pkt;_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=new Packet,this._pkt.alloc(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let{outSampleRate:t,outSampleFmt:o,codecName:n,globalHeader:i,bitrate:a,muxer:s}=e,u=Codec.findEncoderByName(n);if(!u)throw new Error(`Audio encoder not found: ${n}`);let c=new CodecContext;c.allocContext3(u),c.codecId=u.id,c.sampleFormat=o,c.sampleRate=t,c.channelLayout=AV_CHANNEL_LAYOUT_STEREO,c.timeBase=new Rational(1,t),c.bitRate=BigInt(a),i&&c.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await c.open2(u,null),"audioCtx.open2");let m=s.addStream(c);return new r(c,m,o)}setInputRate(e){this.disposeGraph(),this._inRate=e;let t=new FilterGraph;t.alloc();let o=Filter.getByName("abuffer"),n=`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`,i=t.createFilter(o,"src",n);if(!i)throw new Error("Failed to create abuffer");let a=Filter.getByName("abuffersink"),s=t.createFilter(a,"sink");if(!s)throw new Error("Failed to create abuffersink");let c=`aformat=sample_fmts=${Ot[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,m=FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),d=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(c,d,m),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var a=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let n=o.length>>1;let i=P(a,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drainFilter(t);}catch(s){var u=s,c=true;}finally{I(a,u,c);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drainFilter(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this.disposeGraph(),this._ctx.freeContext();}async drainFilter(e){let t=this._filterFrame;for(;;){let o=await this._bufSink.buffersinkGetFrame(t);if(o===AVERROR_EAGAIN||o===AVERROR_EOF)break;FFmpegError.throwIfError(o,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(t),"audioCtx.sendFrame"),t.unref(),await this.drainCodec(e);}}async drainCodec(e){let t=this._pkt;for(;;){let o=await this._ctx.receivePacket(t);if(o===AVERROR_EAGAIN||o===AVERROR_EOF)break;FFmpegError.throwIfError(o,"audio.receivePacket"),t.streamIndex=this._stream.index,t.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(t),t.unref();}}disposeGraph(){this._graph?.[Symbol.dispose](),this._graph=void 0,this._bufSrc=void 0,this._bufSink=void 0;}};var q=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:n,codecName:i,codecTag:a,globalHeader:s,codecOpts:u,bitrate:c,muxer:m}=e,d=Codec.findEncoderByName(i);if(!d)throw new Error(`Video encoder not found: ${i}`);let p=new CodecContext;p.allocContext3(d),p.codecId=d.id,p.width=t,p.height=o,p.pixelFormat=AV_PIX_FMT_YUVA420P,p.timeBase=new Rational(1,n),p.framerate=new Rational(n,1),p.gopSize=n*2,p.bitRate=BigInt(c),s&&p.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER);for(let[f,T]of Object.entries(u))p.setOption(f,T);a&&(p.codecTag=a),FFmpegError.throwIfError(await p.open2(d,null),"videoCtx.open2");let l=new Packet;l.alloc();let b=m.addStream(p,a);return new r(p,l,b)}async encode(e,t){e.pts=this._pts++,e.duration=1n,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();}async drain(e){let t=this._pkt;for(;;){let o=await this._ctx.receivePacket(t);if(o===AVERROR_EAGAIN||o===AVERROR_EOF)break;FFmpegError.throwIfError(o,"video.receivePacket"),t.streamIndex=this._stream.index,t.duration===0n&&(t.duration=1n),t.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(t),t.unref();}}};var E={videoCodecName:FF_ENCODER_LIBX265,codecTag:"hvc1",globalHeader:true,videoOpts:{preset:"ultrafast","x265-params":"log-level=1"},audioCodecName:FF_ENCODER_AAC,audioSampleFmt:AV_SAMPLE_FMT_FLTP,outSampleRate:44100},Y=class r{_state;_sws;_srcFrame;_yuvaFrame;_disposed=false;constructor(e,t,o,n){this._state=e,this._sws=t,this._srcFrame=o,this._yuvaFrame=n;}static async create({width:e,height:t,fps:o,outFile:n,withAudio:i=false,videoBitrate:a=8e6,audioBitrate:s=128e3}){let u=n,c=new j(u),m=await q.create({width:e,height:t,fps:o,codecName:E.videoCodecName,codecTag:E.codecTag,globalHeader:E.globalHeader,codecOpts:E.videoOpts,bitrate:a,muxer:c}),d;i&&(d=await z.create({outSampleRate:E.outSampleRate,outSampleFmt:E.audioSampleFmt,codecName:E.audioCodecName,globalHeader:E.globalHeader,bitrate:s,muxer:c})),await c.open();let p={outPath:u,muxer:c,video:m,audio:d,limiter:new W(1)},l=new SoftwareScaleContext;l.getContext(e,t,AV_PIX_FMT_BGRA,e,t,AV_PIX_FMT_YUVA420P,SWS_BILINEAR);let b=new Frame;b.alloc(),b.format=AV_PIX_FMT_BGRA,b.width=e,b.height=t,FFmpegError.throwIfError(b.getBuffer(0),"srcFrame.getBuffer");let f=new Frame;return f.alloc(),f.format=AV_PIX_FMT_YUVA420P,f.width=e,f.height=t,FFmpegError.throwIfError(f.getBuffer(0),"yuvaFrame.getBuffer"),new r(p,l,b,f)}setupAudio(e){this._state.audio?.setInputRate(e);}async encodeFrame(e){let t;e instanceof Frame?t=e:(FFmpegError.throwIfError(this._srcFrame.makeWritable(),"srcFrame.makeWritable"),FFmpegError.throwIfError(this._srcFrame.fromBuffer(e),"srcFrame.fromBuffer"),FFmpegError.throwIfError(await this._sws.scaleFrame(this._yuvaFrame,this._srcFrame),"sws.scaleFrame"),t=this._yuvaFrame);let o=this._state;await o.limiter.schedule(()=>(FFmpegError.throwIfError(t.makeWritable(),"yuvaFrame.makeWritable"),o.video.encode(t,o.muxer)));}async encodeAudio(e){let t=this._state;t.audio&&await t.limiter.schedule(()=>t.audio.encode(e,t.muxer));}async finish(){let e=this._state;try{var t=[];try{let s=P(t,e.muxer,!0);let u=P(t,e.video);let c=P(t,e.audio);await e.limiter.end();await e.audio?.flush(e.muxer);await e.video.flush(e.muxer);}catch(o){var n=o,i=!0;}finally{var a=I(t,n,i);a&&await a;}}finally{this.freeShared();}return e.outPath}async[Symbol.asyncDispose](){if(this._disposed)return;let e=this._state;e.limiter.end().catch(()=>{}),e.video[Symbol.dispose](),e.audio?.[Symbol.dispose](),await e.muxer[Symbol.asyncDispose]().catch(()=>{}),this.freeShared();}freeShared(){this._disposed||(this._disposed=true,this._srcFrame.free(),this._yuvaFrame.free(),this._sws[Symbol.dispose]());}};var Yt=2;async function ze({summary:r,outFile:e,signal:t,onProgress:o}){var pe=[];try{let{options:n,written:i,jank:a,outFile:s,audio:u}=r;let{width:c,height:m,fps:d,withAudio:p}=n;let l=c*m*4;let b=1e3/d;await mkdir(dirname(e),{recursive:!0});let f=P(pe,await Y.create({width:c,height:m,fps:d,outFile:e,withAudio:p}),!0);p&&u&&f.setupAudio(u.pcmSampleRate);let T=u?Math.ceil(u.pcmSampleRate/d):0;let y=T*Yt*4;let F=u?Math.floor(u.pcmStartMs/b):0;let L=y>0?Buffer.alloc(y):void 0;let h=await open(s,"r");let A=u?await open(u.pcmFile,"r"):void 0;try{let le=Buffer.allocUnsafe(l),D=y>0?Buffer.allocUnsafe(y):void 0,fe=0;for(let B=0;B<i;B++){if(t?.aborted)throw t.reason;let{bytesRead:nt}=await h.read(le,0,l);if(nt<l)throw new Error(`BGRA file truncated at frame ${B}`);if(await f.encodeFrame(le),D&&L)if(B<F||!A)await f.encodeAudio(L);else {let{bytesRead:he}=await A.read(D,0,y);he<y&&D.fill(0,he),await f.encodeAudio(D);}let K=Math.floor((B+1)/i*100);K-fe>=10&&(fe=K,await o?.(K));}}finally{await h.close(),await A?.close();}let tt=await f.finish();return {options:n,written:i,jank:a,outFile:tt}}catch(rt){var ot=rt,it=true;}finally{var me=I(pe,ot,it);me&&await me;}}var qe="[HWAccel]",Qt=["microsoft","vmware","virtualbox","llvmpipe","softpipe","swiftshader"];function Zt(r){let e=r.toLowerCase();return Qt.some(t=>e.includes(t))}async function er(){let{controllers:r}=await graphics();if(platform()==="linux")try{return (await readdir("/dev/dri")).some(t=>t.startsWith("renderD"))}catch{return false}return _.debug(qe,"GPU controllers:",r),r.some(e=>e.vendor.length>0&&!Zt(e.vendor))}var Ye=er().then(r=>(_.debug(qe,"gpu:",r),r));async function ir(){let r=["no-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","headless=new","force-device-scale-factor=1","force-color-profile=srgb","ignore-gpu-blocklist","use-gl=angle","deterministic-mode","enable-begin-frame-control","disable-new-content-rendering-timeout","run-all-compositor-stages-before-draw","disable-threaded-animation","disable-threaded-scrolling","disable-checker-imaging","disable-image-animation-resync","enable-surface-synchronization","disable-background-networking"];if(H<3&&r.push("log-level=3"),!(await Ye&&!Se))return r.push("use-angle=swiftshader","enable-unsafe-swiftshader"),r;r.push("disable-gpu-sandbox","enable-unsafe-webgpu");let t=platform();return t==="darwin"?r.push("use-angle=metal"):t==="win32"?r.push("use-angle=d3d11"):r.push("use-angle=vulkan","enable-features=Vulkan","disable-vulkan-surface"),r}var nr="[Electron]";async function ar(){let[r,e]=await Promise.all([stat(te),stat(fileURLToPath(import.meta.url))]);ok(r.mtimeMs>=e.mtimeMs,"app.cjs is stale, run `bun run build`");}async function Je(r,e){await ar();let t=[],o=platform();o==="linux"&&t.push("xvfb-run","--auto-servernum",`--server-args="-screen 0 ${r.width}x${r.height}x24"`);let i=(await ir()).map(u=>`--${u}`),a=Buffer.from(JSON.stringify(e)).toString("base64");i.push(`${se}=${a}`),t.push(rr,...i,te);let s=t.join(" ");return _.debug(nr,s),Oe(s,{stdio:["ignore","pipe","pipe"],shell:o==="linux",env:{...process.env,RUST_BACKTRACE:"full"}})}var X="[pup]",et=" progress: ",de=.5;async function pr(r,e){_.debug(X,"runPupApp",r,e);let t=[r,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--out-file",`${e.outFile}`];e.withAudio&&t.push("--with-audio"),e.useInnerProxy&&t.push("--use-inner-proxy"),e.deterministic&&t.push("--deterministic");let o=await Je(e,t);return o.process.stdout?.on("data",n=>{let i=n.toString().trim(),a=i.indexOf(et);if(a<0)return;i=i.slice(a+et.length);let s=i.indexOf("%");if(s<0)return;let u=$(i.slice(0,s));e.onProgress?.(Math.floor(u*de));}),o}var S=Ie;async function Jo(r,e){_.debug(X,"pup",r,e);let{signal:t}=e;if(t?.aborted)throw t.reason;let o=e.outFile??S.outFile,n=join(tmpdir(),"pup",randomUUID()),i=join(n,"summary.json"),a=performance.now(),s=await pr(r,{width:e.width??S.width,height:e.height??S.height,fps:e.fps??S.fps,duration:e.duration??S.duration,withAudio:e.withAudio??S.withAudio,useInnerProxy:e.useInnerProxy??S.useInnerProxy,deterministic:e.deterministic??S.deterministic,outFile:i}),u=()=>{_.debug(X,"aborted");let c=s.process.pid;c?dr(c):s.process.kill(),rmSync(n,{recursive:true,force:true});};t?.addEventListener("abort",u,{once:true});try{await s.wait;let c=de*100,m=JSON.parse(await readFile(i,"utf-8")),d=await ze({summary:m,outFile:o,signal:t,onProgress:p=>{e.onProgress?.(c+Math.floor(p*(1-de)));}});return _.info(X,`done in ${Math.round(performance.now()-a)}ms`),d}catch(c){throw t?.aborted?t.reason:c}finally{rmSync(n,{recursive:true,force:true});}}export{Pe as a,$ as b,hr as c,H as d,Ee as e,Se as f,Ae as g,ht as h,te as i,v as j,_ as k,Cr as l,se as m,Mr as n,Oe as o,Ft as p,vt as q,xt as r,yt as s,Pt as t,Dr as u,Ie as v,W as w,j as x,Y as y,Jo as z};//# sourceMappingURL=chunk-JYBBDEV3.js.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9iYXNlL3Byb2Nlc3MudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2NoZW1hLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZW5jb2Rlci50cyIsIi4uL3NyYy9yZW5kZXJlci9iZ3JhLnRzIiwiLi4vc3JjL2Jhc2UvaHdhY2NlbC50cyIsIi4uL3NyYy9yZW5kZXJlci9lbGVjdHJvbi50cyIsIi4uL3NyYy9wdXAudHMiXSwibmFtZXMiOlsicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwiZW52IiwicHVwTG9nTGV2ZWwiLCJwdXBVc2VJbm5lclByb3h5IiwicHVwRGlzYWJsZUdQVSIsInB1cERldGVybWluaXN0aWMiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsInB1cEFwcCIsImpvaW4iLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsImV4ZWMiLCJjbWQiLCJvcHRpb25zIiwicGFydHMiLCJzIiwiY29tbWFuZCIsInNwYXduIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRklMRSIsIlJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwicnVuIiwidiIsImUiLCJyIiwiRm9ybWF0TXV4ZXIiLCJvdXRQYXRoIiwiRm9ybWF0Q29udGV4dCIsIkZGbXBlZ0Vycm9yIiwiY29kZWNDdHgiLCJjb2RlY1RhZyIsInN0cmVhbSIsInBrdCIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsImN0eCIsIm91dEZtdCIsIlBhY2tldCIsIkZyYW1lIiwib3B0cyIsIm91dFNhbXBsZVJhdGUiLCJvdXRTYW1wbGVGbXQiLCJjb2RlY05hbWUiLCJnbG9iYWxIZWFkZXIiLCJiaXRyYXRlIiwibXV4ZXIiLCJjb2RlYyIsIkNvZGVjIiwiQ29kZWNDb250ZXh0IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsInNyY0FyZ3MiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwiX3N0YWNrIiwic3JjIiwiaSIsIm5TYW1wbGVzIiwiZnJhbWUiLCJfX3VzaW5nIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJvdXRGcmFtZSIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJWaWRlb0VuY29kZXIiLCJfVmlkZW9FbmNvZGVyIiwid2lkdGgiLCJoZWlnaHQiLCJmcHMiLCJjb2RlY09wdHMiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwiayIsIk1QNF9TUEVDIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiRkZfRU5DT0RFUl9BQUMiLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwic3RhdGUiLCJzd3MiLCJzcmNGcmFtZSIsInl1dmFGcmFtZSIsIm91dEZpbGUiLCJ3aXRoQXVkaW8iLCJ2aWRlb0JpdHJhdGUiLCJhdWRpb0JpdHJhdGUiLCJ2aWRlbyIsImF1ZGlvIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJBVl9QSVhfRk1UX0JHUkEiLCJTV1NfQklMSU5FQVIiLCJzYW1wbGVSYXRlIiwiaW5wdXQiLCJ5dXZhIiwiX20iLCJfdiIsIl9hIiwiX3Byb21pc2UiLCJQQ01fQ0hBTk5FTFMiLCJlbmNvZGVCZ3JhIiwic3VtbWFyeSIsIm9uUHJvZ3Jlc3MiLCJ3cml0dGVuIiwiamFuayIsImJncmFGaWxlIiwiZnJhbWVTaXplIiwiZnJhbWVJbnRlcnZhbE1zIiwibWtkaXIiLCJwaXBlbGluZSIsInNhbXBsZXNQZXJGcmFtZSIsImJ5dGVzUGVyRnJhbWUiLCJzaWxlbmNlRnJhbWVzIiwic2lsZW5jZSIsImJncmFGZCIsIm9wZW4iLCJwY21GZCIsImZyYW1lQnVmIiwiYXVkaW9CdWYiLCJsYXN0UHJvZ3Jlc3MiLCJieXRlc1JlYWQiLCJhYiIsInByb2dyZXNzIiwibXA0UGF0aCIsIlRBRyIsInNvZnR3YXJlVmVuZG9ycyIsImlzU29mdHdhcmVSZW5kZXJlciIsInZlbmRvciIsImxvd2VyIiwiZGV0ZWN0R1BVRHJpdmVyIiwiY29udHJvbGxlcnMiLCJncmFwaGljcyIsInBsYXRmb3JtIiwicmVhZGRpciIsImYiLCJjIiwiY2FuSVVzZUdQVSIsInJlc3VsdCIsImVsZWN0cm9uT3B0cyIsInBsYXQiLCJhc3NlcnRBcHBGcmVzaCIsImFwcFN0YXQiLCJzZWxmU3RhdCIsInN0YXQiLCJmaWxlVVJMVG9QYXRoIiwib2siLCJydW5FbGVjdHJvbkFwcCIsInNpemUiLCJjbWRQYXJ0cyIsImVsZWN0cm9uQXJncyIsImEiLCJiYXNlNjRBcmdzIiwiZWxlY3Ryb24iLCJQUk9HUkVTU19UQUciLCJSRUNPUkRfV0VJR0hUIiwicnVuUHVwQXBwIiwic291cmNlIiwiaGFuZGxlIiwic3RhcnQiLCJlbmQiLCJkIiwicHVwIiwidG1wRGlyIiwidG1wZGlyIiwicmFuZG9tVVVJRCIsInN1bW1hcnlGaWxlIiwidDAiLCJvbkFib3J0IiwicGlkIiwidHJlZUtpbGwiLCJybVN5bmMiLCJlbmNCYXNlIiwicmVhZEZpbGUiXSwibWFwcGluZ3MiOiJpZ0ZBTU8sU0FBU0EsRUFBQUEsQ0FBUUMsQ0FBQUEsQ0FBY0MsQ0FBQUEsQ0FBc0JDLENBQUFBLENBQWlDLENBQzNGLEdBQUksQ0FDRixPQUFPRCxDQUFBQSxDQUFPLE9BQUEsQ0FBUSxHQUFBLENBQUlELENBQUksQ0FBQyxDQUNqQyxDQUFBLEtBQVEsQ0FDTixPQUFPRSxDQUNULENBQ0YsQ0NWTyxTQUFTQyxDQUFBQSxDQUFZQyxDQUFBQSxDQUFvQixDQUM5QyxHQUFJLE9BQU9BLEdBQU0sUUFBQSxDQUNmLE9BQU9BLENBQUFBLENBRVQsSUFBTUMsQ0FBQUEsQ0FBTSxN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LE1BQUFBLENBQU9SLENBQUFBLENBQVEsQ0FBRSxTQUFBLENBQVcsSUFBQSxDQUFNLEtBQUEsQ0FBTyxJQUFLLENBQUMsRUFDakQsQ0FDRiIsImZpbGUiOiJjaHVuay1KWUJCREVWMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEZXRlcm1pbmlzdGljID0gZW52W1wiUFVQX0RFVEVSTUlOSVNUSUNcIl0gPT09IFwiMVwiO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCB0eXBlIFNlcmlhbGl6YWJsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobWVzc2FnZS5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtZXNzYWdlLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obWVzc2FnZS5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobWVzc2FnZS5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlciB8IFNlcmlhbGl6YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcIm1lc3NhZ2VcIiwgZGlzcGF0Y2gpXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4geyBwcm9jZXNzOiBwcm9jLCB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBwdXBEZXRlcm1pbmlzdGljLCBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXRwdXQubXA0XCI7XG5cbmV4cG9ydCBjb25zdCBSZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk91dHB1dCBtcDQgZmlsZSBwYXRoXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9TcGVjIHtcbiAgcGNtRmlsZTogc3RyaW5nO1xuICBwY21TdGFydE1zOiBudW1iZXI7XG4gIHBjbVNhbXBsZVJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBhdWRpbz86IEF1ZGlvU3BlYztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBWb2lkRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF9lbmRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5kZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICBmbigpXG4gICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2gocnVuKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5kKCkge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbmRlZCA9IHRydWU7XG4gICAgd2hpbGUgKHRoaXMuX2FjdGl2ZSA+IDAgfHwgdGhpcy5wZW5kaW5nID4gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogUmV0dXJuVHlwZTxGb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIobnVsbCksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgRmlsdGVyQ29udGV4dCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHtcbiAgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIixcbiAgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbnR5cGUgU3RyZWFtID0gUmV0dXJuVHlwZTxpbXBvcnQoXCJub2RlLWF2XCIpLkZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+O1xuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuXG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBuZXcgUGFja2V0KCk7XG4gICAgdGhpcy5fcGt0LmFsbG9jKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IG91dFNhbXBsZVJhdGUsIG91dFNhbXBsZUZtdCwgY29kZWNOYW1lLCBnbG9iYWxIZWFkZXIsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChiaXRyYXRlKTtcbiAgICBpZiAoZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgLyoqIE11c3QgYmUgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgcGFnZSdzIGFjdHVhbCBzYW1wbGUgcmF0ZSBpcyBrbm93bi4gKi9cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwb3NlR3JhcGgoKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG5cbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG5cbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IHNyY0FyZ3MgPSBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyLCBcInNyY1wiLCBzcmNBcmdzKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuXG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG5cbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG5cbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICB9XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG5cbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuXG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkZpbHRlcihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluRmlsdGVyKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLmRpc3Bvc2VHcmFwaCgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkZpbHRlcihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvdXRGcmFtZSA9IHRoaXMuX2ZpbHRlckZyYW1lO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKG91dEZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShvdXRGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgb3V0RnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBrdCA9IHRoaXMuX3BrdDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2N0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYXVkaW8ucmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHRoaXMuX3N0cmVhbS5pbmRleDtcbiAgICAgIHBrdC5yZXNjYWxlVHModGhpcy5fY3R4LnRpbWVCYXNlLCB0aGlzLl9zdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICAgIHBrdC51bnJlZigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcG9zZUdyYXBoKCk6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fZ3JhcGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fYnVmU3JjID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgUGFja2V0LCBSYXRpb25hbCB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRlZpZGVvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG50eXBlIFN0cmVhbSA9IFJldHVyblR5cGU8aW1wb3J0KFwibm9kZS1hdlwiKS5Gb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPjtcblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGNvZGVjTmFtZSwgY29kZWNUYWcsIGdsb2JhbEhlYWRlciwgY29kZWNPcHRzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHgud2lkdGggPSB3aWR0aDtcbiAgICBjdHguaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGN0eC5waXhlbEZvcm1hdCA9IEFWX1BJWF9GTVRfWVVWQTQyMFA7XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIGZwcyk7XG4gICAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChmcHMsIDEpO1xuICAgIGN0eC5nb3BTaXplID0gZnBzICogMjtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChiaXRyYXRlKTtcbiAgICBpZiAoZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhjb2RlY09wdHMpKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICAgIGlmIChjb2RlY1RhZykgY3R4LmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwidmlkZW9DdHgub3BlbjJcIik7XG5cbiAgICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gICAgcGt0LmFsbG9jKCk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwa3QgPSB0aGlzLl9wa3Q7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9jdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInZpZGVvLnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICBwa3Quc3RyZWFtSW5kZXggPSB0aGlzLl9zdHJlYW0uaW5kZXg7XG4gICAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgICBwa3QucmVzY2FsZVRzKHRoaXMuX2N0eC50aW1lQmFzZSwgdGhpcy5fc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCBGcmFtZSwgU29mdHdhcmVTY2FsZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbmludGVyZmFjZSBGb3JtYXRTcGVjIHtcbiAgdmlkZW9Db2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICB2aWRlb09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGF1ZGlvQ29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgYXVkaW9TYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbn1cblxuY29uc3QgTVA0X1NQRUM6IEZvcm1hdFNwZWMgPSB7XG4gIHZpZGVvQ29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICB2aWRlb09wdHM6IHsgcHJlc2V0OiBcInVsdHJhZmFzdFwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTFcIiB9LFxuICBhdWRpb0NvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gIGF1ZGlvU2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIG91dFNhbXBsZVJhdGU6IDQ0XzEwMCxcbn07XG5cbmludGVyZmFjZSBGb3JtYXRTdGF0ZSB7XG4gIG91dFBhdGg6IHN0cmluZztcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbzogVmlkZW9FbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgdmlkZW9CaXRyYXRlPzogbnVtYmVyO1xuICBhdWRpb0JpdHJhdGU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZTogRm9ybWF0U3RhdGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N3czogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NyY0ZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfeXV2YUZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHN0YXRlOiBGb3JtYXRTdGF0ZSwgc3dzOiBTb2Z0d2FyZVNjYWxlQ29udGV4dCwgc3JjRnJhbWU6IEZyYW1lLCB5dXZhRnJhbWU6IEZyYW1lKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgdGhpcy5fc3JjRnJhbWUgPSBzcmNGcmFtZTtcbiAgICB0aGlzLl95dXZhRnJhbWUgPSB5dXZhRnJhbWU7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZnBzLFxuICAgIG91dEZpbGUsXG4gICAgd2l0aEF1ZGlvID0gZmFsc2UsXG4gICAgdmlkZW9CaXRyYXRlID0gOF8wMDBfMDAwLFxuICAgIGF1ZGlvQml0cmF0ZSA9IDEyOF8wMDAsXG4gIH06IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IG91dFBhdGggPSBvdXRGaWxlO1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG91dFBhdGgpO1xuXG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBNUDRfU1BFQy52aWRlb0NvZGVjTmFtZSxcbiAgICAgIGNvZGVjVGFnOiBNUDRfU1BFQy5jb2RlY1RhZyxcbiAgICAgIGdsb2JhbEhlYWRlcjogTVA0X1NQRUMuZ2xvYmFsSGVhZGVyLFxuICAgICAgY29kZWNPcHRzOiBNUDRfU1BFQy52aWRlb09wdHMsXG4gICAgICBiaXRyYXRlOiB2aWRlb0JpdHJhdGUsXG4gICAgICBtdXhlcixcbiAgICB9KTtcblxuICAgIGxldCBhdWRpbzogQXVkaW9FbmNvZGVyIHwgdW5kZWZpbmVkO1xuICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgIGF1ZGlvID0gYXdhaXQgQXVkaW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICAgIG91dFNhbXBsZVJhdGU6IE1QNF9TUEVDLm91dFNhbXBsZVJhdGUsXG4gICAgICAgIG91dFNhbXBsZUZtdDogTVA0X1NQRUMuYXVkaW9TYW1wbGVGbXQsXG4gICAgICAgIGNvZGVjTmFtZTogTVA0X1NQRUMuYXVkaW9Db2RlY05hbWUsXG4gICAgICAgIGdsb2JhbEhlYWRlcjogTVA0X1NQRUMuZ2xvYmFsSGVhZGVyLFxuICAgICAgICBiaXRyYXRlOiBhdWRpb0JpdHJhdGUsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIGNvbnN0IHN0YXRlOiBGb3JtYXRTdGF0ZSA9IHsgb3V0UGF0aCwgbXV4ZXIsIHZpZGVvLCBhdWRpbywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSB9O1xuXG4gICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgc3dzLmdldENvbnRleHQod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBLCB3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQLCBTV1NfQklMSU5FQVIpO1xuXG4gICAgY29uc3Qgc3JjRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICBzcmNGcmFtZS5hbGxvYygpO1xuICAgIHNyY0ZyYW1lLmZvcm1hdCA9IEFWX1BJWF9GTVRfQkdSQTtcbiAgICBzcmNGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHNyY0ZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjRnJhbWUuZ2V0QnVmZmVyKDApLCBcInNyY0ZyYW1lLmdldEJ1ZmZlclwiKTtcblxuICAgIGNvbnN0IHl1dmFGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHl1dmFGcmFtZS5hbGxvYygpO1xuICAgIHl1dmFGcmFtZS5mb3JtYXQgPSBBVl9QSVhfRk1UX1lVVkE0MjBQO1xuICAgIHl1dmFGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHl1dmFGcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHl1dmFGcmFtZS5nZXRCdWZmZXIoMCksIFwieXV2YUZyYW1lLmdldEJ1ZmZlclwiKTtcblxuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHN0YXRlLCBzd3MsIHNyY0ZyYW1lLCB5dXZhRnJhbWUpO1xuICB9XG5cbiAgc2V0dXBBdWRpbyhzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZS5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRnJhbWUoaW5wdXQ6IEJ1ZmZlciB8IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHl1dmE6IEZyYW1lO1xuXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRnJhbWUpIHtcbiAgICAgIHl1dmEgPSBpbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX3NyY0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcInNyY0ZyYW1lLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9zcmNGcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJzcmNGcmFtZS5mcm9tQnVmZmVyXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX3N3cy5zY2FsZUZyYW1lKHRoaXMuX3l1dmFGcmFtZSwgdGhpcy5fc3JjRnJhbWUpLCBcInN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgeXV2YSA9IHRoaXMuX3l1dmFGcmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBzID0gdGhpcy5fc3RhdGU7XG4gICAgYXdhaXQgcy5saW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih5dXZhLm1ha2VXcml0YWJsZSgpLCBcInl1dmFGcmFtZS5tYWtlV3JpdGFibGVcIik7XG4gICAgICByZXR1cm4gcy52aWRlby5lbmNvZGUoeXV2YSwgcy5tdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLl9zdGF0ZTtcbiAgICBpZiAocy5hdWRpbykgYXdhaXQgcy5saW1pdGVyLnNjaGVkdWxlKCgpID0+IHMuYXVkaW8hLmVuY29kZShwY20sIHMubXV4ZXIpKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLl9zdGF0ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdXNpbmcgX20gPSBzLm11eGVyO1xuICAgICAgdXNpbmcgX3YgPSBzLnZpZGVvO1xuICAgICAgdXNpbmcgX2EgPSBzLmF1ZGlvO1xuICAgICAgYXdhaXQgcy5saW1pdGVyLmVuZCgpO1xuICAgICAgYXdhaXQgcy5hdWRpbz8uZmx1c2gocy5tdXhlcik7XG4gICAgICBhd2FpdCBzLnZpZGVvLmZsdXNoKHMubXV4ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWVTaGFyZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHMub3V0UGF0aDtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBjb25zdCBzID0gdGhpcy5fc3RhdGU7XG4gICAgcy5saW1pdGVyLmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICBzLnZpZGVvW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHMuYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBzLm11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgIHRoaXMuZnJlZVNoYXJlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmcmVlU2hhcmVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9zcmNGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5feXV2YUZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9zd3NbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjQuXG5cbmltcG9ydCB7IG1rZGlyLCBvcGVuIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvZW5jb2RlclwiO1xuaW1wb3J0IHR5cGUgeyBQdXBQcm9ncmVzc0NhbGxiYWNrIH0gZnJvbSBcIi4uL3B1cFwiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJSZXN1bHQgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgUENNX0NIQU5ORUxTID0gMjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVCZ3JhT3B0aW9ucyB7XG4gIHN1bW1hcnk6IFJlbmRlclJlc3VsdDtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzcz86IFB1cFByb2dyZXNzQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNvZGVCZ3JhKHsgc3VtbWFyeSwgb3V0RmlsZSwgc2lnbmFsLCBvblByb2dyZXNzIH06IEVuY29kZUJncmFPcHRpb25zKTogUHJvbWlzZTxSZW5kZXJSZXN1bHQ+IHtcbiAgY29uc3QgeyBvcHRpb25zLCB3cml0dGVuLCBqYW5rLCBvdXRGaWxlOiBiZ3JhRmlsZSwgYXVkaW8gfSA9IHN1bW1hcnk7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCB3aXRoQXVkaW8gfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZyYW1lU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbE1zID0gMTAwMCAvIGZwcztcblxuICBhd2FpdCBta2RpcihkaXJuYW1lKG91dEZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8gfSk7XG5cbiAgaWYgKHdpdGhBdWRpbyAmJiBhdWRpbykge1xuICAgIHBpcGVsaW5lLnNldHVwQXVkaW8oYXVkaW8ucGNtU2FtcGxlUmF0ZSk7XG4gIH1cblxuICBjb25zdCBzYW1wbGVzUGVyRnJhbWUgPSBhdWRpbyA/IE1hdGguY2VpbChhdWRpby5wY21TYW1wbGVSYXRlIC8gZnBzKSA6IDA7XG4gIGNvbnN0IGJ5dGVzUGVyRnJhbWUgPSBzYW1wbGVzUGVyRnJhbWUgKiBQQ01fQ0hBTk5FTFMgKiA0O1xuICBjb25zdCBzaWxlbmNlRnJhbWVzID0gYXVkaW8gPyBNYXRoLmZsb29yKGF1ZGlvLnBjbVN0YXJ0TXMgLyBmcmFtZUludGVydmFsTXMpIDogMDtcbiAgY29uc3Qgc2lsZW5jZSA9IGJ5dGVzUGVyRnJhbWUgPiAwID8gQnVmZmVyLmFsbG9jKGJ5dGVzUGVyRnJhbWUpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJncmFGZCA9IGF3YWl0IG9wZW4oYmdyYUZpbGUsIFwiclwiKTtcbiAgY29uc3QgcGNtRmQgPSBhdWRpbyA/IGF3YWl0IG9wZW4oYXVkaW8ucGNtRmlsZSwgXCJyXCIpIDogdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZnJhbWVCdWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoZnJhbWVTaXplKTtcbiAgICBjb25zdCBhdWRpb0J1ZiA9IGJ5dGVzUGVyRnJhbWUgPiAwID8gQnVmZmVyLmFsbG9jVW5zYWZlKGJ5dGVzUGVyRnJhbWUpIDogdW5kZWZpbmVkO1xuICAgIGxldCBsYXN0UHJvZ3Jlc3MgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3cml0dGVuOyBpKyspIHtcbiAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IHNpZ25hbC5yZWFzb247XG4gICAgICBjb25zdCB7IGJ5dGVzUmVhZCB9ID0gYXdhaXQgYmdyYUZkLnJlYWQoZnJhbWVCdWYsIDAsIGZyYW1lU2l6ZSk7XG4gICAgICBpZiAoYnl0ZXNSZWFkIDwgZnJhbWVTaXplKSB0aHJvdyBuZXcgRXJyb3IoYEJHUkEgZmlsZSB0cnVuY2F0ZWQgYXQgZnJhbWUgJHtpfWApO1xuICAgICAgYXdhaXQgcGlwZWxpbmUuZW5jb2RlRnJhbWUoZnJhbWVCdWYpO1xuXG4gICAgICBpZiAoYXVkaW9CdWYgJiYgc2lsZW5jZSkge1xuICAgICAgICBpZiAoaSA8IHNpbGVuY2VGcmFtZXMgfHwgIXBjbUZkKSB7XG4gICAgICAgICAgYXdhaXQgcGlwZWxpbmUuZW5jb2RlQXVkaW8oc2lsZW5jZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBieXRlc1JlYWQ6IGFiIH0gPSBhd2FpdCBwY21GZC5yZWFkKGF1ZGlvQnVmLCAwLCBieXRlc1BlckZyYW1lKTtcbiAgICAgICAgICBpZiAoYWIgPCBieXRlc1BlckZyYW1lKSBhdWRpb0J1Zi5maWxsKDAsIGFiKTtcbiAgICAgICAgICBhd2FpdCBwaXBlbGluZS5lbmNvZGVBdWRpbyhhdWRpb0J1Zik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCgoaSArIDEpIC8gd3JpdHRlbikgKiAxMDApO1xuICAgICAgaWYgKHByb2dyZXNzIC0gbGFzdFByb2dyZXNzID49IDEwKSB7XG4gICAgICAgIGxhc3RQcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICBhd2FpdCBvblByb2dyZXNzPy4ocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBiZ3JhRmQuY2xvc2UoKTtcbiAgICBhd2FpdCBwY21GZD8uY2xvc2UoKTtcbiAgfVxuXG4gIGNvbnN0IG1wNFBhdGggPSBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgcmV0dXJuIHsgb3B0aW9ucywgd3JpdHRlbiwgamFuaywgb3V0RmlsZTogbXA0UGF0aCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgcmVhZGRpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGdyYXBoaWNzIH0gZnJvbSBcInN5c3RlbWluZm9ybWF0aW9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0hXQWNjZWxdXCI7XG5cbmNvbnN0IHNvZnR3YXJlVmVuZG9ycyA9IFtcIm1pY3Jvc29mdFwiLCBcInZtd2FyZVwiLCBcInZpcnR1YWxib3hcIiwgXCJsbHZtcGlwZVwiLCBcInNvZnRwaXBlXCIsIFwic3dpZnRzaGFkZXJcIl07XG5cbmZ1bmN0aW9uIGlzU29mdHdhcmVSZW5kZXJlcih2ZW5kb3I6IHN0cmluZykge1xuICBjb25zdCBsb3dlciA9IHZlbmRvci50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc29mdHdhcmVWZW5kb3JzLnNvbWUoKHYpID0+IGxvd2VyLmluY2x1ZGVzKHYpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0R1BVRHJpdmVyKCkge1xuICBjb25zdCB7IGNvbnRyb2xsZXJzIH0gPSBhd2FpdCBncmFwaGljcygpO1xuICBpZiAocGxhdGZvcm0oKSA9PT0gXCJsaW51eFwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihcIi9kZXYvZHJpXCIpO1xuICAgICAgcmV0dXJuIGZpbGVzLnNvbWUoKGYpID0+IGYuc3RhcnRzV2l0aChcInJlbmRlckRcIikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBsb2dnZXIuZGVidWcoVEFHLCBcIkdQVSBjb250cm9sbGVyczpcIiwgY29udHJvbGxlcnMpO1xuICByZXR1cm4gY29udHJvbGxlcnMuc29tZSgoYykgPT4gYy52ZW5kb3IubGVuZ3RoID4gMCAmJiAhaXNTb2Z0d2FyZVJlbmRlcmVyKGMudmVuZG9yKSk7XG59XG5cbmV4cG9ydCBjb25zdCBjYW5JVXNlR1BVID0gZGV0ZWN0R1BVRHJpdmVyKCkudGhlbigocmVzdWx0KSA9PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBlbGVjdHJvbiwgeyB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHN0YXQgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcInVybFwiO1xuaW1wb3J0IHsgcHVwQXBwLCBwdXBEaXNhYmxlR1BVLCBwdXBMb2dMZXZlbCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2FuSVVzZUdQVSB9IGZyb20gXCIuLi9iYXNlL2h3YWNjZWxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGV4ZWMsIFBVUF9BUkdTX0tFWSB9IGZyb20gXCIuLi9iYXNlL3Byb2Nlc3NcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVsZWN0cm9uT3B0cygpIHtcbiAgY29uc3Qgb3B0cyA9IFtcbiAgICAvLyDlrrnlmajmspnnrrFcbiAgICBcIm5vLXNhbmRib3hcIixcbiAgICBcImRpc2FibGUtZGV2LXNobS11c2FnZVwiLFxuICAgIC8vIOi3qOWfny/lronlhahcbiAgICBcImRpc2FibGUtd2ViLXNlY3VyaXR5XCIsXG4gICAgXCJkaXNhYmxlLXNpdGUtaXNvbGF0aW9uLXRyaWFsc1wiLFxuICAgIFwiaWdub3JlLWNlcnRpZmljYXRlLWVycm9yc1wiLFxuICAgIC8vIOW9leWItuihjOS4ulxuICAgIFwiZGlzYWJsZS1ibGluay1mZWF0dXJlcz1BdXRvbWF0aW9uQ29udHJvbGxlZFwiLFxuICAgIFwibXV0ZS1hdWRpb1wiLFxuICAgIFwiYXV0b3BsYXktcG9saWN5PW5vLXVzZXItZ2VzdHVyZS1yZXF1aXJlZFwiLFxuICAgIFwiZGlzYWJsZS1leHRlbnNpb25zXCIsXG4gICAgLy8g5riy5p+TXG4gICAgXCJoZWFkbGVzcz1uZXdcIixcbiAgICBcImZvcmNlLWRldmljZS1zY2FsZS1mYWN0b3I9MVwiLFxuICAgIFwiZm9yY2UtY29sb3ItcHJvZmlsZT1zcmdiXCIsXG4gICAgXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiLFxuICAgIFwidXNlLWdsPWFuZ2xlXCIsXG4gICAgXCJkZXRlcm1pbmlzdGljLW1vZGVcIixcbiAgICBcImVuYWJsZS1iZWdpbi1mcmFtZS1jb250cm9sXCIsXG4gICAgXCJkaXNhYmxlLW5ldy1jb250ZW50LXJlbmRlcmluZy10aW1lb3V0XCIsXG4gICAgXCJydW4tYWxsLWNvbXBvc2l0b3Itc3RhZ2VzLWJlZm9yZS1kcmF3XCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLWFuaW1hdGlvblwiLFxuICAgIFwiZGlzYWJsZS10aHJlYWRlZC1zY3JvbGxpbmdcIixcbiAgICBcImRpc2FibGUtY2hlY2tlci1pbWFnaW5nXCIsXG4gICAgXCJkaXNhYmxlLWltYWdlLWFuaW1hdGlvbi1yZXN5bmNcIixcbiAgICBcImVuYWJsZS1zdXJmYWNlLXN5bmNocm9uaXphdGlvblwiLFxuICAgIC8vIOi1hOa6kOaOp+WItlxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLW5ldHdvcmtpbmdcIixcbiAgXTtcbiAgaWYgKHB1cExvZ0xldmVsIDwgMykge1xuICAgIG9wdHMucHVzaChcImxvZy1sZXZlbD0zXCIpO1xuICB9XG5cbiAgY29uc3QgZW5hYmxlR3B1ID0gKGF3YWl0IGNhbklVc2VHUFUpICYmICFwdXBEaXNhYmxlR1BVO1xuICBpZiAoIWVuYWJsZUdwdSkge1xuICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1zd2lmdHNoYWRlclwiLCBcImVuYWJsZS11bnNhZmUtc3dpZnRzaGFkZXJcIik7XG4gICAgcmV0dXJuIG9wdHM7XG4gIH1cblxuICBvcHRzLnB1c2goXCJkaXNhYmxlLWdwdS1zYW5kYm94XCIsIFwiZW5hYmxlLXVuc2FmZS13ZWJncHVcIik7XG4gIGNvbnN0IHBsYXQgPSBwbGF0Zm9ybSgpO1xuICBpZiAocGxhdCA9PT0gXCJkYXJ3aW5cIikge1xuICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1tZXRhbFwiKTtcbiAgfSBlbHNlIGlmIChwbGF0ID09PSBcIndpbjMyXCIpIHtcbiAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9ZDNkMTFcIik7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPXZ1bGthblwiLCBcImVuYWJsZS1mZWF0dXJlcz1WdWxrYW5cIiwgXCJkaXNhYmxlLXZ1bGthbi1zdXJmYWNlXCIpO1xuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb25zdCBUQUcgPSBcIltFbGVjdHJvbl1cIjtcblxuYXN5bmMgZnVuY3Rpb24gYXNzZXJ0QXBwRnJlc2goKSB7XG4gIGNvbnN0IFthcHBTdGF0LCBzZWxmU3RhdF0gPSBhd2FpdCBQcm9taXNlLmFsbChbc3RhdChwdXBBcHApLCBzdGF0KGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSldKTtcbiAgb2soYXBwU3RhdC5tdGltZU1zID49IHNlbGZTdGF0Lm10aW1lTXMsIGBhcHAuY2pzIGlzIHN0YWxlLCBydW4gXFxgYnVuIHJ1biBidWlsZFxcYGApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRWxlY3Ryb25BcHAoc2l6ZTogU2l6ZSwgYXJnczogdW5rbm93bltdKSB7XG4gIGF3YWl0IGFzc2VydEFwcEZyZXNoKCk7XG4gIGNvbnN0IGNtZFBhcnRzOiB1bmtub3duW10gPSBbXTtcbiAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gIGlmIChwbGF0ID09PSBcImxpbnV4XCIpIHtcbiAgICBjbWRQYXJ0cy5wdXNoKGB4dmZiLXJ1bmAsIGAtLWF1dG8tc2VydmVybnVtYCwgYC0tc2VydmVyLWFyZ3M9XCItc2NyZWVuIDAgJHtzaXplLndpZHRofXgke3NpemUuaGVpZ2h0fXgyNFwiYCk7XG4gIH1cbiAgY29uc3Qgb3B0cyA9IGF3YWl0IGVsZWN0cm9uT3B0cygpO1xuICBjb25zdCBlbGVjdHJvbkFyZ3MgPSBvcHRzLm1hcCgoYSkgPT4gYC0tJHthfWApO1xuICBjb25zdCBiYXNlNjRBcmdzID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXJncykpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICBlbGVjdHJvbkFyZ3MucHVzaChgJHtQVVBfQVJHU19LRVl9PSR7YmFzZTY0QXJnc31gKTtcbiAgY21kUGFydHMucHVzaChlbGVjdHJvbiwgLi4uZWxlY3Ryb25BcmdzLCBwdXBBcHApO1xuICBjb25zdCBjbWQgPSBjbWRQYXJ0cy5qb2luKFwiIFwiKTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgY21kKTtcbiAgcmV0dXJuIGV4ZWMoY21kLCB7XG4gICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIHNoZWxsOiBwbGF0ID09PSBcImxpbnV4XCIsXG4gICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBSVVNUX0JBQ0tUUkFDRTogXCJmdWxsXCIgfSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IGVuY29kZUJncmEgfSBmcm9tIFwiLi9yZW5kZXJlci9iZ3JhXCI7XG5pbXBvcnQgeyBydW5FbGVjdHJvbkFwcCB9IGZyb20gXCIuL3JlbmRlcmVyL2VsZWN0cm9uXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlclJlc3VsdCB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltwdXBdXCI7XG5jb25zdCBQUk9HUkVTU19UQUcgPSBcIiBwcm9ncmVzczogXCI7XG5cbmV4cG9ydCB0eXBlIFB1cFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVwT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8UmVuZGVyT3B0aW9ucz4ge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzcz86IFB1cFByb2dyZXNzQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVwUmVzdWx0IGV4dGVuZHMgUmVuZGVyUmVzdWx0IHt9XG5cbmNvbnN0IFJFQ09SRF9XRUlHSFQgPSAwLjU7XG5cbmludGVyZmFjZSBBcHBPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzPzogUHVwUHJvZ3Jlc3NDYWxsYmFjaztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHVwQXBwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBBcHBPcHRpb25zKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGBydW5QdXBBcHBgLCBzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW1xuICAgIHNvdXJjZSxcbiAgICBgLS13aWR0aGAsXG4gICAgYCR7b3B0aW9ucy53aWR0aH1gLFxuICAgIGAtLWhlaWdodGAsXG4gICAgYCR7b3B0aW9ucy5oZWlnaHR9YCxcbiAgICBgLS1mcHNgLFxuICAgIGAke29wdGlvbnMuZnBzfWAsXG4gICAgYC0tZHVyYXRpb25gLFxuICAgIGAke29wdGlvbnMuZHVyYXRpb259YCxcbiAgICBgLS1vdXQtZmlsZWAsXG4gICAgYCR7b3B0aW9ucy5vdXRGaWxlfWAsXG4gIF07XG4gIGlmIChvcHRpb25zLndpdGhBdWRpbykgYXJncy5wdXNoKGAtLXdpdGgtYXVkaW9gKTtcbiAgaWYgKG9wdGlvbnMudXNlSW5uZXJQcm94eSkgYXJncy5wdXNoKGAtLXVzZS1pbm5lci1wcm94eWApO1xuICBpZiAob3B0aW9ucy5kZXRlcm1pbmlzdGljKSBhcmdzLnB1c2goYC0tZGV0ZXJtaW5pc3RpY2ApO1xuXG4gIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHJ1bkVsZWN0cm9uQXBwKG9wdGlvbnMsIGFyZ3MpO1xuICBoYW5kbGUucHJvY2Vzcy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgbGV0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gbWVzc2FnZS5pbmRleE9mKFBST0dSRVNTX1RBRyk7XG4gICAgaWYgKHN0YXJ0IDwgMCkgcmV0dXJuO1xuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnNsaWNlKHN0YXJ0ICsgUFJPR1JFU1NfVEFHLmxlbmd0aCk7XG4gICAgY29uc3QgZW5kID0gbWVzc2FnZS5pbmRleE9mKFwiJVwiKTtcbiAgICBpZiAoZW5kIDwgMCkgcmV0dXJuO1xuICAgIGNvbnN0IHByb2dyZXNzID0gcGFyc2VOdW1iZXIobWVzc2FnZS5zbGljZSgwLCBlbmQpKTtcbiAgICB2b2lkIG9wdGlvbnMub25Qcm9ncmVzcz8uKE1hdGguZmxvb3IocHJvZ3Jlc3MgKiBSRUNPUkRfV0VJR0hUKSk7XG4gIH0pO1xuICByZXR1cm4gaGFuZGxlO1xufVxuXG5jb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnRpYWw8UHVwT3B0aW9ucz4pOiBQcm9taXNlPFB1cFJlc3VsdD4ge1xuICBsb2dnZXIuZGVidWcoVEFHLCBgcHVwYCwgc291cmNlLCBvcHRpb25zKTtcblxuICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgc2lnbmFsLnJlYXNvbjtcblxuICBjb25zdCBvdXRGaWxlID0gb3B0aW9ucy5vdXRGaWxlID8/IGQub3V0RmlsZTtcbiAgY29uc3QgdG1wRGlyID0gam9pbih0bXBkaXIoKSwgXCJwdXBcIiwgcmFuZG9tVVVJRCgpKTtcbiAgY29uc3Qgc3VtbWFyeUZpbGUgPSBqb2luKHRtcERpciwgXCJzdW1tYXJ5Lmpzb25cIik7XG4gIGNvbnN0IHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHJ1blB1cEFwcChzb3VyY2UsIHtcbiAgICB3aWR0aDogb3B0aW9ucy53aWR0aCA/PyBkLndpZHRoLFxuICAgIGhlaWdodDogb3B0aW9ucy5oZWlnaHQgPz8gZC5oZWlnaHQsXG4gICAgZnBzOiBvcHRpb25zLmZwcyA/PyBkLmZwcyxcbiAgICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiA/PyBkLmR1cmF0aW9uLFxuICAgIHdpdGhBdWRpbzogb3B0aW9ucy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgdXNlSW5uZXJQcm94eTogb3B0aW9ucy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICBkZXRlcm1pbmlzdGljOiBvcHRpb25zLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgIG91dEZpbGU6IHN1bW1hcnlGaWxlLFxuICB9KTtcblxuICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBhYm9ydGVkYCk7XG4gICAgY29uc3QgcGlkID0gaGFuZGxlLnByb2Nlc3MucGlkO1xuICAgIGlmIChwaWQpIHRyZWVLaWxsKHBpZCk7XG4gICAgZWxzZSBoYW5kbGUucHJvY2Vzcy5raWxsKCk7XG4gICAgcm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9O1xuICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICAvLyBTMS4gcmVjb3JkIHRvIEJHUkEgYW5kIGF1ZGlvIGZpbGVzXG4gICAgYXdhaXQgaGFuZGxlLndhaXQ7XG5cbiAgICAvLyBTMi4gZW5jb2RlIHRvIG91dHB1dCBmaWxlXG4gICAgY29uc3QgZW5jQmFzZSA9IFJFQ09SRF9XRUlHSFQgKiAxMDA7XG4gICAgY29uc3Qgc3VtbWFyeSA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUoc3VtbWFyeUZpbGUsIFwidXRmLThcIikpIGFzIFJlbmRlclJlc3VsdDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbmNvZGVCZ3JhKHtcbiAgICAgIHN1bW1hcnksXG4gICAgICBvdXRGaWxlLFxuICAgICAgc2lnbmFsLFxuICAgICAgb25Qcm9ncmVzczogKHApID0+IHtcbiAgICAgICAgdm9pZCBvcHRpb25zLm9uUHJvZ3Jlc3M/LihlbmNCYXNlICsgTWF0aC5mbG9vcihwICogKDEgLSBSRUNPUkRfV0VJR0hUKSkpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhUQUcsIGBkb25lIGluICR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHQwKX1tc2ApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBzaWduYWwucmVhc29uO1xuICAgIHRocm93IGU7XG4gIH0gZmluYWxseSB7XG4gICAgcm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG4iXX0=