pup-recorder 0.3.3 → 0.3.5

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/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import'source-map-support/register.js';import {a,b,p}from'./chunk-QZHVDBDU.js';export{x as DEFAULT_DURATION,w as DEFAULT_FPS,v as DEFAULT_HEIGHT,y as DEFAULT_OUT_FILE,u as DEFAULT_WIDTH,o as Logger,r as PUP_ARGS_KEY,z as RenderSchema,A as defaultRenderOptions,t as exec,p as logger,q as noerr,s as pargs,d as parseNumber,e as parseString,c as penv,B as pup,l as pupApp,j as pupDeterministic,h as pupDisableGPU,i as pupDisableHwCodec,m as pupIpcSocket,f as pupLogLevel,k as pupPkgRoot,g as pupUseInnerProxy,n as pupWindowTolerant}from'./chunk-QZHVDBDU.js';import {setTimeout as setTimeout$1}from'timers/promises';import {FormatContext,FFmpegError,Frame,Codec,CodecContext,Rational,FilterGraph,Filter,FilterInOut,FF_DECODER_PNG,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,Packet,AV_PIX_FMT_BGRA as AV_PIX_FMT_BGRA$1}from'node-av';import {FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,FF_HWDEVICE_TYPE_VIDEOTOOLBOX,FF_HWDEVICE_TYPE_CUDA,AV_PIX_FMT_YUVA420P,FF_ENCODER_LIBX265,AV_CHANNEL_LAYOUT_STEREO,AV_CODEC_FLAG_GLOBAL_HEADER,AV_SAMPLE_FMT_FLT,AVERROR_EAGAIN,AVERROR_EOF,AV_PIX_FMT_BGRA,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_YUV420P,AVCOL_RANGE_JPEG}from'node-av/constants';import {ok}from'assert';import {HardwareContext}from'node-av/api';var q=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var I=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(a=>{this._active--,o(a),this.next();}).catch(a=>{this._active--,i(a),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();}};function Y(r){return new Promise(e=>setTimeout(e,r))}function Tt(r,e){let t,o=false;async function i(a){await r(a),!o&&(t=setTimeout(()=>i(a+1),e));}return t=setTimeout(()=>i(0),e),()=>{o=true,clearTimeout(t);}}function Ot({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let a=0;for(;;)try{let s=[r(...i)];return t&&s.push(setTimeout$1(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(a++,a>=e)throw s;await Y(Math.pow(2,a)*100+Math.random()*100);}}}var T=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??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);}};async function y(r,e){let t=new 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 Rational(1,r.fps),t.framerate=new Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function B(r,e,t){let o=new Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function _(){let r=new Packet;return r.alloc(),r}async function E(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===AVERROR_EAGAIN||i===AVERROR_EOF)break;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 Ae={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},R=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=_(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let t=Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),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 FilterGraph;t.alloc();let o=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 a=Filter.getByName("abuffersink"),s=t.createFilter(a,"sink");if(!s)throw new Error("Failed to create abuffersink");let n=`aformat=sample_fmts=${Ae[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),m=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(n,m,u),"graph.parsePtr"),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 m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let i=o.length>>1;let a$1=a(s,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,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(i);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(a$1),"buffersrcAddFrame");await this.drain(t);}catch(c){var n=c,u=true;}finally{b(s,n,u);}}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===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return E(this._ctx,this._pkt,this._stream,e)}};var v=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=Codec.findDecoderByName(FF_DECODER_PNG);return ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=B(e,t,AV_PIX_FMT_BGRA$1),this.dst=B(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=_();}async png(){let e=new CodecContext;return e.allocContext3(this._png),FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=a(o,await this.png());this.pkt.data=e;FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var a$1=i,s=true;}finally{b(o,a$1,s);}}get sws(){if(!this._sws){let e=new SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,AV_PIX_FMT_YUVA420P$1,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]();}};function L(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 N=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]);}},M=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 P=Buffer.from([0,0,0,1]);function re(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 W(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function C(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 a=r.length;for(let n=i+2;n<r.length-2;n++)if(r[n]===0&&r[n+1]===0&&(r[n+2]===1||n+3<r.length&&r[n+2]===0&&r[n+3]===1)){a=n;break}let{type:s,layerId:c}=re(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,a)}),t=a;}return e}function X(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=re(t[0],t[1]),[a,s]=W(o,e,i);return t[0]=a,t[1]=s,t}function oe(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 ie(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)}function Me(r){let e=new M(oe(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 Le(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 Oe(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 ae(r,e,t){let o=Me(r);if(!o)return r;let i=new N;return Le(i,o),Oe(i,o,e,t),i.bits.push(1),i.align(0),ie(L(i.bits))}var De=39;function ne(r){let{baseExtradata:e,alphaExtradata:t}=r,o=C(e),i=C(t),a=new Map;for(let n of i){if(n.type===32)continue;let u=a.get(n.type)??[];u.push(n),a.set(n.type,u);}let s=[],c=new Set;for(let n of o){let u=n.type===32?ae(n.data,r.width,r.height):n.data;if(s.push(P,u),!c.has(n.type)){c.add(n.type);for(let m of a.get(n.type)??[])s.push(P,X(m.data,1));}}return s.push($()),Buffer.concat(s)}function $(){let[t,o]=W(De,0,1),i=[],a=(s,c)=>{for(let n=c-1;n>=0;n--)i.push(s>>n&1);};for(a(0,1),a(0,3),a(0,3),a(0,9),a(255,9),a(0,1),a(0,1),a(1,1);i.length%8!==0;)a(0,1);return Buffer.concat([P,Buffer.from([t,o]),Buffer.from([165,4]),L(i),Buffer.from([128])])}function se(r,e){let t=[];for(let o of r)t.push(P,o.data);for(let o of e)o.type<32&&t.push(P,X(o.data,1));return Buffer.concat(t)}var O=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=$();}static async create(e){let{width:t,height:o,fps:i,bitrate:a,muxer:s}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let u={codec:c,width:t,height:o,fps:i,bitrate:a,options:{preset:"p4",bf:"0"}},m=await y({...u,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await y({...u,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),x=_(),l=_(),w=s.addStream(m,"hvc1"),V=m.extraData,S=p.extraData;return V&&S&&(w.codecpar.extradata=ne({baseExtradata:V,alphaExtradata:S,width:t,height:o})),new r({baseCtx:m,alphaCtx:p,basePkt:x,alphaPkt:l,stream:w})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,a=this._pts++;e.pts=a,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame");let s=e.data?.[0],c=e.linesize?.[0];if(!s||!c)throw new Error("encode: missing BGRA data");let n=e.width,u=e.height,m=n*u,p=(n>>1)*(u>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(m+p*2));let x=this._alphaBuf;for(let l=0;l<u;l++)for(let w=0;w<n;w++)x[l*n+w]=s[l*c+w*4+3];x.fill(128,m,m+p*2),this._alphaFrame?.free(),this._alphaFrame=Frame.fromVideoBuffer(x,{format:AV_PIX_FMT_YUV420P,width:n,height:u}),this._alphaFrame.pts=a,this._alphaFrame.duration=1n,FFmpegError.throwIfError(await i.sendFrame(this._alphaFrame),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i}=this._s;e.free(),t.free(),this._alphaFrame?.free(),o.freeContext(),i.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:a,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),n=await o.receivePacket(a),u=c>=0,m=n>=0;if(!u&&!m)break;if(u!==m)throw new Error(`NVENC desync: base=${u}, alpha=${m}`);let p=C(i.data),x=C(a.data),l=[];this._seiInjected||(l.push(this._seiBuffer),this._seiInjected=true),l.push(se(p,x));let w=i.pts,V=i.dts,S=i.duration;i.data=Buffer.concat(l),i.pts=w,i.dts=V,i.duration=S===0n?1n:S,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),a.unref();}}};var D=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:a,...s}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let n=await y({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),u=a.addStream(n,o);return new r(n,_(),u)}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();}drain(e){return E(this._ctx,this._pkt,this._stream,e)}};var H=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:a,bitrate:s,muxer:c}=e,n=a.getEncoderCodec("hevc");if(!n)throw new Error("hevc_videotoolbox encoder not found");let u=await y({codec:n,width:t,height:o,fps:i,bitrate:s,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),m=c.addStream(u,"hvc1");return new r(u,_(),m)}async encode(e,t){e.pts=this._pts++,e.duration=1n,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 E(this._ctx,this._pkt,this._stream,e)}};var G="[Encoder]";async function me(r,e){let{width:t,height:o,fps:i,bitrate:a=8e6,disableHwCodec:s=false}=r,c=s?void 0:HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return p.debug(G,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await H.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c};if(c?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return p.debug(G,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await O.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c}}catch(u){p.warn(G,"Hardware codec session limits reached, use software encoder",u);}finally{c?.dispose();}return p.debug(G,"using software libx265 HEVC alpha encoder"),{video:await D.create({width:t,height:o,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:a,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await v.create(t,o)}}var de=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:a=false}=e,s=new T(i),{video:c,hwVideo:n,codec:u,hw:m}=await me(e,s),p;return a&&(p=await R.create({outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new r({video:c,hwVideo:n,audio:p,muxer:s,limiter:new I(1),outFile:i,codec:u,hw:m,width:t,height:o})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a$1}=this._s;if(t){var u=[];try{let l=a(u,this.bgraFrame(e));await t.encode(l,a$1);return}catch(m){var p=m,x=true;}finally{b(u,p,x);}}let{src:s,dst:c,sws:n}=i;return ok(n,"sws not initialized"),FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),FFmpegError.throwIfError(await n.scaleFrame(c,s),"bgraSws.scaleFrame"),o.encode(c,a$1)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a,width:s,height:c}=this._s,n=i??await v.create(s,c);try{let u=await n.decodePNG(e);t?await t.encode(u,a):(FFmpegError.throwIfError(n.dst.makeWritable(),"pngDst.makeWritable"),FFmpegError.throwIfError(await n.sws.scaleFrame(n.dst,u),"pngSws.scaleFrame"),await o.encode(n.dst,a));}finally{i||n[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:o,muxer:i}=this._s;t&&await o.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a$1}=this._s;try{var s=[];try{let p=a(s,i,!0);let x=a(s,e);let l=a(s,t);let w=a(s,o);await a$1.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var n=c,u=!0;}finally{var m=b(s,n,u);m&&await m;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a}=this._s;await a.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),o?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=a(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,a$1=true;}finally{b(t,i,a$1);}}bgraFrame(e){let t=B(this._s.width,this._s.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};export{I as ConcurrencyLimiter,de as EncoderPipeline,T as FormatMuxer,q as Lazy,Tt as periodical,Y as sleep,Ot as useRetry};//# sourceMappingURL=index.js.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbmFsLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92cHMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsInBlcmlvZGljYWwiLCJjYWxsYmFjayIsInRva2VuIiwiY2xvc2VkIiwidGljayIsImNvdW50IiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJ0aW1lb3V0RXJyb3IiLCJhcmdzIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiRkZtcGVnRXJyb3IiLCJjb2RlY0N0eCIsImNvZGVjVGFnIiwic3RyZWFtIiwicGt0Iiwib3BlblZpZGVvQ3R4Iiwib3B0cyIsImxhYmVsIiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwibWFrZUZyYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsImNvZGVjIiwiQ29kZWMiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJfc3RhY2siLCJzcmMiLCJpIiwiblNhbXBsZXMiLCJfX3VzaW5nIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiZGF0YSIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJiciIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwiYnciLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJOQUxfVU5JVF9QUkVGSVhfU0VJIiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImNodW5rcyIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwicyIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJiYXNlRXh0cmEiLCJhbHBoYUV4dHJhIiwiYmdyYUZyYW1lIiwicHRzIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwidXZTaXplIiwieSIsIngiLCJiYXNlUiIsImFscGhhUiIsImJhc2VSZWFkeSIsImFscGhhUmVhZHkiLCJkdHMiLCJkdXJhdGlvbiIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiVEFHIiwiY3JlYXRlVmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJIYXJkd2FyZUNvbnRleHQiLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsImxvZ2dlciIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwidmlkZW8iLCJod1ZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsInNhbXBsZVJhdGUiLCJpbnB1dCIsImRzdCIsImNzIiwibGltaXRlciIsIl9tIiwiX3YiLCJfaHYiLCJfYSIsIl9wcm9taXNlIiwiX2NvZGVjIl0sIm1hcHBpbmdzIjoiMHVDQUVPLElBQU1BLENBQUFBLENBQU4sS0FBYyxDQUNuQixXQUFBLENBQXFCQyxDQUFBQSxDQUFvQixDQUFwQixJQUFBLENBQUEsU0FBQSxDQUFBQSxFQUFxQixDQUFyQixTQUFBLENBRXJCLElBQUksS0FBQSxFQUFXLENBQ2IsT0FBSyxJQUFBLENBQUssWUFBQSxHQUNSLElBQUEsQ0FBSyxNQUFBLENBQVMsSUFBQSxDQUFLLFNBQUEsRUFBVSxDQUM3QixLQUFLLFlBQUEsQ0FBZSxJQUFBLENBQUEsQ0FFZixJQUFBLENBQUssTUFDZCxDQUVBLElBQUksV0FBQSxFQUF1QixDQUN6QixPQUFPLElBQUEsQ0FBSyxZQUNkLENBRVEsWUFBQSxDQUFlLEtBQUEsQ0FDZixNQUNWLEVDWE8sSUFBTUMsRUFBTixLQUF5QixDQU05QixXQUFBLENBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixlQUxiLE9B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QUEsQ0FDMUQsSUFBQSxJQUFTLEVBQUlDLENBQUFBLENBQUksa0JBQUEsQ0FBb0IsQ0FBQSxDQUFJLENBQUEsQ0FBRyxDQUFBLEVBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBQSxJQUFTLENBQUEsQ0FBSSxFQUFHLENBQUEsQ0FBSSxFQUFBLENBQUksQ0FBQSxFQUFBLENBQUtBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUEsR0FBTSxDQUFBLEVBQUssQ0FBQSxHQUFNLENBQUMsQ0FBQSxDQUN2REEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksTUFBQSxDQUFTQSxFQUFJLFFBQVEsQ0FBQSxDQUU1REQsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLENBQUEsQ0FBRWxHLENBQUFBLENBQU8sRUFBRSxDQUFBLENBQ2RrRyxDQUFBQSxDQUFHLENBQUEsQ0FBRWpHLENBQUFBLENBQVEsRUFBRSxFQUNmaUcsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBRVBBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNYLENBT08sU0FBU0csRUFBQUEsQ0FBY1IsQ0FBQUEsQ0FBaUI3RixDQUFBQSxDQUFlQyxFQUF3QixDQUNwRixJQUFNa0csQ0FBQUEsQ0FBTVAsRUFBQUEsQ0FBV0MsQ0FBTyxDQUFBLENBQzlCLEdBQUksQ0FBQ00sRUFBSyxPQUFPTixDQUFBQSxDQUVqQixJQUFNSyxDQUFBQSxDQUFLLElBQUl2QyxDQUFBQSxDQUNmLE9BQUFzQyxFQUFBQSxDQUFhQyxFQUFJQyxDQUFHLENBQUEsQ0FDcEJDLEVBQUFBLENBQWtCRixDQUFBQSxDQUFJQyxDQUFBQSxDQUFLbkcsQ0FBQUEsQ0FBT0MsQ0FBTSxDQUFBLENBRXhDaUcsRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNkQSxDQUFBQSxDQUFHLEtBQUEsQ0FBTSxDQUFDLENBQUEsQ0FDSFAsR0FBdUJyQyxDQUFBQSxDQUFTNEMsQ0FBQUEsQ0FBRyxJQUFJLENBQUMsQ0FDakQsQ0NoSUEsSUFBTUksRUFBQUEsQ0FBc0IsR0FTckIsU0FBU0MsRUFBQUEsQ0FBc0IvRyxDQUFBQSxDQUF1QyxDQUMzRSxHQUFNLENBQUUsYUFBQSxDQUFBZ0gsQ0FBQUEsQ0FBZSxlQUFBQyxDQUFlLENBQUEsQ0FBSWpILENBQUFBLENBQ3BDa0gsQ0FBQUEsQ0FBVzVCLENBQUFBLENBQWMwQixDQUFhLENBQUEsQ0FDdENHLENBQUFBLENBQVk3QixFQUFjMkIsQ0FBYyxDQUFBLENBRXhDRyxDQUFBQSxDQUFjLElBQUksR0FBQSxDQUN4QixJQUFBLElBQVd0QixDQUFBQSxJQUFPcUIsQ0FBQUEsQ0FBVyxDQUMzQixHQUFJckIsQ0FBQUEsQ0FBSSxJQUFBLEdBQVMsRUFBQSxDQUFJLFNBQ3JCLElBQU11QixDQUFBQSxDQUFNRCxDQUFBQSxDQUFZLElBQUl0QixDQUFBQSxDQUFJLElBQUksQ0FBQSxFQUFLLEVBQUMsQ0FDMUN1QixDQUFBQSxDQUFJLElBQUEsQ0FBS3ZCLENBQUcsRUFDWnNCLENBQUFBLENBQVksR0FBQSxDQUFJdEIsQ0FBQUEsQ0FBSSxJQUFBLENBQU11QixDQUFHLEVBQy9CLENBRUEsSUFBTUMsRUFBbUIsRUFBQyxDQUNwQkMsQ0FBQUEsQ0FBVSxJQUFJLEdBQUEsQ0FDcEIsSUFBQSxJQUFXekIsQ0FBQUEsSUFBT29CLENBQUFBLENBQVUsQ0FDMUIsSUFBTXhDLENBQUFBLENBQU9vQixDQUFBQSxDQUFJLElBQUEsR0FBUyxFQUFBLENBQUtlLEVBQUFBLENBQWNmLENBQUFBLENBQUksSUFBQSxDQUFNOUYsRUFBSyxLQUFBLENBQU9BLENBQUFBLENBQUssTUFBTSxDQUFBLENBQUk4RixDQUFBQSxDQUFJLElBQUEsQ0FFdEYsR0FEQXdCLENBQUFBLENBQU8sS0FBSzFDLENBQUFBLENBQW9CRixDQUFJLENBQUEsQ0FDaEMsQ0FBQzZDLENBQUFBLENBQVEsR0FBQSxDQUFJekIsQ0FBQUEsQ0FBSSxJQUFJLEVBQUcsQ0FDMUJ5QixDQUFBQSxDQUFRLEdBQUEsQ0FBSXpCLENBQUFBLENBQUksSUFBSSxDQUFBLENBQ3BCLElBQUEsSUFBVzBCLENBQUFBLElBQVlKLEVBQVksR0FBQSxDQUFJdEIsQ0FBQUEsQ0FBSSxJQUFJLENBQUEsRUFBSyxFQUFDLENBQ25Ed0IsQ0FBQUEsQ0FBTyxJQUFBLENBQUsxQyxFQUFvQmlCLENBQUFBLENBQWtCMkIsQ0FBQUEsQ0FBUyxJQUFBLENBQU0sQ0FBQyxDQUFDLEVBRXZFLENBQ0YsQ0FFQSxPQUFBRixDQUFBQSxDQUFPLElBQUEsQ0FBS0csQ0FBQUEsRUFBMEIsQ0FBQSxDQUMvQixNQUFBLENBQU8sTUFBQSxDQUFPSCxDQUFNLENBQzdCLENBRU8sU0FBU0csQ0FBQUEsRUFBbUMsQ0FHakQsR0FBTSxDQUFDQyxDQUFBQSxDQUFJQyxDQUFFLENBQUEsQ0FBSXhDLENBQUFBLENBQWdCMkIsRUFBQUEsQ0FBcUIsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVwRC9DLENBQUFBLENBQWlCLEdBQ2pCNkQsQ0FBQUEsQ0FBWSxDQUFDeEQsQ0FBQUEsQ0FBYUMsQ0FBQUEsR0FBYyxDQUM1QyxJQUFBLElBQVMxQixDQUFBQSxDQUFJMEIsQ0FBQUEsQ0FBSSxFQUFHMUIsQ0FBQUEsRUFBSyxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQUtvQixDQUFBQSxDQUFLLElBQUEsQ0FBTUssQ0FBQUEsRUFBT3pCLENBQUFBLENBQUssQ0FBQyxFQUMzRCxDQUFBLENBVUEsSUFSQWlGLENBQUFBLENBQVUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNkQSxDQUFBQSxDQUFVLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDZEEsQ0FBQUEsQ0FBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2RBLENBQUFBLENBQVUsQ0FBQSxDQUFHLENBQUMsRUFDZEEsQ0FBQUEsQ0FBVSxHQUFBLENBQUssQ0FBQyxDQUFBLENBQ2hCQSxDQUFBQSxDQUFVLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDZEEsRUFBVSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2RBLENBQUFBLENBQVUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNQN0QsQ0FBQUEsQ0FBSyxPQUFTLENBQUEsR0FBTSxDQUFBLEVBQUc2RCxDQUFBQSxDQUFVLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFNUMsT0FBTyxNQUFBLENBQU8sT0FBTyxDQUNuQmhELENBQUFBLENBQ0EsTUFBQSxDQUFPLElBQUEsQ0FBSyxDQUFDOEMsQ0FBQUEsQ0FBSUMsQ0FBRSxDQUFDLEVBQ3BCLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FBQyxHQUFBLENBQWEsQ0FBVyxDQUFDLENBQUEsQ0FDdEM3RCxDQUFBQSxDQUFTQyxDQUFJLENBQUEsQ0FDYixNQUFBLENBQU8sSUFBQSxDQUFLLENBQUMsR0FBSSxDQUFDLENBQ3BCLENBQUMsQ0FDSCxDQUVPLFNBQVM4RCxFQUFBQSxDQUFzQlgsQ0FBQUEsQ0FBcUJDLENBQUFBLENBQThCLENBQ3ZGLElBQU1HLENBQUFBLENBQW1CLEVBQUMsQ0FDMUIsSUFBQSxJQUFXeEIsQ0FBQUEsSUFBT29CLENBQUFBLENBQ2hCSSxDQUFBQSxDQUFPLElBQUEsQ0FBSzFDLENBQUFBLENBQW9Ca0IsQ0FBQUEsQ0FBSSxJQUFJLENBQUEsQ0FFMUMsSUFBQSxJQUFXQSxDQUFBQSxJQUFPcUIsQ0FBQUEsQ0FDWnJCLENBQUFBLENBQUksSUFBQSxDQUFPLEVBQUEsRUFDYndCLENBQUFBLENBQU8sS0FBSzFDLENBQUFBLENBQW9CaUIsQ0FBQUEsQ0FBa0JDLENBQUFBLENBQUksSUFBQSxDQUFNLENBQUMsQ0FBQyxDQUFBLENBR2xFLE9BQU8sT0FBTyxNQUFBLENBQU93QixDQUFNLENBQzdCLENDbkVPLElBQU1RLENBQUFBLENBQU4sTUFBTUMsQ0FBNEMsQ0FDL0MsRUFBQSxDQUNBLFVBQUEsQ0FDQSxJQUFBLENBQU8sRUFBQSxDQUNQLFlBQUEsQ0FBZSxLQUFBLENBQ2YsU0FBQSxDQUNBLFdBQUEsQ0FFQSxZQUFZQyxDQUFBQSxDQUFlLENBQ2pDLElBQUEsQ0FBSyxFQUFBLENBQUtBLENBQUFBLENBQ1YsSUFBQSxDQUFLLFVBQUEsQ0FBYVAsQ0FBQUEsR0FDcEIsQ0FFQSxhQUFhLE1BQUEsQ0FBT3pILENBQUFBLENBQTZELENBQy9FLEdBQU0sQ0FBRSxLQUFBLENBQUFRLEVBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQXdILENBQUFBLENBQUssT0FBQSxDQUFBQyxDQUFBQSxDQUFTLEtBQUEsQ0FBQWxILENBQU0sRUFBSWhCLENBQUFBLENBRXpDeUIsQ0FBQUEsQ0FBUUMsS0FBQUEsQ0FBTSxpQkFBQSxDQUFrQnlHLHFCQUFxQixDQUFBLENBQzNELEdBQUksQ0FBQzFHLEVBQU8sTUFBTSxJQUFJLEtBQUEsQ0FBTSw4QkFBOEIsQ0FBQSxDQUcxRCxJQUFNMkcsQ0FBQUEsQ0FBUyxDQUFFLE1BQUEzRyxDQUFBQSxDQUFPLEtBQUEsQ0FBQWpCLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQXdILENBQUFBLENBQUssT0FBQSxDQUFBQyxFQUFTLE9BQUEsQ0FEbkMsQ0FBRSxNQUFBLENBQVEsSUFBQSxDQUFNLEVBQUEsQ0FBSSxHQUFJLENBQzhCLENBQUEsQ0FFbEVHLEVBQVUsTUFBTXRJLENBQUFBLENBQWEsQ0FBRSxHQUFHcUksQ0FBQUEsQ0FBUSxXQUFBLENBQWE3RSxlQUFnQixDQUFBLENBQUcsa0JBQWtCLENBQUEsQ0FFNUYrRSxDQUFBQSxDQUFXLE1BQU12SSxDQUFBQSxDQUFhLENBQUUsR0FBR3FJLENBQUFBLENBQVEsV0FBQSxDQUFhRyxrQkFBbUIsQ0FBQSxDQUFHLG1CQUFtQixDQUFBLENBRWpHQyxDQUFBQSxDQUFVM0gsQ0FBQUEsRUFBVyxDQUNyQjRILENBQUFBLENBQVc1SCxDQUFBQSxHQUVYaEIsQ0FBQUEsQ0FBU21CLENBQUFBLENBQU0sU0FBQSxDQUFVcUgsQ0FBQUEsQ0FBUyxNQUFNLENBQUEsQ0FFeENLLENBQUFBLENBQVlMLENBQUFBLENBQVEsVUFDcEJNLENBQUFBLENBQWFMLENBQUFBLENBQVMsU0FBQSxDQUM1QixPQUFJSSxDQUFBQSxFQUFhQyxDQUFBQSxHQUNmOUksQ0FBQUEsQ0FBTyxRQUFBLENBQVMsVUFBWWtILEVBQUFBLENBQXNCLENBQ2hELGFBQUEsQ0FBZTJCLENBQUFBLENBQ2YsY0FBQSxDQUFnQkMsQ0FBQUEsQ0FDaEIsS0FBQSxDQUFBbkksQ0FBQUEsQ0FDQSxPQUFBQyxDQUNGLENBQUMsQ0FBQSxDQUFBLENBR0ksSUFBSXNILENBQUFBLENBQXNCLENBQUUsT0FBQSxDQUFBTSxDQUFBQSxDQUFTLFNBQUFDLENBQUFBLENBQVUsT0FBQSxDQUFBRSxDQUFBQSxDQUFTLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxNQUFBLENBQUE1SSxDQUFPLENBQUMsQ0FDbkYsQ0FFQSxNQUFNLE1BQUEsQ0FBTytJLENBQUFBLENBQWtCNUgsQ0FBQUEsQ0FBbUMsQ0FDaEUsR0FBTSxDQUFFLE9BQUEsQ0FBQXFILENBQUFBLENBQVMsUUFBQSxDQUFBQyxDQUFTLENBQUEsQ0FBSSxJQUFBLENBQUssRUFBQSxDQUM3Qk8sQ0FBQUEsQ0FBTSxLQUFLLElBQUEsRUFBQSxDQUVqQkQsQ0FBQUEsQ0FBVSxHQUFBLENBQU1DLENBQUFBLENBQ2hCRCxDQUFBQSxDQUFVLFFBQUEsQ0FBVyxFQUFBLENBQ3JCbEosV0FBQUEsQ0FBWSxhQUFhLE1BQU0ySSxDQUFBQSxDQUFRLFNBQUEsQ0FBVU8sQ0FBUyxDQUFBLENBQUcsZ0JBQWdCLENBQUEsQ0FHN0UsSUFBTWxHLEVBQU1rRyxDQUFBQSxDQUFVLElBQUEsR0FBTyxDQUFDLENBQUEsQ0FDeEJFLENBQUFBLENBQVFGLENBQUFBLENBQVUsUUFBQSxHQUFXLENBQUMsRUFDcEMsR0FBSSxDQUFDbEcsQ0FBQUEsRUFBTyxDQUFDb0csQ0FBQUEsQ0FBTyxNQUFNLElBQUksS0FBQSxDQUFNLDJCQUEyQixDQUFBLENBQy9ELElBQU1DLENBQUFBLENBQUlILENBQUFBLENBQVUsS0FBQSxDQUNkSSxDQUFBQSxDQUFJSixDQUFBQSxDQUFVLE1BQUEsQ0FDZEssRUFBUUYsQ0FBQUEsQ0FBSUMsQ0FBQUEsQ0FDWkUsQ0FBQUEsQ0FBQUEsQ0FBVUgsQ0FBQUEsRUFBSyxDQUFBLEdBQU1DLENBQUFBLEVBQUssQ0FBQSxDQUFBLENBQzNCLElBQUEsQ0FBSyxZQUFXLElBQUEsQ0FBSyxTQUFBLENBQVksTUFBQSxDQUFPLEtBQUEsQ0FBTUMsQ0FBQUEsQ0FBUUMsQ0FBQUEsQ0FBUyxDQUFDLENBQUEsQ0FBQSxDQUNyRSxJQUFNbEYsQ0FBQUEsQ0FBTSxJQUFBLENBQUssU0FBQSxDQUNqQixJQUFBLElBQVNtRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSUgsQ0FBQUEsQ0FBR0csSUFDckIsSUFBQSxJQUFTQyxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSUwsQ0FBQUEsQ0FBR0ssQ0FBQUEsRUFBQUEsQ0FDckJwRixDQUFBQSxDQUFJbUYsQ0FBQUEsQ0FBSUosRUFBSUssQ0FBQyxDQUFBLENBQUkxRyxDQUFBQSxDQUFJeUcsQ0FBQUEsQ0FBSUwsQ0FBQUEsQ0FBUU0sQ0FBQUEsQ0FBSSxDQUFBLENBQUksQ0FBQyxFQUc5Q3BGLENBQUFBLENBQUksSUFBQSxDQUFLLEdBQUEsQ0FBS2lGLENBQUFBLENBQU9BLENBQUFBLENBQVFDLENBQUFBLENBQVMsQ0FBQyxDQUFBLENBRXZDLEtBQUssV0FBQSxFQUFhLElBQUEsRUFBSyxDQUN2QixJQUFBLENBQUssV0FBQSxDQUFjdEksS0FBQUEsQ0FBTSxlQUFBLENBQWdCb0QsQ0FBQUEsQ0FBSyxDQUFFLE1BQUEsQ0FBUXVFLGtCQUFBQSxDQUFvQixLQUFBLENBQU9RLENBQUFBLENBQUcsTUFBQSxDQUFRQyxDQUFFLENBQUMsQ0FBQSxDQUNqRyxLQUFLLFdBQUEsQ0FBWSxHQUFBLENBQU1ILENBQUFBLENBQ3ZCLElBQUEsQ0FBSyxXQUFBLENBQVksUUFBQSxDQUFXLEVBQUEsQ0FDNUJuSixXQUFBQSxDQUFZLGFBQWEsTUFBTTRJLENBQUFBLENBQVMsU0FBQSxDQUFVLElBQUEsQ0FBSyxXQUFXLENBQUEsQ0FBRyxpQkFBaUIsQ0FBQSxDQUV0RixNQUFNLElBQUEsQ0FBSyxnQkFBQSxDQUFpQnRILENBQUssRUFDbkMsQ0FFQSxNQUFNLEtBQUEsQ0FBTUEsQ0FBQUEsQ0FBbUMsQ0FDN0MsTUFBTSxJQUFBLENBQUssRUFBQSxDQUFHLE9BQUEsQ0FBUSxTQUFBLENBQVUsSUFBSSxDQUFBLENBQ3BDLE1BQU0sS0FBSyxFQUFBLENBQUcsUUFBQSxDQUFTLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDckMsTUFBTSxJQUFBLENBQUssZ0JBQUEsQ0FBaUJBLENBQUssRUFDbkMsQ0FFQSxDQUFDLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBVSxDQUN2QixHQUFNLENBQUUsT0FBQSxDQUFBd0gsQ0FBQUEsQ0FBUyxRQUFBLENBQUFDLENBQUFBLENBQVUsT0FBQSxDQUFBSixDQUFBQSxDQUFTLFFBQUEsQ0FBQUMsQ0FBUyxFQUFJLElBQUEsQ0FBSyxFQUFBLENBQ3RERSxDQUFBQSxDQUFRLElBQUEsRUFBSyxDQUNiQyxDQUFBQSxDQUFTLElBQUEsRUFBSyxDQUNkLEtBQUssV0FBQSxFQUFhLElBQUEsRUFBSyxDQUN2QkosQ0FBQUEsQ0FBUSxXQUFBLEVBQVksQ0FDcEJDLENBQUFBLENBQVMsV0FBQSxHQUNYLENBRUEsTUFBYyxnQkFBQSxDQUFpQnRILENBQUFBLENBQW1DLENBQ2hFLEdBQU0sQ0FBRSxPQUFBLENBQUFxSCxFQUFTLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxPQUFBLENBQUFFLENBQUFBLENBQVMsUUFBQSxDQUFBQyxDQUFBQSxDQUFVLE1BQUEsQ0FBQTVJLENBQU8sRUFBSSxJQUFBLENBQUssRUFBQSxDQUM5RCxPQUFhLENBQ1gsSUFBTXdKLENBQUFBLENBQVEsTUFBTWhCLENBQUFBLENBQVEsY0FBY0csQ0FBTyxDQUFBLENBQzNDYyxDQUFBQSxDQUFTLE1BQU1oQixDQUFBQSxDQUFTLGFBQUEsQ0FBY0csQ0FBUSxDQUFBLENBRTlDYyxFQUFZRixDQUFBQSxFQUFTLENBQUEsQ0FDckJHLENBQUFBLENBQWFGLENBQUFBLEVBQVUsQ0FBQSxDQUM3QixHQUFJLENBQUNDLENBQUFBLEVBQWEsQ0FBQ0MsQ0FBQUEsQ0FBWSxNQUcvQixHQUFJRCxDQUFBQSxHQUFjQyxDQUFBQSxDQUNoQixNQUFNLElBQUksS0FBQSxDQUFNLHNCQUFzQkQsQ0FBUyxDQUFBLFFBQUEsRUFBV0MsQ0FBVSxDQUFBLENBQUUsQ0FBQSxDQUd4RSxJQUFNdEMsQ0FBQUEsQ0FBVzVCLENBQUFBLENBQWNrRCxFQUFRLElBQUssQ0FBQSxDQUN0Q3JCLENBQUFBLENBQVk3QixDQUFBQSxDQUFjbUQsQ0FBQUEsQ0FBUyxJQUFLLENBQUEsQ0FFeENuQixDQUFBQSxDQUFtQixFQUFDLENBQ3JCLElBQUEsQ0FBSyxZQUFBLEdBQ1JBLENBQUFBLENBQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxVQUFVLEVBQzNCLElBQUEsQ0FBSyxZQUFBLENBQWUsSUFBQSxDQUFBLENBRXRCQSxDQUFBQSxDQUFPLElBQUEsQ0FBS08sRUFBQUEsQ0FBc0JYLENBQUFBLENBQVVDLENBQVMsQ0FBQyxDQUFBLENBR3RELElBQU0wQixDQUFBQSxDQUFNTCxDQUFBQSxDQUFRLEdBQUEsQ0FDZGlCLENBQUFBLENBQU1qQixDQUFBQSxDQUFRLEdBQUEsQ0FDZGtCLEVBQVdsQixDQUFBQSxDQUFRLFFBQUEsQ0FDekJBLENBQUFBLENBQVEsSUFBQSxDQUFPLE1BQUEsQ0FBTyxNQUFBLENBQU9sQixDQUFNLENBQUEsQ0FDbkNrQixFQUFRLEdBQUEsQ0FBTUssQ0FBQUEsQ0FDZEwsQ0FBQUEsQ0FBUSxHQUFBLENBQU1pQixDQUFBQSxDQUNkakIsQ0FBQUEsQ0FBUSxRQUFBLENBQVdrQixDQUFBQSxHQUFhLEdBQUssRUFBQSxDQUFLQSxDQUFBQSxDQUMxQ2xCLENBQUFBLENBQVEsV0FBQSxDQUFjM0ksQ0FBQUEsQ0FBTyxLQUFBLENBQzdCMkksQ0FBQUEsQ0FBUSxTQUFBLENBQVVILEVBQVEsUUFBQSxDQUFVeEksQ0FBQUEsQ0FBTyxRQUFRLENBQUEsQ0FDbkQsTUFBTW1CLENBQUFBLENBQU0sV0FBQSxDQUFZd0gsQ0FBTyxFQUUvQkEsQ0FBQUEsQ0FBUSxLQUFBLEVBQU0sQ0FDZEMsQ0FBQUEsQ0FBUyxLQUFBLEdBQ1gsQ0FDRixDQUNGLEVDdElPLElBQU1rQixDQUFBQSxDQUFOLE1BQU1DLENBQW1DLENBQzdCLElBQUEsQ0FDQSxJQUFBLENBQ0EsT0FBQSxDQUNULElBQUEsQ0FBTyxHQUVQLFdBQUEsQ0FBWTFKLENBQUFBLENBQW1CSixDQUFBQSxDQUFhRCxDQUFBQSxDQUFnQixDQUNsRSxJQUFBLENBQUssSUFBQSxDQUFPSyxDQUFBQSxDQUNaLEtBQUssSUFBQSxDQUFPSixDQUFBQSxDQUNaLElBQUEsQ0FBSyxPQUFBLENBQVVELEVBQ2pCLENBRUEsYUFBYSxNQUFBLENBQU9HLEVBQWtELENBQ3BFLEdBQU0sQ0FBRSxTQUFBLENBQUE2SixDQUFBQSxDQUFXLFFBQUEsQ0FBQWpLLENBQUFBLENBQVUsU0FBQSxDQUFBa0ssRUFBVyxLQUFBLENBQUE5SSxDQUFBQSxDQUFPLEdBQUcrSSxDQUFLLENBQUEsQ0FBSS9KLENBQUFBLENBRXJEeUIsQ0FBQUEsQ0FBUUMsS0FBQUEsQ0FBTSxrQkFBa0JtSSxDQUFTLENBQUEsQ0FDL0MsR0FBSSxDQUFDcEksQ0FBQUEsQ0FBTyxNQUFNLElBQUksS0FBQSxDQUFNLDRCQUE0Qm9JLENBQVMsQ0FBQSxDQUFFLENBQUEsQ0FFbkUsSUFBTTNKLENBQUFBLENBQU0sTUFBTUgsQ0FBQUEsQ0FBYSxDQUFFLE1BQUEwQixDQUFBQSxDQUFPLEdBQUdzSSxDQUFBQSxDQUFNLFFBQUEsQ0FBQW5LLENBQUFBLENBQVUsT0FBQSxDQUFTa0ssQ0FBVSxDQUFBLENBQUcsZ0JBQWdCLENBQUEsQ0FDM0ZqSyxDQUFBQSxDQUFTbUIsQ0FBQUEsQ0FBTSxTQUFBLENBQVVkLENBQUFBLENBQUtOLENBQVEsQ0FBQSxDQUM1QyxPQUFPLElBQUlnSyxDQUFBQSxDQUFhMUosQ0FBQUEsQ0FBS1csQ0FBQUEsRUFBVyxDQUFHaEIsQ0FBTSxDQUNuRCxDQUVBLE1BQU0sT0FBT2MsQ0FBQUEsQ0FBY0ssQ0FBQUEsQ0FBbUMsQ0FDNURMLENBQUFBLENBQU0sR0FBQSxDQUFNLElBQUEsQ0FBSyxJQUFBLEVBQUEsQ0FDakJBLENBQUFBLENBQU0sU0FBVyxFQUFBLENBQ2pCakIsV0FBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVWlCLENBQUssRUFBRyxvQkFBb0IsQ0FBQSxDQUMvRSxNQUFNLElBQUEsQ0FBSyxLQUFBLENBQU1LLENBQUssRUFDeEIsQ0FFQSxNQUFNLEtBQUEsQ0FBTUEsQ0FBQUEsQ0FBbUMsQ0FDN0MsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLEVBQzlCLE1BQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUEsQ0FBSyxFQUN4QixDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxFQUFLLENBQ2YsSUFBQSxDQUFLLElBQUEsQ0FBSyxjQUNaLENBRVEsS0FBQSxDQUFNQSxDQUFBQSxDQUFtQyxDQUMvQyxPQUFPRCxDQUFBQSxDQUFhLElBQUEsQ0FBSyxLQUFNLElBQUEsQ0FBSyxJQUFBLENBQU0sSUFBQSxDQUFLLE9BQUEsQ0FBU0MsQ0FBSyxDQUMvRCxDQUNGLENBQUEsQ0M3Q08sSUFBTWdKLENBQUFBLENBQU4sTUFBTUMsQ0FBMEMsQ0FDN0MsSUFBQSxDQUNBLElBQUEsQ0FDQSxPQUFBLENBQ0EsS0FBTyxFQUFBLENBRVAsV0FBQSxDQUFZL0osQ0FBQUEsQ0FBbUJKLENBQUFBLENBQWFELENBQUFBLENBQWdCLENBQ2xFLElBQUEsQ0FBSyxJQUFBLENBQU9LLEVBQ1osSUFBQSxDQUFLLElBQUEsQ0FBT0osQ0FBQUEsQ0FDWixJQUFBLENBQUssT0FBQSxDQUFVRCxFQUNqQixDQUVBLGFBQWEsT0FBT0csQ0FBQUEsQ0FBMkQsQ0FDN0UsR0FBTSxDQUFFLEtBQUEsQ0FBQVEsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQUFBLENBQVEsR0FBQSxDQUFBd0gsQ0FBQUEsQ0FBSyxFQUFBLENBQUFpQyxDQUFBQSxDQUFJLE9BQUEsQ0FBQWhDLENBQUFBLENBQVMsS0FBQSxDQUFBbEgsQ0FBTSxFQUFJaEIsQ0FBQUEsQ0FFN0N5QixDQUFBQSxDQUFReUksQ0FBQUEsQ0FBRyxlQUFBLENBQWdCLE1BQU0sQ0FBQSxDQUN2QyxHQUFJLENBQUN6SSxFQUFPLE1BQU0sSUFBSSxLQUFBLENBQU0scUNBQXFDLENBQUEsQ0FFakUsSUFBTXZCLENBQUFBLENBQU0sTUFBTUgsRUFDaEIsQ0FDRSxLQUFBLENBQUEwQixDQUFBQSxDQUNBLEtBQUEsQ0FBQWpCLENBQUFBLENBQ0EsTUFBQSxDQUFBQyxDQUFBQSxDQUNBLEdBQUEsQ0FBQXdILEVBQ0EsT0FBQSxDQUFBQyxDQUFBQSxDQUNBLFdBQUEsQ0FBYTNFLGVBQUFBLENBQ2IsVUFBQSxDQUFZNEcsZ0JBQUFBLENBQ1osUUFBQSxDQUFVLE1BQUEsQ0FDVixRQUFTLENBQUUsYUFBQSxDQUFlLEdBQUksQ0FDaEMsQ0FBQSxDQUNBLGFBQ0YsQ0FBQSxDQUNNdEssQ0FBQUEsQ0FBU21CLEVBQU0sU0FBQSxDQUFVZCxDQUFBQSxDQUFLLE1BQU0sQ0FBQSxDQUMxQyxPQUFPLElBQUkrSixDQUFBQSxDQUFvQi9KLENBQUFBLENBQUtXLEdBQVcsQ0FBR2hCLENBQU0sQ0FDMUQsQ0FFQSxNQUFNLE1BQUEsQ0FBTytJLENBQUFBLENBQWtCNUgsQ0FBQUEsQ0FBbUMsQ0FDaEU0SCxDQUFBQSxDQUFVLEdBQUEsQ0FBTSxJQUFBLENBQUssSUFBQSxFQUFBLENBQ3JCQSxDQUFBQSxDQUFVLFFBQUEsQ0FBVyxFQUFBLENBQ3JCbEosV0FBQUEsQ0FBWSxhQUFhLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxTQUFBLENBQVVrSixDQUFTLENBQUEsQ0FBRyxpQkFBaUIsQ0FBQSxDQUNoRixNQUFNLElBQUEsQ0FBSyxLQUFBLENBQU01SCxDQUFLLEVBQ3hCLENBRUEsTUFBTSxLQUFBLENBQU1BLENBQUFBLENBQW1DLENBQzdDLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxTQUFBLENBQVUsSUFBSSxDQUFBLENBQzlCLE1BQU0sSUFBQSxDQUFLLE1BQU1BLENBQUssRUFDeEIsQ0FFQSxDQUFDLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBVSxDQUN2QixLQUFLLElBQUEsQ0FBSyxJQUFBLEVBQUssQ0FDZixJQUFBLENBQUssSUFBQSxDQUFLLFdBQUEsR0FDWixDQUVRLE1BQU1BLENBQUFBLENBQW1DLENBQy9DLE9BQU9ELENBQUFBLENBQWEsSUFBQSxDQUFLLElBQUEsQ0FBTSxJQUFBLENBQUssSUFBQSxDQUFNLEtBQUssT0FBQSxDQUFTQyxDQUFLLENBQy9ELENBQ0YsQ0FBQSxDQ3hEQSxJQUFNb0osQ0FBQUEsQ0FBTSxXQUFBLENBbUJaLGVBQXNCQyxFQUFBQSxDQUFtQnJLLENBQUFBLENBQTJCZ0IsQ0FBQUEsQ0FBeUMsQ0FDM0csR0FBTSxDQUFFLEtBQUEsQ0FBQVIsQ0FBQUEsQ0FBTyxPQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQXdILENBQUFBLENBQUssT0FBQSxDQUFBQyxDQUFBQSxDQUFVLEdBQUEsQ0FBVyxjQUFBLENBQUFvQyxDQUFBQSxDQUFpQixLQUFNLENBQUEsQ0FBSXRLLENBQUFBLENBQ3RFa0ssQ0FBQUEsQ0FBS0ksQ0FBQUEsQ0FBaUIsTUFBQSxDQUFhQyxlQUFBQSxDQUFnQixJQUFBLEVBQUssRUFBSyxPQUVuRSxHQUFJLENBQ0YsR0FBSUwsQ0FBQUEsRUFBSSxjQUFBLEdBQW1CTSw2QkFBQUEsRUFBaUNOLENBQUFBLENBQUcsZUFBQSxDQUFnQixNQUFNLENBQUEsQ0FDbkYsT0FBQU8sQ0FBQUEsQ0FBTyxLQUFBLENBQU1MLENBQUFBLENBQUssdUNBQXVDLENBQUEsQ0FFbEQsQ0FBRSxRQURPLE1BQU1KLENBQUFBLENBQW9CLE1BQUEsQ0FBTyxDQUFFLEtBQUEsQ0FBQXhKLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLElBQUF3SCxDQUFBQSxDQUFLLEVBQUEsQ0FBQWlDLENBQUFBLENBQUksT0FBQSxDQUFBaEMsQ0FBQUEsQ0FBUyxLQUFBLENBQUFsSCxDQUFNLENBQUMsRUFDekUsRUFBQSxDQUFBa0osQ0FBRyxDQUFBLENBRXZCLEdBQUlBLENBQUFBLEVBQUksY0FBQSxHQUFtQlEscUJBQUFBLEVBQXlCUixDQUFBQSxDQUFHLGdCQUFnQixNQUFNLENBQUEsQ0FDM0UsT0FBQU8sQ0FBQUEsQ0FBTyxLQUFBLENBQU1MLENBQUFBLENBQUssMkNBQTJDLENBQUEsQ0FFdEQsQ0FBRSxPQUFBLENBRE8sTUFBTXRDLENBQUFBLENBQXNCLE1BQUEsQ0FBTyxDQUFFLEtBQUEsQ0FBQXRILENBQUFBLENBQU8sTUFBQSxDQUFBQyxFQUFRLEdBQUEsQ0FBQXdILENBQUFBLENBQUssRUFBQSxDQUFBaUMsQ0FBQUEsQ0FBSSxPQUFBLENBQUFoQyxDQUFBQSxDQUFTLEtBQUEsQ0FBQWxILENBQU0sQ0FBQyxDQUFBLENBQzNFLEVBQUEsQ0FBQWtKLENBQUcsQ0FFekIsQ0FBQSxNQUFTaE0sQ0FBQUEsQ0FBRyxDQUNWdU0sQ0FBQUEsQ0FBTyxLQUFLTCxDQUFBQSxDQUFLLDZEQUFBLENBQStEbE0sQ0FBQyxFQUNuRixDQUFBLE9BQUUsQ0FDQWdNLENBQUFBLEVBQUksT0FBQSxHQUNOLENBRUEsT0FBQU8sQ0FBQUEsQ0FBTyxLQUFBLENBQU1MLENBQUFBLENBQUssMkNBQTJDLENBQUEsQ0FZdEQsQ0FBRSxNQVhLLE1BQU1ULENBQUFBLENBQWEsTUFBQSxDQUFPLENBQ3RDLEtBQUEsQ0FBQW5KLENBQUFBLENBQ0EsTUFBQSxDQUFBQyxDQUFBQSxDQUNBLElBQUF3SCxDQUFBQSxDQUNBLFNBQUEsQ0FBVzBDLGtCQUFBQSxDQUNYLFFBQUEsQ0FBVSxNQUFBLENBQ1YsU0FBQSxDQUFXLENBQUUsTUFBQSxDQUFRLFFBQUEsQ0FBVSxhQUFBLENBQWUsK0NBQWdELENBQUEsQ0FDOUYsT0FBQSxDQUFBekMsQ0FBQUEsQ0FDQSxXQUFBLENBQWExRSxtQkFBQUEsQ0FDYixNQUFBeEMsQ0FDRixDQUFDLENBQUEsQ0FDZSxLQUFBLENBQU8sTUFBTWtDLENBQUFBLENBQVcsTUFBQSxDQUFPMUMsQ0FBQUEsQ0FBT0MsQ0FBTSxDQUFFLENBQ2hFLENDakNPLElBQU1tSyxFQUFBQSxDQUFOLE1BQU1DLENBQWdCLENBQ25CLEdBQ0EsU0FBQSxDQUFZLEtBQUEsQ0FFWixXQUFBLENBQVk3QyxDQUFBQSxDQUFrQixDQUNwQyxJQUFBLENBQUssRUFBQSxDQUFLQSxFQUNaLENBRUEsYUFBYSxNQUFBLENBQU9oSSxDQUFBQSxDQUF3RCxDQUMxRSxHQUFNLENBQUUsS0FBQSxDQUFBUSxDQUFBQSxDQUFPLE9BQUFDLENBQUFBLENBQVEsT0FBQSxDQUFBcUssQ0FBQUEsQ0FBUyxTQUFBLENBQUFDLENBQUFBLENBQVksS0FBTSxDQUFBLENBQUkvSyxDQUFBQSxDQUNoRGdCLEVBQVEsSUFBSTFCLENBQUFBLENBQVl3TCxDQUFPLENBQUEsQ0FDL0IsQ0FBRSxLQUFBLENBQUFFLENBQUFBLENBQU8sT0FBQSxDQUFBQyxFQUFTLEtBQUEsQ0FBQXhKLENBQUFBLENBQU8sRUFBQSxDQUFBeUksQ0FBRyxDQUFBLENBQUksTUFBTUcsRUFBQUEsQ0FBbUJySyxDQUFBQSxDQUFNZ0IsQ0FBSyxDQUFBLENBRXRFa0ssQ0FBQUEsQ0FDSixPQUFJSCxDQUFBQSxHQUNGRyxDQUFBQSxDQUFRLE1BQU01SixDQUFBQSxDQUFhLE1BQUEsQ0FBTyxDQUNoQyxhQUFBLENBQWUsS0FBQSxDQUNmLFlBQUEsQ0FBY0Qsa0JBQUFBLENBQ2QsU0FBQSxDQUFXOEosY0FBQUEsQ0FDWCxZQUFBLENBQWMsSUFBQSxDQUNkLFFBQVMsS0FBQSxDQUNULEtBQUEsQ0FBQW5LLENBQ0YsQ0FBQyxDQUFBLENBQUEsQ0FHSCxNQUFNQSxDQUFBQSxDQUFNLElBQUEsR0FDTCxJQUFJNkosQ0FBQUEsQ0FBZ0IsQ0FDekIsS0FBQSxDQUFBRyxDQUFBQSxDQUNBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxLQUFBLENBQUFDLEVBQ0EsS0FBQSxDQUFBbEssQ0FBQUEsQ0FDQSxPQUFBLENBQVMsSUFBSXJELENBQUFBLENBQW1CLENBQUMsQ0FBQSxDQUNqQyxPQUFBLENBQUFtTixFQUNBLEtBQUEsQ0FBQXJKLENBQUFBLENBQ0EsRUFBQSxDQUFBeUksQ0FBQUEsQ0FDQSxLQUFBLENBQUExSixDQUFBQSxDQUNBLE1BQUEsQ0FBQUMsQ0FDRixDQUFDLENBQ0gsQ0FFQSxVQUFBLENBQVcySyxDQUFBQSxDQUEwQixDQUNuQyxJQUFBLENBQUssRUFBQSxDQUFHLEtBQUEsRUFBTyxhQUFhQSxDQUFVLEVBQ3hDLENBRUEsTUFBTSxVQUFBLENBQVdDLENBQUFBLENBQThCLENBQzdDLE1BQU0sS0FBSyxFQUFBLENBQUcsT0FBQSxDQUFRLFFBQUEsQ0FBUyxTQUFZLENBQ3pDLEdBQU0sQ0FBRSxPQUFBLENBQUFKLEVBQVMsS0FBQSxDQUFBRCxDQUFBQSxDQUFPLEtBQUEsQ0FBQXZKLENBQUFBLENBQU8sS0FBQSxDQUFBVCxHQUFNLENBQUEsQ0FBSSxJQUFBLENBQUssR0FDOUMsR0FBSWlLLENBQUFBLENBQVMsQ0FDWCxJQUFBeEksQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLElBQU05QixDQUFBQSxDQUFRa0MsQ0FBQUEsQ0FBQUosRUFBQSxJQUFBLENBQUssU0FBQSxDQUFVNEksQ0FBSyxDQUFBLENBQUEsQ0FDbEMsTUFBTUosQ0FBQUEsQ0FBUSxNQUFBLENBQU90SyxDQUFBQSxDQUFPSyxHQUFLLENBQUEsQ0FDakMsTUFBQSxDQUFBLE1BRkE4QixDQUFBQSxDQUFBLENBQUEsSUFBQUMsQ0FBQUEsQ0FBQUQsQ0FBQUEsQ0FBQUUsQ0FBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBQyxFQUFBUixDQUFBQSxDQUFBTSxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQUdGLENBQ0EsR0FBTSxDQUFFLEdBQUEsQ0FBQU4sQ0FBQUEsQ0FBSyxJQUFBNEksQ0FBQUEsQ0FBSyxHQUFBLENBQUE1SCxDQUFJLENBQUEsQ0FBSWpDLENBQUFBLENBQzFCLE9BQUE0QixFQUFBQSxDQUFHSyxDQUFBQSxDQUFLLHFCQUFxQixDQUFBLENBQzdCaEUsV0FBQUEsQ0FBWSxZQUFBLENBQWFnRCxDQUFBQSxDQUFJLFlBQUEsRUFBYSxDQUFHLHNCQUFzQixDQUFBLENBQ25FaEQsWUFBWSxZQUFBLENBQWFnRCxDQUFBQSxDQUFJLFVBQUEsQ0FBVzJJLENBQUssQ0FBQSxDQUFHLG9CQUFvQixDQUFBLENBQ3BFM0wsV0FBQUEsQ0FBWSxhQUFhNEwsQ0FBQUEsQ0FBSSxZQUFBLEVBQWEsQ0FBRyxzQkFBc0IsQ0FBQSxDQUNuRTVMLFdBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1nRSxFQUFJLFVBQUEsQ0FBVzRILENBQUFBLENBQUs1SSxDQUFHLENBQUEsQ0FBRyxvQkFBb0IsQ0FBQSxDQUN0RXNJLENBQUFBLENBQU8sTUFBQSxDQUFPTSxFQUFLdEssR0FBSyxDQUNqQyxDQUFDLEVBQ0gsQ0FFQSxNQUFNLFNBQUEsQ0FBVXlDLENBQUFBLENBQWdDLENBQzlDLE1BQU0sSUFBQSxDQUFLLEVBQUEsQ0FBRyxPQUFBLENBQVEsUUFBQSxDQUFTLFNBQVksQ0FDekMsR0FBTSxDQUFFLE9BQUEsQ0FBQXdILENBQUFBLENBQVMsS0FBQSxDQUFBRCxDQUFBQSxDQUFPLEtBQUEsQ0FBQXZKLENBQUFBLENBQU8sS0FBQSxDQUFBVCxDQUFBQSxDQUFPLE1BQUFSLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFPLENBQUEsQ0FBSSxJQUFBLENBQUssRUFBQSxDQUN2RDhLLENBQUFBLENBQUs5SixDQUFBQSxFQUFVLE1BQU15QixDQUFBQSxDQUFXLE1BQUEsQ0FBTzFDLENBQUFBLENBQU9DLENBQU0sQ0FBQSxDQUMxRCxHQUFJLENBQ0YsSUFBTWlDLENBQUFBLENBQU0sTUFBTTZJLENBQUFBLENBQUcsU0FBQSxDQUFVOUgsQ0FBTyxDQUFBLENBQ2xDd0gsQ0FBQUEsQ0FDRixNQUFNQSxFQUFRLE1BQUEsQ0FBT3ZJLENBQUFBLENBQUsxQixDQUFLLENBQUEsRUFFL0J0QixXQUFBQSxDQUFZLFlBQUEsQ0FBYTZMLENBQUFBLENBQUcsR0FBQSxDQUFJLGNBQWEsQ0FBRyxxQkFBcUIsQ0FBQSxDQUNyRTdMLFdBQUFBLENBQVksWUFBQSxDQUFhLE1BQU02TCxDQUFBQSxDQUFHLEdBQUEsQ0FBSSxXQUFXQSxDQUFBQSxDQUFHLEdBQUEsQ0FBSzdJLENBQUcsQ0FBQSxDQUFHLG1CQUFtQixDQUFBLENBQ2xGLE1BQU1zSSxDQUFBQSxDQUFPLE9BQU9PLENBQUFBLENBQUcsR0FBQSxDQUFLdkssQ0FBSyxDQUFBLEVBRXJDLENBQUEsT0FBRSxDQUNLUyxDQUFBQSxFQUFPOEosQ0FBQUEsQ0FBRyxPQUFPLE9BQU8sQ0FBQSxHQUMvQixDQUNGLENBQUMsRUFDSCxDQUVBLE1BQU0sWUFBWS9JLENBQUFBLENBQTRCLENBQzVDLEdBQU0sQ0FBRSxLQUFBLENBQUEwSSxDQUFBQSxDQUFPLE9BQUEsQ0FBQU0sQ0FBQUEsQ0FBUyxNQUFBeEssQ0FBTSxDQUFBLENBQUksSUFBQSxDQUFLLEVBQUEsQ0FDbkNrSyxDQUFBQSxFQUFPLE1BQU1NLENBQUFBLENBQVEsUUFBQSxDQUFTLElBQU1OLENBQUFBLENBQU0sTUFBQSxDQUFPMUksQ0FBQUEsQ0FBS3hCLENBQUssQ0FBQyxFQUNsRSxDQUVBLE1BQU0sUUFBMEIsQ0FDOUIsR0FBTSxDQUFFLEtBQUEsQ0FBQWdLLENBQUFBLENBQU8sT0FBQSxDQUFBQyxDQUFBQSxDQUFTLEtBQUEsQ0FBQUMsRUFBTyxLQUFBLENBQUFsSyxDQUFBQSxDQUFPLE9BQUEsQ0FBQXdLLEdBQVEsQ0FBQSxDQUFJLElBQUEsQ0FBSyxFQUFBLENBQ3ZELEdBQUksQ0FDRixJQUFBL0ksQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLElBQVlnSixDQUFBQSxDQUFLNUksQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQXpCLENBQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FDakIsSUFBTTBLLENBQUFBLENBQUs3SSxDQUFBQSxDQUFBSixDQUFBQSxDQUFBdUksQ0FBQUEsQ0FBQUEsQ0FDWCxJQUFNVyxDQUFBQSxDQUFNOUksQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQXdJLEdBQ1osSUFBTVcsQ0FBQUEsQ0FBSy9JLENBQUFBLENBQUFKLENBQUFBLENBQUF5SSxDQUFBQSxDQUFBQSxDQUNYLE1BQU1NLEdBQUFBLENBQVEsS0FBQSxHQUNkLE1BQU1OLENBQUFBLEVBQU8sS0FBQSxDQUFNbEssQ0FBSyxDQUFBLENBQ3BCaUssQ0FBQUEsQ0FDRixNQUFNQSxDQUFBQSxDQUFRLE1BQU1qSyxDQUFLLENBQUEsQ0FFekIsTUFBTWdLLENBQUFBLENBQU8sS0FBQSxDQUFNaEssQ0FBSyxFQUFBLENBQUEsTUFUMUI4QixDQUFBQSxDQUFBLEtBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLENBQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsT0FBQSxDQUFBLElBQUE2SSxDQUFBQSxDQUFBNUksQ0FBQUEsQ0FBQVIsQ0FBQUEsQ0FBQU0sQ0FBQUEsQ0FBQUMsR0FBQTZJLENBQUFBLEVBQUEsTUFBQUEsRUFBQUEsQ0FXRixDQUFBLE9BQUUsQ0FDQSxJQUFBLENBQUssSUFBQSxHQUNQLENBQ0EsT0FBTyxJQUFBLENBQUssRUFBQSxDQUFHLE9BQ2pCLENBRUEsTUFBTyxNQUFBLENBQU8sWUFBWSxHQUFtQixDQUMzQyxHQUFJLElBQUEsQ0FBSyxTQUFBLENBQVcsT0FDcEIsR0FBTSxDQUFFLEtBQUEsQ0FBQWIsRUFBTyxPQUFBLENBQUFDLENBQUFBLENBQVMsS0FBQSxDQUFBQyxDQUFBQSxDQUFPLEtBQUEsQ0FBQWxLLENBQUFBLENBQU8sT0FBQSxDQUFBd0ssQ0FBUSxFQUFJLElBQUEsQ0FBSyxFQUFBLENBQ3ZELE1BQU1BLENBQUFBLENBQVEsS0FBQSxFQUFNLENBQ3BCUixDQUFBQSxHQUFRLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBRSxDQUN4QkMsQ0FBQUEsR0FBVSxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDMUJDLENBQUFBLEdBQVEsT0FBTyxPQUFPLENBQUEsRUFBRSxDQUN4QixNQUFNbEssQ0FBQUEsQ0FBTSxNQUFBLENBQU8sWUFBWSxDQUFBLEdBQy9CLElBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FFUSxJQUFBLEVBQWEsQ0FHbkIsSUFBQXlCLENBQUFBLENBQUEsT0FGQSxHQUFJLElBQUEsQ0FBSyxTQUFBLENBQVcsT0FDcEIsSUFBQSxDQUFLLFNBQUEsQ0FBWSxDQUFBLENBQUEsQ0FDakIsSUFBTXFKLEVBQVNqSixDQUFBQSxDQUFBSixDQUFBQSxDQUFBLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFBLENBQ3ZCLElBQUEsQ0FBSyxFQUFBLENBQUcsRUFBQSxFQUFJLFVBQVEsQ0FBQSxNQURwQkssQ0FBQUEsQ0FBQSxDQUFBLElBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLEdBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVIsRUFBQU0sQ0FBQUEsQ0FBQUMsR0FBQUEsRUFBQUEsQ0FFRixDQUVRLFNBQUEsQ0FBVXFJLENBQUFBLENBQXNCLENBQ3RDLElBQU0xSyxDQUFBQSxDQUFRSixFQUFVLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFPLElBQUEsQ0FBSyxFQUFBLENBQUcsTUFBQSxDQUFRZ0QsZUFBZSxDQUFBLENBQ3RFLE9BQUE3RCxXQUFBQSxDQUFZLFlBQUEsQ0FBYWlCLENBQUFBLENBQU0sVUFBQSxDQUFXMEssQ0FBSyxDQUFBLENBQUcsc0JBQXNCLENBQUEsQ0FDakUxSyxDQUNULENBQ0YiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0IH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgZW5jb2RlTmFsSGVhZGVyLCB0eXBlIE5hbFVuaXQsIHJld3JpdGVOYWxMYXllcklkLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbmNvbnN0IE5BTF9VTklUX1BSRUZJWF9TRUkgPSAzOTtcblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSAzMikgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gMzIgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhbHBoYU5hbC5kYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9VTklUX1BSRUZJWF9TRUksIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGNcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10pOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgMzIpIHtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQobmFsLmRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9QSVhfRk1UX1lVVjQyMFAsIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJLCBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX3NlaUJ1ZmZlcjogQnVmZmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcbiAgcHJpdmF0ZSBfc2VpSW5qZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWxwaGFCdWY/OiBCdWZmZXI7XG4gIHByaXZhdGUgX2FscGhhRnJhbWU/OiBGcmFtZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9zZWlCdWZmZXIgPSBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3Qg4oCUIE5WRU5DIGNvbnZlcnRzIGludGVybmFsbHksIG5vIFNXUyBuZWVkZWRcbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKTtcbiAgICAvLyBBbHBoYSBhcyBZVVY0MjBQIOKAlCBtYXRjaGluZyBiaXRyYXRlL0dPUCBmb3IgY29tcGF0aWJsZSBTUFMgYWNyb3NzIGxheWVyc1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIik7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcblxuICAgIGNvbnN0IGJhc2VFeHRyYSA9IGJhc2VDdHguZXh0cmFEYXRhO1xuICAgIGNvbnN0IGFscGhhRXh0cmEgPSBhbHBoYUN0eC5leHRyYURhdGE7XG4gICAgaWYgKGJhc2VFeHRyYSAmJiBhbHBoYUV4dHJhKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUV4dHJhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFFeHRyYSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBBbHBoYTogZXh0cmFjdCBhbHBoYSBjaGFubmVsIOKGkiBZVVY0MjBQXG4gICAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICAgIGlmICghc3JjIHx8ICFzcmNMcykgdGhyb3cgbmV3IEVycm9yKFwiZW5jb2RlOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICAgIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICAgIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gICAgY29uc3QgdXZTaXplID0gKHcgPj4gMSkgKiAoaCA+PiAxKTtcbiAgICBpZiAoIXRoaXMuX2FscGhhQnVmKSB0aGlzLl9hbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIHV2U2l6ZSAqIDIpO1xuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2FscGhhQnVmO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbeSAqIHcgKyB4XSA9IHNyY1t5ICogc3JjTHMgKyB4ICogNCArIDNdITtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmLmZpbGwoMTI4LCB5U2l6ZSwgeVNpemUgKyB1dlNpemUgKiAyKTtcblxuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKGJ1ZiwgeyBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCwgd2lkdGg6IHcsIGhlaWdodDogaCB9KTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lLnB0cyA9IHB0cztcbiAgICB0aGlzLl9hbHBoYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZSh0aGlzLl9hbHBoYUZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZT8uZnJlZSgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkludGVybGVhdmVkKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSA9IHRoaXMuX3M7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGJhc2VSID0gYXdhaXQgYmFzZUN0eC5yZWNlaXZlUGFja2V0KGJhc2VQa3QpO1xuICAgICAgY29uc3QgYWxwaGFSID0gYXdhaXQgYWxwaGFDdHgucmVjZWl2ZVBhY2tldChhbHBoYVBrdCk7XG5cbiAgICAgIGNvbnN0IGJhc2VSZWFkeSA9IGJhc2VSID49IDA7XG4gICAgICBjb25zdCBhbHBoYVJlYWR5ID0gYWxwaGFSID49IDA7XG4gICAgICBpZiAoIWJhc2VSZWFkeSAmJiAhYWxwaGFSZWFkeSkgYnJlYWs7XG5cbiAgICAgIC8vIEJvdGggbXVzdCBwcm9kdWNlIHBhY2tldHMgdG9nZXRoZXIgKGJmPTAgZW5zdXJlcyB0aGlzKVxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogYmFzZT0ke2Jhc2VSZWFkeX0sIGFscGhhPSR7YWxwaGFSZWFkeX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VQa3QuZGF0YSEpO1xuICAgICAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYVBrdC5kYXRhISk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzLCBhbHBoYU5hbHMpKTtcblxuICAgICAgLy8gU2F2ZSB0aW1lc3RhbXBzIGJlZm9yZSBkYXRhIHJlcGxhY2VtZW50IChzZXR0ZXIgbWF5IHJlc2V0IHRoZW0pXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVmlkZW9FbmNvZGVyKG9wdHM6IFZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfU0FNUExFX0ZNVF9GTFRQLCBGRl9FTkNPREVSX0FBQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBjb2RlYywgaHcgfSA9IGF3YWl0IGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzLCBtdXhlcik7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHZpZGVvLFxuICAgICAgaHdWaWRlbyxcbiAgICAgIGF1ZGlvLFxuICAgICAgbXV4ZXIsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZSxcbiAgICAgIGNvZGVjLFxuICAgICAgaHcsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShmcmFtZSwgbXV4ZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNyYywgZHN0LCBzd3MgfSA9IGNvZGVjITtcbiAgICAgIG9rKHN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhU3JjLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYVNyYy5mcm9tQnVmZmVyXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGRzdC5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBzd3Muc2NhbGVGcmFtZShkc3QsIHNyYyksIFwiYmdyYVN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgcmV0dXJuIHZpZGVvIS5lbmNvZGUoZHN0LCBtdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIGNvbnN0IGNzID0gY29kZWMgPz8gKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGNzLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY3MuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInBuZ0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNzLnN3cy5zY2FsZUZyYW1lKGNzLmRzdCwgc3JjKSwgXCJwbmdTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgICAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNzLmRzdCwgbXV4ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNvZGVjKSBjc1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhdWRpbywgbGltaXRlciwgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGF1ZGlvKSBhd2FpdCBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IGF1ZGlvLmVuY29kZShwY20sIG11eGVyKSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHZpZGVvO1xuICAgICAgdXNpbmcgX2h2ID0gaHdWaWRlbztcbiAgICAgIHVzaW5nIF9hID0gYXVkaW87XG4gICAgICBhd2FpdCBsaW1pdGVyLmRyYWluKCk7XG4gICAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZnJlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdXNpbmcgX2NvZGVjID0gdGhpcy5fcy5jb2RlYztcbiAgICB0aGlzLl9zLmh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mud2lkdGgsIHRoaXMuX3MuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiJdfQ==
1
+ import'source-map-support/register.js';import {a,b,o}from'./chunk-VBQTMHHL.js';export{w as DEFAULT_DURATION,v as DEFAULT_FPS,u as DEFAULT_HEIGHT,x as DEFAULT_OUT_FILE,t as DEFAULT_WIDTH,n as Logger,q as PUP_ARGS_KEY,y as RenderSchema,z as defaultRenderOptions,s as exec,o as logger,p as noerr,r as pargs,d as parseNumber,e as parseString,c as penv,A as pup,l as pupApp,j as pupDeterministic,h as pupDisableGPU,i as pupDisableHwCodec,f as pupLogLevel,k as pupPkgRoot,g as pupUseInnerProxy,m as pupWindowTolerant}from'./chunk-VBQTMHHL.js';import {setTimeout as setTimeout$1}from'timers/promises';import {FormatContext,FFmpegError,Codec,FF_DECODER_PNG,CodecContext,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,Frame,Rational,FilterGraph,Filter,FilterInOut,AV_PIX_FMT_BGRA as AV_PIX_FMT_BGRA$1,Packet}from'node-av';import {HardwareContext}from'node-av/api';import {FF_HWDEVICE_TYPE_VIDEOTOOLBOX,FF_HWDEVICE_TYPE_CUDA,AV_PIX_FMT_YUVA420P,FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,FF_ENCODER_LIBOPUS,AV_SAMPLE_FMT_FLT,AV_PIX_FMT_BGRA,FF_ENCODER_LIBX265,AV_CHANNEL_LAYOUT_STEREO,AV_CODEC_FLAG_GLOBAL_HEADER,AVERROR_EAGAIN,AVERROR_EOF,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_YUV420P,AVCOL_RANGE_JPEG}from'node-av/constants';import {ok}from'assert';var Y=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var T=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(a=>{this._active--,o(a),this.next();}).catch(a=>{this._active--,i(a),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();}};function q(r){return new Promise(e=>setTimeout(e,r))}function Dt(r,e,t){return new Promise((o,i)=>{let a=setTimeout(()=>i(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,i).finally(()=>clearTimeout(a));})}function Ut(r,e){let t,o=false;async function i(a){await r(a),!o&&(t=setTimeout(()=>i(a+1),e));}return t=setTimeout(()=>i(0),e),()=>{o=true,clearTimeout(t);}}function $t({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let a=0;for(;;)try{let s=[r(...i)];return t&&s.push(setTimeout$1(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(a++,a>=e)throw s;await q(Math.pow(2,a)*100+Math.random()*100);}}}var I=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??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);}};async function w(r,e){let t=new 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 Rational(1,r.fps),t.framerate=new Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(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 FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function F(r,e,t){let o=new Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function h(){let r=new Packet;return r.alloc(),r}async function v(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===AVERROR_EAGAIN||i===AVERROR_EOF)break;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 _=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=Codec.findDecoderByName(FF_DECODER_PNG);return ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=F(e,t,AV_PIX_FMT_BGRA$1),this.dst=F(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=h();}async png(){let e=new CodecContext;return e.allocContext3(this._png),FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=a(o,await this.png());this.pkt.data=e;FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var a$1=i,s=true;}finally{b(o,a$1,s);}}get sws(){if(!this._sws){let e=new SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,AV_PIX_FMT_YUVA420P$1,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 Oe={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},R=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=h(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let t=Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),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 FilterGraph;t.alloc();let o=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 a=Filter.getByName("abuffersink"),s=t.createFilter(a,"sink");if(!s)throw new Error("Failed to create abuffersink");let n=`aformat=sample_fmts=${Oe[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),m=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(n,m,d),"graph.parsePtr"),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 m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let i=o.length>>1;let a$1=a(s,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,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(i);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(a$1),"buffersrcAddFrame");await this.drain(t);}catch(c){var n=c,d=true;}finally{b(s,n,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===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return v(this._ctx,this._pkt,this._stream,e)}};function M(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 N=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]);}},O=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 P=Buffer.from([0,0,0,1]);function re(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 W(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function S(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 a=r.length;for(let n=i+2;n<r.length-2;n++)if(r[n]===0&&r[n+1]===0&&(r[n+2]===1||n+3<r.length&&r[n+2]===0&&r[n+3]===1)){a=n;break}let{type:s,layerId:c}=re(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,a)}),t=a;}return e}function X(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=re(t[0],t[1]),[a,s]=W(o,e,i);return t[0]=a,t[1]=s,t}function oe(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 ie(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)}function Me(r){let e=new O(oe(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 He(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 Le(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 ae(r,e,t){let o=Me(r);if(!o)return r;let i=new N;return He(i,o),Le(i,o,e,t),i.bits.push(1),i.align(0),ie(M(i.bits))}function ne(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,a=r.height,s=i*a;if(t.byteOffset%4===0&&o===i*4){let c=new Uint32Array(t.buffer,t.byteOffset,s);for(let n=0;n<s;n++)e[n]=c[n]>>>24;}else for(let c=0;c<a;c++){let n=c*o+3,d=c*i;for(let m=0;m<i;m++)e[d+m]=t[n+m*4];}}var De=39;function se(r){let{baseExtradata:e,alphaExtradata:t}=r,o=S(e),i=S(t),a=new Map;for(let n of i){if(n.type===32)continue;let d=a.get(n.type)??[];d.push(n),a.set(n.type,d);}let s=[],c=new Set;for(let n of o){let d=n.type===32?ae(n.data,r.width,r.height):n.data;if(s.push(P,d),!c.has(n.type)){c.add(n.type);for(let m of a.get(n.type)??[])s.push(P,X(m.data,1));}}return s.push($()),Buffer.concat(s)}function $(){let[t,o]=W(De,0,1),i=[],a=(s,c)=>{for(let n=c-1;n>=0;n--)i.push(s>>n&1);};for(a(0,1),a(0,3),a(0,3),a(0,9),a(255,9),a(0,1),a(0,1),a(1,1);i.length%8!==0;)a(0,1);return Buffer.concat([P,Buffer.from([t,o]),Buffer.from([165,4]),M(i),Buffer.from([128])])}function ce(r,e){let t=[];for(let o of r)t.push(P,o.data);for(let o of e)o.type<32&&t.push(P,X(o.data,1));return Buffer.concat(t)}var L=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;constructor(e){this._s=e,this._seiBuffer=$();}static async create(e){let{width:t,height:o,fps:i,bitrate:a,muxer:s}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:i,bitrate:a,options:{preset:"p4",bf:"0"}},m=await w({...d,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await w({...d,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),y=s.addStream(m,"hvc1");m.extraData&&p.extraData&&(y.codecpar.extradata=se({baseExtradata:m.extraData,alphaExtradata:p.extraData,width:t,height:o}));let x=t*o,l=(t>>1)*(o>>1),V=Buffer.alloc(x+l*2);return V.fill(128,x),new r({baseCtx:m,alphaCtx:p,basePkt:h(),alphaPkt:h(),stream:y,alphaSwFrame:F(t,o,AV_PIX_FMT_YUV420P),alphaBuf:V})}async encode(e,t){let{baseCtx:o,alphaCtx:i,alphaSwFrame:a,alphaBuf:s}=this._s,c=this._pts++;e.pts=c,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),ne(e,s),FFmpegError.throwIfError(a.makeWritable(),"alphaSw.makeWritable"),FFmpegError.throwIfError(a.fromBuffer(s),"alphaSw.fromBuffer"),a.pts=c,a.duration=1n,FFmpegError.throwIfError(await i.sendFrame(a),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i,alphaSwFrame:a}=this._s;e.free(),t.free(),a.free(),i.freeContext(),o.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:a,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),n=await o.receivePacket(a),d=c>=0,m=n>=0;if(!d&&!m)break;if(d!==m)throw new Error(`NVENC desync: base=${d}, alpha=${m}`);let p=[];this._seiInjected||(p.push(this._seiBuffer),this._seiInjected=true),p.push(ce(S(i.data),S(a.data)));let y=i.pts,x=i.dts,l=i.duration;i.data=Buffer.concat(p),i.pts=y,i.dts=x,i.duration=l===0n?1n:l,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),a.unref();}}};var C=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:a,...s}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let n=await w({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),d=a.addStream(n,o);return new r(n,h(),d)}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();}drain(e){return v(this._ctx,this._pkt,this._stream,e)}};var D=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:a,bitrate:s,muxer:c}=e,n=a.getEncoderCodec("hevc");if(!n)throw new Error("hevc_videotoolbox encoder not found");let d=await w({codec:n,width:t,height:o,fps:i,bitrate:s,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),m=c.addStream(d,"hvc1");return new r(d,h(),m)}async encode(e,t){e.pts=this._pts++,e.duration=1n,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 v(this._ctx,this._pkt,this._stream,e)}};var U="[Encoder]";async function me(r,e){let{width:t,height:o$1,fps:i,bitrate:a=8e6,disableHwCodec:s=false,sharedHw:c}=r,n=c??(s?void 0:HardwareContext.auto()??void 0),d=!c&&!!n;try{if(n?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&n.getEncoderCodec("hevc"))return o.debug(U,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await D.create({width:t,height:o$1,fps:i,hw:n,bitrate:a,muxer:e}),hw:n,ownsHw:d};if(n?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&n.getEncoderCodec("hevc"))return o.debug(U,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await L.create({width:t,height:o$1,fps:i,hw:n,bitrate:a,muxer:e}),hw:n,ownsHw:d}}catch(p){o.warn(U,"Hardware codec session limits reached, use software encoder",p),d&&n?.dispose();}return o.debug(U,"using software libx265 HEVC alpha encoder"),{video:await C.create({width:t,height:o$1,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:a,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await _.create(t,o$1),ownsHw:false}}var nt="libvpx-vp9",B=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 I(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:a,disableHwCodec:s,sharedHw:c}=e;return me({width:o,height:i,fps:a,disableHwCodec:s,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:i,fps:a}=e;return {video:await C.create({width:o,height:i,fps:a,codecName:nt,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:t}),codec:await _.create(o,i),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:AV_SAMPLE_FMT_FLT,codecName:FF_ENCODER_LIBOPUS};return R.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:a,hw:s,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),i?.[Symbol.dispose](),a?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:i}=this._s;ok(o?.sws,"sws not initialized"),FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,i);}};var fe=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:i,outFile:a,withAudio:s=false,disableHwCodec:c=false}=e,n=a.split(",").map(l=>l.trim()).filter(Boolean);if(n.length===0)throw new Error("outFile must contain at least one path");let d=n.map(l=>B.kindFromPath(l)),p=!c&&d.includes("mp4")?HardwareContext.auto()??void 0:void 0,y=p?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX||p?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA,x=[];for(let l=0;l<n.length;l++){let V=await B.create({outFile:n[l],kind:d[l],width:t,height:o,fps:i,withAudio:s,disableHwCodec:c,sharedHw:d[l]==="mp4"&&y?p:void 0});x.push(V);}return new r({sinks:x,sharedHw:p,limiter:new T(1),width:t,height:o,outFiles:n})}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=a(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(i){var a$1=i,s=true;}finally{b(o,a$1,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s;this._s.pngCodec??=await _.create(t,o);let i=await this._s.pngCodec.decodePNG(e);for(let a of this._s.sinks)await a.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=F(this._s.width,this._s.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};export{T as ConcurrencyLimiter,fe as EncoderPipeline,I as FormatMuxer,Y as Lazy,Ut as periodical,q as sleep,$t as useRetry,Dt as withTimeout};//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbmFsLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92cHMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvc2luay50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0IiwidGltZW91dEVycm9yIiwiYXJncyIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsIkZGbXBlZ0Vycm9yIiwiY29kZWNDdHgiLCJjb2RlY1RhZyIsInN0cmVhbSIsInBrdCIsIm9wZW5WaWRlb0N0eCIsIm9wdHMiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJtYWtlRnJhbWUiLCJ3aWR0aCIsImhlaWdodCIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsIl9zdGFjayIsIl9fdXNpbmciLCJfIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwic3JjIiwiaSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsImIiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJkYXRhIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJvdXQiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJleHRyYWN0UFRMIiwidnBzRGF0YSIsImJyIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJidyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwieSIsInJvd0Jhc2UiLCJkc3RCYXNlIiwieCIsIk5BTF9VTklUX1BSRUZJWF9TRUkiLCJidWlsZFVuaWZpZWRFeHRyYWRhdGEiLCJiYXNlRXh0cmFkYXRhIiwiYWxwaGFFeHRyYWRhdGEiLCJiYXNlTmFscyIsImFscGhhTmFscyIsImFscGhhQnlUeXBlIiwiYXJyIiwiY2h1bmtzIiwiZW1pdHRlZCIsImFscGhhTmFsIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJzIiwiZnBzIiwiYml0cmF0ZSIsIkZGX0VOQ09ERVJfSEVWQ19OVkVOQyIsImNvbW1vbiIsImJhc2VDdHgiLCJhbHBoYUN0eCIsIkFWX1BJWF9GTVRfWVVWNDIwUCIsInV2U2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiYmFzZVBrdCIsImFscGhhUGt0IiwiYmFzZVIiLCJhbHBoYVIiLCJiYXNlUmVhZHkiLCJhbHBoYVJlYWR5IiwiZHRzIiwiZHVyYXRpb24iLCJWaWRlb0VuY29kZXIiLCJfVmlkZW9FbmNvZGVyIiwiY29kZWNOYW1lIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsIlRBRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwibG9nZ2VyIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiRkZfRU5DT0RFUl9MSUJWUFhfVlA5IiwiT3V0cHV0U2luayIsIl9PdXRwdXRTaW5rIiwicGF0aCIsImxvd2VyIiwidmlkZW8iLCJhdWRpbyIsImNmZyIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsIm91dEZpbGVzIiwia2luZHMiLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiXSwibWFwcGluZ3MiOiIydUNBRU8sSUFBTUEsQ0FBQUEsQ0FBTixLQUFjLENBQ25CLFdBQUEsQ0FBcUJDLEVBQW9CLENBQXBCLElBQUEsQ0FBQSxTQUFBLENBQUFBLEVBQXFCLENBQXJCLFVBRXJCLElBQUksS0FBQSxFQUFXLENBQ2IsT0FBSyxLQUFLLFlBQUEsR0FDUixJQUFBLENBQUssTUFBQSxDQUFTLElBQUEsQ0FBSyxXQUFVLENBQzdCLElBQUEsQ0FBSyxZQUFBLENBQWUs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QXFCRCxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDcENBLENBQUFBLENBQUcsS0FBSyxFQUFNLENBQUEsQ0FFZCxJQUFNRSxDQUFBQSxDQUFXRixFQUFHLEdBQUEsQ0FDcEIsT0FBQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssRUFBRSxDQUFBLENBQ05DLENBQUFBLENBQXFCLENBQUEsRUFBR0QsQ0FBQUEsQ0FBRyxLQUFLQyxDQUFBQSxDQUFxQixDQUFBLENBQUEsQ0FBSyxDQUFBLENBQUlBLENBQUFBLEVBQXNCLENBQUMsQ0FBQSxDQUNsRixDQUFFLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxPQUFRRixDQUFBQSxDQUFHLEdBQUEsQ0FBSyxPQUFBLENBQVNBLENBQUFBLENBQUcsS0FBTSxrQkFBQSxDQUFBQyxDQUFtQixDQUMxRSxDQUdBLFNBQVNFLEVBQUFBLENBQWFDLENBQUFBLENBQWVDLENBQUFBLENBQWdCLENBQ25ERCxFQUFHLENBQUEsQ0FBRSxLQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUVDLEVBQUksa0JBQUEsQ0FBb0IsQ0FBQyxDQUFBLENBRTlCRCxDQUFBQSxDQUFHLElBQUEsQ0FBS0MsQ0FBQUEsQ0FBSSxrQkFBQSxHQUF1QixDQUFDLEVBQ3BDRCxDQUFBQSxDQUFHLENBQUEsQ0FBRSxLQUFBLENBQVEsRUFBRSxFQUNmQSxDQUFBQSxDQUFHLElBQUEsQ0FBS0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLEVBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVCxJQUFBLElBQVM5QyxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsRUFBSytDLEVBQUksa0JBQUEsQ0FBb0IvQyxDQUFBQSxFQUFBQSxDQUMzQzhDLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUdUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEtBQUEsQ0FBTSxDQUFDLEVBQ1osQ0FHQSxTQUFTRSxFQUFBQSxDQUFrQkYsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZ0JuRyxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQixDQUd2RixHQURBaUcsQ0FBQUEsQ0FBRyxLQUFLQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxNQUFBLENBQVMsRUFBRyxDQUFDLENBQUEsQ0FDbENBLENBQUFBLENBQUksa0JBQUEsQ0FBcUIsRUFBRyxDQUM5QixJQUFBLElBQVMsQ0FBQSxDQUFJLENBQUEsQ0FBRyxFQUFJQSxDQUFBQSxDQUFJLGtCQUFBLENBQW9CLENBQUEsRUFBQSxDQUFLRCxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUMxRCxJQUFBLElBQVMsRUFBSUMsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQixDQUFBLENBQUksQ0FBQSxDQUFHLElBQUtELENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQzVELENBRUFBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNULElBQUEsSUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLEVBQUksRUFBQSxDQUFJLENBQUEsRUFBQSxDQUFLQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxJQUFNLENBQUEsRUFBSyxDQUFBLEdBQU0sQ0FBQyxDQUFBLENBQ3ZEQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBS0MsRUFBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE9BQVNBLENBQUFBLENBQUksUUFBUSxDQUFBLENBRTVERCxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENB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RUFDbEIsQ0FFQSxNQUFjLE1BQXNCLENBQ2xDLEdBQUksQ0FBQSxJQUFBLENBQUssU0FBQSxDQUNULE1BQUssU0FBQSxDQUFZLElBQUEsQ0FDakIsSUFBQSxJQUFXQSxDQUFBQSxJQUFRLEtBQUssRUFBQSxDQUFHLEtBQUEsQ0FBTyxNQUFNQSxDQUFBQSxDQUFLLE9BQU8sWUFBWSxDQUFBLEVBQUUsQ0FDbEUsSUFBQSxDQUFLLEdBQUcsUUFBQSxHQUFXLE1BQUEsQ0FBTyxPQUFPLENBQUEsR0FDakMsSUFBQSxDQUFLLEVBQUEsQ0FBRyxRQUFBLEVBQVUsT0FBQSxJQUNwQixDQUVRLFNBQUEsQ0FBVUMsQ0FBQUEsQ0FBc0IsQ0FDdEMsSUFBTTVMLENBQUFBLENBQVFKLENBQUFBLENBQVUsSUFBQSxDQUFLLEVBQUEsQ0FBRyxNQUFPLElBQUEsQ0FBSyxFQUFBLENBQUcsTUFBQSxDQUFRbUIsZUFBZSxFQUN0RSxPQUFBL0IsV0FBQUEsQ0FBWSxZQUFBLENBQWFnQixDQUFBQSxDQUFNLFdBQVc0TCxDQUFLLENBQUEsQ0FBRyxzQkFBc0IsQ0FBQSxDQUNqRTVMLENBQ1QsQ0FDRiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBjbGFzcyBMYXp5PFQ+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWFrZVZhbHVlOiAoKSA9PiBUKSB7fVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubWFrZVZhbHVlKCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl92YWx1ZSE7XG4gIH1cblxuICBnZXQgaW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQgfCB1bmRlZmluZWQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHJldHVybjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0Pih7IGZuLCBtYXhBdHRlbXB0cyA9IDMsIHRpbWVvdXQgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIFBhY2tldCB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogUmV0dXJuVHlwZTxGb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIobnVsbCksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgSGFyZHdhcmVGcmFtZXNDb250ZXh0LCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBlbmNvZGVOYWxIZWFkZXIsIHR5cGUgTmFsVW5pdCwgcmV3cml0ZU5hbExheWVySWQsIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUC4gQ2FsbGVyIHByZS1maWxscyBVVj0xMjguXG4vLyBVaW50MzIgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBOQUxfVU5JVF9QUkVGSVhfU0VJID0gMzk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gMzIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IDMyID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYWxwaGFOYWwuZGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfVU5JVF9QUkVGSVhfU0VJLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB3cml0ZUJpdHMoMCwgMSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IDMyKSB7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKG5hbC5kYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBGRl9FTkNPREVSX0hFVkNfTlZFTkMgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSxcbiAgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLFxuICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIsXG4gIGludGVybGVhdmVBY2Nlc3NVbml0cyxcbn0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9zZWlCdWZmZXI6IEJ1ZmZlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG4gIHByaXZhdGUgX3NlaUluamVjdGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fc2VpQnVmZmVyID0gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IOKAlCBOVkVOQyBjb252ZXJ0cyBpbnRlcm5hbGx5LCBubyBDUFUgU1dTLCBubyBod0ZyYW1lc0N0eCBuZWVkZWQuXG4gICAgY29uc3QgYmFzZUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIik7XG4gICAgY29uc3QgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgaWYgKGJhc2VDdHguZXh0cmFEYXRhICYmIGFscGhhQ3R4LmV4dHJhRGF0YSkge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCB1dlNpemUgPSAod2lkdGggPj4gMSkgKiAoaGVpZ2h0ID4+IDEpO1xuICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgdXZTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IG1ha2VQYWNrZXQoKSxcbiAgICAgIGFscGhhUGt0OiBtYWtlUGFja2V0KCksXG4gICAgICBzdHJlYW0sXG4gICAgICBhbHBoYVN3RnJhbWU6IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFApLFxuICAgICAgYWxwaGFCdWYsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBFbGVjdHJvbjogZnJhbWUuZGF0YVtdIGlzIGEgY29weSwgd3JpdGVzIGRpc2NhcmRlZC4gZnJvbUJ1ZmZlciBnb2VzIG5hdGl2ZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCB3aGVuIE5WRU5DIHNlc3Npb25zIGZyZWVkIGluIGNyZWF0aW9uIG9yZGVyLlxuICAgIC8vIExJRk8gZGVzdHJveSBhdm9pZHMgdGhlIHNlZ2ZhdWx0LiBQZXIgTlZJRElBIGZvcnVtIC90LzI2OTk3NC5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5JbnRlcmxlYXZlZChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0gPSB0aGlzLl9zO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBiYXNlUiA9IGF3YWl0IGJhc2VDdHgucmVjZWl2ZVBhY2tldChiYXNlUGt0KTtcbiAgICAgIGNvbnN0IGFscGhhUiA9IGF3YWl0IGFscGhhQ3R4LnJlY2VpdmVQYWNrZXQoYWxwaGFQa3QpO1xuICAgICAgY29uc3QgYmFzZVJlYWR5ID0gYmFzZVIgPj0gMDtcbiAgICAgIGNvbnN0IGFscGhhUmVhZHkgPSBhbHBoYVIgPj0gMDtcbiAgICAgIGlmICghYmFzZVJlYWR5ICYmICFhbHBoYVJlYWR5KSBicmVhaztcbiAgICAgIC8vIGJmPTAg4oaSIGJvdGggc3RyZWFtcyBlbWl0IGluIGxvY2tzdGVwLlxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6IGJhc2U9JHtiYXNlUmVhZHl9LCBhbHBoYT0ke2FscGhhUmVhZHl9YCk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZVBrdC5kYXRhISksIHNwbGl0TmFsVW5pdHMoYWxwaGFQa3QuZGF0YSEpKSk7XG5cbiAgICAgIC8vIGJhc2VQa3QuZGF0YSBzZXR0ZXIgY2xlYXJzIHB0cy9kdHMvZHVyYXRpb24uXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJtZWRpdW1cIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgYml0cmF0ZSxcbiAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICBtdXhlcixcbiAgfSk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLm1wNFwiKSB8fCBsb3dlci5lbmRzV2l0aChcIi5tb3ZcIikpIHJldHVybiBcIm1wNFwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSk7XG4gICAgY29uc3QgdmlkZW8gPSBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCB0aGlzLm1wNFZpZGVvKG9wdHMsIG11eGVyKSA6IGF3YWl0IHRoaXMud2VibVZpZGVvKG9wdHMsIG11eGVyKTtcbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgdGhpcy5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi52aWRlbywgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIsIFwicm93LW10XCI6IFwiMVwiLCB0aHJlYWRzOiBcIjJcIiB9LFxuICAgICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhdWRpb0ZvcihvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICAvLyBPcHVzIHJlamVjdHMgNDQuMWsuXG4gICAgY29uc3QgY2ZnID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIlxuICAgICAgICA/IHsgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyB9XG4gICAgICAgIDogeyBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTIH07XG4gICAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoeyAuLi5jZmcsIGdsb2JhbEhlYWRlcjogdHJ1ZSwgYml0cmF0ZTogMTI4XzAwMCwgbXV4ZXIgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShzcmMpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmF1ZGlvPy5lbmNvZGUocGNtLCB0aGlzLl9zLm11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGF1ZGlvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgIGlmIChod1ZpZGVvKSBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICBlbHNlIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3V0RmlsZXMgPSBvdXRGaWxlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG5cbiAgICBjb25zdCBraW5kcyA9IG91dEZpbGVzLm1hcCgocCkgPT4gT3V0cHV0U2luay5raW5kRnJvbVBhdGgocCkpO1xuICAgIGNvbnN0IG5lZWRzTXA0SHcgPSAhZGlzYWJsZUh3Q29kZWMgJiYga2luZHMuaW5jbHVkZXMoXCJtcDRcIik7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0h3QWxwaGFDYXBhYmxlID1cbiAgICAgIHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfHwgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREE7XG5cbiAgICBjb25zdCBzaW5rczogT3V0cHV0U2lua1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IE91dHB1dFNpbmsuY3JlYXRlKHtcbiAgICAgICAgb3V0RmlsZTogb3V0RmlsZXNbaV0hLFxuICAgICAgICBraW5kOiBraW5kc1tpXSEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgd2l0aEF1ZGlvLFxuICAgICAgICBkaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgc2hhcmVkSHc6IGtpbmRzW2ldID09PSBcIm1wNFwiICYmIGlzSHdBbHBoYUNhcGFibGUgPyBzaGFyZWRIdyA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgc2lua3MucHVzaChzaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7XG4gICAgICBzaW5rcyxcbiAgICAgIHNoYXJlZEh3LFxuICAgICAgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgb3V0RmlsZXMsXG4gICAgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5lbmNvZGVEZWNvZGVkRnJhbWUoc3JjKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmtbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICBjb25zdCBmcmFtZSA9IG1ha2VGcmFtZSh0aGlzLl9zLndpZHRoLCB0aGlzLl9zLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iXX0=