pup-recorder 0.2.8 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),module$1=require('module'),nodeAv=require('node-av'),constants=require('node-av/constants'),commander=require('commander'),S=require('zod'),net=require('net'),crypto=require('crypto'),os=require('os'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var S__default=/*#__PURE__*/_interopDefault(S);var $t=Object.create;var _e=Object.defineProperty;var Ut=Object.getOwnPropertyDescriptor;var J=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),T=r=>{throw TypeError(r)};var Ue=(r,e,t)=>e in r?_e(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Ve=r=>[,,,$t(null)],Ge=["class","method","getter","setter","accessor","field","value","get","set"],G=r=>r!==void 0&&typeof r!="function"?T("Function expected"):r,Vt=(r,e,t,o,i)=>({kind:Ge[r],name:e,metadata:o,addInitializer:n=>t._?T("Already initialized"):i.push(G(n||null))}),ge=(r,e)=>Ue(e,J("metadata"),r[3]),je=(r,e,t,o)=>{for(var i=0,n=r[e>>1],s=n&&n.length;i<s;i++)n[i].call(t);return o},B=(r,e,t,o,i,n)=>{var c,a,u,m,d=e&7,p=false,f=false,b=2,w=Ge[d+5],R=r[b]||(r[b]=[]),_=((i=i.prototype),Ut(i,t));for(var I=o.length-1;I>=0;I--)u=Vt(d,t,a={},r[3],R),(u.static=p,u.private=f,m=u.access={has:g=>t in g},(m.get=g=>g[t]),d>2),c=(0, o[I])(_[w],u),a._=1,G(c)&&(_[w]=c);return _&&_e(i,t,_),i},He=(r,e,t)=>Ue(r,e+"",t);var x=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&T("Object expected");var o,i;t&&(o=e[J("asyncDispose")]),o===void 0&&(o=e[J("dispose")],t&&(i=o)),typeof o!="function"&&T("Object not disposable"),i&&(o=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},E=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,u){return u=Error(a),u.name="SuppressedError",u.error=s,u.suppressed=c,u},i=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(n,a=>(i(a),n()))}catch(a){i(a);}if(t)throw e};return n()};var Ht=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,l=Ht();function ze(r,e,t){try{return e(process.env[r])}catch{return t}}function O(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var Yt=module$1.createRequire(l),j=process.env,qe=ze("PUP_LOG_LEVEL",O,2),Ke=j.PUP_USE_INNER_PROXY==="1";j.PUP_DISABLE_GPU==="1";var Ye=j.PUP_DETERMINISTIC==="1",Jt=path.dirname(Yt.resolve("pup-recorder/package.json"));path.join(Jt,"dist","app.cjs");var xe=j.PUP_IPC_SOCKET;j.PUP_EXPERIMENTAL_PUPPETEER==="1";var ye="<pup@debug>",ve="<pup@info>",Ee="<pup@warn>",Pe="<pup@error>",Fe="<pup@fatal>";function H(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var Je,Xe,Qe,Ze,et,M;et=[H],Ze=[H],Qe=[H],Xe=[H],Je=[H];var F=class{constructor(e=qe){this._level=e;je(M,5,this);He(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?i:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(ye,...e);}info(...e){this.impl?.info?.(ve,...e);}warn(...e){this.impl?.warn?.(Ee,...e);}error(...e){this.impl?.error?.(Pe,...e);}fatal(...e){this.impl?.error?.(Fe,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ye)?this.debug(t.slice(ye.length+1)):t.startsWith(ve)?this.info(t.slice(ve.length+1)):t.startsWith(Ee)?this.warn(t.slice(Ee.length+1)):t.startsWith(Pe)?this.error(t.slice(Pe.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",s=c=>{let a=c.toString();a.startsWith(Fe)?n+=a.slice(Fe.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("message",s).on("error",c=>{n+=c.message,e.kill();}).once("close",(c,a)=>{c||a||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};M=Ve(),B(M,1,"debug",et,F),B(M,1,"info",Ze,F),B(M,1,"warn",Qe,F),B(M,1,"error",Xe,F),B(M,1,"fatal",Je,F),ge(M,F);var h=new F;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?h.error(t):r<=constants.AV_LOG_WARNING&&h.warn(t));});function z(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var er="--pup-priv-args";function tt(){let r=process.argv,e=r.find(o=>o.startsWith(er));if(!e)return h.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),h.debug("pupargs",t),t}var tr=1920,rr=1080,or=30,ir=5,nr="output.mp4",rt=S__default.default.object({duration:S__default.default.number().describe("Duration in seconds"),width:S__default.default.number().describe("Video width"),height:S__default.default.number().describe("Video height"),fps:S__default.default.number().describe("Frames per second"),withAudio:S__default.default.boolean().describe("Capture and encode audio"),outFile:S__default.default.string().describe("Output mp4 file path"),useInnerProxy:S__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:S__default.default.boolean().describe("Render by frame rather than recording")}),ot={width:tr,height:rr,fps:or,duration:ir,outFile:nr,withAudio:false,useInnerProxy:Ke,deterministic:Ye};async function nt(r){let e=rt.shape,t=r.defaults;commander.program.name(r.name).argument("<source>","file://, http(s)://, \u6216 data: URI").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("-d, --deterministic",e.deterministic.description,t.deterministic).action(async(o,i)=>{try{await r.run(o,{width:z(O,t.width)(i.width),height:z(O,t.height)(i.height),fps:z(O,t.fps)(i.fps),duration:z(O,t.duration)(i.duration),outFile:i.outFile??t.outFile,withAudio:i.withAudio??t.withAudio,useInnerProxy:i.useInnerProxy??t.useInnerProxy,deterministic:i.deterministic??t.deterministic});}catch(n){h.fatal(n);}}),await commander.program.parseAsync(tt());}var ar=8;var Se=class{constructor(e){this._socket=e;}_socket;writeProgress(e){this.write(1,Buffer.from(`${e}`));}writeError(e){this.write(3,Buffer.from(e)),this._socket.end();}writeDone(e){this.write(2,Buffer.from(JSON.stringify(e))),this._socket.end();}write(e,t){let o=Buffer.alloc(ar);o.writeUInt32LE(e,0),o.writeUInt32LE(t.byteLength,4),this._socket.write(o),this._socket.write(t);}};function st(r){return new Promise((e,t)=>{let o=net.createConnection(r);o.once("connect",()=>e(new Se(o))),o.once("error",t);})}function at(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
1
+ 'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),module$1=require('module'),nodeAv=require('node-av'),constants=require('node-av/constants'),commander=require('commander'),C=require('zod'),net=require('net'),api=require('node-av/api'),crypto=require('crypto'),os=require('os'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var mr=Object.create;var Re=Object.defineProperty;var fr=Object.getOwnPropertyDescriptor;var se=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),R=r=>{throw TypeError(r)};var at=(r,e,t)=>e in r?Re(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var st=r=>[,,,mr(null)],ct=["class","method","getter","setter","accessor","field","value","get","set"],ee=r=>r!==void 0&&typeof r!="function"?R("Function expected"):r,lr=(r,e,t,o,i)=>({kind:ct[r],name:e,metadata:o,addInitializer:n=>t._?R("Already initialized"):i.push(ee(n||null))}),Be=(r,e)=>at(e,se("metadata"),r[3]),ut=(r,e,t,o)=>{for(var i=0,n=r[e>>1],s=n&&n.length;i<s;i++)n[i].call(t);return o},U=(r,e,t,o,i,n)=>{var c,a,u,p,d=e&7,h=false,f=false,w=2,b=ct[d+5],v=r[w]||(r[w]=[]),g=((i=i.prototype),fr(i,t));for(var E=o.length-1;E>=0;E--)u=lr(d,t,a={},r[3],v),(u.static=h,u.private=f,p=u.access={has:_=>t in _},(p.get=_=>_[t]),d>2),c=(0, o[E])(g[b],u),a._=1,ee(c)&&(g[b]=c);return g&&Re(i,t,g),i},dt=(r,e,t)=>at(r,e+"",t);var y=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&R("Object expected");var o,i;t&&(o=e[se("asyncDispose")]),o===void 0&&(o=e[se("dispose")],t&&(i=o)),typeof o!="function"&&R("Object not disposable"),i&&(o=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},P=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,u){return u=Error(a),u.name="SuppressedError",u.error=s,u.suppressed=c,u},i=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(n,a=>(i(a),n()))}catch(a){i(a);}if(t)throw e};return n()};var gr=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=gr();function pt(r,e,t){try{return e(process.env[r])}catch{return t}}function B(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var yr=module$1.createRequire(m),H=process.env,mt=pt("PUP_LOG_LEVEL",B,2),ft=H.PUP_USE_INNER_PROXY==="1",lt=H.PUP_DISABLE_GPU==="1",ht=H.PUP_DISABLE_HW_CODEC==="1",wt=H.PUP_DETERMINISTIC==="1",vr=path.dirname(yr.resolve("pup-recorder/package.json"));path.join(vr,"dist","app.cjs");var Oe=H.PUP_IPC_SOCKET;H.PUP_EXPERIMENTAL_PUPPETEER==="1";var Ne="<pup@debug>",De="<pup@info>",Le="<pup@warn>",Ve="<pup@error>",Ue="<pup@fatal>";function te(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var gt,_t,xt,bt,yt,M;yt=[te],bt=[te],xt=[te],_t=[te],gt=[te];var k=class{constructor(e=mt){this._level=e;ut(M,5,this);dt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?i:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(Ne,...e);}info(...e){this.impl?.info?.(De,...e);}warn(...e){this.impl?.warn?.(Le,...e);}error(...e){this.impl?.error?.(Ve,...e);}fatal(...e){this.impl?.error?.(Ue,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(Ne)?this.debug(t.slice(Ne.length+1)):t.startsWith(De)?this.info(t.slice(De.length+1)):t.startsWith(Le)?this.warn(t.slice(Le.length+1)):t.startsWith(Ve)?this.error(t.slice(Ve.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",s=c=>{let a=c.toString();a.startsWith(Ue)?n+=a.slice(Ue.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("message",s).on("error",c=>{n+=c.message,e.kill();}).once("close",(c,a)=>{c||a||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};M=st(),U(M,1,"debug",yt,k),U(M,1,"info",bt,k),U(M,1,"warn",xt,k),U(M,1,"error",_t,k),U(M,1,"fatal",gt,k),Be(M,k);var l=new k;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?l.error(t):r<=constants.AV_LOG_WARNING&&l.warn(t));});function re(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Fr="--pup-priv-args";function vt(){let r=process.argv,e=r.find(o=>o.startsWith(Fr));if(!e)return l.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),l.debug("pupargs",t),t}var Sr=1920,Ar=1080,Ir=30,kr=5,Tr="output.mp4",Et=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFile:C__default.default.string().describe("Output mp4 file path"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265")}),Pt={width:Sr,height:Ar,fps:Ir,duration:kr,outFile:Tr,withAudio:false,useInnerProxy:ft,deterministic:wt,disableGpu:lt,disableHwCodec:ht};async function Ft(r){let e=Et.shape,t=r.defaults;commander.program.name(r.name).argument("<source>","file://, http(s)://, or data: URI").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).action(async(o,i)=>{try{await r.run(o,{width:re(B,t.width)(i.width),height:re(B,t.height)(i.height),fps:re(B,t.fps)(i.fps),duration:re(B,t.duration)(i.duration),outFile:i.outFile??t.outFile,withAudio:i.withAudio??t.withAudio,useInnerProxy:i.useInnerProxy??t.useInnerProxy,deterministic:i.deterministic??t.deterministic,disableGpu:i.disableGpu??t.disableGpu,disableHwCodec:i.disableHwCodec??t.disableHwCodec});}catch(n){l.fatal(n);}}),await commander.program.parseAsync(vt());}var Br=8;var He=class{constructor(e){this._socket=e;}_socket;writeProgress(e){this.write(1,Buffer.from(`${e}`));}writeError(e){this.write(3,Buffer.from(e)),this._socket.end();}writeDone(e){this.write(2,Buffer.from(JSON.stringify(e))),this._socket.end();}write(e,t){let o=Buffer.alloc(Br);o.writeUInt32LE(e,0),o.writeUInt32LE(t.byteLength,4),this._socket.write(o),this._socket.write(t);}};function St(r){return new Promise((e,t)=>{let o=net.createConnection(r);o.once("connect",()=>e(new He(o))),o.once("error",t);})}function At(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -86,7 +86,7 @@
86
86
  })();
87
87
  </script>
88
88
  </body>
89
- </html>`}function X(r,e){let{width:t,height:o}=e;if(t<32||o<2)return;let i=o-1,n=0;for(let s=0;s<32;s++){let c=(i*t+s)*4,u=(r[c]??0)>127?1:0;n=n<<1|u;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function Q(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_stego__()"})}function Z(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_stego__()"})}var Ie="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:Ie,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function ut(){electron.protocol.handle(Ie,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=at(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function dt(r,e){let t=new URL(`${Ie}://stego`);return t.searchParams.set("src",r),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var N=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_ended=false;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e){if(this._ended)throw new Error("ended");return new Promise((t,o)=>{let i=()=>{this._active++,e().then(n=>{this._active--,t(n),this.next();}).catch(n=>{this._active--,o(n),this.next();});};this._queue.push(i),this.next();})}async end(){if(!this._ended)for(this._ended=true;this._active>0||this.pending>0;)await new Promise(e=>setTimeout(e,50));}next(){this._active<this.maxConcurrency&&this._queue.shift()?.();}};var hr={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},ee=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=new nodeAv.Packet,this._pkt.alloc(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${hr[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),m=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,m,u),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let i=o.length>>1;let n=x(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,u=true;}finally{E(s,a,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===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}async drainCodec(e){for(;;){let t=await this._ctx.receivePacket(this._pkt);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"audio.receivePacket"),this._pkt.streamIndex=this._stream.index,this._pkt.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(this._pkt),this._pkt.unref();}}};function gt(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function Fr(r,e,t){let o=new nodeAv.SoftwareScaleContext;return o.getContext(r,e,t,r,e,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),o}var te=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=gt(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=gt(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=new nodeAv.Packet,this.pkt.alloc();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}get sws(){return this._sws||(this._sws=Fr(this.src.width,this.src.height,this.src.format)),this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var re=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};var oe=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,codecName:n,codecTag:s,globalHeader:c,codecOpts:a,bitrate:u,muxer:m}=e,d=nodeAv.Codec.findEncoderByName(n);if(!d)throw new Error(`Video encoder not found: ${n}`);let p=new nodeAv.CodecContext;p.allocContext3(d),p.codecId=d.id,p.width=t,p.height=o,p.pixelFormat=e.pixelFormat,p.timeBase=new nodeAv.Rational(1,i),p.framerate=new nodeAv.Rational(i,1),p.gopSize=i*2,p.bitRate=BigInt(u),c&&p.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);for(let[w,v]of Object.entries(a))p.setOption(w,v);s&&(p.codecTag=s),nodeAv.FFmpegError.throwIfError(await p.open2(d,null),"videoCtx.open2");let f=new nodeAv.Packet;f.alloc();let b=m.addStream(p,s);return new r(p,f,b)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}async drain(e){let t=this._pkt;for(;;){let o=await this._ctx.receivePacket(t);if(o===constants.AVERROR_EAGAIN||o===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(o,"video.receivePacket"),t.streamIndex=this._stream.index,t.duration===0n&&(t.duration=1n),t.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(t),t.unref();}}};var W=class r{constructor(e,t,o,i,n,s){this._video=e;this._audio=t;this._muxer=o;this._limiter=i;this._outFile=n;this._codec=s;}_video;_audio;_muxer;_limiter;_outFile;_codec;_disposed=false;static async create(e){let{width:t,height:o,fps:i,outFile:n,withAudio:s=false}=e,c=new re(n),a=await oe.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",globalHeader:true,codecOpts:{preset:"ultrafast","x265-params":"log-level=1:bframes=0"},bitrate:8e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:c}),u;return s&&(u=await ee.create({outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:c})),await c.open(),new r(a,u,c,new N(1),n,await te.create(t,o))}setupAudio(e){this._audio?.setInputRate(e);}async encodeBGRA(e){await this._limiter.schedule(async()=>{let{src:t,dst:o,sws:i}=this._codec;return assert.ok(i,"sws not initialized"),nodeAv.FFmpegError.throwIfError(t.makeWritable(),"bgraSrc.makeWritable"),nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraSrc.fromBuffer"),nodeAv.FFmpegError.throwIfError(o.makeWritable(),"bgraDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await i.scaleFrame(o,t),"bgraSws.scaleFrame"),this._video.encode(o,this._muxer)});}async encodePNG(e){await this._limiter.schedule(async()=>{var s=[];try{let{pkt:t,src:o,dst:i}=this._codec;let n=x(s,await this._codec.png());t.data=e;nodeAv.FFmpegError.throwIfError(await n.sendPacket(t),"pngDecoder.sendPacket");t.unref();nodeAv.FFmpegError.throwIfError(await n.receiveFrame(o),"pngDecoder.receiveFrame");nodeAv.FFmpegError.throwIfError(i.makeWritable(),"pngDst.makeWritable");nodeAv.FFmpegError.throwIfError(await this._codec.sws.scaleFrame(i,o),"pngSws.scaleFrame");return this._video.encode(i,this._muxer)}catch(c){var a=c,u=true;}finally{E(s,a,u);}});}async encodeAudio(e){this._audio&&await this._limiter.schedule(()=>this._audio.encode(e,this._muxer));}async finish(){try{var e=[];try{let s=x(e,this._muxer,!0);let c=x(e,this._video);let a=x(e,this._audio);await this._limiter.end();await this._audio?.flush(this._muxer);await this._video.flush(this._muxer);}catch(t){var o=t,i=!0;}finally{var n=E(e,o,i);n&&await n;}}finally{this.free();}return this._outFile}async[Symbol.asyncDispose](){this._disposed||(await this._limiter.end(),this._video[Symbol.dispose](),this._audio?.[Symbol.dispose](),await this._muxer[Symbol.asyncDispose](),this.free());}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=x(t,this._codec);}catch(o){var i=o,n=true;}finally{E(t,i,n);}}};var ie=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let u=Math.max(0,a-1);t+=(u/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,s=Math.min(1,t),c=1-(1-n)*(1-s);return {global:n,local:s,jank:c,expected:i,actual:this._actual,maxBurst:o}}};function ne(r){let e=r.getSize();return e.width===0||e.height===0?true:r.isEmpty()}var Gr=`
89
+ </html>`}function ce(r,e){let{width:t,height:o}=e;if(t<32||o<2)return;let i=o-1,n=0;for(let s=0;s<32;s++){let c=(i*t+s)*4,u=(r[c]??0)>127?1:0;n=n<<1|u;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function ue(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_stego__()"})}function de(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_stego__()"})}var We="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:We,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function kt(){electron.protocol.handle(We,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=At(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function Tt(r,e){let t=new URL(`${We}://stego`);return t.searchParams.set("src",r),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var W=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(n=>{this._active--,o(n),this.next();}).catch(n=>{this._active--,i(n),this.next();});},reject:i,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};async function O(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function oe(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function F(){let r=new nodeAv.Packet;return r.alloc(),r}async function $(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var Xr={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},pe=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=F(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${Xr[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,p,u),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)isFinite(o[p])||(o[p]=0);let i=o.length>>1;let n=y(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,u=true;}finally{P(s,a,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===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return $(this._ctx,this._pkt,this._stream,e)}};var j=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=oe(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=oe(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=F();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=y(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var n=i,s=true;}finally{P(o,n,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};function le(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 me=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]);}},fe=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 z=Buffer.from([0,0,0,1]);function Vt(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 je(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function q(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let n=r.length;for(let a=i+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){n=a;break}let{type:s,layerId:c}=Vt(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,n)}),t=n;}return e}function ze(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=Vt(t[0],t[1]),[n,s]=je(o,e,i);return t[0]=n,t[1]=s,t}function Ut(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 Ht(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 ro(r){let e=new fe(Ut(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 oo(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 io(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 Wt(r,e,t){let o=ro(r);if(!o)return r;let i=new me;return oo(i,o),io(i,o,e,t),i.bits.push(1),i.align(0),Ht(le(i.bits))}var no=39;function $t(r){let{baseExtradata:e,alphaExtradata:t}=r,o=q(e),i=q(t),n=new Map;for(let a of i){if(a.type===32)continue;let u=n.get(a.type)??[];u.push(a),n.set(a.type,u);}let s=[],c=new Set;for(let a of o){let u=a.type===32?Wt(a.data,r.width,r.height):a.data;if(s.push(z,u),!c.has(a.type)){c.add(a.type);for(let p of n.get(a.type)??[])s.push(z,ze(p.data,1));}}return s.push(qe()),Buffer.concat(s)}function qe(){let[t,o]=je(no,0,1),i=[],n=(s,c)=>{for(let a=c-1;a>=0;a--)i.push(s>>a&1);};for(n(0,1),n(0,3),n(0,3),n(0,9),n(255,9),n(0,1),n(0,1),n(1,1);i.length%8!==0;)n(0,1);return Buffer.concat([z,Buffer.from([t,o]),Buffer.from([165,4]),le(i),Buffer.from([128])])}function Gt(r,e){let t=[];for(let o of r)t.push(z,o.data);for(let o of e)o.type<32&&t.push(z,ze(o.data,1));return Buffer.concat(t)}var he=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=qe();}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:s}=e,c=nodeAv.Codec.findEncoderByName(constants.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:n,options:{preset:"p4",bf:"0"}},p=await O({...u,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),d=await O({...u,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),h=F(),f=F(),w=s.addStream(p,"hvc1"),b=p.extraData,x=d.extraData;return b&&x&&(w.codecpar.extradata=$t({baseExtradata:b,alphaExtradata:x,width:t,height:o})),new r({baseCtx:p,alphaCtx:d,basePkt:h,alphaPkt:f,stream:w})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,n=this._pts++;e.pts=n,e.duration=1n,nodeAv.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 a=e.width,u=e.height,p=a*u,d=(a>>1)*(u>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(p+d*2));let h=this._alphaBuf;for(let f=0;f<u;f++)for(let w=0;w<a;w++)h[f*a+w]=s[f*c+w*4+3];h.fill(128,p,p+d*2),this._alphaFrame?.free(),this._alphaFrame=nodeAv.Frame.fromVideoBuffer(h,{format:constants.AV_PIX_FMT_YUV420P,width:a,height:u}),this._alphaFrame.pts=n,this._alphaFrame.duration=1n,nodeAv.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:n,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),a=await o.receivePacket(n),u=c>=0,p=a>=0;if(!u&&!p)break;if(u!==p)throw new Error(`NVENC desync: base=${u}, alpha=${p}`);let d=q(i.data),h=q(n.data),f=[];this._seiInjected||(f.push(this._seiBuffer),this._seiInjected=true),f.push(Gt(d,h));let w=i.pts,b=i.dts,x=i.duration;i.data=Buffer.concat(f),i.pts=w,i.dts=b,i.duration=x===0n?1n:x,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),n.unref();}}};var we=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:n,...s}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=await O({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),u=n.addStream(a,o);return new r(a,F(),u)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return $(this._ctx,this._pkt,this._stream,e)}};var ge=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:n,bitrate:s,muxer:c}=e,a=n.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let u=await O({codec:a,width:t,height:o,fps:i,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p=c.addStream(u,"hvc1");return new r(u,F(),p)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return $(this._ctx,this._pkt,this._stream,e)}};var _e="[Encoder]";async function qt(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:s=false}=r,c=s?void 0:api.HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return l.debug(_e,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await ge.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return l.debug(_e,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await he.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c}}catch(u){l.warn(_e,"Hardware codec session limits reached, use software encoder",u);}finally{c?.dispose();}return l.debug(_e,"using software libx265 HEVC alpha encoder"),c?.dispose(),{video:await we.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await j.create(t,o)}}var xe=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};var X=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:n=false}=e,s=new xe(i),{video:c,hwVideo:a,codec:u,hw:p}=await qt(e,s),d;return n&&(d=await pe.create({outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new r({video:c,hwVideo:a,audio:d,muxer:s,limiter:new W(1),outFile:i,codec:u,hw:p,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:n}=this._s;if(t){var u=[];try{let f=y(u,this.bgraFrame(e));await t.encode(f,n);return}catch(p){var d=p,h=true;}finally{P(u,d,h);}}let{src:s,dst:c,sws:a}=i;return assert.ok(a,"sws not initialized"),nodeAv.FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),nodeAv.FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),nodeAv.FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.scaleFrame(c,s),"bgraSws.scaleFrame"),o.encode(c,n)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n,width:s,height:c}=this._s,a=i??await j.create(s,c);try{let u=await a.decodePNG(e);t?await t.encode(u,n):(nodeAv.FFmpegError.throwIfError(a.dst.makeWritable(),"pngDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.sws.scaleFrame(a.dst,u),"pngSws.scaleFrame"),await o.encode(a.dst,n));}finally{i||a[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:n}=this._s;try{var s=[];try{let d=y(s,i,!0);let h=y(s,e);let f=y(s,t);let w=y(s,o);await n.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var a=c,u=!0;}finally{var p=P(s,a,u);p&&await p;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:n}=this._s;await n.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=y(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,n=true;}finally{P(t,i,n);}}bgraFrame(e){let t=oe(this._s.width,this._s.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var be=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let u=Math.max(0,a-1);t+=(u/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,s=Math.min(1,t),c=1-(1-n)*(1-s);return {global:n,local:s,jank:c,expected:i,actual:this._actual,maxBurst:o}}};function ye(r){let e=r.getSize();return e.width===0||e.height===0?true:r.isEmpty()}var To=`
90
90
  (function() {
91
91
  if (window.__pup_audio_capturing__) return;
92
92
  window.__pup_audio_capturing__ = true;
@@ -158,9 +158,9 @@
158
158
  return origPlay.call(this);
159
159
  };
160
160
  })();
161
- `;async function Et({encoder:r,getVideoTimeMs:e,onError:t}){let o=path.join(os.tmpdir(),`pup_audio_preload_${crypto.randomUUID()}.js`);return await promises.writeFile(o,Gr),electron.session.defaultSession.registerPreloadScript({type:"frame",id:"pup-audio",filePath:o}),electron.ipcMain.on("audio-meta",async(i,n)=>{let s=n.sampleRate,c=e();r.setupAudio(s);let a=Math.ceil(c*s/1e3);if(!(a<=0))try{await r.encodeAudio(Buffer.alloc(a*2*4));}catch(u){t(u);}}),electron.ipcMain.on("audio-chunk",async(i,n)=>{try{await r.encodeAudio(n);}catch(s){t(s);}}),{async teardown(){electron.ipcMain.removeAllListeners("audio-meta"),electron.ipcMain.removeAllListeners("audio-chunk"),electron.session.defaultSession.unregisterPreloadScript("pup-audio"),await promises.rm(o,{force:true});}}}function ae(r){return new Promise(e=>setTimeout(e,r))}function Pt({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let n=0;for(;;)try{let s=[r(...i)];return t&&s.push(promises$1.setTimeout(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(n++,n>=e)throw s;await ae(Math.pow(2,n)*100+Math.random()*100);}}}var ke=["file:","http:","https:","data:"],Hr=/^(file:|https?:|data:)/;function Ft(r){if(Hr.test(r))return;let e=r.split(":")[0]+":",t=ke.includes(e)?`unsupported protocol: ${e}, expected ${ke.join(", ")}`:`invalid source format, expected ${ke.join(", ")}`;throw new Error(t)}var ce=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var ue="[Network]",qr=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function Re(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=qr.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function St({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,i=new N(64),n=new Map;async function s(a,u){let m=new ce;n.set(a,m),await m.wait({timeout:5e3,onTimeout:u}).finally(()=>n.delete(a));}function c(a){n.get(a)?.signal();}o.onBeforeRequest((a,u)=>{let m=a.url,d=t?Re(m):m;i.schedule(()=>{let p=`${e.id}_${a.id}`;return h.debug(ue,"start:",{key:p,url:m,proxied:d,method:a.method,source:r,stats:i.stats}),u(d===m?{cancel:false}:{cancel:false,redirectURL:d}),s(p,()=>{h.warn(ue,"maybe timeout:",{key:p,url:m,proxied:d,method:a.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:a},u)=>{delete a?.["x-frame-options"],delete a?.["X-Frame-Options"],delete a?.["content-security-policy"],delete a?.["Content-Security-Policy"],u({cancel:false,responseHeaders:a});}),o.onCompleted(a=>{let u=`${e.id}_${a.id}`;c(u),h.debug(ue,"completed:",{key:u,url:a.url,method:a.method,statusCode:a.statusCode,source:r});}),o.onErrorOccurred(a=>{let u=`${e.id}_${a.id}`;c(u),h.error(ue,"error:",{key:u,url:a.url,method:a.method,error:a.error,source:r});});}function Ce(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Te="[Window]";function Yr(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>o(new Error("load window timeout")),3e4),n=s=>{clearTimeout(i),s?o(s):t();};r.webContents.once("did-stop-loading",()=>n()),r.webContents.once("did-frame-finish-load",(s,c,a,u)=>{h.debug(Te,"did-frame-finish-load:",{isMainFrame:c,frameProcessId:a,frameRoutingId:u});}),r.webContents.once("dom-ready",()=>{h.debug(Te,"dom-ready");}),r.webContents.once("did-fail-load",(s,c,a,u)=>n(new Error(`failed to load ${u}: [${c}] ${a}`))),r.webContents.once("render-process-gone",(s,{exitCode:c,reason:a})=>n(new Error(`renderer crashed: ${c}, ${a}`))),e();})}function At(r){return new Promise(e=>{Ce(r),r.once("closed",e),r.destroy();})}async function It({source:r,onCreated:e,renderer:t,warmup:o}){Ft(r);let{width:i,height:n,useInnerProxy:s}=t,c=s?Re(r):r,a=new electron.BrowserWindow({width:i,height:n+1,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});St({source:r,window:a,useInnerProxy:s}),o||await e?.(a),a.webContents.on("console-message",({level:u,message:m,lineNumber:d,sourceId:p})=>{let f=[Te,"console:",{message:m,lineNumber:d,sourceId:p,source:r}];u==="error"?h.error(...f):h.debug(...f);});try{let u=dt(c,{width:i,height:n});await Yr(a,()=>a.loadURL(u));}catch(u){throw await At(a),u}return a}async function de({source:r,onCreated:e,renderer:t}){let o;try{o=await Pt({fn:It,maxAttempts:2})({source:r,renderer:t,warmup:!0});}catch(i){let{message:n,stack:s}=i;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:n,stack:s})}`)}o.webContents.removeAllListeners(),Ce(o),await ae(2e3),await At(o);try{return await It({source:r,renderer:t,onCreated:e})}catch(i){let{message:n,stack:s}=i;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:n,stack:s})}`)}}async function kt(r,e,t){var U=[];try{let{fps:o,width:i,height:n,duration:s,withAudio:c,outFile:a}=t;let u=x(U,await W.create({width:i,height:n,fps:o,outFile:a,withAudio:c}),!0);let m=Math.ceil(o*s);let d=1e3/o;let p=0;let f;let b=0;let w;let v;let R;let _=new ie(o);let I;let g=A=>{p++,u.encodeBGRA(A).catch(Y=>w??=Y);};let P=(A,Y,le)=>{if(w){R?.(w);return}if(ne(le))return;let fe=le.toBitmap(),V=X(fe,le.getSize());if(V===void 0){w??=new Error(`no timestamp @ ${p}`);return}let Nt=i*4,he=Buffer.from(fe.buffer,fe.byteOffset,n*Nt);if(f===void 0)g(he),_.wrote(),f=V;else {let we=V-f;if(we>=d*.8){if(we<=d*1.2)g(he),_.wrote();else {let Le=Math.round(we/d);_.dropped(Le-1),_.wrote();for(let Be=0;Be<Le&&p<m;Be++)g(he);}f=V;}}let De=Math.floor(p/m*100);Math.abs(De-b)>10&&(b=De,r.writeProgress(b));let Wt=s*1e3;(V>=Wt-d*.5||p>=m)&&v?.();};let y=await de({source:e,renderer:t,onCreated:async()=>{c&&(I=await Et({encoder:u,getVideoTimeMs:()=>f??0,onError:A=>w??=A}));}});let C=y.webContents.debugger;y.webContents.setFrameRate(o);y.webContents.isPainting()||y.webContents.startPainting();C.attach("1.3");y.webContents.on("paint",P);try{await Q(C),await new Promise((A,Y)=>[v,R]=[A,Y]);}finally{await Z(C),y.webContents.off("paint",P),y.close(),await I?.teardown(),await u.finish();}if(w||p===0)throw w??new Error("no frames captured");else {let A=_.finalize();return {written:p,jank:A.jank,outFile:a}}}catch(me){var K=me,Bt=true;}finally{var Me=E(U,K,Bt);Me&&await Me;}}function Rt(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error("advanceVirtualTime timed out after 30000ms"));},3e4),n=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"advance",budget:e});})}function Ct(r){return r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"pause"})}var pe=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 $="__pup_tick__";function Tt(r){return `(function() {
161
+ `;async function Yt({encoder:r,getVideoTimeMs:e,onError:t}){let o=path.join(os.tmpdir(),`pup_audio_preload_${crypto.randomUUID()}.js`);return await promises.writeFile(o,To),electron.session.defaultSession.registerPreloadScript({type:"frame",id:"pup-audio",filePath:o}),electron.ipcMain.on("audio-meta",async(i,n)=>{let s=n.sampleRate,c=e();r.setupAudio(s);let a=Math.ceil(c*s/1e3);if(!(a<=0))try{await r.encodeAudio(Buffer.alloc(a*2*4));}catch(u){t(u);}}),electron.ipcMain.on("audio-chunk",async(i,n)=>{try{await r.encodeAudio(n);}catch(s){t(s);}}),{async teardown(){electron.ipcMain.removeAllListeners("audio-meta"),electron.ipcMain.removeAllListeners("audio-chunk"),electron.session.defaultSession.unregisterPreloadScript("pup-audio"),await promises.rm(o,{force:true});}}}function Ee(r){return new Promise(e=>setTimeout(e,r))}function Jt({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let n=0;for(;;)try{let s=[r(...i)];return t&&s.push(promises$1.setTimeout(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(n++,n>=e)throw s;await Ee(Math.pow(2,n)*100+Math.random()*100);}}}var Xe=["file:","http:","https:","data:"],Bo=/^(file:|https?:|data:)/;function Kt(r){if(Bo.test(r))return;let e=r.split(":")[0]+":",t=Xe.includes(e)?`unsupported protocol: ${e}, expected ${Xe.join(", ")}`:`invalid source format, expected ${Xe.join(", ")}`;throw new Error(t)}var Pe=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var Ce="[Network]",Oo=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function Ye(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=Oo.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Qt({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,i=new W(64),n=new Map;async function s(a,u){let p=new Pe;n.set(a,p),await p.wait({timeout:5e3,onTimeout:u}).finally(()=>n.delete(a));}function c(a){n.get(a)?.signal();}o.onBeforeRequest((a,u)=>{let p=a.url,d=t?Ye(p):p;i.schedule(()=>{let h=`${e.id}_${a.id}`;return l.debug(Ce,"start:",{key:h,url:p,proxied:d,method:a.method,source:r,stats:i.stats}),u(d===p?{cancel:false}:{cancel:false,redirectURL:d}),s(h,()=>{l.warn(Ce,"maybe timeout:",{key:h,url:p,proxied:d,method:a.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:a},u)=>{delete a?.["x-frame-options"],delete a?.["X-Frame-Options"],delete a?.["content-security-policy"],delete a?.["Content-Security-Policy"],u({cancel:false,responseHeaders:a});}),o.onCompleted(a=>{let u=`${e.id}_${a.id}`;c(u),l.debug(Ce,"completed:",{key:u,url:a.url,method:a.method,statusCode:a.statusCode,source:r});}),o.onErrorOccurred(a=>{let u=`${e.id}_${a.id}`;c(u),l.error(Ce,"error:",{key:u,url:a.url,method:a.method,error:a.error,source:r});});}function Je(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Ke="[Window]";function Do(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>o(new Error("load window timeout")),3e4),n=s=>{clearTimeout(i),s?o(s):t();};r.webContents.once("did-stop-loading",()=>n()),r.webContents.once("did-frame-finish-load",(s,c,a,u)=>{l.debug(Ke,"did-frame-finish-load:",{isMainFrame:c,frameProcessId:a,frameRoutingId:u});}),r.webContents.once("dom-ready",()=>{l.debug(Ke,"dom-ready");}),r.webContents.once("did-fail-load",(s,c,a,u)=>n(new Error(`failed to load ${u}: [${c}] ${a}`))),r.webContents.once("render-process-gone",(s,{exitCode:c,reason:a})=>n(new Error(`renderer crashed: ${c}, ${a}`))),e();})}function er(r){return new Promise(e=>{Je(r),r.once("closed",e),r.destroy();})}async function Zt({source:r,onCreated:e,renderer:t,warmup:o}){Kt(r);let{width:i,height:n,useInnerProxy:s}=t,c=s?Ye(r):r,a=new electron.BrowserWindow({width:i,height:n+1,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});Qt({source:r,window:a,useInnerProxy:s}),o||await e?.(a),a.webContents.on("console-message",({level:u,message:p,lineNumber:d,sourceId:h})=>{let f=[Ke,"console:",{message:p,lineNumber:d,sourceId:h,source:r}];u==="error"?l.error(...f):l.debug(...f);});try{let u=Tt(c,{width:i,height:n});await Do(a,()=>a.loadURL(u));}catch(u){throw await er(a),u}return a}async function Fe({source:r,onCreated:e,renderer:t}){let o;try{o=await Jt({fn:Zt,maxAttempts:2})({source:r,renderer:t,warmup:!0});}catch(i){let{message:n,stack:s}=i;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:n,stack:s})}`)}o.webContents.removeAllListeners(),Je(o),await Ee(2e3),await er(o);try{return await Zt({source:r,renderer:t,onCreated:e})}catch(i){let{message:n,stack:s}=i;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:n,stack:s})}`)}}async function tr(r,e,t){var V=[];try{let{fps:o,width:i,height:n,duration:s,withAudio:c,outFile:a,disableHwCodec:u}=t;let p=y(V,await X.create({width:i,height:n,fps:o,outFile:a,withAudio:c,disableHwCodec:u}),!0);let d=Math.ceil(o*s);let h=1e3/o;let f=0;let w;let b=0;let x;let v;let g;let E=new be(o);let _;let A=S=>{f++,p.encodeBGRA(S).catch(T=>x??=T);};let ne=(S,T,Ae)=>{if(x){g?.(x);return}if(ye(Ae))return;let Ie=Ae.toBitmap(),Z=ce(Ie,Ae.getSize());if(Z===void 0){x??=new Error(`no timestamp @ ${f}`);return}let dr=i*4,ke=Buffer.from(Ie.buffer,Ie.byteOffset,n*dr);if(w===void 0)A(ke),E.wrote(),w=Z;else {let Te=Z-w;if(Te>=h*.8){if(Te<=h*1.2)A(ke),E.wrote();else {let tt=Math.round(Te/h);E.dropped(tt-1),E.wrote();for(let rt=0;rt<tt&&f<d;rt++)A(ke);}w=Z;}}let et=Math.floor(f/d*100);Math.abs(et-b)>10&&(b=et,r.writeProgress(b));let pr=s*1e3;(Z>=pr-h*.5||f>=d)&&v?.();};let I=await Fe({source:e,renderer:t,onCreated:async()=>{c&&(_=await Yt({encoder:p,getVideoTimeMs:()=>w??0,onError:S=>x??=S}));}});let L=I.webContents.debugger;I.webContents.setFrameRate(o);I.webContents.isPainting()||I.webContents.startPainting();L.attach("1.3");I.webContents.on("paint",ne);try{await ue(L),await new Promise((S,T)=>[v,g]=[S,T]);}finally{await de(L),I.webContents.off("paint",ne),I.close(),await _?.teardown(),await p.finish();}if(x||f===0)throw x??new Error("no frames captured");else {let S=E.finalize();return {written:f,jank:S.jank,outFile:a}}}catch(ae){var J=ae,K=true;}finally{var Q=P(V,J,K);Q&&await Q;}}function rr(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error("advanceVirtualTime timed out after 30000ms"));},3e4),n=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"advance",budget:e});})}function or(r){return r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"pause"})}function ir(r,e=100){let t;return function(...o){clearTimeout(t),t=setTimeout(()=>{r.apply(this,o),t=void 0;},e);}}var Vo="[HWAccel]";async function Uo(){let r=api.HardwareContext.auto(),e=r!==null;return r?.dispose(),e}var nr=Uo().then(r=>(l.debug(Vo,"gpu:",r),r));var Se=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 Y="__pup_tick__";function ar(r){return `(function() {
162
162
  ${"if (window.self === window.top) return;"}
163
- if (typeof ${$} !== 'undefined') return;
163
+ if (typeof ${Y} !== 'undefined') return;
164
164
 
165
165
  const orig = {
166
166
  Date: Date,
@@ -219,6 +219,10 @@
219
219
 
220
220
  function process(timestampMs) {
221
221
  currMs = timestampMs;
222
+ document.getAnimations().forEach(a => {
223
+ a.pause();
224
+ a.currentTime = currMs;
225
+ });
222
226
  const ids = Object.keys(timers);
223
227
  for (let i = 0; i < ids.length; i++) {
224
228
  const t = timers[ids[i]];
@@ -244,9 +248,9 @@
244
248
  window.clearTimeout = orig.clearTimeout;
245
249
  window.setInterval = orig.setInterval;
246
250
  window.clearInterval = orig.clearInterval;
247
- delete window.${$};
251
+ delete window.${Y};
248
252
  }
249
253
 
250
- window.${$} = { process: process, eject: eject };
251
- })();`}function Oe(r){return `${$}.process(${r})`}function Ot(){return `if (typeof ${$} !== 'undefined') ${$}.eject()`}var Mt="[Shoot]";function Jr(r,e,t,o){return new Promise(i=>{let n=(s,c,a)=>{if(ne(a))return;let u=a.toBitmap(),m=X(u,a.getSize());if(m===void 0||m<o){h.warn(Mt,`skipping frame ${m}, expected > ${o}`);return}r.webContents.stopPainting(),r.webContents.off("paint",n),i(Buffer.from(u.buffer,u.byteOffset,t*e*4));};r.webContents.on("paint",n);})}async function Dt(r,e,t){var R=[];try{let{fps:o,width:i,height:n,duration:s,withAudio:c,outFile:a}=t;c&&h.warn(Mt,"audio will be ignored on this mode");let u=x(R,await W.create({width:i,height:n,fps:o,outFile:a,withAudio:c}),!0);let m=Math.ceil(o*s);let d=1e3/o;let p=0;let f=0;let b=await de({source:e,renderer:t});let w=b.webContents.debugger;let v=new pe(()=>b.webContents.mainFrame.frames[0]);try{w.attach("1.3"),b.webContents.stopPainting(),b.webContents.setFrameRate(o),await Ct(w);let y=v.value;await y?.executeJavaScript(Tt()),await y?.executeJavaScript(Oe(0)),await Q(w);for(let C=0;C<m;C++){let U=(C+1)*d,me=Jr(b,i,n,U-d/2);await Rt(w,d),await y?.executeJavaScript(Oe(U)),b.webContents.startPainting(),await u.encodeBGRA(await me),p++;let K=Math.floor(p/m*100);Math.abs(K-f)>10&&(f=K,r.writeProgress(f));}}finally{await v.value?.executeJavaScript(Ot()),await Z(w),w.detach(),b.close(),await u.finish();}if(p===0)throw new Error("no frames captured");else return {written:p,jank:0,outFile:a}}catch(_){var I=_,g=true;}finally{var P=E(R,I,g);P&&await P;}}var eo="[App]";function Lt(){h.debug(eo,"gpu features:",electron.app.getGPUFeatureStatus());}electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});nt({name:"app",defaults:{...ot,withAudio:false,deterministic:false,useInnerProxy:false},run:async(r,e)=>{let t=i=>{electron.app.quit(),process.exit(i);};process.once("SIGTERM",()=>t(143)),process.once("SIGINT",()=>t(130)),process.once("exit",i=>t(i)),assert.ok(xe,"pupIpcSocket not set");let o=await st(xe);try{electron.app.on("gpu-info-update",Lt),await electron.app.whenReady(),ut(),Lt(),await promises.mkdir(path.dirname(e.outFile),{recursive:!0});let i=e.deterministic?Dt:kt;o.writeDone(await i(o,r,e));}catch(i){let n=i;o.writeError(n.stack??"unknown error");}finally{electron.app.quit();}}});//# sourceMappingURL=app.cjs.map
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErYTZkOTFmMTM3MDdhZTBmZC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvY29tbW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9yZW5kZXJlci9zdGVnby50cyIsIi4uL3NyYy9yZW5kZXJlci9wcm90b2NvbC50cyIsIi4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9lbmNvZGVyLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9iYXNlL2NkcC50cyIsIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwiZW52IiwicHVwTG9nTGV2ZWwiLCJwdXBVc2VJbm5lclByb3h5IiwicHVwRGV0ZXJtaW5pc3RpYyIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwiam9pbiIsInB1cElwY1NvY2tldCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRklMRSIsIlJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSEVBREVSX1NJWkUiLCJJcGNXcml0ZXIiLCJfc29ja2V0IiwicGF5bG9hZCIsInR5cGUiLCJoZWFkZXIiLCJjb25uZWN0SXBjIiwic29ja2V0UGF0aCIsInNvY2tldCIsImNyZWF0ZUNvbm5lY3Rpb24iLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsImNkcCIsInN0b3BTdGVnbyIsIlBVUF9TQ0hFTUUiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInJ1biIsInYiLCJyIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwiY3R4Iiwic3RyZWFtIiwib3V0Rm10IiwiUGFja2V0IiwiRnJhbWUiLCJjb2RlYyIsIkNvZGVjIiwiQ29kZWNDb250ZXh0IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJGRm1wZWdFcnJvciIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm11eGVyIiwiX3N0YWNrIiwiblNhbXBsZXMiLCJmcmFtZSIsIl9fdXNpbmciLCJfIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJtYWtlU1dTQ29udGV4dCIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsIlNXU19CSUxJTkVBUiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiY29kZWNUYWciLCJwa3QiLCJWaWRlb0VuY29kZXIiLCJfVmlkZW9FbmNvZGVyIiwiZnBzIiwiY29kZWNOYW1lIiwiZ2xvYmFsSGVhZGVyIiwiY29kZWNPcHRzIiwiYml0cmF0ZSIsImsiLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwiX3ZpZGVvIiwiX2F1ZGlvIiwiX211eGVyIiwiX2xpbWl0ZXIiLCJfb3V0RmlsZSIsIl9jb2RlYyIsIm91dEZpbGUiLCJ3aXRoQXVkaW8iLCJ2aWRlbyIsIkZGX0VOQ09ERVJfTElCWDI2NSIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJzYW1wbGVSYXRlIiwiaW5wdXQiLCJkc3QiLCJwbmdEYXRhIiwiX20iLCJfdiIsIl9hIiwiX3Byb21pc2UiLCJGcmFtZURyb3BTdGF0cyIsImNvdW50IiwidG90YWxEcm9wcGVkIiwibG9jYWxTdW0iLCJtYXhCdXJzdCIsImJ1cnN0IiwicGVyY2VwdGlibGUiLCJleHBlY3RlZCIsImciLCJsIiwic2NvcmUiLCJpc0VtcHR5IiwiaW1hZ2UiLCJBVURJT19DQVBUVVJFX1NDUklQVCIsInNldHVwQXVkaW9DYXB0dXJlIiwiZW5jb2RlciIsImdldFZpZGVvVGltZU1zIiwib25FcnJvciIsInByZWxvYWRQYXRoIiwidG1wZGlyIiwicmFuZG9tVVVJRCIsIndyaXRlRmlsZSIsInNlc3Npb24iLCJpcGNNYWluIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJidWZmZXIiLCJybSIsInNsZWVwIiwibXMiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dCIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJXYWl0YWJsZUV2ZW50IiwiVEFHIiwibWFwIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwidW5zZXRJbnRlcmNlcHRvciIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJkb25lIiwiaXNNYWluRnJhbWUiLCJmcmFtZVByb2Nlc3NJZCIsImZyYW1lUm91dGluZ0lkIiwiZGVzYyIsImV4aXRDb2RlIiwid2FpdEZvckRlc3Ryb3kiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwicmVuZGVyZXIiLCJ3YXJtdXAiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsImxvYWRXaW5kb3ciLCJzdGFjayIsInJlbmRlciIsIndyaXRlciIsImR1cmF0aW9uIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwid3JpdHRlbiIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiZHJvcFN0YXRzIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJjdXJyZW50VGltZSIsImJ5dGVzUGVyUm93IiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwiaiIsImRyb3BTY29yZSIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsImhhbmRsZXIiLCJtZXRob2QiLCJwYXVzZVZpcnR1YWxUaW1lIiwiTGF6eSIsIm1ha2VWYWx1ZSIsIlRJQ0tfU1lNQk9MIiwiYnVpbGRUaWNrSW5qZWN0b3IiLCJkb1Byb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsImRvRWplY3QiLCJhd2FpdFN0ZWdvRnJhbWUiLCJhZnRlclRzIiwiX2QiLCJ0cyIsInNob290IiwicGlwZWxpbmUiLCJyb290RnJhbWUiLCJpZnJhbWUiLCJmcmFtZU1zIiwicHJpbnRGZWF0dXJlcyIsImFwcCIsImV4aXQiLCJjIiwiaXBjIiwibWtkaXIiXSwibWFwcGluZ3MiOiJ3aEJBS0EsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxNQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsWUFBQSxDQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLE1BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLGVBQUEsRUFBQSxVQUFBLENBQUEsZUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSx5Q0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxJQUNoQixJQUFJLEdBQUEsQ0FBSSxDQUFBLEtBQUEsRUFBUSxVQUFVLENBQUEsQ0FBRSxDQUFBLENBQUUsSUFBQSxDQUM3QixRQUFBLENBQVMsZUFBaUIsUUFBQSxDQUFTLGFBQUEsQ0FBYyxPQUFBLENBQVEsV0FBQSxFQUFZLEdBQU0sUUFBQSxDQUMxRSxRQUFBLENBQVMsYUFBQSxDQUFjLElBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxRQUFBLENBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsQ0FBQUEsQ0FBZ0NELEVBQUFBLEdDTnRDLFNBQVNFLEdBQVFDLENBQUFBLENBQWNDLENBQUFBLENBQXNCQyxDQUFBQSxDQUFpQyxDQUMzRixHQUFJLENBQ0YsT0FBT0QsQ0FBQUEsQ0FBTyxPQUFBLENBQVEsSUFBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ1ZPLFNBQVNDLENBQUFBLENBQVlDLENBQUFBLENBQW9CLENBQzlDLEdBQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQ2YsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNQyxDQUFBQSxDQUFNLE1BQUEsQ0FBT0QsQ0FBQyxDQUFBLENBQ3BCLEdBQUksTUFBQSxDQUFPLE1BQU1DLENBQUcsQ0FBQSxDQUNsQixNQUFNLElBQUksTUFBTSxDQUFBLE1BQUEsRUFBU0QsQ0FBQyxDQUFBLHNCQUFBLENBQXdCLENBQUEsQ0FFcEQsT0FBT0MsQ0FDVCxDQ0pBLElBQU1DLEVBQUFBLENBQVVDLHNCQUFBQSxDQUFjVCxDQUFlLENBQUEsQ0FDdkNVLENBQUFBLENBQU0sUUFBUSxHQUFBLENBRVBDLEVBQUFBLENBQWNWLEVBQUFBLENBQUssZUFBQSxDQUFpQkksRUFBYSxDQUFDLENBQUEsQ0FDbERPLEVBQUFBLENBQW1CRixDQUFBQSxDQUFJLHNCQUEyQixHQUFBLENBQ2xDQSxDQUFBQSxDQUFJLGVBQUEsR0FBdUIsR0FBQSxLQUMzQ0csRUFBQUEsQ0FBbUJILENBQUFBLENBQUksaUJBQUEsR0FBeUIsSUFFaERJLEVBQUFBLENBQWFDLFlBQUFBLENBQVFQLEVBQUFBLENBQVEsT0FBQSxDQUFRLDJCQUEyQixDQUFDLENBQUEsQ0FDeERRLFNBQUFBLENBQUtGLEdBQVksTUFBQSxDQUFRLFNBQVMsQ0FBQSxLQUMzQ0csRUFBQUEsQ0FBZVAsQ0FBQUEsQ0FBSSxjQUFBLENBRVFBLENBQUFBLENBQUksNkJBQWtDLElDRjlFLElBQU1RLEVBQUFBLENBQVEsYUFBQSxDQUNSQyxFQUFBQSxDQUFPLFlBQUEsQ0FDUEMsRUFBQUEsQ0FBTyxhQUNQQyxFQUFBQSxDQUFRLGFBQUEsQ0FDUkMsRUFBQUEsQ0FBUSxhQUFBLENBRWQsU0FBU0MsQ0FBQUEsQ0FBVUMsQ0FBQUEsQ0FBa0JDLENBQUFBLENBQXVDLENBQzFFLE9BQU8sU0FBQSxHQUEyQkMsQ0FBQUEsQ0FBcUIsQ0FDckQsSUFBTUMsQ0FBQUEsQ0FBWUQsQ0FBQUEsQ0FBUyxHQUFBLENBQUtFLENBQUFBLEVBQ3ZCQSxhQUFlLEtBQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxLQUFBLEVBQVMsTUFBQSxDQUFPQSxDQUFHLENBQUEsQ0FBS0EsQ0FDNUQsQ0FBQSxDQUNELE9BQU9KLEVBQU8sSUFBQSxDQUFLLElBQUEsQ0FBTSxHQUFHRyxDQUFTLENBQ3ZDLENBQ0YsQ0E5QkEsSUFBQUUsR0FBQUMsRUFBQUEsQ0FBQUMsRUFBQUEsQ0FBQUMsRUFBQUEsQ0FBQUMsRUFBQUEsQ0FBQUMsRUFrRUVELEVBQUFBLENBQUEsQ0FBQ1YsQ0FBQUEsQ0FBQUEsQ0FLRFMsRUFBQUEsQ0FBQSxDQUFDVCxDQUFBQSxDQUFBQSxDQUtEUSxFQUFBQSxDQUFBLENBQUNSLENBQUFBLENBQUFBLENBS0RPLEVBQUFBLENBQUEsQ0FBQ1AsQ0FBQUEsQ0FBQUEsQ0FLRE0sRUFBQUEsQ0FBQSxDQUFDTixDQUFBQSxDQUFBQSxDQXRESSxJQUFNWSxDQUFBQSxDQUFOLEtBQW1DLENBOEJ4QyxXQUFBLENBQW9CQyxDQUFBQSxDQUFpQnpCLEVBQUFBLENBQWEsQ0FBOUIsWUFBQXlCLENBQUFBLENBOUJmQyxFQUFBQSxDQUFBSCxDQUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FDTEksRUFBQUEsQ0FBQSxJQUFBLENBQVEsT0FBQSxDQUFBLENBOEJOLElBQUEsQ0FBSyxLQUFPLFFBQ2QsQ0FGb0IsTUFBQSxDQTNCcEIsSUFBSSxPQUFnQixDQUNsQixPQUFPLElBQUEsQ0FBSyxNQUNkLENBRUEsSUFBSSxLQUFBLENBQU1DLENBQUFBLENBQWUsQ0FDdkIsSUFBQSxDQUFLLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FDZCxJQUFBLENBQUssS0FBTyxJQUFBLENBQUssS0FBQSxFQUFTLFFBQzVCLENBRUEsSUFBSSxJQUFBLEVBQStCLENBQ2pDLE9BQU8sSUFBQSxDQUFLLEtBQ2QsQ0FFQSxJQUFJLElBQUEsQ0FBS0EsQ0FBQUEsQ0FBbUIsQ0FDMUIsSUFBTUMsQ0FBQUEsQ0FBUUQsQ0FBQUEsQ0FBTSxPQUFTLE9BQUEsQ0FBUSxLQUFBLENBQy9CRSxDQUFBQSxDQUFPRixDQUFBQSxDQUFNLE1BQVEsT0FBQSxDQUFRLElBQUEsQ0FDN0JHLENBQUFBLENBQU9ILENBQUFBLENBQU0sTUFBUSxPQUFBLENBQVEsSUFBQSxDQUM3QkksQ0FBQUEsQ0FBUUosQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLEtBQUEsQ0FDL0JLLENBQUFBLENBQUssS0FBSyxNQUFBLENBQ2hCLElBQUEsQ0FBSyxLQUFBLENBQVEsQ0FDWCxLQUFBLENBQU9BLENBQUFBLEVBQU0sQ0FBQSxDQUFJSixDQUFBQSxDQUFRLE9BQ3pCLElBQUEsQ0FBTUksQ0FBQUEsRUFBTSxDQUFBLENBQUlILENBQUFBLENBQU8sTUFBQSxDQUN2QixJQUFBLENBQU1HLENBQUFBLEVBQU0sQ0FBQSxDQUFJRixFQUFPLE1BQUEsQ0FDdkIsS0FBQSxDQUFPRSxDQUFBQSxFQUFNLENBQUEsQ0FBSUQsRUFBUSxNQUMzQixFQUNGLENBT0EsS0FBQSxDQUFBLEdBQVNqQixFQUEyQixDQUNsQyxJQUFBLENBQUssSUFBQSxFQUFNLEtBQUEsR0FBUVIsRUFBQUEsQ0FBTyxHQUFHUSxDQUFRLEVBQ3ZDLENBR0EsSUFBQSxDQUFBLEdBQVFBLENBQUFBLENBQTJCLENBQ2pDLElBQUEsQ0FBSyxNQUFNLElBQUEsR0FBT1AsRUFBQUEsQ0FBTSxHQUFHTyxDQUFRLEVBQ3JDLENBR0EsSUFBQSxDQUFBLEdBQVFBLENBQUFBLENBQTJCLENBQ2pDLElBQUEsQ0FBSyxJQUFBLEVBQU0sSUFBQSxHQUFPTixFQUFBQSxDQUFNLEdBQUdNLENBQVEsRUFDckMsQ0FHQSxLQUFBLENBQUEsR0FBU0EsRUFBMkIsQ0FDbEMsSUFBQSxDQUFLLElBQUEsRUFBTSxLQUFBLEdBQVFMLEdBQU8sR0FBR0ssQ0FBUSxFQUN2QyxDQUdBLEtBQUEsQ0FBQSxHQUFTQSxDQUFBQSxDQUEyQixDQUNsQyxJQUFBLENBQUssTUFBTSxLQUFBLEdBQVFKLEVBQUFBLENBQU8sR0FBR0ksQ0FBUSxDQUFBLENBQ3JDLE9BQUEsQ0FBUSxJQUFBLENBQUssQ0FBQyxFQUNoQixDQUVRLFFBQUEsQ0FBU21CLENBQUFBLENBQWlCLENBQ2hDLElBQU1qQixDQUFBQSxDQUFNaUIsQ0FBQUEsQ0FBUSxPQUFBLEdBQ2hCakIsQ0FBQUEsQ0FBSSxVQUFBLENBQVdWLEVBQUssQ0FBQSxDQUN0QixLQUFLLEtBQUEsQ0FBTVUsQ0FBQUEsQ0FBSSxLQUFBLENBQU1WLEVBQUFBLENBQU0sT0FBUyxDQUFDLENBQUMsQ0FBQSxDQUM3QlUsQ0FBQUEsQ0FBSSxVQUFBLENBQVdULEVBQUksQ0FBQSxDQUM1QixJQUFBLENBQUssS0FBS1MsQ0FBQUEsQ0FBSSxLQUFBLENBQU1ULEVBQUFBLENBQUssTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzNCUyxDQUFBQSxDQUFJLFVBQUEsQ0FBV1IsRUFBSSxDQUFBLENBQzVCLElBQUEsQ0FBSyxJQUFBLENBQUtRLENBQUFBLENBQUksS0FBQSxDQUFNUixFQUFBQSxDQUFLLE1BQUEsQ0FBUyxDQUFDLENBQUMsQ0FBQSxDQUMzQlEsQ0FBQUEsQ0FBSSxVQUFBLENBQVdQLEVBQUssRUFDN0IsSUFBQSxDQUFLLEtBQUEsQ0FBTU8sQ0FBQUEsQ0FBSSxLQUFBLENBQU1QLEdBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBRXRDLElBQUEsQ0FBSyxJQUFBLENBQUtPLENBQUcsRUFFakIsQ0FFQSxNQUFBLENBQU9rQixDQUFBQSxDQUFvQjVDLENBQUFBLENBQWMsQ0FDdkMsT0FBTyxJQUFJLE9BQUEsQ0FBYyxDQUFDNkMsRUFBU0MsQ0FBQUEsR0FBVyxDQUM1QyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBRzlDLENBQUksQ0FBQSxPQUFBLENBQVMsQ0FBQSxDQUMzQixJQUFJK0MsQ0FBQUEsQ0FBZ0IsRUFBQSxDQUNkQyxDQUFBQSxDQUFZQyxDQUFBQSxFQUFnQyxDQUNoRCxJQUFNTixDQUFBQSxDQUFVTSxDQUFBQSxDQUFLLFFBQUEsR0FDakJOLENBQUFBLENBQVEsVUFBQSxDQUFXdkIsRUFBSyxDQUFBLENBQzFCMkIsQ0FBQUEsRUFBU0osQ0FBQUEsQ0FBUSxLQUFBLENBQU12QixFQUFBQSxDQUFNLE9BQVMsQ0FBQyxDQUFBLENBRXZDLElBQUEsQ0FBSyxRQUFBLENBQVN1QixDQUFPLEVBRXpCLENBQUEsQ0FDQUMsQ0FBQUEsQ0FBSyxNQUFBLEVBQVEsR0FBRyxNQUFBLENBQVFJLENBQVEsQ0FBQSxDQUNoQ0osQ0FBQUEsQ0FBSyxNQUFBLEVBQVEsRUFBQSxDQUFHLE1BQUEsQ0FBUUksQ0FBUSxFQUNoQ0osQ0FBQUEsQ0FDRyxFQUFBLENBQUcsU0FBQSxDQUFXSSxDQUFRLEVBQ3RCLEVBQUEsQ0FBRyxPQUFBLENBQVVFLENBQUFBLEVBQVEsQ0FDcEJILEdBQVNHLENBQUFBLENBQUksT0FBQSxDQUNiTixDQUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLENBQUEsQ0FDQSxJQUFBLENBQUssUUFBUyxDQUFDTyxDQUFBQSxDQUFNQyxDQUFBQSxHQUFXLENBQzNCRCxHQUFRQyxDQUFBQSxFQUFVTCxDQUFBQSxFQUNwQkEsQ0FBQUEsR0FBVSxDQUFBLGdCQUFBLEVBQW1CSCxFQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUNyRCxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBRzVDLENBQUksQ0FBQSxNQUFBLENBQUEsQ0FBVSxDQUFFLElBQUEsQ0FBQW1ELENBQUFBLENBQU0sT0FBQUMsQ0FBQUEsQ0FBUSxLQUFBLENBQUFMLENBQU0sQ0FBQyxFQUNuREQsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTUMsQ0FBSyxDQUFDLENBQUEsR0FFdkIsSUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUFHL0MsQ0FBSSxDQUFBLE1BQUEsQ0FBUSxDQUFBLENBQzFCNkMsQ0FBQUEsSUFFSixDQUFDLENBQUEsQ0FDQSxFQUFBLENBQUcsb0JBQUEsQ0FBdUJRLEdBQVcsQ0FDcEMsSUFBQSxDQUFLLEtBQUEsQ0FBTSxDQUFBLEVBQUdyRCxDQUFJLENBQUEsVUFBQSxDQUFBLENBQWNxRCxDQUFNLEVBQ3hDLENBQUMsQ0FBQSxDQUNBLEVBQUEsQ0FBRywwQkFBQSxDQUE2QkgsQ0FBQUEsRUFBUSxDQUN2QyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR2xELENBQUksYUFBY2tELENBQUcsRUFDckMsQ0FBQyxFQUNMLENBQUMsQ0FDSCxDQUNGLENBQUEsQ0FqSE9sQixFQUFBc0IsRUFBQUEsQ0FBQSxDQUFBLENBbUNMQyxDQUFBQSxDQUFBdkIsQ0FBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQURBRCxFQUFBQSxDQWxDV0UsQ0FBQUEsQ0FBQUEsQ0F3Q1hzQixDQUFBQSxDQUFBdkIsRUFBQSxDQUFBLENBQUEsTUFBQSxDQURBRixFQUFBQSxDQXZDV0csQ0FBQUEsQ0FBQUEsQ0E2Q1hzQixDQUFBQSxDQUFBdkIsQ0FBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQURBSCxFQUFBQSxDQTVDV0ksQ0FBQUEsQ0FBQUEsQ0FrRFhzQixFQUFBdkIsQ0FBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQURBSixFQUFBQSxDQWpEV0ssQ0FBQUEsQ0FBQUEsQ0F1RFhzQixFQUFBdkIsQ0FBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQURBTCxFQUFBQSxDQXREV00sQ0FBQUEsQ0FBQUEsQ0FBTnVCLEdBQUF4QixDQUFBQSxDQUFNQyxDQUFBQSxDQUFBQSxDQW1IYixJQUFNd0IsQ0FBQUEsQ0FBUyxJQUFJeEIsQ0FBQUEsQ0FHbkJ5QixVQUFBQSxDQUFJLFdBQUEsQ0FBWSxDQUFDQyxDQUFBQSxDQUFPaEIsQ0FBQUEsR0FBWSxDQUNsQyxJQUFNakIsRUFBTWlCLENBQUFBLENBQVEsT0FBQSxFQUFRLENBQ3ZCakIsQ0FBQUEsR0FDRGlDLEdBQVNDLHNCQUFBQSxDQUFjSCxDQUFBQSxDQUFPLEtBQUEsQ0FBTS9CLENBQUcsQ0FBQSxDQUNsQ2lDLENBQUFBLEVBQVNFLHdCQUFBQSxFQUFnQkosQ0FBQUEsQ0FBTyxLQUFLL0IsQ0FBRyxDQUFBLEVBQ25ELENBQUMsQ0FBQSxDQ3pKTSxTQUFTb0MsRUFDZEMsQ0FBQUEsQ0FDQTdELENBQUFBLENBQ2lELENBQ2pELE9BQU8sQ0FBQSxHQUFJOEQsQ0FBQUEsR0FBUyxDQUNsQixHQUFJLENBQ0YsSUFBTUMsQ0FBQUEsQ0FBTUYsQ0FBQUEsQ0FBRyxHQUFHQyxDQUFJLENBQUEsQ0FDdEIsT0FBSUMsQ0FBQUEsWUFBZSxRQUNWQSxDQUFBQSxDQUFJLEtBQUEsQ0FBTSxJQUFNL0QsQ0FBWSxDQUFBLENBRTlCK0QsQ0FDVCxDQUFBLEtBQVEsQ0FDTixPQUFPL0QsQ0FDVCxDQUNGLENBQ0YsQ0NaTyxJQUFNZ0UsRUFBQUEsQ0FBZSxpQkFBQSxDQUVyQixTQUFTQyxFQUFBQSxFQUFRLENBQ3RCLElBQU1DLENBQUFBLENBQU8sT0FBQSxDQUFRLElBQUEsQ0FDakJDLENBQUFBLENBQU9ELENBQUFBLENBQUssSUFBQSxDQUFNRSxDQUFBQSxFQUFRQSxFQUFJLFVBQUEsQ0FBV0osRUFBWSxDQUFDLENBQUEsQ0FDMUQsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE9BQUFaLENBQUFBLENBQU8sTUFBTSxVQUFBLENBQVlXLENBQUksQ0FBQSxDQUN0QixPQUFBLENBQVEsSUFBQSxDQUVqQixJQUFNSixDQUFBQSxDQUFPLENBQUMsT0FBUSxHQUFHSSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxFQUFFLENBQUMsQ0FBQSxDQUN2QyxPQUFBQyxDQUFBQSxDQUFPLE1BQUEsQ0FBTyxLQUFLQSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FBRSxDQUFDLENBQUEsQ0FBSSxRQUFRLENBQUEsQ0FBRSxVQUFTLENBQzNETCxDQUFBQSxDQUFLLElBQUEsQ0FBSyxHQUFHLElBQUEsQ0FBSyxLQUFBLENBQU1LLENBQUksQ0FBQyxFQUM3QlosQ0FBQUEsQ0FBTyxLQUFBLENBQU0sU0FBQSxDQUFXTyxDQUFJLENBQUEsQ0FDckJBLENBQ1QsQ0NkTyxJQUFNTyxFQUFBQSxDQUFnQixJQUFBLENBQ2hCQyxHQUFpQixJQUFBLENBQ2pCQyxFQUFBQSxDQUFjLEVBQUEsQ0FDZEMsRUFBQUEsQ0FBbUIsRUFDbkJDLEVBQUFBLENBQW1CLFlBQUEsQ0FFbkJDLEVBQUFBLENBQWVDLGtCQUFBQSxDQUFFLE1BQUEsQ0FBTyxDQUNuQyxRQUFBLENBQVVBLGtCQUFBQSxDQUFFLFFBQU8sQ0FBRSxRQUFBLENBQVMscUJBQXFCLENBQUEsQ0FDbkQsTUFBT0Esa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLGFBQWEsQ0FBQSxDQUN4QyxNQUFBLENBQVFBLGtCQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxjQUFjLENBQUEsQ0FDMUMsSUFBS0Esa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLG1CQUFtQixDQUFBLENBQzVDLFNBQUEsQ0FBV0Esa0JBQUFBLENBQUUsT0FBQSxHQUFVLFFBQUEsQ0FBUywwQkFBMEIsQ0FBQSxDQUMxRCxPQUFBLENBQVNBLGtCQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxzQkFBc0IsQ0FBQSxDQUNuRCxhQUFBLENBQWVBLGtCQUFBQSxDQUFFLE9BQUEsR0FBVSxRQUFBLENBQVMsOENBQThDLENBQUEsQ0FDbEYsYUFBQSxDQUFlQSxtQkFBRSxPQUFBLEVBQVEsQ0FBRSxRQUFBLENBQVMsdUNBQXVDLENBQzdFLENBQUMsQ0FBQSxDQVdZQyxFQUFBQSxDQUFzQyxDQUNqRCxLQUFBLENBQU9QLEVBQUFBLENBQ1AsTUFBQSxDQUFRQyxFQUFBQSxDQUNSLElBQUtDLEVBQUFBLENBQ0wsUUFBQSxDQUFVQyxFQUFBQSxDQUNWLE9BQUEsQ0FBU0MsR0FDVCxTQUFBLENBQVcsS0FBQSxDQUNYLGFBQUEsQ0FBZWpFLEVBQUFBLENBQ2YsYUFBQSxDQUFlQyxFQUNqQixDQUFBLENDekJBLGVBQXNCb0UsR0FBUUMsQ0FBQUEsQ0FBcUIsQ0FDakQsSUFBTUMsQ0FBQUEsQ0FBUUwsR0FBYSxLQUFBLENBQ3JCTSxDQUFBQSxDQUFJRixDQUFBQSxDQUFRLFFBQUEsQ0FDbEJHLGtCQUNHLElBQUEsQ0FBS0gsQ0FBQUEsQ0FBUSxJQUFJLENBQUEsQ0FDakIsUUFBQSxDQUFTLFVBQUEsQ0FBWSx1Q0FBa0MsQ0FBQSxDQUN2RCxPQUFPLHNCQUFBLENBQXdCQyxDQUFBQSxDQUFNLEtBQUEsQ0FBTSxXQUFBLENBQWEsR0FBR0MsQ0FBQUEsQ0FBRSxLQUFLLENBQUEsQ0FBRSxDQUFBLENBQ3BFLE9BQU8sdUJBQUEsQ0FBeUJELENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUUsRUFDdkUsTUFBQSxDQUFPLG9CQUFBLENBQXNCRCxDQUFBQSxDQUFNLEdBQUEsQ0FBSSxXQUFBLENBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLEdBQUcsRUFBRSxDQUFBLENBQzlELE1BQUEsQ0FBTyx5QkFBQSxDQUEyQkQsQ0FBQUEsQ0FBTSxRQUFBLENBQVMsV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxRQUFRLENBQUEsQ0FBRSxDQUFBLENBQzdFLE1BQUEsQ0FBTyx1QkFBQSxDQUF5QkQsRUFBTSxPQUFBLENBQVEsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLE9BQU8sRUFDcEUsTUFBQSxDQUFPLGtCQUFBLENBQW9CRCxDQUFBQSxDQUFNLFNBQUEsQ0FBVSxXQUFBLENBQWFDLENBQUFBLENBQUUsU0FBUyxDQUFBLENBQ25FLE9BQU8sbUJBQUEsQ0FBcUJELENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUMsRUFBRSxhQUFhLENBQUEsQ0FDNUUsTUFBQSxDQUFPLHFCQUFBLENBQXVCRCxFQUFNLGFBQUEsQ0FBYyxXQUFBLENBQWFDLENBQUFBLENBQUUsYUFBYSxDQUFBLENBQzlFLE1BQUEsQ0FBTyxNQUFPRSxDQUFBQSxDQUFnQkMsSUFBUyxDQUN0QyxHQUFJLENBQ0YsTUFBTUwsRUFBUSxHQUFBLENBQUlJLENBQUFBLENBQVEsQ0FDeEIsS0FBQSxDQUFPdEIsRUFBTTNELENBQUFBLENBQWErRSxDQUFBQSxDQUFFLEtBQUssQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLEtBQUssQ0FBQSxDQUM3QyxNQUFBLENBQVF2QixFQUFNM0QsQ0FBQUEsQ0FBYStFLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUVHLEVBQUssTUFBTSxDQUFBLENBQ2hELEdBQUEsQ0FBS3ZCLENBQUFBLENBQU0zRCxFQUFhK0UsQ0FBQUEsQ0FBRSxHQUFHLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDdkMsUUFBQSxDQUFVdkIsQ0FBQUEsQ0FBTTNELEVBQWErRSxDQUFBQSxDQUFFLFFBQVEsQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLFFBQVEsQ0FBQSxDQUN0RCxPQUFBLENBQVNBLENBQUFBLENBQUssT0FBQSxFQUFXSCxFQUFFLE9BQUEsQ0FDM0IsU0FBQSxDQUFXRyxDQUFBQSxDQUFLLFNBQUEsRUFBYUgsQ0FBQUEsQ0FBRSxTQUFBLENBQy9CLGFBQUEsQ0FBZUcsQ0FBQUEsQ0FBSyxlQUFpQkgsQ0FBQUEsQ0FBRSxhQUFBLENBQ3ZDLGFBQUEsQ0FBZUcsQ0FBQUEsQ0FBSyxlQUFpQkgsQ0FBQUEsQ0FBRSxhQUN6QyxDQUFDLEVBQ0gsT0FBU0ksQ0FBQUEsQ0FBRyxDQUNWN0IsQ0FBQUEsQ0FBTyxLQUFBLENBQU02QixDQUFDLEVBQ2hCLENBQ0YsQ0FBQyxFQUNILE1BQU1ILGlCQUFBQSxDQUFRLFVBQUEsQ0FBV2hCLEVBQUFBLEVBQU8sRUFDbEMsQ0N6Q0EsSUFBTW9CLEVBQUFBLENBQWMsQ0FBQSxDQWNiLElBQU1DLEVBQUFBLENBQU4sS0FBZ0IsQ0FDckIsV0FBQSxDQUE2QkMsQ0FBQUEsQ0FBaUIsQ0FBakIsSUFBQSxDQUFBLE9BQUEsQ0FBQUEsRUFBa0IsQ0FBbEIsT0FBQSxDQUU3QixjQUFjcEQsQ0FBQUEsQ0FBcUIsQ0FDakMsSUFBQSxDQUFLLEtBQUEsQ0FBTSxDQUFBLENBQXFCLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FBQSxFQUFHQSxDQUFLLENBQUEsQ0FBRSxDQUFDLEVBQ3pELENBRUEsV0FBV0ksQ0FBQUEsQ0FBZSxDQUN4QixJQUFBLENBQUssS0FBQSxDQUFNLEVBQWtCLE1BQUEsQ0FBTyxJQUFBLENBQUtBLENBQUssQ0FBQyxDQUFBLENBQy9DLElBQUEsQ0FBSyxPQUFBLENBQVEsR0FBQSxHQUNmLENBRUEsU0FBQSxDQUFVaUQsQ0FBQUEsQ0FBK0IsQ0FDdkMsS0FBSyxLQUFBLENBQU0sQ0FBQSxDQUFpQixNQUFBLENBQU8sSUFBQSxDQUFLLEtBQUssU0FBQSxDQUFVQSxDQUFPLENBQUMsQ0FBQyxDQUFBLENBQ2hFLElBQUEsQ0FBSyxPQUFBLENBQVEsR0FBQSxHQUNmLENBRVEsS0FBQSxDQUFNQyxDQUFBQSxDQUFrQkQsQ0FBQUEsQ0FBdUIsQ0FDckQsSUFBTUUsQ0FBQUEsQ0FBUyxNQUFBLENBQU8sS0FBQSxDQUFNTCxFQUFXLENBQUEsQ0FDdkNLLENBQUFBLENBQU8sYUFBQSxDQUFjRCxDQUFBQSxDQUFNLENBQUMsQ0FBQSxDQUM1QkMsQ0FBQUEsQ0FBTyxhQUFBLENBQWNGLEVBQVEsVUFBQSxDQUFZLENBQUMsQ0FBQSxDQUMxQyxJQUFBLENBQUssUUFBUSxLQUFBLENBQU1FLENBQU0sQ0FBQSxDQUN6QixJQUFBLENBQUssUUFBUSxLQUFBLENBQU1GLENBQU8sRUFDNUIsQ0FDRixDQUFBLENBRU8sU0FBU0csRUFBQUEsQ0FBV0MsQ0FBQUEsQ0FBd0MsQ0FDakUsT0FBTyxJQUFJLE9BQUEsQ0FBUSxDQUFDakQsRUFBU0MsQ0FBQUEsR0FBVyxDQUN0QyxJQUFNaUQsQ0FBQUEsQ0FBU0MscUJBQWlCRixDQUFVLENBQUEsQ0FDMUNDLENBQUFBLENBQU8sSUFBQSxDQUFLLFNBQUEsQ0FBVyxJQUFNbEQsQ0FBQUEsQ0FBUSxJQUFJMkMsR0FBVU8sQ0FBTSxDQUFDLENBQUMsQ0FBQSxDQUMzREEsRUFBTyxJQUFBLENBQUssT0FBQSxDQUFTakQsQ0FBTSxFQUM3QixDQUFDLENBQ0gsQ0M1Q08sU0FBU21ELEVBQUFBLENBQWVDLEVBQW1CQyxDQUFBQSxDQUFvQixDQUNwRSxHQUFNLENBQUUsTUFBQUMsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUFJRixFQUMxQixPQUFPLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQUEsRUFNaUJDLENBQUssQ0FBQSxZQUFBLEVBQWVDLENBQUFBLENBQVMsQ0FBQyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUFBLEVBS3pDRCxDQUFLLENBQUE7QUFBQSxjQUFBLEVBQ0pDLENBQU0sQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBLEVBTVRBLENBQU0sQ0FBQTtBQUFBO0FBQUEsYUFBQSxFQUVKRCxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBLEVBUVNGLENBQVMsQ0FBQTtBQUFBLDRCQUFBLEVBQ1JFLENBQUssQ0FBQTtBQUFBO0FBQUE7QUFBQSxvQkFBQSxFQUdiQSxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQSxDQXlEM0IsQ0FFTyxTQUFTRSxDQUFBQSxDQUFZQyxDQUFBQSxDQUFnQkosRUFBZ0MsQ0FDMUUsR0FBTSxDQUFFLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUFJRixFQUMxQixHQUFJQyxDQUFBQSxDQUFRLEVBQUEsRUFBMkJDLENBQUFBLENBQVMsQ0FBQSxDQUM5QyxPQUdGLElBQU1HLENBQUFBLENBQVlILEVBQVMsQ0FBQSxDQUV2QkksQ0FBQUEsQ0FBWSxDQUFBLENBQ2hCLElBQUEsSUFBU0MsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUksRUFBQSxDQUF5QkEsSUFBSyxDQUNoRCxJQUFNQyxDQUFBQSxDQUFBQSxDQUFZSCxDQUFBQSxDQUFZSixDQUFBQSxDQUFRTSxDQUFBQSxFQUFLLENBQUEsQ0FFckNFLENBQUFBLENBQUFBLENBRElMLEVBQU9JLENBQVEsQ0FBQSxFQUFLLENBQUEsRUFDZCxHQUFBLENBQU0sQ0FBQSxDQUFJLENBQUEsQ0FDMUJGLENBQUFBLENBQWFBLENBQUFBLEVBQWEsRUFBS0csRUFDakMsQ0FJQSxHQUZBSCxDQUFBQSxDQUFZQSxDQUFBQSxHQUFjLENBQUEsQ0FFdEIsRUFBQSxDQUFDLE1BQUEsQ0FBTyxTQUFTQSxDQUFTLENBQUEsRUFBS0EsQ0FBQUEsQ0FBWSxDQUFBLEVBQUtBLENBQUFBLENBQVksR0FBQSxDQUFBLENBSWhFLE9BQU9BLENBQ1QsQ0FFTyxTQUFTSSxDQUFBQSxDQUFXQyxDQUFBQSxDQUFlLENBQ3hDLE9BQU9BLENBQUFBLENBQUksV0FBQSxDQUFZLGtCQUFBLENBQW9CLENBQ3pDLFVBQUEsQ0FBWSw4QkFDZCxDQUFDLENBQ0gsQ0FFTyxTQUFTQyxDQUFBQSxDQUFVRCxDQUFBQSxDQUFlLENBQ3ZDLE9BQU9BLENBQUFBLENBQUksV0FBQSxDQUFZLGtCQUFBLENBQW9CLENBQ3pDLFVBQUEsQ0FBWSw2QkFDZCxDQUFDLENBQ0gsQ0NqSUEsSUFBTUUsRUFBQUEsQ0FBYSxLQUFBLENBR25CQyxpQkFBQUEsQ0FBUywyQkFBQSxDQUE0QixDQUNuQyxDQUNFLE9BQVFELEVBQUFBLENBQ1IsVUFBQSxDQUFZLENBQ1YsUUFBQSxDQUFVLElBQUEsQ0FDVixNQUFBLENBQVEsSUFBQSxDQUNSLFNBQUEsQ0FBVyxLQUNYLG1CQUFBLENBQXFCLElBQUEsQ0FDckIsZUFBQSxDQUFpQixJQUFBLENBQ2pCLFdBQUEsQ0FBYSxJQUFBLENBQ2IsTUFBQSxDQUFRLElBQUEsQ0FDUixVQUFXLElBQ2IsQ0FDRixDQUNGLENBQUMsQ0FBQSxDQUdNLFNBQVNFLEVBQUFBLEVBQXlCLENBQ3ZDRCxrQkFBUyxNQUFBLENBQU9ELEVBQUFBLENBQWFHLENBQUFBLEVBQVEsQ0FDbkMsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJLEdBQUEsQ0FBSUQsQ0FBQUEsQ0FBSSxHQUFHLENBQUEsQ0FDckJFLENBQUFBLENBQU1ELENBQUFBLENBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxLQUFLLENBQUEsRUFBSyxFQUFBLENBQ3JDaEIsRUFBUSxRQUFBLENBQVNnQixDQUFBQSxDQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksR0FBRyxDQUFBLEVBQUssR0FBQSxDQUFLLEVBQUUsRUFDckRmLENBQUFBLENBQVMsUUFBQSxDQUFTZSxDQUFBQSxDQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksR0FBRyxDQUFBLEVBQUssR0FBQSxDQUFLLEVBQUUsQ0FBQSxDQUN0REUsQ0FBQUEsQ0FBT3JCLEVBQUFBLENBQWVvQixDQUFBQSxDQUFLLENBQUUsS0FBQSxDQUFBakIsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQU8sQ0FBQyxDQUFBLENBQ2xELE9BQU8sSUFBSSxRQUFBLENBQVNpQixDQUFBQSxDQUFNLENBQUUsT0FBQSxDQUFTLENBQUUsY0FBQSxDQUFnQixXQUFZLENBQUUsQ0FBQyxDQUN4RSxDQUFDLEVBQ0gsQ0FFTyxTQUFTQyxFQUFBQSxDQUFlRixDQUFBQSxDQUFhbEIsQ0FBQUEsQ0FBb0IsQ0FDOUQsSUFBTWlCLENBQUFBLENBQU0sSUFBSSxHQUFBLENBQUksR0FBR0osRUFBVSxDQUFBLFFBQUEsQ0FBVSxDQUFBLENBQzNDLE9BQUFJLENBQUFBLENBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxLQUFBLENBQU9DLENBQUcsQ0FBQSxDQUMvQkQsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsR0FBQSxDQUFJLEdBQUEsQ0FBSyxNQUFBLENBQU9qQixDQUFBQSxDQUFLLEtBQUssQ0FBQyxDQUFBLENBQzVDaUIsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsR0FBQSxDQUFJLEdBQUEsQ0FBSyxNQUFBLENBQU9qQixDQUFBQSxDQUFLLE1BQU0sQ0FBQyxDQUFBLENBQ3RDaUIsQ0FBQUEsQ0FBSSxRQUFBLEVBQ2IsQ0N6Q08sSUFBTUksRUFBTixLQUF5QixDQUs5QixXQUFBLENBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixlQUpiLE9BQUEsQ0FBVSxDQUFBLENBQ1YsTUFBQSxDQUF5QixFQUFDLENBQzFCLE1BQUEsQ0FBUyxLQUFBLENBSWpCLElBQUksUUFBaUIsQ0FDbkIsT0FBTyxJQUFBLENBQUssT0FDZCxDQUVBLElBQUksT0FBQSxFQUFrQixDQUNwQixPQUFPLEtBQUssTUFBQSxDQUFPLE1BQ3JCLENBRUEsSUFBSSxLQUFBLEVBQWdCLENBQ2xCLE9BQU8sQ0FBQSxRQUFBLEVBQVcsS0FBSyxNQUFNLENBQUEsV0FBQSxFQUFjLElBQUEsQ0FBSyxPQUFPLENBQUEsQ0FDekQsQ0FFQSxNQUFNLFFBQUEsQ0FBWTFELEVBQWtDLENBQ2xELEdBQUksSUFBQSxDQUFLLE1BQUEsQ0FDUCxNQUFNLElBQUksS0FBQSxDQUFNLE9BQU8sRUFFekIsT0FBTyxJQUFJLE9BQUEsQ0FBVyxDQUFDbEIsQ0FBQUEsQ0FBU0MsQ0FBQUEsR0FBVyxDQUN6QyxJQUFNNEUsRUFBTSxJQUFNLENBQ2hCLElBQUEsQ0FBSyxPQUFBLEVBQUEsQ0FDTDNELENBQUFBLEVBQUcsQ0FDQSxJQUFBLENBQU00RCxDQUFBQSxFQUFNLENBQ1gsSUFBQSxDQUFLLE9BQUEsRUFBQSxDQUNMOUUsQ0FBQUEsQ0FBUThFLENBQUMsQ0FBQSxDQUNULElBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FBQyxDQUFBLENBQ0EsS0FBQSxDQUFPckMsQ0FBQUEsRUFBTSxDQUNaLElBQUEsQ0FBSyxPQUFBLEVBQUEsQ0FDTHhDLENBQUFBLENBQU93QyxDQUFDLEVBQ1IsSUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLEVBQ0wsQ0FBQSxDQUNBLElBQUEsQ0FBSyxNQUFBLENBQU8sS0FBS29DLENBQUcsQ0FBQSxDQUNwQixJQUFBLENBQUssSUFBQSxHQUNQLENBQUMsQ0FDSCxDQUVBLE1BQU0sR0FBQSxFQUFNLENBQ1YsR0FBSSxDQUFBLElBQUEsQ0FBSyxNQUFBLENBSVQsSUFEQSxJQUFBLENBQUssTUFBQSxDQUFTLEtBQ1AsSUFBQSxDQUFLLE9BQUEsQ0FBVSxDQUFBLEVBQUssSUFBQSxDQUFLLE9BQUEsQ0FBVSxDQUFBLEVBQ3hDLE1BQU0sSUFBSSxRQUFTRSxDQUFBQSxFQUFNLFVBQUEsQ0FBV0EsQ0FBQUEsQ0FBRyxFQUFFLENBQUMsRUFFOUMsQ0FFUSxJQUFBLEVBQU8sQ0FDVCxJQUFBLENBQUssT0FBQSxDQUFVLElBQUEsQ0FBSyxjQUFBLEVBQ3RCLElBQUEsQ0FBSyxNQUFBLENBQU8sS0FBQSxFQUFNLEtBRXRCLENBQ0YsQ0FBQSxDQzlDQSxJQUFNQyxFQUFBQSxDQUFtRCxDQUFFLENBQUNDLDJCQUFpQixFQUFHLEtBQUEsQ0FBTyxDQUFDQyw0QkFBa0IsRUFBRyxNQUFPLENBQUEsQ0FZdkdDLEVBQUFBLENBQU4sTUFBTUMsQ0FBbUMsQ0FDdEMsSUFBQSxDQUNBLE9BQUEsQ0FDQSxLQUNBLFFBQUEsQ0FDQSxPQUFBLENBQ0EsVUFBQSxDQUNBLFlBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxDQUNBLFFBQUEsQ0FDQSxPQUFBLENBQ0EsS0FBTyxFQUFBLENBRVAsV0FBQSxDQUFZQyxDQUFBQSxDQUFtQkMsQ0FBQUEsQ0FBZ0JDLENBQUFBLENBQThELENBQ25ILElBQUEsQ0FBSyxJQUFBLENBQU9GLEVBQ1osSUFBQSxDQUFLLE9BQUEsQ0FBVUMsQ0FBQUEsQ0FDZixJQUFBLENBQUssUUFBQSxDQUFXRCxDQUFBQSxDQUFJLFVBQUEsQ0FDcEIsSUFBQSxDQUFLLFFBQVVFLENBQUFBLENBQ2YsSUFBQSxDQUFLLFVBQUEsQ0FBYUYsQ0FBQUEsQ0FBSSxTQUFBLENBQ3RCLElBQUEsQ0FBSyxJQUFBLENBQU8sSUFBSUcsY0FDaEIsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFBLEVBQU0sQ0FDaEIsSUFBQSxDQUFLLFlBQUEsQ0FBZSxJQUFJQyxZQUFBQSxDQUN4QixLQUFLLFlBQUEsQ0FBYSxLQUFBLEdBQ3BCLENBRUEsYUFBYSxNQUFBLENBQU9qRCxDQUFBQSxDQUFrRCxDQUNwRSxJQUFNa0QsQ0FBQUEsQ0FBUUMsWUFBQUEsQ0FBTSxpQkFBQSxDQUFrQm5ELENBQUFBLENBQUssU0FBUyxDQUFBLENBQ3BELEdBQUksQ0FBQ2tELEVBQU8sTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLHlCQUFBLEVBQTRCbEQsQ0FBQUEsQ0FBSyxTQUFTLENBQUEsQ0FBRSxDQUFBLENBQ3hFLElBQU02QyxDQUFBQSxDQUFNLElBQUlPLG1CQUFBQSxDQUNoQlAsQ0FBQUEsQ0FBSSxhQUFBLENBQWNLLENBQUssQ0FBQSxDQUN2QkwsQ0FBQUEsQ0FBSSxRQUFVSyxDQUFBQSxDQUFNLEVBQUEsQ0FDcEJMLENBQUFBLENBQUksWUFBQSxDQUFlN0MsQ0FBQUEsQ0FBSyxZQUFBLENBQ3hCNkMsQ0FBQUEsQ0FBSSxVQUFBLENBQWE3QyxFQUFLLGFBQUEsQ0FDdEI2QyxDQUFBQSxDQUFJLGFBQUEsQ0FBZ0JRLGtDQUFBQSxDQUNwQlIsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsSUFBSVMsZUFBQUEsQ0FBUyxFQUFHdEQsQ0FBQUEsQ0FBSyxhQUFhLENBQUEsQ0FDakQ2QyxDQUFBQSxDQUFJLE9BQUEsQ0FBVSxNQUFBLENBQU83QyxDQUFBQSxDQUFLLE9BQU8sRUFDN0JBLENBQUFBLENBQUssWUFBQSxFQUFjNkMsQ0FBQUEsQ0FBSSxRQUFBLENBQVNVLHFDQUEyQixDQUFBLENBQy9EQyxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTVgsRUFBSSxLQUFBLENBQU1LLENBQUFBLENBQU8sSUFBSSxDQUFBLENBQUcsZ0JBQWdCLENBQUEsQ0FDdkUsSUFBTUosQ0FBQUEsQ0FBUzlDLEVBQUssS0FBQSxDQUFNLFNBQUEsQ0FBVTZDLENBQUcsQ0FBQSxDQUN2QyxPQUFPLElBQUlELENBQUFBLENBQWFDLENBQUFBLENBQUtDLEVBQVE5QyxDQUFBQSxDQUFLLFlBQVksQ0FDeEQsQ0FFQSxZQUFBLENBQWF5RCxDQUFBQSxDQUE0QixDQUN2QyxJQUFBLENBQUssU0FBUyxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDOUIsSUFBQSxDQUFLLE9BQUEsQ0FBVUEsQ0FBQUEsQ0FDZixJQUFNQyxFQUFRLElBQUlDLGtCQUFBQSxDQUNsQkQsQ0FBQUEsQ0FBTSxLQUFBLEVBQU0sQ0FDWixJQUFNRSxDQUFBQSxDQUFVQyxhQUFBQSxDQUFPLFVBQVUsU0FBUyxDQUFBLENBQ3BDQyxDQUFBQSxDQUFTSixDQUFBQSxDQUFNLFlBQUEsQ0FDbkJFLENBQUFBLENBQ0EsS0FBQSxDQUNBLENBQUEsWUFBQSxFQUFlSCxDQUFZLENBQUEsa0RBQUEsRUFBcURBLENBQVksQ0FBQSxDQUM5RixDQUFBLENBQ0EsR0FBSSxDQUFDSyxDQUFBQSxDQUFRLE1BQU0sSUFBSSxLQUFBLENBQU0sMEJBQTBCLENBQUEsQ0FDdkQsSUFBTUMsQ0FBQUEsQ0FBY0YsYUFBQUEsQ0FBTyxTQUFBLENBQVUsYUFBYSxFQUM1Q0csQ0FBQUEsQ0FBVU4sQ0FBQUEsQ0FBTSxZQUFBLENBQWFLLENBQUFBLENBQWEsTUFBTSxDQUFBLENBQ3RELEdBQUksQ0FBQ0MsRUFBUyxNQUFNLElBQUksS0FBQSxDQUFNLDhCQUE4QixDQUFBLENBRTVELElBQU1DLENBQUFBLENBQWEsQ0FBQSxvQkFBQSxFQURIekIsR0FBZ0IsSUFBQSxDQUFLLE9BQU8sQ0FBQSxFQUFLLEtBQ0EsQ0FBQSxjQUFBLEVBQWlCLElBQUEsQ0FBSyxRQUFRLENBQUEsdUNBQUEsRUFBMEMsS0FBSyxVQUFVLENBQUEsSUFBQSxDQUFBLENBQ2xJMEIsQ0FBQUEsQ0FBVUMsa0JBQUFBLENBQVksVUFBQSxDQUFXLENBQUMsQ0FBRSxJQUFBLENBQU0sS0FBTSxTQUFBLENBQVdMLENBQUFBLENBQVEsTUFBQSxDQUFRLENBQUUsQ0FBQyxDQUFDLENBQUEsQ0FDL0VNLENBQUFBLENBQVNELG1CQUFZLFVBQUEsQ0FBVyxDQUFDLENBQUUsSUFBQSxDQUFNLEtBQUEsQ0FBTyxTQUFBLENBQVdILENBQUFBLENBQVMsTUFBQSxDQUFRLENBQUUsQ0FBQyxDQUFDLENBQUEsQ0FDdEZSLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYUUsQ0FBQUEsQ0FBTSxRQUFBLENBQVNPLENBQUFBLENBQVlHLEVBQVFGLENBQU8sQ0FBQSxDQUFHLGdCQUFnQixDQUFBLENBQ3RGVixtQkFBWSxZQUFBLENBQWFFLENBQUFBLENBQU0sVUFBQSxFQUFXLENBQUcsY0FBYyxDQUFBLENBQzNELElBQUEsQ0FBSyxNQUFBLENBQVNBLENBQUFBLENBQ2QsSUFBQSxDQUFLLE9BQUEsQ0FBVUksQ0FBQUEsQ0FDZixJQUFBLENBQUssU0FBV0UsRUFDbEIsQ0FFQSxNQUFNLE1BQUEsQ0FBT0ssQ0FBQUEsQ0FBYUMsQ0FBQUEsQ0FBbUMsQ0FLM0QsSUFBQUMsRUFBQSxFQUFBLENBQUEsR0FBQSxDQUpBLEdBQUksQ0FBQyxJQUFBLENBQUssT0FBQSxFQUFXLENBQUMsSUFBQSxDQUFLLE9BQUEsQ0FBUyxPQUNwQyxJQUFNdkMsQ0FBQUEsQ0FBTSxJQUFJLFlBQUEsQ0FBYXFDLENBQUFBLENBQUksTUFBQSxDQUFRQSxDQUFBQSxDQUFJLFVBQUEsQ0FBWUEsRUFBSSxVQUFBLENBQWEsQ0FBQyxDQUFBLENBQzNFLElBQUEsSUFBU2hELENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJVyxDQUFBQSxDQUFJLE9BQVFYLENBQUFBLEVBQUFBLENBQVUsUUFBQSxDQUFTVyxDQUFBQSxDQUFJWCxDQUFDLENBQUUsQ0FBQSxHQUFHVyxDQUFBQSxDQUFJWCxDQUFDLEVBQUksQ0FBQSxDQUFBLENBQ3RFLElBQU1tRCxDQUFBQSxDQUFXeEMsQ0FBQUEsQ0FBSSxNQUFBLEVBQVUsQ0FBQSxDQUMvQixJQUFNeUMsQ0FBQUEsQ0FBUUMsRUFBQUgsQ0FBQUEsQ0FBQXRCLFlBQUFBLENBQU0sZUFBQSxDQUFnQixNQUFBLENBQU8sSUFBQSxDQUFLakIsQ0FBQUEsQ0FBSSxNQUFBLENBQVFBLENBQUFBLENBQUksV0FBWUEsQ0FBQUEsQ0FBSSxVQUFVLENBQUEsQ0FBRyxDQUMzRixTQUFBLENBQVd3QyxDQUFBQSxDQUNYLE1BQUEsQ0FBUS9CLDJCQUFBQSxDQUNSLFdBQVksSUFBQSxDQUFLLE9BQUEsQ0FDakIsYUFBQSxDQUFlWSxrQ0FBQUEsQ0FDZixHQUFBLENBQUssSUFBQSxDQUFLLElBQUEsQ0FDVixRQUFBLENBQVUsQ0FBRSxHQUFBLENBQUssQ0FBQSxDQUFHLEdBQUEsQ0FBSyxJQUFBLENBQUssT0FBUSxDQUN4QyxDQUFDLENBQUEsQ0FBQSxDQUNELEtBQUssSUFBQSxFQUFRLE1BQUEsQ0FBT21CLENBQVEsQ0FBQSxDQUM1QmhCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNLElBQUEsQ0FBSyxRQUFRLGlCQUFBLENBQWtCaUIsQ0FBSyxDQUFBLENBQUcsbUJBQW1CLENBQUEsQ0FDekYsTUFBTSxJQUFBLENBQUssS0FBQSxDQUFNSCxDQUFLLEVBQUEsQ0FBQSxNQVZ0QkssQ0FBQUEsQ0FBQSxDQUFBLElBQUFDLENBQUFBLENBQUFELENBQUFBLENBQUFFLENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVAsRUFBQUssQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0FXRixDQUVBLE1BQU0sS0FBQSxDQUFNUCxDQUFBQSxDQUFtQyxDQUN6QyxJQUFBLENBQUssVUFDUCxNQUFNLElBQUEsQ0FBSyxPQUFBLENBQVEsaUJBQUEsQ0FBa0IsSUFBSSxDQUFBLENBQ3pDLE1BQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUEsQ0FBSyxDQUFBLENBQUEsQ0FFeEIsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDOUIsTUFBTSxLQUFLLFVBQUEsQ0FBV0EsQ0FBSyxFQUM3QixDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxFQUFLLENBQ2YsSUFBQSxDQUFLLFlBQUEsQ0FBYSxJQUFBLEVBQUssQ0FDdkIsS0FBSyxNQUFBLEdBQVMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQzlCLElBQUEsQ0FBSyxJQUFBLENBQUssV0FBQSxHQUNaLENBRUEsTUFBYyxLQUFBLENBQU1BLENBQUFBLENBQW1DLENBQ3JELE9BQWEsQ0FDWCxJQUFNL0IsRUFBSSxNQUFNLElBQUEsQ0FBSyxRQUFBLENBQVUsa0JBQUEsQ0FBbUIsSUFBQSxDQUFLLFlBQVksQ0FBQSxDQUNuRSxHQUFJQSxJQUFNd0Msd0JBQUFBLEVBQWtCeEMsQ0FBQUEsR0FBTXlDLHFCQUFBQSxDQUFhLE1BQy9DeEIsa0JBQUFBLENBQVksWUFBQSxDQUFhakIsQ0FBQUEsQ0FBRyxvQkFBb0IsRUFDaERpQixrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssWUFBWSxFQUFHLG9CQUFvQixDQUFBLENBQzNGLElBQUEsQ0FBSyxZQUFBLENBQWEsS0FBQSxFQUFNLENBQ3hCLE1BQU0sSUFBQSxDQUFLLFdBQVdjLENBQUssRUFDN0IsQ0FDRixDQUVBLE1BQWMsVUFBQSxDQUFXQSxDQUFBQSxDQUFtQyxDQUMxRCxPQUFhLENBQ1gsSUFBTS9CLENBQUFBLENBQUksTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLGFBQUEsQ0FBYyxJQUFBLENBQUssSUFBSSxDQUFBLENBQ2pELEdBQUlBLENBQUFBLEdBQU13Qyx3QkFBQUEsRUFBa0J4QyxDQUFBQSxHQUFNeUMscUJBQUFBLENBQWEsTUFDL0N4QixrQkFBQUEsQ0FBWSxhQUFhakIsQ0FBQUEsQ0FBRyxxQkFBcUIsQ0FBQSxDQUNqRCxJQUFBLENBQUssSUFBQSxDQUFLLFdBQUEsQ0FBYyxJQUFBLENBQUssT0FBQSxDQUFRLE1BQ3JDLElBQUEsQ0FBSyxJQUFBLENBQUssU0FBQSxDQUFVLElBQUEsQ0FBSyxJQUFBLENBQUssUUFBQSxDQUFVLElBQUEsQ0FBSyxPQUFBLENBQVEsUUFBUSxDQUFBLENBQzdELE1BQU0rQixDQUFBQSxDQUFNLFdBQUEsQ0FBWSxJQUFBLENBQUssSUFBSSxDQUFBLENBQ2pDLElBQUEsQ0FBSyxLQUFLLEtBQUEsR0FDWixDQUNGLENBQ0YsRUN0SUEsU0FBU1csRUFBQUEsQ0FBVWxFLENBQUFBLENBQWVDLENBQUFBLENBQWdCa0UsQ0FBQUEsQ0FBOEIsQ0FDOUUsSUFBTVQsQ0FBQUEsQ0FBUSxJQUFJeEIsWUFBQUEsQ0FDbEIsT0FBQXdCLENBQUFBLENBQU0sS0FBQSxFQUFNLENBQ1pBLEVBQU0sTUFBQSxDQUFTUyxDQUFBQSxDQUNmVCxDQUFBQSxDQUFNLEtBQUEsQ0FBUTFELENBQUFBLENBQ2QwRCxDQUFBQSxDQUFNLE1BQUEsQ0FBU3pELENBQUFBLENBQ2Z3QyxtQkFBWSxZQUFBLENBQWFpQixDQUFBQSxDQUFNLFNBQUEsQ0FBVSxDQUFDLENBQUEsQ0FBRyxpQkFBaUIsQ0FBQSxDQUN2REEsQ0FDVCxDQUVBLFNBQVNVLEVBQUFBLENBQWVwRSxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQmtFLENBQUFBLENBQXVCLENBQzVFLElBQU1FLENBQUFBLENBQU0sSUFBSUMsMkJBQUFBLENBQ2hCLE9BQUFELENBQUFBLENBQUksVUFBQSxDQUFXckUsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBUWtFLENBQUFBLENBQVFuRSxDQUFBQSxDQUFPQyxFQUFRc0UsMEJBQUFBLENBQXFCQyxtQkFBWSxDQUFBLENBQy9FSCxDQUNULENBRU8sSUFBTUksRUFBQUEsQ0FBTixNQUFNQyxDQUFpQyxDQUNuQyxHQUFBLENBQ0EsR0FBQSxDQUNBLEdBQUEsQ0FDRCxJQUFBLENBQ0EsSUFBQSxDQUVSLGFBQWEsTUFBQSxDQUFPMUUsRUFBZUMsQ0FBQUEsQ0FBZ0IsQ0FDakQsSUFBTWtDLENBQUFBLENBQVFDLFlBQUFBLENBQU0saUJBQUEsQ0FBa0J1QyxxQkFBYyxDQUFBLENBQ3BELE9BQUFDLFNBQUFBLENBQUd6QyxDQUFBQSxDQUFPLHlCQUF5QixDQUFBLENBQzVCLElBQUl1QyxDQUFBQSxDQUFXMUUsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBUWtDLENBQUssQ0FDNUMsQ0FFUSxXQUFBLENBQVluQyxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQjRFLENBQUFBLENBQVksQ0FDN0QsSUFBQSxDQUFLLEtBQU9BLENBQUFBLENBQ1osSUFBQSxDQUFLLEdBQUEsQ0FBTVgsRUFBQUEsQ0FBVWxFLENBQUFBLENBQU9DLENBQUFBLENBQVE2RSxzQkFBZSxDQUFBLENBQ25ELEtBQUssR0FBQSxDQUFNWixFQUFBQSxDQUFVbEUsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBUXNFLDBCQUFtQixDQUFBLENBQ3ZELElBQUEsQ0FBSyxHQUFBLENBQU0sSUFBSXRDLGFBQUFBLENBQ2YsSUFBQSxDQUFLLEdBQUEsQ0FBSSxLQUFBLEdBQ1gsQ0FPQSxNQUFNLEdBQUEsRUFBNkIsQ0FDakMsSUFBTTRDLENBQUFBLENBQU0sSUFBSXhDLG1CQUFBQSxDQUNoQixPQUFBd0MsQ0FBQUEsQ0FBSSxhQUFBLENBQWMsSUFBQSxDQUFLLElBQUksRUFDM0JwQyxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTW9DLENBQUFBLENBQUksS0FBQSxDQUFNLElBQUEsQ0FBSyxJQUFJLENBQUEsQ0FBRyxrQkFBa0IsQ0FBQSxDQUNoRUEsQ0FDVCxDQUVBLElBQUksR0FBQSxFQUFNLENBQ1IsT0FBSyxJQUFBLENBQUssT0FDUixJQUFBLENBQUssSUFBQSxDQUFPVCxFQUFBQSxDQUFlLElBQUEsQ0FBSyxHQUFBLENBQUksS0FBQSxDQUFPLElBQUEsQ0FBSyxHQUFBLENBQUksT0FBUSxJQUFBLENBQUssR0FBQSxDQUFJLE1BQXVCLENBQUEsQ0FBQSxDQUV2RixJQUFBLENBQUssSUFDZCxDQUVBLENBQUMsT0FBTyxPQUFPLENBQUEsRUFBVSxDQUN2QixJQUFBLENBQUssR0FBQSxDQUFJLE1BQUEsQ0FBTyxPQUFPLENBQUEsR0FDdkIsSUFBQSxDQUFLLEdBQUEsQ0FBSSxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUUsQ0FDekIsSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLElBQUEsQ0FBSyxJQUFBLEdBQU8sTUFBQSxDQUFPLE9BQU8sQ0FBQSxHQUM1QixDQUNGLENBQUEsQ0MzRU8sSUFBTVcsRUFBQUEsQ0FBTixLQUFrQixDQUNOLElBQUEsQ0FDVCxPQUFBLENBQVUsS0FBQSxDQUVsQixXQUFBLENBQVlDLENBQUFBLENBQWlCQyxFQUFxQixDQUNoRCxJQUFBLENBQUssSUFBQSxDQUFPLElBQUlDLG9CQUFBQSxDQUNoQnpDLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxJQUFBLENBQUssS0FBSyxtQkFBQSxDQUFvQixJQUFBLENBQU13QyxDQUFBQSxFQUFjLElBQUEsQ0FBTUQsQ0FBTyxDQUFBLENBQUcscUJBQXFCLEVBQ2xILENBRUEsU0FBQSxDQUFVRyxDQUFBQSxDQUF3QkMsQ0FBQUEsQ0FBMkQsQ0FDM0YsSUFBTXJELENBQUFBLENBQVMsSUFBQSxDQUFLLElBQUEsQ0FBSyxVQUFVLElBQUksQ0FBQSxDQUN2QyxPQUFBQSxDQUFBQSxDQUFPLFFBQUEsQ0FBV29ELENBQUFBLENBQVMsUUFBQSxDQUMzQjFDLGtCQUFBQSxDQUFZLGFBQWFWLENBQUFBLENBQU8sUUFBQSxDQUFTLFdBQUEsQ0FBWW9ELENBQVEsQ0FBQSxDQUFHLHNCQUFzQixDQUFBLENBQ2xGQyxDQUFBQSxHQUFVckQsRUFBTyxRQUFBLENBQVMsUUFBQSxDQUFXcUQsQ0FBQUEsQ0FBQUEsQ0FDbENyRCxDQUNULENBRUEsTUFBTSxJQUFBLEVBQXNCLENBQ3RCLElBQUEsQ0FBSyxVQUNUVSxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFVBQUEsRUFBVyxDQUFHLFlBQVksRUFDbkVBLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssV0FBQSxDQUFZLElBQUksQ0FBQSxDQUFHLGFBQWEsQ0FBQSxDQUN6RSxJQUFBLENBQUssT0FBQSxDQUFVLElBQUEsRUFDakIsQ0FFQSxNQUFNLFdBQUEsQ0FBWTRDLENBQUFBLENBQTRCLENBQzVDNUMsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxxQkFBQSxDQUFzQjRDLENBQUcsQ0FBQSxDQUFHLHVCQUF1QixFQUM5RixDQUVBLE1BQU8sTUFBQSxDQUFPLFlBQVksQ0FBQSxFQUFtQixDQUN0QyxJQUFBLENBQUssVUFDVixNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssWUFBQSxFQUFhLENBQzdCLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxhQUFZLENBQzVCLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxNQUFBLENBQU8sWUFBWSxDQUFBLEVBQUUsQ0FDckMsS0FBSyxPQUFBLENBQVUsS0FBQSxFQUNqQixDQUNGLENBQUEsQ0NaTyxJQUFNQyxFQUFBQSxDQUFOLE1BQU1DLENBQW1DLENBQzdCLElBQUEsQ0FDQSxJQUFBLENBQ0EsT0FBQSxDQUNULElBQUEsQ0FBTyxFQUFBLENBRVAsV0FBQSxDQUFZekQsRUFBbUJ1RCxDQUFBQSxDQUFhdEQsQ0FBQUEsQ0FBZ0IsQ0FDbEUsSUFBQSxDQUFLLElBQUEsQ0FBT0QsQ0FBQUEsQ0FDWixJQUFBLENBQUssSUFBQSxDQUFPdUQsRUFDWixJQUFBLENBQUssT0FBQSxDQUFVdEQsRUFDakIsQ0FFQSxhQUFhLE1BQUEsQ0FBTzlDLENBQUFBLENBQWtELENBQ3BFLEdBQU0sQ0FBRSxLQUFBLENBQUFlLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQXVGLENBQUFBLENBQUssU0FBQSxDQUFBQyxFQUFXLFFBQUEsQ0FBQUwsQ0FBQUEsQ0FBVSxZQUFBLENBQUFNLENBQUFBLENBQWMsU0FBQSxDQUFBQyxDQUFBQSxDQUFXLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBUyxNQUFBckMsQ0FBTSxDQUFBLENBQUl0RSxDQUFBQSxDQUV2RmtELENBQUFBLENBQVFDLGFBQU0saUJBQUEsQ0FBa0JxRCxDQUFTLENBQUEsQ0FDL0MsR0FBSSxDQUFDdEQsQ0FBQUEsQ0FBTyxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEseUJBQUEsRUFBNEJzRCxDQUFTLENBQUEsQ0FBRSxDQUFBLENBRW5FLElBQU0zRCxDQUFBQSxDQUFNLElBQUlPLG1CQUFBQSxDQUNoQlAsQ0FBQUEsQ0FBSSxhQUFBLENBQWNLLENBQUssQ0FBQSxDQUN2QkwsQ0FBQUEsQ0FBSSxRQUFVSyxDQUFBQSxDQUFNLEVBQUEsQ0FDcEJMLENBQUFBLENBQUksS0FBQSxDQUFROUIsQ0FBQUEsQ0FDWjhCLENBQUFBLENBQUksTUFBQSxDQUFTN0IsQ0FBQUEsQ0FDYjZCLEVBQUksV0FBQSxDQUFjN0MsQ0FBQUEsQ0FBSyxXQUFBLENBQ3ZCNkMsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsSUFBSVMsZUFBQUEsQ0FBUyxDQUFBLENBQUdpRCxDQUFHLENBQUEsQ0FDbEMxRCxDQUFBQSxDQUFJLFNBQUEsQ0FBWSxJQUFJUyxlQUFBQSxDQUFTaUQsQ0FBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDbkMxRCxFQUFJLE9BQUEsQ0FBVTBELENBQUFBLENBQU0sQ0FBQSxDQUNwQjFELENBQUFBLENBQUksT0FBQSxDQUFVLE1BQUEsQ0FBTzhELENBQU8sQ0FBQSxDQUN4QkYsR0FBYzVELENBQUFBLENBQUksUUFBQSxDQUFTVSxxQ0FBMkIsQ0FBQSxDQUMxRCxJQUFBLEdBQVcsQ0FBQ3FELENBQUFBLENBQUcsQ0FBQyxJQUFLLE1BQUEsQ0FBTyxPQUFBLENBQVFGLENBQVMsQ0FBQSxDQUFHN0QsQ0FBQUEsQ0FBSSxTQUFBLENBQVUrRCxDQUFBQSxDQUFHLENBQUMsRUFDOURULENBQUFBLEdBQVV0RCxDQUFBQSxDQUFJLFFBQUEsQ0FBV3NELENBQUFBLENBQUFBLENBQzdCM0Msa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1YLENBQUFBLENBQUksTUFBTUssQ0FBQUEsQ0FBTyxJQUFJLENBQUEsQ0FBRyxnQkFBZ0IsQ0FBQSxDQUV2RSxJQUFNa0QsQ0FBQUEsQ0FBTSxJQUFJcEQsY0FDaEJvRCxDQUFBQSxDQUFJLEtBQUEsRUFBTSxDQUVWLElBQU10RCxDQUFBQSxDQUFTd0IsQ0FBQUEsQ0FBTSxTQUFBLENBQVV6QixDQUFBQSxDQUFLc0QsQ0FBUSxDQUFBLENBQzVDLE9BQU8sSUFBSUcsQ0FBQUEsQ0FBYXpELENBQUFBLENBQUt1RCxDQUFBQSxDQUFLdEQsQ0FBTSxDQUMxQyxDQUVBLE1BQU0sTUFBQSxDQUFPMkIsQ0FBQUEsQ0FBY0gsQ0FBQUEsQ0FBbUMsQ0FDNURHLENBQUFBLENBQU0sR0FBQSxDQUFNLElBQUEsQ0FBSyxPQUNqQkEsQ0FBQUEsQ0FBTSxRQUFBLENBQVcsRUFBQSxDQUNqQmpCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssVUFBVWlCLENBQUssQ0FBQSxDQUFHLG9CQUFvQixDQUFBLENBQy9FLE1BQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUgsQ0FBSyxFQUN4QixDQUVBLE1BQU0sS0FBQSxDQUFNQSxDQUFBQSxDQUFtQyxDQUM3QyxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssU0FBQSxDQUFVLElBQUksQ0FBQSxDQUM5QixNQUFNLElBQUEsQ0FBSyxLQUFBLENBQU1BLENBQUssRUFDeEIsQ0FFQSxDQUFDLE9BQU8sT0FBTyxDQUFBLEVBQVUsQ0FDdkIsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLEVBQUssQ0FDZixJQUFBLENBQUssS0FBSyxXQUFBLEdBQ1osQ0FFQSxNQUFjLEtBQUEsQ0FBTUEsQ0FBQUEsQ0FBbUMsQ0FDckQsSUFBTThCLEVBQU0sSUFBQSxDQUFLLElBQUEsQ0FDakIsT0FBYSxDQUNYLElBQU03RCxDQUFBQSxDQUFJLE1BQU0sSUFBQSxDQUFLLEtBQUssYUFBQSxDQUFjNkQsQ0FBRyxDQUFBLENBQzNDLEdBQUk3RCxDQUFBQSxHQUFNd0Msd0JBQUFBLEVBQWtCeEMsQ0FBQUEsR0FBTXlDLHFCQUFBQSxDQUFhLE1BQy9DeEIsa0JBQUFBLENBQVksWUFBQSxDQUFhakIsQ0FBQUEsQ0FBRyxxQkFBcUIsQ0FBQSxDQUNqRDZELENBQUFBLENBQUksV0FBQSxDQUFjLElBQUEsQ0FBSyxRQUFRLEtBQUEsQ0FDM0JBLENBQUFBLENBQUksUUFBQSxHQUFhLEVBQUEsR0FBSUEsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsRUFBQSxDQUFBLENBQ3hDQSxDQUFBQSxDQUFJLFVBQVUsSUFBQSxDQUFLLElBQUEsQ0FBSyxRQUFBLENBQVUsSUFBQSxDQUFLLE9BQUEsQ0FBUSxRQUFRLENBQUEsQ0FDdkQsTUFBTTlCLEVBQU0sV0FBQSxDQUFZOEIsQ0FBRyxDQUFBLENBQzNCQSxDQUFBQSxDQUFJLEtBQUEsR0FDTixDQUNGLENBQ0YsRUM3RU8sSUFBTVMsQ0FBQUEsQ0FBTixNQUFNQyxDQUFnQixDQUduQixXQUFBLENBQ0VDLENBQUFBLENBQ0FDLENBQUFBLENBQ0FDLEVBQ0FDLENBQUFBLENBQ0FDLENBQUFBLENBQ0FDLENBQUFBLENBQ1IsQ0FOUSxJQUFBLENBQUEsTUFBQSxDQUFBTCxDQUFBQSxDQUNBLElBQUEsQ0FBQSxNQUFBLENBQUFDLENBQUFBLENBQ0EsWUFBQUMsQ0FBQUEsQ0FDQSxJQUFBLENBQUEsUUFBQSxDQUFBQyxDQUFBQSxDQUNBLElBQUEsQ0FBQSxRQUFBLENBQUFDLENBQUFBLENBQ0EsSUFBQSxDQUFBLE1BQUEsQ0FBQUMsRUFDUCxDQU5PLE9BQ0EsTUFBQSxDQUNBLE1BQUEsQ0FDQSxRQUFBLENBQ0EsUUFBQSxDQUNBLE1BQUEsQ0FSRixTQUFBLENBQVksS0FBQSxDQVdwQixhQUFhLE9BQU9wSCxDQUFBQSxDQUF3RCxDQUMxRSxHQUFNLENBQUUsS0FBQSxDQUFBZSxDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxJQUFBdUYsQ0FBQUEsQ0FBSyxPQUFBLENBQUFjLENBQUFBLENBQVMsU0FBQSxDQUFBQyxDQUFBQSxDQUFZLEtBQU0sQ0FBQSxDQUFJdEgsQ0FBQUEsQ0FDckRzRSxFQUFRLElBQUl3QixFQUFBQSxDQUFZdUIsQ0FBTyxDQUFBLENBRS9CRSxFQUFRLE1BQU1sQixFQUFBQSxDQUFhLE1BQUEsQ0FBTyxDQUN0QyxNQUFBdEYsQ0FBQUEsQ0FDQSxNQUFBLENBQUFDLENBQUFBLENBQ0EsR0FBQSxDQUFBdUYsQ0FBQUEsQ0FDQSxTQUFBLENBQVdpQiw0QkFBQUEsQ0FDWCxRQUFBLENBQVUsT0FDVixZQUFBLENBQWMsSUFBQSxDQUNkLFNBQUEsQ0FBVyxDQUFFLE1BQUEsQ0FBUSxXQUFBLENBQWEsYUFBQSxDQUFlLHVCQUF3QixFQUN6RSxPQUFBLENBQVMsR0FBQSxDQUNULFdBQUEsQ0FBYWxDLDZCQUFBQSxDQUNiLEtBQUEsQ0FBQWhCLENBQ0YsQ0FBQyxDQUFBLENBRUdtRCxFQUNKLE9BQUlILENBQUFBLEdBQ0ZHLENBQUFBLENBQVEsTUFBTTlFLEVBQUFBLENBQWEsTUFBQSxDQUFPLENBQ2hDLGFBQUEsQ0FBZSxNQUNmLFlBQUEsQ0FBY0QsNEJBQUFBLENBQ2QsU0FBQSxDQUFXZ0Ysd0JBQUFBLENBQ1gsWUFBQSxDQUFjLElBQUEsQ0FDZCxPQUFBLENBQVMsS0FBQSxDQUNULE1BQUFwRCxDQUNGLENBQUMsQ0FBQSxDQUFBLENBR0gsTUFBTUEsQ0FBQUEsQ0FBTSxJQUFBLEVBQUssQ0FFVixJQUFJd0MsRUFDVFMsQ0FBQUEsQ0FDQUUsQ0FBQUEsQ0FDQW5ELENBQUFBLENBQ0EsSUFBSW5DLENBQUFBLENBQW1CLENBQUMsQ0FBQSxDQUN4QmtGLENBQUFBLENBQ0EsTUFBTTdCLEVBQUFBLENBQVcsTUFBQSxDQUFPekUsQ0FBQUEsQ0FBT0MsQ0FBTSxDQUN2QyxDQUNGLENBRUEsVUFBQSxDQUFXMkcsRUFBMEIsQ0FDbkMsSUFBQSxDQUFLLE1BQUEsRUFBUSxZQUFBLENBQWFBLENBQVUsRUFDdEMsQ0FFQSxNQUFNLFdBQVdDLENBQUFBLENBQThCLENBQzdDLE1BQU0sSUFBQSxDQUFLLFFBQUEsQ0FBUyxRQUFBLENBQVMsU0FBWSxDQUN2QyxHQUFNLENBQUUsR0FBQSxDQUFBNUYsQ0FBQUEsQ0FBSyxHQUFBLENBQUE2RixDQUFBQSxDQUFLLEdBQUEsQ0FBQXpDLENBQUksQ0FBQSxDQUFJLEtBQUssTUFBQSxDQUMvQixPQUFBTyxTQUFBQSxDQUFHUCxDQUFBQSxDQUFLLHFCQUFxQixDQUFBLENBQzdCNUIsa0JBQUFBLENBQVksWUFBQSxDQUFheEIsRUFBSSxZQUFBLEVBQWEsQ0FBRyxzQkFBc0IsQ0FBQSxDQUNuRXdCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYXhCLENBQUFBLENBQUksVUFBQSxDQUFXNEYsQ0FBSyxDQUFBLENBQUcsb0JBQW9CLENBQUEsQ0FDcEVwRSxrQkFBQUEsQ0FBWSxZQUFBLENBQWFxRSxDQUFBQSxDQUFJLFlBQUEsRUFBYSxDQUFHLHNCQUFzQixDQUFBLENBQ25FckUsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU00QixDQUFBQSxDQUFJLFVBQUEsQ0FBV3lDLENBQUFBLENBQUs3RixDQUFHLEVBQUcsb0JBQW9CLENBQUEsQ0FDdEUsSUFBQSxDQUFLLE1BQUEsQ0FBTyxPQUFPNkYsQ0FBQUEsQ0FBSyxJQUFBLENBQUssTUFBTSxDQUM1QyxDQUFDLEVBQ0gsQ0FFQSxNQUFNLFNBQUEsQ0FBVUMsQ0FBQUEsQ0FBZ0MsQ0FDOUMsTUFBTSxJQUFBLENBQUssU0FBUyxRQUFBLENBQVMsU0FBWSxDQUV2QyxJQUFBdkQsQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQURBLEdBQU0sQ0FBRSxJQUFBNkIsQ0FBQUEsQ0FBSyxHQUFBLENBQUFwRSxDQUFBQSxDQUFLLEdBQUEsQ0FBQTZGLENBQUksQ0FBQSxDQUFJLElBQUEsQ0FBSyxNQUFBLENBQy9CLElBQU1qQyxDQUFBQSxDQUFNbEIsQ0FBQUEsQ0FBQUgsQ0FBQUEsQ0FBQSxNQUFNLElBQUEsQ0FBSyxNQUFBLENBQU8sR0FBQSxFQUFJLENBQUEsQ0FDbEM2QixFQUFJLElBQUEsQ0FBTzBCLENBQUFBLENBQ1h0RSxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTW9DLENBQUFBLENBQUksVUFBQSxDQUFXUSxDQUFHLEVBQUcsdUJBQXVCLENBQUEsQ0FDM0VBLENBQUFBLENBQUksS0FBQSxFQUFNLENBQ1Y1QyxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTW9DLEVBQUksWUFBQSxDQUFhNUQsQ0FBRyxDQUFBLENBQUcseUJBQXlCLENBQUEsQ0FDL0V3QixrQkFBQUEsQ0FBWSxZQUFBLENBQWFxRSxDQUFBQSxDQUFJLGNBQWEsQ0FBRyxxQkFBcUIsQ0FBQSxDQUVsRXJFLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNLElBQUEsQ0FBSyxNQUFBLENBQU8sSUFBSSxVQUFBLENBQVdxRSxDQUFBQSxDQUFLN0YsQ0FBRyxDQUFBLENBQUcsbUJBQW1CLENBQUEsQ0FDeEYsT0FBTyxJQUFBLENBQUssT0FBTyxNQUFBLENBQU82RixDQUFBQSxDQUFLLElBQUEsQ0FBSyxNQUFNLENBQUEsQ0FBQSxNQVIxQ2xELENBQUFBLENBQUEsQ0FBQSxJQUFBQyxDQUFBQSxDQUFBRCxFQUFBRSxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLENBQUFBLENBQUFQLENBQUFBLENBQUFLLENBQUFBLENBQUFDLENBQUFBLEVBQUFBLENBU0YsQ0FBQyxFQUNILENBRUEsTUFBTSxXQUFBLENBQVlSLENBQUFBLENBQTRCLENBQ3hDLElBQUEsQ0FBSyxNQUFBLEVBQVEsTUFBTSxJQUFBLENBQUssU0FBUyxRQUFBLENBQVMsSUFBTSxJQUFBLENBQUssTUFBQSxDQUFRLE1BQUEsQ0FBT0EsQ0FBQUEsQ0FBSyxJQUFBLENBQUssTUFBTSxDQUFDLEVBQzNGLENBRUEsTUFBTSxNQUFBLEVBQTBCLENBQzlCLEdBQUksQ0FDRixJQUFBRSxFQUFBLEVBQUEsQ0FBQSxHQUFBLENBQUEsSUFBWXdELENBQUFBLENBQUtyRCxDQUFBQSxDQUFBSCxDQUFBQSxDQUFBLElBQUEsQ0FBSyxNQUFBLENBQUwsQ0FBQSxDQUFBLENBQUEsQ0FDakIsSUFBTXlELEVBQUt0RCxDQUFBQSxDQUFBSCxDQUFBQSxDQUFBLElBQUEsQ0FBSyxNQUFBLENBQUEsQ0FDaEIsSUFBTTBELENBQUFBLENBQUt2RCxDQUFBQSxDQUFBSCxDQUFBQSxDQUFBLElBQUEsQ0FBSyxRQUNoQixNQUFNLElBQUEsQ0FBSyxRQUFBLENBQVMsR0FBQSxFQUFJLENBQ3hCLE1BQU0sSUFBQSxDQUFLLE1BQUEsRUFBUSxNQUFNLElBQUEsQ0FBSyxNQUFNLENBQUEsQ0FDcEMsTUFBTSxJQUFBLENBQUssTUFBQSxDQUFPLEtBQUEsQ0FBTSxJQUFBLENBQUssTUFBTSxFQUFBLENBQUEsTUFMbkNJLENBQUFBLENBQUEsQ0FBQSxJQUFBQyxDQUFBQSxDQUFBRCxDQUFBQSxDQUFBRSxDQUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE9BQUEsQ0FBQSxJQUFBcUQsQ0FBQUEsQ0FBQXBELEVBQUFQLENBQUFBLENBQUFLLENBQUFBLENBQUFDLENBQUFBLENBQUFBLENBQUFxRCxDQUFBQSxFQUFBLE1BQUFBLEVBQUFBLENBTUYsQ0FBQSxPQUFFLENBQ0EsS0FBSyxJQUFBLEdBQ1AsQ0FDQSxPQUFPLElBQUEsQ0FBSyxRQUNkLENBRUEsTUFBTyxPQUFPLFlBQVksQ0FBQSxFQUFtQixDQUN2QyxJQUFBLENBQUssU0FBQSxHQUNULE1BQU0sSUFBQSxDQUFLLFFBQUEsQ0FBUyxLQUFJLENBQ3hCLElBQUEsQ0FBSyxNQUFBLENBQU8sTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQzVCLElBQUEsQ0FBSyxTQUFTLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBRSxDQUM5QixNQUFNLElBQUEsQ0FBSyxNQUFBLENBQU8sTUFBQSxDQUFPLFlBQVksQ0FBQSxFQUFFLENBQ3ZDLElBQUEsQ0FBSyxJQUFBLEVBQUssRUFDWixDQUVRLElBQUEsRUFBYSxDQUduQixJQUFBM0QsQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUZBLEdBQUksSUFBQSxDQUFLLFNBQUEsQ0FBVyxPQUNwQixJQUFBLENBQUssU0FBQSxDQUFZLEdBQ2pCLElBQU02QyxDQUFBQSxDQUFTMUMsQ0FBQUEsQ0FBQUgsQ0FBQUEsQ0FBQSxJQUFBLENBQUssTUFBQSxFQUFBLENBQUEsTUFBcEJJLENBQUFBLENBQUEsQ0FBQSxJQUFBQyxFQUFBRCxDQUFBQSxDQUFBRSxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLENBQUFBLENBQUFQLENBQUFBLENBQUFLLENBQUFBLENBQUFDLENBQUFBLEVBQUFBLENBQ0YsQ0FDRixFQ3BITyxJQUFNc0QsRUFBQUEsQ0FBTixLQUFxQixDQUNULElBQUEsQ0FDVCxPQUFBLENBQVUsQ0FBQSxDQUNWLGFBQUEsQ0FBZ0IsRUFDaEIsT0FBQSxDQUFvQixFQUFDLENBRTdCLFdBQUEsQ0FBWTVCLENBQUFBLENBQWEsQ0FDdkIsSUFBQSxDQUFLLElBQUEsQ0FBT0EsRUFDZCxDQUdBLEtBQUEsQ0FBTTZCLENBQUFBLENBQVEsQ0FBQSxDQUFTLENBQ2pCLElBQUEsQ0FBSyxhQUFBLENBQWdCLENBQUEsR0FDdkIsS0FBSyxPQUFBLENBQVEsSUFBQSxDQUFLLElBQUEsQ0FBSyxhQUFhLEVBQ3BDLElBQUEsQ0FBSyxhQUFBLENBQWdCLENBQUEsQ0FBQSxDQUV2QixJQUFBLENBQUssU0FBV0EsRUFDbEIsQ0FHQSxPQUFBLENBQVFBLENBQUFBLENBQVEsQ0FBQSxDQUFTLENBQ3ZCLElBQUEsQ0FBSyxhQUFBLEVBQWlCQSxFQUN4QixDQUdBLFFBQUEsRUFBMkIsQ0FDckIsSUFBQSxDQUFLLGFBQUEsQ0FBZ0IsQ0FBQSxHQUN2QixJQUFBLENBQUssT0FBQSxDQUFRLEtBQUssSUFBQSxDQUFLLGFBQWEsQ0FBQSxDQUNwQyxJQUFBLENBQUssYUFBQSxDQUFnQixDQUFBLENBQUEsQ0FHdkIsSUFBSUMsQ0FBQUEsQ0FBZSxFQUNmQyxDQUFBQSxDQUFXLENBQUEsQ0FDWEMsQ0FBQUEsQ0FBVyxDQUFBLENBQ2YsSUFBQSxJQUFXQyxDQUFBQSxJQUFTLElBQUEsQ0FBSyxPQUFBLENBQVMsQ0FDaENILENBQUFBLEVBQWdCRyxDQUFBQSxDQUNoQkQsQ0FBQUEsQ0FBVyxJQUFBLENBQUssR0FBQSxDQUFJQSxDQUFBQSxDQUFVQyxDQUFLLENBQUEsQ0FDbkMsSUFBTUMsQ0FBQUEsQ0FBYyxJQUFBLENBQUssR0FBQSxDQUFJLENBQUEsQ0FBR0QsQ0FBQUEsQ0FBUSxDQUFDLENBQUEsQ0FDekNGLENBQUFBLEVBQUFBLENBQWFHLEVBQWMsSUFBQSxDQUFLLElBQUEsR0FBUyxFQUMzQyxDQUVBLElBQU1DLENBQUFBLENBQVcsSUFBQSxDQUFLLE9BQUEsQ0FBVUwsRUFDMUJNLENBQUFBLENBQUlELENBQUFBLENBQVcsQ0FBQSxDQUFJTCxDQUFBQSxDQUFlSyxDQUFBQSxDQUFXLENBQUEsQ0FDN0NFLENBQUFBLENBQUksSUFBQSxDQUFLLElBQUksQ0FBQSxDQUFHTixDQUFRLENBQUEsQ0FDeEJPLENBQUFBLENBQVEsQ0FBQSxDQUFBLENBQUssQ0FBQSxDQUFJRixDQUFBQSxHQUFNLENBQUEsQ0FBSUMsR0FFakMsT0FBTyxDQUFFLE1BQUEsQ0FBUUQsQ0FBQUEsQ0FBRyxLQUFBLENBQU9DLENBQUFBLENBQUcsSUFBQSxDQUFNQyxDQUFBQSxDQUFPLFNBQUFILENBQUFBLENBQVUsTUFBQSxDQUFRLElBQUEsQ0FBSyxPQUFBLENBQVMsUUFBQSxDQUFBSCxDQUFTLENBQ3RGLENBQ0YsRUNoRU8sU0FBU08sRUFBQUEsQ0FBUUMsQ0FBQUEsQ0FBb0IsQ0FDMUMsSUFBTWpJLENBQUFBLENBQU9pSSxDQUFBQSxDQUFNLE9BQUEsR0FDbkIsT0FBSWpJLENBQUFBLENBQUssS0FBQSxHQUFVLENBQUEsRUFBS0EsQ0FBQUEsQ0FBSyxNQUFBLEdBQVcsQ0FBQSxDQUFVLElBQUEsQ0FDM0NpSSxFQUFNLE9BQUEsRUFDZixDQ0NBLElBQU1DLEVBQUFBLENBQXVCO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLENBQUEsQ0FvRjdCLGVBQXNCQyxHQUFrQixDQUN0QyxPQUFBLENBQUFDLEVBQ0EsY0FBQSxDQUFBQyxDQUFBQSxDQUNBLE9BQUEsQ0FBQUMsQ0FDRixDQUFBLENBQStDLENBQzdDLElBQU1DLENBQUFBLENBQWM1TixTQUFBQSxDQUFLNk4sV0FBTyxDQUFHLENBQUEsa0JBQUEsRUFBcUJDLG1CQUFZLENBQUEsR0FBQSxDQUFLLENBQUEsQ0FDekUsT0FBQSxNQUFNQyxrQkFBQUEsQ0FBVUgsQ0FBQUEsQ0FBYUwsRUFBb0IsQ0FBQSxDQUNqRFMsZ0JBQUFBLENBQVEsZUFBZSxxQkFBQSxDQUFzQixDQUMzQyxLQUFNLE9BQUEsQ0FDTixFQUFBLENBQUksV0FBQSxDQUNKLFFBQUEsQ0FBVUosQ0FDWixDQUFDLEVBRURLLGdCQUFBQSxDQUFRLEVBQUEsQ0FBRyxZQUFBLENBQWMsTUFBT0MsQ0FBQUEsQ0FBSS9MLENBQUFBLEdBQWlDLENBQ25FLElBQU0rSixDQUFBQSxDQUFhL0osQ0FBQUEsQ0FBSyxVQUFBLENBQ2xCZ00sQ0FBQUEsQ0FBVVQsQ0FBQUEsR0FDaEJELENBQUFBLENBQVEsVUFBQSxDQUFXdkIsQ0FBVSxDQUFBLENBQzdCLElBQU1rQyxFQUFpQixJQUFBLENBQUssSUFBQSxDQUFNRCxDQUFBQSxDQUFVakMsQ0FBQUEsQ0FBYyxHQUFJLENBQUEsQ0FDOUQsR0FBSSxFQUFBa0MsQ0FBQUEsRUFBa0IsR0FHdEIsR0FBSSxDQUNGLE1BQU1YLENBQUFBLENBQVEsV0FBQSxDQUFZLE1BQUEsQ0FBTyxLQUFBLENBQU1XLENBQUFBLENBQWlCLENBQUEsQ0FBSSxDQUFDLENBQUMsRUFDaEUsT0FBU3pNLENBQUFBLENBQU8sQ0FDZGdNLEVBQVFoTSxDQUFjLEVBQ3hCLENBQ0YsQ0FBQyxDQUFBLENBRURzTSxnQkFBQUEsQ0FBUSxHQUFHLGFBQUEsQ0FBZSxNQUFPQyxDQUFBQSxDQUFJRyxDQUFBQSxHQUFtQixDQUN0RCxHQUFJLENBQ0YsTUFBTVosQ0FBQUEsQ0FBUSxXQUFBLENBQVlZLENBQU0sRUFDbEMsQ0FBQSxNQUFTMU0sRUFBTyxDQUNkZ00sQ0FBQUEsQ0FBUWhNLENBQWMsRUFDeEIsQ0FDRixDQUFDLENBQUEsQ0FFTSxDQUNMLE1BQU0sUUFBQSxFQUFXLENBQ2ZzTSxnQkFBQUEsQ0FBUSxtQkFBbUIsWUFBWSxDQUFBLENBQ3ZDQSxpQkFBUSxrQkFBQSxDQUFtQixhQUFhLEVBQ3hDRCxnQkFBQUEsQ0FBUSxjQUFBLENBQWUsdUJBQUEsQ0FBd0IsV0FBVyxDQUFBLENBQzFELE1BQU1NLFlBQUdWLENBQUFBLENBQWEsQ0FBRSxNQUFPLElBQUssQ0FBQyxFQUN2QyxDQUNGLENBQ0YsQ0N2SU8sU0FBU1csRUFBQUEsQ0FBTUMsRUFBWSxDQUNoQyxPQUFPLElBQUksT0FBQSxDQUFlek0sQ0FBQUEsRUFBWSxVQUFBLENBQVdBLEVBQVN5TSxDQUFFLENBQUMsQ0FDL0QsQ0NPTyxTQUFTQyxHQUFrQyxDQUFFLEVBQUEsQ0FBQXhMLENBQUFBLENBQUksV0FBQSxDQUFBeUwsQ0FBQUEsQ0FBYyxDQUFBLENBQUcsUUFBQUMsQ0FBUSxDQUFBLENBQTRCLENBQzNHLElBQU1DLENBQUFBLENBQWUsSUFBSSxLQUFBLENBQU0sQ0FBQSxhQUFBLEVBQWdCRCxDQUFPLENBQUEsRUFBQSxDQUFJLENBQUEsQ0FDMUQsT0FBTyxrQkFBbUJ6TCxDQUFBQSxDQUFZLENBQ3BDLElBQUkyTCxDQUFBQSxDQUFVLENBQUEsQ0FDZCxPQUNFLEdBQUksQ0FDRixJQUFNQyxDQUFBQSxDQUFXLENBQUM3TCxDQUFBQSxDQUFHLEdBQUdDLENBQUksQ0FBQyxDQUFBLENBQzdCLE9BQUl5TCxDQUFBQSxFQUNGRyxDQUFBQSxDQUFTLEtBQ1BDLHFCQUFBQSxDQUFXSixDQUFPLENBQUEsQ0FBRSxJQUFBLENBQUssSUFBTSxDQUM3QixNQUFNQyxDQUNSLENBQUMsQ0FDSCxDQUFBLENBRUssTUFBTSxRQUFRLElBQUEsQ0FBS0UsQ0FBUSxDQUNwQyxDQUFBLE1BQVN0SyxDQUFBQSxDQUFHLENBRVYsR0FEQXFLLENBQUFBLEVBQUFBLENBQ0lBLENBQUFBLEVBQVdILEVBQ2IsTUFBTWxLLENBQUFBLENBRVIsTUFBTStKLEVBQUFBLENBQU0sSUFBQSxDQUFLLEdBQUEsQ0FBSSxDQUFBLENBQUdNLENBQU8sQ0FBQSxDQUFJLElBQU0sSUFBQSxDQUFLLE1BQUEsR0FBVyxHQUFHLEVBQzlELENBRUosQ0FDRixDQ2pDQSxJQUFNRyxFQUFBQSxDQUFzQixDQUFDLE9BQUEsQ0FBUyxRQUFTLFFBQUEsQ0FBVSxPQUFPLENBQUEsQ0FDMURDLEVBQUFBLENBQWlCLHdCQUFBLENBRWhCLFNBQVNDLEdBQVU1SyxDQUFBQSxDQUFzQixDQUM5QyxHQUFJMkssRUFBQUEsQ0FBZSxJQUFBLENBQUszSyxDQUFNLEVBQzVCLE9BR0YsSUFBTTZCLEVBQVc3QixDQUFBQSxDQUFPLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FBRSxDQUFDLENBQUEsQ0FBSSxHQUFBLENBQ2xDekMsQ0FBQUEsQ0FBVW1OLEVBQUFBLENBQW9CLFNBQVM3SSxDQUFRLENBQUEsQ0FDakQseUJBQXlCQSxDQUFRLENBQUEsV0FBQSxFQUFjNkksR0FBb0IsSUFBQSxDQUFLLElBQUksQ0FBQyxDQUFBLENBQUEsQ0FDN0UsQ0FBQSxnQ0FBQSxFQUFtQ0EsRUFBQUEsQ0FBb0IsS0FBSyxJQUFJLENBQUMsR0FFckUsTUFBTSxJQUFJLE1BQU1uTixDQUFPLENBQ3pCLENDVE8sSUFBTXNOLEVBQUFBLENBQU4sS0FBb0IsQ0FDakIsU0FDQSxRQUFBLENBQ0EsYUFBQSxDQUVSLElBQUEsQ0FBS2pMLENBQUFBLENBQXNDLENBQ3pDLEdBQUksS0FBSyxRQUFBLENBQ1AsTUFBTSxJQUFJLEtBQUEsQ0FBTSxpQkFBaUIsRUFFbkMsT0FBQSxJQUFBLENBQUssUUFBQSxDQUFXLElBQUksT0FBQSxDQUFTbkMsQ0FBQUEsRUFBWSxDQUN2QyxLQUFLLFFBQUEsQ0FBV0EsQ0FBQUEsQ0FDWm1DLEdBQVMsT0FBQSxHQUFZLE1BQUEsR0FDdkIsS0FBSyxhQUFBLENBQWdCLFVBQUEsQ0FBVyxJQUFNLENBQ3BDQSxDQUFBQSxDQUFRLFNBQUEsS0FDUm5DLENBQUFBLEdBQ0YsRUFBR21DLENBQUFBLENBQVEsT0FBTyxHQUV0QixDQUFDLENBQUEsQ0FDTSxJQUFBLENBQUssUUFDZCxDQUVBLE1BQUEsRUFBUyxDQUNQLFlBQUEsQ0FBYSxJQUFBLENBQUssYUFBYSxDQUFBLENBQy9CLElBQUEsQ0FBSyxRQUFBLENBQVcsT0FDaEIsSUFBQSxDQUFLLFFBQUEsS0FDUCxDQUNGLENBQUEsQ0N6QkEsSUFBTWtMLEdBQU0sV0FBQSxDQUVOQyxFQUFBQSxDQUFNLElBQUksR0FBQSxDQUFJLENBQ2xCLENBQUMscUJBQUEsQ0FBdUIsdUJBQXVCLENBQUEsQ0FDL0MsQ0FBQyxnQkFBQSxDQUFrQix1QkFBdUIsQ0FDNUMsQ0FBQyxDQUFBLENBRU0sU0FBU0MsRUFBQUEsQ0FBV2hKLENBQUFBLENBQWEsQ0FDdEMsR0FBSSxDQUFDQSxDQUFBQSxDQUFJLFVBQUEsQ0FBVyxNQUFNLENBQUEsQ0FDeEIsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNaUosRUFBUyxJQUFJQyxPQUFBQSxDQUFJbEosQ0FBRyxDQUFBLENBQ3BCOUYsQ0FBQUEsQ0FBUzZPLEVBQUFBLENBQUksR0FBQSxDQUFJRSxDQUFBQSxDQUFPLFFBQVEsRUFDdEMsT0FBSy9PLENBQUFBLEVBR0wrTyxDQUFBQSxDQUFPLFFBQUEsQ0FBVy9PLENBQUFBLENBQ2xCK08sQ0FBQUEsQ0FBTyxTQUFXLE9BQUEsQ0FDWEEsQ0FBQUEsQ0FBTyxRQUFBLEVBQVMsRUFKZGpKLENBS1gsQ0FRTyxTQUFTbUosRUFBQUEsQ0FBZSxDQUFFLE9BQUFuTCxDQUFBQSxDQUFRLE1BQUEsQ0FBQW9MLEVBQVEsYUFBQSxDQUFBQyxDQUFjLENBQUEsQ0FBbUIsQ0FDaEYsSUFBTXRKLENBQUFBLENBQU1xSixFQUFPLFdBQUEsQ0FBWSxPQUFBLENBQVEsV0FDakNFLENBQUFBLENBQVUsSUFBSWxKLEVBQW1CLEVBQUUsQ0FBQSxDQUNuQ21KLENBQUFBLENBQVMsSUFBSSxHQUFBLENBRW5CLGVBQWVDLEVBQUtDLENBQUFBLENBQWFDLENBQUFBLENBQXdCLENBQ3ZELElBQU1DLENBQUFBLENBQVEsSUFBSWQsRUFBQUEsQ0FDbEJVLENBQUFBLENBQU8sR0FBQSxDQUFJRSxDQUFBQSxDQUFLRSxDQUFLLENBQUEsQ0FDckIsTUFBTUEsQ0FBQUEsQ0FBTSxJQUFBLENBQUssQ0FBRSxPQUFBLENBQVMsR0FBQSxDQUFPLFNBQUEsQ0FBQUQsQ0FBVSxDQUFDLENBQUEsQ0FBRSxPQUFBLENBQVEsSUFBTUgsQ0FBQUEsQ0FBTyxNQUFBLENBQU9FLENBQUcsQ0FBQyxFQUNsRixDQUVBLFNBQVN6TixDQUFBQSxDQUFPeU4sRUFBYSxDQUMzQkYsQ0FBQUEsQ0FBTyxHQUFBLENBQUlFLENBQUcsQ0FBQSxFQUFHLE1BQUEsR0FDbkIsQ0FFQTFKLENBQUFBLENBQUksZ0JBQWdCLENBQUM2SixDQUFBQSxDQUFTQyxJQUFhLENBQ3pDLElBQU03SixDQUFBQSxDQUFNNEosQ0FBQUEsQ0FBUSxHQUFBLENBQ2RFLENBQUFBLENBQVVULEVBQWdCTCxFQUFBQSxDQUFXaEosQ0FBRyxFQUFJQSxDQUFBQSxDQUNsRHNKLENBQUFBLENBQVEsU0FBUyxJQUFNLENBQ3JCLElBQU1HLENBQUFBLENBQU0sQ0FBQSxFQUFHTCxDQUFBQSxDQUFPLEVBQUUsQ0FBQSxDQUFBLEVBQUlRLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQUEsQ0FDdEMsT0FBQXZOLENBQUFBLENBQU8sTUFBTXlNLEVBQUFBLENBQUssUUFBQSxDQUFVLENBQzFCLEdBQUEsQ0FBQVcsQ0FBQUEsQ0FDQSxHQUFBLENBQUF6SixFQUNBLE9BQUEsQ0FBQThKLENBQUFBLENBQ0EsT0FBUUYsQ0FBQUEsQ0FBUSxNQUFBLENBQ2hCLE9BQUE1TCxDQUFBQSxDQUNBLEtBQUEsQ0FBT3NMLENBQUFBLENBQVEsS0FDakIsQ0FBQyxDQUFBLENBRUNPLEVBREVDLENBQUFBLEdBQVk5SixDQUFBQSxDQUNMLENBQUUsTUFBQSxDQUFRLEtBQU0sRUFFaEIsQ0FBRSxNQUFBLENBQVEsS0FBQSxDQUFPLFdBQUEsQ0FBYThKLENBQVEsQ0FGckIsRUFJckJOLENBQUFBLENBQUtDLENBQUFBLENBQUssSUFBTSxDQUNyQnBOLENBQUFBLENBQU8sS0FBS3lNLEVBQUFBLENBQUssZ0JBQUEsQ0FBa0IsQ0FDakMsR0FBQSxDQUFBVyxDQUFBQSxDQUNBLEdBQUEsQ0FBQXpKLEVBQ0EsT0FBQSxDQUFBOEosQ0FBQUEsQ0FDQSxNQUFBLENBQVFGLENBQUFBLENBQVEsTUFBQSxDQUNoQixNQUFBLENBQUE1TCxDQUNGLENBQUMsRUFDSCxDQUFDLENBQ0gsQ0FBQyxFQUNILENBQUMsQ0FBQSxDQUVEK0IsQ0FBQUEsQ0FBSSxrQkFBa0IsQ0FBQyxDQUFFLGdCQUFBZ0ssQ0FBZ0IsQ0FBQSxDQUFHRixDQUFBQSxHQUFhLENBQ3ZELE9BQU9FLENBQUFBLEdBQWtCLGlCQUFpQixDQUFBLENBQzFDLE9BQU9BLElBQWtCLGlCQUFpQixDQUFBLENBQzFDLE9BQU9BLENBQUFBLEdBQWtCLHlCQUF5QixDQUFBLENBQ2xELE9BQU9BLENBQUFBLEdBQWtCLHlCQUF5QixFQUNsREYsQ0FBQUEsQ0FBUyxDQUFFLE9BQVEsS0FBQSxDQUFPLGVBQUEsQ0FBQUUsQ0FBZ0IsQ0FBQyxFQUM3QyxDQUFDLENBQUEsQ0FFRGhLLENBQUFBLENBQUksV0FBQSxDQUFhNkosR0FBWSxDQUMzQixJQUFNSCxDQUFBQSxDQUFNLENBQUEsRUFBR0wsQ0FBQUEsQ0FBTyxFQUFFLElBQUlRLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQUEsQ0FDdEM1TixDQUFBQSxDQUFPeU4sQ0FBRyxDQUFBLENBQ1ZwTixFQUFPLEtBQUEsQ0FBTXlNLEVBQUFBLENBQUssYUFBYyxDQUM5QixHQUFBLENBQUFXLEVBQ0EsR0FBQSxDQUFLRyxDQUFBQSxDQUFRLEdBQUEsQ0FDYixNQUFBLENBQVFBLENBQUFBLENBQVEsTUFBQSxDQUNoQixXQUFZQSxDQUFBQSxDQUFRLFVBQUEsQ0FDcEIsT0FBQTVMLENBQ0YsQ0FBQyxFQUNILENBQUMsQ0FBQSxDQUVEK0IsQ0FBQUEsQ0FBSSxlQUFBLENBQWlCNkosQ0FBQUEsRUFBWSxDQUMvQixJQUFNSCxDQUFBQSxDQUFNLENBQUEsRUFBR0wsRUFBTyxFQUFFLENBQUEsQ0FBQSxFQUFJUSxFQUFRLEVBQUUsQ0FBQSxDQUFBLENBQ3RDNU4sQ0FBQUEsQ0FBT3lOLENBQUcsQ0FBQSxDQUNWcE4sQ0FBQUEsQ0FBTyxNQUFNeU0sRUFBQUEsQ0FBSyxRQUFBLENBQVUsQ0FDMUIsR0FBQSxDQUFBVyxDQUFBQSxDQUNBLEdBQUEsQ0FBS0csRUFBUSxHQUFBLENBQ2IsTUFBQSxDQUFRQSxDQUFBQSxDQUFRLE1BQUEsQ0FDaEIsS0FBQSxDQUFPQSxDQUFBQSxDQUFRLE1BQ2YsTUFBQSxDQUFBNUwsQ0FDRixDQUFDLEVBQ0gsQ0FBQyxFQUNILENBRU8sU0FBU2dNLEVBQUFBLENBQWlCWixDQUFBQSxDQUF1QixDQUN0RCxJQUFNckosRUFBTXFKLENBQUFBLENBQU8sV0FBQSxDQUFZLFFBQVEsVUFBQSxDQUN2Q3JKLENBQUFBLENBQUksZ0JBQWdCLElBQUksQ0FBQSxDQUN4QkEsQ0FBQUEsQ0FBSSxpQkFBQSxDQUFrQixJQUFJLENBQUEsQ0FDMUJBLEVBQUksV0FBQSxDQUFZLElBQUksRUFDcEJBLENBQUFBLENBQUksZUFBQSxDQUFnQixJQUFJLEVBQzFCLENDNUdBLElBQU0rSSxFQUFBQSxDQUFNLFVBQUEsQ0FFWixTQUFTbUIsR0FBY0MsQ0FBQUEsQ0FBb0JDLENBQUFBLENBQW9CLENBQzdELE9BQU8sSUFBSSxPQUFBLENBQWMsQ0FBQzFPLENBQUFBLENBQVNDLENBQUFBLEdBQVcsQ0FDNUMsSUFBTTJNLENBQUFBLENBQVUsVUFBQSxDQUFXLElBQU0zTSxDQUFBQSxDQUFPLElBQUksTUFBTSxxQkFBcUIsQ0FBQyxFQUFHLEdBQU0sQ0FBQSxDQUMzRTBPLENBQUFBLENBQVF0TyxDQUFBQSxFQUFnQixDQUM1QixZQUFBLENBQWF1TSxDQUFPLENBQUEsQ0FDcEJ2TSxDQUFBQSxDQUFNSixFQUFPSSxDQUFHLENBQUEsQ0FBSUwsSUFDdEIsQ0FBQSxDQUNBeU8sQ0FBQUEsQ0FBSSxXQUFBLENBQVksSUFBQSxDQUFLLGtCQUFBLENBQW9CLElBQU1FLENBQUFBLEVBQU0sRUFDckRGLENBQUFBLENBQUksV0FBQSxDQUFZLEtBQUssdUJBQUEsQ0FBeUIsQ0FBQ3RILENBQUFBLENBQUd5SCxDQUFBQSxDQUFhQyxDQUFBQSxDQUFnQkMsQ0FBQUEsR0FBbUIsQ0FDaEdsTyxDQUFBQSxDQUFPLEtBQUEsQ0FBTXlNLEVBQUFBLENBQUssd0JBQUEsQ0FBMEIsQ0FBRSxXQUFBLENBQUF1QixFQUFhLGNBQUEsQ0FBQUMsQ0FBQUEsQ0FBZ0IsY0FBQSxDQUFBQyxDQUFlLENBQUMsRUFDN0YsQ0FBQyxDQUFBLENBQ0RMLENBQUFBLENBQUksWUFBWSxJQUFBLENBQUssV0FBQSxDQUFhLElBQU0sQ0FDdEM3TixDQUFBQSxDQUFPLEtBQUEsQ0FBTXlNLEVBQUFBLENBQUssV0FBVyxFQUMvQixDQUFDLENBQUEsQ0FDRG9CLENBQUFBLENBQUksV0FBQSxDQUFZLElBQUEsQ0FBSyxlQUFBLENBQWlCLENBQUN0QyxFQUFJN0wsQ0FBQUEsQ0FBTXlPLENBQUFBLENBQU14SyxDQUFBQSxHQUNyRG9LLENBQUFBLENBQUssSUFBSSxLQUFBLENBQU0sa0JBQWtCcEssQ0FBRyxDQUFBLEdBQUEsRUFBTWpFLENBQUksQ0FBQSxFQUFBLEVBQUt5TyxDQUFJLEVBQUUsQ0FBQyxDQUM1RCxDQUFBLENBQ0FOLENBQUFBLENBQUksV0FBQSxDQUFZLElBQUEsQ0FBSyxzQkFBdUIsQ0FBQ3RDLENBQUFBLENBQUksQ0FBRSxRQUFBLENBQUE2QyxDQUFBQSxDQUFVLE1BQUEsQ0FBQXhPLENBQU8sQ0FBQSxHQUNsRW1PLENBQUFBLENBQUssSUFBSSxLQUFBLENBQU0sQ0FBQSxrQkFBQSxFQUFxQkssQ0FBUSxLQUFLeE8sQ0FBTSxDQUFBLENBQUUsQ0FBQyxDQUM1RCxDQUFBLENBQ0FrTyxJQUNGLENBQUMsQ0FDSCxDQUVBLFNBQVNPLEVBQUFBLENBQWVSLEVBQW9CLENBQzFDLE9BQU8sSUFBSSxPQUFBLENBQWV6TyxDQUFBQSxFQUFZLENBQ3BDdU8sRUFBQUEsQ0FBaUJFLENBQUcsQ0FBQSxDQUNwQkEsQ0FBQUEsQ0FBSSxJQUFBLENBQUssUUFBQSxDQUFVek8sQ0FBTyxDQUFBLENBQzFCeU8sQ0FBQUEsQ0FBSSxVQUNOLENBQUMsQ0FDSCxDQVNBLGVBQWVTLEVBQUFBLENBQVcsQ0FBRSxNQUFBLENBQUEzTSxDQUFBQSxDQUFRLFVBQUE0TSxDQUFBQSxDQUFXLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUEwQyxDQUN4R2xDLEVBQUFBLENBQVU1SyxDQUFNLENBQUEsQ0FFaEIsR0FBTSxDQUFFLEtBQUEsQ0FBQWdCLEVBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLGNBQUFvSyxDQUFjLENBQUEsQ0FBSXdCLEVBQ25DNUssQ0FBQUEsQ0FBTW9KLENBQUFBLENBQWdCTCxFQUFBQSxDQUFXaEwsQ0FBTSxDQUFBLENBQUlBLENBQUFBLENBRTNDa00sRUFBTSxJQUFJYSxzQkFBQUEsQ0FBYyxDQUM1QixLQUFBLENBQUEvTCxDQUFBQSxDQUNBLE9BQVFDLENBQUFBLENBQVMsQ0FBQSxDQUNqQixJQUFBLENBQU0sS0FBQSxDQUNOLFdBQUEsQ0FBYSxJQUFBLENBQ2IsZ0JBQWlCLE1BQUEsQ0FDakIsS0FBQSxDQUFPLE1BQ1AsY0FBQSxDQUFnQixDQUNkLFVBQVcsSUFBQSxDQUNYLG9CQUFBLENBQXNCLEtBQUEsQ0FDdEIsZUFBQSxDQUFpQixJQUFBLENBQ2pCLDBCQUFBLENBQTRCLEtBQzVCLHVCQUFBLENBQXlCLElBQUEsQ0FDekIsZ0JBQUEsQ0FBa0IsS0FBQSxDQUNsQixXQUFBLENBQWEsS0FBQSxDQUNiLDRCQUE2QixJQUFBLENBQzdCLG9CQUFBLENBQXNCLElBQ3hCLENBQ0YsQ0FBQyxDQUFBLENBQ0RrSyxHQUFlLENBQUUsTUFBQSxDQUFBbkwsRUFBUSxNQUFBLENBQVFrTSxDQUFBQSxDQUFLLGNBQUFiLENBQWMsQ0FBQyxDQUFBLENBQ2hEeUIsQ0FBQUEsRUFDSCxNQUFNRixDQUFBQSxHQUFZVixDQUFHLENBQUEsQ0FHdkJBLENBQUFBLENBQUksWUFBWSxFQUFBLENBQUcsaUJBQUEsQ0FBbUIsQ0FBQyxDQUFFLEtBQUEsQ0FBQTNOLENBQUFBLENBQU8sT0FBQSxDQUFBaEIsQ0FBQUEsQ0FBUyxVQUFBLENBQUF5UCxFQUFZLFFBQUEsQ0FBQUMsQ0FBUyxJQUFNLENBQ2xGLElBQU1DLEVBQU8sQ0FBQ3BDLEVBQUFBLENBQUssVUFBQSxDQUFZLENBQUUsT0FBQSxDQUFBdk4sQ0FBQUEsQ0FBUyxXQUFBeVAsQ0FBQUEsQ0FBWSxRQUFBLENBQUFDLENBQUFBLENBQVUsTUFBQSxDQUFBak4sQ0FBTyxDQUFDLEVBQ3hFekIsQ0FBQUEsR0FBVSxPQUFBLENBQVVGLENBQUFBLENBQU8sS0FBQSxDQUFNLEdBQUc2TyxDQUFJLEVBQUk3TyxDQUFBQSxDQUFPLEtBQUEsQ0FBTSxHQUFHNk8sQ0FBSSxFQUNsRSxDQUFDLENBQUEsQ0FFRCxHQUFJLENBQ0YsSUFBTWxMLENBQUFBLENBQU1HLEVBQUFBLENBQWVGLEVBQUssQ0FBRSxLQUFBLENBQUFqQixFQUFPLE1BQUEsQ0FBQUMsQ0FBTyxDQUFDLENBQUEsQ0FDakQsTUFBTWdMLEVBQUFBLENBQWNDLENBQUFBLENBQUssSUFBTUEsQ0FBQUEsQ0FBSSxRQUFRbEssQ0FBRyxDQUFDLEVBQ2pELENBQUEsTUFBUzlCLENBQUFBLENBQUcsQ0FDVixNQUFBLE1BQU13TSxFQUFBQSxDQUFlUixDQUFHLENBQUEsQ0FDbEJoTSxDQUNSLENBRUEsT0FBT2dNLENBQ1QsQ0FFQSxlQUFzQmlCLEVBQUFBLENBQVcsQ0FBRSxNQUFBLENBQUFuTixFQUFRLFNBQUEsQ0FBQTRNLENBQUFBLENBQVcsUUFBQSxDQUFBQyxDQUFTLENBQUEsQ0FBMEMsQ0FDdkcsSUFBSUMsQ0FBQUEsQ0FDSixHQUFJLENBQ0ZBLENBQUFBLENBQVMsTUFBTTNDLEdBQVMsQ0FBRSxFQUFBLENBQUl3QyxFQUFBQSxDQUFZLFdBQUEsQ0FBYSxDQUFFLENBQUMsRUFBRSxDQUFFLE1BQUEsQ0FBQTNNLEVBQVEsUUFBQSxDQUFBNk0sQ0FBQUEsQ0FBVSxPQUFRLENBQUEsQ0FBSyxDQUFDLEVBQ2hHLENBQUEsTUFBUzNNLENBQUFBLENBQUcsQ0FDVixHQUFNLENBQUUsT0FBQSxDQUFBM0MsRUFBUyxLQUFBLENBQUE2UCxDQUFNLEVBQUlsTixDQUFBQSxDQUMzQixNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsdUJBQUEsRUFBMEIsSUFBQSxDQUFLLFVBQVUsQ0FBRSxNQUFBLENBQUFGLENBQUFBLENBQVEsT0FBQSxDQUFBekMsQ0FBQUEsQ0FBUyxLQUFBLENBQUE2UCxDQUFNLENBQUMsQ0FBQyxDQUFBLENBQUUsQ0FDeEYsQ0FFQU4sQ0FBQUEsQ0FBTyxZQUFZLGtCQUFBLEVBQW1CLENBQ3RDZCxHQUFpQmMsQ0FBTSxDQUFBLENBR3ZCLE1BQU03QyxFQUFBQSxDQUFNLEdBQUksQ0FBQSxDQUNoQixNQUFNeUMsRUFBQUEsQ0FBZUksQ0FBTSxFQUUzQixHQUFJLENBQ0YsT0FBTyxNQUFNSCxFQUFBQSxDQUFXLENBQUUsTUFBQSxDQUFBM00sQ0FBQUEsQ0FBUSxRQUFBLENBQUE2TSxDQUFBQSxDQUFVLFNBQUEsQ0FBQUQsQ0FBVSxDQUFDLENBQ3pELENBQUEsTUFBUzFNLEVBQUcsQ0FDVixHQUFNLENBQUUsT0FBQSxDQUFBM0MsQ0FBQUEsQ0FBUyxLQUFBLENBQUE2UCxDQUFNLENBQUEsQ0FBSWxOLENBQUFBLENBQzNCLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSx1QkFBQSxFQUEwQixJQUFBLENBQUssU0FBQSxDQUFVLENBQUUsT0FBQUYsQ0FBQUEsQ0FBUSxPQUFBLENBQUF6QyxDQUFBQSxDQUFTLEtBQUEsQ0FBQTZQLENBQU0sQ0FBQyxDQUFDLENBQUEsQ0FBRSxDQUN4RixDQUNGLENDNUdBLGVBQXNCQyxHQUFPQyxDQUFBQSxDQUFtQnROLENBQUFBLENBQWdCSixDQUFBQSxDQUFpRCxDQUcvRyxJQUFBNEUsQ0FBQUEsQ0FBQSxPQUZBLEdBQU0sQ0FBRSxJQUFBZ0MsQ0FBQUEsQ0FBSyxLQUFBLENBQUF4RixFQUFPLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxRQUFBLENBQUFzTSxDQUFBQSxDQUFVLFNBQUEsQ0FBQWhHLENBQUFBLENBQVcsUUFBQUQsQ0FBUSxDQUFBLENBQUkxSCxFQUU3RCxJQUFZdUosQ0FBQUEsQ0FBVXhFLEVBQUFILENBQUFBLENBQUEsTUFBTXNDLENBQUFBLENBQWdCLE1BQUEsQ0FBTyxDQUFFLEtBQUEsQ0FBQTlGLEVBQU8sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEdBQUEsQ0FBQXVGLENBQUFBLENBQUssT0FBQSxDQUFBYyxDQUFBQSxDQUFTLFVBQUFDLENBQVUsQ0FBQyxDQUFBLENBQXZFLENBQUEsQ0FBQSxDQUFBLENBRXRCLElBQU1pRyxDQUFBQSxDQUFRLEtBQUssSUFBQSxDQUFLaEgsQ0FBQUEsQ0FBTStHLENBQVEsQ0FBQSxDQUN0QyxJQUFNRSxFQUFnQixHQUFBLENBQU9qSCxDQUFBQSxDQUU3QixJQUFJa0gsQ0FBQUEsQ0FBVSxDQUFBLENBQ2QsSUFBSUMsRUFDSixJQUFJQyxDQUFBQSxDQUFXLENBQUEsQ0FDZixJQUFJQyxDQUFBQSxDQUNKLElBQUlDLEVBQ0osSUFBSUMsQ0FBQUEsQ0FDSixJQUFNQyxDQUFBQSxDQUFZLElBQUk1RixFQUFBQSxDQUFlNUIsQ0FBRyxDQUFBLENBRXhDLElBQUlrQixFQUNKLElBQU11RyxDQUFBQSxDQUFpQnZKLEdBQWtCLENBQ3ZDZ0osQ0FBQUEsRUFBQUEsQ0FDQXZFLENBQUFBLENBQVEsVUFBQSxDQUFXekUsQ0FBSyxDQUFBLENBQUUsTUFBT3hFLENBQUFBLEVBQU8yTixDQUFBQSxHQUFnQjNOLENBQUUsRUFDNUQsQ0FBQSxDQUVBLElBQU1nTyxFQUFRLENBQUN0RSxDQUFBQSxDQUFhdUUsQ0FBQUEsQ0FBYW5GLEVBQUFBLEdBQXVCLENBQzlELEdBQUk2RSxFQUFhLENBQ2ZFLENBQUFBLEdBQVdGLENBQVcsQ0FBQSxDQUN0QixNQUNGLENBRUEsR0FBSTlFLEVBQUFBLENBQVFDLEVBQUssQ0FBQSxDQUFHLE9BRXBCLElBQU03SCxHQUFTNkgsRUFBQUEsQ0FBTSxRQUFBLEdBQ2ZvRixDQUFBQSxDQUFjbE4sQ0FBQUEsQ0FBWUMsR0FBUTZILEVBQUFBLENBQU0sT0FBQSxFQUFTLENBQUEsQ0FDdkQsR0FBSW9GLENBQUFBLEdBQWdCLE9BQVcsQ0FDN0JQLENBQUFBLEdBQWdCLElBQUksS0FBQSxDQUFNLENBQUEsZUFBQSxFQUFrQkgsQ0FBTyxDQUFBLENBQUUsQ0FBQSxDQUNyRCxNQUNGLENBRUEsSUFBTVcsRUFBQUEsQ0FBY3JOLEVBQVEsQ0FBQSxDQUN0QnNOLEVBQUFBLENBQVUsTUFBQSxDQUFPLElBQUEsQ0FBS25OLEVBQUFBLENBQU8sTUFBQSxDQUFRQSxHQUFPLFVBQUEsQ0FBWUYsQ0FBQUEsQ0FBU29OLEVBQVcsQ0FBQSxDQUVsRixHQUFJVixDQUFBQSxHQUFvQixPQUN0Qk0sQ0FBQUEsQ0FBY0ssRUFBTyxFQUNyQk4sQ0FBQUEsQ0FBVSxLQUFBLEdBQ1ZMLENBQUFBLENBQWtCUyxDQUFBQSxDQUFBQSxLQUNiLENBQ0wsSUFBTUcsRUFBQUEsQ0FBWUgsQ0FBQUEsQ0FBY1QsRUFDaEMsR0FBSVksRUFBQUEsRUFBYWQsRUFBZ0IsRUFBQSxDQUFLLENBQ3BDLEdBQUljLEVBQUFBLEVBQWFkLENBQUFBLENBQWdCLEdBQUEsQ0FDL0JRLENBQUFBLENBQWNLLEVBQU8sQ0FBQSxDQUNyQk4sRUFBVSxLQUFBLEVBQU0sQ0FBQSxLQUNYLENBQ0wsSUFBTVEsRUFBQUEsQ0FBaUIsS0FBSyxLQUFBLENBQU1ELEVBQUFBLENBQVlkLENBQWEsQ0FBQSxDQUMzRE8sQ0FBQUEsQ0FBVSxPQUFBLENBQVFRLEdBQWlCLENBQUMsQ0FBQSxDQUNwQ1IsQ0FBQUEsQ0FBVSxLQUFBLEVBQU0sQ0FDaEIsSUFBQSxJQUFTMU0sR0FBSSxDQUFBLENBQUdBLEVBQUFBLENBQUlrTixFQUFBQSxFQUFrQmQsQ0FBQUEsQ0FBVUYsQ0FBQUEsQ0FBT2xNLEVBQUFBLEVBQUFBLENBQ3JEMk0sRUFBY0ssRUFBTyxFQUV6QixDQUNBWCxDQUFBQSxDQUFrQlMsRUFDcEIsQ0FDRixDQUVBLElBQU1LLEVBQUFBLENBQWMsSUFBQSxDQUFLLEtBQUEsQ0FBT2YsQ0FBQUEsQ0FBVUYsRUFBUyxHQUFHLENBQUEsQ0FDbEQsS0FBSyxHQUFBLENBQUlpQixFQUFBQSxDQUFjYixDQUFRLENBQUEsQ0FBSSxFQUFBLEdBQ3JDQSxDQUFBQSxDQUFXYSxFQUFBQSxDQUNYbkIsQ0FBQUEsQ0FBTyxhQUFBLENBQWNNLENBQVEsQ0FBQSxDQUFBLENBRy9CLElBQU1jLEdBQWFuQixDQUFBQSxDQUFXLEdBQUEsQ0FBQSxDQUMxQmEsR0FBZU0sRUFBQUEsQ0FBYWpCLENBQUFBLENBQWdCLEVBQUEsRUFBT0MsQ0FBQUEsRUFBV0YsQ0FBQUEsR0FDaEVNLENBQUFBLEtBRUosQ0FBQSxDQUVBLElBQU01QixDQUFBQSxDQUFNLE1BQU1pQixFQUFBQSxDQUFXLENBQzNCLE9BQUFuTixDQUFBQSxDQUNBLFFBQUEsQ0FBVUosQ0FBQUEsQ0FDVixTQUFBLENBQVcsU0FBWSxDQUNqQjJILElBQ0ZHLENBQUFBLENBQVEsTUFBTXdCLEdBQWtCLENBQzlCLE9BQUEsQ0FBQUMsRUFDQSxjQUFBLENBQWdCLElBQU13RSxDQUFBQSxFQUFtQixDQUFBLENBQ3pDLE9BQUEsQ0FBVXpOLENBQUFBLEVBQU8yTixJQUFnQjNOLENBQ25DLENBQUMsR0FFTCxDQUNGLENBQUMsRUFDRCxJQUFNd0IsQ0FBQUEsQ0FBTXdLLENBQUFBLENBQUksV0FBQSxDQUFZLFFBQUEsQ0FDNUJBLENBQUFBLENBQUksWUFBWSxZQUFBLENBQWExRixDQUFHLEVBQzNCMEYsQ0FBQUEsQ0FBSSxXQUFBLENBQVksWUFBVyxFQUFHQSxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxhQUFBLEVBQWMsQ0FDakV4SyxDQUFBQSxDQUFJLE9BQU8sS0FBSyxDQUFBLENBQ2hCd0ssQ0FBQUEsQ0FBSSxXQUFBLENBQVksRUFBQSxDQUFHLE9BQUEsQ0FBU2dDLENBQUssQ0FBQSxDQUVqQyxHQUFJLENBQ0YsTUFBTXpNLENBQUFBLENBQVdDLENBQUcsRUFDcEIsTUFBTSxJQUFJLFFBQWMsQ0FBQ2MsQ0FBQUEsQ0FBR21NLElBQU8sQ0FBQ2IsQ0FBQUEsQ0FBVUMsQ0FBUSxDQUFBLENBQUksQ0FBQ3ZMLENBQUFBLENBQUdtTSxDQUFDLENBQUUsRUFDbkUsUUFBRSxDQUNBLE1BQU1oTixFQUFVRCxDQUFHLENBQUEsQ0FDbkJ3SyxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxHQUFBLENBQUksT0FBQSxDQUFTZ0MsQ0FBSyxDQUFBLENBQ2xDaEMsQ0FBQUEsQ0FBSSxPQUFNLENBQ1YsTUFBTXhFLEdBQU8sUUFBQSxFQUFTLENBQ3RCLE1BQU15QixDQUFBQSxDQUFRLE1BQUEsR0FDaEIsQ0FFQSxHQUFJMEUsQ0FBQUEsRUFBZUgsQ0FBQUEsR0FBWSxDQUFBLENBQzdCLE1BQU1HLENBQUFBLEVBQWUsSUFBSSxLQUFBLENBQU0sb0JBQW9CLENBQUEsQ0FBQSxLQUM5QyxDQUNMLElBQU1lLENBQUFBLENBQVlaLEVBQVUsUUFBQSxFQUFTLENBQ3JDLE9BQU8sQ0FBRSxPQUFBLENBQUFOLEVBQVMsSUFBQSxDQUFNa0IsQ0FBQUEsQ0FBVSxJQUFBLENBQU0sT0FBQSxDQUFBdEgsQ0FBUSxDQUNsRCxRQTFHQTFDLEVBQUFBLENBQUEsQ0FBQSxJQUFBQyxFQUFBRCxFQUFBQSxDQUFBRSxFQUFBQSxDQUFBLGtCQUFBcUQsRUFBQUEsQ0FBQXBELENBQUFBLENBQUFQLENBQUFBLENBQUFLLENBQUFBLENBQUFDLEVBQUFBLENBQUFBLENBQUFxRCxFQUFBQSxFQUFBLE1BQUFBLEdBQUFBLENBMkdGLENDcEhPLFNBQVMwRyxHQUFtQm5OLENBQUFBLENBQWVvTixDQUFBQSxDQUErQixDQUMvRSxPQUFPLElBQUksT0FBQSxDQUFRLENBQUNyUixDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU0yTSxDQUFBQSxDQUFVLFVBQUEsQ0FBVyxJQUFNLENBQy9CM0ksQ0FBQUEsQ0FBSSxHQUFBLENBQUksU0FBQSxDQUFXcU4sQ0FBTyxDQUFBLENBQzFCclIsRUFBTyxJQUFJLEtBQUEsQ0FBTSw0Q0FBNEQsQ0FBQyxFQUNoRixFQUFHLEdBQWtCLENBQUEsQ0FFZnFSLENBQUFBLENBQVUsQ0FBQ25LLENBQUFBLENBQW1Cb0ssQ0FBQUEsR0FBbUIsQ0FDakRBLENBQUFBLEdBQVcsb0NBQUEsR0FDYixhQUFhM0UsQ0FBTyxDQUFBLENBQ3BCM0ksRUFBSSxHQUFBLENBQUksU0FBQSxDQUFXcU4sQ0FBTyxDQUFBLENBQzFCdFIsQ0FBQUEsRUFBUSxFQUVaLEVBQ0FpRSxDQUFBQSxDQUFJLEVBQUEsQ0FBRyxVQUFXcU4sQ0FBTyxDQUFBLENBQ3pCck4sRUFBSSxXQUFBLENBQVksZ0NBQUEsQ0FBa0MsQ0FDaEQsTUFBQSxDQUFRLFNBQUEsQ0FDUixNQUFBLENBQUFvTixDQUNGLENBQUMsRUFDSCxDQUFDLENBQ0gsQ0FFTyxTQUFTRyxHQUFpQnZOLENBQUFBLENBQThCLENBQzdELE9BQU9BLENBQUFBLENBQUksV0FBQSxDQUFZLGdDQUFBLENBQWtDLENBQUUsTUFBQSxDQUFRLE9BQVEsQ0FBQyxDQUM5RSxDQzVCTyxJQUFNd04sRUFBQUEsQ0FBTixLQUFjLENBQ25CLFdBQUEsQ0FBcUJDLENBQUFBLENBQW9CLENBQXBCLGVBQUFBLEVBQXFCLENBQXJCLFNBQUEsQ0FFckIsSUFBSSxLQUFBLEVBQVcsQ0FDYixPQUFLLElBQUEsQ0FBSyxZQUFBLEdBQ1IsSUFBQSxDQUFLLE1BQUEsQ0FBUyxJQUFBLENBQUssU0FBQSxHQUNuQixJQUFBLENBQUssWUFBQSxDQUFlLE1BRWYsSUFBQSxDQUFLLE1BQ2QsQ0FFQSxJQUFJLFdBQUEsRUFBdUIsQ0FDekIsT0FBTyxJQUFBLENBQUssWUFDZCxDQUVRLFlBQUEsQ0FBZSxLQUFBLENBQ2YsTUFDVixDQUFBLENDakJPLElBQU1DLENBQUFBLENBQWMsZUFrQnBCLFNBQVNDLEVBQUFBLENBQWtCcFAsQ0FBQUEsQ0FBb0MsQ0FFcEUsT0FBTyxDQUFBO0FBQUEsRUFBQSxFQUR3Qyx5Q0FFbkM7QUFBQSxhQUFBLEVBQ0NtUCxDQUFXLENBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQUFBLEVBb0ZOQSxDQUFXLENBQUE7QUFBQTs7QUFBQSxTQUFBLEVBR3BCQSxDQUFXLENBQUE7QUFBQSxLQUFBLENBRXRCLENBRU8sU0FBU0UsRUFBQUEsQ0FBVUMsQ0FBQUEsQ0FBNkIsQ0FDckQsT0FBTyxDQUFBLEVBQUdILENBQVcsQ0FBQSxTQUFBLEVBQVlHLENBQVcsQ0FBQSxDQUFBLENBQzlDLENBRU8sU0FBU0MsRUFBQUEsRUFBa0IsQ0FDaEMsT0FBTyxDQUFBLFdBQUEsRUFBY0osQ0FBVyxDQUFBLGtCQUFBLEVBQXFCQSxDQUFXLENBQUEsUUFBQSxDQUNsRSxDQzNHQSxJQUFNdEUsRUFBQUEsQ0FBTSxTQUFBLENBRVosU0FBUzJFLEVBQUFBLENBQWdCdkQsQ0FBQUEsQ0FBb0JsTCxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQnlPLENBQUFBLENBQWtDLENBQzVHLE9BQU8sSUFBSSxPQUFBLENBQVNqUyxDQUFBQSxFQUFZLENBQzlCLElBQU1zUixDQUFBQSxDQUFVLENBQUNuRixDQUFBQSxDQUFhK0YsQ0FBQUEsQ0FBYTNHLENBQUFBLEdBQXVCLENBQ2hFLEdBQUlELEVBQUFBLENBQVFDLENBQUssQ0FBQSxDQUFHLE9BQ3BCLElBQU03SCxDQUFBQSxDQUFTNkgsQ0FBQUEsQ0FBTSxRQUFBLEVBQVMsQ0FDeEI0RyxDQUFBQSxDQUFLMU8sQ0FBQUEsQ0FBWUMsQ0FBQUEsQ0FBUTZILENBQUFBLENBQU0sT0FBQSxFQUFTLEVBQzlDLEdBQUk0RyxDQUFBQSxHQUFPLE1BQUEsRUFBYUEsQ0FBQUEsQ0FBS0YsQ0FBQUEsQ0FBUyxDQUNwQ3JSLENBQUFBLENBQU8sSUFBQSxDQUFLeU0sRUFBQUEsQ0FBSyxDQUFBLGVBQUEsRUFBa0I4RSxDQUFFLENBQUEsYUFBQSxFQUFnQkYsQ0FBTyxDQUFBLENBQUUsQ0FBQSxDQUM5RCxNQUNGLENBQ0F4RCxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxZQUFBLEVBQWEsQ0FDN0JBLENBQUFBLENBQUksV0FBQSxDQUFZLEdBQUEsQ0FBSSxPQUFBLENBQVM2QyxDQUFPLENBQUEsQ0FDcEN0UixDQUFBQSxDQUFRLE1BQUEsQ0FBTyxJQUFBLENBQUswRCxDQUFBQSxDQUFPLE1BQUEsQ0FBUUEsQ0FBQUEsQ0FBTyxVQUFBLENBQVlGLENBQUFBLENBQVNELENBQUFBLENBQVEsQ0FBQyxDQUFDLEVBQzNFLENBQUEsQ0FDQWtMLENBQUFBLENBQUksV0FBQSxDQUFZLEVBQUEsQ0FBRyxPQUFBLENBQVM2QyxDQUFPLEVBQ3JDLENBQUMsQ0FDSCxDQUVBLGVBQXNCYyxFQUFBQSxDQUFNdkMsQ0FBQUEsQ0FBbUJ0TixDQUFBQSxDQUFnQkosQ0FBQUEsQ0FBaUQsQ0FJOUcsSUFBQTRFLENBQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FIQSxHQUFNLENBQUUsR0FBQSxDQUFBZ0MsQ0FBQUEsQ0FBSyxLQUFBLENBQUF4RixDQUFBQSxDQUFPLE9BQUFDLENBQUFBLENBQVEsUUFBQSxDQUFBc00sQ0FBQUEsQ0FBVSxTQUFBLENBQUFoRyxDQUFBQSxDQUFXLE9BQUEsQ0FBQUQsQ0FBUSxDQUFBLENBQUkxSCxDQUFBQSxDQUN6RDJILENBQUFBLEVBQVdsSixDQUFBQSxDQUFPLElBQUEsQ0FBS3lNLEVBQUFBLENBQUssb0NBQW9DLENBQUEsQ0FFcEUsSUFBWWdGLENBQUFBLENBQVduTCxDQUFBQSxDQUFBSCxDQUFBQSxDQUFBLE1BQU1zQyxDQUFBQSxDQUFnQixNQUFBLENBQU8sQ0FBRSxLQUFBLENBQUE5RixDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxHQUFBLENBQUF1RixDQUFBQSxDQUFLLE9BQUEsQ0FBQWMsQ0FBQUEsQ0FBUyxTQUFBLENBQUFDLENBQVUsQ0FBQyxDQUFBLENBQXZFLENBQUEsQ0FBQSxDQUFBLENBRXZCLElBQU1pRyxDQUFBQSxDQUFRLElBQUEsQ0FBSyxJQUFBLENBQUtoSCxDQUFBQSxDQUFNK0csQ0FBUSxDQUFBLENBQ3RDLElBQU1FLENBQUFBLENBQWdCLEdBQUEsQ0FBT2pILENBQUFBLENBQzdCLElBQUlrSCxDQUFBQSxDQUFVLENBQUEsQ0FDZCxJQUFJRSxDQUFBQSxDQUFXLENBQUEsQ0FFZixJQUFNMUIsQ0FBQUEsQ0FBTSxNQUFNaUIsRUFBQUEsQ0FBVyxDQUFFLE1BQUEsQ0FBQW5OLENBQUFBLENBQVEsUUFBQSxDQUFVSixDQUFRLENBQUMsQ0FBQSxDQUMxRCxJQUFNOEIsQ0FBQUEsQ0FBTXdLLENBQUFBLENBQUksV0FBQSxDQUFZLFFBQUEsQ0FDNUIsSUFBTTZELENBQUFBLENBQVksSUFBSWIsRUFBQUEsQ0FBSyxJQUFNaEQsQ0FBQUEsQ0FBSSxXQUFBLENBQVksU0FBQSxDQUFVLE1BQUEsQ0FBTyxDQUFDLENBQUMsQ0FBQSxDQUNwRSxHQUFJLENBQ0Z4SyxDQUFBQSxDQUFJLE1BQUEsQ0FBTyxLQUFLLENBQUEsQ0FFaEJ3SyxDQUFBQSxDQUFJLFdBQUEsQ0FBWSxZQUFBLEVBQWEsQ0FDN0JBLENBQUFBLENBQUksV0FBQSxDQUFZLFlBQUEsQ0FBYTFGLENBQUcsQ0FBQSxDQUNoQyxNQUFNeUksR0FBaUJ2TixDQUFHLENBQUEsQ0FFMUIsSUFBTXNPLENBQUFBLENBQVNELENBQUFBLENBQVUsS0FBQSxDQUN6QixNQUFNQyxDQUFBQSxFQUFRLGlCQUFBLENBQWtCWCxFQUFBQSxFQUFtQixDQUFBLENBQ25ELE1BQU1XLENBQUFBLEVBQVEsaUJBQUEsQ0FBa0JWLEVBQUFBLENBQVUsQ0FBQyxDQUFDLENBQUEsQ0FDNUMsTUFBTTdOLENBQUFBLENBQVdDLENBQUcsQ0FBQSxDQUVwQixJQUFBLElBQVNnRCxDQUFBQSxDQUFRLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBUThJLENBQUFBLENBQU85SSxDQUFBQSxFQUFBQSxDQUFTLENBQzFDLElBQU11TCxDQUFBQSxDQUFBQSxDQUFXdkwsRUFBUSxDQUFBLEVBQUsrSSxDQUFBQSxDQUN4QnRNLEVBQUFBLENBQVNzTyxFQUFBQSxDQUFnQnZELENBQUFBLENBQUtsTCxDQUFBQSxDQUFPQyxDQUFBQSxDQUFRZ1AsQ0FBQUEsQ0FBVXhDLENBQUFBLENBQWdCLENBQUMsQ0FBQSxDQUU5RSxNQUFNb0IsRUFBQUEsQ0FBbUJuTixDQUFBQSxDQUFLK0wsQ0FBYSxDQUFBLENBQzNDLE1BQU11QyxDQUFBQSxFQUFRLGlCQUFBLENBQWtCVixFQUFBQSxDQUFVVyxDQUFPLENBQUMsQ0FBQSxDQUVsRC9ELENBQUFBLENBQUksV0FBQSxDQUFZLGFBQUEsRUFBYyxDQUM5QixNQUFNNEQsQ0FBQUEsQ0FBUyxVQUFBLENBQVcsTUFBTTNPLEVBQU0sQ0FBQSxDQUN0Q3VNLENBQUFBLEVBQUFBLENBRUEsSUFBTWUsQ0FBQUEsQ0FBYyxJQUFBLENBQUssS0FBQSxDQUFPZixDQUFBQSxDQUFVRixDQUFBQSxDQUFTLEdBQUcsQ0FBQSxDQUNsRCxJQUFBLENBQUssR0FBQSxDQUFJaUIsQ0FBQUEsQ0FBY2IsQ0FBUSxDQUFBLENBQUksRUFBQSxHQUNyQ0EsQ0FBQUEsQ0FBV2EsQ0FBQUEsQ0FDWG5CLENBQUFBLENBQU8sYUFBQSxDQUFjTSxDQUFRLENBQUEsRUFFakMsQ0FDRixDQUFBLE9BQUUsQ0FDQSxNQUFNbUMsQ0FBQUEsQ0FBVSxLQUFBLEVBQU8saUJBQUEsQ0FBa0JQLEVBQUFBLEVBQVMsQ0FBQSxDQUNsRCxNQUFNN04sQ0FBQUEsQ0FBVUQsQ0FBRyxDQUFBLENBQ25CQSxDQUFBQSxDQUFJLE1BQUEsRUFBTyxDQUNYd0ssQ0FBQUEsQ0FBSSxLQUFBLEVBQU0sQ0FDVixNQUFNNEQsQ0FBQUEsQ0FBUyxNQUFBLEdBQ2pCLENBRUEsR0FBSXBDLENBQUFBLEdBQVksQ0FBQSxDQUNkLE1BQU0sSUFBSSxLQUFBLENBQU0sb0JBQW9CLENBQUEsQ0FBQSxLQUVwQyxPQUFPLENBQUUsT0FBQSxDQUFBQSxDQUFBQSxDQUFTLElBQUEsQ0FBTSxDQUFBLENBQUcsT0FBQSxDQUFBcEcsQ0FBUSxDQUFBLENBQUEsTUFsRHJDLENBQUEsQ0FBQSxDQUFBLElBQUF6QyxFQUFBLENBQUEsQ0FBQUMsQ0FBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBLElBQUFxRCxDQUFBQSxDQUFBcEQsQ0FBQUEsQ0FBQVAsQ0FBQUEsQ0FBQUssQ0FBQUEsQ0FBQUMsQ0FBQUEsQ0FBQUEsQ0FBQXFELENBQUFBLEVBQUEsTUFBQUEsRUFBQUEsQ0FvREYsQ0MzRUEsSUFBTTJDLEVBQUFBLENBQU0sT0FBQSxDQUVaLFNBQVNvRixFQUFBQSxFQUFnQixDQUN2QjdSLENBQUFBLENBQU8sS0FBQSxDQUFNeU0sRUFBQUEsQ0FBSyxlQUFBLENBQWlCcUYsWUFBQUEsQ0FBSSxtQkFBQSxFQUFxQixFQUM5RCxDQUVBQSxZQUFBQSxDQUFJLElBQUEsRUFBTSxJQUFBLEVBQUssQ0FDZkEsWUFBQUEsQ0FBSSxHQUFHLG1CQUFBLENBQXFCLElBQU0sQ0FBQyxDQUFDLENBQUEsQ0FFcEN4USxFQUFBQSxDQUFRLENBQ04sSUFBQSxDQUFNLEtBQUEsQ0FDTixRQUFBLENBQVUsQ0FDUixHQUFHRCxFQUFBQSxDQUNILFNBQUEsQ0FBVyxLQUFBLENBQ1gsYUFBQSxDQUFlLEtBQUEsQ0FDZixhQUFBLENBQWUsS0FDakIsQ0FBQSxDQUNBLEdBQUEsQ0FBSyxNQUFPTSxDQUFBQSxDQUFRSixDQUFBQSxHQUFZLENBQzlCLElBQU13USxDQUFBQSxDQUFRclMsQ0FBQUEsRUFBaUIsQ0FDN0JvUyxZQUFBQSxDQUFJLElBQUEsRUFBSyxDQUNULE9BQUEsQ0FBUSxJQUFBLENBQUtwUyxDQUFJLEVBQ25CLENBQUEsQ0FDQSxPQUFBLENBQVEsSUFBQSxDQUFLLFNBQUEsQ0FBVyxJQUFNcVMsQ0FBQUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxDQUN2QyxPQUFBLENBQVEsSUFBQSxDQUFLLFFBQUEsQ0FBVSxJQUFNQSxDQUFBQSxDQUFLLEdBQUcsQ0FBQyxDQUFBLENBQ3RDLE9BQUEsQ0FBUSxJQUFBLENBQUssTUFBQSxDQUFTQyxDQUFBQSxFQUFNRCxDQUFBQSxDQUFLQyxDQUFDLENBQUMsQ0FBQSxDQUNuQ3pLLFNBQUFBLENBQUdqSyxFQUFBQSxDQUFjLHNCQUFzQixFQUN2QyxJQUFNMlUsQ0FBQUEsQ0FBTSxNQUFNN1AsRUFBQUEsQ0FBVzlFLEVBQVksQ0FBQSxDQUN6QyxHQUFJLENBQ0Z3VSxZQUFBQSxDQUFJLEVBQUEsQ0FBRyxpQkFBQSxDQUFtQkQsRUFBYSxDQUFBLENBQ3ZDLE1BQU1DLFlBQUFBLENBQUksU0FBQSxFQUFVLENBQ3BCck8sRUFBQUEsRUFBaUIsQ0FDakJvTyxFQUFBQSxFQUFjLENBQ2QsTUFBTUssY0FBQUEsQ0FBTTlVLFlBQUFBLENBQVFtRSxDQUFBQSxDQUFRLE9BQU8sQ0FBQSxDQUFHLENBQUUsU0FBQSxDQUFXLENBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDekQsSUFBTXVNLENBQUFBLENBQVN2TSxDQUFBQSxDQUFRLGFBQUEsQ0FBZ0JpUSxFQUFBQSxDQUFReEMsRUFBQUEsQ0FDL0NpRCxDQUFBQSxDQUFJLFNBQUEsQ0FBVSxNQUFNbkUsQ0FBQUEsQ0FBT21FLENBQUFBLENBQUt0USxDQUFBQSxDQUFRSixDQUFPLENBQUMsRUFDbEQsQ0FBQSxNQUFTTSxDQUFBQSxDQUFHLENBQ1YsSUFBTTdDLENBQUFBLENBQVE2QyxDQUFBQSxDQUNkb1EsQ0FBQUEsQ0FBSSxVQUFBLENBQVdqVCxDQUFBQSxDQUFNLEtBQUEsRUFBUyxlQUFlLEVBQy9DLENBQUEsT0FBRSxDQUNBOFMsWUFBQUEsQ0FBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEZXRlcm1pbmlzdGljID0gZW52W1wiUFVQX0RFVEVSTUlOSVNUSUNcIl0gPT09IFwiMVwiO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cElwY1NvY2tldCA9IGVudltcIlBVUF9JUENfU09DS0VUXCJdO1xuXG5leHBvcnQgY29uc3QgcHVwRXhwZXJpbWVudGFsUHVwcGV0ZWVyID0gZW52W1wiUFVQX0VYUEVSSU1FTlRBTF9QVVBQRVRFRVJcIl0gPT09IFwiMVwiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCB0eXBlIFNlcmlhbGl6YWJsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlciB8IFNlcmlhbGl6YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcIm1lc3NhZ2VcIiwgZGlzcGF0Y2gpXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4geyBwcm9jZXNzOiBwcm9jLCB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBwdXBEZXRlcm1pbmlzdGljLCBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXRwdXQubXA0XCI7XG5cbmV4cG9ydCBjb25zdCBSZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk91dHB1dCBtcDQgZmlsZSBwYXRoXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZWZhdWx0czogUmVuZGVyT3B0aW9ucztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBvcHRpb25zLmRlZmF1bHRzO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywg5oiWIGRhdGE6IFVSSVwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aD5cIiwgc2hhcGUub3V0RmlsZS5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29ubmVjdGlvbiwgY3JlYXRlU2VydmVyLCB0eXBlIFNvY2tldCB9IGZyb20gXCJuZXRcIjtcblxuY29uc3QgSEVBREVSX1NJWkUgPSA4O1xuXG5leHBvcnQgY29uc3QgZW51bSBJcGNNc2dUeXBlIHtcbiAgUFJPR1JFU1MgPSAxLFxuICBET05FID0gMixcbiAgRVJST1IgPSAzLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvY2tldDogU29ja2V0KSB7fVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5QUk9HUkVTUywgQnVmZmVyLmZyb20oYCR7dmFsdWV9YCkpO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKSB7XG4gICAgdGhpcy53cml0ZShJcGNNc2dUeXBlLkVSUk9SLCBCdWZmZXIuZnJvbShlcnJvcikpO1xuICAgIHRoaXMuX3NvY2tldC5lbmQoKTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5ET05FLCBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShwYXlsb2FkKSkpO1xuICAgIHRoaXMuX3NvY2tldC5lbmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgd3JpdGUodHlwZTogSXBjTXNnVHlwZSwgcGF5bG9hZDogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmFsbG9jKEhFQURFUl9TSVpFKTtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJMRSh0eXBlLCAwKTtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJMRShwYXlsb2FkLmJ5dGVMZW5ndGgsIDQpO1xuICAgIHRoaXMuX3NvY2tldC53cml0ZShoZWFkZXIpO1xuICAgIHRoaXMuX3NvY2tldC53cml0ZShwYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdElwYyhzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1dyaXRlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNvY2tldCA9IGNyZWF0ZUNvbm5lY3Rpb24oc29ja2V0UGF0aCk7XG4gICAgc29ja2V0Lm9uY2UoXCJjb25uZWN0XCIsICgpID0+IHJlc29sdmUobmV3IElwY1dyaXRlcihzb2NrZXQpKSk7XG4gICAgc29ja2V0Lm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjx7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIG1lc3NhZ2U6IFt0eXBlOiBJcGNNc2dUeXBlLCBidWZmZXI6IEJ1ZmZlcl07XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtdO1xufT4ge1xuICBwcml2YXRlIF9jaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIHByaXZhdGUgX2J1ZmZlcmVkID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc29ja2V0Lm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4gdGhpcy5vbkRhdGEoZGF0YSkpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImVycm9yXCIsIChlcnIpID0+IHRoaXMuZW1pdChcImVycm9yXCIsIGVycikpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHRoaXMuZW1pdChcImNsb3NlXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EYXRhKGRhdGE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX2NodW5rcy5wdXNoKGRhdGEpO1xuICAgIHRoaXMuX2J1ZmZlcmVkICs9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICB0aGlzLmZsdXNoKCk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKCk6IHZvaWQge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmICh0aGlzLl9idWZmZXJlZCA8IEhFQURFUl9TSVpFKSByZXR1cm47XG4gICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnBlZWsoSEVBREVSX1NJWkUpO1xuICAgICAgY29uc3QgdHlwZSA9IGhlYWRlci5yZWFkVUludDMyTEUoMCkgYXMgSXBjTXNnVHlwZTtcbiAgICAgIGNvbnN0IGxlbiA9IGhlYWRlci5yZWFkVUludDMyTEUoNCk7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSArIGxlbikgcmV0dXJuO1xuICAgICAgdGhpcy5jb25zdW1lKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmNvbnN1bWUobGVuKTtcbiAgICAgIHRoaXMuZW1pdChcIm1lc3NhZ2VcIiwgdHlwZSwgcGF5bG9hZCk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlBST0dSRVNTOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgTnVtYmVyKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBKU09OLnBhcnNlKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FUlJPUjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGVlayhuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGlmICh0aGlzLl9jaHVua3NbMF0gJiYgdGhpcy5fY2h1bmtzWzBdLmJ5dGVMZW5ndGggPj0gbikgcmV0dXJuIHRoaXMuX2NodW5rc1swXTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdCh0aGlzLl9jaHVua3MpLnN1YmFycmF5KDAsIG4pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lKG46IG51bWJlcik6IEJ1ZmZlciB7XG4gICAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBuKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuX2NodW5rc1swXSE7XG4gICAgICBjb25zdCB0YWtlID0gTWF0aC5taW4oY2h1bmsuYnl0ZUxlbmd0aCwgbiAtIG9mZnNldCk7XG4gICAgICBjaHVuay5jb3B5KG91dCwgb2Zmc2V0LCAwLCB0YWtlKTtcbiAgICAgIGlmICh0YWtlID09PSBjaHVuay5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NodW5rcy5zaGlmdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2h1bmtzWzBdID0gY2h1bmsuc3ViYXJyYXkodGFrZSk7XG4gICAgICB9XG4gICAgICBvZmZzZXQgKz0gdGFrZTtcbiAgICB9XG4gICAgdGhpcy5fYnVmZmVyZWQgLT0gbjtcbiAgICByZXR1cm4gb3V0O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjU2VydmVyIHtcbiAgd2FpdEZvckNvbm5lY3Rpb24oKTogUHJvbWlzZTxJcGNSZWFkZXI+O1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSXBjU2VydmVyKHNvY2tldFBhdGg6IHN0cmluZyk6IFByb21pc2U8SXBjU2VydmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgc2VydmVyLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIHNlcnZlci5saXN0ZW4oc29ja2V0UGF0aCwgKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHdhaXRGb3JDb25uZWN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJcGNSZWFkZXI+KChvaywgbm8pID0+IHtcbiAgICAgICAgICAgIHNlcnZlci5vbmNlKFwiY29ubmVjdGlvblwiLCAoc29ja2V0KSA9PiBvayhuZXcgSXBjUmVhZGVyKHNvY2tldCkpKTtcbiAgICAgICAgICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgbm8pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RlZ29IVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAke2hlaWdodH1weDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogMXB4OyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVJLRVJfV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGJpdCA9ICh0aW1lc3RhbXBJbnQgPj4+IChNQVJLRVJfV0lEVEggLSAxIC0gaSkpICYgMTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGJpdCA/IDI1NSA6IDA7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJSdW50aW1lLmV2YWx1YXRlXCIsIHtcbiAgICBleHByZXNzaW9uOiBgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18oKWAsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIlJ1bnRpbWUuZXZhbHVhdGVcIiwge1xuICAgIGV4cHJlc3Npb246IGB3aW5kb3cuX19wdXBfc3RvcF9zdGVnb19fKClgLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHtcbiAgICBzY2hlbWU6IFBVUF9TQ0hFTUUsXG4gICAgcHJpdmlsZWdlczoge1xuICAgICAgc3RhbmRhcmQ6IHRydWUsXG4gICAgICBzZWN1cmU6IHRydWUsXG4gICAgICBieXBhc3NDU1A6IHRydWUsXG4gICAgICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICAgICAgc3VwcG9ydEZldGNoQVBJOiB0cnVlLFxuICAgICAgY29yc0VuYWJsZWQ6IHRydWUsXG4gICAgICBzdHJlYW06IHRydWUsXG4gICAgICBjb2RlQ2FjaGU6IHRydWUsXG4gICAgfSxcbiAgfSxcbl0pO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQdXBQcm90b2NvbCgpOiB2b2lkIHtcbiAgcHJvdG9jb2wuaGFuZGxlKFBVUF9TQ0hFTUUsIChyZXEpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGNvbnN0IHNyYyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCI7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcIndcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcImhcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRTdGVnb0hUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShodG1sLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9IH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZWdvVVJMKHNyYzogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtQVVBfU0NIRU1FfTovL3N0ZWdvYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3JjXCIsIHNyYyk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogVm9pZEZ1bmN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBfZW5kZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5fZW5kZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImVuZGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgZm4oKVxuICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHJ1bik7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuZCgpIHtcbiAgICBpZiAodGhpcy5fZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZW5kZWQgPSB0cnVlO1xuICAgIHdoaWxlICh0aGlzLl9hY3RpdmUgPiAwIHx8IHRoaXMucGVuZGluZyA+IDApIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGaWx0ZXIsIEZpbHRlckdyYXBoLCBGaWx0ZXJJbk91dCwgRnJhbWUsIFBhY2tldCwgUmF0aW9uYWwgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcbnR5cGUgU3RyZWFtID0gUmV0dXJuVHlwZTxpbXBvcnQoXCJub2RlLWF2XCIpLkZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogYW55O1xuICBwcml2YXRlIF9idWZTaW5rPzogYW55O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBuZXcgUGFja2V0KCk7XG4gICAgdGhpcy5fcGt0LmFsbG9jKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9jdHgucmVjZWl2ZVBhY2tldCh0aGlzLl9wa3QpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImF1ZGlvLnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICB0aGlzLl9wa3Quc3RyZWFtSW5kZXggPSB0aGlzLl9zdHJlYW0uaW5kZXg7XG4gICAgICB0aGlzLl9wa3QucmVzY2FsZVRzKHRoaXMuX2N0eC50aW1lQmFzZSwgdGhpcy5fc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHRoaXMuX3BrdCk7XG4gICAgICB0aGlzLl9wa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5mdW5jdGlvbiBtYWtlU1dTQ29udGV4dCh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KSB7XG4gIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICBzd3MuZ2V0Q29udGV4dCh3aWR0aCwgaGVpZ2h0LCBwaXhGbXQsIHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFAsIFNXU19CSUxJTkVBUik7XG4gIHJldHVybiBzd3M7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBuZXcgUGFja2V0KCk7XG4gICAgdGhpcy5wa3QuYWxsb2MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIHRoaXMuX3N3cyA9IG1ha2VTV1NDb250ZXh0KHRoaXMuc3JjLndpZHRoLCB0aGlzLnNyYy5oZWlnaHQsIHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIFBhY2tldCB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogUmV0dXJuVHlwZTxGb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIobnVsbCksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgUGFja2V0LCBSYXRpb25hbCB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG50eXBlIFN0cmVhbSA9IFJldHVyblR5cGU8aW1wb3J0KFwibm9kZS1hdlwiKS5Gb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPjtcblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGNvZGVjTmFtZSwgY29kZWNUYWcsIGdsb2JhbEhlYWRlciwgY29kZWNPcHRzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHgud2lkdGggPSB3aWR0aDtcbiAgICBjdHguaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIGZwcyk7XG4gICAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChmcHMsIDEpO1xuICAgIGN0eC5nb3BTaXplID0gZnBzICogMjtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChiaXRyYXRlKTtcbiAgICBpZiAoZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhjb2RlY09wdHMpKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICAgIGlmIChjb2RlY1RhZykgY3R4LmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwidmlkZW9DdHgub3BlbjJcIik7XG5cbiAgICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gICAgcGt0LmFsbG9jKCk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwa3QgPSB0aGlzLl9wa3Q7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9jdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInZpZGVvLnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICBwa3Quc3RyZWFtSW5kZXggPSB0aGlzLl9zdHJlYW0uaW5kZXg7XG4gICAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgICBwa3QucmVzY2FsZVRzKHRoaXMuX2N0eC50aW1lQmFzZSwgdGhpcy5fc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfWVVWQTQyMFAsIEFWX1NBTVBMRV9GTVRfRkxUUCwgRkZfRU5DT0RFUl9BQUMsIEZGX0VOQ09ERVJfTElCWDI2NSB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyLmpzXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjLmpzXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF92aWRlbzogVmlkZW9FbmNvZGVyLFxuICAgIHByaXZhdGUgX2F1ZGlvOiBBdWRpb0VuY29kZXIgfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSBfbXV4ZXI6IEZvcm1hdE11eGVyLFxuICAgIHByaXZhdGUgX2xpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcixcbiAgICBwcml2YXRlIF9vdXRGaWxlOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfY29kZWM6IENvZGVjU3RhdGUsXG4gICkge31cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcblxuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJ1bHRyYWZhc3RcIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9MFwiIH0sXG4gICAgICBiaXRyYXRlOiA4XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuXG4gICAgbGV0IGF1ZGlvOiBBdWRpb0VuY29kZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgYXVkaW8gPSBhd2FpdCBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyxcbiAgICAgICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgICBtdXhlcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcblxuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKFxuICAgICAgdmlkZW8sXG4gICAgICBhdWRpbyxcbiAgICAgIG11eGVyLFxuICAgICAgbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSxcbiAgICAgIG91dEZpbGUsXG4gICAgICBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSxcbiAgICApO1xuICB9XG5cbiAgc2V0dXBBdWRpbyhzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fbGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHNyYywgZHN0LCBzd3MgfSA9IHRoaXMuX2NvZGVjO1xuICAgICAgb2soc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjLm1ha2VXcml0YWJsZSgpLCBcImJncmFTcmMubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhU3JjLmZyb21CdWZmZXJcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZHN0Lm1ha2VXcml0YWJsZSgpLCBcImJncmFEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHN3cy5zY2FsZUZyYW1lKGRzdCwgc3JjKSwgXCJiZ3JhU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgICByZXR1cm4gdGhpcy5fdmlkZW8uZW5jb2RlKGRzdCwgdGhpcy5fbXV4ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2xpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyBwa3QsIHNyYywgZHN0IH0gPSB0aGlzLl9jb2RlYztcbiAgICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMuX2NvZGVjLnBuZygpO1xuICAgICAgcGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgICAgcGt0LnVucmVmKCk7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZShzcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGRzdC5tYWtlV3JpdGFibGUoKSwgXCJwbmdEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgLy8gTk9URShBdXRva2FrYSk6IE11c3QgYWNjZXNzIHN3cyBoZXJlIHNpbmNlIGl0IGRlcGVuZHMgb24gc3JjIGZvcm1hdFxuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2NvZGVjLnN3cy5zY2FsZUZyYW1lKGRzdCwgc3JjKSwgXCJwbmdTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgIHJldHVybiB0aGlzLl92aWRlby5lbmNvZGUoZHN0LCB0aGlzLl9tdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hdWRpbykgYXdhaXQgdGhpcy5fbGltaXRlci5zY2hlZHVsZSgoKSA9PiB0aGlzLl9hdWRpbyEuZW5jb2RlKHBjbSwgdGhpcy5fbXV4ZXIpKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1c2luZyBfbSA9IHRoaXMuX211eGVyO1xuICAgICAgdXNpbmcgX3YgPSB0aGlzLl92aWRlbztcbiAgICAgIHVzaW5nIF9hID0gdGhpcy5fYXVkaW87XG4gICAgICBhd2FpdCB0aGlzLl9saW1pdGVyLmVuZCgpO1xuICAgICAgYXdhaXQgdGhpcy5fYXVkaW8/LmZsdXNoKHRoaXMuX211eGVyKTtcbiAgICAgIGF3YWl0IHRoaXMuX3ZpZGVvLmZsdXNoKHRoaXMuX211eGVyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vdXRGaWxlO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX2xpbWl0ZXIuZW5kKCk7XG4gICAgdGhpcy5fdmlkZW9bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCB0aGlzLl9tdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuZnJlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmcmVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB1c2luZyBfY29kZWMgPSB0aGlzLl9jb2RlYztcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuLyoqXG4gKiBGcmFtZSBkcm9wIHF1YWxpdHkgc2NvcmUgKDAgPSBwZXJmZWN0LCAxID0gd29yc3QpLlxuICpcbiAqIENvbWJpbmVzIHR3byBkaW1lbnNpb25zOlxuICogLSBHbG9iYWw6IG92ZXJhbGwgZHJvcCByYXRlIGFjcm9zcyB0aGUgdGltZWxpbmVcbiAqIC0gTG9jYWw6IHBlcmNlcHR1YWwgc2V2ZXJpdHkgb2YgY29uc2VjdXRpdmUgZHJvcHMgKGJ1cnN0cylcbiAqXG4gKiBVc2VzIGNvbXBsZW1lbnRhcnkgbXVsdGlwbGljYXRpb246IHNjb3JlID0gMSAtICgxLWcpKDEtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcmFtZURyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIGVuY29kZXIuICovXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGRyb3BwZWQuICovXG4gIGRyb3BwZWQoY291bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudEJ1cnN0ICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIEZpbmFsaXplIGFuZCByZXR1cm4gdGhlIHNjb3JlLiAqL1xuICBmaW5hbGl6ZSgpOiBGcmFtZURyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBpcGNNYWluLCBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBybSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL2VuY29kZXJcIjtcblxuY29uc3QgQVVESU9fQ0FQVFVSRV9TQ1JJUFQgPSBgXG4oZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18pIHJldHVybjtcbiAgd2luZG93Ll9fcHVwX2F1ZGlvX2NhcHR1cmluZ19fID0gdHJ1ZTtcblxuICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICBjb25zdCBjYXB0dXJlZENvbnRleHRzID0gbmV3IFdlYWtTZXQoKTtcbiAgY29uc3Qgc291cmNlZEVsZW1lbnRzID0gbmV3IFdlYWtTZXQoKTtcbiAgbGV0IG1ldGFTZW50ID0gZmFsc2U7XG5cbiAgY29uc3Qgb3JpZ0NyZWF0ZU1FUyA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlO1xuICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgc291cmNlZEVsZW1lbnRzLmFkZChlbCk7XG4gICAgcmV0dXJuIG9yaWdDcmVhdGVNRVMuY2FsbCh0aGlzLCBlbCk7XG4gIH07XG5cbiAgY29uc3Qgb3JpZ0Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG4gIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKGRlc3QsIG91dElkeCwgaW5JZHgpIHtcbiAgICBjb25zdCBjYXB0dXJlTm9kZSA9IGRlc3Q/LmNvbnRleHQ/Ll9fcHVwX2NhcHR1cmVOb2RlX187XG4gICAgaWYgKGNhcHR1cmVOb2RlICYmIGRlc3QgPT09IGRlc3QuY29udGV4dC5kZXN0aW5hdGlvbiAmJiB0aGlzICE9PSBjYXB0dXJlTm9kZSkge1xuICAgICAgb3JpZ0Nvbm5lY3QuY2FsbCh0aGlzLCBjYXB0dXJlTm9kZSwgb3V0SWR4LCBpbklkeCk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGRlc3QsIG91dElkeCwgaW5JZHgpO1xuICB9O1xuXG4gIGNvbnN0IE9yaWdBQyA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcbiAgaWYgKCFPcmlnQUMpIHJldHVybjtcblxuICBmdW5jdGlvbiBQYXRjaGVkQUMoKSB7XG4gICAgY29uc3QgY3R4ID0gbmV3IE9yaWdBQyguLi5hcmd1bWVudHMpO1xuICAgIGlmICghY2FwdHVyZWRDb250ZXh0cy5oYXMoY3R4KSkge1xuICAgICAgY2FwdHVyZWRDb250ZXh0cy5hZGQoY3R4KTtcbiAgICAgIGlmICghbWV0YVNlbnQpIHtcbiAgICAgICAgbWV0YVNlbnQgPSB0cnVlO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1tZXRhJywgeyBzYW1wbGVSYXRlOiBjdHguc2FtcGxlUmF0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlU2NyaXB0UHJvY2Vzc29yKDQwOTYsIDIsIDIpO1xuICAgICAgbm9kZS5vbmF1ZGlvcHJvY2VzcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IEwgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgICAgICBjb25zdCBSID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShMLmxlbmd0aCAqIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvdXRbaSAqIDJdID0gTFtpXTtcbiAgICAgICAgICBvdXRbaSAqIDIgKyAxXSA9IFJbaV07XG4gICAgICAgIH1cbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnYXVkaW8tY2h1bmsnLCBCdWZmZXIuZnJvbShvdXQuYnVmZmVyKSk7XG4gICAgICB9O1xuICAgICAgbm9kZS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICBjdHguX19wdXBfY2FwdHVyZU5vZGVfXyA9IG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbiAgUGF0Y2hlZEFDLnByb3RvdHlwZSA9IE9yaWdBQy5wcm90b3R5cGU7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihQYXRjaGVkQUMsIE9yaWdBQyk7XG4gIHdpbmRvdy5BdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG4gIGlmICgnd2Via2l0QXVkaW9Db250ZXh0JyBpbiB3aW5kb3cpIHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG5cbiAgY29uc3Qgb3JpZ1BsYXkgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5O1xuICBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9fcHVwX2NhcHR1cmVkX18pIHtcbiAgICAgIHRoaXMuX19wdXBfY2FwdHVyZWRfXyA9IHRydWU7XG4gICAgICBjb25zdCBlbCA9IHRoaXM7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzb3VyY2VkRWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICAgIGNvbnN0IGN0eCA9IG5ldyBQYXRjaGVkQUMoKTtcbiAgICAgICAgICBjdHguY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsKS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ1BsYXkuY2FsbCh0aGlzKTtcbiAgfTtcbn0pKCk7XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZSB7XG4gIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlT3B0aW9ucyB7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQXVkaW9DYXB0dXJlKHtcbiAgZW5jb2RlcixcbiAgZ2V0VmlkZW9UaW1lTXMsXG4gIG9uRXJyb3IsXG59OiBBdWRpb0NhcHR1cmVPcHRpb25zKTogUHJvbWlzZTxBdWRpb0NhcHR1cmU+IHtcbiAgY29uc3QgcHJlbG9hZFBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX2F1ZGlvX3ByZWxvYWRfJHtyYW5kb21VVUlEKCl9LmpzYCk7XG4gIGF3YWl0IHdyaXRlRmlsZShwcmVsb2FkUGF0aCwgQVVESU9fQ0FQVFVSRV9TQ1JJUFQpO1xuICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnJlZ2lzdGVyUHJlbG9hZFNjcmlwdCh7XG4gICAgdHlwZTogXCJmcmFtZVwiLFxuICAgIGlkOiBcInB1cC1hdWRpb1wiLFxuICAgIGZpbGVQYXRoOiBwcmVsb2FkUGF0aCxcbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihcImF1ZGlvLW1ldGFcIiwgYXN5bmMgKF9lLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgICBjb25zdCBzdGFydE1zID0gZ2V0VmlkZW9UaW1lTXMoKTtcbiAgICBlbmNvZGVyLnNldHVwQXVkaW8oc2FtcGxlUmF0ZSk7XG4gICAgY29uc3Qgc2lsZW5jZVNhbXBsZXMgPSBNYXRoLmNlaWwoKHN0YXJ0TXMgKiBzYW1wbGVSYXRlKSAvIDEwMDApO1xuICAgIGlmIChzaWxlbmNlU2FtcGxlcyA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKEJ1ZmZlci5hbGxvYyhzaWxlbmNlU2FtcGxlcyAqIDIgKiA0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihcImF1ZGlvLWNodW5rXCIsIGFzeW5jIChfZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgdGVhcmRvd24oKSB7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLW1ldGFcIik7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLWNodW5rXCIpO1xuICAgICAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi51bnJlZ2lzdGVyUHJlbG9hZFNjcmlwdChcInB1cC1hdWRpb1wiKTtcbiAgICAgIGF3YWl0IHJtKHByZWxvYWRQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0Pih7IGZuLCBtYXhBdHRlbXB0cyA9IDMsIHRpbWVvdXQgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmNvbnN0IFNVUFBPUlRFRF9QUk9UT0NPTFMgPSBbXCJmaWxlOlwiLCBcImh0dHA6XCIsIFwiaHR0cHM6XCIsIFwiZGF0YTpcIl07XG5jb25zdCBTT1VSQ0VfUEFUVEVSTiA9IC9eKGZpbGU6fGh0dHBzPzp8ZGF0YTopLztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSFRNTChzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoU09VUkNFX1BBVFRFUk4udGVzdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBzb3VyY2Uuc3BsaXQoXCI6XCIpWzBdICsgXCI6XCI7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5IH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDY0KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZXJyb3IoVEFHLCBgZXJyb3I6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBlcnJvcjogZGV0YWlscy5lcnJvcixcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2god2luOiBCcm93c2VyV2luZG93LCBhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKFwibG9hZCB3aW5kb3cgdGltZW91dFwiKSksIDMwXzAwMCk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiBFcnJvcikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4gZG9uZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mcmFtZS1maW5pc2gtbG9hZFwiLCAoXywgaXNNYWluRnJhbWUsIGZyYW1lUHJvY2Vzc0lkLCBmcmFtZVJvdXRpbmdJZCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtZnJhbWUtZmluaXNoLWxvYWQ6XCIsIHsgaXNNYWluRnJhbWUsIGZyYW1lUHJvY2Vzc0lkLCBmcmFtZVJvdXRpbmdJZCB9KTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeVwiKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHt1cmx9OiBbJHtjb2RlfV0gJHtkZXNjfWApKSxcbiAgICApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYHJlbmRlcmVyIGNyYXNoZWQ6ICR7ZXhpdENvZGV9LCAke3JlYXNvbn1gKSksXG4gICAgKTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JEZXN0cm95KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgcmVzb2x2ZSk7XG4gICAgd2luLmRlc3Ryb3koKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBvbkNyZWF0ZWQ/OiAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZW5kZXJlcjogUmVuZGVyT3B0aW9ucztcbiAgd2FybXVwPzogYm9vbGVhbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgb25DcmVhdGVkLCByZW5kZXJlciwgd2FybXVwIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JbldvcmtlcjogdHJ1ZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6IGZhbHNlLFxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3c6IHdpbiwgdXNlSW5uZXJQcm94eSB9KTtcbiAgaWYgKCF3YXJtdXApIHtcbiAgICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuICB9XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh3aW4sICgpID0+IHdpbi5sb2FkVVJMKHVybCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgd2FpdEZvckRlc3Ryb3kod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIG9uQ3JlYXRlZCwgcmVuZGVyZXIgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pKHsgc291cmNlLCByZW5kZXJlciwgd2FybXVwOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcblxuICAvLyB3YXJtdXAgZm9yIHNoYWRlcnNcbiAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gIGF3YWl0IHdhaXRGb3JEZXN0cm95KHdhcm11cCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL2VuY29kZXJcIjtcbmltcG9ydCB7IEZyYW1lRHJvcFN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvZnJhbWVfZHJvcFwiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBzZXR1cEF1ZGlvQ2FwdHVyZSwgdHlwZSBBdWRpb0NhcHR1cmUgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCwgSXBjV3JpdGVyIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvLCBzdG9wU3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKHdyaXRlcjogSXBjV3JpdGVyLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUgfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgdXNpbmcgZW5jb2RlciA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRnJhbWVEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgYXVkaW86IEF1ZGlvQ2FwdHVyZSB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlLmdldFNpemUoKSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlc1BlclJvdyA9IHdpZHRoICogNDtcbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA+PSBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIHdyaXRlci53cml0ZVByb2dyZXNzKHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbk1zID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbk1zIC0gZnJhbWVJbnRlcnZhbCAqIDAuNSB8fCB3cml0dGVuID49IHRvdGFsKSB7XG4gICAgICByZXNvbHZlcj8uKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coe1xuICAgIHNvdXJjZSxcbiAgICByZW5kZXJlcjogb3B0aW9ucyxcbiAgICBvbkNyZWF0ZWQ6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgYXVkaW8gPSBhd2FpdCBzZXR1cEF1ZGlvQ2FwdHVyZSh7XG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgaWYgKCF3aW4ud2ViQ29udGVudHMuaXNQYWludGluZygpKSB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICBjZHAuYXR0YWNoKFwiMS4zXCIpO1xuICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKGNkcCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIsIGopID0+IChbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXSkpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHN0b3BTdGVnbyhjZHApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLmNsb3NlKCk7XG4gICAgYXdhaXQgYXVkaW8/LnRlYXJkb3duKCk7XG4gICAgYXdhaXQgZW5jb2Rlci5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRyb3BTY29yZSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IGRyb3BTY29yZS5qYW5rLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuY29uc3QgQURWQU5DRV9USU1FT1VUX01TID0gMzBfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7QURWQU5DRV9USU1FT1VUX01TfW1zYCkpO1xuICAgIH0sIEFEVkFOQ0VfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICBjZHAuc2VuZENvbW1hbmQoXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGNsYXNzIExhenk8VD4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYWtlVmFsdWU6ICgpID0+IFQpIHt9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5tYWtlVmFsdWUoKTtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlITtcbiAgfVxuXG4gIGdldCBpbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIF92YWx1ZTogVCB8IHVuZGVmaW5lZDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlja0luamVjdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHNraXBzIHRoZSB0b3AtZnJhbWUgZ3VhcmQgc28gdGhlIGluamVjdG9yIHJ1bnMgaW4gdGhlIG1haW4gZG9jdW1lbnQuXG4gICAqIFJlcXVpcmVkIGZvciBQdXBwZXRlZXIgbW9kZSB3aGVyZSB0aGUgcGFnZSBpcyBsb2FkZWQgZGlyZWN0bHkgKG5vIHN0ZWdvIGlmcmFtZSB3cmFwcGVyKS5cbiAgICogRGVmYXVsdDogZmFsc2UgKEVsZWN0cm9uL3N0ZWdvIG1vZGUg4oCUIG9ubHkgaW5qZWN0IGluIGlmcmFtZXMpLlxuICAgKi9cbiAgc2tpcEZyYW1lR3VhcmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSlMgaW5qZWN0b3IgdGhhdCBob29rcyBhbGwgdGltZS1yZWxhdGVkIGdsb2JhbHMgaW4gdGhlIHRhcmdldCBmcmFtZS5cbiAqIEluIEVsZWN0cm9uL3N0ZWdvIG1vZGUgKGRlZmF1bHQpLCBndWFyZHMgYWdhaW5zdCBydW5uaW5nIGluIHRoZSB0b3AtbGV2ZWwgZnJhbWUuXG4gKiBJbiBQdXBwZXRlZXIgbW9kZSAoc2tpcEZyYW1lR3VhcmQ6IHRydWUpLCBpbmplY3RzIGRpcmVjdGx5IGludG8gdGhlIG1haW4gZG9jdW1lbnQuXG4gKiBNdXN0IGJlIGluamVjdGVkIHZpYSBQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50IEFORCBkaXJlY3RseSBpbnRvXG4gKiBhbHJlYWR5LWxvYWRlZCBmcmFtZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpY2tJbmplY3RvcihvcHRzPzogVGlja0luamVjdG9yT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IGZyYW1lR3VhcmQgPSBvcHRzPy5za2lwRnJhbWVHdWFyZCA/IFwiXCIgOiBcImlmICh3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCkgcmV0dXJuO1wiO1xuICByZXR1cm4gYChmdW5jdGlvbigpIHtcbiAgJHtmcmFtZUd1YXJkfVxuICBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IG9yaWcgPSB7XG4gICAgRGF0ZTogRGF0ZSxcbiAgICBkYXRlTm93OiBEYXRlLm5vdy5iaW5kKERhdGUpLFxuICAgIHBlcmZvcm1hbmNlTm93OiBwZXJmb3JtYW5jZS5ub3cuYmluZChwZXJmb3JtYW5jZSksXG4gICAgcmFmOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIGNhZjogY2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICB9O1xuXG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgcmFmUXVldWUgPSBbXTtcbiAgY29uc3QgdGltZXJzID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuICBjb25zdCBkYXRlT3JpZ2luID0gbmV3IG9yaWcuRGF0ZSgpO1xuICBjb25zdCBwZXJmT3JpZ2luID0gb3JpZy5wZXJmb3JtYW5jZU5vdygpO1xuXG4gIHBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGVyZk9yaWdpbiArIGN1cnJNczsgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIE8gPSBvcmlnLkRhdGU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTyhkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNcyk7XG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoTywgW251bGxdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSkpKCk7XG4gIH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZS5wYXJzZSA9IG9yaWcuRGF0ZS5wYXJzZTtcbiAgRGF0ZS5VVEMgPSBvcmlnLkRhdGUuVVRDO1xuICBEYXRlLnByb3RvdHlwZSA9IG9yaWcuRGF0ZS5wcm90b3R5cGU7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICByYWZRdWV1ZS5wdXNoKHsgaWQsIGNiIH0pO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuXG4gIHdpbmRvdy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAndGltZW91dCcsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgd2luZG93LnNldEludGVydmFsID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICBjb25zdCBkID0gTWF0aC5tYXgoZGVsYXkgfHwgMCwgMSk7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ2ludGVydmFsJywgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXMpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyh0aW1lcnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW2lkc1tpXV07XG4gICAgICBpZiAoIXQpIGNvbnRpbnVlO1xuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0LmNiID09PSAnc3RyaW5nJykgZXZhbCh0LmNiKTsgZWxzZSB0LmNiLmFwcGx5KHVuZGVmaW5lZCwgdC5hcmdzKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gJ3RpbWVvdXQnKSB7IGRlbGV0ZSB0aW1lcnNbaWRzW2ldXTsgYnJlYWs7IH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByYWZzLmxlbmd0aDsgaisrKSB7XG4gICAgICByYWZzW2pdLmNiKGN1cnJNcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWplY3QoKSB7XG4gICAgRGF0ZSA9IG9yaWcuRGF0ZTtcbiAgICBwZXJmb3JtYW5jZS5ub3cgPSBvcmlnLnBlcmZvcm1hbmNlTm93O1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBvcmlnLnJhZjtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBvcmlnLmNhZjtcbiAgICB3aW5kb3cuc2V0VGltZW91dCA9IG9yaWcuc2V0VGltZW91dDtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gb3JpZy5jbGVhclRpbWVvdXQ7XG4gICAgd2luZG93LnNldEludGVydmFsID0gb3JpZy5zZXRJbnRlcnZhbDtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IG9yaWcuY2xlYXJJbnRlcnZhbDtcbiAgICBkZWxldGUgd2luZG93LiR7VElDS19TWU1CT0x9O1xuICB9XG5cbiAgd2luZG93LiR7VElDS19TWU1CT0x9ID0geyBwcm9jZXNzOiBwcm9jZXNzLCBlamVjdDogZWplY3QgfTtcbn0pKCk7YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvUHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0VqZWN0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpICR7VElDS19TWU1CT0x9LmVqZWN0KClgO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHsgdHlwZSBCcm93c2VyV2luZG93LCB0eXBlIE5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIHBhdXNlVmlydHVhbFRpbWUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvZW5jb2RlclwiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBMYXp5IH0gZnJvbSBcIi4uL2Jhc2UvbGF6eVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSXBjV3JpdGVyLCB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvLCBzdG9wU3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgYnVpbGRUaWNrSW5qZWN0b3IsIGRvRWplY3QsIGRvUHJvY2VzcyB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbU2hvb3RdXCI7XG5cbmZ1bmN0aW9uIGF3YWl0U3RlZ29GcmFtZSh3aW46IEJyb3dzZXJXaW5kb3csIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBhZnRlclRzOiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKF9lOiB1bmtub3duLCBfZDogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICBjb25zdCB0cyA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2UuZ2V0U2l6ZSgpKTtcbiAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IHRzIDwgYWZ0ZXJUcykge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBza2lwcGluZyBmcmFtZSAke3RzfSwgZXhwZWN0ZWQgPiAke2FmdGVyVHN9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCkpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qod3JpdGVyOiBJcGNXcml0ZXIsIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIHdpbGwgYmUgaWdub3JlZCBvbiB0aGlzIG1vZGVcIik7XG5cbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8gfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IHJvb3RGcmFtZSA9IG5ldyBMYXp5KCgpID0+IHdpbi53ZWJDb250ZW50cy5tYWluRnJhbWUuZnJhbWVzWzBdKTtcbiAgdHJ5IHtcbiAgICBjZHAuYXR0YWNoKFwiMS4zXCIpO1xuXG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG5cbiAgICBjb25zdCBpZnJhbWUgPSByb290RnJhbWUudmFsdWU7XG4gICAgYXdhaXQgaWZyYW1lPy5leGVjdXRlSmF2YVNjcmlwdChidWlsZFRpY2tJbmplY3RvcigpKTtcbiAgICBhd2FpdCBpZnJhbWU/LmV4ZWN1dGVKYXZhU2NyaXB0KGRvUHJvY2VzcygwKSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuXG4gICAgZm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IHRvdGFsOyBmcmFtZSsrKSB7XG4gICAgICBjb25zdCBmcmFtZU1zID0gKGZyYW1lICsgMSkgKiBmcmFtZUludGVydmFsO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXRTdGVnb0ZyYW1lKHdpbiwgd2lkdGgsIGhlaWdodCwgZnJhbWVNcyAtIGZyYW1lSW50ZXJ2YWwgLyAyKTtcblxuICAgICAgYXdhaXQgYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCk7XG4gICAgICBhd2FpdCBpZnJhbWU/LmV4ZWN1dGVKYXZhU2NyaXB0KGRvUHJvY2VzcyhmcmFtZU1zKSk7XG5cbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgICBhd2FpdCBwaXBlbGluZS5lbmNvZGVCR1JBKGF3YWl0IGJpdG1hcCk7XG4gICAgICB3cml0dGVuKys7XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICB3cml0ZXIud3JpdGVQcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJvb3RGcmFtZS52YWx1ZT8uZXhlY3V0ZUphdmFTY3JpcHQoZG9FamVjdCgpKTtcbiAgICBhd2FpdCBzdG9wU3RlZ28oY2RwKTtcbiAgICBjZHAuZGV0YWNoKCk7XG4gICAgd2luLmNsb3NlKCk7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiAwLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgYXBwIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwdXBJcGNTb2NrZXQgfSBmcm9tIFwiLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBjb25uZWN0SXBjIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBkZWZhdWx0czoge1xuICAgIC4uLmRlZmF1bHRSZW5kZXJPcHRpb25zLFxuICAgIHdpdGhBdWRpbzogZmFsc2UsXG4gICAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gICAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIH0sXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGV4aXQgPSAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICBhcHAucXVpdCgpO1xuICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH07XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCAoKSA9PiBleGl0KDE0MykpO1xuICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCAoKSA9PiBleGl0KDEzMCkpO1xuICAgIHByb2Nlc3Mub25jZShcImV4aXRcIiwgKGMpID0+IGV4aXQoYykpO1xuICAgIG9rKHB1cElwY1NvY2tldCwgXCJwdXBJcGNTb2NrZXQgbm90IHNldFwiKTtcbiAgICBjb25zdCBpcGMgPSBhd2FpdCBjb25uZWN0SXBjKHB1cElwY1NvY2tldCk7XG4gICAgdHJ5IHtcbiAgICAgIGFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3B0aW9ucy5vdXRGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGlwYy53cml0ZURvbmUoYXdhaXQgYWN0aW9uKGlwYywgc291cmNlLCBvcHRpb25zKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgaXBjLndyaXRlRXJyb3IoZXJyb3Iuc3RhY2sgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhcHAucXVpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
254
+ window.${Y} = { process: process, eject: eject };
255
+ })();`}function Qe(r){return `${Y}.process(${r})`}function sr(){return `if (typeof ${Y} !== 'undefined') ${Y}.eject()`}var Ze="[Shoot]";function Ho({win:r,size:e,afterTs:t}){let o=new Set,i=ir(()=>{let n=Array.from(o);o.clear(),l.debug(Ze,`skipped frames ${n.join(", ")}, expected > ${t}`);},1e3);return new Promise(n=>{let s=(c,a,u)=>{if(ye(u))return;let p=u.toBitmap(),d=ce(p,u.getSize());if(d===void 0||d<t){o.add(d??-1),i();return}r.webContents.stopPainting(),r.webContents.off("paint",s),n(Buffer.from(p.buffer,p.byteOffset,e.height*e.width*4));};r.webContents.on("paint",s);})}async function cr(r,e,t){var _=[];try{let{fps:o,width:i,height:n,duration:s,withAudio:c,outFile:a,disableGpu:u,disableHwCodec:p}=t;c&&l.warn(Ze,"audio will be ignored on this mode");let d=y(_,await X.create({width:i,height:n,fps:o,outFile:a,withAudio:c,disableHwCodec:p}),!0);let h=Math.ceil(o*s);let f=1e3/o;let w=0;let b=0;let x=await nr&&!u;let v=await Fe({source:e,renderer:t});let g=v.webContents.debugger;let E=new Se(()=>v.webContents.mainFrame.frames[0]);try{g.attach("1.3");let V=x?240:o,ae=1e3/V;l.debug(Ze,{fps:o,frameInterval:f,renderFps:V,renderInterval:ae}),v.webContents.stopPainting(),v.webContents.setFrameRate(V),await or(g);let J=E.value;await J?.executeJavaScript(ar()),await J?.executeJavaScript(Qe(0)),await ue(g);for(let K=0;K<h;K++){let Q=(K+1)*f,S=Ho({win:v,size:{width:i,height:n},afterTs:Q-ae/2});await rr(g,f),await J?.executeJavaScript(Qe(Q)),v.webContents.startPainting(),await d.encodeBGRA(await S),w++;let T=Math.floor(w/h*100);Math.abs(T-b)>10&&(b=T,r.writeProgress(b));}}finally{await E.value?.executeJavaScript(sr()),await de(g),g.detach(),v.close(),await d.finish();}if(w===0)throw new Error("no frames captured");else return {written:w,jank:0,outFile:a}}catch(A){var ne=A,I=true;}finally{var L=P(_,ne,I);L&&await L;}}var jo="[App]";function ur(){l.debug(jo,"gpu features:",electron.app.getGPUFeatureStatus());}electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});Ft({name:"app",defaults:{...Pt,withAudio:false,deterministic:false,useInnerProxy:false,disableGpu:false,disableHwCodec:false},run:async(r,e)=>{let t=i=>{electron.app.quit(),process.exit(i);};process.once("SIGTERM",()=>t(143)),process.once("SIGINT",()=>t(130)),process.once("exit",i=>t(i)),assert.ok(Oe,"pupIpcSocket not set");let o=await St(Oe);try{electron.app.on("gpu-info-update",ur),await electron.app.whenReady(),kt(),ur(),await promises.mkdir(path.dirname(e.outFile),{recursive:!0});let i=e.deterministic?cr:tr;o.writeDone(await i(o,r,e));}catch(i){let n=i;o.writeError(n.stack??"unknown error");}finally{electron.app.quit();}}});//# sourceMappingURL=app.cjs.map
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErZTIzNWI4MzMxMzg5YjQwNC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvY29tbW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9yZW5kZXJlci9zdGVnby50cyIsIi4uL3NyYy9yZW5kZXJlci9wcm90b2NvbC50cyIsIi4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL21pc2MudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYWxwaGEudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL252ZW5jLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW90b29sYm94LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9mYWN0b3J5LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9tdXhlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiLCIuLi9zcmMvYmFzZS9mcmFtZV9kcm9wLnRzIiwiLi4vc3JjL2Jhc2UvaW1hZ2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uL3NyYy9yZW5kZXJlci9odG1sX2NoZWNrLnRzIiwiLi4vc3JjL2Jhc2Uvd2FpdGFibGVfZXZlbnQudHMiLCIuLi9zcmMvcmVuZGVyZXIvbmV0d29yay50cyIsIi4uL3NyYy9yZW5kZXJlci93aW5kb3cudHMiLCIuLi9zcmMvcmVuZGVyZXIvcmVuZGVyLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL2Jhc2UvZGVib3VuY2UudHMiLCIuLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vc3JjL2Jhc2UvbGF6eS50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Nob290LnRzIiwiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ4IiwibnVtIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEaXNhYmxlR1BVIiwicHVwRGlzYWJsZUh3Q29kZWMiLCJwdXBEZXRlcm1pbmlzdGljIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwSXBjU29ja2V0IiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9GSUxFIiwiUmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJIRUFERVJfU0laRSIsIklwY1dyaXRlciIsIl9zb2NrZXQiLCJwYXlsb2FkIiwidHlwZSIsImhlYWRlciIsImNvbm5lY3RJcGMiLCJzb2NrZXRQYXRoIiwic29ja2V0IiwiY3JlYXRlQ29ubmVjdGlvbiIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiY2RwIiwic3RvcFN0ZWdvIiwiUFVQX1NDSEVNRSIsInByb3RvY29sIiwic2V0dXBQdXBQcm90b2NvbCIsInJlcSIsInVybCIsInNyYyIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsInIiLCJrZWVwIiwiZW50cnkiLCJvcGVuVmlkZW9DdHgiLCJsYWJlbCIsImN0eCIsIkNvZGVjQ29udGV4dCIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiayIsIkZGbXBlZ0Vycm9yIiwibWFrZUZyYW1lIiwicGl4Rm10IiwiZnJhbWUiLCJGcmFtZSIsIm1ha2VQYWNrZXQiLCJwa3QiLCJQYWNrZXQiLCJkcmFpblBhY2tldHMiLCJzdHJlYW0iLCJtdXhlciIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJTQU1QTEVfRk1UX05BTUUiLCJBVl9TQU1QTEVfRk1UX0ZMVCIsIkFWX1NBTVBMRV9GTVRfRkxUUCIsIkF1ZGlvRW5jb2RlciIsIl9BdWRpb0VuY29kZXIiLCJvdXRGbXQiLCJjb2RlYyIsIkNvZGVjIiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwiX3N0YWNrIiwiblNhbXBsZXMiLCJfX3VzaW5nIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwiYnIiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsImJ3IiwicHRsIiwid3JpdGVWUFNFeHRlbnNpb24iLCJidWlsZEFscGhhVlBTIiwiTkFMX1VOSVRfUFJFRklYX1NFSSIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJjaHVua3MiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkiLCJoMCIsImgxIiwid3JpdGVCaXRzIiwiaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsInMiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwiYmFzZVBrdCIsImFscGhhUGt0IiwiYmFzZUV4dHJhIiwiYWxwaGFFeHRyYSIsImJncmFGcmFtZSIsInB0cyIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInV2U2l6ZSIsInkiLCJiYXNlUiIsImFscGhhUiIsImJhc2VSZWFkeSIsImFscGhhUmVhZHkiLCJkdHMiLCJkdXJhdGlvbiIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJUQUciLCJjcmVhdGVWaWRlb0VuY29kZXIiLCJkaXNhYmxlSHdDb2RlYyIsIkhhcmR3YXJlQ29udGV4dCIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiRm9ybWF0TXV4ZXIiLCJvdXRQYXRoIiwiZm9ybWF0TmFtZSIsIkZvcm1hdENvbnRleHQiLCJjb2RlY0N0eCIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwidmlkZW8iLCJod1ZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsInNhbXBsZVJhdGUiLCJpbnB1dCIsImRzdCIsImNzIiwibGltaXRlciIsIl9tIiwiX3YiLCJfaHYiLCJfYSIsIl9wcm9taXNlIiwiX2NvZGVjIiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwiZXhwZWN0ZWQiLCJnIiwibCIsInNjb3JlIiwiaXNFbXB0eSIsImltYWdlIiwiQVVESU9fQ0FQVFVSRV9TQ1JJUFQiLCJzZXR1cEF1ZGlvQ2FwdHVyZSIsImVuY29kZXIiLCJnZXRWaWRlb1RpbWVNcyIsIm9uRXJyb3IiLCJwcmVsb2FkUGF0aCIsInRtcGRpciIsInJhbmRvbVVVSUQiLCJ3cml0ZUZpbGUiLCJzZXNzaW9uIiwiaXBjTWFpbiIsIl9lIiwic3RhcnRNcyIsInNpbGVuY2VTYW1wbGVzIiwiYnVmZmVyIiwicm0iLCJzbGVlcCIsIm1zIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwiV2FpdGFibGVFdmVudCIsIm1hcCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJVUkwiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwidW5zZXRJbnRlcmNlcHRvciIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJkb25lIiwiaXNNYWluRnJhbWUiLCJmcmFtZVByb2Nlc3NJZCIsImZyYW1lUm91dGluZ0lkIiwiZGVzYyIsImV4aXRDb2RlIiwid2FpdEZvckRlc3Ryb3kiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwicmVuZGVyZXIiLCJ3YXJtdXAiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsImxvYWRXaW5kb3ciLCJzdGFjayIsInJlbmRlciIsIndyaXRlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsIndyaXR0ZW4iLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImVuY29kZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsImRyb3BTdGF0cyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiY3VycmVudFRpbWUiLCJieXRlc1BlclJvdyIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImRyb3BTY29yZSIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsImhhbmRsZXIiLCJtZXRob2QiLCJwYXVzZVZpcnR1YWxUaW1lIiwiZGVib3VuY2UiLCJkZWxheSIsInRpbWVyIiwiZGV0ZWN0R1BVRHJpdmVyIiwicmVzdWx0IiwiY2FuSVVzZUdQVSIsIkxhenkiLCJtYWtlVmFsdWUiLCJUSUNLX1NZTUJPTCIsImJ1aWxkVGlja0luamVjdG9yIiwiZG9Qcm9jZXNzIiwidGltZXN0YW1wTXMiLCJkb0VqZWN0IiwiYXdhaXRTdGVnb0ZyYW1lIiwiYWZ0ZXJUcyIsInNraXBwZWQiLCJyZXBvcnQiLCJfZCIsInRzIiwic2hvb3QiLCJkaXNhYmxlR3B1IiwicGlwZWxpbmUiLCJncHUiLCJyb290RnJhbWUiLCJyZW5kZXJGcHMiLCJyZW5kZXJJbnRlcnZhbCIsImlmcmFtZSIsImZyYW1lTXMiLCJwcmludEZlYXR1cmVzIiwiYXBwIiwiZXhpdCIsImMiLCJpcGMiLCJta2RpciJdLCJtYXBwaW5ncyI6Im1qQkFLQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLHdCQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsVUFBQSxDQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLE1BQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLG1CQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxRQUFBLENBQUEsQ0FBQSxDQUFBLGNBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEscUJBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLEdBQUEsQ0FBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLGlCQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLGNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsTUFBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsRUFBQSxDQUFBLENBQUEsdUJBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLE9BQUEsZUFBQSxFQUFBLFVBQUEsQ0FBQSxlQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHlDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEs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QUFJLGtCQUFBLEdBQXVCLENBQUMsQ0FBQSxDQUNwQ0QsQ0FBQUEsQ0FBRyxFQUFFLEtBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZkEsQ0FBQUEsQ0FBRyxLQUFLQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksTUFBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQVEsRUFFNURELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNULFFBQVMzSCxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsRUFBSzRILENBQUFBLENBQUksbUJBQW9CNUgsQ0FBQUEsRUFBQUEsQ0FDM0MySCxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FHVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxLQUFBLENBQU0sQ0FBQyxFQUNaLENBR0EsU0FBU0UsRUFBQUEsQ0FBa0JGLENBQUFBLENBQWVDLEVBQWdCbEksQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZ0IsQ0FHdkYsR0FEQWdJLEVBQUcsSUFBQSxDQUFLQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxPQUFTLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDbENBLENBQUFBLENBQUksa0JBQUEsQ0FBcUIsQ0FBQSxDQUFHLENBQzlCLElBQUEsSUFBUyxFQUFJLENBQUEsQ0FBRyxDQUFBLENBQUlBLENBQUFBLENBQUksa0JBQUEsQ0FBb0IsSUFBS0QsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDMUQsSUFBQSxJQUFTLENBQUEsQ0FBSUMsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQixDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsRUFBQSxDQUFLRCxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBQSxJQUFTLEVBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSSxFQUFBLENBQUksQ0FBQSxFQUFBLENBQUtBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUEsR0FBTSxDQUFBLEVBQUssSUFBTSxDQUFDLENBQUEsQ0FDdkRBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBR1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksTUFBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQVEsRUFFNURELENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsQ0FBQSxDQUFFakksQ0FBQUEsQ0FBTyxFQUFFLENBQUEsQ0FDZGlJLEVBQUcsQ0FBQSxDQUFFaEksQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZmdJLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBRVBBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RB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Q0FDdkMsTUFBTUMsWUFBQUEsQ0FBSSxTQUFBLEVBQVUsQ0FDcEJuVixJQUFpQixDQUNqQmtWLEVBQUFBLEVBQWMsQ0FDZCxNQUFNSyxlQUFNNWIsWUFBQUEsQ0FBUW1FLENBQUFBLENBQVEsT0FBTyxDQUFBLENBQUcsQ0FBRSxTQUFBLENBQVcsQ0FBQSxDQUFLLENBQUMsQ0FBQSxDQUN6RCxJQUFNMlMsQ0FBQUEsQ0FBUzNTLENBQUFBLENBQVEsYUFBQSxDQUFnQjJXLEdBQVE5QyxFQUFBQSxDQUMvQzJELENBQUFBLENBQUksU0FBQSxDQUFVLE1BQU03RSxFQUFPNkUsQ0FBQUEsQ0FBS3BYLENBQUFBLENBQVFKLENBQU8sQ0FBQyxFQUNsRCxDQUFBLE1BQVNNLENBQUFBLENBQUcsQ0FDVixJQUFNN0MsQ0FBQUEsQ0FBUTZDLENBQUFBLENBQ2RrWCxDQUFBQSxDQUFJLFVBQUEsQ0FBVy9aLEVBQU0sS0FBQSxFQUFTLGVBQWUsRUFDL0MsQ0FBQSxPQUFFLENBQ0E0WixZQUFBQSxDQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHJldHVybiB4O1xuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJtb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5leHBvcnQgY29uc3QgcHVwVXNlSW5uZXJQcm94eSA9IGVudltcIlBVUF9VU0VfSU5ORVJfUFJPWFlcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVHUFUgPSBlbnZbXCJQVVBfRElTQUJMRV9HUFVcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVId0NvZGVjID0gZW52W1wiUFVQX0RJU0FCTEVfSFdfQ09ERUNcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERldGVybWluaXN0aWMgPSBlbnZbXCJQVVBfREVURVJNSU5JU1RJQ1wiXSA9PT0gXCIxXCI7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSXBjU29ja2V0ID0gZW52W1wiUFVQX0lQQ19TT0NLRVRcIl07XG5cbmV4cG9ydCBjb25zdCBwdXBFeHBlcmltZW50YWxQdXBwZXRlZXIgPSBlbnZbXCJQVVBfRVhQRVJJTUVOVEFMX1BVUFBFVEVFUlwiXSA9PT0gXCIxXCI7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIHR5cGUgU2VyaWFsaXphYmxlIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8Rm4gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSwgRD4oXG4gIGZuOiBGbixcbiAgZGVmYXVsdFZhbHVlOiBELFxuKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rm4+KSA9PiBSZXR1cm5UeXBlPEZuPiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIHJldHVybiB7IHByb2Nlc3M6IHByb2MsIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCkgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHB1cERldGVybWluaXN0aWMsIHB1cERpc2FibGVHUFUsIHB1cERpc2FibGVId0NvZGVjLCBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXRwdXQubXA0XCI7XG5cbmV4cG9ydCBjb25zdCBSZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk91dHB1dCBtcDQgZmlsZSBwYXRoXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG4gIGRpc2FibGVId0NvZGVjOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgaGFyZHdhcmUgdmlkZW8gZW5jb2RlciAoTlZFTkMvVmlkZW9Ub29sYm94KSwgdXNlIHNvZnR3YXJlIHgyNjVcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG4gIGRpc2FibGVHcHU6IHB1cERpc2FibGVHUFUsXG4gIGRpc2FibGVId0NvZGVjOiBwdXBEaXNhYmxlSHdDb2RlYyxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBSZW5kZXJTY2hlbWEsIHR5cGUgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlZmF1bHRzOiBSZW5kZXJPcHRpb25zO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IFJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IG9wdGlvbnMuZGVmYXVsdHM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBvciBkYXRhOiBVUklcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGg+XCIsIHNoYXBlLm91dEZpbGUuZGVzY3JpcHRpb24sIGQub3V0RmlsZSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihzb3VyY2UsIHtcbiAgICAgICAgICB3aWR0aDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2lkdGgpKG9wdHMud2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogbm9lcnIocGFyc2VOdW1iZXIsIGQuaGVpZ2h0KShvcHRzLmhlaWdodCksXG4gICAgICAgICAgZnBzOiBub2VycihwYXJzZU51bWJlciwgZC5mcHMpKG9wdHMuZnBzKSxcbiAgICAgICAgICBkdXJhdGlvbjogbm9lcnIocGFyc2VOdW1iZXIsIGQuZHVyYXRpb24pKG9wdHMuZHVyYXRpb24pLFxuICAgICAgICAgIG91dEZpbGU6IG9wdHMub3V0RmlsZSA/PyBkLm91dEZpbGUsXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgICAgICAgIGRldGVybWluaXN0aWM6IG9wdHMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgICAgICAgZGlzYWJsZUdwdTogb3B0cy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICAgICAgICBkaXNhYmxlSHdDb2RlYzogb3B0cy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBjcmVhdGVDb25uZWN0aW9uLCBjcmVhdGVTZXJ2ZXIsIHR5cGUgU29ja2V0IH0gZnJvbSBcIm5ldFwiO1xuXG5jb25zdCBIRUFERVJfU0laRSA9IDg7XG5cbmV4cG9ydCBjb25zdCBlbnVtIElwY01zZ1R5cGUge1xuICBQUk9HUkVTUyA9IDEsXG4gIERPTkUgPSAyLFxuICBFUlJPUiA9IDMsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc29ja2V0OiBTb2NrZXQpIHt9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZShJcGNNc2dUeXBlLlBST0dSRVNTLCBCdWZmZXIuZnJvbShgJHt2YWx1ZX1gKSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuRVJST1IsIEJ1ZmZlci5mcm9tKGVycm9yKSk7XG4gICAgdGhpcy5fc29ja2V0LmVuZCgpO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZShJcGNNc2dUeXBlLkRPTkUsIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKSk7XG4gICAgdGhpcy5fc29ja2V0LmVuZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZSh0eXBlOiBJcGNNc2dUeXBlLCBwYXlsb2FkOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2MoSEVBREVSX1NJWkUpO1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkxFKHR5cGUsIDApO1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkxFKHBheWxvYWQuYnl0ZUxlbmd0aCwgNCk7XG4gICAgdGhpcy5fc29ja2V0LndyaXRlKGhlYWRlcik7XG4gICAgdGhpcy5fc29ja2V0LndyaXRlKHBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0SXBjKHNvY2tldFBhdGg6IHN0cmluZyk6IFByb21pc2U8SXBjV3JpdGVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc29ja2V0ID0gY3JlYXRlQ29ubmVjdGlvbihzb2NrZXRQYXRoKTtcbiAgICBzb2NrZXQub25jZShcImNvbm5lY3RcIiwgKCkgPT4gcmVzb2x2ZShuZXcgSXBjV3JpdGVyKHNvY2tldCkpKTtcbiAgICBzb2NrZXQub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjUmVhZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgbWVzc2FnZTogW3R5cGU6IElwY01zZ1R5cGUsIGJ1ZmZlcjogQnVmZmVyXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW107XG59PiB7XG4gIHByaXZhdGUgX2NodW5rczogQnVmZmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBfYnVmZmVyZWQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvY2tldDogU29ja2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJkYXRhXCIsIChkYXRhKSA9PiB0aGlzLm9uRGF0YShkYXRhKSk7XG4gICAgdGhpcy5fc29ja2V0Lm9uKFwiZXJyb3JcIiwgKGVycikgPT4gdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKSk7XG4gICAgdGhpcy5fc29ja2V0Lm9uKFwiY2xvc2VcIiwgKCkgPT4gdGhpcy5lbWl0KFwiY2xvc2VcIikpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRhdGEoZGF0YTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2h1bmtzLnB1c2goZGF0YSk7XG4gICAgdGhpcy5fYnVmZmVyZWQgKz0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIHRoaXMuZmx1c2goKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goKTogdm9pZCB7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkIDwgSEVBREVSX1NJWkUpIHJldHVybjtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucGVlayhIRUFERVJfU0laRSk7XG4gICAgICBjb25zdCB0eXBlID0gaGVhZGVyLnJlYWRVSW50MzJMRSgwKSBhcyBJcGNNc2dUeXBlO1xuICAgICAgY29uc3QgbGVuID0gaGVhZGVyLnJlYWRVSW50MzJMRSg0KTtcbiAgICAgIGlmICh0aGlzLl9idWZmZXJlZCA8IEhFQURFUl9TSVpFICsgbGVuKSByZXR1cm47XG4gICAgICB0aGlzLmNvbnN1bWUoSEVBREVSX1NJWkUpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuY29uc3VtZShsZW4pO1xuICAgICAgdGhpcy5lbWl0KFwibWVzc2FnZVwiLCB0eXBlLCBwYXlsb2FkKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUFJPR1JFU1M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBOdW1iZXIocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkRPTkU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJkb25lXCIsIEpTT04ucGFyc2UocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVSUk9SOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZWVrKG46IG51bWJlcik6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuX2NodW5rc1swXSAmJiB0aGlzLl9jaHVua3NbMF0uYnl0ZUxlbmd0aCA+PSBuKSByZXR1cm4gdGhpcy5fY2h1bmtzWzBdO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KHRoaXMuX2NodW5rcykuc3ViYXJyYXkoMCwgbik7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgd2hpbGUgKG9mZnNldCA8IG4pIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fY2h1bmtzWzBdITtcbiAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihjaHVuay5ieXRlTGVuZ3RoLCBuIC0gb2Zmc2V0KTtcbiAgICAgIGNodW5rLmNvcHkob3V0LCBvZmZzZXQsIDAsIHRha2UpO1xuICAgICAgaWYgKHRha2UgPT09IGNodW5rLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2h1bmtzLnNoaWZ0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaHVua3NbMF0gPSBjaHVuay5zdWJhcnJheSh0YWtlKTtcbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSB0YWtlO1xuICAgIH1cbiAgICB0aGlzLl9idWZmZXJlZCAtPSBuO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNTZXJ2ZXIge1xuICB3YWl0Rm9yQ29ubmVjdGlvbigpOiBQcm9taXNlPElwY1JlYWRlcj47XG4gIGNsb3NlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJcGNTZXJ2ZXIoc29ja2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxJcGNTZXJ2ZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgc2VydmVyLmxpc3Rlbihzb2NrZXRQYXRoLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgd2FpdEZvckNvbm5lY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElwY1JlYWRlcj4oKG9rLCBubykgPT4ge1xuICAgICAgICAgICAgc2VydmVyLm9uY2UoXCJjb25uZWN0aW9uXCIsIChzb2NrZXQpID0+IG9rKG5ldyBJcGNSZWFkZXIoc29ja2V0KSkpO1xuICAgICAgICAgICAgc2VydmVyLm9uY2UoXCJlcnJvclwiLCBubyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlKCkge1xuICAgICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28geyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAxcHg7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIlJ1bnRpbWUuZXZhbHVhdGVcIiwge1xuICAgIGV4cHJlc3Npb246IGB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXygpYCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18oKWAsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAge1xuICAgIHNjaGVtZTogUFVQX1NDSEVNRSxcbiAgICBwcml2aWxlZ2VzOiB7XG4gICAgICBzdGFuZGFyZDogdHJ1ZSxcbiAgICAgIHNlY3VyZTogdHJ1ZSxcbiAgICAgIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgICAgIGFsbG93U2VydmljZVdvcmtlcnM6IHRydWUsXG4gICAgICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gICAgICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIHN0cmVhbTogdHJ1ZSxcbiAgICAgIGNvZGVDYWNoZTogdHJ1ZSxcbiAgICB9LFxuICB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ3XCIsIFN0cmluZyhzaXplLndpZHRoKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiaFwiLCBTdHJpbmcoc2l6ZS5oZWlnaHQpKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIGN0eC5jb2RlY0lkID0gb3B0cy5jb2RlYy5pZDtcbiAgY3R4LndpZHRoID0gb3B0cy53aWR0aDtcbiAgY3R4LmhlaWdodCA9IG9wdHMuaGVpZ2h0O1xuICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5mcHMpO1xuICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKG9wdHMuZnBzLCAxKTtcbiAgY3R4LmdvcFNpemUgPSBvcHRzLmZwcyAqIDI7XG4gIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICBpZiAob3B0cy5jb2RlY1RhZykgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgaWYgKG9wdHMuY29sb3JSYW5nZSAhPT0gdW5kZWZpbmVkKSBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgcGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHJldHVybjtcbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSBpZiAoIWlzRmluaXRlKHNyY1tpXSEpKSBzcmNbaV0gPSAwO1xuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB0aGlzLmJpdHMucHVzaChwYWQpO1xuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbi8qKiBTcGxpdCBBbm5leCBCIGJpdHN0cmVhbSBpbnRvIE5BTCB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbTogQnVmZmVyKTogTmFsVW5pdFtdIHtcbiAgY29uc3QgbmFsczogTmFsVW5pdFtdID0gW107XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICBsZXQgc2NMZW4gPSAwO1xuICAgIGlmIChpICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ldID09PSAwICYmIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAyXSA9PT0gMSkge1xuICAgICAgc2NMZW4gPSAzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpICsgNCA8IGJpdHN0cmVhbS5sZW5ndGggJiZcbiAgICAgIGJpdHN0cmVhbVtpXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAyXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAzXSA9PT0gMVxuICAgICkge1xuICAgICAgc2NMZW4gPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYWxTdGFydCA9IGkgKyBzY0xlbjtcbiAgICBpZiAobmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkUgPiBiaXRzdHJlYW0ubGVuZ3RoKSBicmVhaztcblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkgemVyb3MrKztcbiAgICBlbHNlIHplcm9zID0gMDtcbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykgYncudygwLCAyKTtcbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykgYncudygwLCAyKTtcbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSByZXR1cm4gdnBzRGF0YTtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIGVuY29kZU5hbEhlYWRlciwgdHlwZSBOYWxVbml0LCByZXdyaXRlTmFsTGF5ZXJJZCwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG5jb25zdCBOQUxfVU5JVF9QUkVGSVhfU0VJID0gMzk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gMzIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IDMyID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYWxwaGFOYWwuZGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfVU5JVF9QUkVGSVhfU0VJLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB3cml0ZUJpdHMoMCwgMSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IDMyKSB7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKG5hbC5kYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBGRl9FTkNPREVSX0hFVkNfTlZFTkMgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSwgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9zZWlCdWZmZXI6IEJ1ZmZlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG4gIHByaXZhdGUgX3NlaUluamVjdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2FscGhhQnVmPzogQnVmZmVyO1xuICBwcml2YXRlIF9hbHBoYUZyYW1lPzogRnJhbWU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fc2VpQnVmZmVyID0gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IOKAlCBOVkVOQyBjb252ZXJ0cyBpbnRlcm5hbGx5LCBubyBTV1MgbmVlZGVkXG4gICAgY29uc3QgYmFzZUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIik7XG4gICAgLy8gQWxwaGEgYXMgWVVWNDIwUCDigJQgbWF0Y2hpbmcgYml0cmF0ZS9HT1AgZm9yIGNvbXBhdGlibGUgU1BTIGFjcm9zcyBsYXllcnNcbiAgICBjb25zdCBhbHBoYUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpO1xuXG4gICAgY29uc3QgYmFzZVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IG1ha2VQYWNrZXQoKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG5cbiAgICBjb25zdCBiYXNlRXh0cmEgPSBiYXNlQ3R4LmV4dHJhRGF0YTtcbiAgICBjb25zdCBhbHBoYUV4dHJhID0gYWxwaGFDdHguZXh0cmFEYXRhO1xuICAgIGlmIChiYXNlRXh0cmEgJiYgYWxwaGFFeHRyYSkge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VFeHRyYSxcbiAgICAgICAgYWxwaGFFeHRyYWRhdGE6IGFscGhhRXh0cmEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE52ZW5jRHVhbExheWVyRW5jb2Rlcih7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHggfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuXG4gICAgLy8gQWxwaGE6IGV4dHJhY3QgYWxwaGEgY2hhbm5lbCDihpIgWVVWNDIwUFxuICAgIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gICAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImVuY29kZTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gICAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICAgIGNvbnN0IHV2U2l6ZSA9ICh3ID4+IDEpICogKGggPj4gMSk7XG4gICAgaWYgKCF0aGlzLl9hbHBoYUJ1ZikgdGhpcy5fYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyB1dlNpemUgKiAyKTtcbiAgICBjb25zdCBidWYgPSB0aGlzLl9hbHBoYUJ1ZjtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcbiAgICAgICAgYnVmW3kgKiB3ICsgeF0gPSBzcmNbeSAqIHNyY0xzICsgeCAqIDQgKyAzXSE7XG4gICAgICB9XG4gICAgfVxuICAgIGJ1Zi5maWxsKDEyOCwgeVNpemUsIHlTaXplICsgdXZTaXplICogMik7XG5cbiAgICB0aGlzLl9hbHBoYUZyYW1lPy5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcihidWYsIHsgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsIHdpZHRoOiB3LCBoZWlnaHQ6IGggfSk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZS5wdHMgPSBwdHM7XG4gICAgdGhpcy5fYWxwaGFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUodGhpcy5fYWxwaGFGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYmFzZUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5fcy5hbHBoYUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHggfSA9IHRoaXMuX3M7XG4gICAgYmFzZVBrdC5mcmVlKCk7XG4gICAgYWxwaGFQa3QuZnJlZSgpO1xuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5JbnRlcmxlYXZlZChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0gPSB0aGlzLl9zO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBiYXNlUiA9IGF3YWl0IGJhc2VDdHgucmVjZWl2ZVBhY2tldChiYXNlUGt0KTtcbiAgICAgIGNvbnN0IGFscGhhUiA9IGF3YWl0IGFscGhhQ3R4LnJlY2VpdmVQYWNrZXQoYWxwaGFQa3QpO1xuXG4gICAgICBjb25zdCBiYXNlUmVhZHkgPSBiYXNlUiA+PSAwO1xuICAgICAgY29uc3QgYWxwaGFSZWFkeSA9IGFscGhhUiA+PSAwO1xuICAgICAgaWYgKCFiYXNlUmVhZHkgJiYgIWFscGhhUmVhZHkpIGJyZWFrO1xuXG4gICAgICAvLyBCb3RoIG11c3QgcHJvZHVjZSBwYWNrZXRzIHRvZ2V0aGVyIChiZj0wIGVuc3VyZXMgdGhpcylcbiAgICAgIGlmIChiYXNlUmVhZHkgIT09IGFscGhhUmVhZHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6IGJhc2U9JHtiYXNlUmVhZHl9LCBhbHBoYT0ke2FscGhhUmVhZHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlUGt0LmRhdGEhKTtcbiAgICAgIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFQa3QuZGF0YSEpO1xuXG4gICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgICBpZiAoIXRoaXMuX3NlaUluamVjdGVkKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKHRoaXMuX3NlaUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuX3NlaUluamVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNodW5rcy5wdXNoKGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFscywgYWxwaGFOYWxzKSk7XG5cbiAgICAgIC8vIFNhdmUgdGltZXN0YW1wcyBiZWZvcmUgZGF0YSByZXBsYWNlbWVudCAoc2V0dGVyIG1heSByZXNldCB0aGVtKVxuICAgICAgY29uc3QgcHRzID0gYmFzZVBrdC5wdHM7XG4gICAgICBjb25zdCBkdHMgPSBiYXNlUGt0LmR0cztcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gYmFzZVBrdC5kdXJhdGlvbjtcbiAgICAgIGJhc2VQa3QuZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgIGJhc2VQa3QucHRzID0gcHRzO1xuICAgICAgYmFzZVBrdC5kdHMgPSBkdHM7XG4gICAgICBiYXNlUGt0LmR1cmF0aW9uID0gZHVyYXRpb24gPT09IDBuID8gMW4gOiBkdXJhdGlvbjtcbiAgICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG5cbiAgICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgICAgIGFscGhhUGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vbnZlbmNcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzOiBWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpO1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBodz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBzb2Z0d2FyZSBsaWJ4MjY1IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgaHc/LmRpc3Bvc2UoKTtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZnBzLFxuICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcIm1lZGl1bVwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0zOnBvb2xzPSs6ZnJhbWUtdGhyZWFkcz0wXCIgfSxcbiAgICBiaXRyYXRlLFxuICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgIG11eGVyLFxuICB9KTtcbiAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihudWxsKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX2N0eC53cml0ZVRyYWlsZXIoKTtcbiAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWX1NBTVBMRV9GTVRfRkxUUCwgRkZfRU5DT0RFUl9BQUMgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlVmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciB9IGZyb20gXCIuL2ZhY3RvcnlcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGF1ZGlvPzogQXVkaW9FbmNvZGVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3QgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIob3V0RmlsZSk7XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgY29kZWMsIGh3IH0gPSBhd2FpdCBjcmVhdGVWaWRlb0VuY29kZXIob3B0cywgbXV4ZXIpO1xuXG4gICAgbGV0IGF1ZGlvOiBBdWRpb0VuY29kZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgYXVkaW8gPSBhd2FpdCBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyxcbiAgICAgICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgICBtdXhlcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7XG4gICAgICB2aWRlbyxcbiAgICAgIGh3VmlkZW8sXG4gICAgICBhdWRpbyxcbiAgICAgIG11eGVyLFxuICAgICAgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSxcbiAgICAgIG91dEZpbGUsXG4gICAgICBjb2RlYyxcbiAgICAgIGh3LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgICBpZiAoaHdWaWRlbykge1xuICAgICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5lbmNvZGUoZnJhbWUsIG11eGVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBzcmMsIGRzdCwgc3dzIH0gPSBjb2RlYyE7XG4gICAgICBvayhzd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMubWFrZVdyaXRhYmxlKCksIFwiYmdyYVNyYy5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFTcmMuZnJvbUJ1ZmZlclwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihkc3QubWFrZVdyaXRhYmxlKCksIFwiYmdyYURzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgc3dzLnNjYWxlRnJhbWUoZHN0LCBzcmMpLCBcImJncmFTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgIHJldHVybiB2aWRlbyEuZW5jb2RlKGRzdCwgbXV4ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBjb2RlYywgbXV4ZXIsIHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgICBjb25zdCBjcyA9IGNvZGVjID8/IChhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzcmMgPSBhd2FpdCBjcy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgICAgYXdhaXQgaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNzLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJwbmdEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjcy5zd3Muc2NhbGVGcmFtZShjcy5kc3QsIHNyYyksIFwicG5nU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgICAgICAgYXdhaXQgdmlkZW8hLmVuY29kZShjcy5kc3QsIG11eGVyKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFjb2RlYykgY3NbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXVkaW8sIGxpbWl0ZXIsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChhdWRpbykgYXdhaXQgbGltaXRlci5zY2hlZHVsZSgoKSA9PiBhdWRpby5lbmNvZGUocGNtLCBtdXhlcikpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgYXVkaW8sIG11eGVyLCBsaW1pdGVyIH0gPSB0aGlzLl9zO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1c2luZyBfbSA9IG11eGVyO1xuICAgICAgdXNpbmcgX3YgPSB2aWRlbztcbiAgICAgIHVzaW5nIF9odiA9IGh3VmlkZW87XG4gICAgICB1c2luZyBfYSA9IGF1ZGlvO1xuICAgICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdmlkZW8hLmZsdXNoKG11eGVyKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGU7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgYXVkaW8sIG11eGVyLCBsaW1pdGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGxpbWl0ZXIuZHJhaW4oKTtcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGZyZWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHVzaW5nIF9jb2RlYyA9IHRoaXMuX3MuY29kZWM7XG4gICAgdGhpcy5fcy5odz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICBjb25zdCBmcmFtZSA9IG1ha2VGcmFtZSh0aGlzLl9zLndpZHRoLCB0aGlzLl9zLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGlwY01haW4sIHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuY29uc3QgQVVESU9fQ0FQVFVSRV9TQ1JJUFQgPSBgXG4oZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18pIHJldHVybjtcbiAgd2luZG93Ll9fcHVwX2F1ZGlvX2NhcHR1cmluZ19fID0gdHJ1ZTtcblxuICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICBjb25zdCBjYXB0dXJlZENvbnRleHRzID0gbmV3IFdlYWtTZXQoKTtcbiAgY29uc3Qgc291cmNlZEVsZW1lbnRzID0gbmV3IFdlYWtTZXQoKTtcbiAgbGV0IG1ldGFTZW50ID0gZmFsc2U7XG5cbiAgY29uc3Qgb3JpZ0NyZWF0ZU1FUyA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlO1xuICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgc291cmNlZEVsZW1lbnRzLmFkZChlbCk7XG4gICAgcmV0dXJuIG9yaWdDcmVhdGVNRVMuY2FsbCh0aGlzLCBlbCk7XG4gIH07XG5cbiAgY29uc3Qgb3JpZ0Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG4gIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKGRlc3QsIG91dElkeCwgaW5JZHgpIHtcbiAgICBjb25zdCBjYXB0dXJlTm9kZSA9IGRlc3Q/LmNvbnRleHQ/Ll9fcHVwX2NhcHR1cmVOb2RlX187XG4gICAgaWYgKGNhcHR1cmVOb2RlICYmIGRlc3QgPT09IGRlc3QuY29udGV4dC5kZXN0aW5hdGlvbiAmJiB0aGlzICE9PSBjYXB0dXJlTm9kZSkge1xuICAgICAgb3JpZ0Nvbm5lY3QuY2FsbCh0aGlzLCBjYXB0dXJlTm9kZSwgb3V0SWR4LCBpbklkeCk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGRlc3QsIG91dElkeCwgaW5JZHgpO1xuICB9O1xuXG4gIGNvbnN0IE9yaWdBQyA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcbiAgaWYgKCFPcmlnQUMpIHJldHVybjtcblxuICBmdW5jdGlvbiBQYXRjaGVkQUMoKSB7XG4gICAgY29uc3QgY3R4ID0gbmV3IE9yaWdBQyguLi5hcmd1bWVudHMpO1xuICAgIGlmICghY2FwdHVyZWRDb250ZXh0cy5oYXMoY3R4KSkge1xuICAgICAgY2FwdHVyZWRDb250ZXh0cy5hZGQoY3R4KTtcbiAgICAgIGlmICghbWV0YVNlbnQpIHtcbiAgICAgICAgbWV0YVNlbnQgPSB0cnVlO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1tZXRhJywgeyBzYW1wbGVSYXRlOiBjdHguc2FtcGxlUmF0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlU2NyaXB0UHJvY2Vzc29yKDQwOTYsIDIsIDIpO1xuICAgICAgbm9kZS5vbmF1ZGlvcHJvY2VzcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IEwgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgICAgICBjb25zdCBSID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShMLmxlbmd0aCAqIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvdXRbaSAqIDJdID0gTFtpXTtcbiAgICAgICAgICBvdXRbaSAqIDIgKyAxXSA9IFJbaV07XG4gICAgICAgIH1cbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnYXVkaW8tY2h1bmsnLCBCdWZmZXIuZnJvbShvdXQuYnVmZmVyKSk7XG4gICAgICB9O1xuICAgICAgbm9kZS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICBjdHguX19wdXBfY2FwdHVyZU5vZGVfXyA9IG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbiAgUGF0Y2hlZEFDLnByb3RvdHlwZSA9IE9yaWdBQy5wcm90b3R5cGU7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihQYXRjaGVkQUMsIE9yaWdBQyk7XG4gIHdpbmRvdy5BdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG4gIGlmICgnd2Via2l0QXVkaW9Db250ZXh0JyBpbiB3aW5kb3cpIHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG5cbiAgY29uc3Qgb3JpZ1BsYXkgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5O1xuICBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9fcHVwX2NhcHR1cmVkX18pIHtcbiAgICAgIHRoaXMuX19wdXBfY2FwdHVyZWRfXyA9IHRydWU7XG4gICAgICBjb25zdCBlbCA9IHRoaXM7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzb3VyY2VkRWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICAgIGNvbnN0IGN0eCA9IG5ldyBQYXRjaGVkQUMoKTtcbiAgICAgICAgICBjdHguY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsKS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ1BsYXkuY2FsbCh0aGlzKTtcbiAgfTtcbn0pKCk7XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZSB7XG4gIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlT3B0aW9ucyB7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQXVkaW9DYXB0dXJlKHtcbiAgZW5jb2RlcixcbiAgZ2V0VmlkZW9UaW1lTXMsXG4gIG9uRXJyb3IsXG59OiBBdWRpb0NhcHR1cmVPcHRpb25zKTogUHJvbWlzZTxBdWRpb0NhcHR1cmU+IHtcbiAgY29uc3QgcHJlbG9hZFBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX2F1ZGlvX3ByZWxvYWRfJHtyYW5kb21VVUlEKCl9LmpzYCk7XG4gIGF3YWl0IHdyaXRlRmlsZShwcmVsb2FkUGF0aCwgQVVESU9fQ0FQVFVSRV9TQ1JJUFQpO1xuICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnJlZ2lzdGVyUHJlbG9hZFNjcmlwdCh7XG4gICAgdHlwZTogXCJmcmFtZVwiLFxuICAgIGlkOiBcInB1cC1hdWRpb1wiLFxuICAgIGZpbGVQYXRoOiBwcmVsb2FkUGF0aCxcbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihcImF1ZGlvLW1ldGFcIiwgYXN5bmMgKF9lLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgICBjb25zdCBzdGFydE1zID0gZ2V0VmlkZW9UaW1lTXMoKTtcbiAgICBlbmNvZGVyLnNldHVwQXVkaW8oc2FtcGxlUmF0ZSk7XG4gICAgY29uc3Qgc2lsZW5jZVNhbXBsZXMgPSBNYXRoLmNlaWwoKHN0YXJ0TXMgKiBzYW1wbGVSYXRlKSAvIDEwMDApO1xuICAgIGlmIChzaWxlbmNlU2FtcGxlcyA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKEJ1ZmZlci5hbGxvYyhzaWxlbmNlU2FtcGxlcyAqIDIgKiA0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihcImF1ZGlvLWNodW5rXCIsIGFzeW5jIChfZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgdGVhcmRvd24oKSB7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLW1ldGFcIik7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLWNodW5rXCIpO1xuICAgICAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi51bnJlZ2lzdGVyUHJlbG9hZFNjcmlwdChcInB1cC1hdWRpb1wiKTtcbiAgICAgIGF3YWl0IHJtKHByZWxvYWRQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0Pih7IGZuLCBtYXhBdHRlbXB0cyA9IDMsIHRpbWVvdXQgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmNvbnN0IFNVUFBPUlRFRF9QUk9UT0NPTFMgPSBbXCJmaWxlOlwiLCBcImh0dHA6XCIsIFwiaHR0cHM6XCIsIFwiZGF0YTpcIl07XG5jb25zdCBTT1VSQ0VfUEFUVEVSTiA9IC9eKGZpbGU6fGh0dHBzPzp8ZGF0YTopLztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSFRNTChzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoU09VUkNFX1BBVFRFUk4udGVzdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBzb3VyY2Uuc3BsaXQoXCI6XCIpWzBdICsgXCI6XCI7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5IH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDY0KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZXJyb3IoVEFHLCBgZXJyb3I6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBlcnJvcjogZGV0YWlscy5lcnJvcixcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2god2luOiBCcm93c2VyV2luZG93LCBhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKFwibG9hZCB3aW5kb3cgdGltZW91dFwiKSksIDMwXzAwMCk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiBFcnJvcikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4gZG9uZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mcmFtZS1maW5pc2gtbG9hZFwiLCAoXywgaXNNYWluRnJhbWUsIGZyYW1lUHJvY2Vzc0lkLCBmcmFtZVJvdXRpbmdJZCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtZnJhbWUtZmluaXNoLWxvYWQ6XCIsIHsgaXNNYWluRnJhbWUsIGZyYW1lUHJvY2Vzc0lkLCBmcmFtZVJvdXRpbmdJZCB9KTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeVwiKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHt1cmx9OiBbJHtjb2RlfV0gJHtkZXNjfWApKSxcbiAgICApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYHJlbmRlcmVyIGNyYXNoZWQ6ICR7ZXhpdENvZGV9LCAke3JlYXNvbn1gKSksXG4gICAgKTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JEZXN0cm95KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgcmVzb2x2ZSk7XG4gICAgd2luLmRlc3Ryb3koKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBvbkNyZWF0ZWQ/OiAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZW5kZXJlcjogUmVuZGVyT3B0aW9ucztcbiAgd2FybXVwPzogYm9vbGVhbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgb25DcmVhdGVkLCByZW5kZXJlciwgd2FybXVwIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JbldvcmtlcjogdHJ1ZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6IGZhbHNlLFxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3c6IHdpbiwgdXNlSW5uZXJQcm94eSB9KTtcbiAgaWYgKCF3YXJtdXApIHtcbiAgICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuICB9XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh3aW4sICgpID0+IHdpbi5sb2FkVVJMKHVybCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgd2FpdEZvckRlc3Ryb3kod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIG9uQ3JlYXRlZCwgcmVuZGVyZXIgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pKHsgc291cmNlLCByZW5kZXJlciwgd2FybXVwOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcblxuICAvLyB3YXJtdXAgZm9yIHNoYWRlcnNcbiAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gIGF3YWl0IHdhaXRGb3JEZXN0cm95KHdhcm11cCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUsIHR5cGUgQXVkaW9DYXB0dXJlIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQsIElwY1dyaXRlciB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbywgc3RvcFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih3cml0ZXI6IElwY1dyaXRlciwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRnJhbWVEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgYXVkaW86IEF1ZGlvQ2FwdHVyZSB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlLmdldFNpemUoKSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlc1BlclJvdyA9IHdpZHRoICogNDtcbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA+PSBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIHdyaXRlci53cml0ZVByb2dyZXNzKHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbk1zID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbk1zIC0gZnJhbWVJbnRlcnZhbCAqIDAuNSB8fCB3cml0dGVuID49IHRvdGFsKSB7XG4gICAgICByZXNvbHZlcj8uKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coe1xuICAgIHNvdXJjZSxcbiAgICByZW5kZXJlcjogb3B0aW9ucyxcbiAgICBvbkNyZWF0ZWQ6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgYXVkaW8gPSBhd2FpdCBzZXR1cEF1ZGlvQ2FwdHVyZSh7XG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgaWYgKCF3aW4ud2ViQ29udGVudHMuaXNQYWludGluZygpKSB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICBjZHAuYXR0YWNoKFwiMS4zXCIpO1xuICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKGNkcCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIsIGopID0+IChbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXSkpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHN0b3BTdGVnbyhjZHApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLmNsb3NlKCk7XG4gICAgYXdhaXQgYXVkaW8/LnRlYXJkb3duKCk7XG4gICAgYXdhaXQgZW5jb2Rlci5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRyb3BTY29yZSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IGRyb3BTY29yZS5qYW5rLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuY29uc3QgQURWQU5DRV9USU1FT1VUX01TID0gMzBfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7QURWQU5DRV9USU1FT1VUX01TfW1zYCkpO1xuICAgIH0sIEFEVkFOQ0VfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICBjZHAuc2VuZENvbW1hbmQoXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMC5cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkPihmbjogVCwgZGVsYXkgPSAxMDApOiBUIHtcbiAgbGV0IHRpbWVyOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiB1bmtub3duLCAuLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB0aW1lciA9IHVuZGVmaW5lZDtcbiAgICB9LCBkZWxheSk7XG4gIH0gYXMgVDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltIV0FjY2VsXVwiO1xuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RHUFVEcml2ZXIoKSB7XG4gIGNvbnN0IGh3ID0gSGFyZHdhcmVDb250ZXh0LmF1dG8oKTtcbiAgY29uc3QgcmVzdWx0ID0gaHcgIT09IG51bGw7XG4gIGh3Py5kaXNwb3NlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBjYW5JVXNlR1BVID0gZGV0ZWN0R1BVRHJpdmVyKCkudGhlbigocmVzdWx0KSA9PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGludGVyZmFjZSBUaWNrSW5qZWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgc2tpcHMgdGhlIHRvcC1mcmFtZSBndWFyZCBzbyB0aGUgaW5qZWN0b3IgcnVucyBpbiB0aGUgbWFpbiBkb2N1bWVudC5cbiAgICogUmVxdWlyZWQgZm9yIFB1cHBldGVlciBtb2RlIHdoZXJlIHRoZSBwYWdlIGlzIGxvYWRlZCBkaXJlY3RseSAobm8gc3RlZ28gaWZyYW1lIHdyYXBwZXIpLlxuICAgKiBEZWZhdWx0OiBmYWxzZSAoRWxlY3Ryb24vc3RlZ28gbW9kZSDigJQgb25seSBpbmplY3QgaW4gaWZyYW1lcykuXG4gICAqL1xuICBza2lwRnJhbWVHdWFyZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBKUyBpbmplY3RvciB0aGF0IGhvb2tzIGFsbCB0aW1lLXJlbGF0ZWQgZ2xvYmFscyBpbiB0aGUgdGFyZ2V0IGZyYW1lLlxuICogSW4gRWxlY3Ryb24vc3RlZ28gbW9kZSAoZGVmYXVsdCksIGd1YXJkcyBhZ2FpbnN0IHJ1bm5pbmcgaW4gdGhlIHRvcC1sZXZlbCBmcmFtZS5cbiAqIEluIFB1cHBldGVlciBtb2RlIChza2lwRnJhbWVHdWFyZDogdHJ1ZSksIGluamVjdHMgZGlyZWN0bHkgaW50byB0aGUgbWFpbiBkb2N1bWVudC5cbiAqIE11c3QgYmUgaW5qZWN0ZWQgdmlhIFBhZ2UuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTmV3RG9jdW1lbnQgQU5EIGRpcmVjdGx5IGludG9cbiAqIGFscmVhZHktbG9hZGVkIGZyYW1lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVGlja0luamVjdG9yKG9wdHM/OiBUaWNrSW5qZWN0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgZnJhbWVHdWFyZCA9IG9wdHM/LnNraXBGcmFtZUd1YXJkID8gXCJcIiA6IFwiaWYgKHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wKSByZXR1cm47XCI7XG4gIHJldHVybiBgKGZ1bmN0aW9uKCkge1xuICAke2ZyYW1lR3VhcmR9XG4gIGlmICh0eXBlb2YgJHtUSUNLX1NZTUJPTH0gIT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgY29uc3Qgb3JpZyA9IHtcbiAgICBEYXRlOiBEYXRlLFxuICAgIGRhdGVOb3c6IERhdGUubm93LmJpbmQoRGF0ZSksXG4gICAgcGVyZm9ybWFuY2VOb3c6IHBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKSxcbiAgICByYWY6IHJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyksXG4gICAgY2FmOiBjYW5jZWxBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyksXG4gICAgc2V0VGltZW91dDogc2V0VGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgY2xlYXJUaW1lb3V0OiBjbGVhclRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIHNldEludGVydmFsOiBzZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksXG4gICAgY2xlYXJJbnRlcnZhbDogY2xlYXJJbnRlcnZhbC5iaW5kKHdpbmRvdyksXG4gIH07XG5cbiAgbGV0IGN1cnJNcyA9IDA7XG4gIGxldCByYWZRdWV1ZSA9IFtdO1xuICBjb25zdCB0aW1lcnMgPSB7fTtcbiAgbGV0IG5leHRJZCA9IDE7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBuZXcgb3JpZy5EYXRlKCk7XG4gIGNvbnN0IHBlcmZPcmlnaW4gPSBvcmlnLnBlcmZvcm1hbmNlTm93KCk7XG5cbiAgcGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBwZXJmT3JpZ2luICsgY3Vyck1zOyB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgTyA9IG9yaWcuRGF0ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBPKGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zKTtcbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShPLCBbbnVsbF0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKSkoKTtcbiAgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlLnBhcnNlID0gb3JpZy5EYXRlLnBhcnNlO1xuICBEYXRlLlVUQyA9IG9yaWcuRGF0ZS5VVEM7XG4gIERhdGUucHJvdG90eXBlID0gb3JpZy5EYXRlLnByb3RvdHlwZTtcblxuICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2IpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHJhZlF1ZXVlLnB1c2goeyBpZCwgY2IgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG5cbiAgd2luZG93LnNldFRpbWVvdXQgPSBmdW5jdGlvbihjYiwgZGVsYXksIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICd0aW1lb3V0JywgY2IsIGRlbGF5OiBkZWxheSB8fCAwLCBuZXh0OiBjdXJyTXMgKyAoZGVsYXkgfHwgMCksIGFyZ3MgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbihjYiwgZGVsYXksIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIGNvbnN0IGQgPSBNYXRoLm1heChkZWxheSB8fCAwLCAxKTtcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAnaW50ZXJ2YWwnLCBjYiwgZGVsYXk6IGQsIG5leHQ6IGN1cnJNcyArIGQsIGFyZ3MgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhckludGVydmFsID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgZnVuY3Rpb24gcHJvY2Vzcyh0aW1lc3RhbXBNcykge1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKS5mb3JFYWNoKGEgPT4ge1xuICAgICAgYS5wYXVzZSgpO1xuICAgICAgYS5jdXJyZW50VGltZSA9IGN1cnJNcztcbiAgICB9KTtcbiAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyh0aW1lcnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW2lkc1tpXV07XG4gICAgICBpZiAoIXQpIGNvbnRpbnVlO1xuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0LmNiID09PSAnc3RyaW5nJykgZXZhbCh0LmNiKTsgZWxzZSB0LmNiLmFwcGx5KHVuZGVmaW5lZCwgdC5hcmdzKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gJ3RpbWVvdXQnKSB7IGRlbGV0ZSB0aW1lcnNbaWRzW2ldXTsgYnJlYWs7IH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByYWZzLmxlbmd0aDsgaisrKSB7XG4gICAgICByYWZzW2pdLmNiKGN1cnJNcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWplY3QoKSB7XG4gICAgRGF0ZSA9IG9yaWcuRGF0ZTtcbiAgICBwZXJmb3JtYW5jZS5ub3cgPSBvcmlnLnBlcmZvcm1hbmNlTm93O1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBvcmlnLnJhZjtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBvcmlnLmNhZjtcbiAgICB3aW5kb3cuc2V0VGltZW91dCA9IG9yaWcuc2V0VGltZW91dDtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gb3JpZy5jbGVhclRpbWVvdXQ7XG4gICAgd2luZG93LnNldEludGVydmFsID0gb3JpZy5zZXRJbnRlcnZhbDtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IG9yaWcuY2xlYXJJbnRlcnZhbDtcbiAgICBkZWxldGUgd2luZG93LiR7VElDS19TWU1CT0x9O1xuICB9XG5cbiAgd2luZG93LiR7VElDS19TWU1CT0x9ID0geyBwcm9jZXNzOiBwcm9jZXNzLCBlamVjdDogZWplY3QgfTtcbn0pKCk7YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvUHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0VqZWN0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpICR7VElDS19TWU1CT0x9LmVqZWN0KClgO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHsgdHlwZSBCcm93c2VyV2luZG93LCB0eXBlIE5hdGl2ZUltYWdlLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwiLi4vYmFzZS9kZWJvdW5jZVwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgY2FuSVVzZUdQVSB9IGZyb20gXCIuLi9iYXNlL2h3YWNjZWxcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgTGF6eSB9IGZyb20gXCIuLi9iYXNlL2xhenlcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IElwY1dyaXRlciwgdHlwZSBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbywgc3RvcFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGJ1aWxkVGlja0luamVjdG9yLCBkb0VqZWN0LCBkb1Byb2Nlc3MgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgU3RlZ29PcHRpb25zIHtcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBzaXplOiBTaXplO1xuICBhZnRlclRzOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGF3YWl0U3RlZ29GcmFtZSh7IHdpbiwgc2l6ZSwgYWZ0ZXJUcyB9OiBTdGVnb09wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCBza2lwcGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGNvbnN0IHJlcG9ydCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICBjb25zdCBzID0gQXJyYXkuZnJvbShza2lwcGVkKTtcbiAgICBza2lwcGVkLmNsZWFyKCk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYHNraXBwZWQgZnJhbWVzICR7cy5qb2luKFwiLCBcIil9LCBleHBlY3RlZCA+ICR7YWZ0ZXJUc31gKTtcbiAgfSwgMTAwMCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IHVua25vd24sIF9kOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5KGltYWdlKSkgcmV0dXJuO1xuICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgdHMgPCBhZnRlclRzKSB7XG4gICAgICAgIHNraXBwZWQuYWRkKHRzID8/IC0xKTtcbiAgICAgICAgcmVwb3J0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICB9O1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob290KHdyaXRlcjogSXBjV3JpdGVyLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUsIGRpc2FibGVHcHUsIGRpc2FibGVId0NvZGVjIH0gPSBvcHRpb25zO1xuICBpZiAod2l0aEF1ZGlvKSBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gd2lsbCBiZSBpZ25vcmVkIG9uIHRoaXMgbW9kZVwiKTtcblxuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuXG4gIGNvbnN0IGdwdSA9IChhd2FpdCBjYW5JVXNlR1BVKSAmJiAhZGlzYWJsZUdwdTtcbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMgfSk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3Qgcm9vdEZyYW1lID0gbmV3IExhenkoKCkgPT4gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZS5mcmFtZXNbMF0pO1xuICB0cnkge1xuICAgIGNkcC5hdHRhY2goXCIxLjNcIik7XG5cbiAgICBjb25zdCByZW5kZXJGcHMgPSBncHUgPyAyNDAgOiBmcHM7XG4gICAgY29uc3QgcmVuZGVySW50ZXJ2YWwgPSAxMDAwIC8gcmVuZGVyRnBzO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIHsgZnBzLCBmcmFtZUludGVydmFsLCByZW5kZXJGcHMsIHJlbmRlckludGVydmFsIH0pO1xuXG4gICAgLy8gTk9URShBdXRva2FrYSk6XG4gICAgLy8gMS4gd2l0aCBncHUsIHRoZSBwYWludCBldmVudCBjYWxsYmFjayBhdCB0aGUgZXhhY3QgcG9pbnQgd2l0aG91dCBleHRyYSByZW5kZXJpbmdzXG4gICAgLy8gMi4gd2l0aG91dCBncHUsIHBhaW50IHdpbGwgY2FsbGJhY2sgZWFjaCBmcmFtZSwgc28gd2Ugc2V0IHJlcXVpcmVkIGZwcyB0byBwcmV2ZW50IHRvbyBoaWdoIENQVSB1c2FnZVxuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKHJlbmRlckZwcyk7XG5cbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG4gICAgY29uc3QgaWZyYW1lID0gcm9vdEZyYW1lLnZhbHVlO1xuICAgIGF3YWl0IGlmcmFtZT8uZXhlY3V0ZUphdmFTY3JpcHQoYnVpbGRUaWNrSW5qZWN0b3IoKSk7XG4gICAgYXdhaXQgaWZyYW1lPy5leGVjdXRlSmF2YVNjcmlwdChkb1Byb2Nlc3MoMCkpO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcbiAgICAgIGNvbnN0IGJpdG1hcCA9IGF3YWl0U3RlZ29GcmFtZSh7XG4gICAgICAgIHdpbixcbiAgICAgICAgc2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0sXG4gICAgICAgIGFmdGVyVHM6IGZyYW1lTXMgLSByZW5kZXJJbnRlcnZhbCAvIDIsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCk7XG4gICAgICBhd2FpdCBpZnJhbWU/LmV4ZWN1dGVKYXZhU2NyaXB0KGRvUHJvY2VzcyhmcmFtZU1zKSk7XG5cbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgICBhd2FpdCBwaXBlbGluZS5lbmNvZGVCR1JBKGF3YWl0IGJpdG1hcCk7XG4gICAgICB3cml0dGVuKys7XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICB3cml0ZXIud3JpdGVQcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJvb3RGcmFtZS52YWx1ZT8uZXhlY3V0ZUphdmFTY3JpcHQoZG9FamVjdCgpKTtcbiAgICBhd2FpdCBzdG9wU3RlZ28oY2RwKTtcbiAgICBjZHAuZGV0YWNoKCk7XG4gICAgd2luLmNsb3NlKCk7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiAwLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgYXBwIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwdXBJcGNTb2NrZXQgfSBmcm9tIFwiLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBjb25uZWN0SXBjIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBkZWZhdWx0czoge1xuICAgIC4uLmRlZmF1bHRSZW5kZXJPcHRpb25zLFxuICAgIHdpdGhBdWRpbzogZmFsc2UsXG4gICAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gICAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gICAgZGlzYWJsZUdwdTogZmFsc2UsXG4gICAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB9LFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBleGl0ID0gKGNvZGU6IG51bWJlcikgPT4ge1xuICAgICAgYXBwLnF1aXQoKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIHByb2Nlc3Mub25jZShcIlNJR1RFUk1cIiwgKCkgPT4gZXhpdCgxNDMpKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdJTlRcIiwgKCkgPT4gZXhpdCgxMzApKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJleGl0XCIsIChjKSA9PiBleGl0KGMpKTtcbiAgICBvayhwdXBJcGNTb2NrZXQsIFwicHVwSXBjU29ja2V0IG5vdCBzZXRcIik7XG4gICAgY29uc3QgaXBjID0gYXdhaXQgY29ubmVjdElwYyhwdXBJcGNTb2NrZXQpO1xuICAgIHRyeSB7XG4gICAgICBhcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG9wdGlvbnMub3V0RmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBpcGMud3JpdGVEb25lKGF3YWl0IGFjdGlvbihpcGMsIHNvdXJjZSwgb3B0aW9ucykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGlwYy53cml0ZUVycm9yKGVycm9yLnN0YWNrID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXBwLnF1aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==