pup-recorder 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.cjs +3 -3
- package/dist/chunk-KGAW4IX4.js +4 -0
- package/dist/cli.js +2 -2
- package/dist/index.js +1 -1
- package/dist/runtime/audio.global.js +2 -2
- package/dist/runtime/preload.cjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-N72ZECPY.js +0 -4
package/dist/app.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var C=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var ho=Object.create;var ut=Object.defineProperty;var wo=Object.getOwnPropertyDescriptor;var Ve=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),ee=r=>{throw TypeError(r)};var Wt=(r,e,t)=>e in r?ut(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var $t=r=>[,,,ho(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Fe=r=>r!==void 0&&typeof r!="function"?ee("Function expected"):r,_o=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?ee("Already initialized"):n.push(Fe(i||null))}),pt=(r,e)=>Wt(e,Ve("metadata"),r[3]),zt=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},se=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,l=false,m=false,h=2,g=Gt[u+5],S=r[h]||(r[h]=[]),P=((n=n.prototype),wo(n,t));for(var y=o.length-1;y>=0;y--)d=_o(u,t,c={},r[3],S),(d.static=l,d.private=m,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),a=(0, o[y])(P[g],d),c._=1,Fe(a)&&(P[g]=a);return P&&ut(n,t,P),n},jt=(r,e,t)=>Wt(r,e+"",t);var _=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&ee("Object expected");var o,n;t&&(o=e[Ve("asyncDispose")]),o===void 0&&(o=e[Ve("dispose")],t&&(n=o)),typeof o!="function"&&ee("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(i,c=>(n(c),i()))}catch(c){n(c);}if(t)throw e};return i()};var xo=()=>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,f=xo();function qt(r,e,t){try{return e(process.env[r])}catch{return t}}function W(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}function Yt(r){return typeof r=="string"?r:String(r)}function lt(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var Po=module$1.createRequire(f),Xt=qt("PUP_LOG_LEVEL",W,2),ae=path.dirname(Po.resolve("pup-recorder/package.json"));path.join(ae,"dist","app.cjs");var Jt=path.join(ae,"dist","runtime","preload.cjs");var ft="<pup@debug>",ht="<pup@info>",wt="<pup@warn>",_t="<pup@error>",gt="<pup@fatal>";function ke(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Qt,Zt,er,tr,rr,te;rr=[ke],tr=[ke],er=[ke],Zt=[ke],Qt=[ke];var $=class{constructor(e=Xt){this._level=e;zt(te,5,this);jt(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,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(ft,...e);}info(...e){this.impl?.info?.(ht,...e);}warn(...e){this.impl?.warn?.(wt,...e);}error(...e){this.impl?.error?.(_t,...e);}fatal(...e){this.impl?.error?.(gt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ft)?this.debug(t.slice(ft.length+1)):t.startsWith(ht)?this.info(t.slice(ht.length+1)):t.startsWith(wt)?this.warn(t.slice(wt.length+1)):t.startsWith(_t)?this.error(t.slice(_t.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=a=>{let c=a.toString();c.startsWith(gt)?i+=c.slice(gt.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",a=>{i+=a.message,e.kill();}).once("close",(a,c)=>{a||c||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};te=$t(),se(te,1,"debug",rr,$),se(te,1,"info",tr,$),se(te,1,"warn",er,$),se(te,1,"error",Zt,$),se(te,1,"fatal",Qt,$),pt(te,$);var w=new $;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?w.error(t):r<=constants.AV_LOG_WARNING&&w.warn(t));});var To="[Crash]";function nr(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),w.debug(To,"set dump to",r);}function ce(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Io="--pup-priv-args";function ir(){let r=process.argv,e=r.find(o=>o.startsWith(Io));if(!e)return w.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)),w.debug("pupargs",t),t}var Ro=1920,Bo=1080,Mo=30,Oo=5,No=10,Do=["out/html.mp4","out/html.webm"],sr=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"),outFiles:C__default.default.array(C__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),disableWebSecurity:C__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:C__default.default.number().describe("Window load timeout in seconds"),screenshots:C__default.default.array(C__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),ar={width:Ro,height:Bo,fps:Mo,duration:Oo,outFiles:Do,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,windowTolerant:false,windowTimeout:No,screenshots:[]};function Ho(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function dr(r){let e=sr.shape,t=ar;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--disable-web-security",e.disableWebSecurity.description,t.disableWebSecurity).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(Ho(o),{width:ce(W,t.width)(n.width),height:ce(W,t.height)(n.height),fps:ce(W,t.fps)(n.fps),duration:ce(W,t.duration)(n.duration),outFiles:lt(Yt)(n.outFile),withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,disableWebSecurity:n.disableWebSecurity??t.disableWebSecurity,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:ce(W,t.windowTimeout)(n.windowTimeout),screenshots:lt(W)(n.screenshots)});}catch(i){w.fatal(i);}}),await commander.program.parseAsync(ir());}var He=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function Ue(r){return new Promise(e=>setTimeout(e,r))}function re(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}function ur(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}function We(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var $e=5e3;function Ae(r,e,t){return re(r.sendCommand(e,t),$e,`cdp.${e}`)}function bt(r,e){return re(Ae(r,"Runtime.evaluate",{expression:e}),$e,"evalIn")}function pr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${$e}ms`));},$e),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Ae(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function mr(r){await Ae(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Te(r,e){try{let t=r.debugger;await Ae(t,"Emulation.clearDeviceMetricsOverride",{}),await Ae(t,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:!1}),r.invalidate();}catch{}}var de=32;var Uo="stego-tick";function lr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
1
|
+
'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var C=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var _o=Object.create;var ut=Object.defineProperty;var bo=Object.getOwnPropertyDescriptor;var Ve=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),ee=r=>{throw TypeError(r)};var Wt=(r,e,t)=>e in r?ut(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var $t=r=>[,,,_o(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Fe=r=>r!==void 0&&typeof r!="function"?ee("Function expected"):r,xo=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?ee("Already initialized"):n.push(Fe(i||null))}),pt=(r,e)=>Wt(e,Ve("metadata"),r[3]),zt=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},se=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,f=false,m=false,h=2,_=Gt[u+5],S=r[h]||(r[h]=[]),P=((n=n.prototype),bo(n,t));for(var y=o.length-1;y>=0;y--)d=xo(u,t,c={},r[3],S),(d.static=f,d.private=m,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),a=(0, o[y])(P[_],d),c._=1,Fe(a)&&(P[_]=a);return P&&ut(n,t,P),n},jt=(r,e,t)=>Wt(r,e+"",t);var g=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&ee("Object expected");var o,n;t&&(o=e[Ve("asyncDispose")]),o===void 0&&(o=e[Ve("dispose")],t&&(n=o)),typeof o!="function"&&ee("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(i,c=>(n(c),i()))}catch(c){n(c);}if(t)throw e};return i()};var Po=()=>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=Po();function Xt(r,e,t){try{return e(process.env[r])}catch{return t}}function W(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}function Yt(r){return typeof r=="string"?r:String(r)}function ft(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var Co=module$1.createRequire(l),Kt=Xt("PUP_LOG_LEVEL",W,2),ae=path.dirname(Co.resolve("pup-recorder/package.json"));path.join(ae,"dist","app.cjs");var Jt=path.join(ae,"dist","runtime","preload.cjs");var lt="<pup@debug>",ht="<pup@info>",wt="<pup@warn>",gt="<pup@error>",_t="<pup@fatal>";function Ae(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Qt,Zt,er,tr,rr,te;rr=[Ae],tr=[Ae],er=[Ae],Zt=[Ae],Qt=[Ae];var $=class{constructor(e=Kt){this._level=e;zt(te,5,this);jt(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,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(lt,...e);}info(...e){this.impl?.info?.(ht,...e);}warn(...e){this.impl?.warn?.(wt,...e);}error(...e){this.impl?.error?.(gt,...e);}fatal(...e){this.impl?.error?.(_t,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(lt)?this.debug(t.slice(lt.length+1)):t.startsWith(ht)?this.info(t.slice(ht.length+1)):t.startsWith(wt)?this.warn(t.slice(wt.length+1)):t.startsWith(gt)?this.error(t.slice(gt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=a=>{let c=a.toString();c.startsWith(_t)?i+=c.slice(_t.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",a=>{i+=a.message,e.kill();}).once("close",(a,c)=>{a||c||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};te=$t(),se(te,1,"debug",rr,$),se(te,1,"info",tr,$),se(te,1,"warn",er,$),se(te,1,"error",Zt,$),se(te,1,"fatal",Qt,$),pt(te,$);var w=new $;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?w.error(t):r<=constants.AV_LOG_WARNING&&w.warn(t));});var Bo="[Crash]";function nr(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),w.debug(Bo,"set dump to",r);}function ce(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Mo="--pup-priv-args";function ir(){let r=process.argv,e=r.find(o=>o.startsWith(Mo));if(!e)return w.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)),w.debug("pupargs",t),t}var No=1920,Oo=1080,Do=30,Lo=5,Vo=10,Uo=["out/html.mp4","out/html.webm"],sr=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"),outFiles:C__default.default.array(C__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),disableWebSecurity:C__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),ignoreCertificateErrors:C__default.default.boolean().describe("Record over TLS the platform rejects, e.g. a self-signed intranet host"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:C__default.default.number().describe("Window load timeout in seconds"),screenshots:C__default.default.array(C__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),ar={width:No,height:Oo,fps:Do,duration:Lo,outFiles:Uo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,ignoreCertificateErrors:false,windowTolerant:false,windowTimeout:Vo,screenshots:[]};function $o(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function dr(r){let e=sr.shape,t=ar;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--disable-web-security",e.disableWebSecurity.description,t.disableWebSecurity).option("--ignore-certificate-errors",e.ignoreCertificateErrors.description,t.ignoreCertificateErrors).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run($o(o),{width:ce(W,t.width)(n.width),height:ce(W,t.height)(n.height),fps:ce(W,t.fps)(n.fps),duration:ce(W,t.duration)(n.duration),outFiles:ft(Yt)(n.outFile),withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,disableWebSecurity:n.disableWebSecurity??t.disableWebSecurity,ignoreCertificateErrors:n.ignoreCertificateErrors??t.ignoreCertificateErrors,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:ce(W,t.windowTimeout)(n.windowTimeout),screenshots:ft(W)(n.screenshots)});}catch(i){w.fatal(i);}}),await commander.program.parseAsync(ir());}var Ue=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function He(r){return new Promise(e=>setTimeout(e,r))}function re(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}function ur(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}function We(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var $e=5e3;function ke(r,e,t){return re(r.sendCommand(e,t),$e,`cdp.${e}`)}function bt(r,e){return re(ke(r,"Runtime.evaluate",{expression:e}),$e,"evalIn")}function pr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${$e}ms`));},$e),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),ke(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function mr(r){await ke(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Te(r,e){try{let t=r.debugger;await ke(t,"Emulation.clearDeviceMetricsOverride",{}),await ke(t,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:!1}),r.invalidate();}catch{}}var de=32;var Go="stego-tick";function fr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
@@ -91,6 +91,6 @@
|
|
|
91
91
|
})();
|
|
92
92
|
</script>
|
|
93
93
|
</body>
|
|
94
|
-
</html>`}function Ge(r,e){let{width:t,height:o}=e;if(t<de||o<2)return;let n=o-1,i=0;for(let s=0;s<de;s++){let a=(n*t+s)*4,d=(r[a]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function fr(r){return bt(r,"__pup_start_stego__()")}async function hr(r,e){await bt(r.debugger,`__pup_draw_stego__(${e})`);}async function wr(r){let e=new Promise(t=>r.ipc.once(Uo,t));await re(e,5e3,"stego tick");}var xt="pup",Wo="pup-frame",_r={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:xt,privileges:_r},{scheme:Wo,privileges:_r}]);function br(){electron.protocol.handle(xt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=lr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function xr(r,e){let t=new URL(`${xt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var ue=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,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,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();}};var Ie="libvpx-vp9";async function G(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=_(n,new DisposableStack);o.use(t);t.codecId=r.codec.id;t.width=r.width;t.height=r.height;t.pixelFormat=r.pixelFormat;t.timeBase=new nodeAv.Rational(1,r.fps);t.framerate=new nodeAv.Rational(r.fps,1);t.gopSize=r.fps*2;t.bitRate=BigInt(r.bitrate);t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);r.codecTag&&(t.codecTag=r.codecTag);r.colorRange!==void 0&&(t.colorRange=r.colorRange);r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[c,d]of Object.entries(r.options??{}))t.setOption(c,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,a=true;}finally{x(n,s,a);}}function oe(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=_(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var a=s,c=true;}finally{x(i,a,c);}}function B(){let r=new nodeAv.Packet;return r.alloc(),r}async function pe(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e);}finally{e.unref();}}}var z=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=B();}async png(){var o=[];try{let e=_(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=_(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(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var pn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},ze=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=B(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=_(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(a){var c=a,d=true;}finally{x(s,c,d);}}setInputRate(e){var l=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=_(l,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=pn[this._outFmt]??"flt";let d=`aformat=sample_fmts=${c}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=a;}catch(m){var h=m,g=true;}finally{x(l,h,g);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=_(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,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(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,d=true;}finally{x(s,c,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return pe(this._ctx,this._pkt,this._stream,e)}};function q(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var j=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 n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},N=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 Y=Buffer.from([0,0,0,1]);var Pt=16;var Et=23,le=32,fe=33,je=34,kr=39;function Ar(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function St(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function L(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 n=t+o;if(n+2>r.length)break;let i=r.length;for(let c=n+2;c<r.length-2;c++)if(r[c]===0&&r[c+1]===0&&(r[c+2]===1||c+3<r.length&&r[c+2]===0&&r[c+3]===1)){i=c;break}let{type:s,layerId:a}=Ar(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ct(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Ar(t[0],t[1]),[i,s]=St(o,e,n);return t[0]=i,t[1]=s,t}function V(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 ne(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var mn=48,Rr=24,ln=2,fn=10,Ft=0,hn=1;function Tr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Ir(r,e){let t=V(r);return Tr(t,e+ln,0),Tr(t,e+fn,1),ne(t)}function qe(r){let e=L(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===le?n=Ir(o.data,mn):o.type===fe&&(n=Ir(o.data,Rr)),t.push(Y,n);}return Buffer.concat(t)}function wn(r,e,t){let o=V(r),n=new N(o),i=new j;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ne(q(i.bits))}function _n(r,e,t,o){let n=V(r),i=new N(n),s=new j;for(let a=0;a<e;a++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ne(q(s.bits))}function Br(r){let e=Rr+96;return wn(r,e,1)}function Mr(r){return _n(r,16,1,1)}function gn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function bn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function xn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=Pt&&e<=Et;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):bn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===hn||n===Ft)&&(r.read(1)&&(r.readUe(),n===Ft&&r.readUe()),n===Ft&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),gn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Or(r,e,t){let o=V(r),n=new N(o),i=new N(o),s=xn(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new j;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Pt&&e<=Et&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ne(Buffer.concat([q(d.bits),o.subarray(c)]))}function yn(r){let e=new N(V(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 vn(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 Pn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===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 Nr(r,e,t){let o=yn(r);if(!o)return r;let n=new j;return vn(n,o),Pn(n,o,e,t),n.bits.push(1),n.align(0),ne(q(n.bits))}function Dr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let a=new Uint32Array(t.buffer,t.byteOffset,s);for(let c=0;c<s;c++)e[c]=a[c]>>>24;}else for(let a=0;a<i;a++){let c=a*o+3,d=a*n;for(let p=0;p<n;p++)e[d+p]=t[c+p*4];}}function En(r,e){return r===fe?Br(e):r===je?Mr(e):e}function Lr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=L(e),n=L(t),i=new Map;for(let c of n){if(c.type===le)continue;let d=i.get(c.type)??[];d.push(c),i.set(c.type,d);}let s=[],a=new Set;for(let c of o){let d=c.type===le?Nr(c.data,r.width,r.height):c.data;if(s.push(Y,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=En(c.type,p.data);s.push(Y,Ct(u,1));}}}return s.push(Sn()),Buffer.concat(s)}function Sn(){let[t,o]=St(kr,0,1),n=[],i=(s,a)=>{for(let c=a-1;c>=0;c--)n.push(s>>c&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([Y,Buffer.from([t,o]),Buffer.from([165,4]),q(n),Buffer.from([128])])}function Vr(r,e,t){let o=[];for(let n of r)o.push(Y,n.data);for(let n of e)if(n.type<le){let i=Or(n.data,n.type,t);o.push(Y,Ct(i,1));}return Buffer.concat(o)}var Ye=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:a}=this._s,c=Vr(L(e.data),L(t.data),a);n.data=qe(c),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function K(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function An(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Tn(r){let e=new N(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&K("sps_max_sub_layers_minus1",t,"0"),e.read(1),An(e,t),e.readUe();let o=e.readUe();o===3&&K("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let l=0;l<s;l++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&K("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&K("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&K("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let l=e.readUe(),m=e.readUe();d=l+m;for(let h=0;h<l;h++)e.readUe(),e.read(1);for(let h=0;h<m;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&K("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:a,numShortTermRefPicSets:c,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function In(r){let e=new N(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&K("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&K("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Hr(r){let e=L(r),t=e.find(s=>s.type===fe),o=e.find(s=>s.type===je);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Tn(V(t.data)),i=In(V(o.data));return {...n,...i}}var Ke=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Ye({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var F=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let c={preset:"p4",bf:"0",tier:"main"};let d={codec:a,width:t,height:o,fps:n,bitrate:i,options:c};let p=_(F,new DisposableStack);let u=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let l=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!l.extraData)throw new Error("nvenc: codec extradata missing");let m=Hr(u.extraData);let h=s.addStream(u,"hvc1");let g=Lr({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});h.codecpar.extradata=qe(g);let b=t*o;let S=(t+1>>1)*(o+1>>1);let P=Buffer.alloc(b+S*2);P.fill(128,b);let y=p.use(B());let v=p.use(B());let E=p.use(oe(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:y,alphaPkt:v,stream:h,alphaSwFrame:E,alphaBuf:P,hevcCfg:m})}catch(k){var A=k,Z=true;}finally{x(F,A,Z);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Dr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=a,i.duration=1n,e.pts=a,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var he=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var l=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=_(l,new DisposableStack);let d=c.use(await G({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(B());let u=i.addStream(d,o);c.move();return new r(d,p,u)}catch(m){var h=m,g=true;}finally{x(l,h,g);}}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 pe(this._ctx,this._pkt,this._stream,e)}};var Xe=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:a}=e;let c=i.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let d=await G({codec:c,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=_(m,new DisposableStack);p.use(d);let u=p.use(B());let l=a.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(h){var g=h,b=true;}finally{x(m,g,b);}}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 pe(this._ctx,this._pkt,this._stream,e)}};var Je="[Encoder]";async function Wr(r,e){var m=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:a}=r;let c=a??(s?void 0:api.HardwareContext.auto()??void 0);let d=!a&&!!c;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return w.debug(Je,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Xe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return w.debug(Je,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Ke.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(S){w.warn(Je,"Hardware codec session limits reached, use software encoder",S),d&&c?.dispose();}w.debug(Je,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await he.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let l=p.use(await z.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(h){var g=h,b=true;}finally{x(m,g,b);}}var we=class{_ctx;_opened=false;_disposed=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=_(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Me=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){var s=[];try{let t=_(s,new AsyncDisposableStack,!0);let o=t.use(new we(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(a){var c=a,d=true;}finally{var p=x(s,c,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a}=e;return Wr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await he.create({width:o,height:n,fps:i,codecName:Ie,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await z.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return ze.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:a}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),a&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var _e=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var h=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:a=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let c=i.map(y=>Me.kindFromPath(y));let d=!a&&c.includes("mp4");let p=_(h,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let l=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let m=[];for(let y=0;y<i.length;y++){let v=await Me.create({outFile:i[y],kind:c[y],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[y]==="mp4"&&l?u:void 0});p.use(v),m.push(v);}p.move();return new r({sinks:m,sharedHw:u,limiter:new ue(1),outFiles:i,opts:e})}catch(g){var b=g,S=true;}finally{var P=x(h,b,S);P&&await P;}}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=_(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(a=>a.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await z.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){var n=[];try{let t=_(n,new DisposableStack);let o=t.use(oe(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,a=true;}finally{x(n,s,a);}}};function Qe(r,e){return r.width===e.width&&r.height===e.height}function si(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function ai(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,a=0,c=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,l=si(r,u),m=(i.get(l)??0)+1;i.set(l,m),s.has(l)||s.set(l,u),m>c&&(c=m,a=l);}return s.get(a)??0}function ci(r,e,t){let o=ai(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),a=r.readUInt8(o+3),c=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let l=(d*e+u)*4;if((Math.abs(r.readUInt8(l)-n)>8||Math.abs(r.readUInt8(l+1)-i)>8||Math.abs(r.readUInt8(l+2)-s)>8||Math.abs(r.readUInt8(l+3)-a)>8)&&(c++,c>=16))return false}}return true}var ge=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,ci(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};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 c of this._bursts){e+=c,o=Math.max(o,c);let d=Math.max(0,c-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),a=1-(1-i)*(1-s);return {global:i,local:s,jank:a,expected:n,actual:this._actual,maxBurst:o}}};var Gr="audio-meta",zr="audio-chunk";function jr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate,d=t();e.setupAudio(c);let p=Math.ceil(d*c/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,a)=>{try{await e.encodeAudio(a);}catch(c){o(c);}};return r.ipc.on(Gr,n),r.ipc.on(zr,i),()=>{r.ipc.removeListener(Gr,n),r.ipc.removeListener(zr,i);}}var xe=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function Ze({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let a=[r(...i)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(a)}catch(a){if(o?.throwIfAborted(),s++,s>=e)throw a;await Ue(2**s*100+Math.random()*100);}}}}var qr="--pup-world=";var et=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 tt="[Network]",hi=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),wi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function _i(r){for(let e of wi)if(r.startsWith(e))return true;return false}function ye(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=hi.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Yr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new ue(256),s=new Map;async function a(d,p){let u=new et;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function c(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let l=t?ye(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return w.debug(tt,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),_i(u)?Promise.resolve():a(m,()=>{w.warn(tt,"maybe timeout:",{key:m,url:u,proxied:l,method:d.method,source:r});})});}),n.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),w.debug(tt,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;c(p);let{url:u,method:l,error:m,resourceType:h}=d;w[o&&h==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](tt,"error:",{key:p,url:u,method:l,error:m,resourceType:h,source:r});});}function kt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var X="[Window]",Kr=new Error("window timeout"),bi=["Mixed Content: The page at"];function xi({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,a)=>{let c=false,d=setTimeout(()=>p(n&&c?void 0:Kr),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{w.debug(X,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{w.debug(X,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,h)=>{let g=`did-fail-load: ${JSON.stringify({url:h,source:r,code:l,desc:m})}`;w.error(X,g),p(new Error(g));}),e.webContents.once("preload-error",(u,l,m)=>{w.error(X,`preload-error: ${JSON.stringify({source:r,message:m.message})}`),p(m);}),e.webContents.once("render-process-gone",(u,{exitCode:l,reason:m})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;w.error(X,h),p(new Error(h));}),t();})}function ve(r){return new Promise(e=>{kt(r);let t=setTimeout(()=>{try{w.warn(X,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}var yi={shoot:path.join(ae,"dist","runtime","shoot.global.js"),render:path.join(ae,"dist","runtime","render.global.js"),audio:path.join(ae,"dist","runtime","audio.global.js")};function vi(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return yi[e]}async function Xr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:a}=e,c=a?ye(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegrationInSubFrames:true,sandbox:false,webSecurity:!e.disableWebSecurity,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Jt,additionalArguments:[`${qr}${vi(e)}`]}});Yr({source:r,window:d,useInnerProxy:a,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:l,sourceId:m})=>{if(p==="warning"&&bi.find(g=>u.startsWith(g)))return;let h=[X,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?w.error(...h):w.debug(...h),e.onConsole(p,u);});try{let p=xr(c,{width:i,height:s});await xi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await ve(d),p}return d}var Pi=Ze({fn:Xr,maxAttempts:2});async function rt({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await Pi({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>Xr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Kr)return w.warn(X,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:a,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}n&&(n.webContents.removeAllListeners(),kt(n),await Ue(2e3),await ve(n));try{return await s()}catch(a){let{message:c,stack:d}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:d})}`)}}var Jr="[Render]";async function Qr(r){var De=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;let u=_(De,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let l=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let m=Math.ceil(t*i);let h=1e3/t;let g={width:o,height:n+1};let b=0;let S;let P=[];let y;let v=0;let E;let F;let k;let A;let Z=new ge(o,n);let H=new be(t);let Pe;let Ee=T=>{b++,Z.sample(T),u.encodeBGRA(T).catch(R=>E??=R);};let Ne=(T,R,D)=>{if(E??=d?.reason,E){k?.(E);return}let O=D.getSize();if(!Qe(O,g)){Te(I.webContents,g);return}let Se=D.toBitmap(),ie=Ge(Se,O);if(ie===void 0){E??=new Error(`no timestamp @ ${b}`);return}if(y!==void 0&&ie-y<h*.8)return;let Ce=Buffer.from(Se.buffer,Se.byteOffset,n*o*4);if(S=Ce,l.capture(ie,Ce),y===void 0)Ee(Ce),H.wrote();else {let Nt=ie-y;if(Nt<=h*1.2)Ee(Ce),H.wrote();else {let Dt=Math.round(Nt/h);H.dropped(Dt-1),H.wrote();for(let Lt=0;Lt<Dt&&b<m;Lt++)Ee(Ce);}}y=ie;let Ot=Math.floor(b/m*100);Ot!==v&&(v=Ot,p(v));let fo=i*1e3;(ie>=fo-h*.5||b>=m)&&F?.();};let I=await rt({source:e,renderer:r,signal:d,onCreated:T=>{s&&(Pe=jr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:R=>E??=R}));}});let ct=I.webContents.debugger;try{I.webContents.stopPainting(),I.webContents.setFrameRate(t),I.webContents.on("paint",Ne),I.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>k?.(d.reason),{once:!0}),await fr(ct),await new Promise((T,R)=>{[F,k]=[T,R];let D=0,O=0;A=We(async()=>{if(b!==D){D=b,O=0;return}O++,O>=t?k?.(new Error(`renderer stalled for ${Math.round(O*1e3/t)}ms @ ${b}`)):(O===1||O===Math.floor(t/2))&&await Te(I.webContents,g);},1e3/t);});}finally{A?.(),I.webContents.off("paint",Ne),await ve(I),Pe?.(),await u.finish(),P=await l.finish(S);}if(E||b===0)throw E??new Error("no frames captured");else {let T=Z.finalize();T>=.5&&w.warn(Jr,`${e} blank-frame ratio ${Math.round(T*100)}% \u2014 possible white/blank screen`);let{jank:R}=H.finalize();return R>=.25&&w.warn(Jr,`${e} jank score ${R.toFixed(2)} \u2014 dropped frames`),{written:b,outFiles:a,blank:T,screenshots:P,jank:R}}}catch(dt){var Le=dt,U=true;}finally{var M=x(De,Le,U);M&&await M;}}var Ei="[Video]";async function Zr({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ur(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),w.warn(Ei,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var eo="__pup_tick__";async function to(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${eo}&&window.${eo}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([re(n,5e3,"tick.executeJavaScript"),Zr(r)]);}var Ci="8000000";function ot(r,e){let t={signal:e,options:{rw_timeout:Ci}};return api.Demuxer.open(r,t)}async function*ro({src:r,meta:e,signal:t}){var y=[];try{let o=_(y,await ot(r,t),!0);let n=o.streams?.find(A=>A.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=_(y,await api.Decoder.create(n,{signal:t}));let{frameWidth:s,frameHeight:a,width:c,height:d,fps:p}=e;let u=s!==c||a!==d?`scale=${s}:${a},`:"";let l=_(y,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let m=0;for await(var h of l.frames(i.frames(o.packets(n.index)))){var g=[];try{let A=_(g,h);A&&(yield {idx:++m,buf:Ti(A)});}catch(b){var S=b,P=!0;}finally{x(g,S,P);}}}catch(v){var E=v,F=true;}finally{var k=x(y,E,F);k&&await k;}}function Ti(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var Ii="[DecodeSession]",Ri=4,Bi=16,Mi=256*1024*1024,Oi=3,nt=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Bi,Math.floor(Mi/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,w.warn(Ii,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Oi||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=ro({src:this._src,meta:this.meta,signal:this._ctrl.signal});for await(let{idx:o,buf:n}of t){if(this._closed||this._gen!==e)return;let i=this._leadFrames+o;for(;!this._closed&&this._gen===e&&i>this.demand+Ri;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,n),this._ready=i,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function oo(r){var S=[];try{let e=_(S,await ot(r),!0);let t=e.streams?.find(F=>F.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=_(S,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var l of e.packets(t.index)){var m=[];try{let F=_(m,l);try{for await(var a of i.frames(F)){var c=[];try{let k=_(c,a);if(k?.decodeErrorFlags===0){s=Math.max(0,Number(k.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(h){var g=h,b=!0;}finally{x(m,g,b);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(P){var y=P,v=true;}finally{var E=x(S,y,v);E&&await E;}}async function io({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Ie);if(!o)throw new Error(`stub: encoder not found: ${Ie}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=_(i,new we(n),!0);let u=_(i,await G({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let l=p.addStream(u);await p.open();let m=_(i,new Bt(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let g=_(i,B());for(;;){let b=await u.receivePacket(g);if(b===constants.AVERROR_EAGAIN||b===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(b,"stubCtx.receivePacket"),g.streamIndex=l.index,g.duration=h,g.rescaleTs(u.timeBase,l.timeBase),await p.writePacket(g),g.unref();}}catch(s){var a=s,c=!0;}finally{var d=x(i,a,c);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var Bt=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var it=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=Yi(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?ye(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,a=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=so(i.width*d),a=so(i.height*d);}let c={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:a,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new nt(c,n),refs:1}),c}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?ye(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>io({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=Ze({fn:oo})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function Yi(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function so(r){let e=Math.round(r);return Math.max(2,e-e%2)}var co="[FrameProtocol]",uo="pup-frame",J={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function po(r){let e=new it(r);return electron.protocol.handle(uo,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:J});let o=new URL(t.url);w.debug(co,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Ki(await e.open({src:o.searchParams.get("src")??"",fps:st(o,"fps",30),dstW:st(o,"w",0),dstH:st(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return Ji(await e.getFrame(o.searchParams.get("id")??"",st(o,"idx",1)));case "stub":return Xi(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:J});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:J})}}catch(n){let i=n instanceof Error?n.message:String(n);return w.error(co,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:J})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(uo),await e.closeAll();}}}function Ki(r){return new Response(JSON.stringify(r),{headers:{...J,"content-type":"application/json"}})}function Xi(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"video/webm","cache-control":"no-store"}})}function Ji(r){if(r.byteLength===0)return new Response(null,{status:410,headers:J});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"application/octet-stream","cache-control":"no-store"}})}function st(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Oe="[Shoot]",Qi=240;async function Zi({win:r,fps:e,size:t,ms:o}){let n,i={width:t.width,height:t.height+1};try{return await new Promise(s=>{let a=(c,d,p)=>{let u=p.getSize();if(!Qe(u,i))return;let l=p.crop({x:0,y:i.height-2,width:de,height:2}),m=Ge(l.toBitmap(),{width:de,height:2});if(m===void 0||Math.abs(m-o)>1)return;let h=p.toBitmap();r.webContents.off("paint",a),s(Buffer.from(h.buffer,h.byteOffset,t.height*t.width*4));};r.webContents.on("paint",a),n=We(async c=>{c>=e*5?(w.warn(Oe,`paint timeout @ ${o}`),r.webContents.off("paint",a),s(void 0)):c%Math.floor(e/2)===0&&await Te(r.webContents,i);},1e3/e);})}finally{n?.();}}async function mo(r){var I=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&w.warn(Oe,"audio will be ignored on this mode");let u=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let l=_(I,po(r.useInnerProxy),!0);let m=performance.now();let h=rt({source:e,renderer:r,signal:d});let g=_(I,await _e.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let b=await h;w.debug(Oe,"init done:",{source:e,cost:Math.round(performance.now()-m)});let S=Math.ceil(t*i);let P=1e3/t;let y=0;let v=0;let E=0;let F;let k=[];let A;let Z=new ge(o,n);let H=new be(t);let Pe=b.webContents.debugger;let Ee=b.webContents.mainFrame;let Ne=Ee.frames[0];try{b.webContents.setFrameRate(Qi),await mr(Pe);for(let U=0;U<S;U++){d?.throwIfAborted();let M=(U+1)*P,T=wr(b.webContents);T.catch(()=>{}),await Promise.all([to({frame:Ne,timestampMs:M,signal:d}),hr(b.webContents,M)]),await Promise.all([pr(Pe,P),T]);let R=await Zi({source:e,fps:t,win:b,size:{width:o,height:n},ms:M});R?(E=0,H.wrote()):(E++,H.dropped(1));let D=R??F;if(!D||E>=t)throw new Error(`renderer exausted @ ${M}`);if(F=D,u.capture(M,D),Z.sample(D),g.encodeBGRA(D).catch(Se=>A??=Se),y++,A)throw A;let O=Math.floor(y/S*100);O!==v&&(v=O,p(v));}}finally{await ve(b),await g.finish(),k=await u.finish(F);}if(A)throw A;if(y===0)throw new Error("no frames captured");else {let U=Z.finalize();U>=.5&&w.warn(Oe,`${e} blank-frame ratio ${Math.round(U*100)}% \u2014 possible white/blank screen`);let{jank:M}=H.finalize();return M>=.25&&w.warn(Oe,`${e} jank score ${M.toFixed(2)} \u2014 frames held past paint timeout`),{written:y,outFiles:a,blank:U,jank:M,screenshots:k}}}catch(ct){var De=ct,dt=true;}finally{var Le=x(I,De,dt);Le&&await Le;}}var ns="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function lo(){w.debug(ns,"gpu features:",electron.app.getGPUFeatureStatus());}var at=new AbortController,Mt=false;nr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",lo);electron.app.on("before-quit",r=>!Mt&&r.preventDefault());electron.app.on("will-quit",r=>!Mt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>at.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&at.abort(e.reason);});dr({name:"app",run:async(r,e)=>{let t=new He;try{await electron.app.whenReady(),br(),lo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?mo:Qr;at.signal.throwIfAborted();let n=await o({source:r,...e,signal:at.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)});await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{Mt=true,electron.app.exit();}}});
|
|
94
|
+
</html>`}function Ge(r,e){let{width:t,height:o}=e;if(t<de||o<2)return;let n=o-1,i=0;for(let s=0;s<de;s++){let a=(n*t+s)*4,d=(r[a]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function lr(r){return bt(r,"__pup_start_stego__()")}async function hr(r,e){await bt(r.debugger,`__pup_draw_stego__(${e})`);}async function wr(r){let e=new Promise(t=>r.ipc.once(Go,t));await re(e,5e3,"stego tick");}var xt="pup",zo="pup-frame",gr={standard:true,secure:true,bypassCSP:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:xt,privileges:gr},{scheme:zo,privileges:gr}]);function br(){electron.protocol.handle(xt,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=fr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function xr(r,e){let t=new URL(`${xt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var ue=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,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,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();}};var Re="libvpx-vp9";async function G(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=g(n,new DisposableStack);o.use(t);t.codecId=r.codec.id;t.width=r.width;t.height=r.height;t.pixelFormat=r.pixelFormat;t.timeBase=new nodeAv.Rational(1,r.fps);t.framerate=new nodeAv.Rational(r.fps,1);t.gopSize=r.fps*2;t.bitRate=BigInt(r.bitrate);t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);r.codecTag&&(t.codecTag=r.codecTag);r.colorRange!==void 0&&(t.colorRange=r.colorRange);r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[c,d]of Object.entries(r.options??{}))t.setOption(c,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,a=true;}finally{x(n,s,a);}}function oe(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=g(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var a=s,c=true;}finally{x(i,a,c);}}function B(){let r=new nodeAv.Packet;return r.alloc(),r}async function pe(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e);}finally{e.unref();}}}var z=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=B();}async png(){var o=[];try{let e=g(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=g(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(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var ln={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},ze=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=B(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=g(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(a){var c=a,d=true;}finally{x(s,c,d);}}setInputRate(e){var f=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=g(f,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=ln[this._outFmt]??"flt";let d=`aformat=sample_fmts=${c}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=a;}catch(m){var h=m,_=true;}finally{x(f,h,_);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=g(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,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(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,d=true;}finally{x(s,c,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return pe(this._ctx,this._pkt,this._stream,e)}};function X(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var j=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 n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},O=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var Y=Buffer.from([0,0,0,1]);var Pt=16;var Et=23,fe=32,le=33,je=34,Ar=39;function kr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function St(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function L(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 n=t+o;if(n+2>r.length)break;let i=r.length;for(let c=n+2;c<r.length-2;c++)if(r[c]===0&&r[c+1]===0&&(r[c+2]===1||c+3<r.length&&r[c+2]===0&&r[c+3]===1)){i=c;break}let{type:s,layerId:a}=kr(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ct(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=kr(t[0],t[1]),[i,s]=St(o,e,n);return t[0]=i,t[1]=s,t}function V(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 ne(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var hn=48,Ir=24,wn=2,gn=10,Ft=0,_n=1;function Tr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Rr(r,e){let t=V(r);return Tr(t,e+wn,0),Tr(t,e+gn,1),ne(t)}function Xe(r){let e=L(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===fe?n=Rr(o.data,hn):o.type===le&&(n=Rr(o.data,Ir)),t.push(Y,n);}return Buffer.concat(t)}function bn(r,e,t){let o=V(r),n=new O(o),i=new j;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ne(X(i.bits))}function xn(r,e,t,o){let n=V(r),i=new O(n),s=new j;for(let a=0;a<e;a++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ne(X(s.bits))}function Br(r){let e=Ir+96;return bn(r,e,1)}function Mr(r){return xn(r,16,1,1)}function yn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function vn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function Pn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=Pt&&e<=Et;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):vn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===_n||n===Ft)&&(r.read(1)&&(r.readUe(),n===Ft&&r.readUe()),n===Ft&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),yn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Nr(r,e,t){let o=V(r),n=new O(o),i=new O(o),s=Pn(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new j;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Pt&&e<=Et&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ne(Buffer.concat([X(d.bits),o.subarray(c)]))}function En(r){let e=new O(V(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 Sn(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 Cn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===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 Or(r,e,t){let o=En(r);if(!o)return r;let n=new j;return Sn(n,o),Cn(n,o,e,t),n.bits.push(1),n.align(0),ne(X(n.bits))}function Dr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let a=new Uint32Array(t.buffer,t.byteOffset,s);for(let c=0;c<s;c++)e[c]=a[c]>>>24;}else for(let a=0;a<i;a++){let c=a*o+3,d=a*n;for(let p=0;p<n;p++)e[d+p]=t[c+p*4];}}function Fn(r,e){return r===le?Br(e):r===je?Mr(e):e}function Lr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=L(e),n=L(t),i=new Map;for(let c of n){if(c.type===fe)continue;let d=i.get(c.type)??[];d.push(c),i.set(c.type,d);}let s=[],a=new Set;for(let c of o){let d=c.type===fe?Or(c.data,r.width,r.height):c.data;if(s.push(Y,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=Fn(c.type,p.data);s.push(Y,Ct(u,1));}}}return s.push(An()),Buffer.concat(s)}function An(){let[t,o]=St(Ar,0,1),n=[],i=(s,a)=>{for(let c=a-1;c>=0;c--)n.push(s>>c&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([Y,Buffer.from([t,o]),Buffer.from([165,4]),X(n),Buffer.from([128])])}function Vr(r,e,t){let o=[];for(let n of r)o.push(Y,n.data);for(let n of e)if(n.type<fe){let i=Nr(n.data,n.type,t);o.push(Y,Ct(i,1));}return Buffer.concat(o)}var Ye=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:a}=this._s,c=Vr(L(e.data),L(t.data),a);n.data=Xe(c),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function q(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function In(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Bn(r){let e=new O(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&q("sps_max_sub_layers_minus1",t,"0"),e.read(1),In(e,t),e.readUe();let o=e.readUe();o===3&&q("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let f=0;f<s;f++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&q("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&q("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&q("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let f=e.readUe(),m=e.readUe();d=f+m;for(let h=0;h<f;h++)e.readUe(),e.read(1);for(let h=0;h<m;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&q("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:a,numShortTermRefPicSets:c,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Mn(r){let e=new O(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&q("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&q("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Ur(r){let e=L(r),t=e.find(s=>s.type===le),o=e.find(s=>s.type===je);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Bn(V(t.data)),i=Mn(V(o.data));return {...n,...i}}var qe=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Ye({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var F=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let c={preset:"p4",bf:"0",tier:"main"};let d={codec:a,width:t,height:o,fps:n,bitrate:i,options:c};let p=g(F,new DisposableStack);let u=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let f=p.use(await G({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!f.extraData)throw new Error("nvenc: codec extradata missing");let m=Ur(u.extraData);let h=s.addStream(u,"hvc1");let _=Lr({baseExtradata:u.extraData,alphaExtradata:f.extraData,width:t,height:o});h.codecpar.extradata=Xe(_);let b=t*o;let S=(t+1>>1)*(o+1>>1);let P=Buffer.alloc(b+S*2);P.fill(128,b);let y=p.use(B());let v=p.use(B());let E=p.use(oe(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:f,basePkt:y,alphaPkt:v,stream:h,alphaSwFrame:E,alphaBuf:P,hevcCfg:m})}catch(A){var k=A,Z=true;}finally{x(F,k,Z);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Dr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=a,i.duration=1n,e.pts=a,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var he=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var f=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=g(f,new DisposableStack);let d=c.use(await G({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(B());let u=i.addStream(d,o);c.move();return new r(d,p,u)}catch(m){var h=m,_=true;}finally{x(f,h,_);}}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 pe(this._ctx,this._pkt,this._stream,e)}};var Ke=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:a}=e;let c=i.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let d=await G({codec:c,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=g(m,new DisposableStack);p.use(d);let u=p.use(B());let f=a.addStream(d,"hvc1");p.move();return new r(d,u,f)}catch(h){var _=h,b=true;}finally{x(m,_,b);}}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 pe(this._ctx,this._pkt,this._stream,e)}};var Je="[Encoder]";async function Wr(r,e){var m=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:a}=r;let c=a??(s?void 0:api.HardwareContext.auto()??void 0);let d=!a&&!!c;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return w.debug(Je,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ke.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return w.debug(Je,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await qe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(S){w.warn(Je,"Hardware codec session limits reached, use software encoder",S),d&&c?.dispose();}w.debug(Je,"using software libx265 HEVC alpha encoder");let p=g(m,new DisposableStack);let u=p.use(await he.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let f=p.use(await z.create(t,o));p.move();return {video:u,codec:f,ownsHw:!1}}catch(h){var _=h,b=true;}finally{x(m,_,b);}}var we=class{_ctx;_opened=false;_disposed=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=g(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Me=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){var s=[];try{let t=g(s,new AsyncDisposableStack,!0);let o=t.use(new we(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(a){var c=a,d=true;}finally{var p=x(s,c,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a}=e;return Wr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:a},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await he.create({width:o,height:n,fps:i,codecName:Re,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await z.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return ze.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:a}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),a&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var ge=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var h=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:a=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let c=i.map(y=>Me.kindFromPath(y));let d=!a&&c.includes("mp4");let p=g(h,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let f=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let m=[];for(let y=0;y<i.length;y++){let v=await Me.create({outFile:i[y],kind:c[y],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[y]==="mp4"&&f?u:void 0});p.use(v),m.push(v);}p.move();return new r({sinks:m,sharedHw:u,limiter:new ue(1),outFiles:i,opts:e})}catch(_){var b=_,S=true;}finally{var P=x(h,b,S);P&&await P;}}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=g(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(a=>a.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await z.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){var n=[];try{let t=g(n,new DisposableStack);let o=t.use(oe(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,a=true;}finally{x(n,s,a);}}};function Qe(r,e){return r.width===e.width&&r.height===e.height}function di(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function ui(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,a=0,c=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,f=di(r,u),m=(i.get(f)??0)+1;i.set(f,m),s.has(f)||s.set(f,u),m>c&&(c=m,a=f);}return s.get(a)??0}function pi(r,e,t){let o=ui(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),a=r.readUInt8(o+3),c=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let f=(d*e+u)*4;if((Math.abs(r.readUInt8(f)-n)>8||Math.abs(r.readUInt8(f+1)-i)>8||Math.abs(r.readUInt8(f+2)-s)>8||Math.abs(r.readUInt8(f+3)-a)>8)&&(c++,c>=16))return false}}return true}var _e=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,pi(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};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 c of this._bursts){e+=c,o=Math.max(o,c);let d=Math.max(0,c-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),a=1-(1-i)*(1-s);return {global:i,local:s,jank:a,expected:n,actual:this._actual,maxBurst:o}}};var Gr="audio-meta",zr="audio-chunk";function jr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate;if(!Number.isFinite(c)||c<=0||c>192e3)return;let d=t();e.setupAudio(c);let p=Math.ceil(d*c/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,a)=>{let c=ArrayBuffer.isView(a)?a.byteLength:0;if(!(c===0||c>384e3||c%8!==0))try{await e.encodeAudio(a);}catch(d){o(d);}};return r.ipc.on(Gr,n),r.ipc.on(zr,i),()=>{r.ipc.removeListener(Gr,n),r.ipc.removeListener(zr,i);}}var xe=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function Ze({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let a=[r(...i)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(a)}catch(a){if(o?.throwIfAborted(),s++,s>=e)throw a;await He(2**s*100+Math.random()*100);}}}}var Xr="--pup-world=",Yr="--pup-audio";var et=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 tt="[Network]",Kr=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),gi=new Set(Kr.values()),_i=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function bi(r){for(let e of _i)if(r.startsWith(e))return true;return false}function xi(r){return r.startsWith("http")&&gi.has(new url.URL(r).hostname)}function ye(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=Kr.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Jr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new ue(256),s=new Map;async function a(d,p){let u=new et;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function c(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let f=t?ye(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return w.debug(tt,"start:",{key:m,url:u,proxied:f,method:d.method,source:r,stats:i.stats}),p(f===u?{cancel:false}:{cancel:false,redirectURL:f}),bi(u)?Promise.resolve():a(m,()=>{w.warn(tt,"maybe timeout:",{key:m,url:u,proxied:f,method:d.method,source:r});})});}),n.onHeadersReceived(({url:d,responseHeaders:p},u)=>{if(delete p?.["x-frame-options"],delete p?.["X-Frame-Options"],delete p?.["content-security-policy"],delete p?.["Content-Security-Policy"],t&&xi(d)){u({cancel:false,responseHeaders:{...p,"access-control-allow-origin":["*"]}});return}u({cancel:false,responseHeaders:p});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),w.debug(tt,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;c(p);let{url:u,method:f,error:m,resourceType:h}=d;w[o&&h==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](tt,"error:",{key:p,url:u,method:f,error:m,resourceType:h,source:r});});}function At(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var K="[Window]",Qr=new Error("window timeout"),vi=["Mixed Content: The page at"];function Pi({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,a)=>{let c=false,d=setTimeout(()=>p(n&&c?void 0:Qr),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{w.debug(K,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{w.debug(K,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,f,m,h)=>{let _=`did-fail-load: ${JSON.stringify({url:h,source:r,code:f,desc:m})}`;w.error(K,_),p(new Error(_));}),e.webContents.once("preload-error",(u,f,m)=>{w.error(K,`preload-error: ${JSON.stringify({source:r,message:m.message})}`),p(m);}),e.webContents.once("render-process-gone",(u,{exitCode:f,reason:m})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:f,reason:m})}`;w.error(K,h),p(new Error(h));}),t();})}function ve(r){return new Promise(e=>{At(r);let t=setTimeout(()=>{try{w.warn(K,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}var Ei={shoot:path.join(ae,"dist","runtime","shoot.global.js"),render:path.join(ae,"dist","runtime","render.global.js"),audio:path.join(ae,"dist","runtime","audio.global.js")};function Si(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return Ei[e]}async function Zr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:a}=e,c=a?ye(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegrationInSubFrames:true,sandbox:false,webSecurity:!e.disableWebSecurity,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Jt,additionalArguments:[`${Xr}${Si(e)}`,...e.withAudio?[Yr]:[]]}});Jr({source:r,window:d,useInnerProxy:a,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:f,sourceId:m})=>{if(p==="warning"&&vi.find(_=>u.startsWith(_)))return;let h=[K,"console:",{message:u,lineNumber:f,sourceId:m,source:r}];p==="error"?w.error(...h):w.debug(...h),e.onConsole(p,u);});try{let p=xr(c,{width:i,height:s});await Pi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await ve(d),p}return d}var Ci=Ze({fn:Zr,maxAttempts:2});async function rt({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await Ci({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>Zr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Qr)return w.warn(K,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:a,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}n&&(n.webContents.removeAllListeners(),At(n),await He(2e3),await ve(n));try{return await s()}catch(a){let{message:c,stack:d}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:d})}`)}}var eo="[Render]";async function to(r){var De=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;let u=g(De,await ge.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let f=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let m=Math.ceil(t*i);let h=1e3/t;let _={width:o,height:n+1};let b=0;let S;let P=[];let y;let v=0;let E;let F;let A;let k;let Z=new _e(o,n);let U=new be(t);let Pe;let Ee=T=>{b++,Z.sample(T),u.encodeBGRA(T).catch(I=>E??=I);};let Oe=(T,I,D)=>{if(E??=d?.reason,E){A?.(E);return}let N=D.getSize();if(!Qe(N,_)){Te(R.webContents,_);return}let Se=D.toBitmap(),ie=Ge(Se,N);if(ie===void 0){E??=new Error(`no timestamp @ ${b}`);return}if(y!==void 0&&ie-y<h*.8)return;let Ce=Buffer.from(Se.buffer,Se.byteOffset,n*o*4);if(S=Ce,f.capture(ie,Ce),y===void 0)Ee(Ce),U.wrote();else {let Ot=ie-y;if(Ot<=h*1.2)Ee(Ce),U.wrote();else {let Dt=Math.round(Ot/h);U.dropped(Dt-1),U.wrote();for(let Lt=0;Lt<Dt&&b<m;Lt++)Ee(Ce);}}y=ie;let Nt=Math.floor(b/m*100);Nt!==v&&(v=Nt,p(v));let go=i*1e3;(ie>=go-h*.5||b>=m)&&F?.();};let R=await rt({source:e,renderer:r,signal:d,onCreated:T=>{s&&(Pe=jr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:I=>E??=I}));}});let ct=R.webContents.debugger;try{R.webContents.stopPainting(),R.webContents.setFrameRate(t),R.webContents.on("paint",Oe),R.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>A?.(d.reason),{once:!0}),await lr(ct),await new Promise((T,I)=>{[F,A]=[T,I];let D=0,N=0;k=We(async()=>{if(b!==D){D=b,N=0;return}N++,N>=t?A?.(new Error(`renderer stalled for ${Math.round(N*1e3/t)}ms @ ${b}`)):(N===1||N===Math.floor(t/2))&&await Te(R.webContents,_);},1e3/t);});}finally{k?.(),R.webContents.off("paint",Oe),await ve(R),Pe?.(),await u.finish(),P=await f.finish(S);}if(E||b===0)throw E??new Error("no frames captured");else {let T=Z.finalize();T>=.5&&w.warn(eo,`${e} blank-frame ratio ${Math.round(T*100)}% \u2014 possible white/blank screen`);let{jank:I}=U.finalize();return I>=.25&&w.warn(eo,`${e} jank score ${I.toFixed(2)} \u2014 dropped frames`),{written:b,outFiles:a,blank:T,screenshots:P,jank:I}}}catch(dt){var Le=dt,H=true;}finally{var M=x(De,Le,H);M&&await M;}}var Fi="[Video]";async function ro({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ur(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),w.warn(Fi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var oo="__pup_tick__";async function no(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${oo}&&window.${oo}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([re(n,5e3,"tick.executeJavaScript"),ro(r)]);}var ki="8000000";function ot(r,e){let t={signal:e,options:{rw_timeout:ki}};return api.Demuxer.open(r,t)}async function*io({src:r,meta:e,signal:t}){var y=[];try{let o=g(y,await ot(r,t),!0);let n=o.streams?.find(k=>k.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=g(y,await api.Decoder.create(n,{signal:t}));let{frameWidth:s,frameHeight:a,width:c,height:d,fps:p}=e;let u=s!==c||a!==d?`scale=${s}:${a},`:"";let f=g(y,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let m=0;for await(var h of f.frames(i.frames(o.packets(n.index)))){var _=[];try{let k=g(_,h);k&&(yield {idx:++m,buf:Bi(k)});}catch(b){var S=b,P=!0;}finally{x(_,S,P);}}}catch(v){var E=v,F=true;}finally{var A=x(y,E,F);A&&await A;}}function Bi(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var Mi="[DecodeSession]",Ni=4,Oi=16,Di=256*1024*1024,Li=3,nt=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Oi,Math.floor(Di/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,w.warn(Mi,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Li||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=io({src:this._src,meta:this.meta,signal:this._ctrl.signal});for await(let{idx:o,buf:n}of t){if(this._closed||this._gen!==e)return;let i=this._leadFrames+o;for(;!this._closed&&this._gen===e&&i>this.demand+Ni;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,n),this._ready=i,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function so(r){var S=[];try{let e=g(S,await ot(r),!0);let t=e.streams?.find(F=>F.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=g(S,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var f of e.packets(t.index)){var m=[];try{let F=g(m,f);try{for await(var a of i.frames(F)){var c=[];try{let A=g(c,a);if(A?.decodeErrorFlags===0){s=Math.max(0,Number(A.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(h){var _=h,b=!0;}finally{x(m,_,b);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(P){var y=P,v=true;}finally{var E=x(S,y,v);E&&await E;}}async function co({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Re);if(!o)throw new Error(`stub: encoder not found: ${Re}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=g(i,new we(n),!0);let u=g(i,await G({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let f=p.addStream(u);await p.open();let m=g(i,new Bt(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let _=g(i,B());for(;;){let b=await u.receivePacket(_);if(b===constants.AVERROR_EAGAIN||b===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(b,"stubCtx.receivePacket"),_.streamIndex=f.index,_.duration=h,_.rescaleTs(u.timeBase,f.timeBase),await p.writePacket(_),_.unref();}}catch(s){var a=s,c=!0;}finally{var d=x(i,a,c);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var Bt=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var it=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=Ji(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?ye(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,a=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=uo(i.width*d),a=uo(i.height*d);}let c={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:a,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new nt(c,n),refs:1}),c}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?ye(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>co({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=Ze({fn:so})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function Ji(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function uo(r){let e=Math.round(r);return Math.max(2,e-e%2)}var mo="[FrameProtocol]",fo="pup-frame",J={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function lo(r){let e=new it(r);return electron.protocol.handle(fo,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:J});let o=new URL(t.url);w.debug(mo,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Qi(await e.open({src:o.searchParams.get("src")??"",fps:st(o,"fps",30),dstW:st(o,"w",0),dstH:st(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return es(await e.getFrame(o.searchParams.get("id")??"",st(o,"idx",1)));case "stub":return Zi(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:J});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:J})}}catch(n){let i=n instanceof Error?n.message:String(n);return w.error(mo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:J})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(fo),await e.closeAll();}}}function Qi(r){return new Response(JSON.stringify(r),{headers:{...J,"content-type":"application/json"}})}function Zi(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"video/webm","cache-control":"no-store"}})}function es(r){if(r.byteLength===0)return new Response(null,{status:410,headers:J});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...J,"content-type":"application/octet-stream","cache-control":"no-store"}})}function st(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Ne="[Shoot]",ts=240;async function rs({win:r,fps:e,size:t,ms:o}){let n,i={width:t.width,height:t.height+1};try{return await new Promise(s=>{let a=(c,d,p)=>{let u=p.getSize();if(!Qe(u,i))return;let f=p.crop({x:0,y:i.height-2,width:de,height:2}),m=Ge(f.toBitmap(),{width:de,height:2});if(m===void 0||Math.abs(m-o)>1)return;let h=p.toBitmap();r.webContents.off("paint",a),s(Buffer.from(h.buffer,h.byteOffset,t.height*t.width*4));};r.webContents.on("paint",a),n=We(async c=>{c>=e*5?(w.warn(Ne,`paint timeout @ ${o}`),r.webContents.off("paint",a),s(void 0)):c%Math.floor(e/2)===0&&await Te(r.webContents,i);},1e3/e);})}finally{n?.();}}async function ho(r){var R=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&w.warn(Ne,"audio will be ignored on this mode");let u=new xe({marks:r.screenshots,width:o,height:n,outFiles:a});let f=g(R,lo(r.useInnerProxy),!0);let m=performance.now();let h=rt({source:e,renderer:r,signal:d});let _=g(R,await ge.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let b=await h;w.debug(Ne,"init done:",{source:e,cost:Math.round(performance.now()-m)});let S=Math.ceil(t*i);let P=1e3/t;let y=0;let v=0;let E=0;let F;let A=[];let k;let Z=new _e(o,n);let U=new be(t);let Pe=b.webContents.debugger;let Ee=b.webContents.mainFrame;let Oe=Ee.frames[0];try{b.webContents.setFrameRate(ts),await mr(Pe);for(let H=0;H<S;H++){d?.throwIfAborted();let M=(H+1)*P,T=wr(b.webContents);T.catch(()=>{}),await Promise.all([no({frame:Oe,timestampMs:M,signal:d}),hr(b.webContents,M)]),await Promise.all([pr(Pe,P),T]);let I=await rs({source:e,fps:t,win:b,size:{width:o,height:n},ms:M});I?(E=0,U.wrote()):(E++,U.dropped(1));let D=I??F;if(!D||E>=t)throw new Error(`renderer exausted @ ${M}`);if(F=D,u.capture(M,D),Z.sample(D),_.encodeBGRA(D).catch(Se=>k??=Se),y++,k)throw k;let N=Math.floor(y/S*100);N!==v&&(v=N,p(v));}}finally{await ve(b),await _.finish(),A=await u.finish(F);}if(k)throw k;if(y===0)throw new Error("no frames captured");else {let H=Z.finalize();H>=.5&&w.warn(Ne,`${e} blank-frame ratio ${Math.round(H*100)}% \u2014 possible white/blank screen`);let{jank:M}=U.finalize();return M>=.25&&w.warn(Ne,`${e} jank score ${M.toFixed(2)} \u2014 frames held past paint timeout`),{written:y,outFiles:a,blank:H,jank:M,screenshots:A}}}catch(ct){var De=ct,dt=true;}finally{var Le=x(R,De,dt);Le&&await Le;}}var as="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function wo(){w.debug(as,"gpu features:",electron.app.getGPUFeatureStatus());}var at=new AbortController,Mt=false;nr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",wo);electron.app.on("before-quit",r=>!Mt&&r.preventDefault());electron.app.on("will-quit",r=>!Mt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>at.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&at.abort(e.reason);});dr({name:"app",run:async(r,e)=>{let t=new Ue;try{await electron.app.whenReady(),br(),wo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?ho:to;at.signal.throwIfAborted();let n=await o({source:r,...e,signal:at.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)});await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{Mt=true,electron.app.exit();}}});
|
|
95
95
|
//# sourceMappingURL=app.cjs.map
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNGUzYWY2OGI4MmM1ZjlmYS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInBhcnNlQXJyYXkiLCJpdGVtIiwicyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBQcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEVTIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJhYm9ydGFibGUiLCJvbkFib3J0IiwicGVyaW9kaWNhbCIsImNhbGxiYWNrIiwidG9rZW4iLCJjbG9zZWQiLCJ0aWNrIiwiY291bnQiLCJuZXh0IiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsInBhdXNlVmlydHVhbFRpbWUiLCJyZWJ1aWxkRHJhd2FibGUiLCJ3ZWIiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiU2NyZWVuc2hvdFRha2VyIiwiX3MiLCJkaXIiLCJzZWMiLCJpbmRleCIsImN1cnJlbnRUaW1lTXMiLCJmaW5hbEJncmEiLCJuYXRpdmVJbWFnZSIsIndyaXRlRmlsZSIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiV09STERfQVJHIiwiV2FpdGFibGVFdmVudCIsIm1hcCIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsInN0dWJNZWRpYSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwicHJveGllZCIsInJlc3BvbnNlSGVhZGVycyIsInJlc291cmNlVHlwZSIsInVuc2V0SW50ZXJjZXB0b3IiLCJUSU1FT1VUX0VSUk9SIiwiQ09OU09MRV9JR05PUkVTIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsInRpbWVvdXRNcyIsInRvbGVyYW50IiwiZG9tUmVhZHkiLCJkb25lIiwiZGVzYyIsIl9wYXRoIiwiZXhpdENvZGUiLCJkaXNwb3NlV2luZG93IiwiV09STERfU0NSSVBUUyIsInBpY2tXb3JsZFNjcmlwdCIsInJlbmRlcmVyIiwibW9kZSIsIm9wZW5XaW5kb3ciLCJvbkNyZWF0ZWQiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsIm9wZW5XaW5kb3dXaXRoUmV0cnkiLCJsb2FkV2luZG93Iiwid2FybXVwIiwib3BlbiIsInJlbmRlciIsImR1cmF0aW9uIiwib25Qcm9ncmVzcyIsInRha2VyIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiZnJhbWVTaXplIiwid3JpdHRlbiIsImxhc3RGcmFtZSIsInNjcmVlbnNob3RzIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJlbmNvZGVFcnJvciIsInJlc29sdmVyIiwicmVqZWN0ZXIiLCJjbGVhclN0dWNrQ2hlY2siLCJibGFua1N0YXRzIiwiZHJvcFN0YXRzIiwiZGlzcG9zZUF1ZGlvIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJpbWFnZSIsImltYWdlU2l6ZSIsImN1cnJlbnRUaW1lIiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwibGFzdFdyaXR0ZW4iLCJzdHVjayIsImJsYW5rIiwiamFuayIsImFkdmFuY2VWaWRlb3MiLCJ0aW1lc3RhbXBNcyIsIlRJQ0tfU1lNQk9MIiwiZXhwciIsInRpY2tFdiIsIlJXX1RJTUVPVVRfVVMiLCJvcGVuSW5wdXQiLCJEZW11eGVyIiwiZGVjb2RlRnJhbWVzIiwibWV0YSIsIkFWTUVESUFfVFlQRV9WSURFTyIsImRlYyIsIkRlY29kZXIiLCJmcmFtZVdpZHRoIiwiZnJhbWVIZWlnaHQiLCJzY2FsZSIsImZpbHRlciIsIkZpbHRlckFQSSIsIl9mcmFtZSIsInBhY2tSZ2JhIiwicm93Iiwic3RyaWRlIiwiREVDT0RFX0FIRUFEIiwiS0VFUF9CRUhJTkQiLCJNRU1PUllfQlVER0VUIiwiTUFYX1BBU1NfUkVUUlkiLCJEZWNvZGVTZXNzaW9uIiwiX3NyYyIsImlkeCIsImhpdCIsImZhaWxzIiwiZ2VuIiwiZmFpbGVkIiwiYXQiLCJmbG9vciIsInRiIiwibGVhZEdhcCIsIm91dGVyIiwiX3BrdCIsImVuY29kZVN0dWJXZWJtIiwidG1wZGlyIiwicmFuZG9tQnl0ZXMiLCJzdHViIiwiU3R1YkZyYW1lIiwicmVhZEZpbGUiLCJybSIsImx1bWEiLCJjaHJvbWEiLCJGcmFtZVNlcnZlciIsIl91c2VJbm5lclByb3h5IiwiaWQiLCJldmVuIiwicmVhbCIsInNlc3Npb25zIiwiY3JlYXRlSGFzaCIsIlNDSEVNRSIsIkNPUlNfSEVBREVSUyIsInVzZUZyYW1lUHJvdG9jb2wiLCJmcyIsImpzb25PayIsImludCIsInJnYmFPayIsIndlYm1PayIsImJ5dGVzIiwiY29weSIsImZhbGxiYWNrIiwiUkVOREVSX0ZQUyIsImNsZWFyRGlydHlDaGVjayIsIl9kIiwic2xpdmVyIiwidHMiLCJzaG9vdCIsInRJbml0Iiwid2luUCIsInBpcGVsaW5lIiwiaGVsZCIsImxhc3RCaXRtYXAiLCJtYWluIiwiaWZyYW1lIiwiZnJhbWVNcyIsInBhaW50ZWQiLCJwcmludEZlYXR1cmVzIiwiY3RybCIsImV4aXRpbmciLCJNZW51IiwicmF3IiwiaXBjIiwibWtkaXIiLCJyZXN1bHQiXSwibWFwcGluZ3MiOiIreUVBS0EsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsSUFDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxDQUFBLENBQUUsQ0FBQSxDQUFFLEtBQzdCLFFBQUEsQ0FBUyxhQUFBLEVBQWlCLFFBQUEsQ0FBUyxhQUFBLENBQWMsT0FBQSxDQUFRLFdBQUEsS0FBa0IsUUFB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QUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBS2dDLEVBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLFNBQVVBLENBQUFBLENBQUksTUFBQSxDQUFTQSxFQUFJLFFBQVEsQ0FBQSxDQUU1RGhDLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FFVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRTVKLEVBQU8sRUFBRSxDQUFBLENBQ2Q0SixFQUFHLENBQUEsQ0FBRTNKLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQ2YySixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUVUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUVQQSxFQUFHLEVBQUEsQ0FBRyxD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QixFQUFBQSxDQUFLLE1BQUEsQ0FDYixVQUFBLENBQWF0akIsQ0FBQUEsRUFBTTBqQixDQUFBQSxDQUFJLGNBQWMxakIsQ0FBQyxDQUFBLENBQ3RDLFVBQVcsQ0FBQ29YLENBQUFBLENBQUdmLElBQU1xTixDQUFBQSxDQUFJLFlBQUEsQ0FBYXRNLEVBQUdmLENBQUMsQ0FDNUMsQ0FBQyxDQUFBLENBQ0QsTUFBTXFOLEVBQUksU0FBQSxDQUFVRSxDQUFNLEVBQzVCLENBQUEsTUFBU2xrQixDQUFBQSxDQUFHLENBQ1YsSUFBTXZELENBQUFBLENBQVF1RCxDQUFBQSxDQUNSMlcsRUFBSWxhLENBQUFBLENBQU0sS0FBQSxFQUFTQSxFQUFNLE9BQUEsRUFBVyxNQUFBLENBQU91RCxHQUFLLGVBQWUsQ0FBQSxDQUNyRSxNQUFNZ2tCLENBQUFBLENBQUksVUFBQSxDQUFXck4sQ0FBQyxFQUN4QixDQUFBLE9BQUUsQ0FDQWtOLEVBQUFBLENBQVUsSUFBQSxDQUNWNWxCLGFBQUksSUFBQSxHQUNOLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG5cbi8vIENvbW1hLXNlcGFyYXRlZCBzdHJpbmcg4oaSIGFycmF5IHZpYSBhIHBlci1pdGVtIHBhcnNlcjsgZW1wdHkvYmxhbmsg4oaSIFtdLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJyYXk8VD4oaXRlbTogKHg6IHVua25vd24pID0+IFQpOiAoeDogdW5rbm93bikgPT4gVFtdIHtcbiAgcmV0dXJuICh4KSA9PiB7XG4gICAgaWYgKHR5cGVvZiB4ICE9PSBcInN0cmluZ1wiIHx8IHgudHJpbSgpID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB4LnNwbGl0KFwiLFwiKS5tYXAoKHMpID0+IGl0ZW0ocy50cmltKCkpKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInByZWxvYWQuY2pzXCIpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiAoLi4ubWVzc2FnZXM6IHVua25vd25bXSkgPT4gdW5rbm93biwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikge1xuICAgIGxvZ2dlci5lcnJvcihtc2cpO1xuICB9IGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSB7XG4gICAgbG9nZ2VyLndhcm4obXNnKTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbQ3Jhc2hdXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpIHtcbiAgLy8gYXBwRGF0YSAobm90IHRoZSBwZXItcnVuIHVzZXItZGF0YS1kaXIpIHNvIGV2ZXJ5IHB1cCBhcHAncyBkdW1wcyBhY2N1bXVsYXRlIGluIG9uZSBzaGFyZWQsIHBlcnNpc3RlbnQgZGlyLlxuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcImFwcERhdGFcIiksIFwicHVwLXJlY29yZGVyXCIsIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxBIGV4dGVuZHMgdW5rbm93bltdLCBSLCBEPihmbjogKC4uLmFyZ3M6IEEpID0+IFIsIGRlZmF1bHRWYWx1ZTogRCk6ICguLi5hcmdzOiBBKSA9PiBSIHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKSBhcyBSIHwgRDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAgZ2V0IGtpbGxlZCgpOiBib29sZWFuO1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIH1cbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIGxldCBraWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzOiBwcm9jLFxuICAgIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCksXG4gICAgZ2V0IGtpbGxlZCgpIHtcbiAgICAgIHJldHVybiBraWxsZWQ7XG4gICAgfSxcbiAgICBraWxsKCkge1xuICAgICAgaWYgKGtpbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB7XG4gICAgICAgIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9XSU5ET1dfVElNRU9VVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEVTID0gW1wib3V0L2h0bWwubXA0XCIsIFwib3V0L2h0bWwud2VibVwiXTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlczogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZShcIk91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgZGlzYWJsZVdlYlNlY3VyaXR5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRyb3AgdGhlIHNhbWUtb3JpZ2luIHdhbGw7IHJlcXVpcmVkIHRvIHJlY29yZCBhIGxvY2FsIGZpbGVcIiksXG4gIHdpbmRvd1RvbGVyYW50OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkZhbGwgYmFjayB0byBkb20tcmVhZHkgaWYgd2FybXVwIGxvYWQgdGltZXMgb3V0XCIpLFxuICB3aW5kb3dUaW1lb3V0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiV2luZG93IGxvYWQgdGltZW91dCBpbiBzZWNvbmRzXCIpLFxuICBzY3JlZW5zaG90czogei5hcnJheSh6Lm51bWJlcigpKS5kZXNjcmliZShcIlNlY29uZCBtYXJrcyB0byBkdW1wIGZyYW1lIGJpdG1hcHMgYXMgUE5HXCIpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFJlbmRlck9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiByZW5kZXJTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDb25zb2xlQ2FsbGJhY2sgPSAobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBDUmVuZGVyT3B0aW9ucyBleHRlbmRzIFJlbmRlck9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzczogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgb25Db25zb2xlOiBDb25zb2xlQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZXM6IERFRkFVTFRfT1VUX0ZJTEVTLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIGRpc2FibGVXZWJTZWN1cml0eTogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbiAgc2NyZWVuc2hvdHM6IFtdLFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZUFycmF5LCBwYXJzZU51bWJlciwgcGFyc2VTdHJpbmcgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHJlbmRlclNjaGVtYSB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSByZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1TLCAtLXNjcmVlbnNob3RzIDxzZWNvbmRzPlwiLCBzaGFwZS5zY3JlZW5zaG90cy5kZXNjcmlwdGlvbiwgXCJcIilcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGhzPlwiLCBzaGFwZS5vdXRGaWxlcy5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlcy5qb2luKFwiLFwiKSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtd2ViLXNlY3VyaXR5XCIsIHNoYXBlLmRpc2FibGVXZWJTZWN1cml0eS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlV2ViU2VjdXJpdHkpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRvbGVyYW50XCIsIHNoYXBlLndpbmRvd1RvbGVyYW50LmRlc2NyaXB0aW9uLCBkLndpbmRvd1RvbGVyYW50KVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10aW1lb3V0IDxudW1iZXI+XCIsIHNoYXBlLndpbmRvd1RpbWVvdXQuZGVzY3JpcHRpb24sIGAke2Qud2luZG93VGltZW91dH1gKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihub3JtYWxpemVTb3VyY2Uoc291cmNlKSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZXM6IHBhcnNlQXJyYXkocGFyc2VTdHJpbmcpKG9wdHMub3V0RmlsZSksXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgICAgICAgIGRldGVybWluaXN0aWM6IG9wdHMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgICAgICAgZGlzYWJsZUdwdTogb3B0cy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICAgICAgICBkaXNhYmxlSHdDb2RlYzogb3B0cy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgICAgICAgIGRpc2FibGVXZWJTZWN1cml0eTogb3B0cy5kaXNhYmxlV2ViU2VjdXJpdHkgPz8gZC5kaXNhYmxlV2ViU2VjdXJpdHksXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgICB3aW5kb3dUaW1lb3V0OiBub2VycihwYXJzZU51bWJlciwgZC53aW5kb3dUaW1lb3V0KShvcHRzLndpbmRvd1RpbWVvdXQpLFxuICAgICAgICAgIHNjcmVlbnNob3RzOiBwYXJzZUFycmF5KHBhcnNlTnVtYmVyKShvcHRzLnNjcmVlbnNob3RzKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcblxuZXhwb3J0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ29uc29sZSA9IFwiY29uc29sZVwiLFxuICBQcm9ncmVzcyA9IFwicHJvZ3Jlc3NcIixcbiAgRG9uZSA9IFwiZG9uZVwiLFxuICBFcnJvciA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDYW5jZWwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbi8vIFJlamVjdCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cywgZWxzZSBzZXR0bGUgd2l0aCBgcGA7IG5vLW9wIHBhc3N0aHJvdWdoIHdoZW4gbm8gc2lnbmFsLlxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0YWJsZTxUPihwOiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVybiBwO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICB9KTtcbn1cblxuLy8gQ2FsbGJhY2sgbWF5IHJldHVybiB0aGUgbmV4dCBpbnRlcnZhbCAobXMpIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvciB0aGUgZm9sbG93aW5nIHRpY2suXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBuZXh0ID8/IG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUsIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5jb25zdCBDRFBfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChjZHA6IERlYnVnZ2VyLCBtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChjZHAuc2VuZENvbW1hbmQobWV0aG9kLCBwYXJhbXMpLCBDRFBfVElNRU9VVF9NUywgYGNkcC4ke21ldGhvZH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbihjZHA6IERlYnVnZ2VyLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uIH0pLCBDRFBfVElNRU9VVF9NUywgXCJldmFsSW5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtDRFBfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBDRFBfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAvLyBObyBzdGFydmF0aW9uIGNhcCAod291bGQgc2tpcCBwZW5kaW5nIHdvcmsgbm9uLWRldGVybWluaXN0aWNhbGx5KTsgY2FwdHVyZSBzdGFydHMgcG9zdCBkaWQtc3RvcC1sb2FkaW5nLCBhbmQgQ0RQX1RJTUVPVVRfTVMgdHVybnMgYSByZWFsIHN0YWxsIGludG8gYSBmYWlsZWQgcmVuZGVyLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWJ1aWxkRHJhd2FibGUod2ViOiBXZWJDb250ZW50cywgc2l6ZTogU2l6ZSkge1xuICB0cnkge1xuICAgIGNvbnN0IGNkcCA9IHdlYi5kZWJ1Z2dlcjtcbiAgICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uY2xlYXJEZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge30pO1xuICAgIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgICAgLi4uc2l6ZSxcbiAgICAgIGRldmljZVNjYWxlRmFjdG9yOiAxLFxuICAgICAgbW9iaWxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB3ZWIuaW52YWxpZGF0ZSgpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBTdGggbGlrZSB0ZWFyZG93biBkZXRhY2ggcmVqZWN0cyBpbi1mbGlnaHQgQ0RQIHNlbmRzOyBhIGxvc3QgcmVwYWludCBraWNrIGlzIGhhcm1sZXNzLlxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICB3aW5kb3cuX19wdXBfc3RlZ29fdGlja19fKCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX2RyYXdfc3RlZ29fXyA9IChtcykgPT4ge1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAobXMpO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdGFydF9zdGVnb19fKClgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RvcF9zdGVnb19fKClgKTtcbn1cblxuLy8gUGFpbnRzIHRoZSBzdGVnbyByb3cgZm9yIGBleHBlY3RlZGAgbXMgc3luY2hyb25vdXNseTsgdGhlIGRhbWFnZSByaWRlcyBvdXQgb24gdGhlIG5leHQgY29tcG9zaXRlZCBmcmFtZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmF3U3RlZ28od2M6IFdlYkNvbnRlbnRzLCBleHBlY3RlZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV2YWxJbih3Yy5kZWJ1Z2dlciwgYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgKTtcbn1cblxuLy8gUmVzb2x2ZXMgd2hlbiB0aGUgcmVuZGVyZXIgY29tbWl0dGVkIHRoZSBzdGVnbyByb3c7IGFybSBCRUZPUkUgZHJhd1N0ZWdvIHRvIGF2b2lkIG1pc3NpbmcgdGhlIGFjay5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0U3RlZ29UaWNrKHdjOiBXZWJDb250ZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzdGVnbyB0aWNrXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIHJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZCBob25vcnMgb25seSB0aGUgTEFTVCBjYWxsIOKAlCByZWdpc3RlciBldmVyeSBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIGxpc3QgYmVsb3cuXG5jb25zdCBQUklWSUxFR0VEX1BSSVZJTEVHRVMgPSB7XG4gIHN0YW5kYXJkOiB0cnVlLFxuICBzZWN1cmU6IHRydWUsXG4gIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgYWxsb3dTZXJ2aWNlV29ya2VyczogdHJ1ZSxcbiAgc3VwcG9ydEZldGNoQVBJOiB0cnVlLFxuICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgc3RyZWFtOiB0cnVlLFxuICBjb2RlQ2FjaGU6IHRydWUsXG59IGFzIGNvbnN0O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGJlZm9yZSBhcHAgaXMgcmVhZHkuXG5wcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQoW1xuICB7IHNjaGVtZTogUFVQX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG4gIHsgc2NoZW1lOiBGUkFNRV9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjLnJlcGxhY2UoXCJodHRwOi8vXCIsIFwiaHR0cHM6Ly9cIikpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHtcbiAgdHlwZSBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRnJhbWUsXG4gIHR5cGUgSGFyZHdhcmVGcmFtZXNDb250ZXh0LFxuICBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmV4cG9ydCBjb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgY3R4IGlmIGFueSBzZXR0ZXIvb3BlbjIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBzdGFjay51c2UoY3R4KTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSB7XG4gICAgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgfVxuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgfVxuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkge1xuICAgIGN0eC5od0ZyYW1lc0N0eCA9IG9wdHMuaHdGcmFtZXNDdHg7XG4gIH1cbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkge1xuICAgIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIH1cbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGZyYW1lIGlmIGdldEJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShmcmFtZSk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikge1xuICAgICAgICBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICAgIH1cbiAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgY3R4IGlmIG9wZW4yIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBzdGFjay51c2UocG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIHR5cGUgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICB9XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyBjdHggaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSB7XG4gICAgICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZnJlZXMgdGhlIGdyYXBoIGlmIGZpbHRlciBzZXR1cCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIHN0YWNrLnVzZShncmFwaCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICB9XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzcmNbaV0hKSkge1xuICAgICAgICBzcmNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIHtcbiAgICAgIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgfVxuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgZmxhZyh2YWw6IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICB0aGlzLmJpdHMucHVzaCh2YWwgPyAxIDogMCk7XG4gIH1cbiAgdWUodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCB2ID0gdmFsICsgMTtcbiAgICBjb25zdCBsZW4gPSAzMiAtIE1hdGguY2x6MzIodik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKDApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gICAgfVxuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChwYWQpO1xuICAgIH1cbiAgfVxuICBjb3B5KHNyYzogbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGxlbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goc3JjW3N0YXJ0ICsgaV0hKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHtcbiAgICAgICAgdGhpcy5fYml0cy5wdXNoKChkYXRhW2ldISA+PiBiKSAmIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgYml0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0cztcbiAgfVxuICByZWFkKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgfVxuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuLy8gSEVWQyBOQUwgdW5pdCB0eXBlcyAoVC1SRUMtSC4yNjUgVGFibGUgNy0xKVxuZXhwb3J0IGNvbnN0IE5BTF9CTEFfV19MUCA9IDE2O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfV19SQURMID0gMTk7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9OX0xQID0gMjA7XG5leHBvcnQgY29uc3QgTkFMX1JTVl9JUkFQX1ZDTDIzID0gMjM7XG5leHBvcnQgY29uc3QgTkFMX1ZQUyA9IDMyO1xuZXhwb3J0IGNvbnN0IE5BTF9TUFMgPSAzMztcbmV4cG9ydCBjb25zdCBOQUxfUFBTID0gMzQ7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9QUkVGSVggPSAzOTtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1NVRkZJWCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJld3JpdGUgbmFsX3VuaXRfdHlwZSBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxUeXBlKG5hbDogQnVmZmVyLCBuZXdUeXBlOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IGxheWVySWQsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIobmV3VHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIENvbmZvcm0gTlZFTkMgb3V0cHV0IHRvIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBiaXRzdHJlYW07XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIH0gZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCAoc3BzX2ZsYWc9MCk7IHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBpbnRlciBwcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgfVxuICAgIGJyLnJlYWQoMSk7IC8vIGRlbHRhX3Jwc19zaWduXG4gICAgYnIucmVhZFVlKCk7IC8vIGFic19kZWx0YV9ycHNfbWludXMxXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPD0gbnVtRGVsdGFQb2NzU2V0MDsgaisrKSB7XG4gICAgICBjb25zdCB1c2VkID0gYnIucmVhZCgxKTtcbiAgICAgIGlmICghdXNlZCkge1xuICAgICAgICBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIH1cbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHtcbiAgICAgIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICB9IGVsc2UgaWYgKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzID4gMSkge1xuICAgICAgYnIucmVhZChNYXRoLmNlaWwoTWF0aC5sb2cyKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzKSkpO1xuICAgIH1cbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICAgIH1cbiAgfVxuICBpZiAoY2ZnLnNhb0VuYWJsZWQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fbHVtYV9mbGFnXG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2Nocm9tYV9mbGFnXG4gIH1cbiAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9QIHx8IHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAob3ZlcnJpZGVGbGFnKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgICBici5yZWFkVWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgfVxuICAgIGlmIChjZmcuY2FiYWNJbml0UHJlc2VudCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gY2FiYWNfaW5pdF9mbGFnXG4gICAgfVxuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICB9XG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIH1cbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcbiAgfVxuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICB9XG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICB9XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIH1cbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkge1xuICAgIHJldHVybiB2cHNEYXRhO1xuICB9XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHJld3JpdGVBbHBoYVBwcywgcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIsIHJld3JpdGVBbHBoYVNwcyB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgZW5jb2RlTmFsSGVhZGVyLFxuICBOQUxfUFBTLFxuICBOQUxfU0VJX1BSRUZJWCxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgdHlwZSBOYWxVbml0LFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG4vLyBCR1JBIGFscGhhIOKGkiBZIHBsYW5lIG9mIHBhY2tlZCBZVVY0MjBQIChjYWxsZXIgcHJlLWZpbGxzIFVWPTEyOCk7IFVpbnQzMiBmYXN0IHBhdGg6IEJHUkEgTEUgdTMyID4+PiAyNCA9IEEgYnl0ZS5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lOiBGcmFtZSwgYnVmOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgaWYgKCFzcmMgfHwgIXNyY0xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZXh0cmFjdEFscGhhOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgfVxuICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgaWYgKHNyYy5ieXRlT2Zmc2V0ICUgNCA9PT0gMCAmJiBzcmNMcyA9PT0gdyAqIDQpIHtcbiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgeVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNpemU7IGkrKykge1xuICAgICAgYnVmW2ldID0gc3JjMzJbaV0hID4+PiAyNDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGNvbnN0IHJvd0Jhc2UgPSB5ICogc3JjTHMgKyAzO1xuICAgICAgY29uc3QgZHN0QmFzZSA9IHkgKiB3O1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcbiAgICAgICAgYnVmW2RzdEJhc2UgKyB4XSA9IHNyY1tyb3dCYXNlICsgeCAqIDRdITtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEFwcGxlIEhFVkMgQWxwaGEgUHJvZmlsZTogYWxwaGEgU1BTIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZD0xLCBhbHBoYSBQUFMgcGljK3NlcSBpZD0xLlxuZnVuY3Rpb24gcmV3cml0ZUFscGhhUGFyYW1TZXQodHlwZTogbnVtYmVyLCBkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAodHlwZSA9PT0gTkFMX1NQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFTcHMoZGF0YSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09IE5BTF9QUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhUHBzKGRhdGEpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IE5BTF9WUFMgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY29uc3QgYURhdGEgPSByZXdyaXRlQWxwaGFQYXJhbVNldChuYWwudHlwZSwgYWxwaGFOYWwuZGF0YSk7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYURhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaHVua3MucHVzaChidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bG9hZFR5cGUgPSAxNjU7XG4gIGNvbnN0IHBheWxvYWRTaXplID0gNDtcbiAgY29uc3QgW2gwLCBoMV0gPSBlbmNvZGVOYWxIZWFkZXIoTkFMX1NFSV9QUkVGSVgsIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICB3cml0ZUJpdHMoMCwgMSk7XG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gYGJhc2U9JHt0aGlzLl9iYXNlUXVldWUubGVuZ3RofSwgYWxwaGE9JHt0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aH0gdW5wYWlyZWRgO1xuICB9XG5cbiAgLy8gRUFHQUlOL0VPRiA9IG5vcm1hbCBzdG9wOyBhbnkgb3RoZXIgbmVnYXRpdmUgaXMgYSByZWFsIGZhdWx0LCBub3QgXCJkcmFpbmVkXCIuXG4gIHByaXZhdGUgYXN5bmMgcmVjZWl2ZUFsbChjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxQZW5kaW5nUGFja2V0W10+IHtcbiAgICBjb25zdCBvdXQ6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgaWYgKHJldCA+PSAwKSB7XG4gICAgICAgIG91dC5wdXNoKHRoaXMuc25hcHNob3QocGt0KSk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXQgPT09IEFWRVJST1JfRUFHQUlOIHx8IHJldCA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBzbGljZS1oZWFkZXIgcGFyc2VyIGZsYWdzOyB0aHJvd3MgaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkge1xuICAgIGZvciAobGV0IGkgPSBtYXhTdWJMYXllcnM7IGkgPCA4OyBpKyspIHtcbiAgICAgIGJyLnJlYWQoMik7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBpZiAoc3ViUHJvZmlsZVByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCArIDMyICsgNDgpO1xuICAgIH1cbiAgICBpZiAoc3ViTGV2ZWxQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSB7XG4gICAgZmFpbChcInNwc19tYXhfc3ViX2xheWVyc19taW51czFcIiwgbWF4U3ViTGF5ZXJzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSB7XG4gICAgZmFpbChcImNocm9tYV9mb3JtYXRfaWRjXCIsIGNocm9tYUZvcm1hdCwgXCLiiaAzXCIpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJzY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBhbXBfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHNhb0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJwY21fZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBudW1TdFJwcyA9IGJyLnJlYWRVZSgpO1xuICBpZiAobnVtU3RScHMgPiAxKSB7XG4gICAgZmFpbChcIm51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c1wiLCBudW1TdFJwcywgXCLiiaQxXCIpO1xuICB9XG4gIGxldCBudW1EZWx0YVBvY3NTZXQwID0gMDtcbiAgaWYgKG51bVN0UnBzID09PSAxKSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgbnVtRGVsdGFQb2NzU2V0MCA9IG51bU5lZyArIG51bVBvcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSB7XG4gICAgZmFpbChcImxvbmdfdGVybV9yZWZfcGljc19wcmVzZW50X2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7XG4gICAgbG9nMk1heFBvY0xzYixcbiAgICBzYW9FbmFibGVkLFxuICAgIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLFxuICAgIG51bURlbHRhUG9jc1NldDAsXG4gICAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCxcbiAgICBzcHNUZW1wb3JhbE12cEVuYWJsZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHBzKHBwc1Jic3A6IEJ1ZmZlcik6IHsgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjsgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihwcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19waWNfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkVWUoKTsgLy8gcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWQoMSk7IC8vIGRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnXG4gIGNvbnN0IG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzID0gYnIucmVhZCgzKTtcbiAgaWYgKG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzICE9PSAwKSB7XG4gICAgZmFpbChcIm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0c1wiLCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNpZ25fZGF0YV9oaWRpbmdfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IGNhYmFjSW5pdFByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIGluaXRfcXBfbWludXMyNiAoc2UsIGJ1dCB1ZSBwYXJzZXIgZmluZSB0byBhZHZhbmNlKVxuICBici5yZWFkKDEpOyAvLyBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7IC8vIGN1X3FwX2RlbHRhX2VuYWJsZWQg4oaSIGRpZmZfY3VfcXBfZGVsdGFfZGVwdGhcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NiX3FwX29mZnNldFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NyX3FwX29mZnNldFxuICBici5yZWFkKDEpOyAvLyBwcHNfc2xpY2VfY2hyb21hX3FwX29mZnNldHNfcHJlc2VudF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9iaXByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc3F1YW50X2J5cGFzc19lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwidGlsZXNfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGNvbnN0IGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCA9IGJyLnJlYWQoMSk7XG4gIGxldCBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gZmFsc2U7XG4gIGlmIChkZWJsb2NraW5nQ29udHJvbFByZXNlbnQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWdcbiAgICBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gYnIucmVhZCgxKSA9PT0gMTsgLy8gcHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWdcbiAgICBpZiAoIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZFVlKCk7IC8vIGJldGEvdGMgb2Zmc2V0cyAoc2UgdmlhIHVlIGFkdmFuY2UpXG4gICAgfVxuICB9XG4gIC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIHByZXNlbnQgaWZmIFBQUyBhY3Jvc3Mtc2xpY2VzIGVuYWJsZWQgJiYgIXNsaWNlX2RlYmxvY2tpbmdfZGlzYWJsZWQuXG4gIGNvbnN0IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnID0gcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgJiYgIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGU7XG4gIHJldHVybiB7IGNhYmFjSW5pdFByZXNlbnQsIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhleHRyYWRhdGE6IEJ1ZmZlcik6IE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGV4dHJhZGF0YSk7XG4gIGNvbnN0IHNwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfU1BTKTtcbiAgY29uc3QgcHBzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9QUFMpO1xuICBpZiAoIXNwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBpZiAoIXBwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBjb25zdCBzID0gcGFyc2VTcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzcHMuZGF0YSkpO1xuICBjb25zdCBwID0gcGFyc2VQcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihwcHMuZGF0YSkpO1xuICByZXR1cm4geyAuLi5zLCAuLi5wIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgRkZfRU5DT0RFUl9IRVZDX05WRU5DLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4uL3ZpZGVvdG9vbGJveFwiO1xuaW1wb3J0IHsgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IER1YWxMYXllck11eCB9IGZyb20gXCIuL2R1YWxfbGF5ZXJfbXV4XCI7XG5pbXBvcnQgeyB0eXBlIE52ZW5jSGV2Y0NvbmZpZywgcGFyc2VOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIE52ZW5jU3RhdGUge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGFscGhhU3dGcmFtZTogRnJhbWU7XG4gIGFscGhhQnVmOiBCdWZmZXI7XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9tdXg6IER1YWxMYXllck11eDtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fbXV4ID0gbmV3IER1YWxMYXllck11eCh7XG4gICAgICBiYXNlQ3R4OiBzLmJhc2VDdHgsXG4gICAgICBhbHBoYUN0eDogcy5hbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IHMuYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0OiBzLmFscGhhUGt0LFxuICAgICAgc3RyZWFtOiBzLnN0cmVhbSxcbiAgICAgIGhldmNDZmc6IHMuaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICAvLyB0aWVyPW1haW4gbWF0Y2hlcyBBcHBsZSBWaWRlb1Rvb2xib3g7IG1hY09TIENocm9tZSByZXF1aXJlcyBNYWluIHRpZXIgZm9yIEhFVkMgYWxwaGEgZGVjb2RlLlxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiwgdGllcjogXCJtYWluXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IChOVkVOQyBjb252ZXJ0cywgbm8gQ1BVIFNXUyk7IHN0YWNrIGZyZWVzIGV2ZXJ5IG5hdGl2ZSBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzLCBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGJhc2VDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKSk7XG4gICAgY29uc3QgYWxwaGFDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIikpO1xuXG4gICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgfVxuICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgIGNvbnN0IHVuaWZpZWQgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoe1xuICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gICAgLy8gQXBwbGUtVlRCIGNvbXBhdDogcmV3cml0ZSBWUFMrU1BTIFBUTCBiaXRzIHRvIG1hdGNoIHgyNjUvVlRCIG91dHB1dCAodGllcj1NYWluLCBjb21wYXRbMl09MSkuXG4gICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAvLyBZVVY0MjBQIGNocm9tYSBwbGFuZXMgYXJlIGNlaWwody8yKcOXY2VpbChoLzIpOyBmbG9vciB1bmRlcmZsb3dzIG9uIG9kZCBkaW1lbnNpb25zLlxuICAgIGNvbnN0IGNocm9tYVNpemUgPSAoKHdpZHRoICsgMSkgPj4gMSkgKiAoKGhlaWdodCArIDEpID4+IDEpO1xuICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgIGFscGhhQnVmLmZpbGwoMTI4LCB5U2l6ZSk7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3QgYWxwaGFQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVN3RnJhbWUgPSBzdGFjay51c2UobWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCkpO1xuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3QsXG4gICAgICBhbHBoYVBrdCxcbiAgICAgIHN0cmVhbSxcbiAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgIGFscGhhQnVmLFxuICAgICAgaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUsIGFscGhhQnVmIH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgYWxwaGEgcGxhbmUgYmVmb3JlIGJhc2Uuc2VuZEZyYW1lIOKAlCB0aGUgZW5jb2RlciB1bnJlZnMgdGhlIGlucHV0IGZyYW1lLlxuICAgIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWUsIGFscGhhQnVmKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImFscGhhU3cubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUuZnJvbUJ1ZmZlcihhbHBoYUJ1ZiksIFwiYWxwaGFTdy5mcm9tQnVmZmVyXCIpO1xuICAgIGFscGhhU3dGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFTd0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYmFzZUN0eCwgXCJiYXNlXCIpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmFscGhhQ3R4LCBcImFscGhhXCIpO1xuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gICAgY29uc3QgZGVzeW5jID0gdGhpcy5fbXV4LmRlc3luY0FmdGVyRW9mKCk7XG4gICAgaWYgKGRlc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6ICR7ZGVzeW5jfWApO1xuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgb24gY3JlYXRpb24tb3JkZXIgc2Vzc2lvbiBmcmVlIOKAlCBMSUZPIGRlc3Ryb3kgYXZvaWRzIGl0IChmb3J1bSAvdC8yNjk5NzQpLlxuICAgIGFscGhhQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgLy8gRU9GIGZsdXNoOyBFQUdBSU4vRU9GIHJldHVybnMgYXJlIGJlbmlnbiAoYWxyZWFkeS1kcmFpbmluZyBlbmNvZGVyKS5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRW9mKGN0eDogQ29kZWNDb250ZXh0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9PSBBVkVSUk9SX0VBR0FJTiAmJiByZXQgIT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnNlbmRGcmFtZShudWxsKWApO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgQVZQaXhlbEZvcm1hdCwgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IGNvZGVjTmFtZSwgY29kZWNUYWcsIGNvZGVjT3B0cywgbXV4ZXIsIC4uLnJlc3QgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgY3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIikpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZGlzcG9zZXMgY3R4L3BrdCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIHZpZGVvIGVuY29kZXIgaWYgQ29kZWNTdGF0ZS5jcmVhdGUgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgY29uc3QgdmlkZW8gPSBzdGFjay51c2UoXG4gICAgYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgICAgYml0cmF0ZSxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGNvZGVjID0gc3RhY2sudXNlKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4geyB2aWRlbywgY29kZWMsIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBTdHJlYW0ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIC8vICtmYXN0c3RhcnQgcmVsb2NhdGVzIG1vb3YgdG8gZmlsZSBmcm9udCBvbiB3cml0ZVRyYWlsZXIgc28gcGxheWVycyBjYW4gYmVnaW4gcGxheWJhY2sgYmVmb3JlIGZ1bGwgZG93bmxvYWQuXG4gICAgdXNpbmcgb3B0cyA9IERpY3Rpb25hcnkuZnJvbU9iamVjdCh7IG1vdmZsYWdzOiBcIitmYXN0c3RhcnRcIiB9KTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG9wdHMpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZELlxuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFsd2F5cyBmcmVlIHRoZSBuYXRpdmUgY29udGV4dCDigJQgZXZlbiBhIG5ldmVyLW9wZW5lZCBtdXhlciBhbGxvY2F0ZWQgb25lIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkge1xuICAgICAgcmV0dXJuIFwid2VibVwiO1xuICAgIH1cbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIubXA0XCIpIHx8IGxvd2VyLmVuZHNXaXRoKFwiLm1vdlwiKSkge1xuICAgICAgcmV0dXJuIFwibXA0XCI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBtdXhlci9lbmNvZGVycyBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgbXV4ZXIgPSBzdGFjay51c2UobmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSkpO1xuICAgIGNvbnN0IHNldHVwID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIiA/IGF3YWl0IE91dHB1dFNpbmsubXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgT3V0cHV0U2luay53ZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGlmIChzZXR1cC52aWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLnZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmh3VmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5od1ZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmNvZGVjKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuY29kZWMpO1xuICAgIH1cbiAgICAvLyBPbmx5IGEgc2luay1vd25lZCBodyBkZXZpY2UgaXMgb3VycyB0byBmcmVlIGhlcmU7IGEgc2hhcmVkIGRldmljZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS5cbiAgICBpZiAoc2V0dXAub3duc0h3ICYmIHNldHVwLmh3KSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHcpO1xuICAgIH1cbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgT3V0cHV0U2luay5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1ZGlvKSB7XG4gICAgICBzdGFjay51c2UoYXVkaW8pO1xuICAgIH1cbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi5zZXR1cCwgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7XG4gICAgICAgIGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsXG4gICAgICAgIFwiY3B1LXVzZWRcIjogXCI4XCIsXG4gICAgICAgIFwicm93LW10XCI6IFwiMVwiLFxuICAgICAgICB0aHJlYWRzOiBcIjJcIixcbiAgICAgIH0sXG4gICAgICBiaXRyYXRlOiA0XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB2aWRlbyxcbiAgICAgIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSxcbiAgICAgIG93bnNIdzogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGF1ZGlvRm9yKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIC8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbiAgICBjb25zdCBjZmcgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICAgICAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQk9QVVMsXG4gICAgICAgICAgfTtcbiAgICByZXR1cm4gQXVkaW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICAuLi5jZmcsXG4gICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZXMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGRpc3Bvc2Ugc2hhcmVkSHcgKyBhbnkgc2lua3MgYWxyZWFkeSBidWlsdCBpZiBhIGxhdGVyIHNpbmsgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hhcmVkSHcpIHtcbiAgICAgIHN0YWNrLnVzZShzaGFyZWRIdyk7XG4gICAgfVxuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzdGFjay51c2Uoc2luayk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgICAgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZnJvbUJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBmcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDMuXG5cbmNvbnN0IEdSSUQgPSAzMjsgLy8gcmVzb2x1dGlvbi1pbmRlcGVuZGVudCBsYXR0aWNlIGZvciB0aGUgbW9kYWwtY29sb3IgcHJlLXBhc3NcbmNvbnN0IFNUUklERSA9IDQ7IC8vIG1haW4tc2NhbiBzdGVwOyByb3ctc3RhZ2dlcmVkIHNvIGFueSDiiaUxcHggc3RydWN0dXJlIGxhbmRzIG9uIGEgc2FtcGxlIHdpdGhpbiA0IHJvd3NcbmNvbnN0IENPTlRFTlRfREVMVEEgPSA4OyAvLyBtYXggcGVyLWNoYW5uZWwgZGlzdGFuY2UgKDAtMjU1KSBzdGlsbCBjb3VudGVkIGFzIHRoZSBkb21pbmFudCBjb2xvclxuY29uc3QgTUlOX0NPTlRFTlRfU0FNUExFUyA9IDE2OyAvLyByZW5kZXJlZCBmcmFtZXMgYXJlIG5vaXNlLWZyZWUsIHNvIGEgaGFuZGZ1bCBvZiBvZmYtZG9taW5hbnQgc2FtcGxlcyBpcyByZWFsIGNvbnRlbnRcbmV4cG9ydCBjb25zdCBCTEFOS19XQVJOX1JBVElPID0gMC41OyAvLyBibGFuay1mcmFtZSBmcmFjdGlvbiBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmRcblxuLy8gNSBiaXRzIHBlciBjaGFubmVsLCBhbHBoYSBpbmNsdWRlZCDigJQgdHJhbnNwYXJlbnQgc3VyZmFjZXMgY2FycnkgY29udGVudCBpbiBjb3ZlcmFnZSwgbm90IGNvbG9yLlxuZnVuY3Rpb24gcXVhbnRpemUoYmdyYTogQnVmZmVyLCBpOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIChiZ3JhLnJlYWRVSW50OChpKSA+PiAzKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMSkgPj4gMykgPDwgNSkgfFxuICAgICgoYmdyYS5yZWFkVUludDgoaSArIDIpID4+IDMpIDw8IDEwKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMykgPj4gMykgPDwgMTUpXG4gICk7XG59XG5cbi8vIEJ5dGUgb2Zmc2V0IG9mIGEgcGl4ZWwgY2FycnlpbmcgdGhlIGZyYW1lJ3MgZG9taW5hbnQgY29sb3IgKG1vZGUgb3ZlciBhIHNwYXJzZSBsYXR0aWNlKS5cbmZ1bmN0aW9uIG1vZGFsUGl4ZWwoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHN0ZXBYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aWR0aCAvIEdSSUQpKTtcbiAgY29uc3Qgc3RlcFkgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGhlaWdodCAvIEdSSUQpKTtcbiAgY29uc3QgY291bnRzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgY29uc3QgZmlyc3RJZHggPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBsZXQgYmVzdCA9IDA7XG4gIGxldCBiZXN0Q291bnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBzdGVwWSkge1xuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gc3RlcFgpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgY29uc3Qga2V5ID0gcXVhbnRpemUoYmdyYSwgaSk7XG4gICAgICBjb25zdCBjb3VudCA9IChjb3VudHMuZ2V0KGtleSkgPz8gMCkgKyAxO1xuICAgICAgY291bnRzLnNldChrZXksIGNvdW50KTtcbiAgICAgIGlmICghZmlyc3RJZHguaGFzKGtleSkpIHtcbiAgICAgICAgZmlyc3RJZHguc2V0KGtleSwgaSk7XG4gICAgICB9XG4gICAgICBpZiAoY291bnQgPiBiZXN0Q291bnQpIHtcbiAgICAgICAgYmVzdENvdW50ID0gY291bnQ7XG4gICAgICAgIGJlc3QgPSBrZXk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXJzdElkeC5nZXQoYmVzdCkgPz8gMDtcbn1cblxuLy8gQmxhbmsgPSBkb21pbmFudC1jb2xvciBjb3ZlcmFnZTogZmV3ZXIgdGhhbiBNSU5fQ09OVEVOVF9TQU1QTEVTIHNhbXBsZXMgZGV2aWF0ZSBmcm9tIHRoZSBtb2RhbCBjb2xvci5cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rRnJhbWUoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBtID0gbW9kYWxQaXhlbChiZ3JhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgbWIgPSBiZ3JhLnJlYWRVSW50OChtKTtcbiAgY29uc3QgbWcgPSBiZ3JhLnJlYWRVSW50OChtICsgMSk7XG4gIGNvbnN0IG1yID0gYmdyYS5yZWFkVUludDgobSArIDIpO1xuICBjb25zdCBtYSA9IGJncmEucmVhZFVJbnQ4KG0gKyAzKTtcbiAgbGV0IGNvbnRlbnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBTVFJJREUpIHtcbiAgICBjb25zdCBvZmZzZXQgPSAoeSA+PiAyKSAmIChTVFJJREUgLSAxKTtcbiAgICBmb3IgKGxldCB4ID0gb2Zmc2V0OyB4IDwgd2lkdGg7IHggKz0gU1RSSURFKSB7XG4gICAgICBjb25zdCBpID0gKHkgKiB3aWR0aCArIHgpICogNDtcbiAgICAgIGlmIChcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSkgLSBtYikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAxKSAtIG1nKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDIpIC0gbXIpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMykgLSBtYSkgPiBDT05URU5UX0RFTFRBXG4gICAgICApIHtcbiAgICAgICAgY29udGVudCsrO1xuICAgICAgICBpZiAoY29udGVudCA+PSBNSU5fQ09OVEVOVF9TQU1QTEVTKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgQmxhbmtTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF90b3RhbCA9IDA7XG4gIHByaXZhdGUgX2JsYW5rID0gMDtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgc2FtcGxlKGZyYW1lOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90b3RhbCsrO1xuICAgIGlmIChpc0JsYW5rRnJhbWUoZnJhbWUsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpKSB7XG4gICAgICB0aGlzLl9ibGFuaysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyYWN0aW9uIG9mIHdyaXR0ZW4gZnJhbWVzIHRoYXQgd2VyZSBjb250ZW50bGVzcyAoMCA9IGFsbCBoYWQgY29udGVudCwgMSA9IGFsbCBibGFuaykuXG4gIGZpbmFsaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsID4gMCA/IHRoaXMuX2JsYW5rIC8gdGhpcy5fdG90YWwgOiAwO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG5leHBvcnQgY29uc3QgSkFOS19XQVJOX1NDT1JFID0gMC4yNTsgLy8gamFuayBzY29yZSBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmQgKH5xdWFydGVyIGRyb3BwZWQgb3IgYSB+MC41cyBmcmVlemUpXG5cbi8vIEZyYW1lLWRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCk6IGdsb2JhbCBkcm9wIHJhdGUgYW5kIGxvY2FsIGJ1cnN0IHNldmVyaXR5IGNvbWJpbmVkIHZpYSAxLSgxLWcpKDEtbCkuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRHJvcFN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnBzOiBudW1iZXI7XG4gIHByaXZhdGUgX2FjdHVhbCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRCdXJzdCA9IDA7XG4gIHByaXZhdGUgX2J1cnN0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihmcHM6IG51bWJlcikge1xuICAgIHRoaXMuX2ZwcyA9IGZwcztcbiAgfVxuXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICBmaW5hbGl6ZSgpOiBEcm9wU2NvcmUge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxEcm9wcGVkID0gMDtcbiAgICBsZXQgbG9jYWxTdW0gPSAwO1xuICAgIGxldCBtYXhCdXJzdCA9IDA7XG4gICAgZm9yIChjb25zdCBidXJzdCBvZiB0aGlzLl9idXJzdHMpIHtcbiAgICAgIHRvdGFsRHJvcHBlZCArPSBidXJzdDtcbiAgICAgIG1heEJ1cnN0ID0gTWF0aC5tYXgobWF4QnVyc3QsIGJ1cnN0KTtcbiAgICAgIGNvbnN0IHBlcmNlcHRpYmxlID0gTWF0aC5tYXgoMCwgYnVyc3QgLSAxKTtcbiAgICAgIGxvY2FsU3VtICs9IChwZXJjZXB0aWJsZSAvIHRoaXMuX2ZwcykgKiogMjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuX2FjdHVhbCArIHRvdGFsRHJvcHBlZDtcbiAgICBjb25zdCBnID0gZXhwZWN0ZWQgPiAwID8gdG90YWxEcm9wcGVkIC8gZXhwZWN0ZWQgOiAwO1xuICAgIGNvbnN0IGwgPSBNYXRoLm1pbigxLCBsb2NhbFN1bSk7XG4gICAgY29uc3Qgc2NvcmUgPSAxIC0gKDEgLSBnKSAqICgxIC0gbCk7XG5cbiAgICByZXR1cm4geyBnbG9iYWw6IGcsIGxvY2FsOiBsLCBqYW5rOiBzY29yZSwgZXhwZWN0ZWQsIGFjdHVhbDogdGhpcy5fYWN0dWFsLCBtYXhCdXJzdCB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBuYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdFRhcmdldCB7XG4gIG1zOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JlZW5zaG90T3B0aW9ucyB7XG4gIG1hcmtzOiBudW1iZXJbXTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbn1cblxuLy8gRHVtcHMgcGFpbnRlZCBCR1JBIGZyYW1lcyB0byBQTkcgYXQgcmVxdWVzdGVkIHNlY29uZCBtYXJrczsgcmVzdWx0IG9yZGVyIHRyYWNrcyBpbnB1dCBvcmRlci5cbmV4cG9ydCBjbGFzcyBTY3JlZW5zaG90VGFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nOiBTY3JlZW5zaG90VGFyZ2V0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvbmUgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93cml0ZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3M6IFNjcmVlbnNob3RPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyID0gZGlybmFtZShfcy5vdXRGaWxlc1swXSA/PyBcIi5cIik7XG4gICAgdGhpcy5fcGVuZGluZyA9IF9zLm1hcmtzXG4gICAgICAubWFwKChzZWMsIGluZGV4KSA9PiAoeyBtczogc2VjICogMTAwMCwgaW5kZXgsIHBhdGg6IGpvaW4oZGlyLCBgc2NyZWVuc2hvdF8ke2luZGV4fS5wbmdgKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm1zIC0gYi5tcyk7XG4gIH1cblxuICAvLyBEdW1wIGV2ZXJ5IG1hcmsgd2hvc2Ugc2Vjb25kIGhhcyBiZWVuIHJlYWNoZWQgYnkgdGhpcyBmcmFtZS5cbiAgY2FwdHVyZShjdXJyZW50VGltZU1zOiBudW1iZXIsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5fcGVuZGluZ1swXSEubXMgPD0gY3VycmVudFRpbWVNcykge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGJncmEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY29yZGluZyBvdmVyOiBzbmFwIGFueSBtYXJrIHBhc3QgdGhlIGxhc3QgZnJhbWUgb250byBpdCwgdGhlbiB3cml0ZSBhbGwgc2hvdHMgb3V0LlxuICBhc3luYyBmaW5pc2goZmluYWxCZ3JhPzogQnVmZmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHdoaWxlIChmaW5hbEJncmEgJiYgdGhpcy5fcGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgZmluYWxCZ3JhKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fd3JpdGVzKTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2RvbmUuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKChbLCBwYXRoXSkgPT4gcGF0aCk7XG4gIH1cblxuICBwcml2YXRlIHRha2UodGFyZ2V0OiBTY3JlZW5zaG90VGFyZ2V0LCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcG5nID0gbmF0aXZlSW1hZ2UuY3JlYXRlRnJvbUJpdG1hcChiZ3JhLCB7IHdpZHRoLCBoZWlnaHQgfSkudG9QTkcoKTtcbiAgICB0aGlzLl9kb25lLnNldCh0YXJnZXQuaW5kZXgsIHRhcmdldC5wYXRoKTtcbiAgICB0aGlzLl93cml0ZXMucHVzaCh3cml0ZUZpbGUodGFyZ2V0LnBhdGgsIHBuZykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBBYm9ydCBiYWlscyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nOyBzaWduYWwgaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIHdpcmVzIGl0IChmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG4gIHNpZ25hbCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyICoqIGF0dGVtcHQgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzI3LlxuXG5leHBvcnQgdHlwZSBXb3JsZE1vZGUgPSBcInNob290XCIgfCBcInJlbmRlclwiIHwgXCJhdWRpb1wiO1xuXG4vLyBOYW1lcyB0aGUgcGFnZS13b3JsZCBidW5kbGUgaW4gdGhlIHByZWxvYWQncyBhcmd2OyBrZWVwIHRoaXMgbW9kdWxlIGRlcGVuZGVuY3ktZnJlZSwgdGhlIHByZWxvYWQgbG9hZHMgaXQgYXMtaXMuXG5leHBvcnQgY29uc3QgV09STERfQVJHID0gXCItLXB1cC13b3JsZD1cIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmNvbnN0IExPQ0FMX1NDSEVNRVMgPSBbXCJwdXA6XCIsIFwicHVwLWZyYW1lOlwiLCBcImZpbGU6XCIsIFwiZGF0YTpcIiwgXCJibG9iOlwiLCBcImNocm9tZS1leHRlbnNpb246XCIsIFwiZGV2dG9vbHM6XCJdO1xuXG5mdW5jdGlvbiBpc0xvY2FsU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcyBvZiBMT0NBTF9TQ0hFTUVTKSB7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKHMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG4gIHN0dWJNZWRpYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5LCBzdHViTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIC8vIFN3YXAgbWVkaWEgZm9yIGEgZnJhbWUtc2VydmVyIHN0dWIgKHRydWUgaW50cmluc2ljIHNpemUvZHVyYXRpb24pIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuICAgIGlmIChzdHViTWVkaWEgJiYgZGV0YWlscy5yZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIiAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJwdXAtZnJhbWU6XCIpKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHJlZGlyZWN0VVJMOiBgcHVwLWZyYW1lOi8vc3R1Yj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbFNjaGVtZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGNvbnN0IHsgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUgfSA9IGRldGFpbHM7XG4gICAgLy8gU3R1YmJlZCBtZWRpYSBkb3duZ3JhZGVzOiBFUlJfQUJPUlRFRCBpcyBqdXN0IHRoZSBsb2FkZXIgcmVzdGFydGluZyBvbnRvIHRoZSBjcm9zcy1zY2hlbWUgcmVkaXJlY3QuXG4gICAgY29uc3QgbWVkaWEgPSBzdHViTWVkaWEgJiYgcmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCI7XG4gICAgY29uc3QgbGV2ZWwgPSBtZWRpYSA/IChlcnJvciA9PT0gXCJuZXQ6OkVSUl9BQk9SVEVEXCIgPyBcImRlYnVnXCIgOiBcIndhcm5cIikgOiBcImVycm9yXCI7XG4gICAgbG9nZ2VyW2xldmVsXShUQUcsIGBlcnJvcjpgLCB7IGtleSwgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUsIHNvdXJjZSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBQa2dSb290LCBwdXBQcmVsb2FkIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgV09STERfQVJHLCB0eXBlIFdvcmxkTW9kZSB9IGZyb20gXCIuLi9ydW50aW1lL3dvcmxkXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5jb25zdCBUSU1FT1VUX0VSUk9SID0gbmV3IEVycm9yKFwid2luZG93IHRpbWVvdXRcIik7XG5jb25zdCBDT05TT0xFX0lHTk9SRVMgPSBbXCJNaXhlZCBDb250ZW50OiBUaGUgcGFnZSBhdFwiXTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdGltZW91dE1zLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZG9tUmVhZHkgPSBmYWxzZTtcbiAgICAvLyBUb2xlcmFudCBwcm9jZWVkcyBvbiBhIHBhcnRpYWwgRE9NIG9ubHkgYXMgYSB0aW1lb3V0IGZhbGxiYWNrIOKAlCBzdGFydGluZyBvbiBiYXJlIGRvbS1yZWFkeSBsZWF2ZXMgdGhlIGxvYWQgcGVuZGluZyBhbmQgd2VkZ2VzIHZpcnR1YWwgdGltZS5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKHRvbGVyYW50ICYmIGRvbVJlYWR5ID8gdW5kZWZpbmVkIDogVElNRU9VVF9FUlJPUiksIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiB1bmtub3duKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGRvbmUoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkb20tcmVhZHk6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9tUmVhZHkgPSB0cnVlO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYGRpZC1mYWlsLWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoeyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicHJlbG9hZC1lcnJvclwiLCAoX2UsIF9wYXRoLCBlcnJvcikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgYHByZWxvYWQtZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSl9YCk7XG4gICAgICBkb25lKGVycm9yKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInJlbmRlci1wcm9jZXNzLWdvbmVcIiwgKF9lLCB7IGV4aXRDb2RlLCByZWFzb24gfSkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYHJlbmRlci1wcm9jZXNzLWdvbmU6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIGV4aXRDb2RlLCByZWFzb24gfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlV2luZG93KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgXCJmb3JjZSBjbG9zZVwiKTtcbiAgICAgICAgd2luLmRlc3Ryb3koKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIGRvbmUoKTtcbiAgICB9LCAxMDAwKTtcbiAgICBjb25zdCBkb25lID0gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuZGV0YWNoKCk7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgZG9uZSk7XG4gICAgd2luLmNsb3NlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgdHlwZSBXaW5kb3dDcmVhdGVkQ2FsbGJhY2sgPSAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIG9uQ3JlYXRlZD86IFdpbmRvd0NyZWF0ZWRDYWxsYmFjaztcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8vIFBhZ2Utd29ybGQgaG9vayBidW5kbGVzOyB0aGUgcHJlbG9hZCBldmFsdWF0ZXMgdGhlIG5hbWVkIG9uZSBpbiB0aGUgbWFpbiB3b3JsZCBvZiBldmVyeSBmcmFtZSBpdCBsYW5kcyBpbi5cbmNvbnN0IFdPUkxEX1NDUklQVFM6IFJlY29yZDxXb3JsZE1vZGUsIHN0cmluZz4gPSB7XG4gIHNob290OiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJzaG9vdC5nbG9iYWwuanNcIiksXG4gIHJlbmRlcjogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicmVuZGVyLmdsb2JhbC5qc1wiKSxcbiAgYXVkaW86IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImF1ZGlvLmdsb2JhbC5qc1wiKSxcbn07XG5cbmZ1bmN0aW9uIHBpY2tXb3JsZFNjcmlwdChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IG1vZGU6IFdvcmxkTW9kZSA9IHJlbmRlcmVyLmRldGVybWluaXN0aWMgPyBcInNob290XCIgOiByZW5kZXJlci53aXRoQXVkaW8gPyBcImF1ZGlvXCIgOiBcInJlbmRlclwiO1xuICByZXR1cm4gV09STERfU0NSSVBUU1ttb2RlXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICAvLyBDYXJyaWVzIHRoZSBicmlkZ2UgcHJlbG9hZCBpbnRvIHRoZSB0YXJnZXQgaWZyYW1lOyBub2RlIHN0YXlzIG9mZiwgYXMgbm9kZUludGVncmF0aW9uIGtlZXBzIGl0cyBmYWxzZSBkZWZhdWx0LlxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICAvLyBFbGVjdHJvbiBzYW5kYm94ZXMgcHJlbG9hZHMgYnkgZGVmYXVsdCwgd2hpY2ggYnJlYWtzIHRoZWlyIGJ1bmRsZWQgcmVxdWlyZXM7IHRoZSBPUyBzYW5kYm94IGlzIG9mZiByZWdhcmRsZXNzLlxuICAgICAgc2FuZGJveDogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogIXJlbmRlcmVyLmRpc2FibGVXZWJTZWN1cml0eSxcbiAgICAgIC8vIFRoZSB3cmFwcGVyIGlzIGEgc2VjdXJlIHNjaGVtZSwgc28gaXQgdXBncmFkZXMgdGhlIHRhcmdldCB0byBodHRwcyBhbmQgZXZlcnkgaHR0cCBzdWJyZXNvdXJjZSBpdCBvd25zIHR1cm5zIG1peGVkLlxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgICBwcmVsb2FkOiBwdXBQcmVsb2FkLFxuICAgICAgYWRkaXRpb25hbEFyZ3VtZW50czogW2Ake1dPUkxEX0FSR30ke3BpY2tXb3JsZFNjcmlwdChyZW5kZXJlcil9YF0sXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHtcbiAgICBzb3VyY2UsXG4gICAgd2luZG93OiB3aW4sXG4gICAgdXNlSW5uZXJQcm94eSxcbiAgICBzdHViTWVkaWE6IHJlbmRlcmVyLmRldGVybWluaXN0aWMsXG4gIH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIC8vIERyb3AgaGVhZGxlc3Mgbm9pc2U6IHNlY3VyaXR5IHdhcm5pbmdzIGFuZCBodHRw4oaSaHR0cHMgYXV0by11cGdyYWRlIG5vdGljZXMgZm9yIGludGVybmFsLXByb3h5IGFzc2V0cy5cbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIENPTlNPTEVfSUdOT1JFUy5maW5kKChpKSA9PiBtZXNzYWdlLnN0YXJ0c1dpdGgoaSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7XG4gICAgICBzb3VyY2UsXG4gICAgICB3aW4sXG4gICAgICBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksXG4gICAgICB0aW1lb3V0TXM6IHJlbmRlcmVyLndpbmRvd1RpbWVvdXQgKiAxMDAwLFxuICAgICAgdG9sZXJhbnQsXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIHJldHVybiBvcGVuV2luZG93KHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgb25DcmVhdGVkLFxuICAgICAgc2lnbmFsLFxuICAgICAgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcmVidWlsZERyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2JsYW5rXCI7XG5pbXBvcnQgeyBEcm9wU3RhdHMsIEpBTktfV0FSTl9TQ09SRSB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvZHJvcFwiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RGcmFtZTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNsZWFyU3R1Y2tDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rU3RhdHMod2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUpO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgZW5jb2RlRXJyb3IgPz89IHNpZ25hbD8ucmVhc29uO1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBpZiAoc3R1Y2sgPj0gZnBzKSB7XG4gICAgICAgICAgcmVqZWN0ZXI/LihuZXcgRXJyb3IoYHJlbmRlcmVyIHN0YWxsZWQgZm9yICR7TWF0aC5yb3VuZCgoc3R1Y2sgKiAxMDAwKSAvIGZwcyl9bXMgQCAke3dyaXR0ZW59YCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0dWNrID09PSAxIHx8IHN0dWNrID09PSBNYXRoLmZsb29yKGZwcyAvIDIpKSB7XG4gICAgICAgICAgYXdhaXQgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJTdHVja0NoZWNrPy4oKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEZyYW1lKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZHJvcHBlZCBmcmFtZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cywgamFuayB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgYWJvcnRhYmxlIH0gZnJvbSBcIi4uLy4uL2Jhc2UvdGltaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1ZpZGVvXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VPcHRpb25zIHtcbiAgZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZDtcbiAgdGltZXN0YW1wTXM6IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8vIE9ubHkgdGhlIGRldGVybWluaXN0aWMgcmVuZGVyZXIgKHNob290KSBkcml2ZXMgdGhpczsgcmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2sgdmlhIHJBRiBpbiB0aGUgcGFnZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZHZhbmNlVmlkZW9zKHsgZnJhbWUsIHRpbWVzdGFtcE1zLCBzaWduYWwgfTogQWR2YW5jZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFmcmFtZT8udXJsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhYm9ydGFibGUoXG4gICAgICBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChcbiAgICAgICAgYHdpbmRvdy5fX3B1cF92aWRlb19fJiYoYXN5bmMoKT0+e2F3YWl0IF9fcHVwX3ZpZGVvX18ucmVhZHkoKTthd2FpdCBfX3B1cF92aWRlb19fLmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pfSkoKWAsXG4gICAgICApLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQWR2YW5jZU9wdGlvbnMsIGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9hZHZhbmNlXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGFyZ3M6IEFkdmFuY2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgZnJhbWUsIHRpbWVzdGFtcE1zIH0gPSBhcmdzO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhhcmdzKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yMy5cblxuaW1wb3J0IHsgRGVtdXhlciwgdHlwZSBEZW11eGVyT3B0aW9ucyB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuXG4vLyBmZm1wZWcgcmVhZC93cml0ZSBkZWFkbGluZSAowrVzKTsgYSBibG9ja2luZyBvcGVuIGlnbm9yZXMgQWJvcnRTaWduYWwsIHNvIHRoaXMgYm91bmRzIGEgc3R1Y2sgQ0ROLlxuY29uc3QgUldfVElNRU9VVF9VUyA9IFwiODAwMDAwMFwiO1xuXG4vLyBmZm1wZWcgb3BlbnMgaHR0cC9odHRwcyB3aXRoIG5hdGl2ZSBieXRlLXJhbmdlIHJlcXVlc3RzLCBzbyBvbmx5IHRoZSBkZWNvZGVkIHJhbmdlcyBkb3dubG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSW5wdXQoc3JjOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZW11eGVyPiB7XG4gIGNvbnN0IG9wdGlvbnM6IERlbXV4ZXJPcHRpb25zID0geyBzaWduYWwsIG9wdGlvbnM6IHsgcndfdGltZW91dDogUldfVElNRU9VVF9VUyB9IH07XG4gIHJldHVybiBEZW11eGVyLm9wZW4oc3JjLCBvcHRpb25zKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjUuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgRGVjb2RlciwgRmlsdGVyQVBJIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlZEZyYW1lIHtcbiAgaWR4OiBudW1iZXI7XG4gIGJ1ZjogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZUZyYW1lc09wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgbWV0YTogVmlkZW9NZXRhO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBEZWNvZGUgYSBzb3VyY2UgdG8gZnBzLXJlc2FtcGxlZCwgZGlzcGxheS1zY2FsZWQsIHRpZ2h0LVJHQkEgZnJhbWVzIGluIG9yZGVyIChpZHggPSAxLWJhc2VkIGRlY29kZSBwb3NpdGlvbikuIENvbnN1bWVyIGJhY2twcmVzc3VyZSBpcyBqdXN0IHB1bGxpbmcgc2xvd2VyLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBkZWNvZGVGcmFtZXMoeyBzcmMsIG1ldGEsIHNpZ25hbCB9OiBEZWNvZGVGcmFtZXNPcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8RGVjb2RlZEZyYW1lPiB7XG4gIGF3YWl0IHVzaW5nIGlucHV0ID0gYXdhaXQgb3BlbklucHV0KHNyYywgc2lnbmFsKTtcbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gIGNvbnN0IHsgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gbWV0YTtcbiAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gIHVzaW5nIGZpbHRlciA9IEZpbHRlckFQSS5jcmVhdGUoYGZwcz0ke2Zwc30sJHtzY2FsZX1mb3JtYXQ9cmdiYWAsIHsgc2lnbmFsIH0pO1xuICBsZXQgayA9IDA7XG4gIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZmlsdGVyLmZyYW1lcyhkZWMuZnJhbWVzKGlucHV0LnBhY2tldHMoc3RyZWFtLmluZGV4KSkpKSB7XG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIHsgaWR4OiArK2ssIGJ1ZjogcGFja1JnYmEoZnJhbWUpIH07XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBjb3B5IChkcm9wIGxpYmF2IHJvdyBwYWRkaW5nKSBzbyB0aGUgcGFnZSBjYW4gd3JhcCBpdCBzdHJhaWdodCBpbnRvIEltYWdlRGF0YS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IGZyYW1lLndpZHRoICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzcmMuc3ViYXJyYXkoMCwgcm93ICogZnJhbWUuaGVpZ2h0KSk7XG4gIH1cbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKHJvdyAqIGZyYW1lLmhlaWdodCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgZnJhbWUuaGVpZ2h0OyB5KyspIHtcbiAgICBzcmMuY29weShvdXQsIHkgKiByb3csIHkgKiBzdHJpZGUsIHkgKiBzdHJpZGUgKyByb3cpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBkZWNvZGVGcmFtZXMgfSBmcm9tIFwiLi9kZWNvZGVcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBERUNPREVfQUhFQUQgPSA0OyAvLyBkZWNvZGUgYSBmZXcgZnJhbWVzIHBhc3QgdGhlIGhpZ2hlc3QgcmVxdWVzdDsgdGhlIHBhZ2UgYWxyZWFkeSBwcmVmZXRjaGVzXG5jb25zdCBLRUVQX0JFSElORCA9IDE2OyAvLyBtaW4gZnJhbWVzIGhlbGQgYmVoaW5kIHRoZSBoZWFkOyBtdXN0IGV4Y2VlZCB0aGUgcGFnZSdzIHByZWZldGNoIGxlYWQgKEFIRUFEPTEwKVxuY29uc3QgTUVNT1JZX0JVREdFVCA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyByZXRhaW4gZGVjb2RlZCBmcmFtZXMgdXAgdG8gdGhpcyBwZXItc2Vzc2lvbiBidWRnZXQgc28gYSBzbWFsbCBsb29waW5nIHZpZGVvIHJlLXNlcnZlcyBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHJlLWRlY29kaW5nXG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgcmVwb3J0aW5nIGVuZC1vZi1zdHJlYW1cblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIGlkeDogbnVtYmVyO1xuICByZXNvbHZlOiAoYjogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vLyBEZW1hbmQtZHJpdmVuIGluLXByb2Nlc3MgZGVjb2RlIChEZW11eGVy4oaSRGVjb2RlcuKGkmZwcy9zY2FsZS9yZ2JhIGZpbHRlcikgc2VydmluZyBmcmFtZSBOIGFzIHRpZ2h0IFJHQkE7IGZvcndhcmQtb25seSDigJQgYSBsb29wL3Jld2luZCByZS1kZWNvZGVzIGZyb20gZnJhbWUgMSB1bmxlc3MgdGhlIHdob2xlIGNsaXAgc3RpbGwgZml0cyB0aGUgbWVtb3J5IGJ1ZGdldC5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfd2FpdGVycyA9IG5ldyBTZXQ8V2FpdGVyPigpO1xuICBwcml2YXRlIF9yZXN1bWU6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAvLyBMZWFkIGZyYW1lcyBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGNvbnRlbnQgaWR4IGlzIG9mZnNldCBwYXN0IHRoZW0uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgLy8gRnJhbWVzIGtlcHQgYmVoaW5kIHRoZSBoZWFkOyBhIGNsaXAgdGhhdCBmaXRzIHRoZSBidWRnZXQgcmV0YWlucyBldmVyeSBmcmFtZSwgc28gbG9vcHMgcmUtc2VydmUgZnJvbSBtZW1vcnkuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tlZXBDb3VudDogbnVtYmVyO1xuICAvLyBSZXNvbHZlcyB3aGVuIHB1bXAoKSBmdWxseSB1bndpbmRzIOKAlCBhd2FpdGVkIG9uIGNsb3NlIHNvIG5vZGUtYXYgZ2VuZXJhdG9ycyBmcmVlIGJlZm9yZSBwcm9jZXNzIHRlYXJkb3duLlxuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3B1bXBEb25lID0gdGhpcy5wdW1wKCk7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKGlkeCA8IDEpIHtcbiAgICAgIGlkeCA9IDE7XG4gICAgfVxuICAgIGlmIChpZHggPD0gdGhpcy5fbGVhZEZyYW1lcykge1xuICAgICAgaWR4ID0gdGhpcy5fbGVhZEZyYW1lcyArIDE7IC8vIGhvbGQgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZSBhY3Jvc3MgdGhlIGxlYWRcbiAgICB9XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIH1cbiAgICBpZiAoaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIC8vIGZvcndhcmQsIG5vdCB5ZXQgZGVjb2RlZCBpbiB0aGlzIHBhc3NcbiAgICAgIGlmIChpZHggPiB0aGlzLl93YW50KSB7XG4gICAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB9XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZpY3RlZCAobG9vcC9yZXdpbmQpOiBjbGVhciByZWFkeS9kb25lIHN5bmNocm9ub3VzbHkgc28gdGhlIHdyYXAncyBwcmVmZXRjaCBidXJzdCBjb2FsZXNjZXMgaW50byBvbmUgcmVzdGFydCwgbm90IG9uZSBwZXIgZnJhbWUuXG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWl0KGlkeCk7XG4gIH1cblxuICAvLyBBd2FpdCB0aGUgcHVtcCBzbyB0aGUgbm9kZS1hdiBkZW11eGVyL2RlY29kZXIgZ2VuZXJhdG9ycyB1bndpbmQgKGNvbnRleHRzIGZyZWVkKSBiZWZvcmUgdGhlIGNhbGxlciBleGl0cy5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICB3LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgLy8gLWQtb25seSBzdWJzeXN0ZW0sIHNvIG5ldmVyIHRpbWUgb3V0OiBkcmFpbldhaXRlcnMgcmVzb2x2ZXMgb24gZGVjb2RlLCBFT0YsIG9yIGNsb3NlIOKAlCBvdXRwdXQgbmV2ZXIgZGVwZW5kcyBvbiBmZXRjaCBsYXRlbmN5LlxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3VtZTtcbiAgICB0aGlzLl9yZXN1bWUgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gIH1cblxuICAvLyBJbnZhbGlkYXRlIHRoZSBydW5uaW5nIHBhc3MgKG9yIHdha2UgYSBwYXJrZWQgb25lKSBzbyBwdW1wKCkgc3RhcnRzIGEgZnJlc2ggZGVjb2RlIGZyb20gZnJhbWUgMS5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdGFydDtcbiAgICB0aGlzLl9yZXN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICAgIHRoaXMud2FrZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdW1wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmYWlscyA9IDA7XG4gICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIGNvbnN0IGdlbiA9IHRoaXMuX2dlbjtcbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFRBRyxcbiAgICAgICAgICAgIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgcGFzcyBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICBmYWlscyA9IDA7XG4gICAgICAgIGNvbnRpbnVlOyAvLyByZXN0YXJ0IHJlcXVlc3RlZCBtaWQtcGFzc1xuICAgICAgfVxuICAgICAgLy8gQSB0aHJvd24gcGFzcyBpcyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgKGUuZy4gYSBzdHJlYW1lZCBsb29wIHJlLW9wZW4pOyByZXRyeSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBFT0YsIHdoaWNoIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gZGVjb2RlRnJhbWVzKHsgc3JjOiB0aGlzLl9zcmMsIG1ldGE6IHRoaXMubWV0YSwgc2lnbmFsOiB0aGlzLl9jdHJsLnNpZ25hbCB9KTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBzdHJlYW0pIHtcbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYXQgPSB0aGlzLl9sZWFkRnJhbWVzICsgaWR4OyAvLyBtYXAgZGVjb2RlIHBvc2l0aW9uIHBhc3QgdGhlIGhlbGQgbGVhZC1nYXAgZnJhbWVzXG4gICAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbiAmJiBhdCA+IHRoaXMuZGVtYW5kICsgREVDT0RFX0FIRUFEKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYnVmLnNldChhdCwgYnVmKTtcbiAgICAgIHRoaXMuX3JlYWR5ID0gYXQ7XG4gICAgICAvLyBEcmFpbiBiZWZvcmUgZXZpY3Q6IHdpdGggd2FudCBmYXIgYWhlYWQgdGhlIGZsb29yIGNvdmVycyB0aGlzIGZyYW1lLCBhbmQgZXZpY3RpbmcgaXQgZmlyc3Qgc3RhcnZlcyBpdHMgd2FpdGVyIGZvcmV2ZXIuXG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgdGhpcy5ldmljdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhaXRlcnMgdGhhdCBzdXJ2aXZlZCBhIHJld2luZCByZXN0YXJ0IGFyZSBzdGlsbCBkZW1hbmQ7IGlnbm9yaW5nIHRoZW0gcGFya3MgdGhlIHBhc3MgYW5kIHN0YXJ2ZXMgdGhlbSBmb3JldmVyLlxuICBwcml2YXRlIGdldCBkZW1hbmQoKTogbnVtYmVyIHtcbiAgICBsZXQgZCA9IHRoaXMuX3dhbnQ7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIGlmICh3LmlkeCA+IGQpIHtcbiAgICAgICAgZCA9IHcuaWR4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIHByaXZhdGUgcGF1c2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN1bWUgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUGFyayB1bnRpbCBhIGxvb3AvYmFja3dhcmQgcmVxdWVzdCAob3IgY2xvc2UpIGNhbGxzIHJlcXVlc3RSZXN0YXJ0KCkuXG4gIHByaXZhdGUgdW50aWxSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN0YXJ0ID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLl93YW50IC0gdGhpcy5fa2VlcENvdW50O1xuICAgIGZvciAoY29uc3QgayBvZiB0aGlzLl9idWYua2V5cygpKSB7XG4gICAgICBpZiAoayA8IGZsb29yKSB7XG4gICAgICAgIHRoaXMuX2J1Zi5kZWxldGUoayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbldhaXRlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4udGhpcy5fd2FpdGVyc10pIHtcbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoZW50cnkuaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKGhpdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUoZW50cnkpO1xuICAgICAgICBlbnRyeS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZWNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9iZVJlc3VsdCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogUFRTIChzKSBvZiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBhIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBydW4gaXMgaGVsZCBvbiBpdCwgbGlrZSBDaHJvbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuLy8gTm8gd2FsbC1jbG9jayBjYXA6IG9wZW5JbnB1dCdzIHBlci1yZWFkIHJ3X3RpbWVvdXQgYm91bmRzIGEgc3R1Y2sgc291cmNlLCBhbmQgdGhlIGNhbGxlciByZXRyaWVzIG9uIHRocm93LlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgb3BlbklucHV0KHNyYyk7XG4gIGNvbnN0IHN0cmVhbSA9IGQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmU6IG5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIGNvbnN0IHRiID0gc3RyZWFtLnRpbWVCYXNlLm51bSAvIHN0cmVhbS50aW1lQmFzZS5kZW47XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyB0aHJlYWRDb3VudDogMSB9KTtcbiAgbGV0IGxlYWRHYXAgPSAwO1xuICAvLyBGaXJzdCBjbGVhbiBmcmFtZSdzIFBUUyA9IHdoZXJlIGNvbnRlbnQgYmVnaW5zOyBza2lwIGNvcnJ1cHQgZnJhbWVzIGxpa2UgYSBicm93c2VyLlxuICBvdXRlcjogZm9yIGF3YWl0ICh1c2luZyBwa3Qgb2YgZC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBkZWMuZnJhbWVzKHBrdCkpIHtcbiAgICAgICAgaWYgKGZyYW1lPy5kZWNvZGVFcnJvckZsYWdzICE9PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGVhZEdhcCA9IE1hdGgubWF4KDAsIE51bWJlcihmcmFtZS5wdHMpICogdGIpO1xuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGNvcnJ1cHQgcGFja2V0IOKAlCBza2lwIHRvIHRoZSBuZXh0XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24sIGxlYWRHYXAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDYuXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0gfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb2RlYywgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDksIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3R1YkVuY29kZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuLy8gUmVhbCBwYXJzZWFibGUgbWVkaWEgd2l0aCB0aGUgc291cmNlJ3MgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbiwgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jb2RlU3R1YldlYm0oeyB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiB9OiBTdHViRW5jb2RlT3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9MSUJWUFhfVlA5KTtcbiAgaWYgKCFjb2RlYykge1xuICAgIHRocm93IG5ldyBFcnJvcihgc3R1YjogZW5jb2RlciBub3QgZm91bmQ6ICR7RkZfRU5DT0RFUl9MSUJWUFhfVlA5fWApO1xuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX3N0dWJfJHtyYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKX0ud2VibWApO1xuICB0cnkge1xuICAgIHtcbiAgICAgIGF3YWl0IHVzaW5nIG11eGVyID0gbmV3IEZvcm1hdE11eGVyKHBhdGgpO1xuICAgICAgLy8gVGltZWJhc2UgMS8xMDAwIChmcHMgcGFyYW0pIGxldHMgb25lIHBhY2tldCBjYXJyeSB0aGUgZnVsbCBzb3VyY2UgZHVyYXRpb24gaW4gbXMuXG4gICAgICB1c2luZyBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlYyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgZnBzOiAxMDAwLFxuICAgICAgICAgIGJpdHJhdGU6IDEwMF8wMDAsXG4gICAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgICAgICAgICBvcHRpb25zOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHViQ3R4Lm9wZW4yXCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgICB1c2luZyBzdHViID0gbmV3IFN0dWJGcmFtZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IG1zID0gQmlnSW50KE1hdGgubWF4KDEsIE1hdGgucm91bmQoZHVyYXRpb24gKiAxMDAwKSkpO1xuICAgICAgc3R1Yi5mcmFtZS5wdHMgPSAwbjtcbiAgICAgIHN0dWIuZnJhbWUuZHVyYXRpb24gPSBtcztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKHN0dWIuZnJhbWUpLCBcInN0dWJDdHguc2VuZEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCksIFwic3R1YkN0eC5mbHVzaFwiKTtcbiAgICAgIHVzaW5nIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJzdHViQ3R4LnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gbXM7XG4gICAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuLy8gT3ducyB0aGUgYmxhY2sgcGl4ZWwgYnVmZmVyIEFORCBpdHMgemVyby1jb3B5IGZyYW1lIHZpZXcg4oCUIGB1c2luZ2AgcGlucyBib3RoIHVudGlsIGFmdGVyIGVuY29kZS5cbmNsYXNzIFN0dWJGcmFtZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBmcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZjogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbHVtYSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIGNvbnN0IGNocm9tYSA9IE1hdGguY2VpbCh3aWR0aCAvIDIpICogTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhsdW1hICsgY2hyb21hICogMiwgMHg4MCk7XG4gICAgdGhpcy5fYnVmLmZpbGwoMCwgMCwgbHVtYSk7XG4gICAgdGhpcy5mcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcih0aGlzLl9idWYsIHsgd2lkdGgsIGhlaWdodCwgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSk7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uLy4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwgfSBmcm9tIFwiLi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgRGVjb2RlU2Vzc2lvbiB9IGZyb20gXCIuL2RlY29kZV9zZXNzaW9uXCI7XG5pbXBvcnQgeyB0eXBlIFByb2JlUmVzdWx0LCBwcm9iZSB9IGZyb20gXCIuL3Byb2JlXCI7XG5pbXBvcnQgeyBlbmNvZGVTdHViV2VibSB9IGZyb20gXCIuL3N0dWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBjb250ZW50IGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICAvKiogRGlzcGxheS1ib3ggcGl4ZWxzIChjYW52YXMgYmFja2luZyBzdG9yZSk7IGRlY29kZSBpcyBkb3duc2NhbGVkIHRvIGNvdmVyIHRoaXMsIG5ldmVyIHVwc2NhbGVkLiAqL1xuICBkc3RXPzogbnVtYmVyO1xuICBkc3RIPzogbnVtYmVyO1xuICAvKiogb2JqZWN0Rml0OyBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscyBzbyBpdCBza2lwcyBkb3duc2NhbGUuICovXG4gIGZpdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVudHJ5IHtcbiAgc2Vzc2lvbjogRGVjb2RlU2Vzc2lvbjtcbiAgcmVmczogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIF9zZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcHJpdmF0ZSBfcHJvYmVzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8UHJvYmVSZXN1bHQ+PigpO1xuICBwcml2YXRlIF9zdHVicyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1ZmZlcj4+KCk7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuXG4gIC8vIC1kIGRlY29kZSBieXBhc3NlcyB0aGUgd2luZG93IGludGVyY2VwdG9yLCBzbyBpdCByZW1hcHMgaG9zdHMgaXRzZWxmIHdoZW4gdGhlIGlubmVyIHByb3h5IGlzIG9uLlxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF91c2VJbm5lclByb3h5OiBib29sZWFuKSB7fVxuXG4gIC8vIGNsb3NlZC1jaGVja2VkIGFmdGVyIHByb2JlIHNvIGNsb3NlQWxsKCkgY2FuJ3QgcmFjZSBhIHNsb3cgb3BlbiBpbnRvIGEgbGVha2VkIHNlc3Npb24uXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGtleShvcHRzKTtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdC5yZWZzKys7XG4gICAgICByZXR1cm4gaGl0LnNlc3Npb24ubWV0YTtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwob3B0cy5zcmMpIDogb3B0cy5zcmM7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHRoaXMucHJvYmVDYWNoZWQoc3JjKTtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgbGV0IGZyYW1lV2lkdGggPSBpbmZvLndpZHRoO1xuICAgIGxldCBmcmFtZUhlaWdodCA9IGluZm8uaGVpZ2h0O1xuICAgIC8vIERvd25zY2FsZSB0byBjb3ZlciB0aGUgZGlzcGxheSBib3ggKG5ldmVyIHVwc2NhbGUpOyBvYmplY3RGaXQgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMuXG4gICAgaWYgKG9wdHMuZHN0VyAmJiBvcHRzLmRzdEggJiYgb3B0cy5maXQgIT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5taW4oMSwgTWF0aC5tYXgob3B0cy5kc3RXIC8gaW5mby53aWR0aCwgb3B0cy5kc3RIIC8gaW5mby5oZWlnaHQpKTtcbiAgICAgIGZyYW1lV2lkdGggPSBldmVuKGluZm8ud2lkdGggKiBzKTtcbiAgICAgIGZyYW1lSGVpZ2h0ID0gZXZlbihpbmZvLmhlaWdodCAqIHMpO1xuICAgIH1cbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7XG4gICAgICBpZCxcbiAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgIGZyYW1lV2lkdGgsXG4gICAgICBmcmFtZUhlaWdodCxcbiAgICAgIGZwczogb3B0cy5mcHMsXG4gICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIGxlYWRHYXA6IGluZm8ubGVhZEdhcCxcbiAgICB9O1xuICAgIHRoaXMuX3Nlc3Npb25zLnNldChpZCwgeyBzZXNzaW9uOiBuZXcgRGVjb2RlU2Vzc2lvbihtZXRhLCBzcmMpLCByZWZzOiAxIH0pO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBtZWRpYSByZXF1ZXN0cyByZWRpcmVjdCBoZXJlOiByZWFsIHBhcnNlYWJsZSBieXRlcyB3aXRoIHRydWUgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbi5cbiAgc3R1YihzcmM6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWwgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzcmMpIDogc3JjO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3N0dWJzLmdldChyZWFsKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdGhpcy5wcm9iZUNhY2hlZChyZWFsKS50aGVuKChpbmZvKSA9PlxuICAgICAgZW5jb2RlU3R1YldlYm0oe1xuICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fc3R1YnMuZGVsZXRlKHJlYWwpKTtcbiAgICB0aGlzLl9zdHVicy5zZXQocmVhbCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHJldHVybiBlLnNlc3Npb24uZ2V0RnJhbWUoaWR4KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC0tZS5yZWZzID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgIGF3YWl0IGUuc2Vzc2lvbi5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgoZSkgPT4gZS5zZXNzaW9uLmNsb3NlKCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEZyYW1lU2VydmVyLCB0eXBlIFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltGcmFtZVByb3RvY29sXVwiO1xuXG4vLyBTY2hlbWUgaXMgcmVnaXN0ZXJlZCBhbG9uZ3NpZGUgYHB1cGAgaW4gcmVuZGVyZXIvcHJvdG9jb2wudHMgKHNpbmdsZSBjYWxsIG9ubHkpLlxuY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuY29uc3QgQ09SU19IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBcIipcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1tZXRob2RzXCI6IFwiR0VULCBPUFRJT05TXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiOiBcIipcIixcbn07XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS4gRGV0ZXJtaW5pc3RpYy1vbmx5IChyZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljaywgbm8gZnJhbWUgcHJvdG9jb2wpLlxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZyYW1lUHJvdG9jb2wodXNlSW5uZXJQcm94eTogYm9vbGVhbik6IEFzeW5jRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGZzID0gbmV3IEZyYW1lU2VydmVyKHVzZUlubmVyUHJveHkpO1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmV0dXJuIGpzb25PayhcbiAgICAgICAgICAgIGF3YWl0IGZzLm9wZW4oe1xuICAgICAgICAgICAgICBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsXG4gICAgICAgICAgICAgIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApLFxuICAgICAgICAgICAgICBkc3RXOiBpbnQodXJsLCBcIndcIiwgMCksXG4gICAgICAgICAgICAgIGRzdEg6IGludCh1cmwsIFwiaFwiLCAwKSxcbiAgICAgICAgICAgICAgZml0OiB1cmwuc2VhcmNoUGFyYW1zLmdldChcImZpdFwiKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZnJhbWVcIjpcbiAgICAgICAgICByZXR1cm4gcmdiYU9rKGF3YWl0IGZzLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKTtcbiAgICAgICAgY2FzZSBcInN0dWJcIjpcbiAgICAgICAgICByZXR1cm4gd2VibU9rKGF3YWl0IGZzLnN0dWIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIikpO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBhd2FpdCBmcy5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7XG4gICAgICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgICAgIGhlYWRlcnM6IENPUlNfSEVBREVSUyxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgJHt1cmwuaG9zdG5hbWV9IGZhaWxlZCR7dXJsLnNlYXJjaH06ICR7bXNnfWApO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvdG9jb2wudW5oYW5kbGUoU0NIRU1FKTtcbiAgICAgIGF3YWl0IGZzLmNsb3NlQWxsKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuLy8gQ2FjaGVkIHN0dWIgQnVmZmVyIGlzIHNoYXJlZCBhY3Jvc3MgcmVzcG9uc2VzIOKAlCBjb3B5IHNvIGEgY29uc3VtZXIgY2FuJ3QgZGV0YWNoIGl0LlxuZnVuY3Rpb24gd2VibU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ2aWRlby93ZWJtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICB9XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3csIE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIHBhdXNlVmlydHVhbFRpbWUsIHJlYnVpbGREcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgU2NyZWVuc2hvdFRha2VyIH0gZnJvbSBcIi4vc2NyZWVuc2hvdFwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIGRyYXdTdGVnbywgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIHdhaXRTdGVnb1RpY2sgfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgdGljayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IHVzZUZyYW1lUHJvdG9jb2wgfSBmcm9tIFwiLi92aWRlby9wcm90b2NvbFwiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcbmNvbnN0IFJFTkRFUl9GUFMgPSAyNDA7XG5cbmludGVyZmFjZSBQYWludE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuLy8gUGFpbnRpbmcgc3RheXMgb24gZm9yIHRoZSB3aG9sZSBydW47IHdhaXRzIGZvciB0aGUgZnJhbWUgd2hvc2Ugc3RlZ28gcm93IG1hdGNoZXMgYG1zYCwgdW5kZWZpbmVkIG9uIHRpbWVvdXQuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHdpbiwgZnBzLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICBsZXQgY2xlYXJEaXJ0eUNoZWNrOiBWb2lkRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IHVua25vd24sIF9kOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSBmcm9tIGEgMi1yb3cgc2xpdmVyIGZpcnN0OyB0aGUgZnVsbC1mcmFtZSByZWFkYmFjayAofjhNQiBtZW1jcHkpIGlzIHBhaWQgb25seSBvbiB0aGUgbWF0Y2hpbmcgZnJhbWUuXG4gICAgICAgIGNvbnN0IHNsaXZlciA9IGltYWdlLmNyb3AoeyB4OiAwLCB5OiBmcmFtZVNpemUuaGVpZ2h0IC0gMiwgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oc2xpdmVyLnRvQml0bWFwKCksIHsgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIGNsZWFyRGlydHlDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKHN0dWNrKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSBmcHMgKiA1KSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcGFpbnQgdGltZW91dCBAICR7bXN9YCk7XG4gICAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayAlIE1hdGguZmxvb3IoZnBzIC8gMikgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckRpcnR5Q2hlY2s/LigpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBhd2FpdCB1c2luZyBfID0gdXNlRnJhbWVQcm90b2NvbChvcHRpb25zLnVzZUlubmVyUHJveHkpO1xuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQpIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgaGVsZCA9IDA7XG4gIGxldCBsYXN0Qml0bWFwOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBzY3JlZW5zaG90czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYmxhbmtTdGF0cyA9IG5ldyBCbGFua1N0YXRzKHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRHJvcFN0YXRzKGZwcyk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgbWFpbiA9IHdpbi53ZWJDb250ZW50cy5tYWluRnJhbWU7XG4gIGNvbnN0IGlmcmFtZSA9IG1haW4uZnJhbWVzWzBdO1xuICB0cnkge1xuICAgIC8vIENvbXBvc2l0b3IvY2FwdHVyZSBjYWRlbmNlIGNhcCwgTk9UIG91dHB1dCBmcHM7IGZyYW1lcyBhcmUgZGFtYWdlLWRyaXZlbiBwZXIgdmlydHVhbCBzdGVwLlxuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoUkVOREVSX0ZQUyk7XG4gICAgYXdhaXQgcGF1c2VWaXJ0dWFsVGltZShjZHApO1xuXG4gICAgZm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IHRvdGFsOyBmcmFtZSsrKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBmcmFtZU1zID0gKGZyYW1lICsgMSkgKiBmcmFtZUludGVydmFsO1xuXG4gICAgICAvLyBBcm0gYmVmb3JlIGRyYXdTdGVnbyBzbyB0aGUgY29tbWl0IGFjayBjYW4ndCBiZSBtaXNzZWQ7IGJyYW5jaCBjYXRjaCBrZWVwcyBhbiBlYXJseSB0aWNrIGZhaWx1cmUgZnJvbSBvcnBoYW5pbmcgaXQuXG4gICAgICBjb25zdCBzd2FwcGVkID0gd2FpdFN0ZWdvVGljayh3aW4ud2ViQ29udGVudHMpO1xuICAgICAgc3dhcHBlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAvLyBJbmRlcGVuZGVudCB0YXJnZXRzIChpZnJhbWUgY2xvY2sgdnMgbWFpbi1mcmFtZSBzdGVnbyBjYW52YXMpOiBvbmUgY29uY3VycmVudCBob3AgaW5zdGVhZCBvZiB0d28gc2VyaWFsIG9uZXMuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGljayh7IGZyYW1lOiBpZnJhbWUsIHRpbWVzdGFtcE1zOiBmcmFtZU1zLCBzaWduYWwgfSksIGRyYXdTdGVnbyh3aW4ud2ViQ29udGVudHMsIGZyYW1lTXMpXSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCksIHN3YXBwZWRdKTtcbiAgICAgIGNvbnN0IHBhaW50ZWQgPSBhd2FpdCBwYWludCh7IHNvdXJjZSwgZnBzLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIGlmIChwYWludGVkKSB7XG4gICAgICAgIGhlbGQgPSAwO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbGQrKztcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBiaXRtYXAgPSBwYWludGVkID8/IGxhc3RCaXRtYXA7XG4gICAgICBpZiAoIWJpdG1hcCB8fCBoZWxkID49IGZwcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyIGV4YXVzdGVkIEAgJHtmcmFtZU1zfWApO1xuICAgICAgfVxuICAgICAgbGFzdEJpdG1hcCA9IGJpdG1hcDtcbiAgICAgIHRha2VyLmNhcHR1cmUoZnJhbWVNcywgYml0bWFwKTtcbiAgICAgIGJsYW5rU3RhdHMuc2FtcGxlKGJpdG1hcCk7XG4gICAgICAvLyBFbmNvZGUgd2l0aG91dCBhd2FpdGluZyAobGltaXRlciBzZXJpYWxpemVzKSwgc28gaXQgb3ZlcmxhcHMgdGhlIG5leHQgZnJhbWUncyBDRFAvcGFpbnQgc2V0dXAuXG4gICAgICBwaXBlbGluZS5lbmNvZGVCR1JBKGJpdG1hcCkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICAgICAgd3JpdHRlbisrO1xuICAgICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICAgIHRocm93IGVuY29kZUVycm9yO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGF3YWl0IHBpcGVsaW5lLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RCaXRtYXApO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3I7XG4gIH1cbiAgaWYgKHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmxhbmsgPSBibGFua1N0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGJsYW5rID49IEJMQU5LX1dBUk5fUkFUSU8pIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBibGFuay1mcmFtZSByYXRpbyAke01hdGgucm91bmQoYmxhbmsgKiAxMDApfSUg4oCUIHBvc3NpYmxlIHdoaXRlL2JsYW5rIHNjcmVlbmApO1xuICAgIH1cbiAgICBjb25zdCB7IGphbmsgfSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChqYW5rID49IEpBTktfV0FSTl9TQ09SRSkge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGphbmsgc2NvcmUgJHtqYW5rLnRvRml4ZWQoMil9IOKAlCBmcmFtZXMgaGVsZCBwYXN0IHBhaW50IHRpbWVvdXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBqYW5rLCBzY3JlZW5zaG90cyB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgTWVudSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiLi9iYXNlL2NyYXNoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IHR5cGUgSXBjTXNnLCBJcGNNc2dUeXBlLCBJcGNXcml0ZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxucHJvY2Vzcy5lbnZbXCJFTEVDVFJPTl9ESVNBQkxFX1NFQ1VSSVRZX1dBUk5JTkdTXCJdID0gXCIxXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuY29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbmxldCBleGl0aW5nID0gZmFsc2U7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5NZW51LnNldEFwcGxpY2F0aW9uTWVudShudWxsKTtcbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5hcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG5hcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcbmFwcC5vbihcIndpbGwtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxub2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IGN0cmwuYWJvcnQoXCJkaXNjb25uZWN0XCIpKTtcbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgaWYgKG1zZy50eXBlID09PSBJcGNNc2dUeXBlLkNhbmNlbCkge1xuICAgIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG4gIH1cbn0pO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJhcHBcIixcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dCBvZiBvcHRpb25zLm91dEZpbGVzKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGN0cmwuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY3Rpb24oe1xuICAgICAgICBzb3VyY2UsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHNpZ25hbDogY3RybC5zaWduYWwsXG4gICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgb25Db25zb2xlOiAobCwgbSkgPT4gaXBjLndyaXRlQ29uc29sZShsLCBtKSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGl0aW5nID0gdHJ1ZTtcbiAgICAgIGFwcC5leGl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNGUzYWY2OGI4MmM1ZjlmYS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInBhcnNlQXJyYXkiLCJpdGVtIiwicyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBQcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEVTIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJhYm9ydGFibGUiLCJvbkFib3J0IiwicGVyaW9kaWNhbCIsImNhbGxiYWNrIiwidG9rZW4iLCJjbG9zZWQiLCJ0aWNrIiwiY291bnQiLCJuZXh0IiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsInBhdXNlVmlydHVhbFRpbWUiLCJyZWJ1aWxkRHJhd2FibGUiLCJ3ZWIiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiYnl0ZXMiLCJTY3JlZW5zaG90VGFrZXIiLCJfcyIsImRpciIsInNlYyIsImluZGV4IiwiY3VycmVudFRpbWVNcyIsImZpbmFsQmdyYSIsIm5hdGl2ZUltYWdlIiwid3JpdGVGaWxlIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJXT1JMRF9BUkciLCJBVURJT19BUkciLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwidGFyZ2V0cyIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwiaXNQcm94eVRhcmdldCIsIlVSTCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJzdHViTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJfcGF0aCIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsIldPUkxEX1NDUklQVFMiLCJwaWNrV29ybGRTY3JpcHQiLCJyZW5kZXJlciIsIm1vZGUiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibGFuayIsImphbmsiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsImV4cHIiLCJ0aWNrRXYiLCJSV19USU1FT1VUX1VTIiwib3BlbklucHV0IiwiRGVtdXhlciIsImRlY29kZUZyYW1lcyIsIm1ldGEiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJmaWx0ZXIiLCJGaWx0ZXJBUEkiLCJfZnJhbWUiLCJwYWNrUmdiYSIsInJvdyIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJpZHgiLCJoaXQiLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImF0IiwiZmxvb3IiLCJ0YiIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJlbmNvZGVTdHViV2VibSIsInRtcGRpciIsInJhbmRvbUJ5dGVzIiwic3R1YiIsIlN0dWJGcmFtZSIsInJlYWRGaWxlIiwicm0iLCJsdW1hIiwiY2hyb21hIiwiRnJhbWVTZXJ2ZXIiLCJfdXNlSW5uZXJQcm94eSIsImlkIiwiZXZlbiIsInJlYWwiLCJzZXNzaW9ucyIsImNyZWF0ZUhhc2giLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJ1c2VGcmFtZVByb3RvY29sIiwiZnMiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJ3ZWJtT2siLCJjb3B5IiwiZmFsbGJhY2siLCJSRU5ERVJfRlBTIiwiY2xlYXJEaXJ0eUNoZWNrIiwiX2QiLCJzbGl2ZXIiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJoZWxkIiwibGFzdEJpdG1hcCIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZU1zIiwicGFpbnRlZCIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCJdLCJtYXBwaW5ncyI6Iit5RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxHQUFBLENBQ2hCLElBQUksR0FBQSxDQUFJLENBQUEsS0FBQSxFQUFRLFVBQVUsQ0FBQSxDQUFFLENBQUEsQ0FBRSxJQUFBLENBQzdCLFNBQVMsYUFBQSxFQUFpQixR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QUFLLENBQUMsRUFDVCxJQUFBLElBQVN0SixDQUFBQSxDQUFJLEVBQUdBLENBQUFBLENBQUksRUFBQSxDQUFJQSxJQUN0QnNKLENBQUFBLENBQUcsSUFBQSxDQUFLdEosSUFBTSxDQUFBLEVBQUtBLENBQUFBLEdBQU0sQ0FBQyxDQUFBLENBRTVCc0osQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FHVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUtnQyxFQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxTQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsRUFBSSxRQUFRLENBQUEsQ0FFNURoQyxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBRVRBLEVB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QUFBLENBQU0sT0FBU0EsQ0FBQUEsQ0FBTSxPQUFBLEVBQVcsT0FBT3VELENBQUFBLEVBQUssZUFBZSxDQUFBLENBQ3JFLE1BQU1ta0IsQ0FBQUEsQ0FBSSxVQUFBLENBQVd4TixDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBcU4sRUFBQUEsQ0FBVSxJQUFBLENBQ1YvbEIsYUFBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cblxuLy8gQ29tbWEtc2VwYXJhdGVkIHN0cmluZyDihpIgYXJyYXkgdmlhIGEgcGVyLWl0ZW0gcGFyc2VyOyBlbXB0eS9ibGFuayDihpIgW10uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJheTxUPihpdGVtOiAoeDogdW5rbm93bikgPT4gVCk6ICh4OiB1bmtub3duKSA9PiBUW10ge1xuICByZXR1cm4gKHgpID0+IHtcbiAgICBpZiAodHlwZW9mIHggIT09IFwic3RyaW5nXCIgfHwgeC50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHguc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gaXRlbShzLnRyaW0oKSkpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSB7XG4gICAgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIH0gZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIHtcbiAgICBsb2dnZXIud2Fybihtc2cpO1xuICB9XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgY3Jhc2hSZXBvcnRlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltDcmFzaF1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCkge1xuICAvLyBhcHBEYXRhIChub3QgdGhlIHBlci1ydW4gdXNlci1kYXRhLWRpcikgc28gZXZlcnkgcHVwIGFwcCdzIGR1bXBzIGFjY3VtdWxhdGUgaW4gb25lIHNoYXJlZCwgcGVyc2lzdGVudCBkaXIuXG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwiYXBwRGF0YVwiKSwgXCJwdXAtcmVjb3JkZXJcIiwgXCJjcmFzaGVzXCIpO1xuICBta2RpclN5bmMoZHVtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGFwcC5zZXRQYXRoKFwiY3Jhc2hEdW1wc1wiLCBkdW1wRGlyKTtcbiAgY3Jhc2hSZXBvcnRlci5zdGFydCh7XG4gICAgcHJvZHVjdE5hbWU6IFwicHVwLXJlY29yZGVyXCIsXG4gICAgdXBsb2FkVG9TZXJ2ZXI6IGZhbHNlLFxuICAgIGNvbXByZXNzOiBmYWxzZSxcbiAgICBpZ25vcmVTeXN0ZW1DcmFzaEhhbmRsZXI6IHRydWUsXG4gIH0pO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcInNldCBkdW1wIHRvXCIsIGR1bXBEaXIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEEgZXh0ZW5kcyB1bmtub3duW10sIFIsIEQ+KGZuOiAoLi4uYXJnczogQSkgPT4gUiwgZGVmYXVsdFZhbHVlOiBEKTogKC4uLmFyZ3M6IEEpID0+IFIgfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpIGFzIFIgfCBEO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zLCBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgfVxuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHtcbiAgICAgICAgdHJlZUtpbGwocGlkLCBcIlNJR0tJTExcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJTkRPV19USU1FT1VUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRVMgPSBbXCJvdXQvaHRtbC5tcDRcIiwgXCJvdXQvaHRtbC53ZWJtXCJdO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKFwiT3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICBkaXNhYmxlV2ViU2VjdXJpdHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRHJvcCB0aGUgc2FtZS1vcmlnaW4gd2FsbDsgcmVxdWlyZWQgdG8gcmVjb3JkIGEgbG9jYWwgZmlsZVwiKSxcbiAgaWdub3JlQ2VydGlmaWNhdGVFcnJvcnM6IHpcbiAgICAuYm9vbGVhbigpXG4gICAgLmRlc2NyaWJlKFwiUmVjb3JkIG92ZXIgVExTIHRoZSBwbGF0Zm9ybSByZWplY3RzLCBlLmcuIGEgc2VsZi1zaWduZWQgaW50cmFuZXQgaG9zdFwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG4gIHdpbmRvd1RpbWVvdXQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJXaW5kb3cgbG9hZCB0aW1lb3V0IGluIHNlY29uZHNcIiksXG4gIHNjcmVlbnNob3RzOiB6LmFycmF5KHoubnVtYmVyKCkpLmRlc2NyaWJlKFwiU2Vjb25kIG1hcmtzIHRvIGR1bXAgZnJhbWUgYml0bWFwcyBhcyBQTkdcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIHJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgYmxhbms6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBzY3JlZW5zaG90czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlczogREVGQVVMVF9PVVRfRklMRVMsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IGZhbHNlLFxuICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgZGlzYWJsZUdwdTogZmFsc2UsXG4gIGRpc2FibGVId0NvZGVjOiBmYWxzZSxcbiAgZGlzYWJsZVdlYlNlY3VyaXR5OiBmYWxzZSxcbiAgaWdub3JlQ2VydGlmaWNhdGVFcnJvcnM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG4gIHdpbmRvd1RpbWVvdXQ6IERFRkFVTFRfV0lORE9XX1RJTUVPVVQsXG4gIHNjcmVlbnNob3RzOiBbXSxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyByZWFscGF0aFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VBcnJheSwgcGFyc2VOdW1iZXIsIHBhcnNlU3RyaW5nIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJPcHRpb25zLCByZW5kZXJTY2hlbWEgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuLy8gU2NoZW1lZCBVUklzIHBhc3MgdGhyb3VnaDsgYmFyZSBwYXRocyBnZXQgY2Fub25pY2FsaXplZCBhbmQgd3JhcHBlZCBhcyBmaWxlOi8vLlxuZnVuY3Rpb24gbm9ybWFsaXplU291cmNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzLmluY2x1ZGVzKFwiOi8vXCIpIHx8IHMuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgbGV0IGFiczogc3RyaW5nO1xuICB0cnkge1xuICAgIGFicyA9IHJlYWxwYXRoU3luYyhzKTtcbiAgfSBjYXRjaCB7XG4gICAgYWJzID0gcmVzb2x2ZShzKTtcbiAgfVxuICByZXR1cm4gYGZpbGU6Ly8ke2Fic31gO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJ1bjogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShvcHRpb25zOiBDTElPcHRpb25zKSB7XG4gIGNvbnN0IHNoYXBlID0gcmVuZGVyU2NoZW1hLnNoYXBlO1xuICBjb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBkYXRhOiBVUkksIG9yIGZpbGVzeXN0ZW0gcGF0aFwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItUywgLS1zY3JlZW5zaG90cyA8c2Vjb25kcz5cIiwgc2hhcGUuc2NyZWVuc2hvdHMuZGVzY3JpcHRpb24sIFwiXCIpXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRocz5cIiwgc2hhcGUub3V0RmlsZXMuZGVzY3JpcHRpb24sIGQub3V0RmlsZXMuam9pbihcIixcIikpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLXdlYi1zZWN1cml0eVwiLCBzaGFwZS5kaXNhYmxlV2ViU2VjdXJpdHkuZGVzY3JpcHRpb24sIGQuZGlzYWJsZVdlYlNlY3VyaXR5KVxuICAgIC5vcHRpb24oXCItLWlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnNcIiwgc2hhcGUuaWdub3JlQ2VydGlmaWNhdGVFcnJvcnMuZGVzY3JpcHRpb24sIGQuaWdub3JlQ2VydGlmaWNhdGVFcnJvcnMpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRvbGVyYW50XCIsIHNoYXBlLndpbmRvd1RvbGVyYW50LmRlc2NyaXB0aW9uLCBkLndpbmRvd1RvbGVyYW50KVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10aW1lb3V0IDxudW1iZXI+XCIsIHNoYXBlLndpbmRvd1RpbWVvdXQuZGVzY3JpcHRpb24sIGAke2Qud2luZG93VGltZW91dH1gKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihub3JtYWxpemVTb3VyY2Uoc291cmNlKSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZXM6IHBhcnNlQXJyYXkocGFyc2VTdHJpbmcpKG9wdHMub3V0RmlsZSksXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgICAgICAgIGRldGVybWluaXN0aWM6IG9wdHMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgICAgICAgZGlzYWJsZUdwdTogb3B0cy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICAgICAgICBkaXNhYmxlSHdDb2RlYzogb3B0cy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgICAgICAgIGRpc2FibGVXZWJTZWN1cml0eTogb3B0cy5kaXNhYmxlV2ViU2VjdXJpdHkgPz8gZC5kaXNhYmxlV2ViU2VjdXJpdHksXG4gICAgICAgICAgaWdub3JlQ2VydGlmaWNhdGVFcnJvcnM6IG9wdHMuaWdub3JlQ2VydGlmaWNhdGVFcnJvcnMgPz8gZC5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICAgIHdpbmRvd1RpbWVvdXQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpbmRvd1RpbWVvdXQpKG9wdHMud2luZG93VGltZW91dCksXG4gICAgICAgICAgc2NyZWVuc2hvdHM6IHBhcnNlQXJyYXkocGFyc2VOdW1iZXIpKG9wdHMuc2NyZWVuc2hvdHMpLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuXG5leHBvcnQgZW51bSBJcGNNc2dUeXBlIHtcbiAgLy8gY2hpbGQg4oaSIHBhcmVudFxuICBDb25zb2xlID0gXCJjb25zb2xlXCIsXG4gIFByb2dyZXNzID0gXCJwcm9ncmVzc1wiLFxuICBEb25lID0gXCJkb25lXCIsXG4gIEVycm9yID0gXCJlcnJvclwiLFxuICAvLyBwYXJlbnQg4oaSIGNoaWxkXG4gIENhbmNlbCA9IFwiY2FuY2VsXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc29sZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZTtcbiAgbGV2ZWw6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbE1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ2FuY2VsO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgYmxhbms6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBzY3JlZW5zaG90czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbmVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkRvbmU7XG4gIHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5FcnJvcjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSXBjTXNnID0gQ29uc29sZU1zZyB8IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnIHwgQ2FuY2VsTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIGNvbnNvbGU6IFtsZXZlbDogc3RyaW5nLCBtc2c6IHN0cmluZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlQ29uc29sZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGUsIGxldmVsLCBtZXNzYWdlIH0pO1xuICB9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FcnJvciwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Eb25lLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogSXBjTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5zZW5kKG1zZywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXBjUmVhZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPElwY0V2ZW50cz4ge1xuICBjb25zdHJ1Y3RvcihjaGlsZDogQ2hpbGRQcm9jZXNzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjaGlsZC5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICAgICAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkNvbnNvbGU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJjb25zb2xlXCIsIG1zZy5sZXZlbCwgbXNnLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Qcm9ncmVzczoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIG1zZy52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkRvbmU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJkb25lXCIsIG1zZy5wYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRXJyb3I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IobXNnLmVycm9yKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjaGlsZC5vbmNlKFwiZXhpdFwiLCAoYykgPT4gdGhpcy5lbWl0KFwiY2xvc2VcIiwgYykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuLy8gUmVqZWN0IGFzIHNvb24gYXMgYHNpZ25hbGAgYWJvcnRzLCBlbHNlIHNldHRsZSB3aXRoIGBwYDsgbm8tb3AgcGFzc3Rocm91Z2ggd2hlbiBubyBzaWduYWwuXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRhYmxlPFQ+KHA6IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KSk7XG4gIH0pO1xufVxuXG4vLyBDYWxsYmFjayBtYXkgcmV0dXJuIHRoZSBuZXh0IGludGVydmFsIChtcykgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZm9yIHRoZSBmb2xsb3dpbmcgdGljay5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgY29uc3QgbmV4dCA9IGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG5leHQgPz8gbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSwgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmNvbnN0IENEUF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZW5kKGNkcDogRGVidWdnZXIsIG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBvYmplY3QpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGNkcC5zZW5kQ29tbWFuZChtZXRob2QsIHBhcmFtcyksIENEUF9USU1FT1VUX01TLCBgY2RwLiR7bWV0aG9kfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbEluKGNkcDogRGVidWdnZXIsIGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoc2VuZChjZHAsIFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7IGV4cHJlc3Npb24gfSksIENEUF9USU1FT1VUX01TLCBcImV2YWxJblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgYWR2YW5jZVZpcnR1YWxUaW1lIHRpbWVkIG91dCBhZnRlciAke0NEUF9USU1FT1VUX01TfW1zYCkpO1xuICAgIH0sIENEUF9USU1FT1VUX01TKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoXzogRWxlY3Ryb24uRXZlbnQsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09PSBcIkVtdWxhdGlvbi52aXJ0dWFsVGltZUJ1ZGdldEV4cGlyZWRcIikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjZHAub24oXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIC8vIE5vIHN0YXJ2YXRpb24gY2FwICh3b3VsZCBza2lwIHBlbmRpbmcgd29yayBub24tZGV0ZXJtaW5pc3RpY2FsbHkpOyBjYXB0dXJlIHN0YXJ0cyBwb3N0IGRpZC1zdG9wLWxvYWRpbmcsIGFuZCBDRFBfVElNRU9VVF9NUyB0dXJucyBhIHJlYWwgc3RhbGwgaW50byBhIGZhaWxlZCByZW5kZXIuXG4gICAgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHtcbiAgICAgIHBvbGljeTogXCJhZHZhbmNlXCIsXG4gICAgICBidWRnZXQsXG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhdXNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYnVpbGREcmF3YWJsZSh3ZWI6IFdlYkNvbnRlbnRzLCBzaXplOiBTaXplKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgY2RwID0gd2ViLmRlYnVnZ2VyO1xuICAgIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5jbGVhckRldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7fSk7XG4gICAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7XG4gICAgICAuLi5zaXplLFxuICAgICAgZGV2aWNlU2NhbGVGYWN0b3I6IDEsXG4gICAgICBtb2JpbGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHdlYi5pbnZhbGlkYXRlKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFN0aCBsaWtlIHRlYXJkb3duIGRldGFjaCByZWplY3RzIGluLWZsaWdodCBDRFAgc2VuZHM7IGEgbG9zdCByZXBhaW50IGtpY2sgaXMgaGFybWxlc3MuXG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUsIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBldmFsSW4gfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgV0lEVEggPSAke3dpZHRofTtcbiAgICAgIGNvbnN0IE1BUktFUl9XSURUSCA9ICR7RlJBTUVfU1lOQ19NQVJLRVJfV0lEVEh9O1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZWdvJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHJhZklkID0gbnVsbDtcblxuICAgICAgZnVuY3Rpb24gZW5jb2RlVGltZXN0YW1wKHRpbWVzdGFtcE1zKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEoV0lEVEgsIDEpO1xuICAgICAgICBjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG5cbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVJLRVJfV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGJpdCA9ICh0aW1lc3RhbXBJbnQgPj4+IChNQVJLRVJfV0lEVEggLSAxIC0gaSkpICYgMTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGJpdCA/IDI1NSA6IDA7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IE1BUktFUl9XSURUSDsgaSA8IFdJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICAgIHdpbmRvdy5fX3B1cF9zdGVnb190aWNrX18oKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChtcyk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfc3RvcF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdGVnbyhiaXRtYXA6IEJ1ZmZlciwgc2l6ZTogU2l6ZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgaWYgKHdpZHRoIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggfHwgaGVpZ2h0IDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXJrZXJSb3cgPSBoZWlnaHQgLSAxO1xuXG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICBjb25zdCBwaXhlbElkeCA9IChtYXJrZXJSb3cgKiB3aWR0aCArIGkpICogNDtcbiAgICBjb25zdCByID0gYml0bWFwW3BpeGVsSWR4XSA/PyAwO1xuICAgIGNvbnN0IGJpdCA9IHIgPiAxMjcgPyAxIDogMDtcbiAgICB0aW1lc3RhbXAgPSAodGltZXN0YW1wIDw8IDEpIHwgYml0O1xuICB9XG5cbiAgdGltZXN0YW1wID0gdGltZXN0YW1wID4+PiAwO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgfHwgdGltZXN0YW1wIDwgMCB8fCB0aW1lc3RhbXAgPiAxZTcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0YXJ0X3N0ZWdvX18oKWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdG9wX3N0ZWdvX18oKWApO1xufVxuXG4vLyBQYWludHMgdGhlIHN0ZWdvIHJvdyBmb3IgYGV4cGVjdGVkYCBtcyBzeW5jaHJvbm91c2x5OyB0aGUgZGFtYWdlIHJpZGVzIG91dCBvbiB0aGUgbmV4dCBjb21wb3NpdGVkIGZyYW1lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYXdTdGVnbyh3YzogV2ViQ29udGVudHMsIGV4cGVjdGVkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXZhbEluKHdjLmRlYnVnZ2VyLCBgX19wdXBfZHJhd19zdGVnb19fKCR7ZXhwZWN0ZWR9KWApO1xufVxuXG4vLyBSZXNvbHZlcyB3aGVuIHRoZSByZW5kZXJlciBjb21taXR0ZWQgdGhlIHN0ZWdvIHJvdzsgYXJtIEJFRk9SRSBkcmF3U3RlZ28gdG8gYXZvaWQgbWlzc2luZyB0aGUgYWNrLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRTdGVnb1RpY2sod2M6IFdlYkNvbnRlbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN3YXBwZWQgPSBuZXcgUHJvbWlzZSgocikgPT4gd2MuaXBjLm9uY2UoU1RFR09fVElDS19DSEFOTkVMLCByKSk7XG4gIGF3YWl0IHdpdGhUaW1lb3V0KHN3YXBwZWQsIDVfMDAwLCBcInN0ZWdvIHRpY2tcIik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFN0ZWdvSFRNTCB9IGZyb20gXCIuL3N0ZWdvXCI7XG5cbmNvbnN0IFBVUF9TQ0hFTUUgPSBcInB1cFwiO1xuY29uc3QgRlJBTUVfU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuLy8gcmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5IGN1c3RvbSBzY2hlbWUgaW4gdGhpcyBvbmUgbGlzdCBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgLy8gQSBwYWdlJ3Mgb3duIENTUCB3b3VsZCBvdGhlcndpc2UgcmVmdXNlIHRoZSB2aWRlbyBob29rJ3MgZmV0Y2ggb2YgcHVwLWZyYW1lOi8vIHN0dWJzIChjb25uZWN0LXNyYykuXG4gIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgc3VwcG9ydEZldGNoQVBJOiB0cnVlLFxuICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgc3RyZWFtOiB0cnVlLFxuICBjb2RlQ2FjaGU6IHRydWUsXG59IGFzIGNvbnN0O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGJlZm9yZSBhcHAgaXMgcmVhZHkuXG5wcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQoW1xuICB7IHNjaGVtZTogUFVQX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG4gIHsgc2NoZW1lOiBGUkFNRV9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjLnJlcGxhY2UoXCJodHRwOi8vXCIsIFwiaHR0cHM6Ly9cIikpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHtcbiAgdHlwZSBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRnJhbWUsXG4gIHR5cGUgSGFyZHdhcmVGcmFtZXNDb250ZXh0LFxuICBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmV4cG9ydCBjb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgY3R4IGlmIGFueSBzZXR0ZXIvb3BlbjIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBzdGFjay51c2UoY3R4KTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSB7XG4gICAgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgfVxuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgfVxuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkge1xuICAgIGN0eC5od0ZyYW1lc0N0eCA9IG9wdHMuaHdGcmFtZXNDdHg7XG4gIH1cbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkge1xuICAgIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIH1cbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGZyYW1lIGlmIGdldEJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShmcmFtZSk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikge1xuICAgICAgICBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICAgIH1cbiAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgY3R4IGlmIG9wZW4yIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBzdGFjay51c2UocG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIHR5cGUgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICB9XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyBjdHggaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSB7XG4gICAgICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZnJlZXMgdGhlIGdyYXBoIGlmIGZpbHRlciBzZXR1cCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIHN0YWNrLnVzZShncmFwaCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICB9XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzcmNbaV0hKSkge1xuICAgICAgICBzcmNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIHtcbiAgICAgIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgfVxuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgZmxhZyh2YWw6IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICB0aGlzLmJpdHMucHVzaCh2YWwgPyAxIDogMCk7XG4gIH1cbiAgdWUodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCB2ID0gdmFsICsgMTtcbiAgICBjb25zdCBsZW4gPSAzMiAtIE1hdGguY2x6MzIodik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKDApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gICAgfVxuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChwYWQpO1xuICAgIH1cbiAgfVxuICBjb3B5KHNyYzogbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGxlbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goc3JjW3N0YXJ0ICsgaV0hKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHtcbiAgICAgICAgdGhpcy5fYml0cy5wdXNoKChkYXRhW2ldISA+PiBiKSAmIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgYml0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0cztcbiAgfVxuICByZWFkKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgfVxuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuLy8gSEVWQyBOQUwgdW5pdCB0eXBlcyAoVC1SRUMtSC4yNjUgVGFibGUgNy0xKVxuZXhwb3J0IGNvbnN0IE5BTF9CTEFfV19MUCA9IDE2O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfV19SQURMID0gMTk7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9OX0xQID0gMjA7XG5leHBvcnQgY29uc3QgTkFMX1JTVl9JUkFQX1ZDTDIzID0gMjM7XG5leHBvcnQgY29uc3QgTkFMX1ZQUyA9IDMyO1xuZXhwb3J0IGNvbnN0IE5BTF9TUFMgPSAzMztcbmV4cG9ydCBjb25zdCBOQUxfUFBTID0gMzQ7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9QUkVGSVggPSAzOTtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1NVRkZJWCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJld3JpdGUgbmFsX3VuaXRfdHlwZSBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxUeXBlKG5hbDogQnVmZmVyLCBuZXdUeXBlOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IGxheWVySWQsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIobmV3VHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIENvbmZvcm0gTlZFTkMgb3V0cHV0IHRvIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBiaXRzdHJlYW07XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIH0gZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICAgIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCAoc3BzX2ZsYWc9MCk7IHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBpbnRlciBwcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgfVxuICAgIGJyLnJlYWQoMSk7IC8vIGRlbHRhX3Jwc19zaWduXG4gICAgYnIucmVhZFVlKCk7IC8vIGFic19kZWx0YV9ycHNfbWludXMxXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPD0gbnVtRGVsdGFQb2NzU2V0MDsgaisrKSB7XG4gICAgICBjb25zdCB1c2VkID0gYnIucmVhZCgxKTtcbiAgICAgIGlmICghdXNlZCkge1xuICAgICAgICBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIH1cbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHtcbiAgICAgIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICB9IGVsc2UgaWYgKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzID4gMSkge1xuICAgICAgYnIucmVhZChNYXRoLmNlaWwoTWF0aC5sb2cyKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzKSkpO1xuICAgIH1cbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICAgIH1cbiAgfVxuICBpZiAoY2ZnLnNhb0VuYWJsZWQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fbHVtYV9mbGFnXG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2Nocm9tYV9mbGFnXG4gIH1cbiAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9QIHx8IHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAob3ZlcnJpZGVGbGFnKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgICBici5yZWFkVWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgfVxuICAgIGlmIChjZmcuY2FiYWNJbml0UHJlc2VudCkge1xuICAgICAgYnIucmVhZCgxKTsgLy8gY2FiYWNfaW5pdF9mbGFnXG4gICAgfVxuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICB9XG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIH1cbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIH1cblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcbiAgfVxuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICB9XG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICB9XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIH1cbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkge1xuICAgIHJldHVybiB2cHNEYXRhO1xuICB9XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHJld3JpdGVBbHBoYVBwcywgcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIsIHJld3JpdGVBbHBoYVNwcyB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgZW5jb2RlTmFsSGVhZGVyLFxuICBOQUxfUFBTLFxuICBOQUxfU0VJX1BSRUZJWCxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgdHlwZSBOYWxVbml0LFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG4vLyBCR1JBIGFscGhhIOKGkiBZIHBsYW5lIG9mIHBhY2tlZCBZVVY0MjBQIChjYWxsZXIgcHJlLWZpbGxzIFVWPTEyOCk7IFVpbnQzMiBmYXN0IHBhdGg6IEJHUkEgTEUgdTMyID4+PiAyNCA9IEEgYnl0ZS5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lOiBGcmFtZSwgYnVmOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgaWYgKCFzcmMgfHwgIXNyY0xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZXh0cmFjdEFscGhhOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgfVxuICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgaWYgKHNyYy5ieXRlT2Zmc2V0ICUgNCA9PT0gMCAmJiBzcmNMcyA9PT0gdyAqIDQpIHtcbiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgeVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNpemU7IGkrKykge1xuICAgICAgYnVmW2ldID0gc3JjMzJbaV0hID4+PiAyNDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGNvbnN0IHJvd0Jhc2UgPSB5ICogc3JjTHMgKyAzO1xuICAgICAgY29uc3QgZHN0QmFzZSA9IHkgKiB3O1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcbiAgICAgICAgYnVmW2RzdEJhc2UgKyB4XSA9IHNyY1tyb3dCYXNlICsgeCAqIDRdITtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEFwcGxlIEhFVkMgQWxwaGEgUHJvZmlsZTogYWxwaGEgU1BTIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZD0xLCBhbHBoYSBQUFMgcGljK3NlcSBpZD0xLlxuZnVuY3Rpb24gcmV3cml0ZUFscGhhUGFyYW1TZXQodHlwZTogbnVtYmVyLCBkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAodHlwZSA9PT0gTkFMX1NQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFTcHMoZGF0YSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09IE5BTF9QUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhUHBzKGRhdGEpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IE5BTF9WUFMgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY29uc3QgYURhdGEgPSByZXdyaXRlQWxwaGFQYXJhbVNldChuYWwudHlwZSwgYWxwaGFOYWwuZGF0YSk7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYURhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaHVua3MucHVzaChidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bG9hZFR5cGUgPSAxNjU7XG4gIGNvbnN0IHBheWxvYWRTaXplID0gNDtcbiAgY29uc3QgW2gwLCBoMV0gPSBlbmNvZGVOYWxIZWFkZXIoTkFMX1NFSV9QUkVGSVgsIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICB3cml0ZUJpdHMoMCwgMSk7XG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gYGJhc2U9JHt0aGlzLl9iYXNlUXVldWUubGVuZ3RofSwgYWxwaGE9JHt0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aH0gdW5wYWlyZWRgO1xuICB9XG5cbiAgLy8gRUFHQUlOL0VPRiA9IG5vcm1hbCBzdG9wOyBhbnkgb3RoZXIgbmVnYXRpdmUgaXMgYSByZWFsIGZhdWx0LCBub3QgXCJkcmFpbmVkXCIuXG4gIHByaXZhdGUgYXN5bmMgcmVjZWl2ZUFsbChjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxQZW5kaW5nUGFja2V0W10+IHtcbiAgICBjb25zdCBvdXQ6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgaWYgKHJldCA+PSAwKSB7XG4gICAgICAgIG91dC5wdXNoKHRoaXMuc25hcHNob3QocGt0KSk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXQgPT09IEFWRVJST1JfRUFHQUlOIHx8IHJldCA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBzbGljZS1oZWFkZXIgcGFyc2VyIGZsYWdzOyB0aHJvd3MgaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkge1xuICAgIGZvciAobGV0IGkgPSBtYXhTdWJMYXllcnM7IGkgPCA4OyBpKyspIHtcbiAgICAgIGJyLnJlYWQoMik7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBpZiAoc3ViUHJvZmlsZVByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCArIDMyICsgNDgpO1xuICAgIH1cbiAgICBpZiAoc3ViTGV2ZWxQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSB7XG4gICAgZmFpbChcInNwc19tYXhfc3ViX2xheWVyc19taW51czFcIiwgbWF4U3ViTGF5ZXJzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSB7XG4gICAgZmFpbChcImNocm9tYV9mb3JtYXRfaWRjXCIsIGNocm9tYUZvcm1hdCwgXCLiiaAzXCIpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJzY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBhbXBfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHNhb0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJwY21fZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBudW1TdFJwcyA9IGJyLnJlYWRVZSgpO1xuICBpZiAobnVtU3RScHMgPiAxKSB7XG4gICAgZmFpbChcIm51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c1wiLCBudW1TdFJwcywgXCLiiaQxXCIpO1xuICB9XG4gIGxldCBudW1EZWx0YVBvY3NTZXQwID0gMDtcbiAgaWYgKG51bVN0UnBzID09PSAxKSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgbnVtRGVsdGFQb2NzU2V0MCA9IG51bU5lZyArIG51bVBvcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSB7XG4gICAgZmFpbChcImxvbmdfdGVybV9yZWZfcGljc19wcmVzZW50X2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7XG4gICAgbG9nMk1heFBvY0xzYixcbiAgICBzYW9FbmFibGVkLFxuICAgIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLFxuICAgIG51bURlbHRhUG9jc1NldDAsXG4gICAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCxcbiAgICBzcHNUZW1wb3JhbE12cEVuYWJsZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHBzKHBwc1Jic3A6IEJ1ZmZlcik6IHsgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjsgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihwcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19waWNfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkVWUoKTsgLy8gcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWQoMSk7IC8vIGRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnXG4gIGNvbnN0IG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzID0gYnIucmVhZCgzKTtcbiAgaWYgKG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzICE9PSAwKSB7XG4gICAgZmFpbChcIm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0c1wiLCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNpZ25fZGF0YV9oaWRpbmdfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IGNhYmFjSW5pdFByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIGluaXRfcXBfbWludXMyNiAoc2UsIGJ1dCB1ZSBwYXJzZXIgZmluZSB0byBhZHZhbmNlKVxuICBici5yZWFkKDEpOyAvLyBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7IC8vIGN1X3FwX2RlbHRhX2VuYWJsZWQg4oaSIGRpZmZfY3VfcXBfZGVsdGFfZGVwdGhcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NiX3FwX29mZnNldFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NyX3FwX29mZnNldFxuICBici5yZWFkKDEpOyAvLyBwcHNfc2xpY2VfY2hyb21hX3FwX29mZnNldHNfcHJlc2VudF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9iaXByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc3F1YW50X2J5cGFzc19lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwidGlsZXNfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGNvbnN0IGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCA9IGJyLnJlYWQoMSk7XG4gIGxldCBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gZmFsc2U7XG4gIGlmIChkZWJsb2NraW5nQ29udHJvbFByZXNlbnQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWdcbiAgICBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gYnIucmVhZCgxKSA9PT0gMTsgLy8gcHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWdcbiAgICBpZiAoIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZFVlKCk7IC8vIGJldGEvdGMgb2Zmc2V0cyAoc2UgdmlhIHVlIGFkdmFuY2UpXG4gICAgfVxuICB9XG4gIC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIHByZXNlbnQgaWZmIFBQUyBhY3Jvc3Mtc2xpY2VzIGVuYWJsZWQgJiYgIXNsaWNlX2RlYmxvY2tpbmdfZGlzYWJsZWQuXG4gIGNvbnN0IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnID0gcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgJiYgIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGU7XG4gIHJldHVybiB7IGNhYmFjSW5pdFByZXNlbnQsIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhleHRyYWRhdGE6IEJ1ZmZlcik6IE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGV4dHJhZGF0YSk7XG4gIGNvbnN0IHNwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfU1BTKTtcbiAgY29uc3QgcHBzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9QUFMpO1xuICBpZiAoIXNwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBpZiAoIXBwcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgfVxuICBjb25zdCBzID0gcGFyc2VTcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzcHMuZGF0YSkpO1xuICBjb25zdCBwID0gcGFyc2VQcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihwcHMuZGF0YSkpO1xuICByZXR1cm4geyAuLi5zLCAuLi5wIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgRkZfRU5DT0RFUl9IRVZDX05WRU5DLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4uL3ZpZGVvdG9vbGJveFwiO1xuaW1wb3J0IHsgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IER1YWxMYXllck11eCB9IGZyb20gXCIuL2R1YWxfbGF5ZXJfbXV4XCI7XG5pbXBvcnQgeyB0eXBlIE52ZW5jSGV2Y0NvbmZpZywgcGFyc2VOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIE52ZW5jU3RhdGUge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGFscGhhU3dGcmFtZTogRnJhbWU7XG4gIGFscGhhQnVmOiBCdWZmZXI7XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9tdXg6IER1YWxMYXllck11eDtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fbXV4ID0gbmV3IER1YWxMYXllck11eCh7XG4gICAgICBiYXNlQ3R4OiBzLmJhc2VDdHgsXG4gICAgICBhbHBoYUN0eDogcy5hbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IHMuYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0OiBzLmFscGhhUGt0LFxuICAgICAgc3RyZWFtOiBzLnN0cmVhbSxcbiAgICAgIGhldmNDZmc6IHMuaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICAvLyB0aWVyPW1haW4gbWF0Y2hlcyBBcHBsZSBWaWRlb1Rvb2xib3g7IG1hY09TIENocm9tZSByZXF1aXJlcyBNYWluIHRpZXIgZm9yIEhFVkMgYWxwaGEgZGVjb2RlLlxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiwgdGllcjogXCJtYWluXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IChOVkVOQyBjb252ZXJ0cywgbm8gQ1BVIFNXUyk7IHN0YWNrIGZyZWVzIGV2ZXJ5IG5hdGl2ZSBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzLCBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGJhc2VDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKSk7XG4gICAgY29uc3QgYWxwaGFDdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIikpO1xuXG4gICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgfVxuICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgIGNvbnN0IHVuaWZpZWQgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoe1xuICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gICAgLy8gQXBwbGUtVlRCIGNvbXBhdDogcmV3cml0ZSBWUFMrU1BTIFBUTCBiaXRzIHRvIG1hdGNoIHgyNjUvVlRCIG91dHB1dCAodGllcj1NYWluLCBjb21wYXRbMl09MSkuXG4gICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAvLyBZVVY0MjBQIGNocm9tYSBwbGFuZXMgYXJlIGNlaWwody8yKcOXY2VpbChoLzIpOyBmbG9vciB1bmRlcmZsb3dzIG9uIG9kZCBkaW1lbnNpb25zLlxuICAgIGNvbnN0IGNocm9tYVNpemUgPSAoKHdpZHRoICsgMSkgPj4gMSkgKiAoKGhlaWdodCArIDEpID4+IDEpO1xuICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgIGFscGhhQnVmLmZpbGwoMTI4LCB5U2l6ZSk7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3QgYWxwaGFQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVN3RnJhbWUgPSBzdGFjay51c2UobWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCkpO1xuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3QsXG4gICAgICBhbHBoYVBrdCxcbiAgICAgIHN0cmVhbSxcbiAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgIGFscGhhQnVmLFxuICAgICAgaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUsIGFscGhhQnVmIH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgYWxwaGEgcGxhbmUgYmVmb3JlIGJhc2Uuc2VuZEZyYW1lIOKAlCB0aGUgZW5jb2RlciB1bnJlZnMgdGhlIGlucHV0IGZyYW1lLlxuICAgIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWUsIGFscGhhQnVmKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImFscGhhU3cubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUuZnJvbUJ1ZmZlcihhbHBoYUJ1ZiksIFwiYWxwaGFTdy5mcm9tQnVmZmVyXCIpO1xuICAgIGFscGhhU3dGcmFtZS5wdHMgPSBwdHM7XG4gICAgYWxwaGFTd0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYmFzZUN0eCwgXCJiYXNlXCIpO1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmFscGhhQ3R4LCBcImFscGhhXCIpO1xuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gICAgY29uc3QgZGVzeW5jID0gdGhpcy5fbXV4LmRlc3luY0FmdGVyRW9mKCk7XG4gICAgaWYgKGRlc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6ICR7ZGVzeW5jfWApO1xuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgb24gY3JlYXRpb24tb3JkZXIgc2Vzc2lvbiBmcmVlIOKAlCBMSUZPIGRlc3Ryb3kgYXZvaWRzIGl0IChmb3J1bSAvdC8yNjk5NzQpLlxuICAgIGFscGhhQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgLy8gRU9GIGZsdXNoOyBFQUdBSU4vRU9GIHJldHVybnMgYXJlIGJlbmlnbiAoYWxyZWFkeS1kcmFpbmluZyBlbmNvZGVyKS5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRW9mKGN0eDogQ29kZWNDb250ZXh0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9PSBBVkVSUk9SX0VBR0FJTiAmJiByZXQgIT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnNlbmRGcmFtZShudWxsKWApO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgQVZQaXhlbEZvcm1hdCwgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IGNvZGVjTmFtZSwgY29kZWNUYWcsIGNvZGVjT3B0cywgbXV4ZXIsIC4uLnJlc3QgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgY3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIikpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZGlzcG9zZXMgY3R4L3BrdCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIHN0YWNrLnVzZShjdHgpO1xuICAgIGNvbnN0IHBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIHZpZGVvIGVuY29kZXIgaWYgQ29kZWNTdGF0ZS5jcmVhdGUgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgY29uc3QgdmlkZW8gPSBzdGFjay51c2UoXG4gICAgYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgICAgYml0cmF0ZSxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGNvZGVjID0gc3RhY2sudXNlKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4geyB2aWRlbywgY29kZWMsIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBTdHJlYW0ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIC8vICtmYXN0c3RhcnQgcmVsb2NhdGVzIG1vb3YgdG8gZmlsZSBmcm9udCBvbiB3cml0ZVRyYWlsZXIgc28gcGxheWVycyBjYW4gYmVnaW4gcGxheWJhY2sgYmVmb3JlIGZ1bGwgZG93bmxvYWQuXG4gICAgdXNpbmcgb3B0cyA9IERpY3Rpb25hcnkuZnJvbU9iamVjdCh7IG1vdmZsYWdzOiBcIitmYXN0c3RhcnRcIiB9KTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG9wdHMpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZELlxuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFsd2F5cyBmcmVlIHRoZSBuYXRpdmUgY29udGV4dCDigJQgZXZlbiBhIG5ldmVyLW9wZW5lZCBtdXhlciBhbGxvY2F0ZWQgb25lIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkge1xuICAgICAgcmV0dXJuIFwid2VibVwiO1xuICAgIH1cbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIubXA0XCIpIHx8IGxvd2VyLmVuZHNXaXRoKFwiLm1vdlwiKSkge1xuICAgICAgcmV0dXJuIFwibXA0XCI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBtdXhlci9lbmNvZGVycyBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgbXV4ZXIgPSBzdGFjay51c2UobmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSkpO1xuICAgIGNvbnN0IHNldHVwID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIiA/IGF3YWl0IE91dHB1dFNpbmsubXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgT3V0cHV0U2luay53ZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGlmIChzZXR1cC52aWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLnZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmh3VmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5od1ZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmNvZGVjKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuY29kZWMpO1xuICAgIH1cbiAgICAvLyBPbmx5IGEgc2luay1vd25lZCBodyBkZXZpY2UgaXMgb3VycyB0byBmcmVlIGhlcmU7IGEgc2hhcmVkIGRldmljZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS5cbiAgICBpZiAoc2V0dXAub3duc0h3ICYmIHNldHVwLmh3KSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHcpO1xuICAgIH1cbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgT3V0cHV0U2luay5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1ZGlvKSB7XG4gICAgICBzdGFjay51c2UoYXVkaW8pO1xuICAgIH1cbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi5zZXR1cCwgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7XG4gICAgICAgIGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsXG4gICAgICAgIFwiY3B1LXVzZWRcIjogXCI4XCIsXG4gICAgICAgIFwicm93LW10XCI6IFwiMVwiLFxuICAgICAgICB0aHJlYWRzOiBcIjJcIixcbiAgICAgIH0sXG4gICAgICBiaXRyYXRlOiA0XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB2aWRlbyxcbiAgICAgIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSxcbiAgICAgIG93bnNIdzogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGF1ZGlvRm9yKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIC8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbiAgICBjb25zdCBjZmcgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICAgICAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQk9QVVMsXG4gICAgICAgICAgfTtcbiAgICByZXR1cm4gQXVkaW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICAuLi5jZmcsXG4gICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZXMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGRpc3Bvc2Ugc2hhcmVkSHcgKyBhbnkgc2lua3MgYWxyZWFkeSBidWlsdCBpZiBhIGxhdGVyIHNpbmsgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hhcmVkSHcpIHtcbiAgICAgIHN0YWNrLnVzZShzaGFyZWRIdyk7XG4gICAgfVxuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzdGFjay51c2Uoc2luayk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgICAgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZnJvbUJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBmcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDMuXG5cbmNvbnN0IEdSSUQgPSAzMjsgLy8gcmVzb2x1dGlvbi1pbmRlcGVuZGVudCBsYXR0aWNlIGZvciB0aGUgbW9kYWwtY29sb3IgcHJlLXBhc3NcbmNvbnN0IFNUUklERSA9IDQ7IC8vIG1haW4tc2NhbiBzdGVwOyByb3ctc3RhZ2dlcmVkIHNvIGFueSDiiaUxcHggc3RydWN0dXJlIGxhbmRzIG9uIGEgc2FtcGxlIHdpdGhpbiA0IHJvd3NcbmNvbnN0IENPTlRFTlRfREVMVEEgPSA4OyAvLyBtYXggcGVyLWNoYW5uZWwgZGlzdGFuY2UgKDAtMjU1KSBzdGlsbCBjb3VudGVkIGFzIHRoZSBkb21pbmFudCBjb2xvclxuY29uc3QgTUlOX0NPTlRFTlRfU0FNUExFUyA9IDE2OyAvLyByZW5kZXJlZCBmcmFtZXMgYXJlIG5vaXNlLWZyZWUsIHNvIGEgaGFuZGZ1bCBvZiBvZmYtZG9taW5hbnQgc2FtcGxlcyBpcyByZWFsIGNvbnRlbnRcbmV4cG9ydCBjb25zdCBCTEFOS19XQVJOX1JBVElPID0gMC41OyAvLyBibGFuay1mcmFtZSBmcmFjdGlvbiBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmRcblxuLy8gNSBiaXRzIHBlciBjaGFubmVsLCBhbHBoYSBpbmNsdWRlZCDigJQgdHJhbnNwYXJlbnQgc3VyZmFjZXMgY2FycnkgY29udGVudCBpbiBjb3ZlcmFnZSwgbm90IGNvbG9yLlxuZnVuY3Rpb24gcXVhbnRpemUoYmdyYTogQnVmZmVyLCBpOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIChiZ3JhLnJlYWRVSW50OChpKSA+PiAzKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMSkgPj4gMykgPDwgNSkgfFxuICAgICgoYmdyYS5yZWFkVUludDgoaSArIDIpID4+IDMpIDw8IDEwKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMykgPj4gMykgPDwgMTUpXG4gICk7XG59XG5cbi8vIEJ5dGUgb2Zmc2V0IG9mIGEgcGl4ZWwgY2FycnlpbmcgdGhlIGZyYW1lJ3MgZG9taW5hbnQgY29sb3IgKG1vZGUgb3ZlciBhIHNwYXJzZSBsYXR0aWNlKS5cbmZ1bmN0aW9uIG1vZGFsUGl4ZWwoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHN0ZXBYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aWR0aCAvIEdSSUQpKTtcbiAgY29uc3Qgc3RlcFkgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGhlaWdodCAvIEdSSUQpKTtcbiAgY29uc3QgY291bnRzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgY29uc3QgZmlyc3RJZHggPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBsZXQgYmVzdCA9IDA7XG4gIGxldCBiZXN0Q291bnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBzdGVwWSkge1xuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gc3RlcFgpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgY29uc3Qga2V5ID0gcXVhbnRpemUoYmdyYSwgaSk7XG4gICAgICBjb25zdCBjb3VudCA9IChjb3VudHMuZ2V0KGtleSkgPz8gMCkgKyAxO1xuICAgICAgY291bnRzLnNldChrZXksIGNvdW50KTtcbiAgICAgIGlmICghZmlyc3RJZHguaGFzKGtleSkpIHtcbiAgICAgICAgZmlyc3RJZHguc2V0KGtleSwgaSk7XG4gICAgICB9XG4gICAgICBpZiAoY291bnQgPiBiZXN0Q291bnQpIHtcbiAgICAgICAgYmVzdENvdW50ID0gY291bnQ7XG4gICAgICAgIGJlc3QgPSBrZXk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXJzdElkeC5nZXQoYmVzdCkgPz8gMDtcbn1cblxuLy8gQmxhbmsgPSBkb21pbmFudC1jb2xvciBjb3ZlcmFnZTogZmV3ZXIgdGhhbiBNSU5fQ09OVEVOVF9TQU1QTEVTIHNhbXBsZXMgZGV2aWF0ZSBmcm9tIHRoZSBtb2RhbCBjb2xvci5cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rRnJhbWUoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBtID0gbW9kYWxQaXhlbChiZ3JhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgbWIgPSBiZ3JhLnJlYWRVSW50OChtKTtcbiAgY29uc3QgbWcgPSBiZ3JhLnJlYWRVSW50OChtICsgMSk7XG4gIGNvbnN0IG1yID0gYmdyYS5yZWFkVUludDgobSArIDIpO1xuICBjb25zdCBtYSA9IGJncmEucmVhZFVJbnQ4KG0gKyAzKTtcbiAgbGV0IGNvbnRlbnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBTVFJJREUpIHtcbiAgICBjb25zdCBvZmZzZXQgPSAoeSA+PiAyKSAmIChTVFJJREUgLSAxKTtcbiAgICBmb3IgKGxldCB4ID0gb2Zmc2V0OyB4IDwgd2lkdGg7IHggKz0gU1RSSURFKSB7XG4gICAgICBjb25zdCBpID0gKHkgKiB3aWR0aCArIHgpICogNDtcbiAgICAgIGlmIChcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSkgLSBtYikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAxKSAtIG1nKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDIpIC0gbXIpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMykgLSBtYSkgPiBDT05URU5UX0RFTFRBXG4gICAgICApIHtcbiAgICAgICAgY29udGVudCsrO1xuICAgICAgICBpZiAoY29udGVudCA+PSBNSU5fQ09OVEVOVF9TQU1QTEVTKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgQmxhbmtTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF90b3RhbCA9IDA7XG4gIHByaXZhdGUgX2JsYW5rID0gMDtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgc2FtcGxlKGZyYW1lOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90b3RhbCsrO1xuICAgIGlmIChpc0JsYW5rRnJhbWUoZnJhbWUsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpKSB7XG4gICAgICB0aGlzLl9ibGFuaysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyYWN0aW9uIG9mIHdyaXR0ZW4gZnJhbWVzIHRoYXQgd2VyZSBjb250ZW50bGVzcyAoMCA9IGFsbCBoYWQgY29udGVudCwgMSA9IGFsbCBibGFuaykuXG4gIGZpbmFsaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsID4gMCA/IHRoaXMuX2JsYW5rIC8gdGhpcy5fdG90YWwgOiAwO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG5leHBvcnQgY29uc3QgSkFOS19XQVJOX1NDT1JFID0gMC4yNTsgLy8gamFuayBzY29yZSBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmQgKH5xdWFydGVyIGRyb3BwZWQgb3IgYSB+MC41cyBmcmVlemUpXG5cbi8vIEZyYW1lLWRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCk6IGdsb2JhbCBkcm9wIHJhdGUgYW5kIGxvY2FsIGJ1cnN0IHNldmVyaXR5IGNvbWJpbmVkIHZpYSAxLSgxLWcpKDEtbCkuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRHJvcFN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnBzOiBudW1iZXI7XG4gIHByaXZhdGUgX2FjdHVhbCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRCdXJzdCA9IDA7XG4gIHByaXZhdGUgX2J1cnN0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihmcHM6IG51bWJlcikge1xuICAgIHRoaXMuX2ZwcyA9IGZwcztcbiAgfVxuXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICBmaW5hbGl6ZSgpOiBEcm9wU2NvcmUge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxEcm9wcGVkID0gMDtcbiAgICBsZXQgbG9jYWxTdW0gPSAwO1xuICAgIGxldCBtYXhCdXJzdCA9IDA7XG4gICAgZm9yIChjb25zdCBidXJzdCBvZiB0aGlzLl9idXJzdHMpIHtcbiAgICAgIHRvdGFsRHJvcHBlZCArPSBidXJzdDtcbiAgICAgIG1heEJ1cnN0ID0gTWF0aC5tYXgobWF4QnVyc3QsIGJ1cnN0KTtcbiAgICAgIGNvbnN0IHBlcmNlcHRpYmxlID0gTWF0aC5tYXgoMCwgYnVyc3QgLSAxKTtcbiAgICAgIGxvY2FsU3VtICs9IChwZXJjZXB0aWJsZSAvIHRoaXMuX2ZwcykgKiogMjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuX2FjdHVhbCArIHRvdGFsRHJvcHBlZDtcbiAgICBjb25zdCBnID0gZXhwZWN0ZWQgPiAwID8gdG90YWxEcm9wcGVkIC8gZXhwZWN0ZWQgOiAwO1xuICAgIGNvbnN0IGwgPSBNYXRoLm1pbigxLCBsb2NhbFN1bSk7XG4gICAgY29uc3Qgc2NvcmUgPSAxIC0gKDEgLSBnKSAqICgxIC0gbCk7XG5cbiAgICByZXR1cm4geyBnbG9iYWw6IGcsIGxvY2FsOiBsLCBqYW5rOiBzY29yZSwgZXhwZWN0ZWQsIGFjdHVhbDogdGhpcy5fYWN0dWFsLCBtYXhCdXJzdCB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbi8vIEEgcmVuZGVyIHF1YW50dW0gaXMgMTI4IHN0ZXJlbyBmbG9hdHM7IGFueXRoaW5nIHBhc3QgYSBzZWNvbmQgb2YgYXVkaW8gY2FtZSBmcm9tIGEgcGFnZSBhYnVzaW5nIHRoZSBicmlkZ2UuXG5jb25zdCBNQVhfQ0hVTktfQllURVMgPSA0OF8wMDAgKiAyICogNDtcbmNvbnN0IE1BWF9TQU1QTEVfUkFURSA9IDE5Ml8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNhbXBsZVJhdGUpIHx8IHNhbXBsZVJhdGUgPD0gMCB8fCBzYW1wbGVSYXRlID4gTUFYX1NBTVBMRV9SQVRFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgLy8gUGFnZS13b3JsZCBjb2RlIG93bnMgdGhpcyBjaGFubmVsLCBzbyB0cmVhdCBpdHMgcGF5bG9hZCBhcyBpbnB1dDogd3Jvbmcgc2l6ZSBtZWFucyBpdCBpcyBub3Qgb3VyIHdvcmtsZXQncyBQQ00uXG4gICAgY29uc3QgYnl0ZXMgPSBBcnJheUJ1ZmZlci5pc1ZpZXcoYnVmZmVyKSA/IGJ1ZmZlci5ieXRlTGVuZ3RoIDogMDtcbiAgICBpZiAoYnl0ZXMgPT09IDAgfHwgYnl0ZXMgPiBNQVhfQ0hVTktfQllURVMgfHwgYnl0ZXMgJSA4ICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKGJ1ZmZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICB3Yy5pcGMub24oQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICB3Yy5pcGMub24oQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMTYuXG5cbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgbmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuaW50ZXJmYWNlIFNjcmVlbnNob3RUYXJnZXQge1xuICBtczogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyZWVuc2hvdE9wdGlvbnMge1xuICBtYXJrczogbnVtYmVyW107XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG59XG5cbi8vIER1bXBzIHBhaW50ZWQgQkdSQSBmcmFtZXMgdG8gUE5HIGF0IHJlcXVlc3RlZCBzZWNvbmQgbWFya3M7IHJlc3VsdCBvcmRlciB0cmFja3MgaW5wdXQgb3JkZXIuXG5leHBvcnQgY2xhc3MgU2NyZWVuc2hvdFRha2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZzogU2NyZWVuc2hvdFRhcmdldFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb25lID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfd3JpdGVzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zOiBTY3JlZW5zaG90T3B0aW9ucykge1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUoX3Mub3V0RmlsZXNbMF0gPz8gXCIuXCIpO1xuICAgIHRoaXMuX3BlbmRpbmcgPSBfcy5tYXJrc1xuICAgICAgLm1hcCgoc2VjLCBpbmRleCkgPT4gKHsgbXM6IHNlYyAqIDEwMDAsIGluZGV4LCBwYXRoOiBqb2luKGRpciwgYHNjcmVlbnNob3RfJHtpbmRleH0ucG5nYCkgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5tcyAtIGIubXMpO1xuICB9XG5cbiAgLy8gRHVtcCBldmVyeSBtYXJrIHdob3NlIHNlY29uZCBoYXMgYmVlbiByZWFjaGVkIGJ5IHRoaXMgZnJhbWUuXG4gIGNhcHR1cmUoY3VycmVudFRpbWVNczogbnVtYmVyLCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5fcGVuZGluZy5sZW5ndGggPiAwICYmIHRoaXMuX3BlbmRpbmdbMF0hLm1zIDw9IGN1cnJlbnRUaW1lTXMpIHtcbiAgICAgIHRoaXMudGFrZSh0aGlzLl9wZW5kaW5nLnNoaWZ0KCkhLCBiZ3JhKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNvcmRpbmcgb3Zlcjogc25hcCBhbnkgbWFyayBwYXN0IHRoZSBsYXN0IGZyYW1lIG9udG8gaXQsIHRoZW4gd3JpdGUgYWxsIHNob3RzIG91dC5cbiAgYXN5bmMgZmluaXNoKGZpbmFsQmdyYT86IEJ1ZmZlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB3aGlsZSAoZmluYWxCZ3JhICYmIHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGZpbmFsQmdyYSk7XG4gICAgfVxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3dyaXRlcyk7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9kb25lLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pLm1hcCgoWywgcGF0aF0pID0+IHBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWtlKHRhcmdldDogU2NyZWVuc2hvdFRhcmdldCwgYmdyYTogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHBuZyA9IG5hdGl2ZUltYWdlLmNyZWF0ZUZyb21CaXRtYXAoYmdyYSwgeyB3aWR0aCwgaGVpZ2h0IH0pLnRvUE5HKCk7XG4gICAgdGhpcy5fZG9uZS5zZXQodGFyZ2V0LmluZGV4LCB0YXJnZXQucGF0aCk7XG4gICAgdGhpcy5fd3JpdGVzLnB1c2god3JpdGVGaWxlKHRhcmdldC5wYXRoLCBwbmcpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJub2RlOnRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gQWJvcnQgYmFpbHMgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZzsgc2lnbmFsIGlzIG5vdCBhdXRvLXRocmVhZGVkIGludG8gZm4g4oCUIGNhbGxlciB3aXJlcyBpdCAoZmV0Y2gsIFMzIHNlbmQpLlxuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4oe1xuICBmbixcbiAgbWF4QXR0ZW1wdHMgPSAzLFxuICB0aW1lb3V0LFxuICBzaWduYWwsXG59OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBBcmdzKSA9PiB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMiAqKiBhdHRlbXB0ICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8yNy5cblxuZXhwb3J0IHR5cGUgV29ybGRNb2RlID0gXCJzaG9vdFwiIHwgXCJyZW5kZXJcIiB8IFwiYXVkaW9cIjtcblxuLy8gTmFtZXMgdGhlIHBhZ2Utd29ybGQgYnVuZGxlIGluIHRoZSBwcmVsb2FkJ3MgYXJndjsga2VlcCB0aGlzIG1vZHVsZSBkZXBlbmRlbmN5LWZyZWUsIHRoZSBwcmVsb2FkIGxvYWRzIGl0IGFzLWlzLlxuZXhwb3J0IGNvbnN0IFdPUkxEX0FSRyA9IFwiLS1wdXAtd29ybGQ9XCI7XG5cbi8vIFByZXNlbnQgb25seSB3aGVuIHRoZSBydW4gY2FwdHVyZXMgYXVkaW8sIHNvIGEgcGFnZSBpbiBhbnkgb3RoZXIgbW9kZSBoYXMgbm8gY2hhbm5lbCB0byBwdXNoIFBDTSB0aHJvdWdoLlxuZXhwb3J0IGNvbnN0IEFVRElPX0FSRyA9IFwiLS1wdXAtYXVkaW9cIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmNvbnN0IHRhcmdldHMgPSBuZXcgU2V0KG1hcC52YWx1ZXMoKSk7XG5cbmNvbnN0IExPQ0FMX1NDSEVNRVMgPSBbXCJwdXA6XCIsIFwicHVwLWZyYW1lOlwiLCBcImZpbGU6XCIsIFwiZGF0YTpcIiwgXCJibG9iOlwiLCBcImNocm9tZS1leHRlbnNpb246XCIsIFwiZGV2dG9vbHM6XCJdO1xuXG5mdW5jdGlvbiBpc0xvY2FsU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcyBvZiBMT0NBTF9TQ0hFTUVTKSB7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKHMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1Byb3h5VGFyZ2V0KHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cmwuc3RhcnRzV2l0aChcImh0dHBcIikgJiYgdGFyZ2V0cy5oYXMobmV3IFVSTCh1cmwpLmhvc3RuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xuICBzdHViTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgc3R1Yk1lZGlhIH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDI1Nik7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudC53YWl0KHsgdGltZW91dDogNV8wMDAsIG9uVGltZW91dCB9KS5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICAvLyBTd2FwIG1lZGlhIGZvciBhIGZyYW1lLXNlcnZlciBzdHViICh0cnVlIGludHJpbnNpYyBzaXplL2R1cmF0aW9uKSBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbiAgICBpZiAoc3R1Yk1lZGlhICYmIGRldGFpbHMucmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCIgJiYgIXVybC5zdGFydHNXaXRoKFwicHVwLWZyYW1lOlwiKSkge1xuICAgICAgY2FsbGJhY2soe1xuICAgICAgICByZWRpcmVjdFVSTDogYHB1cC1mcmFtZTovL3N0dWI/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTG9jYWxTY2hlbWUodXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgdXJsLCByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIC8vIFByb3h5aW5nIHJld3JvdGUgdGhlIG9yaWdpbiwgc28gZm9udHMgYW5kIG90aGVyIENPUlMtbW9kZSBmZXRjaGVzIG5lZWQgdGhlIGdyYW50IHRoZSBvcmlnaW5hbCBob3N0IHdvdWxkIGhhdmUgaGFkLlxuICAgIGlmICh1c2VJbm5lclByb3h5ICYmIGlzUHJveHlUYXJnZXQodXJsKSkge1xuICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnM6IHsgLi4ucmVzcG9uc2VIZWFkZXJzLCBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBbXCIqXCJdIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGNvbnN0IHsgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUgfSA9IGRldGFpbHM7XG4gICAgLy8gU3R1YmJlZCBtZWRpYSBkb3duZ3JhZGVzOiBFUlJfQUJPUlRFRCBpcyBqdXN0IHRoZSBsb2FkZXIgcmVzdGFydGluZyBvbnRvIHRoZSBjcm9zcy1zY2hlbWUgcmVkaXJlY3QuXG4gICAgY29uc3QgbWVkaWEgPSBzdHViTWVkaWEgJiYgcmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCI7XG4gICAgY29uc3QgbGV2ZWwgPSBtZWRpYSA/IChlcnJvciA9PT0gXCJuZXQ6OkVSUl9BQk9SVEVEXCIgPyBcImRlYnVnXCIgOiBcIndhcm5cIikgOiBcImVycm9yXCI7XG4gICAgbG9nZ2VyW2xldmVsXShUQUcsIGBlcnJvcjpgLCB7IGtleSwgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUsIHNvdXJjZSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBQa2dSb290LCBwdXBQcmVsb2FkIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgQVVESU9fQVJHLCBXT1JMRF9BUkcsIHR5cGUgV29ybGRNb2RlIH0gZnJvbSBcIi4uL3J1bnRpbWUvd29ybGRcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcbmNvbnN0IENPTlNPTEVfSUdOT1JFUyA9IFtcIk1peGVkIENvbnRlbnQ6IFRoZSBwYWdlIGF0XCJdO1xuXG5pbnRlcmZhY2UgRmluaXNoT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0aW1lb3V0TXMsIHRvbGVyYW50LCBzaWduYWwgfTogRmluaXNoT3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBkb21SZWFkeSA9IGZhbHNlO1xuICAgIC8vIFRvbGVyYW50IHByb2NlZWRzIG9uIGEgcGFydGlhbCBET00gb25seSBhcyBhIHRpbWVvdXQgZmFsbGJhY2sg4oCUIHN0YXJ0aW5nIG9uIGJhcmUgZG9tLXJlYWR5IGxlYXZlcyB0aGUgbG9hZCBwZW5kaW5nIGFuZCB3ZWRnZXMgdmlydHVhbCB0aW1lLlxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUodG9sZXJhbnQgJiYgZG9tUmVhZHkgPyB1bmRlZmluZWQgOiBUSU1FT1VUX0VSUk9SKSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IHVua25vd24pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gZG9uZShzaWduYWwucmVhc29uKSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb21SZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJwcmVsb2FkLWVycm9yXCIsIChfZSwgX3BhdGgsIGVycm9yKSA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgcHJlbG9hZC1lcnJvcjogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KX1gKTtcbiAgICAgIGRvbmUoZXJyb3IpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBcImZvcmNlIGNsb3NlXCIpO1xuICAgICAgICB3aW4uZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgZG9uZSgpO1xuICAgIH0sIDEwMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5kZXRhY2goKTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCBkb25lKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFdpbmRvd0NyZWF0ZWRDYWxsYmFjayA9ICh3aW5kb3c6IEJyb3dzZXJXaW5kb3cpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgcmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnM7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgb25DcmVhdGVkPzogV2luZG93Q3JlYXRlZENhbGxiYWNrO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gUGFnZS13b3JsZCBob29rIGJ1bmRsZXM7IHRoZSBwcmVsb2FkIGV2YWx1YXRlcyB0aGUgbmFtZWQgb25lIGluIHRoZSBtYWluIHdvcmxkIG9mIGV2ZXJ5IGZyYW1lIGl0IGxhbmRzIGluLlxuY29uc3QgV09STERfU0NSSVBUUzogUmVjb3JkPFdvcmxkTW9kZSwgc3RyaW5nPiA9IHtcbiAgc2hvb3Q6IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInNob290Lmdsb2JhbC5qc1wiKSxcbiAgcmVuZGVyOiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJyZW5kZXIuZ2xvYmFsLmpzXCIpLFxuICBhdWRpbzogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwiYXVkaW8uZ2xvYmFsLmpzXCIpLFxufTtcblxuZnVuY3Rpb24gcGlja1dvcmxkU2NyaXB0KHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kZTogV29ybGRNb2RlID0gcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyA/IFwic2hvb3RcIiA6IHJlbmRlcmVyLndpdGhBdWRpbyA/IFwiYXVkaW9cIiA6IFwicmVuZGVyXCI7XG4gIHJldHVybiBXT1JMRF9TQ1JJUFRTW21vZGVdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgdG9sZXJhbnQsIHNpZ25hbCwgb25DcmVhdGVkIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1pbldpZHRoOiB3aWR0aCxcbiAgICBtaW5IZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgIG1heEhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICByZXNpemFibGU6IGZhbHNlLFxuICAgIG1pbmltaXphYmxlOiBmYWxzZSxcbiAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICBzaG93OiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBmcmFtZTogZmFsc2UsXG4gICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgIG9mZnNjcmVlbjogdHJ1ZSxcbiAgICAgIGJhY2tncm91bmRUaHJvdHRsaW5nOiBmYWxzZSxcbiAgICAgIC8vIENhcnJpZXMgdGhlIGJyaWRnZSBwcmVsb2FkIGludG8gdGhlIHRhcmdldCBpZnJhbWU7IG5vZGUgc3RheXMgb2ZmLCBhcyBub2RlSW50ZWdyYXRpb24ga2VlcHMgaXRzIGZhbHNlIGRlZmF1bHQuXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIC8vIEVsZWN0cm9uIHNhbmRib3hlcyBwcmVsb2FkcyBieSBkZWZhdWx0LCB3aGljaCBicmVha3MgdGhlaXIgYnVuZGxlZCByZXF1aXJlczsgdGhlIE9TIHNhbmRib3ggaXMgb2ZmIHJlZ2FyZGxlc3MuXG4gICAgICBzYW5kYm94OiBmYWxzZSxcbiAgICAgIHdlYlNlY3VyaXR5OiAhcmVuZGVyZXIuZGlzYWJsZVdlYlNlY3VyaXR5LFxuICAgICAgLy8gVGhlIHdyYXBwZXIgaXMgYSBzZWN1cmUgc2NoZW1lLCBzbyBpdCB1cGdyYWRlcyB0aGUgdGFyZ2V0IHRvIGh0dHBzIGFuZCBldmVyeSBodHRwIHN1YnJlc291cmNlIGl0IG93bnMgdHVybnMgbWl4ZWQuXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHB1cFByZWxvYWQsXG4gICAgICBhZGRpdGlvbmFsQXJndW1lbnRzOiBbYCR7V09STERfQVJHfSR7cGlja1dvcmxkU2NyaXB0KHJlbmRlcmVyKX1gLCAuLi4ocmVuZGVyZXIud2l0aEF1ZGlvID8gW0FVRElPX0FSR10gOiBbXSldLFxuICAgIH0sXG4gIH0pO1xuICBzZXRJbnRlcmNlcHRvcih7XG4gICAgc291cmNlLFxuICAgIHdpbmRvdzogd2luLFxuICAgIHVzZUlubmVyUHJveHksXG4gICAgc3R1Yk1lZGlhOiByZW5kZXJlci5kZXRlcm1pbmlzdGljLFxuICB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICAvLyBEcm9wIGhlYWRsZXNzIG5vaXNlOiBzZWN1cml0eSB3YXJuaW5ncyBhbmQgaHR0cOKGkmh0dHBzIGF1dG8tdXBncmFkZSBub3RpY2VzIGZvciBpbnRlcm5hbC1wcm94eSBhc3NldHMuXG4gICAgaWYgKGxldmVsID09PSBcIndhcm5pbmdcIiAmJiBDT05TT0xFX0lHTk9SRVMuZmluZCgoaSkgPT4gbWVzc2FnZS5zdGFydHNXaXRoKGkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goe1xuICAgICAgc291cmNlLFxuICAgICAgd2luLFxuICAgICAgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLFxuICAgICAgdGltZW91dE1zOiByZW5kZXJlci53aW5kb3dUaW1lb3V0ICogMTAwMCxcbiAgICAgIHRvbGVyYW50LFxuICAgICAgc2lnbmFsLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgb25DcmVhdGVkLCBzaWduYWwgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIGxldCB3YXJtdXA6IEJyb3dzZXJXaW5kb3cgfCB1bmRlZmluZWQ7XG4gIGxldCBlcnJvcjogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB3YXJtdXAgPSBhd2FpdCBvcGVuV2luZG93V2l0aFJldHJ5KHsgc291cmNlLCByZW5kZXJlciwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG5cbiAgY29uc3Qgb3BlbiA9ICgpID0+IHtcbiAgICByZXR1cm4gb3BlbldpbmRvdyh7XG4gICAgICBzb3VyY2UsXG4gICAgICByZW5kZXJlcixcbiAgICAgIG9uQ3JlYXRlZCxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHRvbGVyYW50OiByZW5kZXJlci53aW5kb3dUb2xlcmFudCxcbiAgICB9KTtcbiAgfTtcblxuICBpZiAocmVuZGVyZXIud2luZG93VG9sZXJhbnQgJiYgZXJyb3IgPT09IFRJTUVPVVRfRVJST1IpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIGB3YXJtdXAgdGltZW91dDogJHtzb3VyY2V9LCBmYWxsaW5nIGJhY2sgdG8gZG9tLXJlYWR5YCk7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGVycm9yIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHdhcm11cCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG5cbiAgaWYgKHdhcm11cCkge1xuICAgIHdhcm11cC53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHdhcm11cCk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3YXJtdXApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlYnVpbGREcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQXVkaW9EaXNwb3NhbCwgYXR0YWNoQXVkaW9MaXN0ZW5lcnMgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZXMsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHNjcmVlbnNob3RzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVqZWN0ZXI6ICgocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCBjbGVhclN0dWNrQ2hlY2s6IFZvaWRGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYmxhbmtTdGF0cyA9IG5ldyBCbGFua1N0YXRzKHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGJsYW5rU3RhdHMuc2FtcGxlKGZyYW1lKTtcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgc3RlZ28gdGltZXN0YW1wIGZyb20gdGhlIGJvdHRvbSBwaXhlbCByb3cgd2l0aG91dCBmdWxsIGJpdG1hcCBjb3B5XG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RlRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgZnJhbWVzIHRoYXQgYXJyaXZlIHRvbyBzb29uICg8IDgwJSBvZiBmcmFtZSBpbnRlcnZhbClcbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lICE9PSB1bmRlZmluZWQgJiYgY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuICAgIGxhc3RGcmFtZSA9IGNyb3BwZWQ7XG4gICAgdGFrZXIuY2FwdHVyZShjdXJyZW50VGltZSwgY3JvcHBlZCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGNsZWFyU3R1Y2tDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc3R1Y2srKztcbiAgICAgICAgaWYgKHN0dWNrID49IGZwcykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKGByZW5kZXJlciBzdGFsbGVkIGZvciAke01hdGgucm91bmQoKHN0dWNrICogMTAwMCkgLyBmcHMpfW1zIEAgJHt3cml0dGVufWApKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayA9PT0gMSB8fCBzdHVjayA9PT0gTWF0aC5mbG9vcihmcHMgLyAyKSkge1xuICAgICAgICAgIGF3YWl0IHJlYnVpbGREcmF3YWJsZSh3aW4ud2ViQ29udGVudHMsIGZyYW1lU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sIDEwMDAgLyBmcHMpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyU3R1Y2tDaGVjaz8uKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RGcmFtZSk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGVuY29kZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgamFuayB9ID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGphbmsgPj0gSkFOS19XQVJOX1NDT1JFKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gamFuayBzY29yZSAke2phbmsudG9GaXhlZCgyKX0g4oCUIGRyb3BwZWQgZnJhbWVzYCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgc2NyZWVuc2hvdHMsIGphbmsgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGFib3J0YWJsZSB9IGZyb20gXCIuLi8uLi9iYXNlL3RpbWluZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb11cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlT3B0aW9ucyB7XG4gIGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQ7XG4gIHRpbWVzdGFtcE1zOiBudW1iZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBPbmx5IHRoZSBkZXRlcm1pbmlzdGljIHJlbmRlcmVyIChzaG9vdCkgZHJpdmVzIHRoaXM7IHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrIHZpYSByQUYgaW4gdGhlIHBhZ2UuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyh7IGZyYW1lLCB0aW1lc3RhbXBNcywgc2lnbmFsIH06IEFkdmFuY2VPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZnJhbWU/LnVybCkge1xuICAgIHJldHVybjtcbiAgfVxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWJvcnRhYmxlKFxuICAgICAgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoXG4gICAgICAgIGB3aW5kb3cuX19wdXBfdmlkZW9fXyYmKGFzeW5jKCk9Pnthd2FpdCBfX3B1cF92aWRlb19fLnJlYWR5KCk7YXdhaXQgX19wdXBfdmlkZW9fXy5hZHZhbmNlKCR7dGltZXN0YW1wTXN9KX0pKClgLFxuICAgICAgKSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGxvZ2dlci53YXJuKFRBRywgYGFkdmFuY2Ugc2tpcHBlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyB0eXBlIEFkdmFuY2VPcHRpb25zLCBhZHZhbmNlVmlkZW9zIH0gZnJvbSBcIi4vdmlkZW8vYWR2YW5jZVwiO1xuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGljayhhcmdzOiBBZHZhbmNlT3B0aW9ucykge1xuICBjb25zdCB7IGZyYW1lLCB0aW1lc3RhbXBNcyB9ID0gYXJncztcbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleHByID0gYHdpbmRvdy4ke1RJQ0tfU1lNQk9MfSYmd2luZG93LiR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYDtcbiAgY29uc3QgdGlja0V2ID0gZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoZXhwcik7XG4gIGF3YWl0IFByb21pc2UuYWxsKFt3aXRoVGltZW91dCh0aWNrRXYsIDVfMDAwLCBcInRpY2suZXhlY3V0ZUphdmFTY3JpcHRcIiksIGFkdmFuY2VWaWRlb3MoYXJncyldKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjMuXG5cbmltcG9ydCB7IERlbXV4ZXIsIHR5cGUgRGVtdXhlck9wdGlvbnMgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcblxuLy8gZmZtcGVnIHJlYWQvd3JpdGUgZGVhZGxpbmUgKMK1cyk7IGEgYmxvY2tpbmcgb3BlbiBpZ25vcmVzIEFib3J0U2lnbmFsLCBzbyB0aGlzIGJvdW5kcyBhIHN0dWNrIENETi5cbmNvbnN0IFJXX1RJTUVPVVRfVVMgPSBcIjgwMDAwMDBcIjtcblxuLy8gZmZtcGVnIG9wZW5zIGh0dHAvaHR0cHMgd2l0aCBuYXRpdmUgYnl0ZS1yYW5nZSByZXF1ZXN0cywgc28gb25seSB0aGUgZGVjb2RlZCByYW5nZXMgZG93bmxvYWQuXG5leHBvcnQgZnVuY3Rpb24gb3BlbklucHV0KHNyYzogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8RGVtdXhlcj4ge1xuICBjb25zdCBvcHRpb25zOiBEZW11eGVyT3B0aW9ucyA9IHsgc2lnbmFsLCBvcHRpb25zOiB7IHJ3X3RpbWVvdXQ6IFJXX1RJTUVPVVRfVVMgfSB9O1xuICByZXR1cm4gRGVtdXhlci5vcGVuKHNyYywgb3B0aW9ucyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzI1LlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IERlY29kZXIsIEZpbHRlckFQSSB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuaW1wb3J0IHsgb3BlbklucHV0IH0gZnJvbSBcIi4vb3BlblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZWRGcmFtZSB7XG4gIGlkeDogbnVtYmVyO1xuICBidWY6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVGcmFtZXNPcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIG1ldGE6IFZpZGVvTWV0YTtcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gRGVjb2RlIGEgc291cmNlIHRvIGZwcy1yZXNhbXBsZWQsIGRpc3BsYXktc2NhbGVkLCB0aWdodC1SR0JBIGZyYW1lcyBpbiBvcmRlciAoaWR4ID0gMS1iYXNlZCBkZWNvZGUgcG9zaXRpb24pLiBDb25zdW1lciBiYWNrcHJlc3N1cmUgaXMganVzdCBwdWxsaW5nIHNsb3dlci5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZGVjb2RlRnJhbWVzKHsgc3JjLCBtZXRhLCBzaWduYWwgfTogRGVjb2RlRnJhbWVzT3B0aW9ucyk6IEFzeW5jR2VuZXJhdG9yPERlY29kZWRGcmFtZT4ge1xuICBhd2FpdCB1c2luZyBpbnB1dCA9IGF3YWl0IG9wZW5JbnB1dChzcmMsIHNpZ25hbCk7XG4gIGNvbnN0IHN0cmVhbSA9IGlucHV0LnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgc2lnbmFsIH0pO1xuICBjb25zdCB7IGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG1ldGE7XG4gIGNvbnN0IHNjYWxlID0gZnJhbWVXaWR0aCAhPT0gd2lkdGggfHwgZnJhbWVIZWlnaHQgIT09IGhlaWdodCA/IGBzY2FsZT0ke2ZyYW1lV2lkdGh9OiR7ZnJhbWVIZWlnaHR9LGAgOiBcIlwiO1xuICB1c2luZyBmaWx0ZXIgPSBGaWx0ZXJBUEkuY3JlYXRlKGBmcHM9JHtmcHN9LCR7c2NhbGV9Zm9ybWF0PXJnYmFgLCB7IHNpZ25hbCB9KTtcbiAgbGV0IGsgPSAwO1xuICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGZpbHRlci5mcmFtZXMoZGVjLmZyYW1lcyhpbnB1dC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpKSkge1xuICAgIGlmICghZnJhbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB5aWVsZCB7IGlkeDogKytrLCBidWY6IHBhY2tSZ2JhKGZyYW1lKSB9O1xuICB9XG59XG5cbi8vIFRpZ2h0IFJHQkEgY29weSAoZHJvcCBsaWJhdiByb3cgcGFkZGluZykgc28gdGhlIHBhZ2UgY2FuIHdyYXAgaXQgc3RyYWlnaHQgaW50byBJbWFnZURhdGEuXG5mdW5jdGlvbiBwYWNrUmdiYShmcmFtZTogRnJhbWUpOiBCdWZmZXIge1xuICBjb25zdCByb3cgPSBmcmFtZS53aWR0aCAqIDQ7XG4gIGNvbnN0IHN0cmlkZSA9IGZyYW1lLmxpbmVzaXplWzBdITtcbiAgY29uc3Qgc3JjID0gZnJhbWUuZGF0YSFbMF0hO1xuICBpZiAoc3RyaWRlID09PSByb3cpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3JjLnN1YmFycmF5KDAsIHJvdyAqIGZyYW1lLmhlaWdodCkpO1xuICB9XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShyb3cgKiBmcmFtZS5oZWlnaHQpO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGZyYW1lLmhlaWdodDsgeSsrKSB7XG4gICAgc3JjLmNvcHkob3V0LCB5ICogcm93LCB5ICogc3RyaWRlLCB5ICogc3RyaWRlICsgcm93KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZGVjb2RlRnJhbWVzIH0gZnJvbSBcIi4vZGVjb2RlXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltEZWNvZGVTZXNzaW9uXVwiO1xuY29uc3QgREVDT0RFX0FIRUFEID0gNDsgLy8gZGVjb2RlIGEgZmV3IGZyYW1lcyBwYXN0IHRoZSBoaWdoZXN0IHJlcXVlc3Q7IHRoZSBwYWdlIGFscmVhZHkgcHJlZmV0Y2hlc1xuY29uc3QgS0VFUF9CRUhJTkQgPSAxNjsgLy8gbWluIGZyYW1lcyBoZWxkIGJlaGluZCB0aGUgaGVhZDsgbXVzdCBleGNlZWQgdGhlIHBhZ2UncyBwcmVmZXRjaCBsZWFkIChBSEVBRD0xMClcbmNvbnN0IE1FTU9SWV9CVURHRVQgPSAyNTYgKiAxMDI0ICogMTAyNDsgLy8gcmV0YWluIGRlY29kZWQgZnJhbWVzIHVwIHRvIHRoaXMgcGVyLXNlc3Npb24gYnVkZ2V0IHNvIGEgc21hbGwgbG9vcGluZyB2aWRlbyByZS1zZXJ2ZXMgZnJvbSBtZW1vcnkgaW5zdGVhZCBvZiByZS1kZWNvZGluZ1xuY29uc3QgTUFYX1BBU1NfUkVUUlkgPSAzOyAvLyByZS1vcGVuIGEgc3RyZWFtZWQgc291cmNlIHRoaXMgbWFueSB0aW1lcyBvbiBhIHRyYW5zaWVudCBkZWNvZGUgZXJyb3IgYmVmb3JlIHJlcG9ydGluZyBlbmQtb2Ytc3RyZWFtXG5cbmludGVyZmFjZSBXYWl0ZXIge1xuICBpZHg6IG51bWJlcjtcbiAgcmVzb2x2ZTogKGI6IEJ1ZmZlcikgPT4gdm9pZDtcbn1cblxuLy8gRGVtYW5kLWRyaXZlbiBpbi1wcm9jZXNzIGRlY29kZSAoRGVtdXhlcuKGkkRlY29kZXLihpJmcHMvc2NhbGUvcmdiYSBmaWx0ZXIpIHNlcnZpbmcgZnJhbWUgTiBhcyB0aWdodCBSR0JBOyBmb3J3YXJkLW9ubHkg4oCUIGEgbG9vcC9yZXdpbmQgcmUtZGVjb2RlcyBmcm9tIGZyYW1lIDEgdW5sZXNzIHRoZSB3aG9sZSBjbGlwIHN0aWxsIGZpdHMgdGhlIG1lbW9yeSBidWRnZXQuXG5leHBvcnQgY2xhc3MgRGVjb2RlU2Vzc2lvbiB7XG4gIHByaXZhdGUgX2J1ZiA9IG5ldyBNYXA8bnVtYmVyLCBCdWZmZXI+KCk7XG4gIHByaXZhdGUgX3JlYWR5ID0gMDtcbiAgcHJpdmF0ZSBfd2FudCA9IDE7XG4gIHByaXZhdGUgX2RvbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgX2dlbiA9IDA7XG4gIHByaXZhdGUgX2N0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHByaXZhdGUgX3dhaXRlcnMgPSBuZXcgU2V0PFdhaXRlcj4oKTtcbiAgcHJpdmF0ZSBfcmVzdW1lOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Jlc3RhcnQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgLy8gTGVhZCBmcmFtZXMgaGVsZCBvbiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBjb250ZW50IGlkeCBpcyBvZmZzZXQgcGFzdCB0aGVtLlxuICBwcml2YXRlIHJlYWRvbmx5IF9sZWFkRnJhbWVzOiBudW1iZXI7XG4gIC8vIEZyYW1lcyBrZXB0IGJlaGluZCB0aGUgaGVhZDsgYSBjbGlwIHRoYXQgZml0cyB0aGUgYnVkZ2V0IHJldGFpbnMgZXZlcnkgZnJhbWUsIHNvIGxvb3BzIHJlLXNlcnZlIGZyb20gbWVtb3J5LlxuICBwcml2YXRlIHJlYWRvbmx5IF9rZWVwQ291bnQ6IG51bWJlcjtcbiAgLy8gUmVzb2x2ZXMgd2hlbiBwdW1wKCkgZnVsbHkgdW53aW5kcyDigJQgYXdhaXRlZCBvbiBjbG9zZSBzbyBub2RlLWF2IGdlbmVyYXRvcnMgZnJlZSBiZWZvcmUgcHJvY2VzcyB0ZWFyZG93bi5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHVtcERvbmU6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgbWV0YTogVmlkZW9NZXRhLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NyYzogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLl9sZWFkRnJhbWVzID0gTWF0aC5yb3VuZChtZXRhLmxlYWRHYXAgKiBtZXRhLmZwcyk7XG4gICAgdGhpcy5fa2VlcENvdW50ID0gTWF0aC5tYXgoS0VFUF9CRUhJTkQsIE1hdGguZmxvb3IoTUVNT1JZX0JVREdFVCAvIChtZXRhLmZyYW1lV2lkdGggKiBtZXRhLmZyYW1lSGVpZ2h0ICogNCkpKTtcbiAgICB0aGlzLl9wdW1wRG9uZSA9IHRoaXMucHVtcCgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RnJhbWUoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmIChpZHggPCAxKSB7XG4gICAgICBpZHggPSAxO1xuICAgIH1cbiAgICBpZiAoaWR4IDw9IHRoaXMuX2xlYWRGcmFtZXMpIHtcbiAgICAgIGlkeCA9IHRoaXMuX2xlYWRGcmFtZXMgKyAxOyAvLyBob2xkIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWUgYWNyb3NzIHRoZSBsZWFkXG4gICAgfVxuICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoaWR4KTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBpZiAodGhpcy5fZG9uZSAmJiBpZHggPiB0aGlzLl9yZWFkeSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTsgLy8gYmV5b25kIGVuZCBvZiBzdHJlYW1cbiAgICB9XG4gICAgaWYgKGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICAvLyBmb3J3YXJkLCBub3QgeWV0IGRlY29kZWQgaW4gdGhpcyBwYXNzXG4gICAgICBpZiAoaWR4ID4gdGhpcy5fd2FudCkge1xuICAgICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgfVxuICAgICAgdGhpcy53YWtlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV2aWN0ZWQgKGxvb3AvcmV3aW5kKTogY2xlYXIgcmVhZHkvZG9uZSBzeW5jaHJvbm91c2x5IHNvIHRoZSB3cmFwJ3MgcHJlZmV0Y2ggYnVyc3QgY29hbGVzY2VzIGludG8gb25lIHJlc3RhcnQsIG5vdCBvbmUgcGVyIGZyYW1lLlxuICAgICAgdGhpcy5fcmVhZHkgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fd2FudCA9IGlkeDtcbiAgICAgIHRoaXMucmVxdWVzdFJlc3RhcnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2FpdChpZHgpO1xuICB9XG5cbiAgLy8gQXdhaXQgdGhlIHB1bXAgc28gdGhlIG5vZGUtYXYgZGVtdXhlci9kZWNvZGVyIGdlbmVyYXRvcnMgdW53aW5kIChjb250ZXh0cyBmcmVlZCkgYmVmb3JlIHRoZSBjYWxsZXIgZXhpdHMuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgdGhpcy5fY3RybC5hYm9ydCgpO1xuICAgIHRoaXMud2FrZSgpO1xuICAgIHRoaXMucmVxdWVzdFJlc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgdy5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG4gICAgfVxuICAgIHRoaXMuX3dhaXRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLl9idWYuY2xlYXIoKTtcbiAgICBhd2FpdCB0aGlzLl9wdW1wRG9uZTtcbiAgfVxuXG4gIC8vIC1kLW9ubHkgc3Vic3lzdGVtLCBzbyBuZXZlciB0aW1lIG91dDogZHJhaW5XYWl0ZXJzIHJlc29sdmVzIG9uIGRlY29kZSwgRU9GLCBvciBjbG9zZSDigJQgb3V0cHV0IG5ldmVyIGRlcGVuZHMgb24gZmV0Y2ggbGF0ZW5jeS5cbiAgcHJpdmF0ZSB3YWl0KGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSkgPT4gdGhpcy5fd2FpdGVycy5hZGQoeyBpZHgsIHJlc29sdmUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWtlKCk6IHZvaWQge1xuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN1bWU7XG4gICAgdGhpcy5fcmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICB9XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgcnVubmluZyBwYXNzIChvciB3YWtlIGEgcGFya2VkIG9uZSkgc28gcHVtcCgpIHN0YXJ0cyBhIGZyZXNoIGRlY29kZSBmcm9tIGZyYW1lIDEuXG4gIHByaXZhdGUgcmVxdWVzdFJlc3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2VuKys7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3RhcnQ7XG4gICAgdGhpcy5fcmVzdGFydCA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgICB0aGlzLndha2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVtcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZmFpbHMgPSAwO1xuICAgIHdoaWxlICghdGhpcy5fY2xvc2VkKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzLl9nZW47XG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl9idWYuY2xlYXIoKTtcbiAgICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVjb2RlUGFzcyhnZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbikge1xuICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBUQUcsXG4gICAgICAgICAgICBgWyR7dGhpcy5tZXRhLmlkLnNsaWNlKDAsIDgpfV0gZGVjb2RlIHBhc3MgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgZmFpbHMgPSAwO1xuICAgICAgICBjb250aW51ZTsgLy8gcmVzdGFydCByZXF1ZXN0ZWQgbWlkLXBhc3NcbiAgICAgIH1cbiAgICAgIC8vIEEgdGhyb3duIHBhc3MgaXMgYSB0cmFuc2llbnQgc291cmNlIGVycm9yIChlLmcuIGEgc3RyZWFtZWQgbG9vcCByZS1vcGVuKTsgcmV0cnkgaW5zdGVhZCBvZiByZXBvcnRpbmcgRU9GLCB3aGljaCB3b3VsZCBibGFuayB0aGUgZnJhbWUuXG4gICAgICBpZiAoZmFpbGVkICYmICsrZmFpbHMgPD0gTUFYX1BBU1NfUkVUUlkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmYWlscyA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJhaW5XYWl0ZXJzKCk7XG4gICAgICBhd2FpdCB0aGlzLnVudGlsUmVzdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVjb2RlUGFzcyhnZW46IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IGRlY29kZUZyYW1lcyh7IHNyYzogdGhpcy5fc3JjLCBtZXRhOiB0aGlzLm1ldGEsIHNpZ25hbDogdGhpcy5fY3RybC5zaWduYWwgfSk7XG4gICAgZm9yIGF3YWl0IChjb25zdCB7IGlkeCwgYnVmIH0gb2Ygc3RyZWFtKSB7XG4gICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0ID0gdGhpcy5fbGVhZEZyYW1lcyArIGlkeDsgLy8gbWFwIGRlY29kZSBwb3NpdGlvbiBwYXN0IHRoZSBoZWxkIGxlYWQtZ2FwIGZyYW1lc1xuICAgICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4gJiYgYXQgPiB0aGlzLmRlbWFuZCArIERFQ09ERV9BSEVBRCkge1xuICAgICAgICBhd2FpdCB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1Zi5zZXQoYXQsIGJ1Zik7XG4gICAgICB0aGlzLl9yZWFkeSA9IGF0O1xuICAgICAgLy8gRHJhaW4gYmVmb3JlIGV2aWN0OiB3aXRoIHdhbnQgZmFyIGFoZWFkIHRoZSBmbG9vciBjb3ZlcnMgdGhpcyBmcmFtZSwgYW5kIGV2aWN0aW5nIGl0IGZpcnN0IHN0YXJ2ZXMgaXRzIHdhaXRlciBmb3JldmVyLlxuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIHRoaXMuZXZpY3QoKTtcbiAgICB9XG4gIH1cblxuICAvLyBXYWl0ZXJzIHRoYXQgc3Vydml2ZWQgYSByZXdpbmQgcmVzdGFydCBhcmUgc3RpbGwgZGVtYW5kOyBpZ25vcmluZyB0aGVtIHBhcmtzIHRoZSBwYXNzIGFuZCBzdGFydmVzIHRoZW0gZm9yZXZlci5cbiAgcHJpdmF0ZSBnZXQgZGVtYW5kKCk6IG51bWJlciB7XG4gICAgbGV0IGQgPSB0aGlzLl93YW50O1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICBpZiAody5pZHggPiBkKSB7XG4gICAgICAgIGQgPSB3LmlkeDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBwcml2YXRlIHBhdXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdW1lID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBhcmsgdW50aWwgYSBsb29wL2JhY2t3YXJkIHJlcXVlc3QgKG9yIGNsb3NlKSBjYWxscyByZXF1ZXN0UmVzdGFydCgpLlxuICBwcml2YXRlIHVudGlsUmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdGFydCA9IHI7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2aWN0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZsb29yID0gdGhpcy5fd2FudCAtIHRoaXMuX2tlZXBDb3VudDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5fYnVmLmtleXMoKSkge1xuICAgICAgaWYgKGsgPCBmbG9vcikge1xuICAgICAgICB0aGlzLl9idWYuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5XYWl0ZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnRoaXMuX3dhaXRlcnNdKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLl9idWYuZ2V0KGVudHJ5LmlkeCk7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShoaXQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgRGVjb2RlciB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVSZXN1bHQge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFBUUyAocykgb2YgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgYSBjb3JydXB0L2VtcHR5IGxlYWRpbmcgcnVuIGlzIGhlbGQgb24gaXQsIGxpa2UgQ2hyb21lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbi8vIE5vIHdhbGwtY2xvY2sgY2FwOiBvcGVuSW5wdXQncyBwZXItcmVhZCByd190aW1lb3V0IGJvdW5kcyBhIHN0dWNrIHNvdXJjZSwgYW5kIHRoZSBjYWxsZXIgcmV0cmllcyBvbiB0aHJvdy5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgYXdhaXQgdXNpbmcgZCA9IGF3YWl0IG9wZW5JbnB1dChzcmMpO1xuICBjb25zdCBzdHJlYW0gPSBkLnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInByb2JlOiBubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgY29uc3QgZHVyYXRpb24gPSBkLmR1cmF0aW9uID4gMCA/IGQuZHVyYXRpb24gOiAwO1xuICBjb25zdCB0YiA9IHN0cmVhbS50aW1lQmFzZS5udW0gLyBzdHJlYW0udGltZUJhc2UuZGVuO1xuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgdGhyZWFkQ291bnQ6IDEgfSk7XG4gIGxldCBsZWFkR2FwID0gMDtcbiAgLy8gRmlyc3QgY2xlYW4gZnJhbWUncyBQVFMgPSB3aGVyZSBjb250ZW50IGJlZ2luczsgc2tpcCBjb3JydXB0IGZyYW1lcyBsaWtlIGEgYnJvd3Nlci5cbiAgb3V0ZXI6IGZvciBhd2FpdCAodXNpbmcgcGt0IG9mIGQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZGVjLmZyYW1lcyhwa3QpKSB7XG4gICAgICAgIGlmIChmcmFtZT8uZGVjb2RlRXJyb3JGbGFncyAhPT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxlYWRHYXAgPSBNYXRoLm1heCgwLCBOdW1iZXIoZnJhbWUucHRzKSAqIHRiKTtcbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBjb3JydXB0IHBhY2tldCDigJQgc2tpcCB0byB0aGUgbmV4dFxuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogc3RyZWFtLmNvZGVjcGFyLndpZHRoLCBoZWlnaHQ6IHN0cmVhbS5jb2RlY3Bhci5oZWlnaHQsIGR1cmF0aW9uLCBsZWFkR2FwIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzA2LlxuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29kZWMsIEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX1lVVjQyMFAsIEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5LCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL21pc2NcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0dWJFbmNvZGVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbi8vIFJlYWwgcGFyc2VhYmxlIG1lZGlhIHdpdGggdGhlIHNvdXJjZSdzIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24sIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY29kZVN0dWJXZWJtKHsgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24gfTogU3R1YkVuY29kZU9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfTElCVlBYX1ZQOSk7XG4gIGlmICghY29kZWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHN0dWI6IGVuY29kZXIgbm90IGZvdW5kOiAke0ZGX0VOQ09ERVJfTElCVlBYX1ZQOX1gKTtcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbih0bXBkaXIoKSwgYHB1cF9zdHViXyR7cmFuZG9tQnl0ZXMoOCkudG9TdHJpbmcoXCJoZXhcIil9LndlYm1gKTtcbiAgdHJ5IHtcbiAgICB7XG4gICAgICBhd2FpdCB1c2luZyBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihwYXRoKTtcbiAgICAgIC8vIFRpbWViYXNlIDEvMTAwMCAoZnBzIHBhcmFtKSBsZXRzIG9uZSBwYWNrZXQgY2FycnkgdGhlIGZ1bGwgc291cmNlIGR1cmF0aW9uIGluIG1zLlxuICAgICAgdXNpbmcgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAgICB7XG4gICAgICAgICAgY29kZWMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGZwczogMTAwMCxcbiAgICAgICAgICBiaXRyYXRlOiAxMDBfMDAwLFxuICAgICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gICAgICAgICAgb3B0aW9uczogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFwic3R1YkN0eC5vcGVuMlwiLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgICAgdXNpbmcgc3R1YiA9IG5ldyBTdHViRnJhbWUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBtcyA9IEJpZ0ludChNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGR1cmF0aW9uICogMTAwMCkpKTtcbiAgICAgIHN0dWIuZnJhbWUucHRzID0gMG47XG4gICAgICBzdHViLmZyYW1lLmR1cmF0aW9uID0gbXM7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShzdHViLmZyYW1lKSwgXCJzdHViQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpLCBcInN0dWJDdHguZmx1c2hcIik7XG4gICAgICB1c2luZyBwa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwic3R1YkN0eC5yZWNlaXZlUGFja2V0XCIpO1xuICAgICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IG1zO1xuICAgICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZShwYXRoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8vIE93bnMgdGhlIGJsYWNrIHBpeGVsIGJ1ZmZlciBBTkQgaXRzIHplcm8tY29weSBmcmFtZSB2aWV3IOKAlCBgdXNpbmdgIHBpbnMgYm90aCB1bnRpbCBhZnRlciBlbmNvZGUuXG5jbGFzcyBTdHViRnJhbWUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgZnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWY6IEJ1ZmZlcjtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGx1bWEgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBjaHJvbWEgPSBNYXRoLmNlaWwod2lkdGggLyAyKSAqIE1hdGguY2VpbChoZWlnaHQgLyAyKTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MobHVtYSArIGNocm9tYSAqIDIsIDB4ODApO1xuICAgIHRoaXMuX2J1Zi5maWxsKDAsIDAsIGx1bWEpO1xuICAgIHRoaXMuZnJhbWUgPSBGcmFtZS5mcm9tVmlkZW9CdWZmZXIodGhpcy5fYnVmLCB7IHdpZHRoLCBoZWlnaHQsIGZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLmZyYW1lW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi8uLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsIH0gZnJvbSBcIi4uL25ldHdvcmtcIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgdHlwZSBQcm9iZVJlc3VsdCwgcHJvYmUgfSBmcm9tIFwiLi9wcm9iZVwiO1xuaW1wb3J0IHsgZW5jb2RlU3R1YldlYm0gfSBmcm9tIFwiLi9zdHViXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIEludHJpbnNpYyBzb3VyY2UgZGltZW5zaW9ucyAocmVwb3J0ZWQgYXMgdmlkZW9XaWR0aC92aWRlb0hlaWdodCkuICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogRGVjb2RlZCtzY2FsZWQgZnJhbWUgZGltZW5zaW9ucyBhY3R1YWxseSBzZXJ2ZWQgKOKJpCBzb3VyY2U7IGNhcHBlZCB0byB0aGUgZGlzcGxheSBib3gpLiAqL1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogU2Vjb25kcyBvZiBjb3JydXB0L2VtcHR5IGxlYWRpbmcgY29udGVudCBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgLyoqIERpc3BsYXktYm94IHBpeGVscyAoY2FudmFzIGJhY2tpbmcgc3RvcmUpOyBkZWNvZGUgaXMgZG93bnNjYWxlZCB0byBjb3ZlciB0aGlzLCBuZXZlciB1cHNjYWxlZC4gKi9cbiAgZHN0Vz86IG51bWJlcjtcbiAgZHN0SD86IG51bWJlcjtcbiAgLyoqIG9iamVjdEZpdDsgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMgc28gaXQgc2tpcHMgZG93bnNjYWxlLiAqL1xuICBmaXQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBFbnRyeSB7XG4gIHNlc3Npb246IERlY29kZVNlc3Npb247XG4gIHJlZnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYW1lU2VydmVyIHtcbiAgcHJpdmF0ZSBfc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgRW50cnk+KCk7XG4gIHByaXZhdGUgX3Byb2JlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFByb2JlUmVzdWx0Pj4oKTtcbiAgcHJpdmF0ZSBfc3R1YnMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxCdWZmZXI+PigpO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcblxuICAvLyAtZCBkZWNvZGUgYnlwYXNzZXMgdGhlIHdpbmRvdyBpbnRlcmNlcHRvciwgc28gaXQgcmVtYXBzIGhvc3RzIGl0c2VsZiB3aGVuIHRoZSBpbm5lciBwcm94eSBpcyBvbi5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfdXNlSW5uZXJQcm94eTogYm9vbGVhbikge31cblxuICAvLyBjbG9zZWQtY2hlY2tlZCBhZnRlciBwcm9iZSBzbyBjbG9zZUFsbCgpIGNhbid0IHJhY2UgYSBzbG93IG9wZW4gaW50byBhIGxlYWtlZCBzZXNzaW9uLlxuICBhc3luYyBvcGVuKG9wdHM6IE9wZW5PcHRpb25zKTogUHJvbWlzZTxWaWRlb01ldGE+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBrZXkob3B0cyk7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICBoaXQucmVmcysrO1xuICAgICAgcmV0dXJuIGhpdC5zZXNzaW9uLm1ldGE7XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IHRoaXMuX3VzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKG9wdHMuc3JjKSA6IG9wdHMuc3JjO1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0aGlzLnByb2JlQ2FjaGVkKHNyYyk7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGxldCBmcmFtZVdpZHRoID0gaW5mby53aWR0aDtcbiAgICBsZXQgZnJhbWVIZWlnaHQgPSBpbmZvLmhlaWdodDtcbiAgICAvLyBEb3duc2NhbGUgdG8gY292ZXIgdGhlIGRpc3BsYXkgYm94IChuZXZlciB1cHNjYWxlKTsgb2JqZWN0Rml0IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzLlxuICAgIGlmIChvcHRzLmRzdFcgJiYgb3B0cy5kc3RIICYmIG9wdHMuZml0ICE9PSBcIm5vbmVcIikge1xuICAgICAgY29uc3QgcyA9IE1hdGgubWluKDEsIE1hdGgubWF4KG9wdHMuZHN0VyAvIGluZm8ud2lkdGgsIG9wdHMuZHN0SCAvIGluZm8uaGVpZ2h0KSk7XG4gICAgICBmcmFtZVdpZHRoID0gZXZlbihpbmZvLndpZHRoICogcyk7XG4gICAgICBmcmFtZUhlaWdodCA9IGV2ZW4oaW5mby5oZWlnaHQgKiBzKTtcbiAgICB9XG4gICAgY29uc3QgbWV0YTogVmlkZW9NZXRhID0ge1xuICAgICAgaWQsXG4gICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICBmcmFtZVdpZHRoLFxuICAgICAgZnJhbWVIZWlnaHQsXG4gICAgICBmcHM6IG9wdHMuZnBzLFxuICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICBsZWFkR2FwOiBpbmZvLmxlYWRHYXAsXG4gICAgfTtcbiAgICB0aGlzLl9zZXNzaW9ucy5zZXQoaWQsIHsgc2Vzc2lvbjogbmV3IERlY29kZVNlc3Npb24obWV0YSwgc3JjKSwgcmVmczogMSB9KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIC8vIERldGVybWluaXN0aWMgbWVkaWEgcmVxdWVzdHMgcmVkaXJlY3QgaGVyZTogcmVhbCBwYXJzZWFibGUgYnl0ZXMgd2l0aCB0cnVlIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24uXG4gIHN0dWIoc3JjOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCByZWFsID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc3JjKSA6IHNyYztcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zdHVicy5nZXQocmVhbCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgY29uc3QgcCA9IHRoaXMucHJvYmVDYWNoZWQocmVhbCkudGhlbigoaW5mbykgPT5cbiAgICAgIGVuY29kZVN0dWJXZWJtKHtcbiAgICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBwLmNhdGNoKCgpID0+IHRoaXMuX3N0dWJzLmRlbGV0ZShyZWFsKSk7XG4gICAgdGhpcy5fc3R1YnMuc2V0KHJlYWwsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgZ2V0RnJhbWUoaWQ6IHN0cmluZywgaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgIH1cbiAgICByZXR1cm4gZS5zZXNzaW9uLmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBhc3luYyBjbG9zZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgtLWUucmVmcyA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgICBhd2FpdCBlLnNlc3Npb24uY2xvc2UoKTtcbiAgfVxuXG4gIC8vIEZhaWxlZCBwcm9iZXMgZXZpY3Qgc28gYSB0cmFuc2llbnQgc291cmNlIGVycm9yIGNhbiByZXRyeSBvbiB0aGUgbmV4dCByZXF1ZXN0LlxuICBwcml2YXRlIHByb2JlQ2FjaGVkKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Byb2Jlcy5nZXQoc3JjKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdXNlUmV0cnkoeyBmbjogcHJvYmUgfSkoc3JjKTtcbiAgICBwLmNhdGNoKCgpID0+IHRoaXMuX3Byb2Jlcy5kZWxldGUoc3JjKSk7XG4gICAgdGhpcy5fcHJvYmVzLnNldChzcmMsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCBzZXNzaW9ucyA9IFsuLi50aGlzLl9zZXNzaW9ucy52YWx1ZXMoKV07XG4gICAgdGhpcy5fc2Vzc2lvbnMuY2xlYXIoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChzZXNzaW9ucy5tYXAoKGUpID0+IGUuc2Vzc2lvbi5jbG9zZSgpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24ga2V5KG9wdHM6IE9wZW5PcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGExXCIpXG4gICAgLnVwZGF0ZShgJHtvcHRzLnNyY318JHtvcHRzLmZwc318JHtvcHRzLmRzdFcgPz8gXCJcIn18JHtvcHRzLmRzdEggPz8gXCJcIn18JHtvcHRzLmZpdCA/PyBcIlwifWApXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbn1cblxuLy8gUm91bmQgZG93biB0byBhbiBldmVuIGludGVnZXIgKOKJpTIpIGZvciB0aGUgc2NhbGVyLlxuZnVuY3Rpb24gZXZlbihuOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCByID0gTWF0aC5yb3VuZChuKTtcbiAgcmV0dXJuIE1hdGgubWF4KDIsIHIgLSAociAlIDIpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBGcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuIERldGVybWluaXN0aWMtb25seSAocmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2ssIG5vIGZyYW1lIHByb3RvY29sKS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGcmFtZVByb3RvY29sKHVzZUlubmVyUHJveHk6IGJvb2xlYW4pOiBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBmcyA9IG5ldyBGcmFtZVNlcnZlcih1c2VJbm5lclByb3h5KTtcbiAgcHJvdG9jb2wuaGFuZGxlKFNDSEVNRSwgYXN5bmMgKHJlcSkgPT4ge1xuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYCR7cmVxLm1ldGhvZH0gJHt1cmwuaG9zdG5hbWV9JHt1cmwuc2VhcmNofWApO1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKHVybC5ob3N0bmFtZSkge1xuICAgICAgICBjYXNlIFwib3BlblwiOlxuICAgICAgICAgIHJldHVybiBqc29uT2soXG4gICAgICAgICAgICBhd2FpdCBmcy5vcGVuKHtcbiAgICAgICAgICAgICAgc3JjOiB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiLFxuICAgICAgICAgICAgICBmcHM6IGludCh1cmwsIFwiZnBzXCIsIDMwKSxcbiAgICAgICAgICAgICAgZHN0VzogaW50KHVybCwgXCJ3XCIsIDApLFxuICAgICAgICAgICAgICBkc3RIOiBpbnQodXJsLCBcImhcIiwgMCksXG4gICAgICAgICAgICAgIGZpdDogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJmaXRcIikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImZyYW1lXCI6XG4gICAgICAgICAgcmV0dXJuIHJnYmFPayhhd2FpdCBmcy5nZXRGcmFtZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIsIGludCh1cmwsIFwiaWR4XCIsIDEpKSk7XG4gICAgICAgIGNhc2UgXCJzdHViXCI6XG4gICAgICAgICAgcmV0dXJuIHdlYm1Payhhd2FpdCBmcy5zdHViKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIpKTtcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgICAgYXdhaXQgZnMuY2xvc2UodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGB1bmtub3duIGFjdGlvbjogJHt1cmwuaG9zdG5hbWV9YCwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDQsXG4gICAgICAgICAgICBoZWFkZXJzOiBDT1JTX0hFQURFUlMsXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgYCR7dXJsLmhvc3RuYW1lfSBmYWlsZWQke3VybC5zZWFyY2h9OiAke21zZ31gKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobXNnLCB7IHN0YXR1czogNTAwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IHtcbiAgICAgIHByb3RvY29sLnVuaGFuZGxlKFNDSEVNRSk7XG4gICAgICBhd2FpdCBmcy5jbG9zZUFsbCgpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGpzb25PayhtZXRhOiBWaWRlb01ldGEpOiBSZXNwb25zZSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkobWV0YSksIHtcbiAgICBoZWFkZXJzOiB7IC4uLkNPUlNfSEVBREVSUywgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgfSk7XG59XG5cbi8vIENhY2hlZCBzdHViIEJ1ZmZlciBpcyBzaGFyZWQgYWNyb3NzIHJlc3BvbnNlcyDigJQgY29weSBzbyBhIGNvbnN1bWVyIGNhbid0IGRldGFjaCBpdC5cbmZ1bmN0aW9uIHdlYm1PayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidmlkZW8vd2VibVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gUmF3IFJHQkEgcGl4ZWxzOyB0aGUgcGFnZSB3cmFwcyB0aGVtIGluIEltYWdlRGF0YSB1c2luZyBtZXRhLndpZHRoL2hlaWdodCBpdCBnb3QgZnJvbSBgb3BlbmAuXG5mdW5jdGlvbiByZ2JhT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiA0MTAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgfVxuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnQodXJsOiBVUkwsIGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgdiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG4gIGNvbnN0IG4gPSB2ID8gcGFyc2VJbnQodiwgMTApIDogTmFOO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93LCBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYWR2YW5jZVZpcnR1YWxUaW1lLCBwYXVzZVZpcnR1YWxUaW1lLCByZWJ1aWxkRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtTdGF0cyB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvYmxhbmtcIjtcbmltcG9ydCB7IERyb3BTdGF0cywgSkFOS19XQVJOX1NDT1JFIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9kcm9wXCI7XG5pbXBvcnQgeyBwZXJpb2RpY2FsIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBkcmF3U3RlZ28sIEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCB3YWl0U3RlZ29UaWNrIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyB1c2VGcmFtZVByb3RvY29sIH0gZnJvbSBcIi4vdmlkZW8vcHJvdG9jb2xcIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbU2hvb3RdXCI7XG5jb25zdCBSRU5ERVJfRlBTID0gMjQwO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIHNpemU6IFNpemU7XG4gIG1zOiBudW1iZXI7XG59XG5cbi8vIFBhaW50aW5nIHN0YXlzIG9uIGZvciB0aGUgd2hvbGUgcnVuOyB3YWl0cyBmb3IgdGhlIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIGBtc2AsIHVuZGVmaW5lZCBvbiB0aW1lb3V0LlxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyB3aW4sIGZwcywgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IGNsZWFyRGlydHlDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgMSB9O1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiB1bmtub3duLCBfZDogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEZWNvZGUgZnJvbSBhIDItcm93IHNsaXZlciBmaXJzdDsgdGhlIGZ1bGwtZnJhbWUgcmVhZGJhY2sgKH44TUIgbWVtY3B5KSBpcyBwYWlkIG9ubHkgb24gdGhlIG1hdGNoaW5nIGZyYW1lLlxuICAgICAgICBjb25zdCBzbGl2ZXIgPSBpbWFnZS5jcm9wKHsgeDogMCwgeTogZnJhbWVTaXplLmhlaWdodCAtIDIsIHdpZHRoOiBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgaGVpZ2h0OiAyIH0pO1xuICAgICAgICBjb25zdCB0cyA9IGRlY29kZVN0ZWdvKHNsaXZlci50b0JpdG1hcCgpLCB7IHdpZHRoOiBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgaGVpZ2h0OiAyIH0pO1xuICAgICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCB8fCBNYXRoLmFicyh0cyAtIG1zKSA+IDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBzaXplLmhlaWdodCAqIHNpemUud2lkdGggKiA0KSk7XG4gICAgICB9O1xuICAgICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICBjbGVhckRpcnR5Q2hlY2sgPSBwZXJpb2RpY2FsKGFzeW5jIChzdHVjaykgPT4ge1xuICAgICAgICBpZiAoc3R1Y2sgPj0gZnBzICogNSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFRBRywgYHBhaW50IHRpbWVvdXQgQCAke21zfWApO1xuICAgICAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3R1Y2sgJSBNYXRoLmZsb29yKGZwcyAvIDIpID09PSAwKSB7XG4gICAgICAgICAgYXdhaXQgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJEaXJ0eUNoZWNrPy4oKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZXMsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gd2lsbCBiZSBpZ25vcmVkIG9uIHRoaXMgbW9kZVwiKTtcbiAgfVxuICBjb25zdCB0YWtlciA9IG5ldyBTY3JlZW5zaG90VGFrZXIoeyBtYXJrczogb3B0aW9ucy5zY3JlZW5zaG90cywgd2lkdGgsIGhlaWdodCwgb3V0RmlsZXMgfSk7XG5cbiAgYXdhaXQgdXNpbmcgXyA9IHVzZUZyYW1lUHJvdG9jb2wob3B0aW9ucy51c2VJbm5lclByb3h5KTtcbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZXMsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHdpbiA9IGF3YWl0IHdpblA7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiaW5pdCBkb25lOlwiLCB7IHNvdXJjZSwgY29zdDogTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHRJbml0KSB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGhlbGQgPSAwO1xuICBsZXQgbGFzdEJpdG1hcDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IERyb3BTdGF0cyhmcHMpO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICAvLyBDb21wb3NpdG9yL2NhcHR1cmUgY2FkZW5jZSBjYXAsIE5PVCBvdXRwdXQgZnBzOyBmcmFtZXMgYXJlIGRhbWFnZS1kcml2ZW4gcGVyIHZpcnR1YWwgc3RlcC5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKFJFTkRFUl9GUFMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgLy8gQXJtIGJlZm9yZSBkcmF3U3RlZ28gc28gdGhlIGNvbW1pdCBhY2sgY2FuJ3QgYmUgbWlzc2VkOyBicmFuY2ggY2F0Y2gga2VlcHMgYW4gZWFybHkgdGljayBmYWlsdXJlIGZyb20gb3JwaGFuaW5nIGl0LlxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIHN3YXBwZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgLy8gSW5kZXBlbmRlbnQgdGFyZ2V0cyAoaWZyYW1lIGNsb2NrIHZzIG1haW4tZnJhbWUgc3RlZ28gY2FudmFzKTogb25lIGNvbmN1cnJlbnQgaG9wIGluc3RlYWQgb2YgdHdvIHNlcmlhbCBvbmVzLlxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RpY2soeyBmcmFtZTogaWZyYW1lLCB0aW1lc3RhbXBNczogZnJhbWVNcywgc2lnbmFsIH0pLCBkcmF3U3RlZ28od2luLndlYkNvbnRlbnRzLCBmcmFtZU1zKV0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW2FkdmFuY2VWaXJ0dWFsVGltZShjZHAsIGZyYW1lSW50ZXJ2YWwpLCBzd2FwcGVkXSk7XG4gICAgICBjb25zdCBwYWludGVkID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIGZwcywgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICBpZiAocGFpbnRlZCkge1xuICAgICAgICBoZWxkID0gMDtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxkKys7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgYml0bWFwID0gcGFpbnRlZCA/PyBsYXN0Qml0bWFwO1xuICAgICAgaWYgKCFiaXRtYXAgfHwgaGVsZCA+PSBmcHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZW5kZXJlciBleGF1c3RlZCBAICR7ZnJhbWVNc31gKTtcbiAgICAgIH1cbiAgICAgIGxhc3RCaXRtYXAgPSBiaXRtYXA7XG4gICAgICB0YWtlci5jYXB0dXJlKGZyYW1lTXMsIGJpdG1hcCk7XG4gICAgICBibGFua1N0YXRzLnNhbXBsZShiaXRtYXApO1xuICAgICAgLy8gRW5jb2RlIHdpdGhvdXQgYXdhaXRpbmcgKGxpbWl0ZXIgc2VyaWFsaXplcyksIHNvIGl0IG92ZXJsYXBzIHRoZSBuZXh0IGZyYW1lJ3MgQ0RQL3BhaW50IHNldHVwLlxuICAgICAgcGlwZWxpbmUuZW5jb2RlQkdSQShiaXRtYXApLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgICAgIHdyaXR0ZW4rKztcbiAgICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgICB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgICBzY3JlZW5zaG90cyA9IGF3YWl0IHRha2VyLmZpbmlzaChsYXN0Qml0bWFwKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvcikge1xuICAgIHRocm93IGVuY29kZUVycm9yO1xuICB9XG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZnJhbWVzIGhlbGQgcGFzdCBwYWludCB0aW1lb3V0YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgamFuaywgc2NyZWVuc2hvdHMgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyB0eXBlIElwY01zZywgSXBjTXNnVHlwZSwgSXBjV3JpdGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbnByb2Nlc3MuZW52W1wiRUxFQ1RST05fRElTQUJMRV9TRUNVUklUWV9XQVJOSU5HU1wiXSA9IFwiMVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5sZXQgZXhpdGluZyA9IGZhbHNlO1xuXG5zdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpO1xuTWVudS5zZXRBcHBsaWNhdGlvbk1lbnUobnVsbCk7XG5hcHAuZG9jaz8uaGlkZSgpO1xuYXBwLm9uKFwid2luZG93LWFsbC1jbG9zZWRcIiwgKCkgPT4ge30pO1xuYXBwLm9uKFwiZ3B1LWluZm8tdXBkYXRlXCIsIHByaW50RmVhdHVyZXMpO1xuYXBwLm9uKFwiYmVmb3JlLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5hcHAub24oXCJ3aWxsLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5cbm9rKHByb2Nlc3Muc2VuZCwgXCJpcGMgY2hhbm5lbCBtaXNzaW5nIOKAlCBzcGF3biB3aXRoIHN0ZGlvWzNdPSdpcGMnXCIpO1xucHJvY2Vzcy5vbmNlKFwiZGlzY29ubmVjdFwiLCAoKSA9PiBjdHJsLmFib3J0KFwiZGlzY29ubmVjdFwiKSk7XG5wcm9jZXNzLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gIGlmIChtc2cudHlwZSA9PT0gSXBjTXNnVHlwZS5DYW5jZWwpIHtcbiAgICBjdHJsLmFib3J0KG1zZy5yZWFzb24pO1xuICB9XG59KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGlwYyA9IG5ldyBJcGNXcml0ZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgICAgc2V0dXBQdXBQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlcykge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgIG9uQ29uc29sZTogKGwsIG0pID0+IGlwYy53cml0ZUNvbnNvbGUobCwgbSksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZURvbmUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
|