pup-recorder 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_tsup-dts-rollup.d.ts +70 -33
- package/dist/app.cjs +17 -11
- package/dist/chunk-NKXGLDTD.js +2 -0
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -2
- package/package.json +2 -3
- package/dist/chunk-G3FZJBQC.js +0 -96
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'source-map-support/register.js';import {createRequire}from'module';import {dirname,join}from'path';import {Log}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING}from'node-av/constants';import {spawn}from'child_process';import Fe from'tree-kill';import m from'zod';import {ok}from'assert';import {randomUUID}from'crypto';import {rmSync}from'fs';import {mkdir}from'fs/promises';import {tmpdir,platform}from'os';import Ke from'electron';import {HardwareContext}from'node-av/api';import {EventEmitter}from'events';import {createServer}from'net';var ye=Object.create;var C=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var O=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),k=t=>{throw TypeError(t)};var Y=(t,e,r)=>e in t?C(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var X=t=>[,,,ye(null)],Z=["class","method","getter","setter","accessor","field","value","get","set"],S=t=>t!==void 0&&typeof t!="function"?k("Function expected"):t,Ee=(t,e,r,n,o)=>({kind:Z[t],name:e,metadata:n,addInitializer:i=>r._?k("Already initialized"):o.push(S(i||null))}),G=(t,e)=>Y(e,O("metadata"),t[3]),Q=(t,e,r,n)=>{for(var o=0,i=t[e>>1],s=i&&i.length;o<s;o++)i[o].call(r);return n},E=(t,e,r,n,o,i)=>{var c,u,p,y,a=e&7,_=false,f=false,v=2,M=Z[a+5],xe=t[v]||(t[v]=[]),h=((o=o.prototype),_e(o,r));for(var U=n.length-1;U>=0;U--)p=Ee(a,r,u={},t[3],xe),(p.static=_,p.private=f,y=p.access={has:d=>r in d},(y.get=d=>d[r]),a>2),c=(0, n[U])(h[M],p),u._=1,S(c)&&(h[M]=c);return h&&C(o,r,h),o},ee=(t,e,r)=>Y(t,e+"",r);var or=(t,e,r)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&k("Object expected");var n,o;r&&(n=e[O("asyncDispose")]),n===void 0&&(n=e[O("dispose")],r&&(o=n)),typeof n!="function"&&k("Object not disposable"),o&&(n=function(){try{o.call(this);}catch(i){return Promise.reject(i)}}),t.push([r,n,e]);}else r&&t.push([r]);return e},ir=(t,e,r)=>{var n=typeof SuppressedError=="function"?SuppressedError:function(s,c,u,p){return p=Error(u),p.name="SuppressedError",p.error=s,p.suppressed=c,p},o=s=>e=r?new n(s,e,"An error was suppressed during disposal"):(r=true,s),i=s=>{for(;s=t.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,u=>(o(u),i()))}catch(u){o(u);}if(r)throw e};return i()};function re(t,e,r){try{return e(process.env[t])}catch{return r}}function te(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}function ur(t){return typeof t=="string"?t:String(t)}var Ae=createRequire(import.meta.url),R=process.env,A=re("PUP_LOG_LEVEL",te,2),ne=R.PUP_USE_INNER_PROXY==="1",oe=R.PUP_DISABLE_GPU==="1",ie=R.PUP_DISABLE_HW_CODEC==="1",se=R.PUP_DETERMINISTIC==="1",De=dirname(Ae.resolve("pup-recorder/package.json")),ae=join(De,"dist","app.cjs"),gr=R.PUP_IPC_SOCKET,ce=R.PUP_WINDOW_TOLERANT==="1";var N="<pup@debug>",$="<pup@info>",B="<pup@warn>",H="<pup@error>",W="<pup@fatal>";function I(t,e){return function(...r){let n=r.map(o=>o instanceof Error?o.stack??String(o):o);return t.call(this,...n)}}var ue,pe,le,de,fe,x;fe=[I],de=[I],le=[I],pe=[I],ue=[I];var P=class{constructor(e=A){this._level=e;Q(x,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,n=e.info??console.info,o=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?r:void 0,info:s>=2?n:void 0,warn:s>=1?o:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(N,...e);}info(...e){this.impl?.info?.($,...e);}warn(...e){this.impl?.warn?.(B,...e);}error(...e){this.impl?.error?.(H,...e);}fatal(...e){this.impl?.error?.(W,...e),process.exit(1);}dispatch(e){let r=e.trimEnd();r.startsWith(N)?this.debug(r.slice(N.length+1)):r.startsWith($)?this.info(r.slice($.length+1)):r.startsWith(B)?this.warn(r.slice(B.length+1)):r.startsWith(H)?this.error(r.slice(H.length+1)):this.info(r);}attach(e,r){return new Promise((n,o)=>{this.debug(`${r}.attach`);let i="",s=c=>{let u=c.toString();u.startsWith(W)?i+=u.slice(W.length+1):this.dispatch(u);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("message",s).on("error",c=>{i+=c.message,e.kill();}).once("close",(c,u)=>{c||u||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:c,signal:u,fatal:i}),o(new Error(i))):(this.debug(`${r}.close`),n());}).on("unhandledRejection",c=>{this.error(`${r}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${r}.unhandled`,c);});})}};x=X(),E(x,1,"debug",fe,P),E(x,1,"info",de,P),E(x,1,"warn",le,P),E(x,1,"error",pe,P),E(x,1,"fatal",ue,P),G(x,P);var l=new P;Log.setCallback((t,e)=>{let r=e.trimEnd();r&&(t<=AV_LOG_ERROR?l.error(r):t<=AV_LOG_WARNING&&l.warn(r));});function Er(t,e){return (...r)=>{try{let n=t(...r);return n instanceof Promise?n.catch(()=>e):n}catch{return e}}}var V="--pup-priv-args";function Ar(){let t=process.argv,e=t.find(n=>n.startsWith(V));if(!e)return l.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)),l.debug("pupargs",r),r}function me(t,e){let r=t.split(" ").filter(s=>s.length),[n,...o]=r;if(!n)throw new Error("empty command");let i=spawn(n,o,{stdio:"inherit",...e});return {process:i,wait:l.attach(i,n),kill(){let s=i.pid;s?Fe(s):i.kill();}}}var Ne=1920,$e=1080,Be=30,He=5,We="output.mp4",Gr=m.object({duration:m.number().describe("Duration in seconds"),width:m.number().describe("Video width"),height:m.number().describe("Video height"),fps:m.number().describe("Frames per second"),withAudio:m.boolean().describe("Capture and encode audio"),outFile:m.string().describe("Output mp4 file path"),useInnerProxy:m.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:m.boolean().describe("Render by frame rather than recording"),disableGpu:m.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:m.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:m.boolean().describe("Fall back to dom-ready if warmup load times out")}),he={width:Ne,height:$e,fps:Be,duration:He,outFile:We,withAudio:false,useInnerProxy:ne,deterministic:se,disableGpu:oe,disableHwCodec:ie,windowTolerant:ce};var je="[HWAccel]";async function Me(){let t=HardwareContext.auto(),e=t!==null;return t?.dispose(),e}var ge=Me().then(t=>(l.debug(je,"gpu:",t),t));async function be(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","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"];A<3&&e.push("log-level=3");let r=["FontationBackend"];if(!(await ge&&!t))e.push("use-angle=swiftshader","enable-unsafe-swiftshader");else {e.push("disable-gpu-sandbox","enable-unsafe-webgpu");let o=platform();o==="darwin"?e.push("use-angle=metal"):o==="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}async function qe(t){return [...await be(t),"headless=new"]}var Ye="[Electron]";async function we(t,e,r){let n=[],o=platform();o==="linux"&&n.push("xvfb-run","--auto-servernum",`--server-args="-screen 0 ${t.width}x${t.height}x24"`);let s=(await qe(e.includes("--disable-gpu"))).map(p=>`--${p}`),c=Buffer.from(JSON.stringify(e)).toString("base64");s.push(`${V}=${c}`),n.push(Ke,...s,ae);let u=n.join(" ");return l.debug(Ye,u),me(u,{stdio:["ignore","pipe","pipe"],shell:o==="linux",env:{...process.env,RUST_BACKTRACE:"full",PUP_IPC_SOCKET:r}})}var D=8;var j=class extends EventEmitter{constructor(r){super();this._socket=r;this._socket.on("data",n=>this.onData(n)),this._socket.on("error",n=>this.emit("error",n)),this._socket.on("close",()=>this.emit("close"));}_socket;_chunks=[];_buffered=0;onData(r){this._chunks.push(r),this._buffered+=r.byteLength,this.flush();}flush(){for(;;){if(this._buffered<D)return;let r=this.peek(D),n=r.readUInt32LE(0),o=r.readUInt32LE(4);if(this._buffered<D+o)return;this.consume(D);let i=this.consume(o);switch(this.emit("message",n,i),n){case 1:{this.emit("progress",Number(i.toString()));break}case 2:{this.emit("done",JSON.parse(i.toString()));break}case 3:{this.emit("error",new Error(i.toString()));break}}}}peek(r){return this._chunks[0]&&this._chunks[0].byteLength>=r?this._chunks[0]:Buffer.concat(this._chunks).subarray(0,r)}consume(r){let n=Buffer.allocUnsafe(r),o=0;for(;o<r;){let i=this._chunks[0],s=Math.min(i.byteLength,r-o);i.copy(n,o,0,s),s===i.byteLength?this._chunks.shift():this._chunks[0]=i.subarray(s),o+=s;}return this._buffered-=r,n}};function Pe(t){return new Promise((e,r)=>{let n=createServer();n.once("error",r),n.listen(t,()=>{e({waitForConnection(){return new Promise((o,i)=>{n.once("connection",s=>o(new j(s))),n.once("error",i);})},close(){n.close();}});});})}var T="[pup]";async function nr(t,e,r){l.debug(T,"runPupApp",t,e);let n=[t,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--out-file",`${e.outFile}`];return e.withAudio&&n.push("--with-audio"),e.useInnerProxy&&n.push("--use-inner-proxy"),e.deterministic&&n.push("--deterministic"),e.disableGpu&&n.push("--disable-gpu"),e.disableHwCodec&&n.push("--disable-hw-codec"),e.windowTolerant&&n.push("--window-tolerant"),we(e,n,r)}var w=he;async function bt(t,e){l.debug(T,"pup",t,e);let{signal:r}=e;r?.throwIfAborted();let n=e.outFile??w.outFile,o={width:e.width??w.width,height:e.height??w.height,fps:e.fps??w.fps,duration:e.duration??w.duration,withAudio:e.withAudio??w.withAudio,useInnerProxy:e.useInnerProxy??w.useInnerProxy,deterministic:e.deterministic??w.deterministic,disableGpu:e.disableGpu??w.disableGpu,disableHwCodec:e.disableHwCodec??w.disableHwCodec,windowTolerant:e.windowTolerant??w.windowTolerant,outFile:n},i=join(tmpdir(),"pup",randomUUID());await mkdir(i,{recursive:true});let s=join(i,"pup.sock"),c=performance.now(),u=a=>(l.info(T,`${t} progress: ${a}%`),e.onProgress?.(a)),p=await Pe(s),y=await nr(t,{...o,signal:r},s);r?.addEventListener("abort",()=>{l.debug(T,"aborted"),y.kill(),rmSync(i,{recursive:true,force:true});},{once:true});try{let a=new Promise(async(f,v)=>{(await p.waitForConnection()).on("close",()=>v(new Error("IPC closed without result"))).on("message",()=>r?.aborted&&v(r.reason)).on("progress",u).on("done",f).on("error",v);}).finally(()=>p.close());u(0);let _=await Promise.race([a,y.wait]);return ok(_,"no summary received"),u(100),l.info(T,`done ${n} in ${Math.round(performance.now()-c)}ms`),{..._,options:o}}catch(a){throw r?.throwIfAborted(),a}finally{rmSync(i,{recursive:true,force:true});}}export{he as A,bt as B,or as a,ir as b,re as c,te as d,ur as e,A as f,ne as g,oe as h,ie as i,se as j,De as k,ae as l,gr as m,ce as n,P as o,l as p,Er as q,V as r,Ar as s,me as t,Ne as u,$e as v,Be as w,He as x,We as y,Gr as z};//# sourceMappingURL=chunk-NKXGLDTD.js.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9iYXNlL3Byb2Nlc3MudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2NoZW1hLnRzIiwiLi4vc3JjL2Jhc2UvaHdhY2NlbC50cyIsIi4uL3NyYy9iYXNlL2Nocm9taXVtLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2VsZWN0cm9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9wdXAudHMiXSwibmFtZXMiOlsicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwiZW52IiwicHVwTG9nTGV2ZWwiLCJwdXBVc2VJbm5lclByb3h5IiwicHVwRGlzYWJsZUdQVSIsInB1cERpc2FibGVId0NvZGVjIiwicHVwRGV0ZXJtaW5pc3RpYyIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwicHVwQXBwIiwiam9pbiIsInB1cElwY1NvY2tldCIsInB1cFdpbmRvd1RvbGVyYW50IiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJleGVjIiwiY21kIiwib3B0aW9ucyIsInBhcnRzIiwiY29tbWFuZCIsInNwYXduIiwicGlkIiwidHJlZUtpbGwiLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9GSUxFIiwiUmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwiVEFHIiwiZGV0ZWN0R1BVRHJpdmVyIiwiaHciLCJIYXJkd2FyZUNvbnRleHQiLCJyZXN1bHQiLCJjYW5JVXNlR1BVIiwiY2hyb21pdW1PcHRpb25zIiwiZGlzYWJsZUdwdSIsIm9wdHMiLCJmZWF0dXJlcyIsInBsYXQiLCJwbGF0Zm9ybSIsImVsZWN0cm9uT3B0cyIsInJ1bkVsZWN0cm9uQXBwIiwic2l6ZSIsImlwY1NvY2tldFBhdGgiLCJjbWRQYXJ0cyIsImVsZWN0cm9uQXJncyIsImEiLCJiYXNlNjRBcmdzIiwiZWxlY3Ryb24iLCJIRUFERVJfU0laRSIsIklwY1JlYWRlciIsIkV2ZW50RW1pdHRlciIsIl9zb2NrZXQiLCJoZWFkZXIiLCJ0eXBlIiwibGVuIiwicGF5bG9hZCIsIm4iLCJvdXQiLCJvZmZzZXQiLCJjaHVuayIsInRha2UiLCJjcmVhdGVJcGNTZXJ2ZXIiLCJzb2NrZXRQYXRoIiwic2VydmVyIiwiY3JlYXRlU2VydmVyIiwib2siLCJubyIsInNvY2tldCIsInJ1blB1cEFwcCIsInNvdXJjZSIsImQiLCJwdXAiLCJvdXRGaWxlIiwicmVuZGVyT3B0cyIsInRtcERpciIsInRtcGRpciIsInJhbmRvbVVVSUQiLCJta2RpciIsInQwIiwidGljayIsInAiLCJoYW5kbGUiLCJybVN5bmMiLCJzdW1tYXJ5IiwiZSJdLCJtYXBwaW5ncyI6InFzRUFNTyxTQUFTQSxFQUFBQSxDQUFRQyxDQUFBQSxDQUFjQyxDQUFBQSxDQUFzQkMsQ0FBQUEsQ0FBaUMsQ0FDM0YsR0FBSSxDQUNGLE9BQU9ELENBQUFBLENBQU8sT0FBQSxDQUFRLEdBQUEsQ0FBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ1ZPLFNBQVNDLEVBQUFBLENBQVlDLENBQUFBLENBQW9CLENBQzlDLEdBQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQ2YsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNQyxDQUFBQSxDQUFNLE1BQUEsQ0FBT0QsQ0FBQyxDQUFBLENBQ3BCLEdBQUksTUFBQSxDQUFPLEtBQUEsQ0FBTUMsQ0FBRyxDQUFBLENBQ2xCLE1BQU0sSUFBSSxLQUFBLENBQU0sU0FBU0QsQ0FBQyxDQUFBLHNCQUFBLENBQXdCLENBQUEsQ0FFcEQsT0FBT0MsQ0FDVCxDQUVPLFNBQVNDLEVBQUFBLENBQVlGLENBQUFBLENBQW9CLENBQzlDLE9BQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQWlCQSxFQUMzQixNQUFBLENBQU9BLENBQUMsQ0FDakIsS0NUTUcsRUFBQUEsQ0FBVUMsYUFBQUEsQ0FBYyxNQUFBLENBQUEsSUFBQSxDQUFZLEdBQUcsQ0FBQSxDQUN2Q0MsQ0FBQUEsQ0FBTSxPQUFBLENBQVEsR0FBQSxDQUVQQyxDQUFBQSxDQUFjWCxFQUFBQSxDQUFLLGVBQUEsQ0FBaUJJLEVBQUFBLENBQWEsQ0FBQyxDQUFBLENBQ2xEUSxHQUFtQkYsQ0FBQUEsQ0FBSSxtQkFBQSxHQUEyQixHQUFBLENBQ2xERyxFQUFBQSxDQUFnQkgsQ0FBQUEsQ0FBSSxlQUFBLEdBQXVCLEdBQUEsQ0FDM0NJLEVBQUFBLENBQW9C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QyxDQUFBLEVBQUEsQ0FBSSxDQUFBLENBQ3RFLENBQUUsR0FBR0ssQ0FBQUEsQ0FBUyxPQUFBLENBQVNWLENBQVcsQ0FDM0MsQ0FBQSxNQUFTVyxDQUFBQSxDQUFHLENBQ1YsTUFBQTVGLENBQUFBLEVBQVEsY0FBQSxFQUFlLENBQ2pCNEYsQ0FDUixDQUFBLE9BQUUsQ0FDQUYsTUFBQUEsQ0FBT1IsQ0FBQUEsQ0FBUSxDQUFFLFNBQUEsQ0FBVyxJQUFBLENBQU0sS0FBQSxDQUFPLElBQUssQ0FBQyxFQUNqRCxDQUNGIiwiZmlsZSI6ImNodW5rLU5LWEdMRFRELmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHJldHVybiB4O1xuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJtb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5leHBvcnQgY29uc3QgcHVwVXNlSW5uZXJQcm94eSA9IGVudltcIlBVUF9VU0VfSU5ORVJfUFJPWFlcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVHUFUgPSBlbnZbXCJQVVBfRElTQUJMRV9HUFVcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVId0NvZGVjID0gZW52W1wiUFVQX0RJU0FCTEVfSFdfQ09ERUNcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERldGVybWluaXN0aWMgPSBlbnZbXCJQVVBfREVURVJNSU5JU1RJQ1wiXSA9PT0gXCIxXCI7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSXBjU29ja2V0ID0gZW52W1wiUFVQX0lQQ19TT0NLRVRcIl07XG5cbmV4cG9ydCBjb25zdCBwdXBXaW5kb3dUb2xlcmFudCA9IGVudltcIlBVUF9XSU5ET1dfVE9MRVJBTlRcIl0gPT09IFwiMVwiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCB0eXBlIFNlcmlhbGl6YWJsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlciB8IFNlcmlhbGl6YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcIm1lc3NhZ2VcIiwgZGlzcGF0Y2gpXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBraWxsKCkge1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB0cmVlS2lsbChwaWQpO1xuICAgICAgZWxzZSBwcm9jLmtpbGwoKTtcbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuaW1wb3J0IHtcbiAgcHVwRGV0ZXJtaW5pc3RpYyxcbiAgcHVwRGlzYWJsZUdQVSxcbiAgcHVwRGlzYWJsZUh3Q29kZWMsXG4gIHB1cFVzZUlubmVyUHJveHksXG4gIHB1cFdpbmRvd1RvbGVyYW50LFxufSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEUgPSBcIm91dHB1dC5tcDRcIjtcblxuZXhwb3J0IGNvbnN0IFJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiT3V0cHV0IG1wNCBmaWxlIHBhdGhcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG4gIGRpc2FibGVHcHU6IHB1cERpc2FibGVHUFUsXG4gIGRpc2FibGVId0NvZGVjOiBwdXBEaXNhYmxlSHdDb2RlYyxcbiAgd2luZG93VG9sZXJhbnQ6IHB1cFdpbmRvd1RvbGVyYW50LFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltIV0FjY2VsXVwiO1xuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RHUFVEcml2ZXIoKSB7XG4gIGNvbnN0IGh3ID0gSGFyZHdhcmVDb250ZXh0LmF1dG8oKTtcbiAgY29uc3QgcmVzdWx0ID0gaHcgIT09IG51bGw7XG4gIGh3Py5kaXNwb3NlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBjYW5JVXNlR1BVID0gZGV0ZWN0R1BVRHJpdmVyKCkudGhlbigocmVzdWx0KSA9PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNhbklVc2VHUFUgfSBmcm9tIFwiLi9od2FjY2VsXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaHJvbWl1bU9wdGlvbnMoZGlzYWJsZUdwdTogYm9vbGVhbikge1xuICBjb25zdCBvcHRzID0gW1xuICAgIC8vIOWuueWZqOaymeeusVxuICAgIFwibm8tc2FuZGJveFwiLFxuICAgIFwiZGlzYWJsZS1kZXYtc2htLXVzYWdlXCIsXG4gICAgLy8g6Leo5Z+fL+WuieWFqFxuICAgIFwiZGlzYWJsZS13ZWItc2VjdXJpdHlcIixcbiAgICBcImRpc2FibGUtc2l0ZS1pc29sYXRpb24tdHJpYWxzXCIsXG4gICAgXCJpZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsXG4gICAgLy8g5b2V5Yi26KGM5Li6XG4gICAgXCJkaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkXCIsXG4gICAgXCJtdXRlLWF1ZGlvXCIsXG4gICAgXCJhdXRvcGxheS1wb2xpY3k9bm8tdXNlci1nZXN0dXJlLXJlcXVpcmVkXCIsXG4gICAgXCJkaXNhYmxlLWV4dGVuc2lvbnNcIixcbiAgICAvLyDmuLLmn5NcbiAgICBcImZvcmNlLWRldmljZS1zY2FsZS1mYWN0b3I9MVwiLFxuICAgIFwiZm9yY2UtY29sb3ItcHJvZmlsZT1zcmdiXCIsXG4gICAgXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiLFxuICAgIFwidXNlLWdsPWFuZ2xlXCIsXG4gICAgXCJkZXRlcm1pbmlzdGljLW1vZGVcIixcbiAgICBcImVuYWJsZS1iZWdpbi1mcmFtZS1jb250cm9sXCIsXG4gICAgXCJkaXNhYmxlLW5ldy1jb250ZW50LXJlbmRlcmluZy10aW1lb3V0XCIsXG4gICAgXCJydW4tYWxsLWNvbXBvc2l0b3Itc3RhZ2VzLWJlZm9yZS1kcmF3XCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLWFuaW1hdGlvblwiLFxuICAgIFwiZGlzYWJsZS10aHJlYWRlZC1zY3JvbGxpbmdcIixcbiAgICBcImRpc2FibGUtY2hlY2tlci1pbWFnaW5nXCIsXG4gICAgXCJkaXNhYmxlLWltYWdlLWFuaW1hdGlvbi1yZXN5bmNcIixcbiAgICBcImVuYWJsZS1zdXJmYWNlLXN5bmNocm9uaXphdGlvblwiLFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wdXBwZXRlZXIvcHVwcGV0ZWVyL2lzc3Vlcy8yNDEwXG4gICAgXCJmb250LXJlbmRlci1oaW50aW5nPW5vbmVcIixcbiAgICAvLyDotYTmupDmjqfliLZcbiAgICBcImRpc2FibGUtYmFja2dyb3VuZC1uZXR3b3JraW5nXCIsXG4gIF07XG5cbiAgaWYgKHB1cExvZ0xldmVsIDwgMykge1xuICAgIG9wdHMucHVzaChcImxvZy1sZXZlbD0zXCIpO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBbXCJGb250YXRpb25CYWNrZW5kXCJdO1xuICBjb25zdCBlbmFibGVHcHUgPSAoYXdhaXQgY2FuSVVzZUdQVSkgJiYgIWRpc2FibGVHcHU7XG4gIGlmICghZW5hYmxlR3B1KSB7XG4gICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPXN3aWZ0c2hhZGVyXCIsIFwiZW5hYmxlLXVuc2FmZS1zd2lmdHNoYWRlclwiKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLnB1c2goXCJkaXNhYmxlLWdwdS1zYW5kYm94XCIsIFwiZW5hYmxlLXVuc2FmZS13ZWJncHVcIik7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgaWYgKHBsYXQgPT09IFwiZGFyd2luXCIpIHtcbiAgICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1tZXRhbFwiKTtcbiAgICB9IGVsc2UgaWYgKHBsYXQgPT09IFwid2luMzJcIikge1xuICAgICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPWQzZDExXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9dnVsa2FuXCIsIFwiZGlzYWJsZS12dWxrYW4tc3VyZmFjZVwiKTtcbiAgICAgIGZlYXR1cmVzLnB1c2goXCJWdWxrYW5cIik7XG4gICAgfVxuICB9XG5cbiAgb3B0cy5wdXNoKGBlbmFibGUtZmVhdHVyZXM9JHtmZWF0dXJlcy5qb2luKFwiLFwiKX1gKTtcbiAgcmV0dXJuIG9wdHM7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgZWxlY3Ryb24sIHsgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgY2hyb21pdW1PcHRpb25zIH0gZnJvbSBcIi4uL2Jhc2UvY2hyb21pdW1cIjtcbmltcG9ydCB7IHB1cEFwcCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlYywgUFVQX0FSR1NfS0VZIH0gZnJvbSBcIi4uL2Jhc2UvcHJvY2Vzc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWxlY3Ryb25PcHRzKGRpc2FibGVHcHU6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIFsuLi4oYXdhaXQgY2hyb21pdW1PcHRpb25zKGRpc2FibGVHcHUpKSwgXCJoZWFkbGVzcz1uZXdcIl07XG59XG5cbmNvbnN0IFRBRyA9IFwiW0VsZWN0cm9uXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRWxlY3Ryb25BcHAoc2l6ZTogU2l6ZSwgYXJnczogdW5rbm93bltdLCBpcGNTb2NrZXRQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgY21kUGFydHM6IHVua25vd25bXSA9IFtdO1xuICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgaWYgKHBsYXQgPT09IFwibGludXhcIikge1xuICAgIGNtZFBhcnRzLnB1c2goYHh2ZmItcnVuYCwgYC0tYXV0by1zZXJ2ZXJudW1gLCBgLS1zZXJ2ZXItYXJncz1cIi1zY3JlZW4gMCAke3NpemUud2lkdGh9eCR7c2l6ZS5oZWlnaHR9eDI0XCJgKTtcbiAgfVxuICBjb25zdCBvcHRzID0gYXdhaXQgZWxlY3Ryb25PcHRzKGFyZ3MuaW5jbHVkZXMoXCItLWRpc2FibGUtZ3B1XCIpKTtcbiAgY29uc3QgZWxlY3Ryb25BcmdzID0gb3B0cy5tYXAoKGEpID0+IGAtLSR7YX1gKTtcbiAgY29uc3QgYmFzZTY0QXJncyA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGFyZ3MpKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgZWxlY3Ryb25BcmdzLnB1c2goYCR7UFVQX0FSR1NfS0VZfT0ke2Jhc2U2NEFyZ3N9YCk7XG4gIGNtZFBhcnRzLnB1c2goZWxlY3Ryb24sIC4uLmVsZWN0cm9uQXJncywgcHVwQXBwKTtcbiAgY29uc3QgY21kID0gY21kUGFydHMuam9pbihcIiBcIik7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGNtZCk7XG4gIHJldHVybiBleGVjKGNtZCwge1xuICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICBzaGVsbDogcGxhdCA9PT0gXCJsaW51eFwiLFxuICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgUlVTVF9CQUNLVFJBQ0U6IFwiZnVsbFwiLCBQVVBfSVBDX1NPQ0tFVDogaXBjU29ja2V0UGF0aCB9LFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbm5lY3Rpb24sIGNyZWF0ZVNlcnZlciwgdHlwZSBTb2NrZXQgfSBmcm9tIFwibmV0XCI7XG5cbmNvbnN0IEhFQURFUl9TSVpFID0gODtcblxuZXhwb3J0IGNvbnN0IGVudW0gSXBjTXNnVHlwZSB7XG4gIFBST0dSRVNTID0gMSxcbiAgRE9ORSA9IDIsXG4gIEVSUk9SID0gMyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge31cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuUFJPR1JFU1MsIEJ1ZmZlci5mcm9tKGAke3ZhbHVlfWApKTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5FUlJPUiwgQnVmZmVyLmZyb20oZXJyb3IpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuRE9ORSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlKHR5cGU6IElwY01zZ1R5cGUsIHBheWxvYWQ6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYyhIRUFERVJfU0laRSk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUodHlwZSwgMCk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUocGF5bG9hZC5ieXRlTGVuZ3RoLCA0KTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUoaGVhZGVyKTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUocGF5bG9hZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RJcGMoc29ja2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxJcGNXcml0ZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzb2NrZXQgPSBjcmVhdGVDb25uZWN0aW9uKHNvY2tldFBhdGgpO1xuICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCAoKSA9PiByZXNvbHZlKG5ldyBJcGNXcml0ZXIoc29ja2V0KSkpO1xuICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8e1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBtZXNzYWdlOiBbdHlwZTogSXBjTXNnVHlwZSwgYnVmZmVyOiBCdWZmZXJdO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbXTtcbn0+IHtcbiAgcHJpdmF0ZSBfY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBwcml2YXRlIF9idWZmZXJlZCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc29ja2V0OiBTb2NrZXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImRhdGFcIiwgKGRhdGEpID0+IHRoaXMub25EYXRhKGRhdGEpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiKSk7XG4gIH1cblxuICBwcml2YXRlIG9uRGF0YShkYXRhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaHVua3MucHVzaChkYXRhKTtcbiAgICB0aGlzLl9idWZmZXJlZCArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgdGhpcy5mbHVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaCgpOiB2b2lkIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSkgcmV0dXJuO1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5wZWVrKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBoZWFkZXIucmVhZFVJbnQzMkxFKDApIGFzIElwY01zZ1R5cGU7XG4gICAgICBjb25zdCBsZW4gPSBoZWFkZXIucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkIDwgSEVBREVSX1NJWkUgKyBsZW4pIHJldHVybjtcbiAgICAgIHRoaXMuY29uc3VtZShIRUFERVJfU0laRSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jb25zdW1lKGxlbik7XG4gICAgICB0aGlzLmVtaXQoXCJtZXNzYWdlXCIsIHR5cGUsIHBheWxvYWQpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5QUk9HUkVTUzoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIE51bWJlcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRE9ORToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgSlNPTi5wYXJzZShwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRVJST1I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBlZWsobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fY2h1bmtzWzBdICYmIHRoaXMuX2NodW5rc1swXS5ieXRlTGVuZ3RoID49IG4pIHJldHVybiB0aGlzLl9jaHVua3NbMF07XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5fY2h1bmtzKS5zdWJhcnJheSgwLCBuKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZShuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgbikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9jaHVua3NbMF0hO1xuICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGNodW5rLmJ5dGVMZW5ndGgsIG4gLSBvZmZzZXQpO1xuICAgICAgY2h1bmsuY29weShvdXQsIG9mZnNldCwgMCwgdGFrZSk7XG4gICAgICBpZiAodGFrZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaHVua3Muc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NodW5rc1swXSA9IGNodW5rLnN1YmFycmF5KHRha2UpO1xuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IHRha2U7XG4gICAgfVxuICAgIHRoaXMuX2J1ZmZlcmVkIC09IG47XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY1NlcnZlciB7XG4gIHdhaXRGb3JDb25uZWN0aW9uKCk6IFByb21pc2U8SXBjUmVhZGVyPjtcbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlwY1NlcnZlcihzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1NlcnZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKHNvY2tldFBhdGgsICgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB3YWl0Rm9yQ29ubmVjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SXBjUmVhZGVyPigob2ssIG5vKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImNvbm5lY3Rpb25cIiwgKHNvY2tldCkgPT4gb2sobmV3IElwY1JlYWRlcihzb2NrZXQpKSk7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIG5vKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBybVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBydW5FbGVjdHJvbkFwcCB9IGZyb20gXCIuL3JlbmRlcmVyL2VsZWN0cm9uXCI7XG5pbXBvcnQgeyBjcmVhdGVJcGNTZXJ2ZXIsIHR5cGUgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyUmVzdWx0IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW3B1cF1cIjtcblxuZXhwb3J0IHR5cGUgUHVwUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBQdXBPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxSZW5kZXJPcHRpb25zPiB7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzPzogUHVwUHJvZ3Jlc3NDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdXBSZXN1bHQgZXh0ZW5kcyBSZW5kZXJSZXN1bHQge31cblxuaW50ZXJmYWNlIEFwcE9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blB1cEFwcChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogQXBwT3B0aW9ucywgc29ja2V0UGF0aDogc3RyaW5nKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIGBydW5QdXBBcHBgLCBzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW1xuICAgIHNvdXJjZSxcbiAgICBgLS13aWR0aGAsXG4gICAgYCR7b3B0aW9ucy53aWR0aH1gLFxuICAgIGAtLWhlaWdodGAsXG4gICAgYCR7b3B0aW9ucy5oZWlnaHR9YCxcbiAgICBgLS1mcHNgLFxuICAgIGAke29wdGlvbnMuZnBzfWAsXG4gICAgYC0tZHVyYXRpb25gLFxuICAgIGAke29wdGlvbnMuZHVyYXRpb259YCxcbiAgICBgLS1vdXQtZmlsZWAsXG4gICAgYCR7b3B0aW9ucy5vdXRGaWxlfWAsXG4gIF07XG4gIGlmIChvcHRpb25zLndpdGhBdWRpbykgYXJncy5wdXNoKGAtLXdpdGgtYXVkaW9gKTtcbiAgaWYgKG9wdGlvbnMudXNlSW5uZXJQcm94eSkgYXJncy5wdXNoKGAtLXVzZS1pbm5lci1wcm94eWApO1xuICBpZiAob3B0aW9ucy5kZXRlcm1pbmlzdGljKSBhcmdzLnB1c2goYC0tZGV0ZXJtaW5pc3RpY2ApO1xuICBpZiAob3B0aW9ucy5kaXNhYmxlR3B1KSBhcmdzLnB1c2goYC0tZGlzYWJsZS1ncHVgKTtcbiAgaWYgKG9wdGlvbnMuZGlzYWJsZUh3Q29kZWMpIGFyZ3MucHVzaChgLS1kaXNhYmxlLWh3LWNvZGVjYCk7XG4gIGlmIChvcHRpb25zLndpbmRvd1RvbGVyYW50KSBhcmdzLnB1c2goYC0td2luZG93LXRvbGVyYW50YCk7XG5cbiAgcmV0dXJuIHJ1bkVsZWN0cm9uQXBwKG9wdGlvbnMsIGFyZ3MsIHNvY2tldFBhdGgpO1xufVxuXG5jb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnRpYWw8UHVwT3B0aW9ucz4pOiBQcm9taXNlPFB1cFJlc3VsdD4ge1xuICBsb2dnZXIuZGVidWcoVEFHLCBgcHVwYCwgc291cmNlLCBvcHRpb25zKTtcblxuICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGNvbnN0IG91dEZpbGUgPSBvcHRpb25zLm91dEZpbGUgPz8gZC5vdXRGaWxlO1xuICBjb25zdCByZW5kZXJPcHRzOiBSZW5kZXJPcHRpb25zID0ge1xuICAgIHdpZHRoOiBvcHRpb25zLndpZHRoID8/IGQud2lkdGgsXG4gICAgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCA/PyBkLmhlaWdodCxcbiAgICBmcHM6IG9wdGlvbnMuZnBzID8/IGQuZnBzLFxuICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uID8/IGQuZHVyYXRpb24sXG4gICAgd2l0aEF1ZGlvOiBvcHRpb25zLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICB1c2VJbm5lclByb3h5OiBvcHRpb25zLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgIGRldGVybWluaXN0aWM6IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgZGlzYWJsZUdwdTogb3B0aW9ucy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICBkaXNhYmxlSHdDb2RlYzogb3B0aW9ucy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgIHdpbmRvd1RvbGVyYW50OiBvcHRpb25zLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgb3V0RmlsZSxcbiAgfTtcblxuICBjb25zdCB0bXBEaXIgPSBqb2luKHRtcGRpcigpLCBcInB1cFwiLCByYW5kb21VVUlEKCkpO1xuICBhd2FpdCBta2Rpcih0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBzb2NrZXRQYXRoID0gam9pbih0bXBEaXIsIFwicHVwLnNvY2tcIik7XG5cbiAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgdGljayA9IChwOiBudW1iZXIpID0+IChsb2dnZXIuaW5mbyhUQUcsIGAke3NvdXJjZX0gcHJvZ3Jlc3M6ICR7cH0lYCksIG9wdGlvbnMub25Qcm9ncmVzcz8uKHApKTtcblxuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBjcmVhdGVJcGNTZXJ2ZXIoc29ja2V0UGF0aCk7XG4gIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHJ1blB1cEFwcChzb3VyY2UsIHsgLi4ucmVuZGVyT3B0cywgc2lnbmFsIH0sIHNvY2tldFBhdGgpO1xuXG4gIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBcImFib3J0XCIsXG4gICAgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYGFib3J0ZWRgKTtcbiAgICAgIGhhbmRsZS5raWxsKCk7XG4gICAgICBybVN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgICB7IG9uY2U6IHRydWUgfSxcbiAgKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPElwY0RvbmVQYXlsb2FkPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAoYXdhaXQgc2VydmVyLndhaXRGb3JDb25uZWN0aW9uKCkpXG4gICAgICAgIC5vbihcImNsb3NlXCIsICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJJUEMgY2xvc2VkIHdpdGhvdXQgcmVzdWx0XCIpKSlcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCAoKSA9PiBzaWduYWw/LmFib3J0ZWQgJiYgcmVqZWN0KHNpZ25hbC5yZWFzb24pKVxuICAgICAgICAub24oXCJwcm9ncmVzc1wiLCB0aWNrKVxuICAgICAgICAub24oXCJkb25lXCIsIHJlc29sdmUpXG4gICAgICAgIC5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSkuZmluYWxseSgoKSA9PiBzZXJ2ZXIuY2xvc2UoKSk7XG4gICAgdGljaygwKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtyZXN1bHQsIGhhbmRsZS53YWl0XSk7XG4gICAgb2soc3VtbWFyeSwgXCJubyBzdW1tYXJ5IHJlY2VpdmVkXCIpO1xuICAgIHRpY2soMTAwKTtcbiAgICBsb2dnZXIuaW5mbyhUQUcsIGBkb25lICR7b3V0RmlsZX0gaW4gJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdDApfW1zYCk7XG4gICAgcmV0dXJuIHsgLi4uc3VtbWFyeSwgb3B0aW9uczogcmVuZGVyT3B0cyB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHRocm93IGU7XG4gIH0gZmluYWxseSB7XG4gICAgcm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG4iXX0=
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'source-map-support/register.js';import {
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import'source-map-support/register.js';import {z,q,d,p,s,A,B}from'./chunk-NKXGLDTD.js';import {program}from'commander';async function m(n){let e=z.shape,i=n.defaults;program.name(n.name).argument("<source>","file://, http(s)://, or data: URI").option("-W, --width <number>",e.width.description,`${i.width}`).option("-H, --height <number>",e.height.description,`${i.height}`).option("-f, --fps <number>",e.fps.description,`${i.fps}`).option("-t, --duration <number>",e.duration.description,`${i.duration}`).option("-o, --out-file <path>",e.outFile.description,i.outFile).option("-a, --with-audio",e.withAudio.description,i.withAudio).option("-d, --deterministic",e.deterministic.description,i.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,i.useInnerProxy).option("--disable-gpu",e.disableGpu.description,i.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,i.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,i.windowTolerant).action(async(t,o)=>{try{await n.run(t,{width:q(d,i.width)(o.width),height:q(d,i.height)(o.height),fps:q(d,i.fps)(o.fps),duration:q(d,i.duration)(o.duration),outFile:o.outFile??i.outFile,withAudio:o.withAudio??i.withAudio,useInnerProxy:o.useInnerProxy??i.useInnerProxy,deterministic:o.deterministic??i.deterministic,disableGpu:o.disableGpu??i.disableGpu,disableHwCodec:o.disableHwCodec??i.disableHwCodec,windowTolerant:o.windowTolerant??i.windowTolerant});}catch(w){p.fatal(w);}}),await program.parseAsync(s());}m({name:"pup",defaults:A,run:async(n,e)=>{let i=new AbortController,t=0;process.once("SIGTERM",()=>(t=143,i.abort())),process.once("SIGINT",()=>(t=130,i.abort())),process.once("exit",o=>(t=o,i.abort()));try{await B(n,{...e,signal:i.signal});}finally{t&&process.exit(t);}}});//# sourceMappingURL=cli.js.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvY2xpLnRzIl0sIm5hbWVzIjpbIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJSZW5kZXJTY2hlbWEiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJub2VyciIsInBhcnNlTnVtYmVyIiwiZSIsImxvZ2dlciIsInBhcmdzIiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJjdHJsIiwiZXhpdENvZGUiLCJjIiwicHVwIl0sIm1hcHBpbmdzIjoidUhBZUEsZUFBc0JBLEVBQVFDLENBQUFBLENBQXFCLENBQ2pELElBQU1DLENBQUFBLENBQVFDLENBQUFBLENBQWEsS0FBQSxDQUNyQkMsQ0FBQUEsQ0FBSUgsQ0FBQUEsQ0FBUSxTQUNsQkksT0FBQUEsQ0FDRyxJQUFBLENBQUtKLENBQUFBLENBQVEsSUFBSSxDQUFBLENBQ2pCLFFBQUEsQ0FBUyxVQUFBLENBQVksbUNBQW1DLEVBQ3hELE1BQUEsQ0FBTyxzQkFBQSxDQUF3QkMsQ0FBQUEsQ0FBTSxLQUFBLENBQU0sV0FBQSxDQUFhLENBQUEsRUFBR0UsQ0FBQUEsQ0FBRSxLQUFLLEVBQUUsQ0FBQSxDQUNwRSxNQUFBLENBQU8sdUJBQUEsQ0FBeUJGLENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUUsQ0FBQSxDQUN2RSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JGLENBQUFBLENBQU0sR0FBQSxDQUFJLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLEVBQUUsR0FBRyxDQUFBLENBQUUsQ0FBQSxDQUM5RCxNQUFBLENBQU8seUJBQUEsQ0FBMkJGLENBQUFBLENBQU0sUUFBQSxDQUFTLFdBQUEsQ0FBYSxHQUFHRSxDQUFBQSxDQUFFLFFBQVEsQ0FBQSxDQUFFLENBQUEsQ0FDN0UsT0FBTyx1QkFBQSxDQUF5QkYsQ0FBQUEsQ0FBTSxPQUFBLENBQVEsV0FBQSxDQUFhRSxFQUFFLE9BQU8sQ0FBQSxDQUNwRSxNQUFBLENBQU8sa0JBQUEsQ0FBb0JGLENBQUFBLENBQU0sU0FBQSxDQUFVLFdBQUEsQ0FBYUUsQ0FBQUEsQ0FBRSxTQUFTLENBQUEsQ0FDbkUsTUFBQSxDQUFPLHFCQUFBLENBQXVCRixDQUFBQSxDQUFNLGFBQUEsQ0FBYyxXQUFBLENBQWFFLENBQUFBLENBQUUsYUFBYSxFQUM5RSxNQUFBLENBQU8sbUJBQUEsQ0FBcUJGLENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUUsQ0FBQUEsQ0FBRSxhQUFhLENBQUEsQ0FDNUUsT0FBTyxlQUFBLENBQWlCRixDQUFBQSxDQUFNLFVBQUEsQ0FBVyxXQUFBLENBQWFFLEVBQUUsVUFBVSxDQUFBLENBQ2xFLE1BQUEsQ0FBTyxvQkFBQSxDQUFzQkYsRUFBTSxjQUFBLENBQWUsV0FBQSxDQUFhRSxDQUFBQSxDQUFFLGNBQWMsQ0FBQSxDQUMvRSxNQUFBLENBQU8sbUJBQUEsQ0FBcUJGLENBQUFBLENBQU0sZUFBZSxXQUFBLENBQWFFLENBQUFBLENBQUUsY0FBYyxDQUFBLENBQzlFLE1BQUEsQ0FBTyxNQUFPRSxDQUFBQSxDQUFnQkMsQ0FBQUEsR0FBUyxDQUN0QyxHQUFJLENBQ0YsTUFBTU4sQ0FBQUEsQ0FBUSxHQUFBLENBQUlLLENBQUFBLENBQVEsQ0FDeEIsS0FBQSxDQUFPRSxFQUFNQyxDQUFBQSxDQUFhTCxDQUFBQSxDQUFFLEtBQUssQ0FBQSxDQUFFRyxFQUFLLEtBQUssQ0FBQSxDQUM3QyxNQUFBLENBQVFDLENBQUFBLENBQU1DLEVBQWFMLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUVHLENBQUFBLENBQUssTUFBTSxDQUFBLENBQ2hELEdBQUEsQ0FBS0MsQ0FBQUEsQ0FBTUMsRUFBYUwsQ0FBQUEsQ0FBRSxHQUFHLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDdkMsUUFBQSxDQUFVQyxDQUFBQSxDQUFNQyxFQUFhTCxDQUFBQSxDQUFFLFFBQVEsQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLFFBQVEsQ0FBQSxDQUN0RCxPQUFBLENBQVNBLENBQUFBLENBQUssU0FBV0gsQ0FBQUEsQ0FBRSxPQUFBLENBQzNCLFNBQUEsQ0FBV0csQ0FBQUEsQ0FBSyxTQUFBLEVBQWFILENBQUFBLENBQUUsU0FBQSxDQUMvQixhQUFBLENBQWVHLEVBQUssYUFBQSxFQUFpQkgsQ0FBQUEsQ0FBRSxhQUFBLENBQ3ZDLGFBQUEsQ0FBZUcsQ0FBQUEsQ0FBSyxhQUFBLEVBQWlCSCxDQUFBQSxDQUFFLGFBQUEsQ0FDdkMsV0FBWUcsQ0FBQUEsQ0FBSyxVQUFBLEVBQWNILENBQUFBLENBQUUsVUFBQSxDQUNqQyxjQUFBLENBQWdCRyxDQUFBQSxDQUFLLGNBQUEsRUFBa0JILENBQUFBLENBQUUsZUFDekMsY0FBQSxDQUFnQkcsQ0FBQUEsQ0FBSyxjQUFBLEVBQWtCSCxDQUFBQSxDQUFFLGNBQzNDLENBQUMsRUFDSCxDQUFBLE1BQVNNLEVBQUcsQ0FDVkMsQ0FBQUEsQ0FBTyxLQUFBLENBQU1ELENBQUMsRUFDaEIsQ0FDRixDQUFDLENBQUEsQ0FDSCxNQUFNTCxRQUFRLFVBQUEsQ0FBV08sQ0FBQUEsRUFBTyxFQUNsQyxDQzlDQVosQ0FBQUEsQ0FBUSxDQUNOLElBQUEsQ0FBTSxNQUNOLFFBQUEsQ0FBVWEsQ0FBQUEsQ0FDVixHQUFBLENBQUssTUFBT1AsQ0FBQUEsQ0FBUUwsQ0FBQUEsR0FBWSxDQUM5QixJQUFNYSxFQUFPLElBQUksZUFBQSxDQUNiQyxDQUFBQSxDQUFXLENBQUEsQ0FDZixPQUFBLENBQVEsSUFBQSxDQUFLLFNBQUEsQ0FBVyxLQUFRQSxFQUFXLEdBQUEsQ0FBTUQsQ0FBQUEsQ0FBSyxLQUFBLEVBQU0sQ0FBRSxFQUM5RCxPQUFBLENBQVEsSUFBQSxDQUFLLFFBQUEsQ0FBVSxLQUFRQyxFQUFXLEdBQUEsQ0FBTUQsQ0FBQUEsQ0FBSyxLQUFBLEVBQU0sQ0FBRSxDQUFBLENBQzdELE9BQUEsQ0FBUSxJQUFBLENBQUssTUFBQSxDQUFTRSxJQUFRRCxDQUFBQSxDQUFXQyxDQUFBQSxDQUFJRixDQUFBQSxDQUFLLEtBQUEsRUFBTSxDQUFFLENBQUEsQ0FDMUQsR0FBSSxDQUNGLE1BQU1HLENBQUFBLENBQUlYLENBQUFBLENBQVEsQ0FBRSxHQUFHTCxDQUFBQSxDQUFTLE1BQUEsQ0FBUWEsQ0FBQUEsQ0FBSyxNQUFPLENBQUMsRUFDdkQsQ0FBQSxPQUFFLENBQ0FDLENBQUFBLEVBQVksUUFBUSxJQUFBLENBQUtBLENBQVEsRUFDbkMsQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJjbGkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBSZW5kZXJTY2hlbWEsIHR5cGUgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlZmF1bHRzOiBSZW5kZXJPcHRpb25zO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IFJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IG9wdGlvbnMuZGVmYXVsdHM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBvciBkYXRhOiBVUklcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGg+XCIsIHNoYXBlLm91dEZpbGUuZGVzY3JpcHRpb24sIGQub3V0RmlsZSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10b2xlcmFudFwiLCBzaGFwZS53aW5kb3dUb2xlcmFudC5kZXNjcmlwdGlvbiwgZC53aW5kb3dUb2xlcmFudClcbiAgICAuYWN0aW9uKGFzeW5jIChzb3VyY2U6IHN0cmluZywgb3B0cykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5ydW4oc291cmNlLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBwdXAgfSBmcm9tIFwiLi9wdXBcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcInB1cFwiLFxuICBkZWZhdWx0czogZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGV0IGV4aXRDb2RlID0gMDtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+ICgoZXhpdENvZGUgPSAxNDMpLCBjdHJsLmFib3J0KCkpKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdJTlRcIiwgKCkgPT4gKChleGl0Q29kZSA9IDEzMCksIGN0cmwuYWJvcnQoKSkpO1xuICAgIHByb2Nlc3Mub25jZShcImV4aXRcIiwgKGMpID0+ICgoZXhpdENvZGUgPSBjKSwgY3RybC5hYm9ydCgpKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHB1cChzb3VyY2UsIHsgLi4ub3B0aW9ucywgc2lnbmFsOiBjdHJsLnNpZ25hbCB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdENvZGUgJiYgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export { pupLogLevel } from './_tsup-dts-rollup.js';
|
|
2
2
|
export { pupUseInnerProxy } from './_tsup-dts-rollup.js';
|
|
3
3
|
export { pupDisableGPU } from './_tsup-dts-rollup.js';
|
|
4
|
+
export { pupDisableHwCodec } from './_tsup-dts-rollup.js';
|
|
4
5
|
export { pupDeterministic } from './_tsup-dts-rollup.js';
|
|
5
6
|
export { pupPkgRoot } from './_tsup-dts-rollup.js';
|
|
6
7
|
export { pupApp } from './_tsup-dts-rollup.js';
|
|
7
8
|
export { pupIpcSocket } from './_tsup-dts-rollup.js';
|
|
8
|
-
export {
|
|
9
|
+
export { pupWindowTolerant } from './_tsup-dts-rollup.js';
|
|
9
10
|
export { penv } from './_tsup-dts-rollup.js';
|
|
10
11
|
export { EnvParser } from './_tsup-dts-rollup.js';
|
|
11
12
|
export { Lazy } from './_tsup-dts-rollup.js';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'source-map-support/register.js';export{y as ConcurrencyLimiter,u as DEFAULT_DURATION,t as DEFAULT_FPS,s as DEFAULT_HEIGHT,v as DEFAULT_OUT_FILE,r as DEFAULT_WIDTH,A as EncoderPipeline,z as FormatMuxer,l as Logger,o as PUP_ARGS_KEY,w as RenderSchema,x as defaultRenderOptions,q as exec,m as logger,n as noerr,p as pargs,b as parseNumber,c as parseString,a as penv,B as pup,i as pupApp,g as pupDeterministic,f as pupDisableGPU,k as pupExperimentalPuppeteer,j as pupIpcSocket,d as pupLogLevel,h as pupPkgRoot,e as pupUseInnerProxy}from'./chunk-G3FZJBQC.js';import {setTimeout as setTimeout$1}from'timers/promises';var u=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};function p(r){return new Promise(e=>setTimeout(e,r))}function F(r,e){let t,i=false;async function n(o){await r(o),!i&&(t=setTimeout(()=>n(o+1),e));}return t=setTimeout(()=>n(0),e),()=>{i=true,clearTimeout(t);}}function Q({fn:r,maxAttempts:e=3,timeout:t}){let i=new Error(`timeout over ${t}ms`);return async function(...n){let o=0;for(;;)try{let m=[r(...n)];return t&&m.push(setTimeout$1(t).then(()=>{throw i})),await Promise.race(m)}catch(m){if(o++,o>=e)throw m;await p(Math.pow(2,o)*100+Math.random()*100);}}}export{u as Lazy,F as periodical,p as sleep,Q as useRetry};//# sourceMappingURL=index.js.map
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyJdLCJuYW1lcyI6WyJMYXp5IiwibWFrZVZhbHVlIiwic2xlZXAiLCJtcyIsInJlc29sdmUiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsInVzZVJldHJ5IiwiZm4iLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJ0aW1lb3V0RXJyb3IiLCJhcmdzIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsImUiXSwibWFwcGluZ3MiOiIwbUJBRU8sSUFBTUEsRUFBTixLQUFjLENBQ25CLFlBQXFCQyxDQUFBQSxDQUFvQixDQUFwQixlQUFBQSxFQUFxQixDQUFyQixVQUVyQixJQUFJLEtBQUEsRUFBVyxDQUNiLE9BQUssSUFBQSxDQUFLLGVBQ1IsSUFBQSxDQUFLLE1BQUEsQ0FBUyxLQUFLLFNBQUEsRUFBVSxDQUM3QixLQUFLLFlBQUEsQ0FBZSxJQUFBLENBQUEsQ0FFZixLQUFLLE1BQ2QsQ0FFQSxJQUFJLFdBQUEsRUFBdUIsQ0FDekIsT0FBTyxJQUFBLENBQUssWUFDZCxDQUVRLFlBQUEsQ0FBZSxLQUFBLENBQ2YsTUFDVixFQ2pCTyxTQUFTQyxDQUFBQSxDQUFNQyxDQUFBQSxDQUFZLENBQ2hDLE9BQU8sSUFBSSxPQUFBLENBQWVDLENBQUFBLEVBQVksV0FBV0EsQ0FBQUEsQ0FBU0QsQ0FBRSxDQUFDLENBQy9ELENBRU8sU0FBU0UsQ0FBQUEsQ0FBV0MsQ0FBQUEsQ0FBbURILEVBQVksQ0FDeEYsSUFBSUksRUFDQUMsQ0FBQUEsQ0FBUyxLQUFBLENBQ2IsZUFBZUMsQ0FBQUEsQ0FBS0MsQ0FBQUEsQ0FBZSxDQUNqQyxNQUFNSixDQUFBQSxDQUFTSSxDQUFLLENBQUEsQ0FDaEIsQ0FBQUYsSUFDSkQsQ0FBQUEsQ0FBUSxVQUFBLENBQVcsSUFBTUUsQ0FBQUEsQ0FBS0MsQ0FBQUEsQ0FBUSxDQUFDLENBQUEsQ0FBR1AsQ0FBRSxHQUM5QyxDQUNBLE9BQUFJLEVBQVEsVUFBQSxDQUFXLElBQU1FLEVBQUssQ0FBQyxDQUFBLENBQUdOLENBQUUsQ0FBQSxDQUM3QixJQUFNLENBQ1hLLENBQUFBLENBQVMsS0FDVCxZQUFBLENBQWFELENBQUssRUFDcEIsQ0FDRixDQ1JPLFNBQVNJLENBQUFBLENBQWtDLENBQUUsR0FBQUMsQ0FBQUEsQ0FBSSxXQUFBLENBQUFDLEVBQWMsQ0FBQSxDQUFHLE9BQUEsQ0FBQUMsQ0FBUSxDQUFBLENBQTRCLENBQzNHLElBQU1DLENBQUFBLENBQWUsSUFBSSxNQUFNLENBQUEsYUFBQSxFQUFnQkQsQ0FBTyxJQUFJLENBQUEsQ0FDMUQsT0FBTyxrQkFBbUJFLENBQUFBLENBQVksQ0FDcEMsSUFBSUMsQ0FBQUEsQ0FBVSxDQUFBLENBQ2QsT0FDRSxHQUFJLENBQ0YsSUFBTUMsQ0FBQUEsQ0FBVyxDQUFDTixFQUFHLEdBQUdJLENBQUksQ0FBQyxDQUFBLENBQzdCLE9BQUlGLENBQUFBLEVBQ0ZJLENBQUFBLENBQVMsS0FDUEMsWUFBQUEsQ0FBV0wsQ0FBTyxFQUFFLElBQUEsQ0FBSyxJQUFNLENBQzdCLE1BQU1DLENBQ1IsQ0FBQyxDQUNILENBQUEsQ0FFSyxNQUFNLE9BQUEsQ0FBUSxJQUFBLENBQUtHLENBQVEsQ0FDcEMsQ0FBQSxNQUFTRSxFQUFHLENBRVYsR0FEQUgsSUFDSUEsQ0FBQUEsRUFBV0osQ0FBQUEsQ0FDYixNQUFNTyxDQUFBQSxDQUVSLE1BQU1sQixFQUFNLElBQUEsQ0FBSyxHQUFBLENBQUksRUFBR2UsQ0FBTyxDQUFBLENBQUksSUFBTSxJQUFBLENBQUssTUFBQSxHQUFXLEdBQUcsRUFDOUQsQ0FFSixDQUNGIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGNsYXNzIExhenk8VD4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYWtlVmFsdWU6ICgpID0+IFQpIHt9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5tYWtlVmFsdWUoKTtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlITtcbiAgfVxuXG4gIGdldCBpbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIF92YWx1ZTogVCB8IHVuZGVmaW5lZDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHsgZm4sIG1heEF0dGVtcHRzID0gMywgdGltZW91dCB9OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiBBcmdzKSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl19
|
|
1
|
+
import'source-map-support/register.js';import {a,b,p}from'./chunk-NKXGLDTD.js';export{x as DEFAULT_DURATION,w as DEFAULT_FPS,v as DEFAULT_HEIGHT,y as DEFAULT_OUT_FILE,u as DEFAULT_WIDTH,o as Logger,r as PUP_ARGS_KEY,z as RenderSchema,A as defaultRenderOptions,t as exec,p as logger,q as noerr,s as pargs,d as parseNumber,e as parseString,c as penv,B as pup,l as pupApp,j as pupDeterministic,h as pupDisableGPU,i as pupDisableHwCodec,m as pupIpcSocket,f as pupLogLevel,k as pupPkgRoot,g as pupUseInnerProxy,n as pupWindowTolerant}from'./chunk-NKXGLDTD.js';import {setTimeout as setTimeout$1}from'timers/promises';import {FormatContext,FFmpegError,Frame,Codec,CodecContext,Rational,FilterGraph,Filter,FilterInOut,FF_DECODER_PNG,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,Packet,AV_PIX_FMT_BGRA as AV_PIX_FMT_BGRA$1}from'node-av';import {FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,FF_HWDEVICE_TYPE_VIDEOTOOLBOX,FF_HWDEVICE_TYPE_CUDA,AV_PIX_FMT_YUVA420P,FF_ENCODER_LIBX265,AV_CHANNEL_LAYOUT_STEREO,AV_CODEC_FLAG_GLOBAL_HEADER,AV_SAMPLE_FMT_FLT,AVERROR_EAGAIN,AVERROR_EOF,AV_PIX_FMT_BGRA,FF_ENCODER_HEVC_NVENC,AV_PIX_FMT_YUV420P,AVCOL_RANGE_JPEG}from'node-av/constants';import {ok}from'assert';import {HardwareContext}from'node-av/api';var q=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var I=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(a=>{this._active--,o(a),this.next();}).catch(a=>{this._active--,i(a),this.next();});},reject:i,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};function Y(r){return new Promise(e=>setTimeout(e,r))}function Tt(r,e){let t,o=false;async function i(a){await r(a),!o&&(t=setTimeout(()=>i(a+1),e));}return t=setTimeout(()=>i(0),e),()=>{o=true,clearTimeout(t);}}function Ot({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let a=0;for(;;)try{let s=[r(...i)];return t&&s.push(setTimeout$1(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(a++,a>=e)throw s;await Y(Math.pow(2,a)*100+Math.random()*100);}}}var T=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};async function y(r,e){let t=new CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new Rational(1,r.fps),t.framerate=new Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function B(r,e,t){let o=new Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function _(){let r=new Packet;return r.alloc(),r}async function E(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===AVERROR_EAGAIN||i===AVERROR_EOF)break;FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var Ae={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},R=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=_(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let t=Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let o=Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let a=Filter.getByName("abuffersink"),s=t.createFilter(a,"sink");if(!s)throw new Error("Failed to create abuffersink");let n=`aformat=sample_fmts=${Ae[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),m=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(n,m,u),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let i=o.length>>1;let a$1=a(s,Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(a$1),"buffersrcAddFrame");await this.drain(t);}catch(c){var n=c,u=true;}finally{b(s,n,u);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return E(this._ctx,this._pkt,this._stream,e)}};var v=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=Codec.findDecoderByName(FF_DECODER_PNG);return ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=B(e,t,AV_PIX_FMT_BGRA$1),this.dst=B(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=_();}async png(){let e=new CodecContext;return e.allocContext3(this._png),FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=a(o,await this.png());this.pkt.data=e;FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var a$1=i,s=true;}finally{b(o,a$1,s);}}get sws(){if(!this._sws){let e=new SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};function L(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var N=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},M=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var P=Buffer.from([0,0,0,1]);function re(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function W(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function C(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let a=r.length;for(let n=i+2;n<r.length-2;n++)if(r[n]===0&&r[n+1]===0&&(r[n+2]===1||n+3<r.length&&r[n+2]===0&&r[n+3]===1)){a=n;break}let{type:s,layerId:c}=re(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,a)}),t=a;}return e}function X(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=re(t[0],t[1]),[a,s]=W(o,e,i);return t[0]=a,t[1]=s,t}function oe(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function ie(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}function Me(r){let e=new M(oe(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function Le(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Oe(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function ae(r,e,t){let o=Me(r);if(!o)return r;let i=new N;return Le(i,o),Oe(i,o,e,t),i.bits.push(1),i.align(0),ie(L(i.bits))}var De=39;function ne(r){let{baseExtradata:e,alphaExtradata:t}=r,o=C(e),i=C(t),a=new Map;for(let n of i){if(n.type===32)continue;let u=a.get(n.type)??[];u.push(n),a.set(n.type,u);}let s=[],c=new Set;for(let n of o){let u=n.type===32?ae(n.data,r.width,r.height):n.data;if(s.push(P,u),!c.has(n.type)){c.add(n.type);for(let m of a.get(n.type)??[])s.push(P,X(m.data,1));}}return s.push($()),Buffer.concat(s)}function $(){let[t,o]=W(De,0,1),i=[],a=(s,c)=>{for(let n=c-1;n>=0;n--)i.push(s>>n&1);};for(a(0,1),a(0,3),a(0,3),a(0,9),a(255,9),a(0,1),a(0,1),a(1,1);i.length%8!==0;)a(0,1);return Buffer.concat([P,Buffer.from([t,o]),Buffer.from([165,4]),L(i),Buffer.from([128])])}function se(r,e){let t=[];for(let o of r)t.push(P,o.data);for(let o of e)o.type<32&&t.push(P,X(o.data,1));return Buffer.concat(t)}var O=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=$();}static async create(e){let{width:t,height:o,fps:i,bitrate:a,muxer:s}=e,c=Codec.findEncoderByName(FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let u={codec:c,width:t,height:o,fps:i,bitrate:a,options:{preset:"p4",bf:"0"}},m=await y({...u,pixelFormat:AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await y({...u,pixelFormat:AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),x=_(),l=_(),w=s.addStream(m,"hvc1"),V=m.extraData,S=p.extraData;return V&&S&&(w.codecpar.extradata=ne({baseExtradata:V,alphaExtradata:S,width:t,height:o})),new r({baseCtx:m,alphaCtx:p,basePkt:x,alphaPkt:l,stream:w})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,a=this._pts++;e.pts=a,e.duration=1n,FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame");let s=e.data?.[0],c=e.linesize?.[0];if(!s||!c)throw new Error("encode: missing BGRA data");let n=e.width,u=e.height,m=n*u,p=(n>>1)*(u>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(m+p*2));let x=this._alphaBuf;for(let l=0;l<u;l++)for(let w=0;w<n;w++)x[l*n+w]=s[l*c+w*4+3];x.fill(128,m,m+p*2),this._alphaFrame?.free(),this._alphaFrame=Frame.fromVideoBuffer(x,{format:AV_PIX_FMT_YUV420P,width:n,height:u}),this._alphaFrame.pts=a,this._alphaFrame.duration=1n,FFmpegError.throwIfError(await i.sendFrame(this._alphaFrame),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i}=this._s;e.free(),t.free(),this._alphaFrame?.free(),o.freeContext(),i.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:a,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),n=await o.receivePacket(a),u=c>=0,m=n>=0;if(!u&&!m)break;if(u!==m)throw new Error(`NVENC desync: base=${u}, alpha=${m}`);let p=C(i.data),x=C(a.data),l=[];this._seiInjected||(l.push(this._seiBuffer),this._seiInjected=true),l.push(se(p,x));let w=i.pts,V=i.dts,S=i.duration;i.data=Buffer.concat(l),i.pts=w,i.dts=V,i.duration=S===0n?1n:S,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),a.unref();}}};var D=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:a,...s}=e,c=Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let n=await y({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),u=a.addStream(n,o);return new r(n,_(),u)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return E(this._ctx,this._pkt,this._stream,e)}};var H=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:a,bitrate:s,muxer:c}=e,n=a.getEncoderCodec("hevc");if(!n)throw new Error("hevc_videotoolbox encoder not found");let u=await y({codec:n,width:t,height:o,fps:i,bitrate:s,pixelFormat:AV_PIX_FMT_BGRA,colorRange:AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),m=c.addStream(u,"hvc1");return new r(u,_(),m)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return E(this._ctx,this._pkt,this._stream,e)}};var G="[Encoder]";async function me(r,e){let{width:t,height:o,fps:i,bitrate:a=8e6,disableHwCodec:s=false}=r,c=s?void 0:HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return p.debug(G,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await H.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c};if(c?.deviceTypeName===FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return p.debug(G,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await O.create({width:t,height:o,fps:i,hw:c,bitrate:a,muxer:e}),hw:c}}catch(u){p.warn(G,"Hardware codec session limits reached, use software encoder",u);}finally{c?.dispose();}return p.debug(G,"using software libx265 HEVC alpha encoder"),c?.dispose(),{video:await D.create({width:t,height:o,fps:i,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:a,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:e}),codec:await v.create(t,o)}}var de=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:a=false}=e,s=new T(i),{video:c,hwVideo:n,codec:u,hw:m}=await me(e,s),p;return a&&(p=await R.create({outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new r({video:c,hwVideo:n,audio:p,muxer:s,limiter:new I(1),outFile:i,codec:u,hw:m,width:t,height:o})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a$1}=this._s;if(t){var u=[];try{let l=a(u,this.bgraFrame(e));await t.encode(l,a$1);return}catch(m){var p=m,x=true;}finally{b(u,p,x);}}let{src:s,dst:c,sws:n}=i;return ok(n,"sws not initialized"),FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),FFmpegError.throwIfError(await n.scaleFrame(c,s),"bgraSws.scaleFrame"),o.encode(c,a$1)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:a,width:s,height:c}=this._s,n=i??await v.create(s,c);try{let u=await n.decodePNG(e);t?await t.encode(u,a):(FFmpegError.throwIfError(n.dst.makeWritable(),"pngDst.makeWritable"),FFmpegError.throwIfError(await n.sws.scaleFrame(n.dst,u),"pngSws.scaleFrame"),await o.encode(n.dst,a));}finally{i||n[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:o,muxer:i}=this._s;t&&await o.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a$1}=this._s;try{var s=[];try{let p=a(s,i,!0);let x=a(s,e);let l=a(s,t);let w=a(s,o);await a$1.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var n=c,u=!0;}finally{var m=b(s,n,u);m&&await m;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:a}=this._s;await a.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),o?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=a(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,a$1=true;}finally{b(t,i,a$1);}}bgraFrame(e){let t=B(this._s.width,this._s.height,AV_PIX_FMT_BGRA);return FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};export{I as ConcurrencyLimiter,de as EncoderPipeline,T as FormatMuxer,q as Lazy,Tt as periodical,Y as sleep,Ot as useRetry};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2xhenkudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbmFsLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92cHMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiXSwibmFtZXMiOlsiTGF6eSIsIm1ha2VWYWx1ZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwiZm4iLCJzaWduYWwiLCJyZXNvbHZlIiwicmVqZWN0IiwidiIsImUiLCJyIiwia2VlcCIsImVudHJ5Iiwic2xlZXAiLCJtcyIsInBlcmlvZGljYWwiLCJjYWxsYmFjayIsInRva2VuIiwiY2xvc2VkIiwidGljayIsImNvdW50IiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJ0aW1lb3V0RXJyb3IiLCJhcmdzIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiRkZtcGVnRXJyb3IiLCJjb2RlY0N0eCIsImNvZGVjVGFnIiwic3RyZWFtIiwicGt0Iiwib3BlblZpZGVvQ3R4Iiwib3B0cyIsImxhYmVsIiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwibWFrZUZyYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsImNvZGVjIiwiQ29kZWMiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJfc3RhY2siLCJzcmMiLCJpIiwiblNhbXBsZXMiLCJfX3VzaW5nIiwiXyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiZGF0YSIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJiciIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwiYnciLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJOQUxfVU5JVF9QUkVGSVhfU0VJIiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImNodW5rcyIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwicyIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJiYXNlRXh0cmEiLCJhbHBoYUV4dHJhIiwiYmdyYUZyYW1lIiwicHRzIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwidXZTaXplIiwieSIsIngiLCJiYXNlUiIsImFscGhhUiIsImJhc2VSZWFkeSIsImFscGhhUmVhZHkiLCJkdHMiLCJkdXJhdGlvbiIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiVEFHIiwiY3JlYXRlVmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJIYXJkd2FyZUNvbnRleHQiLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsImxvZ2dlciIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwidmlkZW8iLCJod1ZpZGVvIiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsInNhbXBsZVJhdGUiLCJpbnB1dCIsImRzdCIsImNzIiwibGltaXRlciIsIl9tIiwiX3YiLCJfaHYiLCJfYSIsIl9wcm9taXNlIiwiX2NvZGVjIl0sIm1hcHBpbmdzIjoiMHVDQUVPLElBQU1BLENBQUFBLENBQU4sS0FBYyxDQUNuQixXQUFBLENBQXFCQyxDQUFBQSxDQUFvQixDQUFwQixJQUFBLENBQUEsU0FBQSxDQUFBQSxFQUFxQixDQUFyQixTQUFBLENBRXJCLElBQUksS0FBQSxFQUFXLENBQ2IsT0FBSyxJQUFBLENBQUssWUFBQSxHQUNSLElBQUEsQ0FBSyxNQUFBLENBQVMsSUFBQSxDQUFLLFNBQUEsRUFBVSxDQUM3QixLQUFLLFlBQUEsQ0FBZSxJQUFBLENBQUEsQ0FFZixJQUFBLENBQUssTUFDZCxDQUVBLElBQUksV0FBQSxFQUF1QixDQUN6QixPQUFPLElBQUEsQ0FBSyxZQUNkLENBRVEsWUFBQSxDQUFlLEtBQUEsQ0FDZixNQUNWLEVDWE8sSUFBTUMsRUFBTixLQUF5QixDQU05QixXQUFBLENBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixlQUxiLE9B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MUQsSUFBQSxJQUFTLENBQUEsQ0FBSUMsRUFBSSxrQkFBQSxDQUFvQixDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsRUFBQSxDQUFLRCxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxFQUM1RCxDQUVBQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFBLElBQVMsQ0FBQSxDQUFJLENBQUEsQ0FBRyxFQUFJLEVBQUEsQ0FBSSxDQUFBLEVBQUEsQ0FBS0EsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQSxHQUFNLENBQUEsRUFBSyxDQUFBLEdBQU0sQ0FBQyxFQUN2REEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBS0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURELENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBRWxHLENBQUFBLENBQU8sRUFBRSxDQUFBLENBQ2RrRyxDQUFBQSxDQUFHLENBQUEsQ0FBRWpHLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZpRyxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFFUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFL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QUcsTUFBQSxDQUFRZ0QsZUFBZSxDQUFBLENBQ3RFLE9BQUE3RCxXQUFBQSxDQUFZLFlBQUEsQ0FBYWlCLENBQUFBLENBQU0sVUFBQSxDQUFXMEssQ0FBSyxDQUFBLENBQUcsc0JBQXNCLENBQUEsQ0FDakUxSyxDQUNULENBQ0YiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0IH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgZW5jb2RlTmFsSGVhZGVyLCB0eXBlIE5hbFVuaXQsIHJld3JpdGVOYWxMYXllcklkLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbmNvbnN0IE5BTF9VTklUX1BSRUZJWF9TRUkgPSAzOTtcblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSAzMikgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gMzIgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhbHBoYU5hbC5kYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9VTklUX1BSRUZJWF9TRUksIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGNcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10pOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgMzIpIHtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQobmFsLmRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9QSVhfRk1UX1lVVjQyMFAsIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJLCBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX3NlaUJ1ZmZlcjogQnVmZmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcbiAgcHJpdmF0ZSBfc2VpSW5qZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWxwaGFCdWY/OiBCdWZmZXI7XG4gIHByaXZhdGUgX2FscGhhRnJhbWU/OiBGcmFtZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9zZWlCdWZmZXIgPSBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3Qg4oCUIE5WRU5DIGNvbnZlcnRzIGludGVybmFsbHksIG5vIFNXUyBuZWVkZWRcbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKTtcbiAgICAvLyBBbHBoYSBhcyBZVVY0MjBQIOKAlCBtYXRjaGluZyBiaXRyYXRlL0dPUCBmb3IgY29tcGF0aWJsZSBTUFMgYWNyb3NzIGxheWVyc1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIik7XG5cbiAgICBjb25zdCBiYXNlUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcblxuICAgIGNvbnN0IGJhc2VFeHRyYSA9IGJhc2VDdHguZXh0cmFEYXRhO1xuICAgIGNvbnN0IGFscGhhRXh0cmEgPSBhbHBoYUN0eC5leHRyYURhdGE7XG4gICAgaWYgKGJhc2VFeHRyYSAmJiBhbHBoYUV4dHJhKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUV4dHJhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFFeHRyYSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBBbHBoYTogZXh0cmFjdCBhbHBoYSBjaGFubmVsIOKGkiBZVVY0MjBQXG4gICAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICAgIGlmICghc3JjIHx8ICFzcmNMcykgdGhyb3cgbmV3IEVycm9yKFwiZW5jb2RlOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICAgIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICAgIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gICAgY29uc3QgdXZTaXplID0gKHcgPj4gMSkgKiAoaCA+PiAxKTtcbiAgICBpZiAoIXRoaXMuX2FscGhhQnVmKSB0aGlzLl9hbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIHV2U2l6ZSAqIDIpO1xuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2FscGhhQnVmO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbeSAqIHcgKyB4XSA9IHNyY1t5ICogc3JjTHMgKyB4ICogNCArIDNdITtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmLmZpbGwoMTI4LCB5U2l6ZSwgeVNpemUgKyB1dlNpemUgKiAyKTtcblxuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKGJ1ZiwgeyBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCwgd2lkdGg6IHcsIGhlaWdodDogaCB9KTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lLnB0cyA9IHB0cztcbiAgICB0aGlzLl9hbHBoYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZSh0aGlzLl9hbHBoYUZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZT8uZnJlZSgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkludGVybGVhdmVkKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0LCBzdHJlYW0gfSA9IHRoaXMuX3M7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGJhc2VSID0gYXdhaXQgYmFzZUN0eC5yZWNlaXZlUGFja2V0KGJhc2VQa3QpO1xuICAgICAgY29uc3QgYWxwaGFSID0gYXdhaXQgYWxwaGFDdHgucmVjZWl2ZVBhY2tldChhbHBoYVBrdCk7XG5cbiAgICAgIGNvbnN0IGJhc2VSZWFkeSA9IGJhc2VSID49IDA7XG4gICAgICBjb25zdCBhbHBoYVJlYWR5ID0gYWxwaGFSID49IDA7XG4gICAgICBpZiAoIWJhc2VSZWFkeSAmJiAhYWxwaGFSZWFkeSkgYnJlYWs7XG5cbiAgICAgIC8vIEJvdGggbXVzdCBwcm9kdWNlIHBhY2tldHMgdG9nZXRoZXIgKGJmPTAgZW5zdXJlcyB0aGlzKVxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogYmFzZT0ke2Jhc2VSZWFkeX0sIGFscGhhPSR7YWxwaGFSZWFkeX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VQa3QuZGF0YSEpO1xuICAgICAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYVBrdC5kYXRhISk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzLCBhbHBoYU5hbHMpKTtcblxuICAgICAgLy8gU2F2ZSB0aW1lc3RhbXBzIGJlZm9yZSBkYXRhIHJlcGxhY2VtZW50IChzZXR0ZXIgbWF5IHJlc2V0IHRoZW0pXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVmlkZW9FbmNvZGVyKG9wdHM6IFZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBodz8uZGlzcG9zZSgpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfU0FNUExFX0ZNVF9GTFRQLCBGRl9FTkNPREVSX0FBQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBjb2RlYywgaHcgfSA9IGF3YWl0IGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzLCBtdXhlcik7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHZpZGVvLFxuICAgICAgaHdWaWRlbyxcbiAgICAgIGF1ZGlvLFxuICAgICAgbXV4ZXIsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZSxcbiAgICAgIGNvZGVjLFxuICAgICAgaHcsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIHVzaW5nIGZyYW1lID0gdGhpcy5iZ3JhRnJhbWUoaW5wdXQpO1xuICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShmcmFtZSwgbXV4ZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNyYywgZHN0LCBzd3MgfSA9IGNvZGVjITtcbiAgICAgIG9rKHN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhU3JjLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYVNyYy5mcm9tQnVmZmVyXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGRzdC5tYWtlV3JpdGFibGUoKSwgXCJiZ3JhRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBzd3Muc2NhbGVGcmFtZShkc3QsIHNyYyksIFwiYmdyYVN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgcmV0dXJuIHZpZGVvIS5lbmNvZGUoZHN0LCBtdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGNvZGVjLCBtdXhlciwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIGNvbnN0IGNzID0gY29kZWMgPz8gKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGNzLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgICBhd2FpdCBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY3MuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInBuZ0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNzLnN3cy5zY2FsZUZyYW1lKGNzLmRzdCwgc3JjKSwgXCJwbmdTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgICAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNzLmRzdCwgbXV4ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNvZGVjKSBjc1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBhdWRpbywgbGltaXRlciwgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGF1ZGlvKSBhd2FpdCBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IGF1ZGlvLmVuY29kZShwY20sIG11eGVyKSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHZpZGVvO1xuICAgICAgdXNpbmcgX2h2ID0gaHdWaWRlbztcbiAgICAgIHVzaW5nIF9hID0gYXVkaW87XG4gICAgICBhd2FpdCBsaW1pdGVyLmRyYWluKCk7XG4gICAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBjb25zdCB7IHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZnJlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdXNpbmcgX2NvZGVjID0gdGhpcy5fcy5jb2RlYztcbiAgICB0aGlzLl9zLmh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mud2lkdGgsIHRoaXMuX3MuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pup-recorder",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Record web pages as video",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -47,8 +47,7 @@
|
|
|
47
47
|
"tree-kill": "latest",
|
|
48
48
|
"source-map-support": "latest",
|
|
49
49
|
"systeminformation": "latest",
|
|
50
|
-
"zod": "latest"
|
|
51
|
-
"puppeteer": "latest"
|
|
50
|
+
"zod": "latest"
|
|
52
51
|
},
|
|
53
52
|
"devDependencies": {
|
|
54
53
|
"@microsoft/api-extractor": "latest",
|