pup-recorder 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +0,0 @@
1
- import'source-map-support/register.js';import {Log}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING}from'node-av/constants';import {createRequire}from'module';import {dirname,join}from'path';import d from'zod';import {rmSync}from'fs';import {mkdtemp}from'fs/promises';import {tmpdir,platform}from'os';import {HardwareContext}from'node-av/api';import {spawn}from'child_process';import Ne from'tree-kill';import {EventEmitter}from'events';var be=Object.create;var M=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var q=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),A=t=>{throw TypeError(t)};var Y=(t,e,r)=>e in t?M(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var Q=t=>[,,,be(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],E=t=>t!==void 0&&typeof t!="function"?A("Function expected"):t,ve=(t,e,r,o,n)=>({kind:X[t],name:e,metadata:o,addInitializer:s=>r._?A("Already initialized"):n.push(E(s||null))}),S=(t,e)=>Y(e,q("metadata"),t[3]),Z=(t,e,r,o)=>{for(var n=0,s=t[e>>1],l=s&&s.length;n<l;n++)s[n].call(r);return o},T=(t,e,r,o,n,s)=>{var i,p,v,x,a=e&7,C=false,m=false,k=2,P=X[a+5],fe=t[k]||(t[k]=[]),b=((n=n.prototype),we(n,r));for(var O=o.length-1;O>=0;O--)v=ve(a,r,p={},t[3],fe),(v.static=C,v.private=m,x=v.access={has:u=>r in u},(x.get=u=>u[r]),a>2),i=(0, o[O])(b[P],v),p._=1,E(i)&&(b[P]=i);return b&&M(n,r,b),n},ee=(t,e,r)=>Y(t,e+"",r);var re=class{_written=0;_shown=false;_total;_out;_tty;_showCount;constructor(e){this._total=e.total,this._out=e.out,this._tty=!!e.out.isTTY,this._showCount=e.showCount??false;}get total(){return this._total}update(e){this._written=Math.min(this._total,Math.max(0,e)),this.render();}updatePercent(e){this.update(Math.round(e/100*this._total));}clear(){this._tty&&this._shown&&this._out.write("\r\x1B[2K");}redraw(){this.render();}log(e){this.clear(),this._out.write(`${e}
2
- `),this.redraw();}finish(e){this.clear(),this._out.write(`${e}
3
- `),this._shown=false;}render(){if(!this._tty||this._written===0&&!this._shown)return;let e=this._total>0?this._written/this._total:0,r=Math.round(e*40),o="#".repeat(r)+"-".repeat(40-r),n=Math.round(e*100),s=this._showCount?`${this._written}/${this._total} (${n}%)`:`${n}%`;this._out.write(`\r[${o}] ${s}`),this._shown=true;}};function ze(t){let e=r=>(...o)=>{t.clear(),r(...o),t.redraw();};return {debug:e(console.debug),info:e(console.info),warn:e(console.warn),error:e(console.error)}}function te(t,e,r){try{return e(process.env[t])}catch{return r}}function oe(t){if(typeof t=="number")return t;let e=Number(t);if(Number.isNaN(e))throw new Error(`Value ${t} is not a valid number`);return e}var _e=createRequire(import.meta.url),R=te("PUP_LOG_LEVEL",oe,2),F=dirname(_e.resolve("pup-recorder/package.json")),ne=join(F,"dist","app.cjs");join(F,"dist","runtime","audio_preload.cjs");join(F,"dist","runtime","iframe_preload.cjs");var N="<pup@debug>",U="<pup@info>",H="<pup@warn>",W="<pup@error>",j="<pup@fatal>";function I(t,e){return function(...r){let o=r.map(n=>n instanceof Error?n.stack??String(n):n);return t.call(this,...o)}}var se,ie,ae,le,pe,y;pe=[I],le=[I],ae=[I],ie=[I],se=[I];var w=class{constructor(e=R){this._level=e;Z(y,5,this);ee(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 r=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,s=e.error??console.error,l=this._level;this._impl={debug:l>=3?r:void 0,info:l>=2?o:void 0,warn:l>=1?n:void 0,error:l>=0?s:void 0};}debug(...e){this.impl?.debug?.(N,...e);}info(...e){this.impl?.info?.(U,...e);}warn(...e){this.impl?.warn?.(H,...e);}error(...e){this.impl?.error?.(W,...e);}fatal(...e){this.impl?.error?.(j,...e),process.exit(1);}dispatch(e){let r=e.trimEnd();r.startsWith(N)?this.debug(r.slice(N.length+1)):r.startsWith(U)?this.info(r.slice(U.length+1)):r.startsWith(H)?this.warn(r.slice(H.length+1)):r.startsWith(W)?this.error(r.slice(W.length+1)):this.info(r);}attach(e,r){return new Promise((o,n)=>{this.debug(`${r}.attach`);let s="",l=i=>{let p=i.toString();p.startsWith(j)?s+=p.slice(j.length+1):this.dispatch(p);};e.stderr?.on("data",l),e.stdout?.on("data",l),e.on("error",i=>{s+=i.message,e.kill();}).once("close",(i,p)=>{i||p||s?(s||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:i,signal:p,fatal:s}),n(new Error(s))):(this.debug(`${r}.close`),o());}).on("unhandledRejection",i=>{this.error(`${r}.unhandled`,i);}).on("uncaughtExceptionMonitor",i=>{this.error(`${r}.unhandled`,i);});})}};y=Q(),T(y,1,"debug",pe,w),T(y,1,"info",le,w),T(y,1,"warn",ae,w),T(y,1,"error",ie,w),T(y,1,"fatal",se,w),S(y,w);var c=new w;Log.setCallback((t,e)=>{let r=e.trimEnd();r&&(t<=AV_LOG_ERROR?c.error(r):t<=AV_LOG_WARNING&&c.warn(r));});function hr(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Ae=1920,Ie=1080,Re=30,De=5,Oe=10,Le="out/html.mp4,out/html.webm",vr=d.object({duration:d.number().describe("Duration in seconds"),width:d.number().describe("Video width"),height:d.number().describe("Video height"),fps:d.number().describe("Frames per second"),withAudio:d.boolean().describe("Capture and encode audio"),outFile:d.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:d.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:d.boolean().describe("Render by frame rather than recording"),disableGpu:d.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:d.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:d.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:d.number().describe("Window load timeout in seconds")}),ce={width:Ae,height:Ie,fps:Re,duration:De,outFile:Le,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Oe};var Se="[HWAccel]";async function $e(){let t=HardwareContext.auto(),e=t!==null;return t?.dispose(),e}var ue=$e().then(t=>(c.debug(Se,"gpu:",t),t));async function de(t){let e=["no-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","deny-permission-prompts","use-mock-keychain","force-device-scale-factor=1","force-color-profile=srgb","ignore-gpu-blocklist","use-gl=angle","deterministic-mode","enable-begin-frame-control","disable-new-content-rendering-timeout","run-all-compositor-stages-before-draw","disable-threaded-animation","disable-threaded-scrolling","disable-checker-imaging","disable-image-animation-resync","enable-surface-synchronization","font-render-hinting=none","disable-background-networking","js-flags=--max-old-space-size=512","renderer-process-limit=1","num-raster-threads=2","disable-background-timer-throttling","disable-renderer-backgrounding","disable-backgrounding-occluded-windows","enable-logging=stderr"];R>=3?e.push("log-level=0","v=1"):e.push("log-level=3");let r=["FontationBackend"];if(!(await ue&&!t))e.push("use-angle=swiftshader","enable-unsafe-swiftshader");else {e.push("disable-gpu-sandbox","enable-unsafe-webgpu");let n=platform();n==="darwin"?e.push("use-angle=metal"):n==="win32"?e.push("use-angle=d3d11"):(e.push("use-angle=vulkan","disable-vulkan-surface"),r.push("Vulkan"));}return e.push(`enable-features=${r.join(",")}`),e}var B="--pup-priv-args";function Mr(){let t=process.argv,e=t.find(o=>o.startsWith(B));if(!e)return c.debug("procargv",t),process.argv;let r=["exec",...t.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),r.push(...JSON.parse(e)),c.debug("pupargs",r),r}function me(t,e){let r=t.split(" ").filter(i=>i.length),[o,...n]=r;if(!o)throw new Error("empty command");let s=spawn(o,n,{stdio:"inherit",...e}),l=false;return {process:s,wait:c.attach(s,o),get killed(){return l},kill(){if(l)return;l=true;let i=s.pid;i?Ne(i,"SIGKILL"):s.kill("SIGKILL");}}}async function Be(t){return [...await de(t),"headless=new"]}var ge="[Electron]";async function he({args:t}){let{default:e}=await import('electron'),r=await Be(t.includes("--disable-gpu")),o=await mkdtemp(join(tmpdir(),"pup-profile-")),n=r.map(p=>`--${p}`);n.push(`--user-data-dir=${o}`),n.push(`${B}=${Buffer.from(JSON.stringify(t)).toString("base64")}`);let s=[e,...n,ne].join(" ");c.debug(ge,s);let l={...process.env,RUST_BACKTRACE:"full"},i=me(s,{stdio:["ignore","pipe","pipe","ipc"],env:l});return i.process.once("exit",()=>{try{rmSync(o,{recursive:!0,force:!0});}catch(p){c.warn(ge,"profile cleanup failed:",p);}}),i}var D=class extends EventEmitter{constructor(e){super(),e.on("message",r=>{let o=r;switch(o.type){case "console":{this.emit("console",o.level,o.message);break}case "progress":{this.emit("progress",o.value);break}case "done":{this.emit("done",o.payload);break}case "error":{this.emit("error",new Error(o.error));break}}}),e.once("exit",r=>this.emit("close",r));}};var V="[pup]";async function Je(t,e){c.debug(V,"runPupApp",t,e);let r=[t,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--window-timeout",`${e.windowTimeout}`,"--out-file",`${e.outFile}`];return e.withAudio&&r.push("--with-audio"),e.useInnerProxy&&r.push("--use-inner-proxy"),e.deterministic&&r.push("--deterministic"),e.disableGpu&&r.push("--disable-gpu"),e.disableHwCodec&&r.push("--disable-hw-codec"),e.windowTolerant&&r.push("--window-tolerant"),he({args:r})}var f=ce;async function rt(t,e){c.debug(V,"pup",t,e);let{signal:r}=e;r?.throwIfAborted();let o=e.outFile??f.outFile,n={width:e.width??f.width,height:e.height??f.height,fps:e.fps??f.fps,duration:e.duration??f.duration,withAudio:e.withAudio??f.withAudio,useInnerProxy:e.useInnerProxy??f.useInnerProxy,deterministic:e.deterministic??f.deterministic,disableGpu:e.disableGpu??f.disableGpu,disableHwCodec:e.disableHwCodec??f.disableHwCodec,windowTolerant:e.windowTolerant??f.windowTolerant,windowTimeout:e.windowTimeout??f.windowTimeout,outFile:o},s=performance.now(),l=0,i=a=>{l=a,e.onProgress?.(a);},p=await Je(t,n),v,x=()=>{p.process.send?.({type:"cancel",reason:String(r?.reason??"abort")}),v=setTimeout(()=>p.kill(),5e3);};r?.addEventListener("abort",x,{once:true});try{let a=new Promise((m,k)=>{new D(p.process).on("close",P=>{let _=JSON.stringify({source:t,progress:l,code:P,killed:p.killed});k(new Error(`crashed: ${_}`));}).on("progress",i).on("console",(P,_)=>e.onConsole?.(P,_)).on("done",m).on("error",k);});i(0);let[C]=await Promise.all([a,p.wait]);return i(100),c.debug(V,`done ${o} in ${Math.round(performance.now()-s)}ms`),{...C,options:n}}catch(a){throw p.kill(),r?.throwIfAborted(),a}finally{clearTimeout(v),r?.removeEventListener("abort",x);}}export{re as a,ze as b,te as c,oe as d,w as e,c as f,hr as g,Mr as h,Ae as i,Ie as j,Re as k,De as l,Oe as m,vr as n,ce as o,rt as p};//# sourceMappingURL=chunk-LQ5XNASZ.js.map
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2NsaV91aS50cyIsIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vc3JjL2Jhc2UvY2hyb21pdW0udHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2VsZWN0cm9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9wdXAudHMiXSwibmFtZXMiOlsiUHJvZ3Jlc3NCYXIiLCJvcHRzIiwid3JpdHRlbiIsInBjdCIsImxpbmUiLCJyYXRpbyIsImZpbGxlZCIsImJhciIsInN1ZmZpeCIsImJhckxvZ2dlciIsIndyYXAiLCJmbiIsImFyZ3MiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsInB1cEFwcCIsImpvaW4iLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIm5vZXJyIiwicmV0IiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJUQUciLCJkZXRlY3RHUFVEcml2ZXIiLCJodyIsIkhhcmR3YXJlQ29udGV4dCIsInJlc3VsdCIsImNhbklVc2VHUFUiLCJjaHJvbWl1bU9wdGlvbnMiLCJkaXNhYmxlR3B1IiwiZmVhdHVyZXMiLCJwbGF0IiwicGxhdGZvcm0iLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiZXhlYyIsImNtZCIsIm9wdGlvbnMiLCJwYXJ0cyIsInMiLCJjb21tYW5kIiwic3Bhd24iLCJraWxsZWQiLCJwaWQiLCJ0cmVlS2lsbCIsImVsZWN0cm9uT3B0cyIsInJ1bkVsZWN0cm9uQXBwIiwiZWxlY3Ryb24iLCJwcm9maWxlRGlyIiwibWtkdGVtcCIsInRtcGRpciIsImVsZWN0cm9uQXJncyIsImEiLCJlbnYiLCJoYW5kbGUiLCJybVN5bmMiLCJlIiwiSXBjUmVhZGVyIiwiRXZlbnRFbWl0dGVyIiwiY2hpbGQiLCJyYXciLCJjIiwicnVuUHVwQXBwIiwic291cmNlIiwicmVuZGVyIiwiZCIsInB1cCIsIm91dEZpbGUiLCJyZW5kZXJPcHRzIiwidDAiLCJwcm9ncmVzcyIsInRpY2siLCJwIiwia2lsbFRpbWVyIiwib25BYm9ydCIsImwiLCJtIiwic3VtbWFyeSJdLCJtYXBwaW5n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QyxDQUNGIiwiZmlsZSI6ImNodW5rLUxRNVhOQVNaLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8yNi5cblxuaW1wb3J0IHR5cGUgeyBMb2dnZXJMaWtlIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBCQVJfV0lEVEggPSA0MDtcblxuaW50ZXJmYWNlIEJhck9wdGlvbnMge1xuICB0b3RhbDogbnVtYmVyO1xuICBvdXQ6IE5vZGVKUy5Xcml0ZVN0cmVhbTtcbiAgc2hvd0NvdW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQmFyIHtcbiAgcHJpdmF0ZSBfd3JpdHRlbiA9IDA7XG4gIHByaXZhdGUgX3Nob3duID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RvdGFsOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX291dDogTm9kZUpTLldyaXRlU3RyZWFtO1xuICBwcml2YXRlIHJlYWRvbmx5IF90dHk6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nob3dDb3VudDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcHRzOiBCYXJPcHRpb25zKSB7XG4gICAgdGhpcy5fdG90YWwgPSBvcHRzLnRvdGFsO1xuICAgIHRoaXMuX291dCA9IG9wdHMub3V0O1xuICAgIHRoaXMuX3R0eSA9ICEhb3B0cy5vdXQuaXNUVFk7XG4gICAgdGhpcy5fc2hvd0NvdW50ID0gb3B0cy5zaG93Q291bnQgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgdG90YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWw7XG4gIH1cblxuICB1cGRhdGUod3JpdHRlbjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fd3JpdHRlbiA9IE1hdGgubWluKHRoaXMuX3RvdGFsLCBNYXRoLm1heCgwLCB3cml0dGVuKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwZGF0ZVBlcmNlbnQocGN0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZShNYXRoLnJvdW5kKChwY3QgLyAxMDApICogdGhpcy5fdG90YWwpKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90dHkgJiYgdGhpcy5fc2hvd24pIHtcbiAgICAgIHRoaXMuX291dC53cml0ZShcIlxcclxceDFiWzJLXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJlZHJhdygpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbG9nKGxpbmU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLl9vdXQud3JpdGUoYCR7bGluZX1cXG5gKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9XG5cbiAgZmluaXNoKGxpbmU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLl9vdXQud3JpdGUoYCR7bGluZX1cXG5gKTtcbiAgICB0aGlzLl9zaG93biA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90dHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dyaXR0ZW4gPT09IDAgJiYgIXRoaXMuX3Nob3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJhdGlvID0gdGhpcy5fdG90YWwgPiAwID8gdGhpcy5fd3JpdHRlbiAvIHRoaXMuX3RvdGFsIDogMDtcbiAgICBjb25zdCBmaWxsZWQgPSBNYXRoLnJvdW5kKHJhdGlvICogQkFSX1dJRFRIKTtcbiAgICBjb25zdCBiYXIgPSBcIiNcIi5yZXBlYXQoZmlsbGVkKSArIFwiLVwiLnJlcGVhdChCQVJfV0lEVEggLSBmaWxsZWQpO1xuICAgIGNvbnN0IHBjdCA9IE1hdGgucm91bmQocmF0aW8gKiAxMDApO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMuX3Nob3dDb3VudCA/IGAke3RoaXMuX3dyaXR0ZW59LyR7dGhpcy5fdG90YWx9ICgke3BjdH0lKWAgOiBgJHtwY3R9JWA7XG4gICAgdGhpcy5fb3V0LndyaXRlKGBcXHJbJHtiYXJ9XSAke3N1ZmZpeH1gKTtcbiAgICB0aGlzLl9zaG93biA9IHRydWU7XG4gIH1cbn1cblxuLy8gQXJvdW5kIGVhY2ggY29uc29sZS4qIGNhbGwsIGNsZWFyIHRoZSBiYXIgbGluZSB0aGVuIHJlZHJhdyDigJQga2VlcHMgbmF0aXZlIGNvbnNvbGUgY29sb3JpbmcgaW50YWN0LlxuZXhwb3J0IGZ1bmN0aW9uIGJhckxvZ2dlcihiYXI6IFByb2dyZXNzQmFyKTogTG9nZ2VyTGlrZSB7XG4gIGNvbnN0IHdyYXAgPVxuICAgIDxUIGV4dGVuZHMgKC4uLmE6IHVua25vd25bXSkgPT4gdm9pZD4oZm46IFQpID0+XG4gICAgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgYmFyLmNsZWFyKCk7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIGJhci5yZWRyYXcoKTtcbiAgICB9O1xuICByZXR1cm4ge1xuICAgIGRlYnVnOiB3cmFwKGNvbnNvbGUuZGVidWcpLFxuICAgIGluZm86IHdyYXAoY29uc29sZS5pbmZvKSxcbiAgICB3YXJuOiB3cmFwKGNvbnNvbGUud2FybiksXG4gICAgZXJyb3I6IHdyYXAoY29uc29sZS5lcnJvciksXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cEF1ZGlvUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImF1ZGlvX3ByZWxvYWQuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cElmcmFtZVByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJpZnJhbWVfcHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSB7XG4gICAgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIH0gZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIHtcbiAgICBsb2dnZXIud2Fybihtc2cpO1xuICB9XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJTkRPV19USU1FT1VUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0L2h0bWwubXA0LG91dC9odG1sLndlYm1cIjtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29tbWEtc2VwYXJhdGVkIG91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG4gIHdpbmRvd1RpbWVvdXQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJXaW5kb3cgbG9hZCB0aW1lb3V0IGluIHNlY29uZHNcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIHJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBibGFuazogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG4gIHdpbmRvd1RpbWVvdXQ6IERFRkFVTFRfV0lORE9XX1RJTUVPVVQsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0hXQWNjZWxdXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdEdQVURyaXZlcigpIHtcbiAgY29uc3QgaHcgPSBIYXJkd2FyZUNvbnRleHQuYXV0bygpO1xuICBjb25zdCByZXN1bHQgPSBodyAhPT0gbnVsbDtcbiAgaHc/LmRpc3Bvc2UoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGNhbklVc2VHUFUgPSBkZXRlY3RHUFVEcml2ZXIoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHU6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjYW5JVXNlR1BVIH0gZnJvbSBcIi4vaHdhY2NlbFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hyb21pdW1PcHRpb25zKGRpc2FibGVHcHU6IGJvb2xlYW4pIHtcbiAgY29uc3Qgb3B0cyA9IFtcbiAgICAvLyDlrrnlmajmspnnrrFcbiAgICBcIm5vLXNhbmRib3hcIixcbiAgICBcImRpc2FibGUtZGV2LXNobS11c2FnZVwiLFxuICAgIC8vIOi3qOWfny/lronlhahcbiAgICBcImRpc2FibGUtd2ViLXNlY3VyaXR5XCIsXG4gICAgXCJkaXNhYmxlLXNpdGUtaXNvbGF0aW9uLXRyaWFsc1wiLFxuICAgIFwiaWdub3JlLWNlcnRpZmljYXRlLWVycm9yc1wiLFxuICAgIC8vIOW9leWItuihjOS4ulxuICAgIFwiZGlzYWJsZS1ibGluay1mZWF0dXJlcz1BdXRvbWF0aW9uQ29udHJvbGxlZFwiLFxuICAgIFwibXV0ZS1hdWRpb1wiLFxuICAgIFwiYXV0b3BsYXktcG9saWN5PW5vLXVzZXItZ2VzdHVyZS1yZXF1aXJlZFwiLFxuICAgIFwiZGlzYWJsZS1leHRlbnNpb25zXCIsXG4gICAgXCJkZW55LXBlcm1pc3Npb24tcHJvbXB0c1wiLFxuICAgIFwidXNlLW1vY2sta2V5Y2hhaW5cIixcbiAgICAvLyDmuLLmn5NcbiAgICBcImZvcmNlLWRldmljZS1zY2FsZS1mYWN0b3I9MVwiLFxuICAgIFwiZm9yY2UtY29sb3ItcHJvZmlsZT1zcmdiXCIsXG4gICAgXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiLFxuICAgIFwidXNlLWdsPWFuZ2xlXCIsXG4gICAgXCJkZXRlcm1pbmlzdGljLW1vZGVcIixcbiAgICBcImVuYWJsZS1iZWdpbi1mcmFtZS1jb250cm9sXCIsXG4gICAgXCJkaXNhYmxlLW5ldy1jb250ZW50LXJlbmRlcmluZy10aW1lb3V0XCIsXG4gICAgXCJydW4tYWxsLWNvbXBvc2l0b3Itc3RhZ2VzLWJlZm9yZS1kcmF3XCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLWFuaW1hdGlvblwiLFxuICAgIFwiZGlzYWJsZS10aHJlYWRlZC1zY3JvbGxpbmdcIixcbiAgICBcImRpc2FibGUtY2hlY2tlci1pbWFnaW5nXCIsXG4gICAgXCJkaXNhYmxlLWltYWdlLWFuaW1hdGlvbi1yZXN5bmNcIixcbiAgICBcImVuYWJsZS1zdXJmYWNlLXN5bmNocm9uaXphdGlvblwiLFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wdXBwZXRlZXIvcHVwcGV0ZWVyL2lzc3Vlcy8yNDEwXG4gICAgXCJmb250LXJlbmRlci1oaW50aW5nPW5vbmVcIixcbiAgICAvLyDotYTmupDmjqfliLZcbiAgICBcImRpc2FibGUtYmFja2dyb3VuZC1uZXR3b3JraW5nXCIsXG4gICAgXCJqcy1mbGFncz0tLW1heC1vbGQtc3BhY2Utc2l6ZT01MTJcIixcbiAgICBcInJlbmRlcmVyLXByb2Nlc3MtbGltaXQ9MVwiLFxuICAgIFwibnVtLXJhc3Rlci10aHJlYWRzPTJcIixcbiAgICBcImRpc2FibGUtYmFja2dyb3VuZC10aW1lci10aHJvdHRsaW5nXCIsXG4gICAgXCJkaXNhYmxlLXJlbmRlcmVyLWJhY2tncm91bmRpbmdcIixcbiAgICBcImRpc2FibGUtYmFja2dyb3VuZGluZy1vY2NsdWRlZC13aW5kb3dzXCIsXG4gICAgLy8g5pel5b+X6L+96LiqXG4gICAgXCJlbmFibGUtbG9nZ2luZz1zdGRlcnJcIixcbiAgXTtcblxuICBpZiAocHVwTG9nTGV2ZWwgPj0gMykge1xuICAgIG9wdHMucHVzaChcImxvZy1sZXZlbD0wXCIsIFwidj0xXCIpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMucHVzaChcImxvZy1sZXZlbD0zXCIpO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBbXCJGb250YXRpb25CYWNrZW5kXCJdO1xuICBjb25zdCBlbmFibGVHcHUgPSAoYXdhaXQgY2FuSVVzZUdQVSkgJiYgIWRpc2FibGVHcHU7XG4gIGlmICghZW5hYmxlR3B1KSB7XG4gICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPXN3aWZ0c2hhZGVyXCIsIFwiZW5hYmxlLXVuc2FmZS1zd2lmdHNoYWRlclwiKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLnB1c2goXCJkaXNhYmxlLWdwdS1zYW5kYm94XCIsIFwiZW5hYmxlLXVuc2FmZS13ZWJncHVcIik7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgaWYgKHBsYXQgPT09IFwiZGFyd2luXCIpIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1tZXRhbFwiKTtcbiAgICB9IGVsc2UgaWYgKHBsYXQgPT09IFwid2luMzJcIikge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPWQzZDExXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9dnVsa2FuXCIsIFwiZGlzYWJsZS12dWxrYW4tc3VyZmFjZVwiKTtcbiAgICAgIGZlYXR1cmVzLnB1c2goXCJWdWxrYW5cIik7XG4gICAgfVxuICB9XG5cbiAgb3B0cy5wdXNoKGBlbmFibGUtZmVhdHVyZXM9JHtmZWF0dXJlcy5qb2luKFwiLFwiKX1gKTtcbiAgcmV0dXJuIG9wdHM7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICB9XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkge1xuICAgICAgICB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmltcG9ydCB7IHJtU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBta2R0ZW1wIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY2hyb21pdW1PcHRpb25zIH0gZnJvbSBcIi4uL2Jhc2UvY2hyb21pdW1cIjtcbmltcG9ydCB7IHB1cEFwcCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlYywgUFVQX0FSR1NfS0VZIH0gZnJvbSBcIi4uL2Jhc2UvcHJvY2Vzc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWxlY3Ryb25PcHRzKGRpc2FibGVHcHU6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIFsuLi4oYXdhaXQgY2hyb21pdW1PcHRpb25zKGRpc2FibGVHcHUpKSwgXCJoZWFkbGVzcz1uZXdcIl07XG59XG5cbmNvbnN0IFRBRyA9IFwiW0VsZWN0cm9uXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkVsZWN0cm9uQXBwT3B0aW9ucyB7XG4gIGFyZ3M6IHVua25vd25bXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkVsZWN0cm9uQXBwKHsgYXJncyB9OiBSdW5FbGVjdHJvbkFwcE9wdGlvbnMpIHtcbiAgLy8gTGF6eTogZWxlY3Ryb24ncyBlbnRyeSB0aHJvd3MgaWYgdGhlIGJpbmFyeSBpcyBhYnNlbnQsIHNvIHV0aWwtb25seSBjb25zdW1lcnMgbXVzdCBub3QgbG9hZCBpdCBhdCBpbXBvcnQgdGltZS5cbiAgY29uc3QgeyBkZWZhdWx0OiBlbGVjdHJvbiB9ID0gYXdhaXQgaW1wb3J0KFwiZWxlY3Ryb25cIik7XG4gIGNvbnN0IG9wdHMgPSBhd2FpdCBlbGVjdHJvbk9wdHMoYXJncy5pbmNsdWRlcyhcIi0tZGlzYWJsZS1ncHVcIikpO1xuICAvLyBQZXItcHJvY2VzcyBwcm9maWxlOiBpc29sYXRlcyB0aGlzIGNhbGwncyBDaHJvbWl1bSBjYWNoZSAod2FybXVwIHdpbmRvd3Mgc2hhcmUgaXQgdmlhIGRlZmF1bHRTZXNzaW9uKSwgd2lwZWQgb24gZXhpdC5cbiAgY29uc3QgcHJvZmlsZURpciA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgXCJwdXAtcHJvZmlsZS1cIikpO1xuICBjb25zdCBlbGVjdHJvbkFyZ3MgPSBvcHRzLm1hcCgoYSkgPT4gYC0tJHthfWApO1xuICBlbGVjdHJvbkFyZ3MucHVzaChgLS11c2VyLWRhdGEtZGlyPSR7cHJvZmlsZURpcn1gKTtcbiAgZWxlY3Ryb25BcmdzLnB1c2goYCR7UFVQX0FSR1NfS0VZfT0ke0J1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGFyZ3MpKS50b1N0cmluZyhcImJhc2U2NFwiKX1gKTtcbiAgY29uc3QgY21kID0gW2VsZWN0cm9uLCAuLi5lbGVjdHJvbkFyZ3MsIHB1cEFwcF0uam9pbihcIiBcIik7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGNtZCk7XG5cbiAgY29uc3QgZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHsgLi4ucHJvY2Vzcy5lbnYsIFJVU1RfQkFDS1RSQUNFOiBcImZ1bGxcIiB9O1xuICBjb25zdCBoYW5kbGUgPSBleGVjKGNtZCwgeyBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIiwgXCJpcGNcIl0sIGVudiB9KTtcbiAgaGFuZGxlLnByb2Nlc3Mub25jZShcImV4aXRcIiwgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBybVN5bmMocHJvZmlsZURpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgXCJwcm9maWxlIGNsZWFudXAgZmFpbGVkOlwiLCBlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGFuZGxlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcblxuZXhwb3J0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ29uc29sZSA9IFwiY29uc29sZVwiLFxuICBQcm9ncmVzcyA9IFwicHJvZ3Jlc3NcIixcbiAgRG9uZSA9IFwiZG9uZVwiLFxuICBFcnJvciA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDYW5jZWwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgYmxhbms6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRG9uZTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVycm9yO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVycm9yLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRvbmUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ29uc29sZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlByb2dyZXNzOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRG9uZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FcnJvcjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgcnVuRWxlY3Ryb25BcHAgfSBmcm9tIFwiLi9yZW5kZXJlci9lbGVjdHJvblwiO1xuaW1wb3J0IHsgdHlwZSBJcGNEb25lUGF5bG9hZCwgSXBjTXNnVHlwZSwgSXBjUmVhZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQge1xuICB0eXBlIENvbnNvbGVDYWxsYmFjayxcbiAgZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gIHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayxcbiAgdHlwZSBSZW5kZXJPcHRpb25zLFxuICB0eXBlIFJlbmRlclJlc3VsdCxcbn0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW3B1cF1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQdXBPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxSZW5kZXJPcHRpb25zPiB7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgb25Db25zb2xlPzogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1cFJlc3VsdCBleHRlbmRzIFJlbmRlclJlc3VsdCB7fVxuXG5hc3luYyBmdW5jdGlvbiBydW5QdXBBcHAoc291cmNlOiBzdHJpbmcsIHJlbmRlcjogUmVuZGVyT3B0aW9ucykge1xuICBsb2dnZXIuZGVidWcoVEFHLCBgcnVuUHVwQXBwYCwgc291cmNlLCByZW5kZXIpO1xuXG4gIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW1xuICAgIHNvdXJjZSxcbiAgICBgLS13aWR0aGAsXG4gICAgYCR7cmVuZGVyLndpZHRofWAsXG4gICAgYC0taGVpZ2h0YCxcbiAgICBgJHtyZW5kZXIuaGVpZ2h0fWAsXG4gICAgYC0tZnBzYCxcbiAgICBgJHtyZW5kZXIuZnBzfWAsXG4gICAgYC0tZHVyYXRpb25gLFxuICAgIGAke3JlbmRlci5kdXJhdGlvbn1gLFxuICAgIGAtLXdpbmRvdy10aW1lb3V0YCxcbiAgICBgJHtyZW5kZXIud2luZG93VGltZW91dH1gLFxuICAgIGAtLW91dC1maWxlYCxcbiAgICBgJHtyZW5kZXIub3V0RmlsZX1gLFxuICBdO1xuICBpZiAocmVuZGVyLndpdGhBdWRpbykge1xuICAgIGFyZ3MucHVzaChgLS13aXRoLWF1ZGlvYCk7XG4gIH1cbiAgaWYgKHJlbmRlci51c2VJbm5lclByb3h5KSB7XG4gICAgYXJncy5wdXNoKGAtLXVzZS1pbm5lci1wcm94eWApO1xuICB9XG4gIGlmIChyZW5kZXIuZGV0ZXJtaW5pc3RpYykge1xuICAgIGFyZ3MucHVzaChgLS1kZXRlcm1pbmlzdGljYCk7XG4gIH1cbiAgaWYgKHJlbmRlci5kaXNhYmxlR3B1KSB7XG4gICAgYXJncy5wdXNoKGAtLWRpc2FibGUtZ3B1YCk7XG4gIH1cbiAgaWYgKHJlbmRlci5kaXNhYmxlSHdDb2RlYykge1xuICAgIGFyZ3MucHVzaChgLS1kaXNhYmxlLWh3LWNvZGVjYCk7XG4gIH1cbiAgaWYgKHJlbmRlci53aW5kb3dUb2xlcmFudCkge1xuICAgIGFyZ3MucHVzaChgLS13aW5kb3ctdG9sZXJhbnRgKTtcbiAgfVxuXG4gIHJldHVybiBydW5FbGVjdHJvbkFwcCh7IGFyZ3MgfSk7XG59XG5cbmNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1cChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUGFydGlhbDxQdXBPcHRpb25zPik6IFByb21pc2U8UHVwUmVzdWx0PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGBwdXBgLCBzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRpb25zO1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3Qgb3V0RmlsZSA9IG9wdGlvbnMub3V0RmlsZSA/PyBkLm91dEZpbGU7XG4gIGNvbnN0IHJlbmRlck9wdHM6IFJlbmRlck9wdGlvbnMgPSB7XG4gICAgd2lkdGg6IG9wdGlvbnMud2lkdGggPz8gZC53aWR0aCxcbiAgICBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0ID8/IGQuaGVpZ2h0LFxuICAgIGZwczogb3B0aW9ucy5mcHMgPz8gZC5mcHMsXG4gICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24gPz8gZC5kdXJhdGlvbixcbiAgICB3aXRoQXVkaW86IG9wdGlvbnMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgIHVzZUlubmVyUHJveHk6IG9wdGlvbnMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgZGV0ZXJtaW5pc3RpYzogb3B0aW9ucy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICBkaXNhYmxlR3B1OiBvcHRpb25zLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgIGRpc2FibGVId0NvZGVjOiBvcHRpb25zLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgd2luZG93VG9sZXJhbnQ6IG9wdGlvbnMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICB3aW5kb3dUaW1lb3V0OiBvcHRpb25zLndpbmRvd1RpbWVvdXQgPz8gZC53aW5kb3dUaW1lb3V0LFxuICAgIG91dEZpbGUsXG4gIH07XG5cbiAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgY29uc3QgdGljayA9IChwOiBudW1iZXIpID0+IHtcbiAgICBwcm9ncmVzcyA9IHA7XG4gICAgb3B0aW9ucy5vblByb2dyZXNzPy4ocCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlID0gYXdhaXQgcnVuUHVwQXBwKHNvdXJjZSwgcmVuZGVyT3B0cyk7XG5cbiAgbGV0IGtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgaGFuZGxlLnByb2Nlc3Muc2VuZD8uKHsgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWwsIHJlYXNvbjogU3RyaW5nKHNpZ25hbD8ucmVhc29uID8/IFwiYWJvcnRcIikgfSk7XG4gICAga2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBoYW5kbGUua2lsbCgpLCA1XzAwMCk7XG4gIH07XG4gIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPElwY0RvbmVQYXlsb2FkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBuZXcgSXBjUmVhZGVyKGhhbmRsZS5wcm9jZXNzKVxuICAgICAgICAub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IEpTT04uc3RyaW5naWZ5KHsgc291cmNlLCBwcm9ncmVzcywgY29kZSwga2lsbGVkOiBoYW5kbGUua2lsbGVkIH0pO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYGNyYXNoZWQ6ICR7bXNnfWApKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwicHJvZ3Jlc3NcIiwgdGljaylcbiAgICAgICAgLm9uKFwiY29uc29sZVwiLCAobCwgbSkgPT4gb3B0aW9ucy5vbkNvbnNvbGU/LihsLCBtKSlcbiAgICAgICAgLm9uKFwiZG9uZVwiLCByZXNvbHZlKVxuICAgICAgICAub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xuICAgIHRpY2soMCk7XG4gICAgY29uc3QgW3N1bW1hcnldID0gYXdhaXQgUHJvbWlzZS5hbGwoW3Jlc3VsdCwgaGFuZGxlLndhaXRdKTtcbiAgICB0aWNrKDEwMCk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGRvbmUgJHtvdXRGaWxlfSBpbiAke01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSB0MCl9bXNgKTtcbiAgICByZXR1cm4geyAuLi5zdW1tYXJ5LCBvcHRpb25zOiByZW5kZXJPcHRzIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGUua2lsbCgpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dChraWxsVGltZXIpO1xuICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICB9XG59XG4iXX0=
@@ -1,3 +0,0 @@
1
- 'use strict';require('source-map-support/register.js');function v(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,o=[],s={},a=1,m=()=>(r+=.01,r);function u(...i){return this instanceof u?i.length?new(Function.prototype.bind.apply(n,[null,...i])):new n(t+e+m()):new n(t+e).toString()}u.prototype=n.prototype,u.now=()=>t+e+m(),u.parse=n.parse,u.UTC=n.UTC,window.Date=u,performance.now=()=>e+m(),window.requestAnimationFrame=i=>{let c=a++;return o.push({id:c,cb:i}),c},window.cancelAnimationFrame=i=>{o=o.filter(c=>c.id!==i);},window.setTimeout=(i,c)=>{let d=a++;return s[d]={type:"timeout",cb:i,delay:c||0,next:e+(c||0)},d},window.clearTimeout=i=>{typeof i=="number"&&delete s[i];},window.setInterval=(i,c)=>{let d=a++,f=Math.max(c||0,1);return s[d]={type:"interval",cb:i,delay:f,next:e+f},d},window.clearInterval=i=>{typeof i=="number"&&delete s[i];};function h(i){try{typeof i=="string"?new Function(i)():i();}catch(c){console.error("[Tick] error:",c instanceof Error&&c.stack||c);}}function p(i,c){try{i(c);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let b=new WeakMap;function g(i){let c;try{c=document.getAnimations();}catch{return}for(let d of c){let f=d.playState;if(f==="idle"||f==="finished"){b.delete(d);continue}let T=typeof d.playbackRate=="number"?d.playbackRate:1;if(T===0)continue;let y=b.get(d);if(!y){let N=typeof d.currentTime=="number"?d.currentTime:0;y={startMs:i-N/T,pausedAccum:0,pausedAt:-1},b.set(d,y);}if(f==="paused"){y.pausedAt<0&&(y.pausedAt=i);continue}y.pausedAt>=0&&(y.pausedAccum+=i-y.pausedAt,y.pausedAt=-1),d.currentTime=(i-y.startMs-y.pausedAccum)*T;}}function w(i){e=i,r=0;for(let d of Object.keys(s)){let f=s[Number(d)];if(f)for(;f.next<=e;){if(h(f.cb),f.type==="timeout"){delete s[Number(d)];break}f.next+=f.delay;}}let c=o.splice(0);for(let d of c)p(d.cb,e);g(e);}window.__pup_tick__={process:w};}var $=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function R(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let u of $){if(u==="position"||u==="left"||u==="top"||u==="right"||u==="bottom")continue;let h=e.getPropertyValue(R(u));h&&t.style.setProperty(R(u),h);}let r=n.getBoundingClientRect(),o=window.devicePixelRatio||1,s=Math.max(1,Math.round(r.width*o)),a=Math.max(1,Math.round(r.height*o)),m=false;return t.width!==s&&(t.width=s,m=true),t.height!==a&&(t.height=a,m=true),m}function H(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),_(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function A(n,t,e,r,o){if(o==="none")return [(e-n)/2,(r-t)/2,n,t];if(o==="contain"||o==="scale-down"){let s=Math.min(e/n,r/t),a=o==="scale-down"?Math.min(1,s):s,m=a*n,u=a*t;return [(e-m)/2,(r-u)/2,m,u]}if(o==="cover"){let s=Math.max(e/n,r/t),a=s*n,m=s*t;return [(e-a)/2,(r-m)/2,a,m]}return [0,0,e,r]}var M="pup-frame://";var L="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function j(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),r={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let o of t)o(e,r);}async function W(n,t,e,r){let o=n.cache.cacheOf(e.meta.id);o.readers.set(e,r);let s=o.bitmaps.get(r);if(!s){n.cache.prefetch(e,r+1,9);let u=await n.cache.fetch(e,r);if(n.sessions.get(t)!==e)return;if(!u){!e.paused&&!e.waiting&&(e.waiting=true,l(t,"waiting"));return}s=u;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let a=e.cv,m=A(s.width,s.height,a.width,a.height,e.objectFit);e.ctx.clearRect(0,0,a.width,a.height),e.ctx.drawImage(s,m[0],m[1],m[2],m[3]),e.lastDrawnIdx=r,e.presentedFrames++,j(e),n.cache.prefetch(e,r+1,10),n.cache.evict(o);}function C(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(o=>{let s=o,a=n.sessions.get(s);if(!a||a.dead||(_(s,a.cv)&&(a.lastDrawnIdx=-1),!a.meta))return;if(a.meta.frameWidth<a.meta.width&&a.cv.width>a.meta.frameWidth*1.05&&!n.attaching.has(s)){n.reattach(s,a);return}!a.paused&&!a.ended&&(a.currentTime+=e*(s.playbackRate||1),a.maxReached=Math.max(a.maxReached,a.currentTime),a.currentTime>=a.meta.duration?s.loop?a.currentTime=a.currentTime%a.meta.duration:(a.currentTime=a.meta.duration,a.paused=true,a.ended=true,l(s,"ended")):l(s,"timeupdate"));let m=Math.max(1,Math.round(a.currentTime*a.meta.fps));m!==a.lastDrawnIdx&&r.push(W(n,s,a,m));}),Promise.all(r)}var S=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let r=t.meta;if(!r)return Promise.resolve(void 0);let o=this.cacheOf(r.id),s=o.inFlight.get(e);if(s)return s;let a=o.bitmaps.get(e);if(a)return Promise.resolve(a);let m=r.frameWidth,u=r.frameHeight,h=fetch(`${M}frame?id=${r.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===m*u*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),m,u)):void 0).then(p=>(o.inFlight.delete(e),p&&o.bitmaps.set(e,p),p)).catch(()=>{o.inFlight.delete(e);});return o.inFlight.set(e,h),h}prefetch(t,e,r){let o=t.meta;if(!o)return;let s=Math.max(1,Math.round(o.duration*o.fps));for(let a=e;a<e+r;a++)a<1||a>s||this.fetch(t,a);}evict(t){let e=1/0;if(t.readers.forEach(o=>{o<e&&(e=o);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((o,s)=>{s<r&&(o.close(),t.bitmaps.delete(s));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(o=>{o.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function O(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=i=>Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(e,i),o=r("currentTime"),s=r("src"),a=r("playbackRate"),m=t.pause,u=t.requestVideoFrameCallback,h=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,b=t.load,g=n.sessions,w=(i,c)=>{let d=r(i)?.get;if(!d)throw new Error(`media_shim: no native getter for ${i}`);Object.defineProperty(t,i,{configurable:true,get(){let f=g.get(this);return f?c(f):d.call(this)}});};if(w("paused",i=>i.paused),w("ended",i=>i.ended),w("readyState",i=>i.readyState),w("networkState",i=>i.networkState),w("error",i=>i.error??null),w("seeking",i=>i.seeking),w("buffered",i=>V(i.meta?i.meta.duration:0)),w("seekable",i=>V(i.meta?i.meta.duration:0)),w("played",i=>V(i.maxReached)),t.play=function(){let i=g.get(this);return i?(n.resume(this,i),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let i=g.get(this);if(!i){m.call(this);return}i.paused||(i.paused=true,l(this,"pause"));},o?.get&&o.set){let i=o.get,c=o.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let d=g.get(this);return d?d.currentTime:i.call(this)},set(d){let f=g.get(this);if(!f){c.call(this,d);return}let T=f.meta?f.meta.duration:d;f.currentTime=Math.max(0,Math.min(d,T)),f.maxReached=Math.max(f.maxReached,f.currentTime),f.currentTime<T&&(f.ended=false),f.seeking=true,l(this,"seeking"),f.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(a?.set){let i=a.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:a.get,set(c){i.call(this,c),g.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(i){let c=g.get(this);if(!c)return u.call(this,i);let d=++n.rvfcSeq;return c.rvfc.set(d,i),d},t.cancelVideoFrameCallback=function(i){let c=g.get(this);if(!c){h.call(this,i);return}c.rvfc.delete(i);},t.getVideoPlaybackQuality=function(){let i=g.get(this);return i?{creationTime:performance.now(),totalVideoFrames:i.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!g.has(this))return b.call(this);n.detach(this),l(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},s?.set){let i=s.set;Object.defineProperty(t,"src",{configurable:true,get:s.get,set(c){i.call(this,c),n.onSrcChange(this);}});}}function D(n,t){return {meta:void 0,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function F(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(L,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function P(n,t){let{video:e,state:r,src:o,birthMs:s,native:a}=t,m=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,l(e,"loadstart");let u;try{let b=a?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;u=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${m}${b}`);}catch(b){return F(e,r,{code:2,message:`open failed: ${b instanceof Error?b.message:String(b)}`})}if(n.sessions.get(e)!==r)return;if(!u.ok)return F(e,r,{code:3,message:`open ${u.status}: ${await u.text()}`});let h=await u.json();if(n.sessions.get(e)!==r)return;r.meta=h,r.currentTime=r.paused?0:Math.max(0,(n.currMs-s)/1e3);let p=e.videoWidth>0;return Object.defineProperty(e,"videoWidth",{value:h.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:h.height,configurable:true}),Object.defineProperty(e,"duration",{value:h.duration,configurable:true}),r.readyState=1,p||(l(e,"durationchange"),l(e,"loadedmetadata")),r.readyState=4,p||(l(e,"loadeddata"),l(e,"canplay"),l(e,"canplaythrough")),r.networkState=1,p||(l(e,"suspend"),r.paused||(l(e,"play"),l(e,"playing"))),n.cache.prefetch(r,1,10),r}var k=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new S;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){O(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(r=>{r instanceof Element&&this.scan(r);}),e.removedNodes.forEach(r=>{r instanceof HTMLVideoElement&&this.detach(r);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>C(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let o=this.attaching.get(t);if(o)return o;let s=t.src||t.currentSrc;if(!s||/^(blob:|data:|mediastream:)/i.test(s))return Promise.resolve(void 0);let a=H(t,this._lastSnapshot.get(t)),m=D(t,a);this.sessions.set(t,m);let u=P(this,{video:t,state:m,src:s,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(u);});return this.attaching.set(t,u),this.opening.add(u),u}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,l(t,"play"),l(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let r=new OffscreenCanvas(e.cv.width,e.cv.height),o=r.getContext("2d");if(!o)throw new Error("no 2d context");o.drawImage(e.cv,0,0),this._lastSnapshot.set(t,r);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pupLastSrc!==e&&(t.__pupLastSrc=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let r=e.currentTime,o=e.paused,s=e.ended;this.detach(t),this.attach(t,true).then(a=>{a&&(a.currentTime=r,a.paused=o,a.ended=s);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function I(){window.__pup_video__||new k().install();}window.self!==window.top&&(v(),I());
2
- //# sourceMappingURL=iframe_preload.cjs.map
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2lmcmFtZV9ob29rLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vb3ZlcmxheS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL3R5cGVzLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZHJpdmVyLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZnJhbWVfY2FjaGUudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9tZWRpYV9zaGltLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vc2Vzc2lvbi50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL2hvb2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS9pZnJhbWVfcHJlbG9hZC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwic3luY0FuaW1hdGlvbnMiLCJtcyIsImFuaW1zIiwiYSIsInN0YXRlIiwicmF0ZSIsInMiLCJjdDAiLCJwcm9jZXNzIiwidGltZXN0YW1wTXMiLCJ0IiwicmFmcyIsIk1JUlJPUl9QUk9QUyIsImNzc0Nhc2UiLCJjIiwic3luY092ZXJsYXkiLCJ2aWRlbyIsImN2IiwiY3MiLCJwIiwidiIsInZyIiwiZHByIiwidyIsImgiLCJyZXNpemVkIiwic2V0dXBDYW52YXMiLCJzbmFwIiwiZml0UmVjdCIsInNyY1ciLCJzcmNIIiwiZHN0VyIsImRzdEgiLCJmaXQiLCJzYyIsImsiLCJ3cyIsImhzIiwic2MyIiwid3MyIiwiaHMyIiwiU0NIRU1FIiwiVEFHIiwidGltZVJhbmdlcyIsImVuZCIsImZpcmUiLCJlbCIsInR5cGUiLCJmaXJlRnJhbWVDYWxsYmFja3MiLCJjYnMiLCJub3ciLCJtZXRhIiwicGFpbnQiLCJob29rIiwiaWR4IiwiYm0iLCJmZXRjaGVkIiwiYWR2YW5jZSIsImR0IiwicHMiLCJGcmFtZUNhY2hlIiwiZXhpc3RpbmciLCJjYWNoZWQiLCJidWYiLCJmcm9tSWR4IiwiY291bnQiLCJtYXhJZHgiLCJpIiwibWluSWR4IiwiZmxvb3IiLCJpbnN0YWxsTWVkaWFTaGltIiwiSFZFIiwiTUVESUEiLCJtZGVzYyIsImN0RGVzYyIsInNyY0Rlc2MiLCJyYXRlRGVzYyIsIm9yaWdQYXVzZSIsIm9yaWdSVkZDIiwib3JpZ0NhbmNlbFJWRkMiLCJvcmlnUXVhbGl0eSIsIm9yaWdMb2FkIiwic2Vzc2lvbnMiLCJkZWYiLCJwcm9wIiwicGljayIsIm5hdGl2ZUdldCIsIm5zIiwiY3RHZXQiLCJjdFNldCIsImR1ciIsInJhdGVTZXQiLCJzcmNTZXQiLCJuZXdWaWRlb1N0YXRlIiwiZmFpbE9wZW4iLCJlcnJvciIsIm9wZW5TZXNzaW9uIiwic3JjIiwiYmlydGhNcyIsIm5hdGl2ZSIsImZwcyIsInJlcyIsInEiLCJuYXRpdmVNZXRhIiwiVmlkZW9Ib29rIiwibXV0cyIsIm0iLCJuIiwicGVuZGluZyIsInNjdHgiLCJwYXVzZWQiLCJlbmRlZCIsInJvb3QiLCJpbnN0YWxsVmlkZW9Ib29rIl0sIm1hcHBpbmdzIjoidURBd0JPLFNBQVNBLEdBQXdCLENBQ3RDLEdBQUksT0FBTyxZQUFBLENBQ1QsT0FHRixJQUFNQyxDQUFBQSxDQUFZLElBQUEsQ0FDWkMsQ0FBQUEsQ0FBYUQsQ0FBQUEsQ0FBVSxLQUFJLENBQzdCRSxDQUFBQSxDQUFTLEVBQ1RDLENBQUFBLENBQWEsQ0FBQSxDQUNiQyxFQUF1QixFQUFDLENBQ3RCQyxDQUFBQSxDQUE0QyxHQUM5Q0MsQ0FBQUEsQ0FBUyxDQUFBLENBQ1BDLEVBQU8sS0FDWEosQ0FBQUEsRUFBYyxJQUNQQSxDQUFBQSxDQUFBQSxDQUdULFNBQVNLLEtBQTJCQyxD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IHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdGlja19fPzogeyBwcm9jZXNzOiAobXM6IG51bWJlcikgPT4gdm9pZCB9O1xuICB9XG59XG5cbmludGVyZmFjZSBUaW1lciB7XG4gIHR5cGU6IFwidGltZW91dFwiIHwgXCJpbnRlcnZhbFwiO1xuICBjYjogVGltZXJIYW5kbGVyO1xuICBkZWxheTogbnVtYmVyO1xuICBuZXh0OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSYWZFbnRyeSB7XG4gIGlkOiBudW1iZXI7XG4gIGNiOiBGcmFtZVJlcXVlc3RDYWxsYmFjaztcbn1cblxuaW50ZXJmYWNlIEFuaW1FbnRyeSB7XG4gIHN0YXJ0TXM6IG51bWJlcjtcbiAgcGF1c2VkQWNjdW06IG51bWJlcjtcbiAgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxUaWNrSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF90aWNrX18pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBSRUFMX0RBVEUgPSBEYXRlO1xuICBjb25zdCBkYXRlT3JpZ2luID0gUkVBTF9EQVRFLm5vdygpO1xuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHRpbWVPZmZzZXQgPSAwO1xuICBsZXQgcmFmUXVldWU6IFJhZkVudHJ5W10gPSBbXTtcbiAgY29uc3QgdGltZXJzOiBSZWNvcmQ8bnVtYmVyLCBUaW1lciB8IHVuZGVmaW5lZD4gPSB7fTtcbiAgbGV0IG5leHRJZCA9IDE7XG4gIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgdGltZU9mZnNldCArPSAwLjAxO1xuICAgIHJldHVybiB0aW1lT2Zmc2V0O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEZha2VEYXRlKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IHVua25vd25bXSk6IERhdGUgfCBzdHJpbmcge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGYWtlRGF0ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzLmxlbmd0aFxuICAgICAgPyBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KFJFQUxfREFURSwgW251bGwsIC4uLmFyZ3NdKSkoKVxuICAgICAgOiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCkpO1xuICB9XG4gIEZha2VEYXRlLnByb3RvdHlwZSA9IFJFQUxfREFURS5wcm90b3R5cGU7XG4gIEZha2VEYXRlLm5vdyA9ICgpID0+IGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCk7XG4gIEZha2VEYXRlLnBhcnNlID0gUkVBTF9EQVRFLnBhcnNlO1xuICBGYWtlRGF0ZS5VVEMgPSBSRUFMX0RBVEUuVVRDO1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBEYXRlOiB1bmtub3duIH0pLkRhdGUgPSBGYWtlRGF0ZTtcbiAgcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gY3Vyck1zICsgdGljaygpO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoY2IpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHJhZlF1ZXVlLnB1c2goeyBpZCwgY2IgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSAoaWQpID0+IHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRUaW1lb3V0OiB1bmtub3duIH0pLnNldFRpbWVvdXQgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwidGltZW91dFwiLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgc2V0SW50ZXJ2YWw6IHVua25vd24gfSkuc2V0SW50ZXJ2YWwgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIGNvbnN0IGQgPSBNYXRoLm1heChkZWxheSB8fCAwLCAxKTtcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiBcImludGVydmFsXCIsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSAoaWQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcIm51bWJlclwiKSB7XG4gICAgICBkZWxldGUgdGltZXJzW2lkXTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gc2FmZUludm9rZVRpbWVyKGZuOiBUaW1lckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBTdHJpbmcgdGltZXIgaGFuZGxlciBydW5zIGFzIHBhZ2Ugc2NyaXB0IGluIGdsb2JhbCBzY29wZSAoSFRNTCBzcGVjKTsgRnVuY3Rpb24gY3RvciBtYXRjaGVzIHRoYXQsIGF2b2lkcyBldmFsLlxuICAgICAgICBuZXcgRnVuY3Rpb24oZm4pKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNhZmVJbnZva2VSYWYoY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrLCB0czogbnVtYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNiKHRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW1RpY2tdIGVycm9yOlwiLCAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHx8IGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFuaW1TdGF0ZSA9IG5ldyBXZWFrTWFwPEFuaW1hdGlvbiwgQW5pbUVudHJ5PigpO1xuICBmdW5jdGlvbiBzeW5jQW5pbWF0aW9ucyhtczogbnVtYmVyKSB7XG4gICAgbGV0IGFuaW1zOiBBbmltYXRpb25bXTtcbiAgICB0cnkge1xuICAgICAgYW5pbXMgPSBkb2N1bWVudC5nZXRBbmltYXRpb25zKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgYSBvZiBhbmltcykge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhLnBsYXlTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJpZGxlXCIgfHwgc3RhdGUgPT09IFwiZmluaXNoZWRcIikge1xuICAgICAgICBhbmltU3RhdGUuZGVsZXRlKGEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhdGUgPSB0eXBlb2YgYS5wbGF5YmFja1JhdGUgPT09IFwibnVtYmVyXCIgPyBhLnBsYXliYWNrUmF0ZSA6IDE7XG4gICAgICBpZiAocmF0ZSA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzID0gYW5pbVN0YXRlLmdldChhKTtcbiAgICAgIGlmICghcykge1xuICAgICAgICBjb25zdCBjdDAgPSB0eXBlb2YgYS5jdXJyZW50VGltZSA9PT0gXCJudW1iZXJcIiA/IGEuY3VycmVudFRpbWUgOiAwO1xuICAgICAgICBzID0geyBzdGFydE1zOiBtcyAtIGN0MCAvIHJhdGUsIHBhdXNlZEFjY3VtOiAwLCBwYXVzZWRBdDogLTEgfTtcbiAgICAgICAgYW5pbVN0YXRlLnNldChhLCBzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJwYXVzZWRcIikge1xuICAgICAgICBpZiAocy5wYXVzZWRBdCA8IDApIHtcbiAgICAgICAgICBzLnBhdXNlZEF0ID0gbXM7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocy5wYXVzZWRBdCA+PSAwKSB7XG4gICAgICAgIHMucGF1c2VkQWNjdW0gKz0gbXMgLSBzLnBhdXNlZEF0O1xuICAgICAgICBzLnBhdXNlZEF0ID0gLTE7XG4gICAgICB9XG4gICAgICBhLmN1cnJlbnRUaW1lID0gKG1zIC0gcy5zdGFydE1zIC0gcy5wYXVzZWRBY2N1bSkgKiByYXRlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXM6IG51bWJlcikge1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIHRpbWVPZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXModGltZXJzKSkge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgIGlmICghdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIHNhZmVJbnZva2VUaW1lcih0LmNiKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gXCJ0aW1lb3V0XCIpIHtcbiAgICAgICAgICBkZWxldGUgdGltZXJzW051bWJlcihpZCldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgciBvZiByYWZzKSB7XG4gICAgICBzYWZlSW52b2tlUmFmKHIuY2IsIGN1cnJNcyk7XG4gICAgfVxuICAgIHN5bmNBbmltYXRpb25zKGN1cnJNcyk7XG4gIH1cblxuICB3aW5kb3cuX19wdXBfdGlja19fID0geyBwcm9jZXNzIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG50eXBlIFZlYzQgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgTUlSUk9SX1BST1BTID0gW1xuICBcImJvcmRlclJhZGl1c1wiLFxuICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICBcInRyYW5zZm9ybVwiLFxuICBcInRyYW5zZm9ybU9yaWdpblwiLFxuICBcImZpbHRlclwiLFxuICBcImNsaXBQYXRoXCIsXG4gIFwiYm94U2hhZG93XCIsXG4gIFwib3BhY2l0eVwiLFxuICBcIm1peEJsZW5kTW9kZVwiLFxuICBcIm1hc2tcIixcbiAgXCJ6SW5kZXhcIixcbiAgXCJwb3NpdGlvblwiLFxuICBcImxlZnRcIixcbiAgXCJ0b3BcIixcbiAgXCJyaWdodFwiLFxuICBcImJvdHRvbVwiLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY3NzQ2FzZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bQS1aXS9nLCAoYykgPT4gYC0ke2MudG9Mb3dlckNhc2UoKX1gKTtcbn1cblxuLy8gVHJhY2sgdGhlIG92ZXJsYXkgY2FudmFzIHRvIHRoZSB2aWRlbyBlbGVtZW50J3MgbGl2ZSBib3g7IHRydWUgPSBiYWNraW5nIHN0b3JlIHJlc2l6ZWQgKHdoaWNoIHdpcGVzIHRoZSBjYW52YXMpLlxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNPdmVybGF5KHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBjdjogSFRNTENhbnZhc0VsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbyk7XG4gIGN2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAvLyBvZmZzZXQqIGFyZSBwcmUtdHJhbnNmb3JtIGNvb3JkcyBmcm9tIG9mZnNldFBhcmVudCdzIHBhZGRpbmcgZWRnZSA9IHRoZSBhYnMgY29udGFpbmluZy1ibG9jayBvcmlnaW47IG1hcCBkaXJlY3QuXG4gIGN2LnN0eWxlLmxlZnQgPSBgJHt2aWRlby5vZmZzZXRMZWZ0fXB4YDtcbiAgY3Yuc3R5bGUudG9wID0gYCR7dmlkZW8ub2Zmc2V0VG9wfXB4YDtcbiAgY3Yuc3R5bGUud2lkdGggPSBgJHt2aWRlby5vZmZzZXRXaWR0aH1weGA7XG4gIGN2LnN0eWxlLmhlaWdodCA9IGAke3ZpZGVvLm9mZnNldEhlaWdodH1weGA7XG4gIGZvciAoY29uc3QgcCBvZiBNSVJST1JfUFJPUFMpIHtcbiAgICBpZiAocCA9PT0gXCJwb3NpdGlvblwiIHx8IHAgPT09IFwibGVmdFwiIHx8IHAgPT09IFwidG9wXCIgfHwgcCA9PT0gXCJyaWdodFwiIHx8IHAgPT09IFwiYm90dG9tXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ID0gY3MuZ2V0UHJvcGVydHlWYWx1ZShjc3NDYXNlKHApKTtcbiAgICBpZiAodikge1xuICAgICAgY3Yuc3R5bGUuc2V0UHJvcGVydHkoY3NzQ2FzZShwKSwgdik7XG4gICAgfVxuICB9XG4gIC8vIEJhY2tpbmcgc3RvcmUgYXQgb24tc2NyZWVuIHBpeGVsIHNpemUgKHBvc3QtdHJhbnNmb3JtKSBzbyBkZWNvZGUgcmVzb2x1dGlvbiBtYXRjaGVzIGRpc3BsYXllZCBwaXhlbHMuXG4gIGNvbnN0IHZyID0gdmlkZW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIGNvbnN0IHcgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLndpZHRoICogZHByKSk7XG4gIGNvbnN0IGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLmhlaWdodCAqIGRwcikpO1xuICBsZXQgcmVzaXplZCA9IGZhbHNlO1xuICBpZiAoY3Yud2lkdGggIT09IHcpIHtcbiAgICBjdi53aWR0aCA9IHc7XG4gICAgcmVzaXplZCA9IHRydWU7XG4gIH1cbiAgaWYgKGN2LmhlaWdodCAhPT0gaCkge1xuICAgIGN2LmhlaWdodCA9IGg7XG4gICAgcmVzaXplZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlc2l6ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENhbnZhcyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc25hcDogT2Zmc2NyZWVuQ2FudmFzIHwgdW5kZWZpbmVkKTogSFRNTENhbnZhc0VsZW1lbnQge1xuICBjb25zdCBjdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGN2LmRhdGFzZXRbXCJwdXBWaWRlb092ZXJsYXlcIl0gPSBcIjFcIjtcbiAgY3Yuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICB2aWRlby5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICBjb25zdCBwYXJlbnQgPSB2aWRlby5wYXJlbnROb2RlIHx8IGRvY3VtZW50LmJvZHk7XG4gIHBhcmVudC5pbnNlcnRCZWZvcmUoY3YsIHZpZGVvLm5leHRTaWJsaW5nKTtcbiAgc3luY092ZXJsYXkodmlkZW8sIGN2KTtcbiAgaWYgKHNuYXApIHtcbiAgICB0cnkge1xuICAgICAgY3YuZ2V0Q29udGV4dChcIjJkXCIpIS5kcmF3SW1hZ2Uoc25hcCwgMCwgMCwgY3Yud2lkdGgsIGN2LmhlaWdodCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBjdjtcbn1cblxuLy8gRHJhdyByZWN0IGZvciB0aGUgYml0bWFwIHdpdGhpbiB0aGUgY2FudmFzIHBlciBvYmplY3RGaXQuXG5leHBvcnQgZnVuY3Rpb24gZml0UmVjdChzcmNXOiBudW1iZXIsIHNyY0g6IG51bWJlciwgZHN0VzogbnVtYmVyLCBkc3RIOiBudW1iZXIsIGZpdDogc3RyaW5nKTogVmVjNCB7XG4gIGlmIChmaXQgPT09IFwibm9uZVwiKSB7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHNyY1cpIC8gMiwgKGRzdEggLSBzcmNIKSAvIDIsIHNyY1csIHNyY0hdO1xuICB9XG4gIGlmIChmaXQgPT09IFwiY29udGFpblwiIHx8IGZpdCA9PT0gXCJzY2FsZS1kb3duXCIpIHtcbiAgICBjb25zdCBzYyA9IE1hdGgubWluKGRzdFcgLyBzcmNXLCBkc3RIIC8gc3JjSCk7XG4gICAgY29uc3QgayA9IGZpdCA9PT0gXCJzY2FsZS1kb3duXCIgPyBNYXRoLm1pbigxLCBzYykgOiBzYztcbiAgICBjb25zdCB3cyA9IGsgKiBzcmNXO1xuICAgIGNvbnN0IGhzID0gayAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvdmVyXCIpIHtcbiAgICBjb25zdCBzYzIgPSBNYXRoLm1heChkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IHdzMiA9IHNjMiAqIHNyY1c7XG4gICAgY29uc3QgaHMyID0gc2MyICogc3JjSDtcbiAgICByZXR1cm4gWyhkc3RXIC0gd3MyKSAvIDIsIChkc3RIIC0gaHMyKSAvIDIsIHdzMiwgaHMyXTtcbiAgfVxuICByZXR1cm4gWzAsIDAsIGRzdFcsIGRzdEhdO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuZXhwb3J0IGNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lOi8vXCI7XG5leHBvcnQgY29uc3QgQUhFQUQgPSAxMDtcbmV4cG9ydCBjb25zdCBUQUcgPSBcIltWaWRlb0hvb2tdXCI7XG5cbmV4cG9ydCBjb25zdCBNRURJQV9FUlJfTkVUV09SSyA9IDI7XG5leHBvcnQgY29uc3QgTUVESUFfRVJSX0RFQ09ERSA9IDM7XG5leHBvcnQgY29uc3QgSEFWRV9OT1RISU5HID0gMDtcbmV4cG9ydCBjb25zdCBIQVZFX01FVEFEQVRBID0gMTtcbmV4cG9ydCBjb25zdCBIQVZFX0VOT1VHSF9EQVRBID0gNDtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0VNUFRZID0gMDtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0lETEUgPSAxO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTE9BRElORyA9IDI7XG5leHBvcnQgY29uc3QgTkVUV09SS19OT19TT1VSQ0UgPSAzO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvTWV0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRnJhbWVNZXRhIHtcbiAgcHJlc2VudGF0aW9uVGltZTogbnVtYmVyO1xuICBleHBlY3RlZERpc3BsYXlUaW1lOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBtZWRpYVRpbWU6IG51bWJlcjtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEZyYW1lQ2IgPSAobm93OiBudW1iZXIsIG1ldGE6IFZpZGVvRnJhbWVNZXRhKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhRXJyb3JMaWtlIHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DYWNoZSB7XG4gIGJpdG1hcHM6IE1hcDxudW1iZXIsIEltYWdlQml0bWFwPjtcbiAgaW5GbGlnaHQ6IE1hcDxudW1iZXIsIFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+PjtcbiAgcmVhZGVyczogTWFwPFZpZGVvU3RhdGUsIG51bWJlcj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TdGF0ZSB7XG4gIG1ldGE/OiBWaWRlb01ldGE7XG4gIGN2OiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gIHBhdXNlZDogYm9vbGVhbjtcbiAgY3VycmVudFRpbWU6IG51bWJlcjtcbiAgZW5kZWQ6IGJvb2xlYW47XG4gIGxhc3REcmF3bklkeDogbnVtYmVyO1xuICBkZWFkOiBib29sZWFuO1xuICBvYmplY3RGaXQ6IHN0cmluZztcbiAgcmVhZHlTdGF0ZTogbnVtYmVyO1xuICBuZXR3b3JrU3RhdGU6IG51bWJlcjtcbiAgc2Vla2luZzogYm9vbGVhbjtcbiAgd2FpdGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IE1lZGlhRXJyb3JMaWtlIHwgdW5kZWZpbmVkO1xuICBwcmVzZW50ZWRGcmFtZXM6IG51bWJlcjtcbiAgbWF4UmVhY2hlZDogbnVtYmVyO1xuICBydmZjOiBNYXA8bnVtYmVyLCBGcmFtZUNiPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lUmFuZ2VzTGlrZSB7XG4gIGxlbmd0aDogbnVtYmVyO1xuICBzdGFydChpOiBudW1iZXIpOiBudW1iZXI7XG4gIGVuZChpOiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8vIFdob2xlIGNsaXAgaXMgZGVjb2RlLW9uLWRlbWFuZCwgc28gdGhlIGF2YWlsYWJsZSByYW5nZSBpcyBhbHdheXMgWzAsIGVuZF0gKG9uZSBUaW1lUmFuZ2VzIGVudHJ5KS5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lUmFuZ2VzKGVuZDogbnVtYmVyKTogVGltZVJhbmdlc0xpa2Uge1xuICByZXR1cm4geyBsZW5ndGg6IGVuZCA+IDAgPyAxIDogMCwgc3RhcnQ6ICgpID0+IDAsIGVuZDogKCkgPT4gZW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJlKGVsOiBFdmVudFRhcmdldCwgdHlwZTogc3RyaW5nKTogdm9pZCB7XG4gIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KHR5cGUpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHsgZml0UmVjdCwgc3luY092ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBBSEVBRCwgZmlyZSwgdHlwZSBWaWRlb0ZyYW1lTWV0YSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5ydmZjLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2JzID0gWy4uLnN0YXRlLnJ2ZmMudmFsdWVzKCldO1xuICBzdGF0ZS5ydmZjLmNsZWFyKCk7XG4gIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSA9IHtcbiAgICBwcmVzZW50YXRpb25UaW1lOiBub3csXG4gICAgZXhwZWN0ZWREaXNwbGF5VGltZTogbm93LFxuICAgIHdpZHRoOiBzdGF0ZS5tZXRhIS5mcmFtZVdpZHRoLFxuICAgIGhlaWdodDogc3RhdGUubWV0YSEuZnJhbWVIZWlnaHQsXG4gICAgbWVkaWFUaW1lOiBzdGF0ZS5jdXJyZW50VGltZSxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IHN0YXRlLnByZXNlbnRlZEZyYW1lcyxcbiAgfTtcbiAgZm9yIChjb25zdCBjYiBvZiBjYnMpIHtcbiAgICBjYihub3csIG1ldGEpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KGhvb2s6IFZpZGVvSG9vaywgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gaG9vay5jYWNoZS5jYWNoZU9mKHN0YXRlLm1ldGEhLmlkKTtcbiAgYy5yZWFkZXJzLnNldChzdGF0ZSwgaWR4KTtcbiAgbGV0IGJtID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICBpZiAoIWJtKSB7XG4gICAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQgLSAxKTtcbiAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgaG9vay5jYWNoZS5mZXRjaChzdGF0ZSwgaWR4KTtcbiAgICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWZldGNoZWQpIHtcbiAgICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS53YWl0aW5nKSB7XG4gICAgICAgIHN0YXRlLndhaXRpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHZpZGVvLCBcIndhaXRpbmdcIik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJtID0gZmV0Y2hlZDtcbiAgfVxuICBpZiAoc3RhdGUud2FpdGluZykge1xuICAgIHN0YXRlLndhaXRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjdiA9IHN0YXRlLmN2O1xuICBjb25zdCByID0gZml0UmVjdChibS53aWR0aCwgYm0uaGVpZ2h0LCBjdi53aWR0aCwgY3YuaGVpZ2h0LCBzdGF0ZS5vYmplY3RGaXQpO1xuICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICBzdGF0ZS5jdHguZHJhd0ltYWdlKGJtLCByWzBdLCByWzFdLCByWzJdLCByWzNdKTtcbiAgc3RhdGUubGFzdERyYXduSWR4ID0gaWR4O1xuICBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMrKztcbiAgZmlyZUZyYW1lQ2FsbGJhY2tzKHN0YXRlKTtcbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgaWR4ICsgMSwgQUhFQUQpO1xuICBob29rLmNhY2hlLmV2aWN0KGMpO1xufVxuXG4vLyBWaXJ0dWFsLXRpbWUgdGljazogc3luYyBvdmVybGF5cywgYWR2YW5jZSBlYWNoIGhvb2tlZCB2aWRlbydzIGNsb2NrIChsb29wL2VuZCksIHBhaW50IHRoZSBkdWUgZnJhbWUuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZShob29rOiBWaWRlb0hvb2ssIHRpbWVzdGFtcE1zOiBudW1iZXIpOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgZHQgPSBNYXRoLm1heCgwLCB0aW1lc3RhbXBNcyAtIGhvb2suY3Vyck1zKSAvIDEwMDA7XG4gIGhvb2suY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gIGNvbnN0IHBzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInZpZGVvXCIpLmZvckVhY2goKGVsKSA9PiB7XG4gICAgY29uc3QgdmlkZW8gPSBlbCBhcyBIVE1MVmlkZW9FbGVtZW50O1xuICAgIGNvbnN0IHN0YXRlID0gaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUgfHwgc3RhdGUuZGVhZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBBIGJhY2tpbmctc3RvcmUgcmVzaXplIChhbmltYXRlZCBjb250YWluZXIpIHdpcGVzIHRoZSBjYW52YXM7IGZvcmNlIGEgcmVkcmF3IGV2ZW4gb24gYW4gdW5jaGFuZ2VkIGZyYW1lIGlkeC5cbiAgICBpZiAoc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KSkge1xuICAgICAgc3RhdGUubGFzdERyYXduSWR4ID0gLTE7XG4gICAgfVxuICAgIGlmICghc3RhdGUubWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBFbGVtZW50IGdyZXcgcGFzdCB0aGUgZGVjb2RlZCAoZG93bnNjYWxlZCkgcmVzIOKGkiByZS1kZWNvZGUgYXQgbmF0aXZlLCBvbmUtc2hvdCAoY292ZXJzIHpvb20pLlxuICAgIGlmIChcbiAgICAgIHN0YXRlLm1ldGEuZnJhbWVXaWR0aCA8IHN0YXRlLm1ldGEud2lkdGggJiZcbiAgICAgIHN0YXRlLmN2LndpZHRoID4gc3RhdGUubWV0YS5mcmFtZVdpZHRoICogMS4wNSAmJlxuICAgICAgIWhvb2suYXR0YWNoaW5nLmhhcyh2aWRlbylcbiAgICApIHtcbiAgICAgIGhvb2sucmVhdHRhY2godmlkZW8sIHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICBzdGF0ZS5jdXJyZW50VGltZSArPSBkdCAqICh2aWRlby5wbGF5YmFja1JhdGUgfHwgMSk7XG4gICAgICBzdGF0ZS5tYXhSZWFjaGVkID0gTWF0aC5tYXgoc3RhdGUubWF4UmVhY2hlZCwgc3RhdGUuY3VycmVudFRpbWUpO1xuICAgICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lID49IHN0YXRlLm1ldGEuZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHZpZGVvLmxvb3ApIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLmN1cnJlbnRUaW1lICUgc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgICAgc3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgICAgICAgZmlyZSh2aWRlbywgXCJlbmRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHN0YXRlLmN1cnJlbnRUaW1lICogc3RhdGUubWV0YS5mcHMpKTtcbiAgICBpZiAoaWR4ID09PSBzdGF0ZS5sYXN0RHJhd25JZHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHMucHVzaChwYWludChob29rLCB2aWRlbywgc3RhdGUsIGlkeCkpO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHBzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IFNDSEVNRSwgdHlwZSBWaWRlb0NhY2hlLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBQZXItc2Vzc2lvbiBiaXRtYXAgY2FjaGU6IGZldGNoZXMgUkdCQSBmcmFtZXMgZnJvbSB0aGUgZnJhbWUgcHJvdG9jb2wsIGRlZHVwZXMgaW4tZmxpZ2h0LCBldmljdHMgYmVoaW5kIHJlYWRlcnMuXG5leHBvcnQgY2xhc3MgRnJhbWVDYWNoZSB7XG4gIHByaXZhdGUgX2NhY2hlcyA9IG5ldyBNYXA8c3RyaW5nLCBWaWRlb0NhY2hlPigpO1xuXG4gIGNhY2hlT2YoaWQ6IHN0cmluZyk6IFZpZGVvQ2FjaGUge1xuICAgIGxldCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICBjID0geyBiaXRtYXBzOiBuZXcgTWFwKCksIGluRmxpZ2h0OiBuZXcgTWFwKCksIHJlYWRlcnM6IG5ldyBNYXAoKSB9O1xuICAgICAgdGhpcy5fY2FjaGVzLnNldChpZCwgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZmV0Y2goc3RhdGU6IFZpZGVvU3RhdGUsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjID0gdGhpcy5jYWNoZU9mKG1ldGEuaWQpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYy5pbkZsaWdodC5nZXQoaWR4KTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkID0gYy5iaXRtYXBzLmdldChpZHgpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkKTtcbiAgICB9XG4gICAgY29uc3QgdyA9IG1ldGEuZnJhbWVXaWR0aDtcbiAgICBjb25zdCBoID0gbWV0YS5mcmFtZUhlaWdodDtcbiAgICBjb25zdCBwID0gZmV0Y2goYCR7U0NIRU1FfWZyYW1lP2lkPSR7bWV0YS5pZH0maWR4PSR7aWR4fWApXG4gICAgICAudGhlbigocikgPT4gKHIub2sgPyByLmFycmF5QnVmZmVyKCkgOiB1bmRlZmluZWQpKVxuICAgICAgLnRoZW4oKGJ1ZikgPT5cbiAgICAgICAgYnVmICYmIGJ1Zi5ieXRlTGVuZ3RoID09PSB3ICogaCAqIDRcbiAgICAgICAgICA/IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZiksIHcsIGgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgKVxuICAgICAgLnRoZW4oKGJtKSA9PiB7XG4gICAgICAgIGMuaW5GbGlnaHQuZGVsZXRlKGlkeCk7XG4gICAgICAgIGlmIChibSkge1xuICAgICAgICAgIGMuYml0bWFwcy5zZXQoaWR4LCBibSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJtO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGMuaW5GbGlnaHQuZGVsZXRlKGlkeCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICBjLmluRmxpZ2h0LnNldChpZHgsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgcHJlZmV0Y2goc3RhdGU6IFZpZGVvU3RhdGUsIGZyb21JZHg6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSBzdGF0ZS5tZXRhO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtYXhJZHggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKG1ldGEuZHVyYXRpb24gKiBtZXRhLmZwcykpO1xuICAgIGZvciAobGV0IGkgPSBmcm9tSWR4OyBpIDwgZnJvbUlkeCArIGNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpIDwgMSB8fCBpID4gbWF4SWR4KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdm9pZCB0aGlzLmZldGNoKHN0YXRlLCBpKTtcbiAgICB9XG4gIH1cblxuICBldmljdChjOiBWaWRlb0NhY2hlKTogdm9pZCB7XG4gICAgbGV0IG1pbklkeCA9IEluZmluaXR5O1xuICAgIGMucmVhZGVycy5mb3JFYWNoKChpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBtaW5JZHgpIHtcbiAgICAgICAgbWluSWR4ID0gaWR4O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbklkeCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxvb3IgPSBtaW5JZHggLSAyO1xuICAgIGMuYml0bWFwcy5mb3JFYWNoKChibSwgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgZmxvb3IpIHtcbiAgICAgICAgYm0uY2xvc2UoKTtcbiAgICAgICAgYy5iaXRtYXBzLmRlbGV0ZShpZHgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gRHJvcCBhIHJlYWRlcjsgd2hlbiB0aGUgbGFzdCBsZWF2ZXMsIGNsb3NlIGJpdG1hcHMgYW5kIHRlbGwgdGhlIHNlcnZlciB0byByZWxlYXNlIHRoZSBkZWNvZGUgc2Vzc2lvbi5cbiAgcmVsZWFzZShpZDogc3RyaW5nLCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGMgPSB0aGlzLl9jYWNoZXMuZ2V0KGlkKTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5yZWFkZXJzLmRlbGV0ZShzdGF0ZSk7XG4gICAgaWYgKGMucmVhZGVycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0pID0+IHtcbiAgICAgIGJtLmNsb3NlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVzLmRlbGV0ZShpZCk7XG4gICAgZmV0Y2goYCR7U0NIRU1FfWNsb3NlP2lkPSR7aWR9YCwgeyBrZWVwYWxpdmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHsgdHlwZSBGcmFtZUNiLCBmaXJlLCB0aW1lUmFuZ2VzLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBPdmVycmlkZSB0aGUgSFRNTE1lZGlhRWxlbWVudCBzdXJmYWNlIGZvciBob29rZWQgPHZpZGVvPjsgdW5ob29rZWQgZWxlbWVudHMgZmFsbCB0aHJvdWdoIHRvIG5hdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsTWVkaWFTaGltKGhvb2s6IFZpZGVvSG9vayk6IHZvaWQge1xuICBjb25zdCBIVkUgPSBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgTUVESUEgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgbWRlc2MgPSAocDogc3RyaW5nKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgcCkgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgcCk7XG4gIGNvbnN0IGN0RGVzYyA9IG1kZXNjKFwiY3VycmVudFRpbWVcIik7XG4gIGNvbnN0IHNyY0Rlc2MgPSBtZGVzYyhcInNyY1wiKTtcbiAgY29uc3QgcmF0ZURlc2MgPSBtZGVzYyhcInBsYXliYWNrUmF0ZVwiKTtcbiAgY29uc3Qgb3JpZ1BhdXNlID0gSFZFLnBhdXNlO1xuICBjb25zdCBvcmlnUlZGQyA9IEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnQ2FuY2VsUlZGQyA9IEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s7XG4gIGNvbnN0IG9yaWdRdWFsaXR5ID0gSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICBjb25zdCBvcmlnTG9hZCA9IEhWRS5sb2FkO1xuICBjb25zdCBzZXNzaW9ucyA9IGhvb2suc2Vzc2lvbnM7XG5cbiAgLy8gU2Vzc2lvbi1iYWNrZWQgcmVhZC1vbmx5IHByb3BlcnR5IHdpdGggbmF0aXZlIGZhbGxiYWNrIHdoZW4gdGhlIGVsZW1lbnQgaXNuJ3QgaG9va2VkLlxuICBjb25zdCBkZWYgPSAocHJvcDogc3RyaW5nLCBwaWNrOiAoczogVmlkZW9TdGF0ZSkgPT4gdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IG5hdGl2ZUdldCA9IG1kZXNjKHByb3ApPy5nZXQ7XG4gICAgaWYgKCFuYXRpdmVHZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWVkaWFfc2hpbTogbm8gbmF0aXZlIGdldHRlciBmb3IgJHtwcm9wfWApO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBwcm9wLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHBpY2socykgOiBuYXRpdmVHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG4gIGRlZihcInBhdXNlZFwiLCAocykgPT4gcy5wYXVzZWQpO1xuICBkZWYoXCJlbmRlZFwiLCAocykgPT4gcy5lbmRlZCk7XG4gIGRlZihcInJlYWR5U3RhdGVcIiwgKHMpID0+IHMucmVhZHlTdGF0ZSk7XG4gIGRlZihcIm5ldHdvcmtTdGF0ZVwiLCAocykgPT4gcy5uZXR3b3JrU3RhdGUpO1xuICBkZWYoXCJlcnJvclwiLCAocykgPT4gcy5lcnJvciA/PyBudWxsKTtcbiAgZGVmKFwic2Vla2luZ1wiLCAocykgPT4gcy5zZWVraW5nKTtcbiAgZGVmKFwiYnVmZmVyZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJzZWVrYWJsZVwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiAwKSk7XG4gIGRlZihcInBsYXllZFwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1heFJlYWNoZWQpKTtcblxuICBIVkUucGxheSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBob29rLmF0dGFjaCh0aGlzKS50aGVuKChucykgPT4ge1xuICAgICAgICBpZiAobnMpIHtcbiAgICAgICAgICBob29rLnJlc3VtZSh0aGlzLCBucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBob29rLnJlc3VtZSh0aGlzLCBzKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG4gIEhWRS5wYXVzZSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdQYXVzZS5jYWxsKHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXMucGF1c2VkKSB7XG4gICAgICBzLnBhdXNlZCA9IHRydWU7XG4gICAgICBmaXJlKHRoaXMsIFwicGF1c2VcIik7XG4gICAgfVxuICB9O1xuICBpZiAoY3REZXNjPy5nZXQgJiYgY3REZXNjLnNldCkge1xuICAgIGNvbnN0IGN0R2V0ID0gY3REZXNjLmdldDtcbiAgICBjb25zdCBjdFNldCA9IGN0RGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJjdXJyZW50VGltZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcyA/IHMuY3VycmVudFRpbWUgOiBjdEdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgY3RTZXQuY2FsbCh0aGlzLCB0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyID0gcy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogdDtcbiAgICAgICAgcy5jdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQsIGR1cikpO1xuICAgICAgICBzLm1heFJlYWNoZWQgPSBNYXRoLm1heChzLm1heFJlYWNoZWQsIHMuY3VycmVudFRpbWUpO1xuICAgICAgICBpZiAocy5jdXJyZW50VGltZSA8IGR1cikge1xuICAgICAgICAgIHMuZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzLnNlZWtpbmcgPSB0cnVlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2luZ1wiKTtcbiAgICAgICAgcy5zZWVraW5nID0gZmFsc2U7XG4gICAgICAgIGZpcmUodGhpcywgXCJzZWVrZWRcIik7XG4gICAgICAgIGZpcmUodGhpcywgXCJ0aW1ldXBkYXRlXCIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBpZiAocmF0ZURlc2M/LnNldCkge1xuICAgIGNvbnN0IHJhdGVTZXQgPSByYXRlRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJwbGF5YmFja1JhdGVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiByYXRlRGVzYy5nZXQsXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgcjogbnVtYmVyKSB7XG4gICAgICAgIHJhdGVTZXQuY2FsbCh0aGlzLCByKTtcbiAgICAgICAgaWYgKHNlc3Npb25zLmhhcyh0aGlzKSkge1xuICAgICAgICAgIGZpcmUodGhpcywgXCJyYXRlY2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIEhWRS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIGNiKTogbnVtYmVyIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdSVkZDLmNhbGwodGhpcywgY2IpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9ICsraG9vay5ydmZjU2VxO1xuICAgIHMucnZmYy5zZXQoaWQsIGNiIGFzIEZyYW1lQ2IpO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgSFZFLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIG9yaWdDYW5jZWxSVkZDLmNhbGwodGhpcywgaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzLnJ2ZmMuZGVsZXRlKGlkKTtcbiAgfTtcbiAgSFZFLmdldFZpZGVvUGxheWJhY2tRdWFsaXR5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIG9yaWdRdWFsaXR5LmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGlvblRpbWU6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgdG90YWxWaWRlb0ZyYW1lczogcy5wcmVzZW50ZWRGcmFtZXMsXG4gICAgICBkcm9wcGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgICBjb3JydXB0ZWRWaWRlb0ZyYW1lczogMCxcbiAgICB9IGFzIFZpZGVvUGxheWJhY2tRdWFsaXR5O1xuICB9O1xuICBIVkUubG9hZCA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKCFzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgIHJldHVybiBvcmlnTG9hZC5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICBob29rLmRldGFjaCh0aGlzKTtcbiAgICBmaXJlKHRoaXMsIFwiZW1wdGllZFwiKTtcbiAgICB0aGlzLl9fcHVwTGFzdFNyYyA9IHVuZGVmaW5lZDtcbiAgICBob29rLmF0dGFjaCh0aGlzKTtcbiAgfTtcbiAgaWYgKHNyY0Rlc2M/LnNldCkge1xuICAgIGNvbnN0IHNyY1NldCA9IHNyY0Rlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwic3JjXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogc3JjRGVzYy5nZXQsXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdjogc3RyaW5nKSB7XG4gICAgICAgIHNyY1NldC5jYWxsKHRoaXMsIHYpO1xuICAgICAgICBob29rLm9uU3JjQ2hhbmdlKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQge1xuICBBSEVBRCxcbiAgZmlyZSxcbiAgSEFWRV9FTk9VR0hfREFUQSxcbiAgSEFWRV9NRVRBREFUQSxcbiAgSEFWRV9OT1RISU5HLFxuICBNRURJQV9FUlJfREVDT0RFLFxuICBNRURJQV9FUlJfTkVUV09SSyxcbiAgdHlwZSBNZWRpYUVycm9yTGlrZSxcbiAgTkVUV09SS19FTVBUWSxcbiAgTkVUV09SS19JRExFLFxuICBORVRXT1JLX0xPQURJTkcsXG4gIE5FVFdPUktfTk9fU09VUkNFLFxuICBTQ0hFTUUsXG4gIFRBRyxcbiAgdHlwZSBWaWRlb01ldGEsXG4gIHR5cGUgVmlkZW9TdGF0ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hBcmdzIHtcbiAgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHN0YXRlOiBWaWRlb1N0YXRlO1xuICBzcmM6IHN0cmluZztcbiAgYmlydGhNczogbnVtYmVyO1xuICBuYXRpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdWaWRlb1N0YXRlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBjdjogSFRNTENhbnZhc0VsZW1lbnQpOiBWaWRlb1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRhOiB1bmRlZmluZWQsXG4gICAgY3YsXG4gICAgY3R4OiBjdi5nZXRDb250ZXh0KFwiMmRcIikhLFxuICAgIHBhdXNlZDogISh2aWRlby5hdXRvcGxheSB8fCAhdmlkZW8ucGF1c2VkKSxcbiAgICBjdXJyZW50VGltZTogMCxcbiAgICBlbmRlZDogZmFsc2UsXG4gICAgbGFzdERyYXduSWR4OiAtMSxcbiAgICBkZWFkOiBmYWxzZSxcbiAgICBvYmplY3RGaXQ6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKS5vYmplY3RGaXQgfHwgXCJmaWxsXCIsXG4gICAgcmVhZHlTdGF0ZTogSEFWRV9OT1RISU5HLFxuICAgIG5ldHdvcmtTdGF0ZTogTkVUV09SS19FTVBUWSxcbiAgICBzZWVraW5nOiBmYWxzZSxcbiAgICB3YWl0aW5nOiBmYWxzZSxcbiAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgIHByZXNlbnRlZEZyYW1lczogMCxcbiAgICBtYXhSZWFjaGVkOiAwLFxuICAgIHJ2ZmM6IG5ldyBNYXAoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmFpbE9wZW4odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlLCBlcnJvcjogTWVkaWFFcnJvckxpa2UpOiB1bmRlZmluZWQge1xuICBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgc3RhdGUuZXJyb3IgPSBlcnJvcjtcbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19OT19TT1VSQ0U7XG4gIGNvbnNvbGUuZXJyb3IoVEFHLCBgJHtlcnJvci5tZXNzYWdlfSBzcmM9JHt2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyY31gKTtcbiAgZmlyZSh2aWRlbywgXCJlcnJvclwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gT3BlbiB0aGUgZnJhbWUgc2VydmVyIHNlc3Npb24sIHRoZW4gZW1pdCB0aGUgSFRNTE1lZGlhRWxlbWVudCBsb2FkIHNlcXVlbmNlIChyZWFkeVN0YXRlL25ldHdvcmtTdGF0ZSArIGV2ZW50cykuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblNlc3Npb24oaG9vazogVmlkZW9Ib29rLCBhcmdzOiBBdHRhY2hBcmdzKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgdmlkZW8sIHN0YXRlLCBzcmMsIGJpcnRoTXMsIG5hdGl2ZSB9ID0gYXJncztcbiAgY29uc3QgZnBzID0gTnVtYmVyLnBhcnNlSW50KHZpZGVvLmRhdGFzZXRbXCJwdXBGcHNcIl0gfHwgXCIzMFwiLCAxMCk7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTE9BRElORztcbiAgZmlyZSh2aWRlbywgXCJsb2Fkc3RhcnRcIik7XG4gIGxldCByZXM6IFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHEgPSBuYXRpdmUgPyBcIlwiIDogYCZ3PSR7c3RhdGUuY3Yud2lkdGh9Jmg9JHtzdGF0ZS5jdi5oZWlnaHR9JmZpdD0ke2VuY29kZVVSSUNvbXBvbmVudChzdGF0ZS5vYmplY3RGaXQpfWA7XG4gICAgcmVzID0gYXdhaXQgZmV0Y2goYCR7U0NIRU1FfW9wZW4/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNyYyl9JmZwcz0ke2Zwc30ke3F9YCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFpbE9wZW4odmlkZW8sIHN0YXRlLCB7XG4gICAgICBjb2RlOiBNRURJQV9FUlJfTkVUV09SSyxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICB9KTtcbiAgfVxuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFyZXMub2spIHtcbiAgICByZXR1cm4gZmFpbE9wZW4odmlkZW8sIHN0YXRlLCB7XG4gICAgICBjb2RlOiBNRURJQV9FUlJfREVDT0RFLFxuICAgICAgbWVzc2FnZTogYG9wZW4gJHtyZXMuc3RhdHVzfTogJHthd2FpdCByZXMudGV4dCgpfWAsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWV0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBWaWRlb01ldGE7XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzdGF0ZS5tZXRhID0gbWV0YTtcbiAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5wYXVzZWQgPyAwIDogTWF0aC5tYXgoMCwgKGhvb2suY3Vyck1zIC0gYmlydGhNcykgLyAxMDAwKTtcbiAgLy8gVGhlIHN0dWIgbWVkaWEgdXN1YWxseSBsb2FkcyBuYXRpdmVseSBmaXJzdDsgQmxpbmsgdGhlbiBvd25zIHRoZSByZWFsIGV2ZW50IHNlcXVlbmNlIOKAlCBkb24ndCBkdXBsaWNhdGUgaXQuXG4gIGNvbnN0IG5hdGl2ZU1ldGEgPSB2aWRlby52aWRlb1dpZHRoID4gMDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvV2lkdGhcIiwge1xuICAgIHZhbHVlOiBtZXRhLndpZHRoLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb0hlaWdodFwiLCB7XG4gICAgdmFsdWU6IG1ldGEuaGVpZ2h0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJkdXJhdGlvblwiLCB7XG4gICAgdmFsdWU6IG1ldGEuZHVyYXRpb24sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgc3RhdGUucmVhZHlTdGF0ZSA9IEhBVkVfTUVUQURBVEE7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwiZHVyYXRpb25jaGFuZ2VcIik7XG4gICAgZmlyZSh2aWRlbywgXCJsb2FkZWRtZXRhZGF0YVwiKTtcbiAgfVxuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9FTk9VR0hfREFUQTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJsb2FkZWRkYXRhXCIpO1xuICAgIGZpcmUodmlkZW8sIFwiY2FucGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImNhbnBsYXl0aHJvdWdoXCIpO1xuICB9XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJzdXNwZW5kXCIpO1xuICAgIGlmICghc3RhdGUucGF1c2VkKSB7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlcIik7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gICAgfVxuICB9XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIDEsIEFIRUFEKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgYWR2YW5jZSB9IGZyb20gXCIuL2RyaXZlclwiO1xuaW1wb3J0IHsgRnJhbWVDYWNoZSB9IGZyb20gXCIuL2ZyYW1lX2NhY2hlXCI7XG5pbXBvcnQgeyBpbnN0YWxsTWVkaWFTaGltIH0gZnJvbSBcIi4vbWVkaWFfc2hpbVwiO1xuaW1wb3J0IHsgc2V0dXBDYW52YXMgfSBmcm9tIFwiLi9vdmVybGF5XCI7XG5pbXBvcnQgeyBuZXdWaWRlb1N0YXRlLCBvcGVuU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb25cIjtcbmltcG9ydCB7IGZpcmUsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdmlkZW9fXz86IHsgYWR2YW5jZTogKG1zOiBudW1iZXIpID0+IFByb21pc2U8dW5rbm93bj47IHJlYWR5OiAoKSA9PiBQcm9taXNlPHZvaWQ+IH07XG4gIH1cbiAgaW50ZXJmYWNlIEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIF9fcHVwTGFzdFNyYz86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ib29rIHtcbiAgcmVhZG9ubHkgc2Vzc2lvbnMgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBWaWRlb1N0YXRlPigpO1xuICByZWFkb25seSBhdHRhY2hpbmcgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+PigpO1xuICAvLyBFbnVtZXJhYmxlIG1pcnJvciBvZiBpbi1mbGlnaHQgb3BlbnMgKFdlYWtNYXAgaXNuJ3QgaXRlcmFibGUpIHNvIHJlYWR5KCkgY2FuIGF3YWl0IHRoZW0uXG4gIHJlYWRvbmx5IG9wZW5pbmcgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGNhY2hlID0gbmV3IEZyYW1lQ2FjaGUoKTtcbiAgcnZmY1NlcSA9IDA7XG4gIGN1cnJNcyA9IDA7XG4gIHByaXZhdGUgX2xhc3RTbmFwc2hvdCA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIE9mZnNjcmVlbkNhbnZhcz4oKTtcblxuICBpbnN0YWxsKCk6IHZvaWQge1xuICAgIGluc3RhbGxNZWRpYVNoaW0odGhpcyk7XG4gICAgdGhpcy5zY2FuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRzKSB7XG4gICAgICAgIGlmIChtLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09IFwic3JjXCIpIHtcbiAgICAgICAgICB0aGlzLm9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zY2FuKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG0ucmVtb3ZlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wic3JjXCJdIH0pO1xuICAgIHdpbmRvdy5fX3B1cF92aWRlb19fID0geyBhZHZhbmNlOiAobXMpID0+IGFkdmFuY2UodGhpcywgbXMpLCByZWFkeTogKCkgPT4gdGhpcy5yZWFkeSgpIH07XG4gIH1cblxuICBhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIG5hdGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV4aXN0aW5nKTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuYXR0YWNoaW5nLmdldCh2aWRlbyk7XG4gICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgIHJldHVybiBwZW5kaW5nO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYztcbiAgICBpZiAoIXNyYykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAoL14oYmxvYjp8ZGF0YTp8bWVkaWFzdHJlYW06KS9pLnRlc3Qoc3JjKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvLCB0aGlzLl9sYXN0U25hcHNob3QuZ2V0KHZpZGVvKSk7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXdWaWRlb1N0YXRlKHZpZGVvLCBjdik7XG4gICAgdGhpcy5zZXNzaW9ucy5zZXQodmlkZW8sIHN0YXRlKTtcbiAgICBjb25zdCBwID0gb3BlblNlc3Npb24odGhpcywgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNczogdGhpcy5jdXJyTXMsIG5hdGl2ZSB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gICAgICB0aGlzLm9wZW5pbmcuZGVsZXRlKHApO1xuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNoaW5nLnNldCh2aWRlbywgcCk7XG4gICAgdGhpcy5vcGVuaW5nLmFkZChwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIEF3YWl0IG9ubHkgdGhlIG9wZW5zIGluIGZsaWdodCByaWdodCBub3cg4oCUIG5ldmVyIGNoYXNlIG5ld2x5LXNwYXduZWQgb25lcywgb3IgYSByZXRyeWluZyBwYWdlIGxvb3BzIGZvcmV2ZXIuXG4gIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4udGhpcy5vcGVuaW5nXSk7XG4gIH1cblxuICByZXN1bWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgIHN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgfVxuXG4gIGRldGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1ldGEpIHtcbiAgICAgIGlmIChzdGF0ZS5sYXN0RHJhd25JZHggPj0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHN0YXRlLmN2LndpZHRoLCBzdGF0ZS5jdi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IHNjdHggPSBzbmFwLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgICBpZiAoIXNjdHgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIDJkIGNvbnRleHRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjdHguZHJhd0ltYWdlKHN0YXRlLmN2LCAwLCAwKTtcbiAgICAgICAgICB0aGlzLl9sYXN0U25hcHNob3Quc2V0KHZpZGVvLCBzbmFwKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgICAgdGhpcy5jYWNoZS5yZWxlYXNlKHN0YXRlLm1ldGEuaWQsIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUuY3YucmVtb3ZlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5kZWxldGUodmlkZW8pO1xuICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gIH1cblxuICBvblNyY0NoYW5nZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjIHx8IFwiXCI7XG4gICAgaWYgKHZpZGVvLl9fcHVwTGFzdFNyYyA9PT0gc3JjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZpZGVvLl9fcHVwTGFzdFNyYyA9IHNyYztcbiAgICBpZiAodGhpcy5zZXNzaW9ucy5oYXModmlkZW8pKSB7XG4gICAgICB0aGlzLmRldGFjaCh2aWRlbyk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNoKHZpZGVvKTtcbiAgfVxuXG4gIC8vIFJlLW9wZW4gYXQgbmF0aXZlIHJlc29sdXRpb24gKHRoZSBlbGVtZW50IG91dGdyZXcgdGhlIGRvd25zY2FsZWQgZGVjb2RlKSwgcHJlc2VydmluZyBwbGF5YmFjayBzdGF0ZS5cbiAgcmVhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgdCA9IHN0YXRlLmN1cnJlbnRUaW1lO1xuICAgIGNvbnN0IHBhdXNlZCA9IHN0YXRlLnBhdXNlZDtcbiAgICBjb25zdCBlbmRlZCA9IHN0YXRlLmVuZGVkO1xuICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB2b2lkIHRoaXMuYXR0YWNoKHZpZGVvLCB0cnVlKS50aGVuKChucykgPT4ge1xuICAgICAgaWYgKCFucykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBucy5jdXJyZW50VGltZSA9IHQ7XG4gICAgICBucy5wYXVzZWQgPSBwYXVzZWQ7XG4gICAgICBucy5lbmRlZCA9IGVuZGVkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuKHJvb3Q6IEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyb290LnRhZ05hbWUgPT09IFwiVklERU9cIikge1xuICAgICAgdGhpcy5hdHRhY2gocm9vdCBhcyBIVE1MVmlkZW9FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKHJvb3QucXVlcnlTZWxlY3RvckFsbCkge1xuICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwidmlkZW9cIikuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICB0aGlzLmF0dGFjaCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFZpZGVvSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF92aWRlb19fKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5ldyBWaWRlb0hvb2soKS5pbnN0YWxsKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzI2LlxuXG5pbXBvcnQgeyBpbnN0YWxsVGlja0hvb2sgfSBmcm9tIFwiLi9pZnJhbWVfaG9va1wiO1xuaW1wb3J0IHsgaW5zdGFsbFZpZGVvSG9vayB9IGZyb20gXCIuL3ZpZGVvL2hvb2tcIjtcblxuaWYgKHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wKSB7XG4gIGluc3RhbGxUaWNrSG9vaygpO1xuICBpbnN0YWxsVmlkZW9Ib29rKCk7XG59XG4iXX0=