logixlysia 5.1.1 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,13 +1,13 @@
1
- var Z=require("node:module");var J=Object.create;var{getPrototypeOf:j,defineProperty:u,getOwnPropertyNames:q,getOwnPropertyDescriptor:K}=Object,B=Object.prototype.hasOwnProperty;var b=(t,r,o)=>{o=t!=null?J(j(t)):{};let e=r||!t||!t.__esModule?u(o,"default",{value:t,enumerable:!0}):o;for(let n of q(t))if(!B.call(e,n))u(e,n,{get:()=>t[n],enumerable:!0});return e},N=new WeakMap,Q=(t)=>{var r=N.get(t),o;if(r)return r;if(r=u({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")q(t).map((e)=>!B.call(r,e)&&u(r,e,{get:()=>t[e],enumerable:!(o=K(t,e))||o.enumerable}));return N.set(t,r),r};var X=(t,r)=>{for(var o in r)u(t,o,{get:r[o],enumerable:!0,configurable:!0,set:(e)=>r[o]=()=>e})};var it={};X(it,{logToTransports:()=>h,handleHttpError:()=>d,default:()=>z,createLogger:()=>x});module.exports=Q(it);var Y=require("elysia");var M=(t,r)=>{let o=Math.max(0,(r-t.length)/2),e=" ".repeat(o);return`${e}${t}${e}`.padEnd(r)};function E(t,r){let o=t?.hostname??"localhost",e=t?.port??3000,n=t?.protocol??"http";if(r?.config?.startupMessageFormat!=="simple"){let a=`\uD83E\uDD8A Elysia is running at ${n}://${o}:${e}`,c=Math.max(22,a.length)+4,C="─".repeat(c),p=M("",c);console.log(`
2
- ┌${C}┐
3
- │${p}│
4
- │${M("Elysia with Logixlysia",c)}│
5
- │${p}│
6
- │${M(a,c)}│
7
- │${p}│
8
- └${C}┘
9
- `)}else console.log(`\uD83E\uDD8A Elysia is running at ${n}://${o}:${e}`)}var f=b(require("chalk")),G=require("elysia");function T(t){if(typeof t==="number")return t;return G.StatusMap[t]||500}function v(t,r){let o=t.toString();if(!r)return o;if(t>=500)return f.default.red(o);if(t>=400)return f.default.yellow(o);if(t>=300)return f.default.cyan(o);if(t>=200)return f.default.green(o);return f.default.white(o)}var I=b(require("chalk"));var g=b(require("chalk")),$={INFO:g.default.bgGreen.black,WARNING:g.default.bgYellow.black,ERROR:g.default.bgRed.black},F={GET:g.default.green,POST:g.default.yellow,PUT:g.default.blue,PATCH:g.default.magentaBright,DELETE:g.default.red,HEAD:g.default.cyan,OPTIONS:g.default.magenta};var P=b(require("chalk")),V=[{unit:"s",threshold:1e9,decimalPlaces:2},{unit:"ms",threshold:1e6,decimalPlaces:0},{unit:"µs",threshold:1000,decimalPlaces:0},{unit:"ns",threshold:1,decimalPlaces:0}];function O(t,r){let o=Number(process.hrtime.bigint()-t);for(let{unit:e,threshold:n,decimalPlaces:s}of V)if(o>=n){let a=`${(o/n).toFixed(s)}${e}`.padStart(8).padEnd(16);return r?P.default.gray(a):a}return r?P.default.gray("0ns".padStart(8).padEnd(16)):"0ns".padStart(8).padEnd(16)}function y(t,r){let o=t.toUpperCase();return r?$[o]?.(o.padEnd(7))||o:o.padEnd(7)}function R(t,r){let o=F[t];return r&&o?o(t.padEnd(7)):t.padEnd(7)}function D(t){try{return new URL(t.url).pathname}catch{return}}var l=(t)=>t.toString().padStart(2,"0");function tt(t){let r=t.getFullYear(),o=l(t.getMonth()+1),e=l(t.getDate()),n=l(t.getHours()),s=l(t.getMinutes()),i=l(t.getSeconds()),a=t.getMilliseconds().toString().padStart(3,"0");return`${r}-${o}-${e} ${n}:${s}:${i}.${a}`}function ot(t,r){let o={yyyy:t.getFullYear(),yy:t.getFullYear().toString().slice(-2),mm:l(t.getMonth()+1),dd:l(t.getDate()),HH:l(t.getHours()),MM:l(t.getMinutes()),ss:l(t.getSeconds()),SSS:l(t.getMilliseconds()),Z:-t.getTimezoneOffset()/60};return r.replace(/yyyy|yy|mm|dd|HH|MM|ss|SSS|Z/g,(e)=>(o[e]??"").toString())}function w(t,r){if(!r?.translateTime)return t.toISOString();if(r.translateTime===!0||r.translateTime==="SYS:STANDARD")return tt(t);return ot(t,r.translateTime)}var rt="\uD83E\uDD8A {now} {level} {duration} {method} {pathname} {status} {message} {context} {ip}";function et(t,r){if(r?.config?.useColors!==void 0)return r.config.useColors&&process.env.NO_COLOR===void 0;return t&&process.env.NO_COLOR===void 0}function m(t,r,o,e,n,s=!0){let i=et(s,n),a=new Date,c={now:i?I.default.bgYellow(I.default.black(w(a,n?.config?.timestamp))):w(a,n?.config?.timestamp),epoch:Math.floor(a.getTime()/1000).toString(),level:y(t,s),duration:O(e.beforeTime,s),method:R(r.method,s),pathname:D(r),status:v(o.status||200,s),message:o.message||"",context:o.context?(()=>{try{return JSON.stringify(o.context)}catch(p){return`[Error serializing context: ${p instanceof Error?p.message:"Unknown error"}]`}})():"",ip:n?.config?.ip&&r.headers.get("x-forwarded-for")?`IP: ${r.headers.get("x-forwarded-for")}`:""};return(n?.config?.customLogFormat||rt).replace(/{(\w+)}/g,(p,U)=>{if(U in c)return c[U]||"";return""})}async function h(t,r,o,e,n){if(!n?.config?.transports||n.config.transports.length===0)return;let s=m(t,r,o,e,n,!1),i=n.config.transports.map((a)=>a.log(t,s,{request:r,data:o,store:e}));await Promise.all(i)}var k=require("node:fs"),W=require("node:path");var A=new Set;async function nt(t){let r=W.dirname(t);if(!A.has(r))await k.promises.mkdir(r,{recursive:!0}),A.add(r)}async function L(t,r,o,e,n,s){await nt(t);let i=`${m(r,o,e,n,s,!1)}
10
- `;await k.promises.appendFile(t,i,{flag:"a"})}var H=(t,r)=>Array.isArray(t)?t.includes(r):t===r;function _(t,r,o,e){let n=e?.config?.logFilter;if(!n)return!0;return(!n.level||H(n.level,t))&&(!n.status||H(n.status,r))&&(!n.method||H(n.method,o))}function d(t,r,o,e){let n=r.status||500;console.error(m("ERROR",t,{status:n},o,e));let s=[];if(e?.config?.logFilePath)s.push(L(e.config.logFilePath,"ERROR",t,{status:n},o,e))}function st(){let t=process.memoryUsage().heapUsed/1024/1024,r=process.cpuUsage();return{memoryUsage:t,cpuUsage:r.user/1e6}}async function S(t,r,o,e,n){if(!_(t,o.status||200,r.method,n))return;if(!o.metrics)o.metrics=st();if(t==="ERROR"&&!o.stack)o.stack=new Error(`Error: ${o.message||"Unknown error"}`).stack;let s=m(t,r,o,e,n,!0);console.log(s);let i=[];if(n?.config?.logFilePath)i.push(L(n.config.logFilePath,t,r,o,e,n));if(n?.config?.transports?.length)i.push(h(t,r,o,e,n));await Promise.all(i)}function x(t){let r={store:void 0,log:(o,e,n,s)=>S(o,e,n,s,t),handleHttpError:(o,e,n)=>d(o,e,n,t),customLogFormat:t?.config?.customLogFormat,info:(o,e,n,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,S("INFO",o,{message:e,context:n,status:200},i,t)},error:(o,e,n,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,S("ERROR",o,{message:e,context:n,status:500},i,t)},warn:(o,e,n,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,S("WARNING",o,{message:e,context:n,status:200},i,t)},debug:(o,e,n,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,S("DEBUG",o,{message:e,context:n,status:200},i,t)}};return r}function z(t){let r=x(t);return new Y.Elysia({name:"Logixlysia"}).onStart((o)=>{if(t?.config?.showStartupMessage??!0)E(o.server,t)}).onRequest((o)=>{let e={...o.store,beforeTime:process.hrtime.bigint(),logger:r,hasCustomLog:!1};o.store=e,r.store=e}).onAfterHandle({as:"global"},({request:o,set:e,store:n})=>{let s=n;if(!s.hasCustomLog){let i=T(e.status||200);r.log("INFO",o,{status:i,message:String(e.headers?.["x-message"]||"")},s)}}).onError({as:"global"},({request:o,error:e,set:n,store:s})=>{let i=T(n.status||500);r.handleHttpError(o,{...e,status:i},s)})}
1
+ var Z=require("node:module");var J=Object.create;var{getPrototypeOf:j,defineProperty:h,getOwnPropertyNames:q,getOwnPropertyDescriptor:K}=Object,B=Object.prototype.hasOwnProperty;var x=(r,o,t)=>{t=r!=null?J(j(r)):{};let e=o||!r||!r.__esModule?h(t,"default",{value:r,enumerable:!0}):t;for(let n of q(r))if(!B.call(e,n))h(e,n,{get:()=>r[n],enumerable:!0});return e},N=new WeakMap,Q=(r)=>{var o=N.get(r),t;if(o)return o;if(o=h({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")q(r).map((e)=>!B.call(o,e)&&h(o,e,{get:()=>r[e],enumerable:!(t=K(r,e))||t.enumerable}));return N.set(r,o),o};var X=(r,o)=>{for(var t in o)h(r,t,{get:o[t],enumerable:!0,configurable:!0,set:(e)=>o[t]=()=>e})};var ar={};X(ar,{logToTransports:()=>p,handleHttpError:()=>d,default:()=>z,createLogger:()=>b});module.exports=Q(ar);var Y=require("elysia");var C=(r,o)=>{let t=Math.max(0,(o-r.length)/2),e=" ".repeat(t);return`${e}${r}${e}`.padEnd(o)};function y(r,o){let t=r?.hostname??"localhost",e=r?.port??3000,n=r?.protocol??"http";if(o?.config?.startupMessageFormat!=="simple"){let i=`\uD83E\uDD8A Elysia is running at ${n}://${t}:${e}`,m=Math.max(22,i.length)+4,T="─".repeat(m),f=C("",m);console.log(`
2
+ ┌${T}┐
3
+ │${f}│
4
+ │${C("Elysia with Logixlysia",m)}│
5
+ │${f}│
6
+ │${C(i,m)}│
7
+ │${f}│
8
+ └${T}┘
9
+ `)}else console.log(`\uD83E\uDD8A Elysia is running at ${n}://${t}:${e}`)}var u=x(require("chalk")),G=require("elysia");function F(r){if(typeof r==="number")return r;return G.StatusMap[r]||500}function O(r,o){let t=r.toString();if(!o)return t;if(r>=500)return u.default.red(t);if(r>=400)return u.default.yellow(t);if(r>=300)return u.default.cyan(t);if(r>=200)return u.default.green(t);return u.default.white(t)}var I=x(require("chalk"));var g=x(require("chalk")),M={INFO:g.default.bgGreen.black,WARNING:g.default.bgYellow.black,ERROR:g.default.bgRed.black},P={GET:g.default.green,POST:g.default.yellow,PUT:g.default.blue,PATCH:g.default.magentaBright,DELETE:g.default.red,HEAD:g.default.cyan,OPTIONS:g.default.magenta};var $=x(require("chalk")),V=[{unit:"s",threshold:1e9,decimalPlaces:2},{unit:"ms",threshold:1e6,decimalPlaces:0},{unit:"µs",threshold:1000,decimalPlaces:0},{unit:"ns",threshold:1,decimalPlaces:0}];function E(r,o){let t=Number(process.hrtime.bigint()-r);for(let{unit:e,threshold:n,decimalPlaces:s}of V)if(t>=n){let i=`${(t/n).toFixed(s)}${e}`.padStart(8).padEnd(16);return o?$.default.gray(i):i}return o?$.default.gray("0ns".padStart(8).padEnd(16)):"0ns".padStart(8).padEnd(16)}function R(r,o){let t=r.toUpperCase();return o?M[t]?.(t.padEnd(7))||t:t.padEnd(7)}function v(r,o){let t=P[r];return o&&t?t(r.padEnd(7)):r.padEnd(7)}function w(r){try{return new URL(r.url).pathname}catch{return}}var l=(r)=>r.toString().padStart(2,"0");function rr(r){let o=r.getFullYear(),t=l(r.getMonth()+1),e=l(r.getDate()),n=l(r.getHours()),s=l(r.getMinutes()),a=l(r.getSeconds()),i=r.getMilliseconds().toString().padStart(3,"0");return`${o}-${t}-${e} ${n}:${s}:${a}.${i}`}function tr(r,o){let t={yyyy:r.getFullYear(),yy:r.getFullYear().toString().slice(-2),mm:l(r.getMonth()+1),dd:l(r.getDate()),HH:l(r.getHours()),MM:l(r.getMinutes()),ss:l(r.getSeconds()),SSS:l(r.getMilliseconds()),Z:-r.getTimezoneOffset()/60};return o.replace(/yyyy|yy|mm|dd|HH|MM|ss|SSS|Z/g,(e)=>(t[e]??"").toString())}function D(r,o){if(!o?.translateTime)return r.toISOString();if(o.translateTime===!0||o.translateTime==="SYS:STANDARD")return rr(r);return tr(r,o.translateTime)}var or="\uD83E\uDD8A {now} {level} {duration} {method} {pathname} {status} {message} {context} {ip}";function er(r,o){if(o?.config?.useColors!==void 0)return o.config.useColors&&process.env.NO_COLOR===void 0;return r&&process.env.NO_COLOR===void 0}function c(r,o,t,e,n,s=!0){let a=er(s,n),i=new Date,m={now:a?I.default.bgYellow(I.default.black(D(i,n?.config?.timestamp))):D(i,n?.config?.timestamp),epoch:Math.floor(i.getTime()/1000).toString(),level:R(r,s),duration:E(e.beforeTime,s),method:v(o.method,s),pathname:w(o),status:O(t.status||200,s),message:t.message||"",context:t.context?(()=>{try{return JSON.stringify(t.context)}catch(f){return`[Error serializing context: ${f instanceof Error?f.message:"Unknown error"}]`}})():"",ip:n?.config?.ip&&o.headers.get("x-forwarded-for")?`IP: ${o.headers.get("x-forwarded-for")}`:""};return(n?.config?.customLogFormat||or).replace(/{(\w+)}/g,(f,U)=>{if(U in m)return m[U]||"";return""})}async function p(r,o,t,e,n){if(!n?.config?.transports||n.config.transports.length===0)return;let s=c(r,o,t,e,n,!1),a=n.config.transports.map((i)=>i.log(r,s,{request:o,data:t,store:e}));await Promise.all(a)}var k=require("node:fs"),W=require("node:path");var A=new Set;async function nr(r){let o=W.dirname(r);if(!A.has(o))await k.promises.mkdir(o,{recursive:!0}),A.add(o)}async function L(r,o,t,e,n,s){await nr(r);let a=`${c(o,t,e,n,s,!1)}
10
+ `;await k.promises.appendFile(r,a,{flag:"a"})}var H=(r,o)=>Array.isArray(r)?r.includes(o):r===o;function _(r,o,t,e){let n=e?.config?.logFilter;if(!n)return!0;return(!n.level||H(n.level,r))&&(!n.status||H(n.status,o))&&(!n.method||H(n.method,t))}async function d(r,o,t,e){let s={status:o.status||500,message:o.message,stack:o.stack},a=[];if(!(e?.config?.useTransportsOnly||e?.config?.disableInternalLogger))console.error(c("ERROR",r,s,t,e));if(!e?.config?.useTransportsOnly&&e?.config?.logFilePath&&!e?.config?.disableFileLogging)a.push(L(e.config.logFilePath,"ERROR",r,s,t,e));if(e?.config?.transports?.length)a.push(p("ERROR",r,s,t,e));await Promise.all(a)}function sr(){let r=process.memoryUsage().heapUsed/1024/1024,o=process.cpuUsage();return{memoryUsage:r,cpuUsage:o.user/1e6}}async function S(r,o,t,e,n){if(!_(r,t.status||200,o.method,n))return;if(!t.metrics)t.metrics=sr();if(r==="ERROR"&&!t.stack)t.stack=Error(`Error: ${t.message||"Unknown error"}`).stack;let s=c(r,o,t,e,n,!0),a=[];if(!(n?.config?.useTransportsOnly||n?.config?.disableInternalLogger))console.log(s);if(!n?.config?.useTransportsOnly&&n?.config?.logFilePath&&!n?.config?.disableFileLogging)a.push(L(n.config.logFilePath,r,o,t,e,n));if(n?.config?.transports?.length)a.push(p(r,o,t,e,n));await Promise.all(a)}function b(r){let o={store:void 0,log:(t,e,n,s)=>S(t,e,n,s,r),handleHttpError:async(t,e,n)=>await d(t,e,n,r),customLogFormat:r?.config?.customLogFormat,info:(t,e,n,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,S("INFO",t,{message:e,context:n,status:200},a,r)},error:(t,e,n,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,S("ERROR",t,{message:e,context:n,status:500},a,r)},warn:(t,e,n,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,S("WARNING",t,{message:e,context:n,status:200},a,r)},debug:(t,e,n,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,S("DEBUG",t,{message:e,context:n,status:200},a,r)}};return o}function z(r){let o=b(r);return new Y.Elysia({name:"Logixlysia"}).onStart((t)=>{if(r?.config?.showStartupMessage??!0)y(t.server,r)}).onRequest((t)=>{let e={...t.store,beforeTime:process.hrtime.bigint(),logger:o,hasCustomLog:!1};t.store=e,o.store=e}).onAfterHandle({as:"global"},({request:t,set:e,store:n})=>{let s=n;if(!s.hasCustomLog){let a=F(e.status||200);o.log("INFO",t,{status:a,message:String(e.headers?.["x-message"]||"")},s)}}).onError({as:"global"},async({request:t,error:e,set:n,store:s})=>{let a=F(n.status||500);await o.handleHttpError(t,{...e,status:a},s)})}
11
11
 
12
- //# debugId=5019F142C76DE99264756E2164756E21
13
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9leHRlbnNpb25zL3N0YXJ0LXNlcnZlci50cyIsICIuLi9zcmMvaGVscGVycy9zdGF0dXMudHMiLCAiLi4vc3JjL2xvZ2dlci9idWlsZC1sb2ctbWVzc2FnZS50cyIsICIuLi9zcmMvaGVscGVycy9jb2xvci1tYXBwaW5nLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2R1cmF0aW9uLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2xvZy50cyIsICIuLi9zcmMvaGVscGVycy9tZXRob2QudHMiLCAiLi4vc3JjL2hlbHBlcnMvcGF0aC50cyIsICIuLi9zcmMvaGVscGVycy90aW1lc3RhbXAudHMiLCAiLi4vc3JjL291dHB1dC9jb25zb2xlLnRzIiwgIi4uL3NyYy9vdXRwdXQvZmlsZS50cyIsICIuLi9zcmMvbG9nZ2VyL2ZpbHRlci50cyIsICIuLi9zcmMvbG9nZ2VyL2hhbmRsZS1odHRwLWVycm9yLnRzIiwgIi4uL3NyYy9sb2dnZXIvY3JlYXRlLWxvZ2dlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgeyBFbHlzaWEgfSBmcm9tICdlbHlzaWEnXG5cbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi9leHRlbnNpb25zJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzQ29kZSB9IGZyb20gJy4vaGVscGVycy9zdGF0dXMnXG5pbXBvcnQgdHlwZSB7IEh0dHBFcnJvciwgT3B0aW9ucywgU2VydmVyLCBTdG9yZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9naXhseXNpYShvcHRpb25zPzogT3B0aW9ucyk6IEVseXNpYSB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zKVxuXG4gIHJldHVybiBuZXcgRWx5c2lhKHtcbiAgICBuYW1lOiAnTG9naXhseXNpYSdcbiAgfSlcbiAgICAub25TdGFydChjdHggPT4ge1xuICAgICAgY29uc3Qgc2hvd1N0YXJ0dXBNZXNzYWdlID0gb3B0aW9ucz8uY29uZmlnPy5zaG93U3RhcnR1cE1lc3NhZ2UgPz8gdHJ1ZVxuICAgICAgaWYgKHNob3dTdGFydHVwTWVzc2FnZSkge1xuICAgICAgICBzdGFydFNlcnZlcihjdHguc2VydmVyIGFzIFNlcnZlciwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vblJlcXVlc3QoY3R4ID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0ge1xuICAgICAgICAuLi5jdHguc3RvcmUsXG4gICAgICAgIGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpLFxuICAgICAgICBsb2dnZXI6IGxvZyxcbiAgICAgICAgaGFzQ3VzdG9tTG9nOiBmYWxzZVxuICAgICAgfVxuICAgICAgY3R4LnN0b3JlID0gc3RvcmVcbiAgICAgIGxvZy5zdG9yZSA9IHN0b3JlXG4gICAgfSlcbiAgICAub25BZnRlckhhbmRsZSh7IGFzOiAnZ2xvYmFsJyB9LCAoeyByZXF1ZXN0LCBzZXQsIHN0b3JlIH0pID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIGFzIFN0b3JlRGF0YVxuXG4gICAgICBpZiAoIXN0b3JlRGF0YS5oYXNDdXN0b21Mb2cpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDIwMClcbiAgICAgICAgbG9nLmxvZyhcbiAgICAgICAgICAnSU5GTycsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcoc2V0LmhlYWRlcnM/LlsneC1tZXNzYWdlJ10gfHwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdG9yZURhdGFcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG4gICAgLm9uRXJyb3IoeyBhczogJ2dsb2JhbCcgfSwgKHsgcmVxdWVzdCwgZXJyb3IsIHNldCwgc3RvcmUgfSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDUwMClcbiAgICAgIGxvZy5oYW5kbGVIdHRwRXJyb3IoXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgLi4uZXJyb3IsIHN0YXR1cyB9IGFzIEh0dHBFcnJvcixcbiAgICAgICAgc3RvcmUgYXMgU3RvcmVEYXRhXG4gICAgICApXG4gICAgfSlcbn1cblxuZXhwb3J0IHR5cGUge1xuICBIdHRwRXJyb3IsXG4gIExvZ0RhdGEsXG4gIExvZ2dlcixcbiAgTG9naXhseXNpYUNvbnRleHQsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhLFxuICBUcmFuc3BvcnRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJ1xuZXhwb3J0IHsgY3JlYXRlTG9nZ2VyLCBoYW5kbGVIdHRwRXJyb3IgfSBmcm9tICcuL2xvZ2dlcidcbmV4cG9ydCB7IGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4vb3V0cHV0J1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IE9wdGlvbnMsIFNlcnZlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmNvbnN0IGNyZWF0ZUJveFRleHQgPSAodGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFkZGluZ0xlbmd0aCA9IE1hdGgubWF4KDAsICh3aWR0aCAtIHRleHQubGVuZ3RoKSAvIDIpXG4gIGNvbnN0IHBhZGRpbmcgPSAnICcucmVwZWF0KHBhZGRpbmdMZW5ndGgpXG4gIHJldHVybiBgJHtwYWRkaW5nfSR7dGV4dH0ke3BhZGRpbmd9YC5wYWRFbmQod2lkdGgpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0U2VydmVyKGNvbmZpZzogU2VydmVyLCBvcHRpb25zPzogT3B0aW9ucyk6IHZvaWQge1xuICBjb25zdCBob3N0bmFtZSA9IGNvbmZpZz8uaG9zdG5hbWUgPz8gJ2xvY2FsaG9zdCdcbiAgY29uc3QgcG9ydCA9IGNvbmZpZz8ucG9ydCA/PyAzMDAwXG4gIGNvbnN0IHByb3RvY29sID0gY29uZmlnPy5wcm90b2NvbCA/PyAnaHR0cCdcbiAgY29uc3Qgc2hvd0Jhbm5lciA9IG9wdGlvbnM/LmNvbmZpZz8uc3RhcnR1cE1lc3NhZ2VGb3JtYXQgIT09ICdzaW1wbGUnXG5cbiAgaWYgKHNob3dCYW5uZXIpIHtcbiAgICBjb25zdCB0aXRsZSA9ICdFbHlzaWEgd2l0aCBMb2dpeGx5c2lhJ1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBg8J+miiBFbHlzaWEgaXMgcnVubmluZyBhdCAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9OiR7cG9ydH1gXG4gICAgY29uc3QgYm94V2lkdGggPSBNYXRoLm1heCh0aXRsZS5sZW5ndGgsIG1lc3NhZ2UubGVuZ3RoKSArIDRcbiAgICBjb25zdCBib3JkZXIgPSAn4pSAJy5yZXBlYXQoYm94V2lkdGgpXG4gICAgY29uc3QgZW1wdHlMaW5lID0gY3JlYXRlQm94VGV4dCgnJywgYm94V2lkdGgpXG5cbiAgICBjb25zb2xlLmxvZyhgXG4gICAgICDilIwke2JvcmRlcn3ilJBcbiAgICAgIOKUgiR7ZW1wdHlMaW5lfeKUglxuICAgICAg4pSCJHtjcmVhdGVCb3hUZXh0KHRpdGxlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUgiR7Y3JlYXRlQm94VGV4dChtZXNzYWdlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUlCR7Ym9yZGVyfeKUmFxuICAgIGApXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coYPCfpoogRWx5c2lhIGlzIHJ1bm5pbmcgYXQgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfToke3BvcnR9YClcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyBTdGF0dXNNYXAgfSBmcm9tICdlbHlzaWEnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlKHN0YXR1czogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiBzdGF0dXMgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG4gIHJldHVybiAoU3RhdHVzTWFwIGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pW3N0YXR1c10gfHwgNTAwXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXR1c1N0cmluZyhcbiAgc3RhdHVzOiBudW1iZXIsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzU3RyID0gc3RhdHVzLnRvU3RyaW5nKClcbiAgaWYgKCF1c2VDb2xvcnMpIHtcbiAgICByZXR1cm4gc3RhdHVzU3RyXG4gIH1cblxuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIHJldHVybiBjaGFsay5yZWQoc3RhdHVzU3RyKVxuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgcmV0dXJuIGNoYWxrLnllbGxvdyhzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAzMDApIHtcbiAgICByZXR1cm4gY2hhbGsuY3lhbihzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAyMDApIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JlZW4oc3RhdHVzU3RyKVxuICB9XG4gIHJldHVybiBjaGFsay53aGl0ZShzdGF0dXNTdHIpXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuaW1wb3J0IHtcbiAgZHVyYXRpb25TdHJpbmcsXG4gIGZvcm1hdFRpbWVzdGFtcCxcbiAgbG9nU3RyaW5nLFxuICBtZXRob2RTdHJpbmcsXG4gIHBhdGhTdHJpbmcsXG4gIHN0YXR1c1N0cmluZ1xufSBmcm9tICcuLi9oZWxwZXJzJ1xuaW1wb3J0IHR5cGUge1xuICBMb2dDb21wb25lbnRzLFxuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBkZWZhdWx0TG9nRm9ybWF0ID1cbiAgJ/Cfpooge25vd30ge2xldmVsfSB7ZHVyYXRpb259IHttZXRob2R9IHtwYXRobmFtZX0ge3N0YXR1c30ge21lc3NhZ2V9IHtjb250ZXh0fSB7aXB9J1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzOiBib29sZWFuLCBvcHRpb25zPzogT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy51c2VDb2xvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvcHRpb25zLmNvbmZpZy51c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxuICB9XG4gIHJldHVybiB1c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2dNZXNzYWdlKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9ucyxcbiAgdXNlQ29sb3JzID0gdHJ1ZVxuKTogc3RyaW5nIHtcbiAgY29uc3QgYWN0dWFsbHlVc2VDb2xvcnMgPSBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzLCBvcHRpb25zKVxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gIGNvbnN0IGNvbXBvbmVudHM6IExvZ0NvbXBvbmVudHMgPSB7XG4gICAgbm93OiBhY3R1YWxseVVzZUNvbG9yc1xuICAgICAgPyBjaGFsay5iZ1llbGxvdyhcbiAgICAgICAgICBjaGFsay5ibGFjayhmb3JtYXRUaW1lc3RhbXAobm93LCBvcHRpb25zPy5jb25maWc/LnRpbWVzdGFtcCkpXG4gICAgICAgIClcbiAgICAgIDogZm9ybWF0VGltZXN0YW1wKG5vdywgb3B0aW9ucz8uY29uZmlnPy50aW1lc3RhbXApLFxuICAgIGVwb2NoOiBNYXRoLmZsb29yKG5vdy5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpLFxuICAgIGxldmVsOiBsb2dTdHJpbmcobGV2ZWwsIHVzZUNvbG9ycyksXG4gICAgZHVyYXRpb246IGR1cmF0aW9uU3RyaW5nKHN0b3JlLmJlZm9yZVRpbWUsIHVzZUNvbG9ycyksXG4gICAgbWV0aG9kOiBtZXRob2RTdHJpbmcocmVxdWVzdC5tZXRob2QsIHVzZUNvbG9ycyksXG4gICAgcGF0aG5hbWU6IHBhdGhTdHJpbmcocmVxdWVzdCksXG4gICAgc3RhdHVzOiBzdGF0dXNTdHJpbmcoZGF0YS5zdGF0dXMgfHwgMjAwLCB1c2VDb2xvcnMpLFxuICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSB8fCAnJyxcbiAgICBjb250ZXh0OiBkYXRhLmNvbnRleHRcbiAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEuY29udGV4dClcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGBbRXJyb3Igc2VyaWFsaXppbmcgY29udGV4dDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31dYFxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgOiAnJyxcbiAgICBpcDpcbiAgICAgIG9wdGlvbnM/LmNvbmZpZz8uaXAgJiYgcmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJylcbiAgICAgICAgPyBgSVA6ICR7cmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJyl9YFxuICAgICAgICA6ICcnXG4gIH1cblxuICBjb25zdCBsb2dGb3JtYXQgPSBvcHRpb25zPy5jb25maWc/LmN1c3RvbUxvZ0Zvcm1hdCB8fCBkZWZhdWx0TG9nRm9ybWF0XG5cbiAgcmV0dXJuIGxvZ0Zvcm1hdC5yZXBsYWNlKC97KFxcdyspfS9nLCAoXywga2V5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnRzW2tleSBhcyBrZXlvZiBMb2dDb21wb25lbnRzXSB8fCAnJ1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuXG5pbXBvcnQgdHlwZSB7IENvbG9yTWFwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVsQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBJTkZPOiBjaGFsay5iZ0dyZWVuLmJsYWNrLFxuICBXQVJOSU5HOiBjaGFsay5iZ1llbGxvdy5ibGFjayxcbiAgRVJST1I6IGNoYWxrLmJnUmVkLmJsYWNrXG59XG5cbmV4cG9ydCBjb25zdCBIdHRwTWV0aG9kQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBHRVQ6IGNoYWxrLmdyZWVuLFxuICBQT1NUOiBjaGFsay55ZWxsb3csXG4gIFBVVDogY2hhbGsuYmx1ZSxcbiAgUEFUQ0g6IGNoYWxrLm1hZ2VudGFCcmlnaHQsXG4gIERFTEVURTogY2hhbGsucmVkLFxuICBIRUFEOiBjaGFsay5jeWFuLFxuICBPUFRJT05TOiBjaGFsay5tYWdlbnRhXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuY29uc3QgdGltZVVuaXRzID0gW1xuICB7IHVuaXQ6ICdzJywgdGhyZXNob2xkOiAxZTksIGRlY2ltYWxQbGFjZXM6IDIgfSxcbiAgeyB1bml0OiAnbXMnLCB0aHJlc2hvbGQ6IDFlNiwgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICfCtXMnLCB0aHJlc2hvbGQ6IDFlMywgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICducycsIHRocmVzaG9sZDogMSwgZGVjaW1hbFBsYWNlczogMCB9XG5dXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGR1cmF0aW9uU3RyaW5nKFxuICBiZWZvcmVUaW1lOiBiaWdpbnQsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3QgbmFub3NlY29uZHMgPSBOdW1iZXIocHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgLSBiZWZvcmVUaW1lKVxuXG4gIGZvciAoY29uc3QgeyB1bml0LCB0aHJlc2hvbGQsIGRlY2ltYWxQbGFjZXMgfSBvZiB0aW1lVW5pdHMpIHtcbiAgICBpZiAobmFub3NlY29uZHMgPj0gdGhyZXNob2xkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChuYW5vc2Vjb25kcyAvIHRocmVzaG9sZCkudG9GaXhlZChkZWNpbWFsUGxhY2VzKVxuICAgICAgY29uc3QgdGltZVN0ciA9IGAke3ZhbHVlfSR7dW5pdH1gLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbiAgICAgIHJldHVybiB1c2VDb2xvcnMgPyBjaGFsay5ncmF5KHRpbWVTdHIpIDogdGltZVN0clxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1c2VDb2xvcnNcbiAgICA/IGNoYWxrLmdyYXkoJzBucycucGFkU3RhcnQoOCkucGFkRW5kKDE2KSlcbiAgICA6ICcwbnMnLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBMb2dMZXZlbCB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBMb2dMZXZlbENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2dTdHJpbmcobGV2ZWw6IExvZ0xldmVsLCB1c2VDb2xvcnM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBsZXZlbFN0ciA9IGxldmVsLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIHVzZUNvbG9yc1xuICAgID8gTG9nTGV2ZWxDb2xvck1hcFtsZXZlbFN0cl0/LihsZXZlbFN0ci5wYWRFbmQoNykpIHx8IGxldmVsU3RyXG4gICAgOiBsZXZlbFN0ci5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHsgSHR0cE1ldGhvZENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXRob2RTdHJpbmcoXG4gIG1ldGhvZDogc3RyaW5nLFxuICB1c2VDb2xvcnM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGNvbnN0IGNvbG9yRnVuY3Rpb24gPSBIdHRwTWV0aG9kQ29sb3JNYXBbbWV0aG9kXVxuICByZXR1cm4gdXNlQ29sb3JzICYmIGNvbG9yRnVuY3Rpb25cbiAgICA/IGNvbG9yRnVuY3Rpb24obWV0aG9kLnBhZEVuZCg3KSlcbiAgICA6IG1ldGhvZC5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhdGhTdHJpbmcoXG4gIHJlcXVlc3RJbmZvOiBSZXF1ZXN0SW5mb1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFVSTChyZXF1ZXN0SW5mby51cmwpLnBhdGhuYW1lXG4gIH0gY2F0Y2gge1xuICAgIHJldHVyblxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVGltZXN0YW1wQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuLy8gY29uc3QgREVGQVVMVF9USU1FU1RBTVBfRk9STUFUID0gJ3l5eXktbW0tZGQgSEg6TU06c3MnXG5jb25zdCBTWVNfVElNRSA9ICdTWVM6U1RBTkRBUkQnXG5cbmNvbnN0IHBhZCA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuZnVuY3Rpb24gZm9ybWF0U3lzdGVtVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICBjb25zdCBtb250aCA9IHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKVxuICBjb25zdCBkYXkgPSBwYWQoZGF0ZS5nZXREYXRlKCkpXG4gIGNvbnN0IGhvdXJzID0gcGFkKGRhdGUuZ2V0SG91cnMoKSlcbiAgY29uc3QgbWludXRlcyA9IHBhZChkYXRlLmdldE1pbnV0ZXMoKSlcbiAgY29uc3Qgc2Vjb25kcyA9IHBhZChkYXRlLmdldFNlY29uZHMoKSlcbiAgY29uc3QgbXMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKVxuXG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gJHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9LiR7bXN9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21UaW1lKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9ID0ge1xuICAgIHl5eXk6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICB5eTogZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc2xpY2UoLTIpLFxuICAgIG1tOiBwYWQoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgZGQ6IHBhZChkYXRlLmdldERhdGUoKSksXG4gICAgSEg6IHBhZChkYXRlLmdldEhvdXJzKCkpLFxuICAgIE1NOiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpLFxuICAgIHNzOiBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgIFNTUzogcGFkKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLFxuICAgIFo6IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MFxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC95eXl5fHl5fG1tfGRkfEhIfE1NfHNzfFNTU3xaL2csIG1hdGNoID0+XG4gICAgKHRva2Vuc1ttYXRjaF0gPz8gJycpLnRvU3RyaW5nKClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKGRhdGU6IERhdGUsIGNvbmZpZz86IFRpbWVzdGFtcENvbmZpZyk6IHN0cmluZyB7XG4gIGlmICghY29uZmlnPy50cmFuc2xhdGVUaW1lKSB7XG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG5cbiAgaWYgKGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSB0cnVlIHx8IGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSBTWVNfVElNRSkge1xuICAgIHJldHVybiBmb3JtYXRTeXN0ZW1UaW1lKGRhdGUpXG4gIH1cblxuICByZXR1cm4gZm9ybWF0Q3VzdG9tVGltZShkYXRlLCBjb25maWcudHJhbnNsYXRlVGltZSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9UcmFuc3BvcnRzKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghb3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzIHx8IG9wdGlvbnMuY29uZmlnLnRyYW5zcG9ydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBtZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgZmFsc2UpXG5cbiAgY29uc3QgcHJvbWlzZXMgPSBvcHRpb25zLmNvbmZpZy50cmFuc3BvcnRzLm1hcCh0cmFuc3BvcnQgPT5cbiAgICB0cmFuc3BvcnQubG9nKGxldmVsLCBtZXNzYWdlLCB7IHJlcXVlc3QsIGRhdGEsIHN0b3JlIH0pXG4gIClcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cbiIsCiAgICAiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcblxuaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5jb25zdCBkaXJDYWNoZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRpciA9IGRpcm5hbWUoZmlsZVBhdGgpXG4gIGlmICghZGlyQ2FjaGUuaGFzKGRpcikpIHtcbiAgICBhd2FpdCBmcy5ta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgZGlyQ2FjaGUuYWRkKGRpcilcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9GaWxlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aClcbiAgY29uc3QgbG9nTWVzc2FnZSA9IGAke2J1aWxkTG9nTWVzc2FnZShsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMsIGZhbHNlKX1cXG5gXG4gIGF3YWl0IGZzLmFwcGVuZEZpbGUoZmlsZVBhdGgsIGxvZ01lc3NhZ2UsIHsgZmxhZzogJ2EnIH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTG9nTGV2ZWwsIE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBjaGVja0ZpbHRlciA9IChmaWx0ZXJWYWx1ZTogdW5rbm93biwgdmFsdWU6IHVua25vd24pID0+XG4gIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpXG4gICAgPyBmaWx0ZXJWYWx1ZS5pbmNsdWRlcyh2YWx1ZSlcbiAgICA6IGZpbHRlclZhbHVlID09PSB2YWx1ZVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTG9nKFxuICBsb2dMZXZlbDogTG9nTGV2ZWwsXG4gIHN0YXR1czogbnVtYmVyLFxuICBtZXRob2Q6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9wdGlvbnNcbik6IGJvb2xlYW4ge1xuICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5jb25maWc/LmxvZ0ZpbHRlclxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gKFxuICAgICghZmlsdGVyLmxldmVsIHx8IGNoZWNrRmlsdGVyKGZpbHRlci5sZXZlbCwgbG9nTGV2ZWwpKSAmJlxuICAgICghZmlsdGVyLnN0YXR1cyB8fCBjaGVja0ZpbHRlcihmaWx0ZXIuc3RhdHVzLCBzdGF0dXMpKSAmJlxuICAgICghZmlsdGVyLm1ldGhvZCB8fCBjaGVja0ZpbHRlcihmaWx0ZXIubWV0aG9kLCBtZXRob2QpKVxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgSHR0cEVycm9yLCBPcHRpb25zLCBSZXF1ZXN0SW5mbywgU3RvcmVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcbmltcG9ydCB7IGxvZ1RvRmlsZSB9IGZyb20gJy4uL291dHB1dCdcbmltcG9ydCB7IGJ1aWxkTG9nTWVzc2FnZSB9IGZyb20gJy4vYnVpbGQtbG9nLW1lc3NhZ2UnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVIdHRwRXJyb3IoXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBlcnJvcjogSHR0cEVycm9yLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogdm9pZCB7XG4gIGNvbnN0IHN0YXR1c0NvZGUgPSBlcnJvci5zdGF0dXMgfHwgNTAwXG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgYnVpbGRMb2dNZXNzYWdlKCdFUlJPUicsIHJlcXVlc3QsIHsgc3RhdHVzOiBzdGF0dXNDb2RlIH0sIHN0b3JlLCBvcHRpb25zKVxuICApXG5cbiAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdXG5cbiAgaWYgKG9wdGlvbnM/LmNvbmZpZz8ubG9nRmlsZVBhdGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgbG9nVG9GaWxlKFxuICAgICAgICBvcHRpb25zLmNvbmZpZy5sb2dGaWxlUGF0aCxcbiAgICAgICAgJ0VSUk9SJyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgeyBzdGF0dXM6IHN0YXR1c0NvZGUgfSxcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICApXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dnZXIsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhXG59IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBsb2dUb0ZpbGUsIGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4uL291dHB1dCdcbmltcG9ydCB7IGJ1aWxkTG9nTWVzc2FnZSB9IGZyb20gJy4vYnVpbGQtbG9nLW1lc3NhZ2UnXG5pbXBvcnQgeyBmaWx0ZXJMb2cgfSBmcm9tICcuL2ZpbHRlcidcbmltcG9ydCB7IGhhbmRsZUh0dHBFcnJvciB9IGZyb20gJy4vaGFuZGxlLWh0dHAtZXJyb3InXG5cbmZ1bmN0aW9uIGdldE1ldHJpY3MoKTogTG9nRGF0YVsnbWV0cmljcyddIHtcbiAgY29uc3QgbWVtb3J5VXNhZ2UgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQgLyAxMDI0IC8gMTAyNCAvLyBNQlxuICBjb25zdCBjcHVVc2FnZSA9IHByb2Nlc3MuY3B1VXNhZ2UoKVxuXG4gIHJldHVybiB7XG4gICAgbWVtb3J5VXNhZ2UsXG4gICAgY3B1VXNhZ2U6IGNwdVVzYWdlLnVzZXIgLyAxXzAwMF8wMDAgLy8gY29udmVydCB0byBzZWNvbmRzXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZmlsdGVyTG9nKGxldmVsLCBkYXRhLnN0YXR1cyB8fCAyMDAsIHJlcXVlc3QubWV0aG9kLCBvcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQWRkIG1ldHJpY3MgaWYgbm90IHByb3ZpZGVkXG4gIGlmICghZGF0YS5tZXRyaWNzKSB7XG4gICAgZGF0YS5tZXRyaWNzID0gZ2V0TWV0cmljcygpXG4gIH1cblxuICAvLyBBZGQgc3RhY2sgdHJhY2UgZm9yIGVycm9yc1xuICBpZiAobGV2ZWwgPT09ICdFUlJPUicgJiYgIWRhdGEuc3RhY2spIHtcbiAgICBkYXRhLnN0YWNrID0gbmV3IEVycm9yKGBFcnJvcjogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApLnN0YWNrXG4gIH1cblxuICBjb25zdCBsb2dNZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgdHJ1ZSlcbiAgY29uc29sZS5sb2cobG9nTWVzc2FnZSlcblxuICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW11cblxuICBpZiAob3B0aW9ucz8uY29uZmlnPy5sb2dGaWxlUGF0aCkge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBsb2dUb0ZpbGUoXG4gICAgICAgIG9wdGlvbnMuY29uZmlnLmxvZ0ZpbGVQYXRoLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpZiAob3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzPy5sZW5ndGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKGxvZ1RvVHJhbnNwb3J0cyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpKVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIob3B0aW9ucz86IE9wdGlvbnMpOiBMb2dnZXIge1xuICBjb25zdCBsb2dnZXI6IExvZ2dlciA9IHtcbiAgICBzdG9yZTogdW5kZWZpbmVkLFxuICAgIGxvZzogKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSkgPT5cbiAgICAgIGxvZyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGhhbmRsZUh0dHBFcnJvcjogKHJlcXVlc3QsIGVycm9yLCBzdG9yZSkgPT5cbiAgICAgIGhhbmRsZUh0dHBFcnJvcihyZXF1ZXN0LCBlcnJvciwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGN1c3RvbUxvZ0Zvcm1hdDogb3B0aW9ucz8uY29uZmlnPy5jdXN0b21Mb2dGb3JtYXQsXG4gICAgaW5mbzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0lORk8nLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICB7IG1lc3NhZ2UsIGNvbnRleHQsIHN0YXR1czogMjAwIH0sXG4gICAgICAgIHN0b3JlRGF0YSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIH0sXG4gICAgZXJyb3I6IChyZXF1ZXN0LCBtZXNzYWdlLCBjb250ZXh0LCBzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVEYXRhID0gc3RvcmUgfHxcbiAgICAgICAgbG9nZ2VyLnN0b3JlIHx8IHsgYmVmb3JlVGltZTogcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgfVxuICAgICAgc3RvcmVEYXRhLmhhc0N1c3RvbUxvZyA9IHRydWVcbiAgICAgIHJldHVybiBsb2coXG4gICAgICAgICdFUlJPUicsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiA1MDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICB3YXJuOiAocmVxdWVzdCwgbWVzc2FnZSwgY29udGV4dCwgc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIHx8XG4gICAgICAgIGxvZ2dlci5zdG9yZSB8fCB7IGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpIH1cbiAgICAgIHN0b3JlRGF0YS5oYXNDdXN0b21Mb2cgPSB0cnVlXG4gICAgICByZXR1cm4gbG9nKFxuICAgICAgICAnV0FSTklORycsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiAyMDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICBkZWJ1ZzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0RFQlVHJyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgeyBtZXNzYWdlLCBjb250ZXh0LCBzdGF0dXM6IDIwMCB9LFxuICAgICAgICBzdG9yZURhdGEsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvZ2dlclxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIm96QkFBdUIsSUFBdkIsb0JDRUEsSUFBTSxFQUFnQixDQUFDLEVBQWMsSUFBMEIsQ0FDN0QsSUFBTSxFQUFnQixLQUFLLElBQUksR0FBSSxFQUFRLEVBQUssUUFBVSxDQUFDLEVBQ3JELEVBQVUsSUFBSSxPQUFPLENBQWEsRUFDeEMsTUFBTyxHQUFHLElBQVUsSUFBTyxJQUFVLE9BQU8sQ0FBSyxHQUduRCxTQUF3QixDQUFXLENBQUMsRUFBZ0IsRUFBeUIsQ0FDM0UsSUFBTSxFQUFXLEdBQVEsVUFBWSxZQUMvQixFQUFPLEdBQVEsTUFBUSxLQUN2QixFQUFXLEdBQVEsVUFBWSxPQUdyQyxHQUZtQixHQUFTLFFBQVEsdUJBQXlCLFNBRTdDLENBRWQsSUFBTSxFQUFVLHFDQUEwQixPQUFjLEtBQVksSUFDOUQsRUFBVyxLQUFLLElBQUksR0FBYyxFQUFRLE1BQU0sRUFBSSxFQUNwRCxFQUFTLElBQUcsT0FBTyxDQUFRLEVBQzNCLEVBQVksRUFBYyxHQUFJLENBQVEsRUFFNUMsUUFBUSxJQUFJO0FBQUEsU0FDUjtBQUFBLFNBQ0E7QUFBQSxTQUNB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S0FBTyxDQUVkLEdBRDJCLEdBQVMsUUFBUSxvQkFBc0IsR0FFaEUsRUFBWSxFQUFJLE9BQWtCLENBQU8sRUFFNUMsRUFDQSxVQUFVLEtBQU8sQ0FDaEIsSUFBTSxFQUFRLElBQ1QsRUFBSSxNQUNQLFdBQVksUUFBUSxPQUFPLE9BQU8sRUFDbEMsT0FBUSxFQUNSLGFBQWMsRUFDaEIsRUFDQSxFQUFJLE1BQVEsRUFDWixFQUFJLE1BQVEsRUFDYixFQUNBLGNBQWMsQ0FBRSxHQUFJLFFBQVMsRUFBRyxFQUFHLFVBQVMsTUFBSyxXQUFZLENBQzVELElBQU0sRUFBWSxFQUVsQixJQUFLLEVBQVUsYUFBYyxDQUMzQixJQUFNLEVBQVMsRUFBYyxFQUFJLFFBQVUsR0FBRyxFQUM5QyxFQUFJLElBQ0YsT0FDQSxFQUNBLENBQ0UsU0FDQSxRQUFTLE9BQU8sRUFBSSxVQUFVLGNBQWdCLEVBQUUsQ0FDbEQsRUFDQSxDQUNGLEdBRUgsRUFDQSxRQUFRLENBQUUsR0FBSSxRQUFTLEVBQUcsRUFBRyxVQUFTLFFBQU8sTUFBSyxXQUFZLENBQzdELElBQU0sRUFBUyxFQUFjLEVBQUksUUFBVSxHQUFHLEVBQzlDLEVBQUksZ0JBQ0YsRUFDQSxJQUFLLEVBQU8sUUFBTyxFQUNuQixDQUNGLEVBQ0QiLAogICJkZWJ1Z0lkIjogIjUwMTlGMTQyQzc2REU5OTI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
12
+ //# debugId=31613BB08018F53664756E2164756E21
13
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9leHRlbnNpb25zL3N0YXJ0LXNlcnZlci50cyIsICIuLi9zcmMvaGVscGVycy9zdGF0dXMudHMiLCAiLi4vc3JjL2xvZ2dlci9idWlsZC1sb2ctbWVzc2FnZS50cyIsICIuLi9zcmMvaGVscGVycy9jb2xvci1tYXBwaW5nLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2R1cmF0aW9uLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2xvZy50cyIsICIuLi9zcmMvaGVscGVycy9tZXRob2QudHMiLCAiLi4vc3JjL2hlbHBlcnMvcGF0aC50cyIsICIuLi9zcmMvaGVscGVycy90aW1lc3RhbXAudHMiLCAiLi4vc3JjL291dHB1dC9jb25zb2xlLnRzIiwgIi4uL3NyYy9vdXRwdXQvZmlsZS50cyIsICIuLi9zcmMvbG9nZ2VyL2ZpbHRlci50cyIsICIuLi9zcmMvbG9nZ2VyL2hhbmRsZS1odHRwLWVycm9yLnRzIiwgIi4uL3NyYy9sb2dnZXIvY3JlYXRlLWxvZ2dlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgeyBFbHlzaWEgfSBmcm9tICdlbHlzaWEnXG5cbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi9leHRlbnNpb25zJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzQ29kZSB9IGZyb20gJy4vaGVscGVycy9zdGF0dXMnXG5pbXBvcnQgdHlwZSB7IEh0dHBFcnJvciwgT3B0aW9ucywgU2VydmVyLCBTdG9yZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9naXhseXNpYShvcHRpb25zPzogT3B0aW9ucyk6IEVseXNpYSB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zKVxuXG4gIHJldHVybiBuZXcgRWx5c2lhKHtcbiAgICBuYW1lOiAnTG9naXhseXNpYSdcbiAgfSlcbiAgICAub25TdGFydChjdHggPT4ge1xuICAgICAgY29uc3Qgc2hvd1N0YXJ0dXBNZXNzYWdlID0gb3B0aW9ucz8uY29uZmlnPy5zaG93U3RhcnR1cE1lc3NhZ2UgPz8gdHJ1ZVxuICAgICAgaWYgKHNob3dTdGFydHVwTWVzc2FnZSkge1xuICAgICAgICBzdGFydFNlcnZlcihjdHguc2VydmVyIGFzIFNlcnZlciwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vblJlcXVlc3QoY3R4ID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0ge1xuICAgICAgICAuLi5jdHguc3RvcmUsXG4gICAgICAgIGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpLFxuICAgICAgICBsb2dnZXI6IGxvZyxcbiAgICAgICAgaGFzQ3VzdG9tTG9nOiBmYWxzZVxuICAgICAgfVxuICAgICAgY3R4LnN0b3JlID0gc3RvcmVcbiAgICAgIGxvZy5zdG9yZSA9IHN0b3JlXG4gICAgfSlcbiAgICAub25BZnRlckhhbmRsZSh7IGFzOiAnZ2xvYmFsJyB9LCAoeyByZXF1ZXN0LCBzZXQsIHN0b3JlIH0pID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIGFzIFN0b3JlRGF0YVxuXG4gICAgICBpZiAoIXN0b3JlRGF0YS5oYXNDdXN0b21Mb2cpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDIwMClcbiAgICAgICAgbG9nLmxvZyhcbiAgICAgICAgICAnSU5GTycsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcoc2V0LmhlYWRlcnM/LlsneC1tZXNzYWdlJ10gfHwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdG9yZURhdGFcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG4gICAgLm9uRXJyb3IoeyBhczogJ2dsb2JhbCcgfSwgYXN5bmMgKHsgcmVxdWVzdCwgZXJyb3IsIHNldCwgc3RvcmUgfSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDUwMClcbiAgICAgIGF3YWl0IGxvZy5oYW5kbGVIdHRwRXJyb3IoXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgLi4uZXJyb3IsIHN0YXR1cyB9IGFzIEh0dHBFcnJvcixcbiAgICAgICAgc3RvcmUgYXMgU3RvcmVEYXRhXG4gICAgICApXG4gICAgfSlcbn1cblxuZXhwb3J0IHR5cGUge1xuICBIdHRwRXJyb3IsXG4gIExvZ0RhdGEsXG4gIExvZ2dlcixcbiAgTG9naXhseXNpYUNvbnRleHQsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhLFxuICBUcmFuc3BvcnRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJ1xuZXhwb3J0IHsgY3JlYXRlTG9nZ2VyLCBoYW5kbGVIdHRwRXJyb3IgfSBmcm9tICcuL2xvZ2dlcidcbmV4cG9ydCB7IGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4vb3V0cHV0J1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IE9wdGlvbnMsIFNlcnZlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmNvbnN0IGNyZWF0ZUJveFRleHQgPSAodGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFkZGluZ0xlbmd0aCA9IE1hdGgubWF4KDAsICh3aWR0aCAtIHRleHQubGVuZ3RoKSAvIDIpXG4gIGNvbnN0IHBhZGRpbmcgPSAnICcucmVwZWF0KHBhZGRpbmdMZW5ndGgpXG4gIHJldHVybiBgJHtwYWRkaW5nfSR7dGV4dH0ke3BhZGRpbmd9YC5wYWRFbmQod2lkdGgpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0U2VydmVyKGNvbmZpZzogU2VydmVyLCBvcHRpb25zPzogT3B0aW9ucyk6IHZvaWQge1xuICBjb25zdCBob3N0bmFtZSA9IGNvbmZpZz8uaG9zdG5hbWUgPz8gJ2xvY2FsaG9zdCdcbiAgY29uc3QgcG9ydCA9IGNvbmZpZz8ucG9ydCA/PyAzMDAwXG4gIGNvbnN0IHByb3RvY29sID0gY29uZmlnPy5wcm90b2NvbCA/PyAnaHR0cCdcbiAgY29uc3Qgc2hvd0Jhbm5lciA9IG9wdGlvbnM/LmNvbmZpZz8uc3RhcnR1cE1lc3NhZ2VGb3JtYXQgIT09ICdzaW1wbGUnXG5cbiAgaWYgKHNob3dCYW5uZXIpIHtcbiAgICBjb25zdCB0aXRsZSA9ICdFbHlzaWEgd2l0aCBMb2dpeGx5c2lhJ1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBg8J+miiBFbHlzaWEgaXMgcnVubmluZyBhdCAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9OiR7cG9ydH1gXG4gICAgY29uc3QgYm94V2lkdGggPSBNYXRoLm1heCh0aXRsZS5sZW5ndGgsIG1lc3NhZ2UubGVuZ3RoKSArIDRcbiAgICBjb25zdCBib3JkZXIgPSAn4pSAJy5yZXBlYXQoYm94V2lkdGgpXG4gICAgY29uc3QgZW1wdHlMaW5lID0gY3JlYXRlQm94VGV4dCgnJywgYm94V2lkdGgpXG5cbiAgICBjb25zb2xlLmxvZyhgXG4gICAgICDilIwke2JvcmRlcn3ilJBcbiAgICAgIOKUgiR7ZW1wdHlMaW5lfeKUglxuICAgICAg4pSCJHtjcmVhdGVCb3hUZXh0KHRpdGxlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUgiR7Y3JlYXRlQm94VGV4dChtZXNzYWdlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUlCR7Ym9yZGVyfeKUmFxuICAgIGApXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coYPCfpoogRWx5c2lhIGlzIHJ1bm5pbmcgYXQgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfToke3BvcnR9YClcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyBTdGF0dXNNYXAgfSBmcm9tICdlbHlzaWEnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlKHN0YXR1czogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiBzdGF0dXMgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG4gIHJldHVybiAoU3RhdHVzTWFwIGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pW3N0YXR1c10gfHwgNTAwXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXR1c1N0cmluZyhcbiAgc3RhdHVzOiBudW1iZXIsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzU3RyID0gc3RhdHVzLnRvU3RyaW5nKClcbiAgaWYgKCF1c2VDb2xvcnMpIHtcbiAgICByZXR1cm4gc3RhdHVzU3RyXG4gIH1cblxuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIHJldHVybiBjaGFsay5yZWQoc3RhdHVzU3RyKVxuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgcmV0dXJuIGNoYWxrLnllbGxvdyhzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAzMDApIHtcbiAgICByZXR1cm4gY2hhbGsuY3lhbihzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAyMDApIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JlZW4oc3RhdHVzU3RyKVxuICB9XG4gIHJldHVybiBjaGFsay53aGl0ZShzdGF0dXNTdHIpXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuaW1wb3J0IHtcbiAgZHVyYXRpb25TdHJpbmcsXG4gIGZvcm1hdFRpbWVzdGFtcCxcbiAgbG9nU3RyaW5nLFxuICBtZXRob2RTdHJpbmcsXG4gIHBhdGhTdHJpbmcsXG4gIHN0YXR1c1N0cmluZ1xufSBmcm9tICcuLi9oZWxwZXJzJ1xuaW1wb3J0IHR5cGUge1xuICBMb2dDb21wb25lbnRzLFxuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBkZWZhdWx0TG9nRm9ybWF0ID1cbiAgJ/Cfpooge25vd30ge2xldmVsfSB7ZHVyYXRpb259IHttZXRob2R9IHtwYXRobmFtZX0ge3N0YXR1c30ge21lc3NhZ2V9IHtjb250ZXh0fSB7aXB9J1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzOiBib29sZWFuLCBvcHRpb25zPzogT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy51c2VDb2xvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvcHRpb25zLmNvbmZpZy51c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxuICB9XG4gIHJldHVybiB1c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2dNZXNzYWdlKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9ucyxcbiAgdXNlQ29sb3JzID0gdHJ1ZVxuKTogc3RyaW5nIHtcbiAgY29uc3QgYWN0dWFsbHlVc2VDb2xvcnMgPSBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzLCBvcHRpb25zKVxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gIGNvbnN0IGNvbXBvbmVudHM6IExvZ0NvbXBvbmVudHMgPSB7XG4gICAgbm93OiBhY3R1YWxseVVzZUNvbG9yc1xuICAgICAgPyBjaGFsay5iZ1llbGxvdyhcbiAgICAgICAgICBjaGFsay5ibGFjayhmb3JtYXRUaW1lc3RhbXAobm93LCBvcHRpb25zPy5jb25maWc/LnRpbWVzdGFtcCkpXG4gICAgICAgIClcbiAgICAgIDogZm9ybWF0VGltZXN0YW1wKG5vdywgb3B0aW9ucz8uY29uZmlnPy50aW1lc3RhbXApLFxuICAgIGVwb2NoOiBNYXRoLmZsb29yKG5vdy5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpLFxuICAgIGxldmVsOiBsb2dTdHJpbmcobGV2ZWwsIHVzZUNvbG9ycyksXG4gICAgZHVyYXRpb246IGR1cmF0aW9uU3RyaW5nKHN0b3JlLmJlZm9yZVRpbWUsIHVzZUNvbG9ycyksXG4gICAgbWV0aG9kOiBtZXRob2RTdHJpbmcocmVxdWVzdC5tZXRob2QsIHVzZUNvbG9ycyksXG4gICAgcGF0aG5hbWU6IHBhdGhTdHJpbmcocmVxdWVzdCksXG4gICAgc3RhdHVzOiBzdGF0dXNTdHJpbmcoZGF0YS5zdGF0dXMgfHwgMjAwLCB1c2VDb2xvcnMpLFxuICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSB8fCAnJyxcbiAgICBjb250ZXh0OiBkYXRhLmNvbnRleHRcbiAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEuY29udGV4dClcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGBbRXJyb3Igc2VyaWFsaXppbmcgY29udGV4dDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31dYFxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgOiAnJyxcbiAgICBpcDpcbiAgICAgIG9wdGlvbnM/LmNvbmZpZz8uaXAgJiYgcmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJylcbiAgICAgICAgPyBgSVA6ICR7cmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJyl9YFxuICAgICAgICA6ICcnXG4gIH1cblxuICBjb25zdCBsb2dGb3JtYXQgPSBvcHRpb25zPy5jb25maWc/LmN1c3RvbUxvZ0Zvcm1hdCB8fCBkZWZhdWx0TG9nRm9ybWF0XG5cbiAgcmV0dXJuIGxvZ0Zvcm1hdC5yZXBsYWNlKC97KFxcdyspfS9nLCAoXywga2V5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnRzW2tleSBhcyBrZXlvZiBMb2dDb21wb25lbnRzXSB8fCAnJ1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuXG5pbXBvcnQgdHlwZSB7IENvbG9yTWFwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVsQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBJTkZPOiBjaGFsay5iZ0dyZWVuLmJsYWNrLFxuICBXQVJOSU5HOiBjaGFsay5iZ1llbGxvdy5ibGFjayxcbiAgRVJST1I6IGNoYWxrLmJnUmVkLmJsYWNrXG59XG5cbmV4cG9ydCBjb25zdCBIdHRwTWV0aG9kQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBHRVQ6IGNoYWxrLmdyZWVuLFxuICBQT1NUOiBjaGFsay55ZWxsb3csXG4gIFBVVDogY2hhbGsuYmx1ZSxcbiAgUEFUQ0g6IGNoYWxrLm1hZ2VudGFCcmlnaHQsXG4gIERFTEVURTogY2hhbGsucmVkLFxuICBIRUFEOiBjaGFsay5jeWFuLFxuICBPUFRJT05TOiBjaGFsay5tYWdlbnRhXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuY29uc3QgdGltZVVuaXRzID0gW1xuICB7IHVuaXQ6ICdzJywgdGhyZXNob2xkOiAxZTksIGRlY2ltYWxQbGFjZXM6IDIgfSxcbiAgeyB1bml0OiAnbXMnLCB0aHJlc2hvbGQ6IDFlNiwgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICfCtXMnLCB0aHJlc2hvbGQ6IDFlMywgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICducycsIHRocmVzaG9sZDogMSwgZGVjaW1hbFBsYWNlczogMCB9XG5dXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGR1cmF0aW9uU3RyaW5nKFxuICBiZWZvcmVUaW1lOiBiaWdpbnQsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3QgbmFub3NlY29uZHMgPSBOdW1iZXIocHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgLSBiZWZvcmVUaW1lKVxuXG4gIGZvciAoY29uc3QgeyB1bml0LCB0aHJlc2hvbGQsIGRlY2ltYWxQbGFjZXMgfSBvZiB0aW1lVW5pdHMpIHtcbiAgICBpZiAobmFub3NlY29uZHMgPj0gdGhyZXNob2xkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChuYW5vc2Vjb25kcyAvIHRocmVzaG9sZCkudG9GaXhlZChkZWNpbWFsUGxhY2VzKVxuICAgICAgY29uc3QgdGltZVN0ciA9IGAke3ZhbHVlfSR7dW5pdH1gLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbiAgICAgIHJldHVybiB1c2VDb2xvcnMgPyBjaGFsay5ncmF5KHRpbWVTdHIpIDogdGltZVN0clxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1c2VDb2xvcnNcbiAgICA/IGNoYWxrLmdyYXkoJzBucycucGFkU3RhcnQoOCkucGFkRW5kKDE2KSlcbiAgICA6ICcwbnMnLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBMb2dMZXZlbCB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBMb2dMZXZlbENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2dTdHJpbmcobGV2ZWw6IExvZ0xldmVsLCB1c2VDb2xvcnM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBsZXZlbFN0ciA9IGxldmVsLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIHVzZUNvbG9yc1xuICAgID8gTG9nTGV2ZWxDb2xvck1hcFtsZXZlbFN0cl0/LihsZXZlbFN0ci5wYWRFbmQoNykpIHx8IGxldmVsU3RyXG4gICAgOiBsZXZlbFN0ci5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHsgSHR0cE1ldGhvZENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXRob2RTdHJpbmcoXG4gIG1ldGhvZDogc3RyaW5nLFxuICB1c2VDb2xvcnM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGNvbnN0IGNvbG9yRnVuY3Rpb24gPSBIdHRwTWV0aG9kQ29sb3JNYXBbbWV0aG9kXVxuICByZXR1cm4gdXNlQ29sb3JzICYmIGNvbG9yRnVuY3Rpb25cbiAgICA/IGNvbG9yRnVuY3Rpb24obWV0aG9kLnBhZEVuZCg3KSlcbiAgICA6IG1ldGhvZC5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhdGhTdHJpbmcoXG4gIHJlcXVlc3RJbmZvOiBSZXF1ZXN0SW5mb1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFVSTChyZXF1ZXN0SW5mby51cmwpLnBhdGhuYW1lXG4gIH0gY2F0Y2gge1xuICAgIHJldHVyblxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVGltZXN0YW1wQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuLy8gY29uc3QgREVGQVVMVF9USU1FU1RBTVBfRk9STUFUID0gJ3l5eXktbW0tZGQgSEg6TU06c3MnXG5jb25zdCBTWVNfVElNRSA9ICdTWVM6U1RBTkRBUkQnXG5cbmNvbnN0IHBhZCA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuZnVuY3Rpb24gZm9ybWF0U3lzdGVtVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICBjb25zdCBtb250aCA9IHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKVxuICBjb25zdCBkYXkgPSBwYWQoZGF0ZS5nZXREYXRlKCkpXG4gIGNvbnN0IGhvdXJzID0gcGFkKGRhdGUuZ2V0SG91cnMoKSlcbiAgY29uc3QgbWludXRlcyA9IHBhZChkYXRlLmdldE1pbnV0ZXMoKSlcbiAgY29uc3Qgc2Vjb25kcyA9IHBhZChkYXRlLmdldFNlY29uZHMoKSlcbiAgY29uc3QgbXMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKVxuXG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gJHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9LiR7bXN9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21UaW1lKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9ID0ge1xuICAgIHl5eXk6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICB5eTogZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc2xpY2UoLTIpLFxuICAgIG1tOiBwYWQoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgZGQ6IHBhZChkYXRlLmdldERhdGUoKSksXG4gICAgSEg6IHBhZChkYXRlLmdldEhvdXJzKCkpLFxuICAgIE1NOiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpLFxuICAgIHNzOiBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgIFNTUzogcGFkKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLFxuICAgIFo6IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MFxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC95eXl5fHl5fG1tfGRkfEhIfE1NfHNzfFNTU3xaL2csIG1hdGNoID0+XG4gICAgKHRva2Vuc1ttYXRjaF0gPz8gJycpLnRvU3RyaW5nKClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKGRhdGU6IERhdGUsIGNvbmZpZz86IFRpbWVzdGFtcENvbmZpZyk6IHN0cmluZyB7XG4gIGlmICghY29uZmlnPy50cmFuc2xhdGVUaW1lKSB7XG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG5cbiAgaWYgKGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSB0cnVlIHx8IGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSBTWVNfVElNRSkge1xuICAgIHJldHVybiBmb3JtYXRTeXN0ZW1UaW1lKGRhdGUpXG4gIH1cblxuICByZXR1cm4gZm9ybWF0Q3VzdG9tVGltZShkYXRlLCBjb25maWcudHJhbnNsYXRlVGltZSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9UcmFuc3BvcnRzKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghb3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzIHx8IG9wdGlvbnMuY29uZmlnLnRyYW5zcG9ydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBtZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgZmFsc2UpXG5cbiAgY29uc3QgcHJvbWlzZXMgPSBvcHRpb25zLmNvbmZpZy50cmFuc3BvcnRzLm1hcCh0cmFuc3BvcnQgPT5cbiAgICB0cmFuc3BvcnQubG9nKGxldmVsLCBtZXNzYWdlLCB7IHJlcXVlc3QsIGRhdGEsIHN0b3JlIH0pXG4gIClcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cbiIsCiAgICAiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcblxuaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5jb25zdCBkaXJDYWNoZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRpciA9IGRpcm5hbWUoZmlsZVBhdGgpXG4gIGlmICghZGlyQ2FjaGUuaGFzKGRpcikpIHtcbiAgICBhd2FpdCBmcy5ta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgZGlyQ2FjaGUuYWRkKGRpcilcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9GaWxlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aClcbiAgY29uc3QgbG9nTWVzc2FnZSA9IGAke2J1aWxkTG9nTWVzc2FnZShsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMsIGZhbHNlKX1cXG5gXG4gIGF3YWl0IGZzLmFwcGVuZEZpbGUoZmlsZVBhdGgsIGxvZ01lc3NhZ2UsIHsgZmxhZzogJ2EnIH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTG9nTGV2ZWwsIE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBjaGVja0ZpbHRlciA9IChmaWx0ZXJWYWx1ZTogdW5rbm93biwgdmFsdWU6IHVua25vd24pID0+XG4gIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpXG4gICAgPyBmaWx0ZXJWYWx1ZS5pbmNsdWRlcyh2YWx1ZSlcbiAgICA6IGZpbHRlclZhbHVlID09PSB2YWx1ZVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTG9nKFxuICBsb2dMZXZlbDogTG9nTGV2ZWwsXG4gIHN0YXR1czogbnVtYmVyLFxuICBtZXRob2Q6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9wdGlvbnNcbik6IGJvb2xlYW4ge1xuICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5jb25maWc/LmxvZ0ZpbHRlclxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gKFxuICAgICghZmlsdGVyLmxldmVsIHx8IGNoZWNrRmlsdGVyKGZpbHRlci5sZXZlbCwgbG9nTGV2ZWwpKSAmJlxuICAgICghZmlsdGVyLnN0YXR1cyB8fCBjaGVja0ZpbHRlcihmaWx0ZXIuc3RhdHVzLCBzdGF0dXMpKSAmJlxuICAgICghZmlsdGVyLm1ldGhvZCB8fCBjaGVja0ZpbHRlcihmaWx0ZXIubWV0aG9kLCBtZXRob2QpKVxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgSHR0cEVycm9yLCBPcHRpb25zLCBSZXF1ZXN0SW5mbywgU3RvcmVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcbmltcG9ydCB7IGxvZ1RvRmlsZSwgbG9nVG9UcmFuc3BvcnRzIH0gZnJvbSAnLi4vb3V0cHV0J1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi9idWlsZC1sb2ctbWVzc2FnZSdcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUh0dHBFcnJvcihcbiAgcmVxdWVzdDogUmVxdWVzdEluZm8sXG4gIGVycm9yOiBIdHRwRXJyb3IsXG4gIHN0b3JlOiBTdG9yZURhdGEsXG4gIG9wdGlvbnM/OiBPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhdHVzQ29kZSA9IGVycm9yLnN0YXR1cyB8fCA1MDBcbiAgY29uc3QgbG9nRGF0YSA9IHtcbiAgICBzdGF0dXM6IHN0YXR1c0NvZGUsXG4gICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICBzdGFjazogZXJyb3Iuc3RhY2tcbiAgfVxuXG4gIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXVxuXG4gIC8vIEhhbmRsZSBjb25zb2xlIGxvZ2dpbmdcbiAgaWYgKFxuICAgICEoXG4gICAgICBvcHRpb25zPy5jb25maWc/LnVzZVRyYW5zcG9ydHNPbmx5IHx8XG4gICAgICBvcHRpb25zPy5jb25maWc/LmRpc2FibGVJbnRlcm5hbExvZ2dlclxuICAgIClcbiAgKSB7XG4gICAgY29uc29sZS5lcnJvcihidWlsZExvZ01lc3NhZ2UoJ0VSUk9SJywgcmVxdWVzdCwgbG9nRGF0YSwgc3RvcmUsIG9wdGlvbnMpKVxuICB9XG5cbiAgLy8gSGFuZGxlIGZpbGUgbG9nZ2luZ1xuICBpZiAoXG4gICAgIW9wdGlvbnM/LmNvbmZpZz8udXNlVHJhbnNwb3J0c09ubHkgJiZcbiAgICBvcHRpb25zPy5jb25maWc/LmxvZ0ZpbGVQYXRoICYmXG4gICAgIW9wdGlvbnM/LmNvbmZpZz8uZGlzYWJsZUZpbGVMb2dnaW5nXG4gICkge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBsb2dUb0ZpbGUoXG4gICAgICAgIG9wdGlvbnMuY29uZmlnLmxvZ0ZpbGVQYXRoLFxuICAgICAgICAnRVJST1InLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBsb2dEYXRhLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIC8vIEhhbmRsZSB0cmFuc3BvcnQgbG9nZ2luZ1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzPy5sZW5ndGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKGxvZ1RvVHJhbnNwb3J0cygnRVJST1InLCByZXF1ZXN0LCBsb2dEYXRhLCBzdG9yZSwgb3B0aW9ucykpXG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dnZXIsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhXG59IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBsb2dUb0ZpbGUsIGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4uL291dHB1dCdcbmltcG9ydCB7IGJ1aWxkTG9nTWVzc2FnZSB9IGZyb20gJy4vYnVpbGQtbG9nLW1lc3NhZ2UnXG5pbXBvcnQgeyBmaWx0ZXJMb2cgfSBmcm9tICcuL2ZpbHRlcidcbmltcG9ydCB7IGhhbmRsZUh0dHBFcnJvciB9IGZyb20gJy4vaGFuZGxlLWh0dHAtZXJyb3InXG5cbmZ1bmN0aW9uIGdldE1ldHJpY3MoKTogTG9nRGF0YVsnbWV0cmljcyddIHtcbiAgY29uc3QgbWVtb3J5VXNhZ2UgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQgLyAxMDI0IC8gMTAyNCAvLyBNQlxuICBjb25zdCBjcHVVc2FnZSA9IHByb2Nlc3MuY3B1VXNhZ2UoKVxuXG4gIHJldHVybiB7XG4gICAgbWVtb3J5VXNhZ2UsXG4gICAgY3B1VXNhZ2U6IGNwdVVzYWdlLnVzZXIgLyAxXzAwMF8wMDAgLy8gY29udmVydCB0byBzZWNvbmRzXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZmlsdGVyTG9nKGxldmVsLCBkYXRhLnN0YXR1cyB8fCAyMDAsIHJlcXVlc3QubWV0aG9kLCBvcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQWRkIG1ldHJpY3MgaWYgbm90IHByb3ZpZGVkXG4gIGlmICghZGF0YS5tZXRyaWNzKSB7XG4gICAgZGF0YS5tZXRyaWNzID0gZ2V0TWV0cmljcygpXG4gIH1cblxuICAvLyBBZGQgc3RhY2sgdHJhY2UgZm9yIGVycm9yc1xuICBpZiAobGV2ZWwgPT09ICdFUlJPUicgJiYgIWRhdGEuc3RhY2spIHtcbiAgICBkYXRhLnN0YWNrID0gbmV3IEVycm9yKGBFcnJvcjogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApLnN0YWNrXG4gIH1cblxuICBjb25zdCBsb2dNZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgdHJ1ZSlcblxuICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW11cblxuICAvLyBIYW5kbGUgY29uc29sZSBsb2dnaW5nXG4gIGlmIChcbiAgICAhKFxuICAgICAgb3B0aW9ucz8uY29uZmlnPy51c2VUcmFuc3BvcnRzT25seSB8fFxuICAgICAgb3B0aW9ucz8uY29uZmlnPy5kaXNhYmxlSW50ZXJuYWxMb2dnZXJcbiAgICApXG4gICkge1xuICAgIGNvbnNvbGUubG9nKGxvZ01lc3NhZ2UpXG4gIH1cblxuICAvLyBIYW5kbGUgZmlsZSBsb2dnaW5nXG4gIGlmIChcbiAgICAhb3B0aW9ucz8uY29uZmlnPy51c2VUcmFuc3BvcnRzT25seSAmJlxuICAgIG9wdGlvbnM/LmNvbmZpZz8ubG9nRmlsZVBhdGggJiZcbiAgICAhb3B0aW9ucz8uY29uZmlnPy5kaXNhYmxlRmlsZUxvZ2dpbmdcbiAgKSB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIGxvZ1RvRmlsZShcbiAgICAgICAgb3B0aW9ucy5jb25maWcubG9nRmlsZVBhdGgsXG4gICAgICAgIGxldmVsLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIC8vIEhhbmRsZSB0cmFuc3BvcnQgbG9nZ2luZ1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzPy5sZW5ndGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKGxvZ1RvVHJhbnNwb3J0cyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpKVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIob3B0aW9ucz86IE9wdGlvbnMpOiBMb2dnZXIge1xuICBjb25zdCBsb2dnZXI6IExvZ2dlciA9IHtcbiAgICBzdG9yZTogdW5kZWZpbmVkLFxuICAgIGxvZzogKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSkgPT5cbiAgICAgIGxvZyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGhhbmRsZUh0dHBFcnJvcjogYXN5bmMgKHJlcXVlc3QsIGVycm9yLCBzdG9yZSkgPT5cbiAgICAgIGF3YWl0IGhhbmRsZUh0dHBFcnJvcihyZXF1ZXN0LCBlcnJvciwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGN1c3RvbUxvZ0Zvcm1hdDogb3B0aW9ucz8uY29uZmlnPy5jdXN0b21Mb2dGb3JtYXQsXG4gICAgaW5mbzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0lORk8nLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICB7IG1lc3NhZ2UsIGNvbnRleHQsIHN0YXR1czogMjAwIH0sXG4gICAgICAgIHN0b3JlRGF0YSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIH0sXG4gICAgZXJyb3I6IChyZXF1ZXN0LCBtZXNzYWdlLCBjb250ZXh0LCBzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVEYXRhID0gc3RvcmUgfHxcbiAgICAgICAgbG9nZ2VyLnN0b3JlIHx8IHsgYmVmb3JlVGltZTogcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgfVxuICAgICAgc3RvcmVEYXRhLmhhc0N1c3RvbUxvZyA9IHRydWVcbiAgICAgIHJldHVybiBsb2coXG4gICAgICAgICdFUlJPUicsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiA1MDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICB3YXJuOiAocmVxdWVzdCwgbWVzc2FnZSwgY29udGV4dCwgc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIHx8XG4gICAgICAgIGxvZ2dlci5zdG9yZSB8fCB7IGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpIH1cbiAgICAgIHN0b3JlRGF0YS5oYXNDdXN0b21Mb2cgPSB0cnVlXG4gICAgICByZXR1cm4gbG9nKFxuICAgICAgICAnV0FSTklORycsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiAyMDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICBkZWJ1ZzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0RFQlVHJyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgeyBtZXNzYWdlLCBjb250ZXh0LCBzdGF0dXM6IDIwMCB9LFxuICAgICAgICBzdG9yZURhdGEsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvZ2dlclxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIm96QkFBdUIsSUFBdkIsb0JDRUEsSUFBTSxFQUFnQixDQUFDLEVBQWMsSUFBMEIsQ0FDN0QsSUFBTSxFQUFnQixLQUFLLElBQUksR0FBSSxFQUFRLEVBQUssUUFBVSxDQUFDLEVBQ3JELEVBQVUsSUFBSSxPQUFPLENBQWEsRUFDeEMsTUFBTyxHQUFHLElBQVUsSUFBTyxJQUFVLE9BQU8sQ0FBSyxHQUduRCxTQUF3QixDQUFXLENBQUMsRUFBZ0IsRUFBeUIsQ0FDM0UsSUFBTSxFQUFXLEdBQVEsVUFBWSxZQUMvQixFQUFPLEdBQVEsTUFBUSxLQUN2QixFQUFXLEdBQVEsVUFBWSxPQUdyQyxHQUZtQixHQUFTLFFBQVEsdUJBQXlCLFNBRTdDLENBRWQsSUFBTSxFQUFVLHFDQUEwQixPQUFjLEtBQVksSUFDOUQsRUFBVyxLQUFLLElBQUksR0FBYyxFQUFRLE1BQU0sRUFBSSxFQUNwRCxFQUFTLElBQUcsT0FBTyxDQUFRLEVBQzNCLEVBQVksRUFBYyxHQUFJLENBQVEsRUFFNUMsUUFBUSxJQUFJO0FBQUEsU0FDUjtBQUFB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
package/dist/index.d.cts CHANGED
@@ -21,7 +21,7 @@ interface LogData {
21
21
  interface Logger {
22
22
  store?: StoreData;
23
23
  log(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData): void;
24
- handleHttpError(request: RequestInfo, error: HttpError, store: StoreData): void;
24
+ handleHttpError(request: RequestInfo, error: HttpError, store: StoreData): Promise<void>;
25
25
  customLogFormat?: string;
26
26
  info(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
27
27
  error(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
@@ -76,10 +76,13 @@ interface Options {
76
76
  startupMessageFormat?: "banner" | "simple"
77
77
  transports?: Transport[]
78
78
  timestamp?: TimestampConfig
79
+ disableInternalLogger?: boolean
80
+ disableFileLogging?: boolean
81
+ useTransportsOnly?: boolean
79
82
  };
80
83
  }
81
84
  declare function createLogger(options?: Options): Logger;
82
- declare function handleHttpError2(request: RequestInfo, error: HttpError, store: StoreData, options?: Options): void;
85
+ declare function handleHttpError2(request: RequestInfo, error: HttpError, store: StoreData, options?: Options): Promise<void>;
83
86
  declare function logToTransports(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData, options?: Options): Promise<void>;
84
87
  declare function logixlysia(options?: Options): Elysia;
85
88
  export { logToTransports, handleHttpError2 as handleHttpError, logixlysia as default, createLogger, Transport, StoreData, RequestInfo, Options, LogixlysiaContext, Logger, LogLevel, LogData, HttpError };
package/dist/index.d.ts CHANGED
@@ -21,7 +21,7 @@ interface LogData {
21
21
  interface Logger {
22
22
  store?: StoreData;
23
23
  log(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData): void;
24
- handleHttpError(request: RequestInfo, error: HttpError, store: StoreData): void;
24
+ handleHttpError(request: RequestInfo, error: HttpError, store: StoreData): Promise<void>;
25
25
  customLogFormat?: string;
26
26
  info(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
27
27
  error(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
@@ -76,10 +76,13 @@ interface Options {
76
76
  startupMessageFormat?: "banner" | "simple"
77
77
  transports?: Transport[]
78
78
  timestamp?: TimestampConfig
79
+ disableInternalLogger?: boolean
80
+ disableFileLogging?: boolean
81
+ useTransportsOnly?: boolean
79
82
  };
80
83
  }
81
84
  declare function createLogger(options?: Options): Logger;
82
- declare function handleHttpError2(request: RequestInfo, error: HttpError, store: StoreData, options?: Options): void;
85
+ declare function handleHttpError2(request: RequestInfo, error: HttpError, store: StoreData, options?: Options): Promise<void>;
83
86
  declare function logToTransports(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData, options?: Options): Promise<void>;
84
87
  declare function logixlysia(options?: Options): Elysia;
85
88
  export { logToTransports, handleHttpError2 as handleHttpError, logixlysia as default, createLogger, Transport, StoreData, RequestInfo, Options, LogixlysiaContext, Logger, LogLevel, LogData, HttpError };
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import{Elysia as J}from"elysia";var w=(t,r)=>{let o=Math.max(0,(r-t.length)/2),n=" ".repeat(o);return`${n}${t}${n}`.padEnd(r)};function L(t,r){let o=t?.hostname??"localhost",n=t?.port??3000,e=t?.protocol??"http";if(r?.config?.startupMessageFormat!=="simple"){let a=`\uD83E\uDD8A Elysia is running at ${e}://${o}:${n}`,c=Math.max(22,a.length)+4,D="─".repeat(c),p=w("",c);console.log(`
2
- ┌${D}┐
3
- │${p}│
4
- │${w("Elysia with Logixlysia",c)}│
5
- │${p}│
6
- │${w(a,c)}│
7
- │${p}│
8
- └${D}┘
9
- `)}else console.log(`\uD83E\uDD8A Elysia is running at ${e}://${o}:${n}`)}import f from"chalk";import{StatusMap as N}from"elysia";function C(t){if(typeof t==="number")return t;return N[t]||500}function d(t,r){let o=t.toString();if(!r)return o;if(t>=500)return f.red(o);if(t>=400)return f.yellow(o);if(t>=300)return f.cyan(o);if(t>=200)return f.green(o);return f.white(o)}import I from"chalk";import l from"chalk";var M={INFO:l.bgGreen.black,WARNING:l.bgYellow.black,ERROR:l.bgRed.black},T={GET:l.green,POST:l.yellow,PUT:l.blue,PATCH:l.magentaBright,DELETE:l.red,HEAD:l.cyan,OPTIONS:l.magenta};import P from"chalk";var q=[{unit:"s",threshold:1e9,decimalPlaces:2},{unit:"ms",threshold:1e6,decimalPlaces:0},{unit:"µs",threshold:1000,decimalPlaces:0},{unit:"ns",threshold:1,decimalPlaces:0}];function S(t,r){let o=Number(process.hrtime.bigint()-t);for(let{unit:n,threshold:e,decimalPlaces:s}of q)if(o>=e){let a=`${(o/e).toFixed(s)}${n}`.padStart(8).padEnd(16);return r?P.gray(a):a}return r?P.gray("0ns".padStart(8).padEnd(16)):"0ns".padStart(8).padEnd(16)}function x(t,r){let o=t.toUpperCase();return r?M[o]?.(o.padEnd(7))||o:o.padEnd(7)}function b(t,r){let o=T[t];return r&&o?o(t.padEnd(7)):t.padEnd(7)}function E(t){try{return new URL(t.url).pathname}catch{return}}var g=(t)=>t.toString().padStart(2,"0");function B(t){let r=t.getFullYear(),o=g(t.getMonth()+1),n=g(t.getDate()),e=g(t.getHours()),s=g(t.getMinutes()),i=g(t.getSeconds()),a=t.getMilliseconds().toString().padStart(3,"0");return`${r}-${o}-${n} ${e}:${s}:${i}.${a}`}function G(t,r){let o={yyyy:t.getFullYear(),yy:t.getFullYear().toString().slice(-2),mm:g(t.getMonth()+1),dd:g(t.getDate()),HH:g(t.getHours()),MM:g(t.getMinutes()),ss:g(t.getSeconds()),SSS:g(t.getMilliseconds()),Z:-t.getTimezoneOffset()/60};return r.replace(/yyyy|yy|mm|dd|HH|MM|ss|SSS|Z/g,(n)=>(o[n]??"").toString())}function v(t,r){if(!r?.translateTime)return t.toISOString();if(r.translateTime===!0||r.translateTime==="SYS:STANDARD")return B(t);return G(t,r.translateTime)}var A="\uD83E\uDD8A {now} {level} {duration} {method} {pathname} {status} {message} {context} {ip}";function W(t,r){if(r?.config?.useColors!==void 0)return r.config.useColors&&process.env.NO_COLOR===void 0;return t&&process.env.NO_COLOR===void 0}function m(t,r,o,n,e,s=!0){let i=W(s,e),a=new Date,c={now:i?I.bgYellow(I.black(v(a,e?.config?.timestamp))):v(a,e?.config?.timestamp),epoch:Math.floor(a.getTime()/1000).toString(),level:x(t,s),duration:S(n.beforeTime,s),method:b(r.method,s),pathname:E(r),status:d(o.status||200,s),message:o.message||"",context:o.context?(()=>{try{return JSON.stringify(o.context)}catch(p){return`[Error serializing context: ${p instanceof Error?p.message:"Unknown error"}]`}})():"",ip:e?.config?.ip&&r.headers.get("x-forwarded-for")?`IP: ${r.headers.get("x-forwarded-for")}`:""};return(e?.config?.customLogFormat||A).replace(/{(\w+)}/g,(p,F)=>{if(F in c)return c[F]||"";return""})}async function O(t,r,o,n,e){if(!e?.config?.transports||e.config.transports.length===0)return;let s=m(t,r,o,n,e,!1),i=e.config.transports.map((a)=>a.log(t,s,{request:r,data:o,store:n}));await Promise.all(i)}import{promises as H}from"node:fs";import{dirname as _}from"node:path";var k=new Set;async function Y(t){let r=_(t);if(!k.has(r))await H.mkdir(r,{recursive:!0}),k.add(r)}async function u(t,r,o,n,e,s){await Y(t);let i=`${m(r,o,n,e,s,!1)}
10
- `;await H.appendFile(t,i,{flag:"a"})}var $=(t,r)=>Array.isArray(t)?t.includes(r):t===r;function U(t,r,o,n){let e=n?.config?.logFilter;if(!e)return!0;return(!e.level||$(e.level,t))&&(!e.status||$(e.status,r))&&(!e.method||$(e.method,o))}function y(t,r,o,n){let e=r.status||500;console.error(m("ERROR",t,{status:e},o,n));let s=[];if(n?.config?.logFilePath)s.push(u(n.config.logFilePath,"ERROR",t,{status:e},o,n))}function z(){let t=process.memoryUsage().heapUsed/1024/1024,r=process.cpuUsage();return{memoryUsage:t,cpuUsage:r.user/1e6}}async function h(t,r,o,n,e){if(!U(t,o.status||200,r.method,e))return;if(!o.metrics)o.metrics=z();if(t==="ERROR"&&!o.stack)o.stack=new Error(`Error: ${o.message||"Unknown error"}`).stack;let s=m(t,r,o,n,e,!0);console.log(s);let i=[];if(e?.config?.logFilePath)i.push(u(e.config.logFilePath,t,r,o,n,e));if(e?.config?.transports?.length)i.push(O(t,r,o,n,e));await Promise.all(i)}function R(t){let r={store:void 0,log:(o,n,e,s)=>h(o,n,e,s,t),handleHttpError:(o,n,e)=>y(o,n,e,t),customLogFormat:t?.config?.customLogFormat,info:(o,n,e,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,h("INFO",o,{message:n,context:e,status:200},i,t)},error:(o,n,e,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,h("ERROR",o,{message:n,context:e,status:500},i,t)},warn:(o,n,e,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,h("WARNING",o,{message:n,context:e,status:200},i,t)},debug:(o,n,e,s)=>{let i=s||r.store||{beforeTime:process.hrtime.bigint()};return i.hasCustomLog=!0,h("DEBUG",o,{message:n,context:e,status:200},i,t)}};return r}function j(t){let r=R(t);return new J({name:"Logixlysia"}).onStart((o)=>{if(t?.config?.showStartupMessage??!0)L(o.server,t)}).onRequest((o)=>{let n={...o.store,beforeTime:process.hrtime.bigint(),logger:r,hasCustomLog:!1};o.store=n,r.store=n}).onAfterHandle({as:"global"},({request:o,set:n,store:e})=>{let s=e;if(!s.hasCustomLog){let i=C(n.status||200);r.log("INFO",o,{status:i,message:String(n.headers?.["x-message"]||"")},s)}}).onError({as:"global"},({request:o,error:n,set:e,store:s})=>{let i=C(e.status||500);r.handleHttpError(o,{...n,status:i},s)})}export{O as logToTransports,y as handleHttpError,j as default,R as createLogger};
1
+ import{Elysia as J}from"elysia";var D=(r,o)=>{let t=Math.max(0,(o-r.length)/2),n=" ".repeat(t);return`${n}${r}${n}`.padEnd(o)};function d(r,o){let t=r?.hostname??"localhost",n=r?.port??3000,e=r?.protocol??"http";if(o?.config?.startupMessageFormat!=="simple"){let i=`\uD83E\uDD8A Elysia is running at ${e}://${t}:${n}`,m=Math.max(22,i.length)+4,w="─".repeat(m),f=D("",m);console.log(`
2
+ ┌${w}┐
3
+ │${f}│
4
+ │${D("Elysia with Logixlysia",m)}│
5
+ │${f}│
6
+ │${D(i,m)}│
7
+ │${f}│
8
+ └${w}┘
9
+ `)}else console.log(`\uD83E\uDD8A Elysia is running at ${e}://${t}:${n}`)}import u from"chalk";import{StatusMap as N}from"elysia";function T(r){if(typeof r==="number")return r;return N[r]||500}function S(r,o){let t=r.toString();if(!o)return t;if(r>=500)return u.red(t);if(r>=400)return u.yellow(t);if(r>=300)return u.cyan(t);if(r>=200)return u.green(t);return u.white(t)}import I from"chalk";import l from"chalk";var C={INFO:l.bgGreen.black,WARNING:l.bgYellow.black,ERROR:l.bgRed.black},F={GET:l.green,POST:l.yellow,PUT:l.blue,PATCH:l.magentaBright,DELETE:l.red,HEAD:l.cyan,OPTIONS:l.magenta};import $ from"chalk";var q=[{unit:"s",threshold:1e9,decimalPlaces:2},{unit:"ms",threshold:1e6,decimalPlaces:0},{unit:"µs",threshold:1000,decimalPlaces:0},{unit:"ns",threshold:1,decimalPlaces:0}];function b(r,o){let t=Number(process.hrtime.bigint()-r);for(let{unit:n,threshold:e,decimalPlaces:s}of q)if(t>=e){let i=`${(t/e).toFixed(s)}${n}`.padStart(8).padEnd(16);return o?$.gray(i):i}return o?$.gray("0ns".padStart(8).padEnd(16)):"0ns".padStart(8).padEnd(16)}function x(r,o){let t=r.toUpperCase();return o?C[t]?.(t.padEnd(7))||t:t.padEnd(7)}function y(r,o){let t=F[r];return o&&t?t(r.padEnd(7)):r.padEnd(7)}function O(r){try{return new URL(r.url).pathname}catch{return}}var g=(r)=>r.toString().padStart(2,"0");function B(r){let o=r.getFullYear(),t=g(r.getMonth()+1),n=g(r.getDate()),e=g(r.getHours()),s=g(r.getMinutes()),a=g(r.getSeconds()),i=r.getMilliseconds().toString().padStart(3,"0");return`${o}-${t}-${n} ${e}:${s}:${a}.${i}`}function G(r,o){let t={yyyy:r.getFullYear(),yy:r.getFullYear().toString().slice(-2),mm:g(r.getMonth()+1),dd:g(r.getDate()),HH:g(r.getHours()),MM:g(r.getMinutes()),ss:g(r.getSeconds()),SSS:g(r.getMilliseconds()),Z:-r.getTimezoneOffset()/60};return o.replace(/yyyy|yy|mm|dd|HH|MM|ss|SSS|Z/g,(n)=>(t[n]??"").toString())}function E(r,o){if(!o?.translateTime)return r.toISOString();if(o.translateTime===!0||o.translateTime==="SYS:STANDARD")return B(r);return G(r,o.translateTime)}var A="\uD83E\uDD8A {now} {level} {duration} {method} {pathname} {status} {message} {context} {ip}";function W(r,o){if(o?.config?.useColors!==void 0)return o.config.useColors&&process.env.NO_COLOR===void 0;return r&&process.env.NO_COLOR===void 0}function c(r,o,t,n,e,s=!0){let a=W(s,e),i=new Date,m={now:a?I.bgYellow(I.black(E(i,e?.config?.timestamp))):E(i,e?.config?.timestamp),epoch:Math.floor(i.getTime()/1000).toString(),level:x(r,s),duration:b(n.beforeTime,s),method:y(o.method,s),pathname:O(o),status:S(t.status||200,s),message:t.message||"",context:t.context?(()=>{try{return JSON.stringify(t.context)}catch(f){return`[Error serializing context: ${f instanceof Error?f.message:"Unknown error"}]`}})():"",ip:e?.config?.ip&&o.headers.get("x-forwarded-for")?`IP: ${o.headers.get("x-forwarded-for")}`:""};return(e?.config?.customLogFormat||A).replace(/{(\w+)}/g,(f,P)=>{if(P in m)return m[P]||"";return""})}async function p(r,o,t,n,e){if(!e?.config?.transports||e.config.transports.length===0)return;let s=c(r,o,t,n,e,!1),a=e.config.transports.map((i)=>i.log(r,s,{request:o,data:t,store:n}));await Promise.all(a)}import{promises as H}from"node:fs";import{dirname as _}from"node:path";var k=new Set;async function Y(r){let o=_(r);if(!k.has(o))await H.mkdir(o,{recursive:!0}),k.add(o)}async function h(r,o,t,n,e,s){await Y(r);let a=`${c(o,t,n,e,s,!1)}
10
+ `;await H.appendFile(r,a,{flag:"a"})}var M=(r,o)=>Array.isArray(r)?r.includes(o):r===o;function U(r,o,t,n){let e=n?.config?.logFilter;if(!e)return!0;return(!e.level||M(e.level,r))&&(!e.status||M(e.status,o))&&(!e.method||M(e.method,t))}async function R(r,o,t,n){let s={status:o.status||500,message:o.message,stack:o.stack},a=[];if(!(n?.config?.useTransportsOnly||n?.config?.disableInternalLogger))console.error(c("ERROR",r,s,t,n));if(!n?.config?.useTransportsOnly&&n?.config?.logFilePath&&!n?.config?.disableFileLogging)a.push(h(n.config.logFilePath,"ERROR",r,s,t,n));if(n?.config?.transports?.length)a.push(p("ERROR",r,s,t,n));await Promise.all(a)}function z(){let r=process.memoryUsage().heapUsed/1024/1024,o=process.cpuUsage();return{memoryUsage:r,cpuUsage:o.user/1e6}}async function L(r,o,t,n,e){if(!U(r,t.status||200,o.method,e))return;if(!t.metrics)t.metrics=z();if(r==="ERROR"&&!t.stack)t.stack=Error(`Error: ${t.message||"Unknown error"}`).stack;let s=c(r,o,t,n,e,!0),a=[];if(!(e?.config?.useTransportsOnly||e?.config?.disableInternalLogger))console.log(s);if(!e?.config?.useTransportsOnly&&e?.config?.logFilePath&&!e?.config?.disableFileLogging)a.push(h(e.config.logFilePath,r,o,t,n,e));if(e?.config?.transports?.length)a.push(p(r,o,t,n,e));await Promise.all(a)}function v(r){let o={store:void 0,log:(t,n,e,s)=>L(t,n,e,s,r),handleHttpError:async(t,n,e)=>await R(t,n,e,r),customLogFormat:r?.config?.customLogFormat,info:(t,n,e,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,L("INFO",t,{message:n,context:e,status:200},a,r)},error:(t,n,e,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,L("ERROR",t,{message:n,context:e,status:500},a,r)},warn:(t,n,e,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,L("WARNING",t,{message:n,context:e,status:200},a,r)},debug:(t,n,e,s)=>{let a=s||o.store||{beforeTime:process.hrtime.bigint()};return a.hasCustomLog=!0,L("DEBUG",t,{message:n,context:e,status:200},a,r)}};return o}function j(r){let o=v(r);return new J({name:"Logixlysia"}).onStart((t)=>{if(r?.config?.showStartupMessage??!0)d(t.server,r)}).onRequest((t)=>{let n={...t.store,beforeTime:process.hrtime.bigint(),logger:o,hasCustomLog:!1};t.store=n,o.store=n}).onAfterHandle({as:"global"},({request:t,set:n,store:e})=>{let s=e;if(!s.hasCustomLog){let a=T(n.status||200);o.log("INFO",t,{status:a,message:String(n.headers?.["x-message"]||"")},s)}}).onError({as:"global"},async({request:t,error:n,set:e,store:s})=>{let a=T(e.status||500);await o.handleHttpError(t,{...n,status:a},s)})}export{p as logToTransports,R as handleHttpError,j as default,v as createLogger};
11
11
 
12
- //# debugId=F56AA4EFC34A3D6864756E2164756E21
13
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9leHRlbnNpb25zL3N0YXJ0LXNlcnZlci50cyIsICIuLi9zcmMvaGVscGVycy9zdGF0dXMudHMiLCAiLi4vc3JjL2xvZ2dlci9idWlsZC1sb2ctbWVzc2FnZS50cyIsICIuLi9zcmMvaGVscGVycy9jb2xvci1tYXBwaW5nLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2R1cmF0aW9uLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2xvZy50cyIsICIuLi9zcmMvaGVscGVycy9tZXRob2QudHMiLCAiLi4vc3JjL2hlbHBlcnMvcGF0aC50cyIsICIuLi9zcmMvaGVscGVycy90aW1lc3RhbXAudHMiLCAiLi4vc3JjL291dHB1dC9jb25zb2xlLnRzIiwgIi4uL3NyYy9vdXRwdXQvZmlsZS50cyIsICIuLi9zcmMvbG9nZ2VyL2ZpbHRlci50cyIsICIuLi9zcmMvbG9nZ2VyL2hhbmRsZS1odHRwLWVycm9yLnRzIiwgIi4uL3NyYy9sb2dnZXIvY3JlYXRlLWxvZ2dlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgeyBFbHlzaWEgfSBmcm9tICdlbHlzaWEnXG5cbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi9leHRlbnNpb25zJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzQ29kZSB9IGZyb20gJy4vaGVscGVycy9zdGF0dXMnXG5pbXBvcnQgdHlwZSB7IEh0dHBFcnJvciwgT3B0aW9ucywgU2VydmVyLCBTdG9yZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9naXhseXNpYShvcHRpb25zPzogT3B0aW9ucyk6IEVseXNpYSB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zKVxuXG4gIHJldHVybiBuZXcgRWx5c2lhKHtcbiAgICBuYW1lOiAnTG9naXhseXNpYSdcbiAgfSlcbiAgICAub25TdGFydChjdHggPT4ge1xuICAgICAgY29uc3Qgc2hvd1N0YXJ0dXBNZXNzYWdlID0gb3B0aW9ucz8uY29uZmlnPy5zaG93U3RhcnR1cE1lc3NhZ2UgPz8gdHJ1ZVxuICAgICAgaWYgKHNob3dTdGFydHVwTWVzc2FnZSkge1xuICAgICAgICBzdGFydFNlcnZlcihjdHguc2VydmVyIGFzIFNlcnZlciwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vblJlcXVlc3QoY3R4ID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0ge1xuICAgICAgICAuLi5jdHguc3RvcmUsXG4gICAgICAgIGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpLFxuICAgICAgICBsb2dnZXI6IGxvZyxcbiAgICAgICAgaGFzQ3VzdG9tTG9nOiBmYWxzZVxuICAgICAgfVxuICAgICAgY3R4LnN0b3JlID0gc3RvcmVcbiAgICAgIGxvZy5zdG9yZSA9IHN0b3JlXG4gICAgfSlcbiAgICAub25BZnRlckhhbmRsZSh7IGFzOiAnZ2xvYmFsJyB9LCAoeyByZXF1ZXN0LCBzZXQsIHN0b3JlIH0pID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIGFzIFN0b3JlRGF0YVxuXG4gICAgICBpZiAoIXN0b3JlRGF0YS5oYXNDdXN0b21Mb2cpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDIwMClcbiAgICAgICAgbG9nLmxvZyhcbiAgICAgICAgICAnSU5GTycsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcoc2V0LmhlYWRlcnM/LlsneC1tZXNzYWdlJ10gfHwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdG9yZURhdGFcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG4gICAgLm9uRXJyb3IoeyBhczogJ2dsb2JhbCcgfSwgKHsgcmVxdWVzdCwgZXJyb3IsIHNldCwgc3RvcmUgfSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDUwMClcbiAgICAgIGxvZy5oYW5kbGVIdHRwRXJyb3IoXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgLi4uZXJyb3IsIHN0YXR1cyB9IGFzIEh0dHBFcnJvcixcbiAgICAgICAgc3RvcmUgYXMgU3RvcmVEYXRhXG4gICAgICApXG4gICAgfSlcbn1cblxuZXhwb3J0IHR5cGUge1xuICBIdHRwRXJyb3IsXG4gIExvZ0RhdGEsXG4gIExvZ2dlcixcbiAgTG9naXhseXNpYUNvbnRleHQsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhLFxuICBUcmFuc3BvcnRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJ1xuZXhwb3J0IHsgY3JlYXRlTG9nZ2VyLCBoYW5kbGVIdHRwRXJyb3IgfSBmcm9tICcuL2xvZ2dlcidcbmV4cG9ydCB7IGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4vb3V0cHV0J1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IE9wdGlvbnMsIFNlcnZlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmNvbnN0IGNyZWF0ZUJveFRleHQgPSAodGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFkZGluZ0xlbmd0aCA9IE1hdGgubWF4KDAsICh3aWR0aCAtIHRleHQubGVuZ3RoKSAvIDIpXG4gIGNvbnN0IHBhZGRpbmcgPSAnICcucmVwZWF0KHBhZGRpbmdMZW5ndGgpXG4gIHJldHVybiBgJHtwYWRkaW5nfSR7dGV4dH0ke3BhZGRpbmd9YC5wYWRFbmQod2lkdGgpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0U2VydmVyKGNvbmZpZzogU2VydmVyLCBvcHRpb25zPzogT3B0aW9ucyk6IHZvaWQge1xuICBjb25zdCBob3N0bmFtZSA9IGNvbmZpZz8uaG9zdG5hbWUgPz8gJ2xvY2FsaG9zdCdcbiAgY29uc3QgcG9ydCA9IGNvbmZpZz8ucG9ydCA/PyAzMDAwXG4gIGNvbnN0IHByb3RvY29sID0gY29uZmlnPy5wcm90b2NvbCA/PyAnaHR0cCdcbiAgY29uc3Qgc2hvd0Jhbm5lciA9IG9wdGlvbnM/LmNvbmZpZz8uc3RhcnR1cE1lc3NhZ2VGb3JtYXQgIT09ICdzaW1wbGUnXG5cbiAgaWYgKHNob3dCYW5uZXIpIHtcbiAgICBjb25zdCB0aXRsZSA9ICdFbHlzaWEgd2l0aCBMb2dpeGx5c2lhJ1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBg8J+miiBFbHlzaWEgaXMgcnVubmluZyBhdCAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9OiR7cG9ydH1gXG4gICAgY29uc3QgYm94V2lkdGggPSBNYXRoLm1heCh0aXRsZS5sZW5ndGgsIG1lc3NhZ2UubGVuZ3RoKSArIDRcbiAgICBjb25zdCBib3JkZXIgPSAn4pSAJy5yZXBlYXQoYm94V2lkdGgpXG4gICAgY29uc3QgZW1wdHlMaW5lID0gY3JlYXRlQm94VGV4dCgnJywgYm94V2lkdGgpXG5cbiAgICBjb25zb2xlLmxvZyhgXG4gICAgICDilIwke2JvcmRlcn3ilJBcbiAgICAgIOKUgiR7ZW1wdHlMaW5lfeKUglxuICAgICAg4pSCJHtjcmVhdGVCb3hUZXh0KHRpdGxlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUgiR7Y3JlYXRlQm94VGV4dChtZXNzYWdlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUlCR7Ym9yZGVyfeKUmFxuICAgIGApXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coYPCfpoogRWx5c2lhIGlzIHJ1bm5pbmcgYXQgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfToke3BvcnR9YClcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyBTdGF0dXNNYXAgfSBmcm9tICdlbHlzaWEnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlKHN0YXR1czogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiBzdGF0dXMgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG4gIHJldHVybiAoU3RhdHVzTWFwIGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pW3N0YXR1c10gfHwgNTAwXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXR1c1N0cmluZyhcbiAgc3RhdHVzOiBudW1iZXIsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzU3RyID0gc3RhdHVzLnRvU3RyaW5nKClcbiAgaWYgKCF1c2VDb2xvcnMpIHtcbiAgICByZXR1cm4gc3RhdHVzU3RyXG4gIH1cblxuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIHJldHVybiBjaGFsay5yZWQoc3RhdHVzU3RyKVxuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgcmV0dXJuIGNoYWxrLnllbGxvdyhzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAzMDApIHtcbiAgICByZXR1cm4gY2hhbGsuY3lhbihzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAyMDApIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JlZW4oc3RhdHVzU3RyKVxuICB9XG4gIHJldHVybiBjaGFsay53aGl0ZShzdGF0dXNTdHIpXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuaW1wb3J0IHtcbiAgZHVyYXRpb25TdHJpbmcsXG4gIGZvcm1hdFRpbWVzdGFtcCxcbiAgbG9nU3RyaW5nLFxuICBtZXRob2RTdHJpbmcsXG4gIHBhdGhTdHJpbmcsXG4gIHN0YXR1c1N0cmluZ1xufSBmcm9tICcuLi9oZWxwZXJzJ1xuaW1wb3J0IHR5cGUge1xuICBMb2dDb21wb25lbnRzLFxuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBkZWZhdWx0TG9nRm9ybWF0ID1cbiAgJ/Cfpooge25vd30ge2xldmVsfSB7ZHVyYXRpb259IHttZXRob2R9IHtwYXRobmFtZX0ge3N0YXR1c30ge21lc3NhZ2V9IHtjb250ZXh0fSB7aXB9J1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzOiBib29sZWFuLCBvcHRpb25zPzogT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy51c2VDb2xvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvcHRpb25zLmNvbmZpZy51c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxuICB9XG4gIHJldHVybiB1c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2dNZXNzYWdlKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9ucyxcbiAgdXNlQ29sb3JzID0gdHJ1ZVxuKTogc3RyaW5nIHtcbiAgY29uc3QgYWN0dWFsbHlVc2VDb2xvcnMgPSBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzLCBvcHRpb25zKVxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gIGNvbnN0IGNvbXBvbmVudHM6IExvZ0NvbXBvbmVudHMgPSB7XG4gICAgbm93OiBhY3R1YWxseVVzZUNvbG9yc1xuICAgICAgPyBjaGFsay5iZ1llbGxvdyhcbiAgICAgICAgICBjaGFsay5ibGFjayhmb3JtYXRUaW1lc3RhbXAobm93LCBvcHRpb25zPy5jb25maWc/LnRpbWVzdGFtcCkpXG4gICAgICAgIClcbiAgICAgIDogZm9ybWF0VGltZXN0YW1wKG5vdywgb3B0aW9ucz8uY29uZmlnPy50aW1lc3RhbXApLFxuICAgIGVwb2NoOiBNYXRoLmZsb29yKG5vdy5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpLFxuICAgIGxldmVsOiBsb2dTdHJpbmcobGV2ZWwsIHVzZUNvbG9ycyksXG4gICAgZHVyYXRpb246IGR1cmF0aW9uU3RyaW5nKHN0b3JlLmJlZm9yZVRpbWUsIHVzZUNvbG9ycyksXG4gICAgbWV0aG9kOiBtZXRob2RTdHJpbmcocmVxdWVzdC5tZXRob2QsIHVzZUNvbG9ycyksXG4gICAgcGF0aG5hbWU6IHBhdGhTdHJpbmcocmVxdWVzdCksXG4gICAgc3RhdHVzOiBzdGF0dXNTdHJpbmcoZGF0YS5zdGF0dXMgfHwgMjAwLCB1c2VDb2xvcnMpLFxuICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSB8fCAnJyxcbiAgICBjb250ZXh0OiBkYXRhLmNvbnRleHRcbiAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEuY29udGV4dClcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGBbRXJyb3Igc2VyaWFsaXppbmcgY29udGV4dDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31dYFxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgOiAnJyxcbiAgICBpcDpcbiAgICAgIG9wdGlvbnM/LmNvbmZpZz8uaXAgJiYgcmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJylcbiAgICAgICAgPyBgSVA6ICR7cmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJyl9YFxuICAgICAgICA6ICcnXG4gIH1cblxuICBjb25zdCBsb2dGb3JtYXQgPSBvcHRpb25zPy5jb25maWc/LmN1c3RvbUxvZ0Zvcm1hdCB8fCBkZWZhdWx0TG9nRm9ybWF0XG5cbiAgcmV0dXJuIGxvZ0Zvcm1hdC5yZXBsYWNlKC97KFxcdyspfS9nLCAoXywga2V5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnRzW2tleSBhcyBrZXlvZiBMb2dDb21wb25lbnRzXSB8fCAnJ1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuXG5pbXBvcnQgdHlwZSB7IENvbG9yTWFwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVsQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBJTkZPOiBjaGFsay5iZ0dyZWVuLmJsYWNrLFxuICBXQVJOSU5HOiBjaGFsay5iZ1llbGxvdy5ibGFjayxcbiAgRVJST1I6IGNoYWxrLmJnUmVkLmJsYWNrXG59XG5cbmV4cG9ydCBjb25zdCBIdHRwTWV0aG9kQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBHRVQ6IGNoYWxrLmdyZWVuLFxuICBQT1NUOiBjaGFsay55ZWxsb3csXG4gIFBVVDogY2hhbGsuYmx1ZSxcbiAgUEFUQ0g6IGNoYWxrLm1hZ2VudGFCcmlnaHQsXG4gIERFTEVURTogY2hhbGsucmVkLFxuICBIRUFEOiBjaGFsay5jeWFuLFxuICBPUFRJT05TOiBjaGFsay5tYWdlbnRhXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuY29uc3QgdGltZVVuaXRzID0gW1xuICB7IHVuaXQ6ICdzJywgdGhyZXNob2xkOiAxZTksIGRlY2ltYWxQbGFjZXM6IDIgfSxcbiAgeyB1bml0OiAnbXMnLCB0aHJlc2hvbGQ6IDFlNiwgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICfCtXMnLCB0aHJlc2hvbGQ6IDFlMywgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICducycsIHRocmVzaG9sZDogMSwgZGVjaW1hbFBsYWNlczogMCB9XG5dXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGR1cmF0aW9uU3RyaW5nKFxuICBiZWZvcmVUaW1lOiBiaWdpbnQsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3QgbmFub3NlY29uZHMgPSBOdW1iZXIocHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgLSBiZWZvcmVUaW1lKVxuXG4gIGZvciAoY29uc3QgeyB1bml0LCB0aHJlc2hvbGQsIGRlY2ltYWxQbGFjZXMgfSBvZiB0aW1lVW5pdHMpIHtcbiAgICBpZiAobmFub3NlY29uZHMgPj0gdGhyZXNob2xkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChuYW5vc2Vjb25kcyAvIHRocmVzaG9sZCkudG9GaXhlZChkZWNpbWFsUGxhY2VzKVxuICAgICAgY29uc3QgdGltZVN0ciA9IGAke3ZhbHVlfSR7dW5pdH1gLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbiAgICAgIHJldHVybiB1c2VDb2xvcnMgPyBjaGFsay5ncmF5KHRpbWVTdHIpIDogdGltZVN0clxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1c2VDb2xvcnNcbiAgICA/IGNoYWxrLmdyYXkoJzBucycucGFkU3RhcnQoOCkucGFkRW5kKDE2KSlcbiAgICA6ICcwbnMnLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBMb2dMZXZlbCB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBMb2dMZXZlbENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2dTdHJpbmcobGV2ZWw6IExvZ0xldmVsLCB1c2VDb2xvcnM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBsZXZlbFN0ciA9IGxldmVsLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIHVzZUNvbG9yc1xuICAgID8gTG9nTGV2ZWxDb2xvck1hcFtsZXZlbFN0cl0/LihsZXZlbFN0ci5wYWRFbmQoNykpIHx8IGxldmVsU3RyXG4gICAgOiBsZXZlbFN0ci5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHsgSHR0cE1ldGhvZENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXRob2RTdHJpbmcoXG4gIG1ldGhvZDogc3RyaW5nLFxuICB1c2VDb2xvcnM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGNvbnN0IGNvbG9yRnVuY3Rpb24gPSBIdHRwTWV0aG9kQ29sb3JNYXBbbWV0aG9kXVxuICByZXR1cm4gdXNlQ29sb3JzICYmIGNvbG9yRnVuY3Rpb25cbiAgICA/IGNvbG9yRnVuY3Rpb24obWV0aG9kLnBhZEVuZCg3KSlcbiAgICA6IG1ldGhvZC5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhdGhTdHJpbmcoXG4gIHJlcXVlc3RJbmZvOiBSZXF1ZXN0SW5mb1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFVSTChyZXF1ZXN0SW5mby51cmwpLnBhdGhuYW1lXG4gIH0gY2F0Y2gge1xuICAgIHJldHVyblxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVGltZXN0YW1wQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuLy8gY29uc3QgREVGQVVMVF9USU1FU1RBTVBfRk9STUFUID0gJ3l5eXktbW0tZGQgSEg6TU06c3MnXG5jb25zdCBTWVNfVElNRSA9ICdTWVM6U1RBTkRBUkQnXG5cbmNvbnN0IHBhZCA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuZnVuY3Rpb24gZm9ybWF0U3lzdGVtVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICBjb25zdCBtb250aCA9IHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKVxuICBjb25zdCBkYXkgPSBwYWQoZGF0ZS5nZXREYXRlKCkpXG4gIGNvbnN0IGhvdXJzID0gcGFkKGRhdGUuZ2V0SG91cnMoKSlcbiAgY29uc3QgbWludXRlcyA9IHBhZChkYXRlLmdldE1pbnV0ZXMoKSlcbiAgY29uc3Qgc2Vjb25kcyA9IHBhZChkYXRlLmdldFNlY29uZHMoKSlcbiAgY29uc3QgbXMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKVxuXG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gJHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9LiR7bXN9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21UaW1lKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9ID0ge1xuICAgIHl5eXk6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICB5eTogZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc2xpY2UoLTIpLFxuICAgIG1tOiBwYWQoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgZGQ6IHBhZChkYXRlLmdldERhdGUoKSksXG4gICAgSEg6IHBhZChkYXRlLmdldEhvdXJzKCkpLFxuICAgIE1NOiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpLFxuICAgIHNzOiBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgIFNTUzogcGFkKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLFxuICAgIFo6IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MFxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC95eXl5fHl5fG1tfGRkfEhIfE1NfHNzfFNTU3xaL2csIG1hdGNoID0+XG4gICAgKHRva2Vuc1ttYXRjaF0gPz8gJycpLnRvU3RyaW5nKClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKGRhdGU6IERhdGUsIGNvbmZpZz86IFRpbWVzdGFtcENvbmZpZyk6IHN0cmluZyB7XG4gIGlmICghY29uZmlnPy50cmFuc2xhdGVUaW1lKSB7XG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG5cbiAgaWYgKGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSB0cnVlIHx8IGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSBTWVNfVElNRSkge1xuICAgIHJldHVybiBmb3JtYXRTeXN0ZW1UaW1lKGRhdGUpXG4gIH1cblxuICByZXR1cm4gZm9ybWF0Q3VzdG9tVGltZShkYXRlLCBjb25maWcudHJhbnNsYXRlVGltZSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9UcmFuc3BvcnRzKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghb3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzIHx8IG9wdGlvbnMuY29uZmlnLnRyYW5zcG9ydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBtZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgZmFsc2UpXG5cbiAgY29uc3QgcHJvbWlzZXMgPSBvcHRpb25zLmNvbmZpZy50cmFuc3BvcnRzLm1hcCh0cmFuc3BvcnQgPT5cbiAgICB0cmFuc3BvcnQubG9nKGxldmVsLCBtZXNzYWdlLCB7IHJlcXVlc3QsIGRhdGEsIHN0b3JlIH0pXG4gIClcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cbiIsCiAgICAiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcblxuaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5jb25zdCBkaXJDYWNoZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRpciA9IGRpcm5hbWUoZmlsZVBhdGgpXG4gIGlmICghZGlyQ2FjaGUuaGFzKGRpcikpIHtcbiAgICBhd2FpdCBmcy5ta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgZGlyQ2FjaGUuYWRkKGRpcilcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9GaWxlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aClcbiAgY29uc3QgbG9nTWVzc2FnZSA9IGAke2J1aWxkTG9nTWVzc2FnZShsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMsIGZhbHNlKX1cXG5gXG4gIGF3YWl0IGZzLmFwcGVuZEZpbGUoZmlsZVBhdGgsIGxvZ01lc3NhZ2UsIHsgZmxhZzogJ2EnIH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTG9nTGV2ZWwsIE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBjaGVja0ZpbHRlciA9IChmaWx0ZXJWYWx1ZTogdW5rbm93biwgdmFsdWU6IHVua25vd24pID0+XG4gIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpXG4gICAgPyBmaWx0ZXJWYWx1ZS5pbmNsdWRlcyh2YWx1ZSlcbiAgICA6IGZpbHRlclZhbHVlID09PSB2YWx1ZVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTG9nKFxuICBsb2dMZXZlbDogTG9nTGV2ZWwsXG4gIHN0YXR1czogbnVtYmVyLFxuICBtZXRob2Q6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9wdGlvbnNcbik6IGJvb2xlYW4ge1xuICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5jb25maWc/LmxvZ0ZpbHRlclxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gKFxuICAgICghZmlsdGVyLmxldmVsIHx8IGNoZWNrRmlsdGVyKGZpbHRlci5sZXZlbCwgbG9nTGV2ZWwpKSAmJlxuICAgICghZmlsdGVyLnN0YXR1cyB8fCBjaGVja0ZpbHRlcihmaWx0ZXIuc3RhdHVzLCBzdGF0dXMpKSAmJlxuICAgICghZmlsdGVyLm1ldGhvZCB8fCBjaGVja0ZpbHRlcihmaWx0ZXIubWV0aG9kLCBtZXRob2QpKVxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgSHR0cEVycm9yLCBPcHRpb25zLCBSZXF1ZXN0SW5mbywgU3RvcmVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcbmltcG9ydCB7IGxvZ1RvRmlsZSB9IGZyb20gJy4uL291dHB1dCdcbmltcG9ydCB7IGJ1aWxkTG9nTWVzc2FnZSB9IGZyb20gJy4vYnVpbGQtbG9nLW1lc3NhZ2UnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVIdHRwRXJyb3IoXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBlcnJvcjogSHR0cEVycm9yLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogdm9pZCB7XG4gIGNvbnN0IHN0YXR1c0NvZGUgPSBlcnJvci5zdGF0dXMgfHwgNTAwXG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgYnVpbGRMb2dNZXNzYWdlKCdFUlJPUicsIHJlcXVlc3QsIHsgc3RhdHVzOiBzdGF0dXNDb2RlIH0sIHN0b3JlLCBvcHRpb25zKVxuICApXG5cbiAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdXG5cbiAgaWYgKG9wdGlvbnM/LmNvbmZpZz8ubG9nRmlsZVBhdGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgbG9nVG9GaWxlKFxuICAgICAgICBvcHRpb25zLmNvbmZpZy5sb2dGaWxlUGF0aCxcbiAgICAgICAgJ0VSUk9SJyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgeyBzdGF0dXM6IHN0YXR1c0NvZGUgfSxcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICApXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dnZXIsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhXG59IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBsb2dUb0ZpbGUsIGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4uL291dHB1dCdcbmltcG9ydCB7IGJ1aWxkTG9nTWVzc2FnZSB9IGZyb20gJy4vYnVpbGQtbG9nLW1lc3NhZ2UnXG5pbXBvcnQgeyBmaWx0ZXJMb2cgfSBmcm9tICcuL2ZpbHRlcidcbmltcG9ydCB7IGhhbmRsZUh0dHBFcnJvciB9IGZyb20gJy4vaGFuZGxlLWh0dHAtZXJyb3InXG5cbmZ1bmN0aW9uIGdldE1ldHJpY3MoKTogTG9nRGF0YVsnbWV0cmljcyddIHtcbiAgY29uc3QgbWVtb3J5VXNhZ2UgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQgLyAxMDI0IC8gMTAyNCAvLyBNQlxuICBjb25zdCBjcHVVc2FnZSA9IHByb2Nlc3MuY3B1VXNhZ2UoKVxuXG4gIHJldHVybiB7XG4gICAgbWVtb3J5VXNhZ2UsXG4gICAgY3B1VXNhZ2U6IGNwdVVzYWdlLnVzZXIgLyAxXzAwMF8wMDAgLy8gY29udmVydCB0byBzZWNvbmRzXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZmlsdGVyTG9nKGxldmVsLCBkYXRhLnN0YXR1cyB8fCAyMDAsIHJlcXVlc3QubWV0aG9kLCBvcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQWRkIG1ldHJpY3MgaWYgbm90IHByb3ZpZGVkXG4gIGlmICghZGF0YS5tZXRyaWNzKSB7XG4gICAgZGF0YS5tZXRyaWNzID0gZ2V0TWV0cmljcygpXG4gIH1cblxuICAvLyBBZGQgc3RhY2sgdHJhY2UgZm9yIGVycm9yc1xuICBpZiAobGV2ZWwgPT09ICdFUlJPUicgJiYgIWRhdGEuc3RhY2spIHtcbiAgICBkYXRhLnN0YWNrID0gbmV3IEVycm9yKGBFcnJvcjogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApLnN0YWNrXG4gIH1cblxuICBjb25zdCBsb2dNZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgdHJ1ZSlcbiAgY29uc29sZS5sb2cobG9nTWVzc2FnZSlcblxuICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW11cblxuICBpZiAob3B0aW9ucz8uY29uZmlnPy5sb2dGaWxlUGF0aCkge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBsb2dUb0ZpbGUoXG4gICAgICAgIG9wdGlvbnMuY29uZmlnLmxvZ0ZpbGVQYXRoLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpZiAob3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzPy5sZW5ndGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKGxvZ1RvVHJhbnNwb3J0cyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpKVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIob3B0aW9ucz86IE9wdGlvbnMpOiBMb2dnZXIge1xuICBjb25zdCBsb2dnZXI6IExvZ2dlciA9IHtcbiAgICBzdG9yZTogdW5kZWZpbmVkLFxuICAgIGxvZzogKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSkgPT5cbiAgICAgIGxvZyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGhhbmRsZUh0dHBFcnJvcjogKHJlcXVlc3QsIGVycm9yLCBzdG9yZSkgPT5cbiAgICAgIGhhbmRsZUh0dHBFcnJvcihyZXF1ZXN0LCBlcnJvciwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGN1c3RvbUxvZ0Zvcm1hdDogb3B0aW9ucz8uY29uZmlnPy5jdXN0b21Mb2dGb3JtYXQsXG4gICAgaW5mbzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0lORk8nLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICB7IG1lc3NhZ2UsIGNvbnRleHQsIHN0YXR1czogMjAwIH0sXG4gICAgICAgIHN0b3JlRGF0YSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIH0sXG4gICAgZXJyb3I6IChyZXF1ZXN0LCBtZXNzYWdlLCBjb250ZXh0LCBzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVEYXRhID0gc3RvcmUgfHxcbiAgICAgICAgbG9nZ2VyLnN0b3JlIHx8IHsgYmVmb3JlVGltZTogcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgfVxuICAgICAgc3RvcmVEYXRhLmhhc0N1c3RvbUxvZyA9IHRydWVcbiAgICAgIHJldHVybiBsb2coXG4gICAgICAgICdFUlJPUicsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiA1MDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICB3YXJuOiAocmVxdWVzdCwgbWVzc2FnZSwgY29udGV4dCwgc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIHx8XG4gICAgICAgIGxvZ2dlci5zdG9yZSB8fCB7IGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpIH1cbiAgICAgIHN0b3JlRGF0YS5oYXNDdXN0b21Mb2cgPSB0cnVlXG4gICAgICByZXR1cm4gbG9nKFxuICAgICAgICAnV0FSTklORycsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiAyMDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICBkZWJ1ZzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0RFQlVHJyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgeyBtZXNzYWdlLCBjb250ZXh0LCBzdGF0dXM6IDIwMCB9LFxuICAgICAgICBzdG9yZURhdGEsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvZ2dlclxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIkFBQUEsaUJBQVMsZUNFVCxJQUFNLEVBQWdCLENBQUMsRUFBYyxJQUEwQixDQUM3RCxJQUFNLEVBQWdCLEtBQUssSUFBSSxHQUFJLEVBQVEsRUFBSyxRQUFVLENBQUMsRUFDckQsRUFBVSxJQUFJLE9BQU8sQ0FBYSxFQUN4QyxNQUFPLEdBQUcsSUFBVSxJQUFPLElBQVUsT0FBTyxDQUFLLEdBR25ELFNBQXdCLENBQVcsQ0FBQyxFQUFnQixFQUF5QixDQUMzRSxJQUFNLEVBQVcsR0FBUSxVQUFZLFlBQy9CLEVBQU8sR0FBUSxNQUFRLEtBQ3ZCLEVBQVcsR0FBUSxVQUFZLE9BR3JDLEdBRm1CLEdBQVMsUUFBUSx1QkFBeUIsU0FFN0MsQ0FFZCxJQUFNLEVBQVUscUNBQTBCLE9BQWMsS0FBWSxJQUM5RCxFQUFXLEtBQUssSUFBSSxHQUFjLEVBQVEsTUFBTSxFQUFJLEVBQ3BELEVBQVMsSUFBRyxPQUFPLENBQVEsRUFDM0IsRUFBWSxFQUFjLEdBQUksQ0FBUSxFQUU1QyxRQUFRLElBQUk7QUFBQSxTQUNSO0FBQUEsU0FDQTtBQUFBLFNBQ0EsRUFU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RWQsR0FEMkIsR0FBUyxRQUFRLG9CQUFzQixHQUVoRSxFQUFZLEVBQUksT0FBa0IsQ0FBTyxFQUU1QyxFQUNBLFVBQVUsS0FBTyxDQUNoQixJQUFNLEVBQVEsSUFDVCxFQUFJLE1BQ1AsV0FBWSxRQUFRLE9BQU8sT0FBTyxFQUNsQyxPQUFRLEVBQ1IsYUFBYyxFQUNoQixFQUNBLEVBQUksTUFBUSxFQUNaLEVBQUksTUFBUSxFQUNiLEVBQ0EsY0FBYyxDQUFFLEdBQUksUUFBUyxFQUFHLEVBQUcsVUFBUyxNQUFLLFdBQVksQ0FDNUQsSUFBTSxFQUFZLEVBRWxCLElBQUssRUFBVSxhQUFjLENBQzNCLElBQU0sRUFBUyxFQUFjLEVBQUksUUFBVSxHQUFHLEVBQzlDLEVBQUksSUFDRixPQUNBLEVBQ0EsQ0FDRSxTQUNBLFFBQVMsT0FBTyxFQUFJLFVBQVUsY0FBZ0IsRUFBRSxDQUNsRCxFQUNBLENBQ0YsR0FFSCxFQUNBLFFBQVEsQ0FBRSxHQUFJLFFBQVMsRUFBRyxFQUFHLFVBQVMsUUFBTyxNQUFLLFdBQVksQ0FDN0QsSUFBTSxFQUFTLEVBQWMsRUFBSSxRQUFVLEdBQUcsRUFDOUMsRUFBSSxnQkFDRixFQUNBLElBQUssRUFBTyxRQUFPLEVBQ25CLENBQ0YsRUFDRCIsCiAgImRlYnVnSWQiOiAiRjU2QUE0RUZDMzRBM0Q2ODY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
12
+ //# debugId=C43B828C0DA6DD5064756E2164756E21
13
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9leHRlbnNpb25zL3N0YXJ0LXNlcnZlci50cyIsICIuLi9zcmMvaGVscGVycy9zdGF0dXMudHMiLCAiLi4vc3JjL2xvZ2dlci9idWlsZC1sb2ctbWVzc2FnZS50cyIsICIuLi9zcmMvaGVscGVycy9jb2xvci1tYXBwaW5nLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2R1cmF0aW9uLnRzIiwgIi4uL3NyYy9oZWxwZXJzL2xvZy50cyIsICIuLi9zcmMvaGVscGVycy9tZXRob2QudHMiLCAiLi4vc3JjL2hlbHBlcnMvcGF0aC50cyIsICIuLi9zcmMvaGVscGVycy90aW1lc3RhbXAudHMiLCAiLi4vc3JjL291dHB1dC9jb25zb2xlLnRzIiwgIi4uL3NyYy9vdXRwdXQvZmlsZS50cyIsICIuLi9zcmMvbG9nZ2VyL2ZpbHRlci50cyIsICIuLi9zcmMvbG9nZ2VyL2hhbmRsZS1odHRwLWVycm9yLnRzIiwgIi4uL3NyYy9sb2dnZXIvY3JlYXRlLWxvZ2dlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgeyBFbHlzaWEgfSBmcm9tICdlbHlzaWEnXG5cbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi9leHRlbnNpb25zJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzQ29kZSB9IGZyb20gJy4vaGVscGVycy9zdGF0dXMnXG5pbXBvcnQgdHlwZSB7IEh0dHBFcnJvciwgT3B0aW9ucywgU2VydmVyLCBTdG9yZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9naXhseXNpYShvcHRpb25zPzogT3B0aW9ucyk6IEVseXNpYSB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zKVxuXG4gIHJldHVybiBuZXcgRWx5c2lhKHtcbiAgICBuYW1lOiAnTG9naXhseXNpYSdcbiAgfSlcbiAgICAub25TdGFydChjdHggPT4ge1xuICAgICAgY29uc3Qgc2hvd1N0YXJ0dXBNZXNzYWdlID0gb3B0aW9ucz8uY29uZmlnPy5zaG93U3RhcnR1cE1lc3NhZ2UgPz8gdHJ1ZVxuICAgICAgaWYgKHNob3dTdGFydHVwTWVzc2FnZSkge1xuICAgICAgICBzdGFydFNlcnZlcihjdHguc2VydmVyIGFzIFNlcnZlciwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuICAgIC5vblJlcXVlc3QoY3R4ID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0ge1xuICAgICAgICAuLi5jdHguc3RvcmUsXG4gICAgICAgIGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpLFxuICAgICAgICBsb2dnZXI6IGxvZyxcbiAgICAgICAgaGFzQ3VzdG9tTG9nOiBmYWxzZVxuICAgICAgfVxuICAgICAgY3R4LnN0b3JlID0gc3RvcmVcbiAgICAgIGxvZy5zdG9yZSA9IHN0b3JlXG4gICAgfSlcbiAgICAub25BZnRlckhhbmRsZSh7IGFzOiAnZ2xvYmFsJyB9LCAoeyByZXF1ZXN0LCBzZXQsIHN0b3JlIH0pID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIGFzIFN0b3JlRGF0YVxuXG4gICAgICBpZiAoIXN0b3JlRGF0YS5oYXNDdXN0b21Mb2cpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDIwMClcbiAgICAgICAgbG9nLmxvZyhcbiAgICAgICAgICAnSU5GTycsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcoc2V0LmhlYWRlcnM/LlsneC1tZXNzYWdlJ10gfHwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdG9yZURhdGFcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG4gICAgLm9uRXJyb3IoeyBhczogJ2dsb2JhbCcgfSwgYXN5bmMgKHsgcmVxdWVzdCwgZXJyb3IsIHNldCwgc3RvcmUgfSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZShzZXQuc3RhdHVzIHx8IDUwMClcbiAgICAgIGF3YWl0IGxvZy5oYW5kbGVIdHRwRXJyb3IoXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgLi4uZXJyb3IsIHN0YXR1cyB9IGFzIEh0dHBFcnJvcixcbiAgICAgICAgc3RvcmUgYXMgU3RvcmVEYXRhXG4gICAgICApXG4gICAgfSlcbn1cblxuZXhwb3J0IHR5cGUge1xuICBIdHRwRXJyb3IsXG4gIExvZ0RhdGEsXG4gIExvZ2dlcixcbiAgTG9naXhseXNpYUNvbnRleHQsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhLFxuICBUcmFuc3BvcnRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJ1xuZXhwb3J0IHsgY3JlYXRlTG9nZ2VyLCBoYW5kbGVIdHRwRXJyb3IgfSBmcm9tICcuL2xvZ2dlcidcbmV4cG9ydCB7IGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4vb3V0cHV0J1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IE9wdGlvbnMsIFNlcnZlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmNvbnN0IGNyZWF0ZUJveFRleHQgPSAodGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFkZGluZ0xlbmd0aCA9IE1hdGgubWF4KDAsICh3aWR0aCAtIHRleHQubGVuZ3RoKSAvIDIpXG4gIGNvbnN0IHBhZGRpbmcgPSAnICcucmVwZWF0KHBhZGRpbmdMZW5ndGgpXG4gIHJldHVybiBgJHtwYWRkaW5nfSR7dGV4dH0ke3BhZGRpbmd9YC5wYWRFbmQod2lkdGgpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0U2VydmVyKGNvbmZpZzogU2VydmVyLCBvcHRpb25zPzogT3B0aW9ucyk6IHZvaWQge1xuICBjb25zdCBob3N0bmFtZSA9IGNvbmZpZz8uaG9zdG5hbWUgPz8gJ2xvY2FsaG9zdCdcbiAgY29uc3QgcG9ydCA9IGNvbmZpZz8ucG9ydCA/PyAzMDAwXG4gIGNvbnN0IHByb3RvY29sID0gY29uZmlnPy5wcm90b2NvbCA/PyAnaHR0cCdcbiAgY29uc3Qgc2hvd0Jhbm5lciA9IG9wdGlvbnM/LmNvbmZpZz8uc3RhcnR1cE1lc3NhZ2VGb3JtYXQgIT09ICdzaW1wbGUnXG5cbiAgaWYgKHNob3dCYW5uZXIpIHtcbiAgICBjb25zdCB0aXRsZSA9ICdFbHlzaWEgd2l0aCBMb2dpeGx5c2lhJ1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBg8J+miiBFbHlzaWEgaXMgcnVubmluZyBhdCAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9OiR7cG9ydH1gXG4gICAgY29uc3QgYm94V2lkdGggPSBNYXRoLm1heCh0aXRsZS5sZW5ndGgsIG1lc3NhZ2UubGVuZ3RoKSArIDRcbiAgICBjb25zdCBib3JkZXIgPSAn4pSAJy5yZXBlYXQoYm94V2lkdGgpXG4gICAgY29uc3QgZW1wdHlMaW5lID0gY3JlYXRlQm94VGV4dCgnJywgYm94V2lkdGgpXG5cbiAgICBjb25zb2xlLmxvZyhgXG4gICAgICDilIwke2JvcmRlcn3ilJBcbiAgICAgIOKUgiR7ZW1wdHlMaW5lfeKUglxuICAgICAg4pSCJHtjcmVhdGVCb3hUZXh0KHRpdGxlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUgiR7Y3JlYXRlQm94VGV4dChtZXNzYWdlLCBib3hXaWR0aCl94pSCXG4gICAgICDilIIke2VtcHR5TGluZX3ilIJcbiAgICAgIOKUlCR7Ym9yZGVyfeKUmFxuICAgIGApXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coYPCfpoogRWx5c2lhIGlzIHJ1bm5pbmcgYXQgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfToke3BvcnR9YClcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyBTdGF0dXNNYXAgfSBmcm9tICdlbHlzaWEnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlKHN0YXR1czogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiBzdGF0dXMgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG4gIHJldHVybiAoU3RhdHVzTWFwIGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pW3N0YXR1c10gfHwgNTAwXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXR1c1N0cmluZyhcbiAgc3RhdHVzOiBudW1iZXIsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzU3RyID0gc3RhdHVzLnRvU3RyaW5nKClcbiAgaWYgKCF1c2VDb2xvcnMpIHtcbiAgICByZXR1cm4gc3RhdHVzU3RyXG4gIH1cblxuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIHJldHVybiBjaGFsay5yZWQoc3RhdHVzU3RyKVxuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgcmV0dXJuIGNoYWxrLnllbGxvdyhzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAzMDApIHtcbiAgICByZXR1cm4gY2hhbGsuY3lhbihzdGF0dXNTdHIpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSAyMDApIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JlZW4oc3RhdHVzU3RyKVxuICB9XG4gIHJldHVybiBjaGFsay53aGl0ZShzdGF0dXNTdHIpXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuaW1wb3J0IHtcbiAgZHVyYXRpb25TdHJpbmcsXG4gIGZvcm1hdFRpbWVzdGFtcCxcbiAgbG9nU3RyaW5nLFxuICBtZXRob2RTdHJpbmcsXG4gIHBhdGhTdHJpbmcsXG4gIHN0YXR1c1N0cmluZ1xufSBmcm9tICcuLi9oZWxwZXJzJ1xuaW1wb3J0IHR5cGUge1xuICBMb2dDb21wb25lbnRzLFxuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBkZWZhdWx0TG9nRm9ybWF0ID1cbiAgJ/Cfpooge25vd30ge2xldmVsfSB7ZHVyYXRpb259IHttZXRob2R9IHtwYXRobmFtZX0ge3N0YXR1c30ge21lc3NhZ2V9IHtjb250ZXh0fSB7aXB9J1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzOiBib29sZWFuLCBvcHRpb25zPzogT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy51c2VDb2xvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvcHRpb25zLmNvbmZpZy51c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxuICB9XG4gIHJldHVybiB1c2VDb2xvcnMgJiYgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2dNZXNzYWdlKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9ucyxcbiAgdXNlQ29sb3JzID0gdHJ1ZVxuKTogc3RyaW5nIHtcbiAgY29uc3QgYWN0dWFsbHlVc2VDb2xvcnMgPSBzaG91bGRVc2VDb2xvcnModXNlQ29sb3JzLCBvcHRpb25zKVxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gIGNvbnN0IGNvbXBvbmVudHM6IExvZ0NvbXBvbmVudHMgPSB7XG4gICAgbm93OiBhY3R1YWxseVVzZUNvbG9yc1xuICAgICAgPyBjaGFsay5iZ1llbGxvdyhcbiAgICAgICAgICBjaGFsay5ibGFjayhmb3JtYXRUaW1lc3RhbXAobm93LCBvcHRpb25zPy5jb25maWc/LnRpbWVzdGFtcCkpXG4gICAgICAgIClcbiAgICAgIDogZm9ybWF0VGltZXN0YW1wKG5vdywgb3B0aW9ucz8uY29uZmlnPy50aW1lc3RhbXApLFxuICAgIGVwb2NoOiBNYXRoLmZsb29yKG5vdy5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpLFxuICAgIGxldmVsOiBsb2dTdHJpbmcobGV2ZWwsIHVzZUNvbG9ycyksXG4gICAgZHVyYXRpb246IGR1cmF0aW9uU3RyaW5nKHN0b3JlLmJlZm9yZVRpbWUsIHVzZUNvbG9ycyksXG4gICAgbWV0aG9kOiBtZXRob2RTdHJpbmcocmVxdWVzdC5tZXRob2QsIHVzZUNvbG9ycyksXG4gICAgcGF0aG5hbWU6IHBhdGhTdHJpbmcocmVxdWVzdCksXG4gICAgc3RhdHVzOiBzdGF0dXNTdHJpbmcoZGF0YS5zdGF0dXMgfHwgMjAwLCB1c2VDb2xvcnMpLFxuICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSB8fCAnJyxcbiAgICBjb250ZXh0OiBkYXRhLmNvbnRleHRcbiAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEuY29udGV4dClcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGBbRXJyb3Igc2VyaWFsaXppbmcgY29udGV4dDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31dYFxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgOiAnJyxcbiAgICBpcDpcbiAgICAgIG9wdGlvbnM/LmNvbmZpZz8uaXAgJiYgcmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJylcbiAgICAgICAgPyBgSVA6ICR7cmVxdWVzdC5oZWFkZXJzLmdldCgneC1mb3J3YXJkZWQtZm9yJyl9YFxuICAgICAgICA6ICcnXG4gIH1cblxuICBjb25zdCBsb2dGb3JtYXQgPSBvcHRpb25zPy5jb25maWc/LmN1c3RvbUxvZ0Zvcm1hdCB8fCBkZWZhdWx0TG9nRm9ybWF0XG5cbiAgcmV0dXJuIGxvZ0Zvcm1hdC5yZXBsYWNlKC97KFxcdyspfS9nLCAoXywga2V5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnRzW2tleSBhcyBrZXlvZiBMb2dDb21wb25lbnRzXSB8fCAnJ1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuXG5pbXBvcnQgdHlwZSB7IENvbG9yTWFwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVsQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBJTkZPOiBjaGFsay5iZ0dyZWVuLmJsYWNrLFxuICBXQVJOSU5HOiBjaGFsay5iZ1llbGxvdy5ibGFjayxcbiAgRVJST1I6IGNoYWxrLmJnUmVkLmJsYWNrXG59XG5cbmV4cG9ydCBjb25zdCBIdHRwTWV0aG9kQ29sb3JNYXA6IENvbG9yTWFwID0ge1xuICBHRVQ6IGNoYWxrLmdyZWVuLFxuICBQT1NUOiBjaGFsay55ZWxsb3csXG4gIFBVVDogY2hhbGsuYmx1ZSxcbiAgUEFUQ0g6IGNoYWxrLm1hZ2VudGFCcmlnaHQsXG4gIERFTEVURTogY2hhbGsucmVkLFxuICBIRUFEOiBjaGFsay5jeWFuLFxuICBPUFRJT05TOiBjaGFsay5tYWdlbnRhXG59XG4iLAogICAgImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuY29uc3QgdGltZVVuaXRzID0gW1xuICB7IHVuaXQ6ICdzJywgdGhyZXNob2xkOiAxZTksIGRlY2ltYWxQbGFjZXM6IDIgfSxcbiAgeyB1bml0OiAnbXMnLCB0aHJlc2hvbGQ6IDFlNiwgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICfCtXMnLCB0aHJlc2hvbGQ6IDFlMywgZGVjaW1hbFBsYWNlczogMCB9LFxuICB7IHVuaXQ6ICducycsIHRocmVzaG9sZDogMSwgZGVjaW1hbFBsYWNlczogMCB9XG5dXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGR1cmF0aW9uU3RyaW5nKFxuICBiZWZvcmVUaW1lOiBiaWdpbnQsXG4gIHVzZUNvbG9yczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3QgbmFub3NlY29uZHMgPSBOdW1iZXIocHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgLSBiZWZvcmVUaW1lKVxuXG4gIGZvciAoY29uc3QgeyB1bml0LCB0aHJlc2hvbGQsIGRlY2ltYWxQbGFjZXMgfSBvZiB0aW1lVW5pdHMpIHtcbiAgICBpZiAobmFub3NlY29uZHMgPj0gdGhyZXNob2xkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChuYW5vc2Vjb25kcyAvIHRocmVzaG9sZCkudG9GaXhlZChkZWNpbWFsUGxhY2VzKVxuICAgICAgY29uc3QgdGltZVN0ciA9IGAke3ZhbHVlfSR7dW5pdH1gLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbiAgICAgIHJldHVybiB1c2VDb2xvcnMgPyBjaGFsay5ncmF5KHRpbWVTdHIpIDogdGltZVN0clxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1c2VDb2xvcnNcbiAgICA/IGNoYWxrLmdyYXkoJzBucycucGFkU3RhcnQoOCkucGFkRW5kKDE2KSlcbiAgICA6ICcwbnMnLnBhZFN0YXJ0KDgpLnBhZEVuZCgxNilcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBMb2dMZXZlbCB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBMb2dMZXZlbENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2dTdHJpbmcobGV2ZWw6IExvZ0xldmVsLCB1c2VDb2xvcnM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBsZXZlbFN0ciA9IGxldmVsLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIHVzZUNvbG9yc1xuICAgID8gTG9nTGV2ZWxDb2xvck1hcFtsZXZlbFN0cl0/LihsZXZlbFN0ci5wYWRFbmQoNykpIHx8IGxldmVsU3RyXG4gICAgOiBsZXZlbFN0ci5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHsgSHR0cE1ldGhvZENvbG9yTWFwIH0gZnJvbSAnLi9jb2xvci1tYXBwaW5nJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXRob2RTdHJpbmcoXG4gIG1ldGhvZDogc3RyaW5nLFxuICB1c2VDb2xvcnM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGNvbnN0IGNvbG9yRnVuY3Rpb24gPSBIdHRwTWV0aG9kQ29sb3JNYXBbbWV0aG9kXVxuICByZXR1cm4gdXNlQ29sb3JzICYmIGNvbG9yRnVuY3Rpb25cbiAgICA/IGNvbG9yRnVuY3Rpb24obWV0aG9kLnBhZEVuZCg3KSlcbiAgICA6IG1ldGhvZC5wYWRFbmQoNylcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhdGhTdHJpbmcoXG4gIHJlcXVlc3RJbmZvOiBSZXF1ZXN0SW5mb1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFVSTChyZXF1ZXN0SW5mby51cmwpLnBhdGhuYW1lXG4gIH0gY2F0Y2gge1xuICAgIHJldHVyblxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVGltZXN0YW1wQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcblxuLy8gY29uc3QgREVGQVVMVF9USU1FU1RBTVBfRk9STUFUID0gJ3l5eXktbW0tZGQgSEg6TU06c3MnXG5jb25zdCBTWVNfVElNRSA9ICdTWVM6U1RBTkRBUkQnXG5cbmNvbnN0IHBhZCA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuZnVuY3Rpb24gZm9ybWF0U3lzdGVtVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICBjb25zdCBtb250aCA9IHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKVxuICBjb25zdCBkYXkgPSBwYWQoZGF0ZS5nZXREYXRlKCkpXG4gIGNvbnN0IGhvdXJzID0gcGFkKGRhdGUuZ2V0SG91cnMoKSlcbiAgY29uc3QgbWludXRlcyA9IHBhZChkYXRlLmdldE1pbnV0ZXMoKSlcbiAgY29uc3Qgc2Vjb25kcyA9IHBhZChkYXRlLmdldFNlY29uZHMoKSlcbiAgY29uc3QgbXMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKVxuXG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gJHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9LiR7bXN9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21UaW1lKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9ID0ge1xuICAgIHl5eXk6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICB5eTogZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc2xpY2UoLTIpLFxuICAgIG1tOiBwYWQoZGF0ZS5nZXRNb250aCgpICsgMSksXG4gICAgZGQ6IHBhZChkYXRlLmdldERhdGUoKSksXG4gICAgSEg6IHBhZChkYXRlLmdldEhvdXJzKCkpLFxuICAgIE1NOiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpLFxuICAgIHNzOiBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgIFNTUzogcGFkKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLFxuICAgIFo6IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MFxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC95eXl5fHl5fG1tfGRkfEhIfE1NfHNzfFNTU3xaL2csIG1hdGNoID0+XG4gICAgKHRva2Vuc1ttYXRjaF0gPz8gJycpLnRvU3RyaW5nKClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKGRhdGU6IERhdGUsIGNvbmZpZz86IFRpbWVzdGFtcENvbmZpZyk6IHN0cmluZyB7XG4gIGlmICghY29uZmlnPy50cmFuc2xhdGVUaW1lKSB7XG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG5cbiAgaWYgKGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSB0cnVlIHx8IGNvbmZpZy50cmFuc2xhdGVUaW1lID09PSBTWVNfVElNRSkge1xuICAgIHJldHVybiBmb3JtYXRTeXN0ZW1UaW1lKGRhdGUpXG4gIH1cblxuICByZXR1cm4gZm9ybWF0Q3VzdG9tVGltZShkYXRlLCBjb25maWcudHJhbnNsYXRlVGltZSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9UcmFuc3BvcnRzKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghb3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzIHx8IG9wdGlvbnMuY29uZmlnLnRyYW5zcG9ydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBtZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgZmFsc2UpXG5cbiAgY29uc3QgcHJvbWlzZXMgPSBvcHRpb25zLmNvbmZpZy50cmFuc3BvcnRzLm1hcCh0cmFuc3BvcnQgPT5cbiAgICB0cmFuc3BvcnQubG9nKGxldmVsLCBtZXNzYWdlLCB7IHJlcXVlc3QsIGRhdGEsIHN0b3JlIH0pXG4gIClcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cbiIsCiAgICAiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcblxuaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dMZXZlbCxcbiAgT3B0aW9ucyxcbiAgUmVxdWVzdEluZm8sXG4gIFN0b3JlRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi4vbG9nZ2VyL2J1aWxkLWxvZy1tZXNzYWdlJ1xuXG5jb25zdCBkaXJDYWNoZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRpciA9IGRpcm5hbWUoZmlsZVBhdGgpXG4gIGlmICghZGlyQ2FjaGUuaGFzKGRpcikpIHtcbiAgICBhd2FpdCBmcy5ta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgZGlyQ2FjaGUuYWRkKGRpcilcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nVG9GaWxlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeUV4aXN0cyhmaWxlUGF0aClcbiAgY29uc3QgbG9nTWVzc2FnZSA9IGAke2J1aWxkTG9nTWVzc2FnZShsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMsIGZhbHNlKX1cXG5gXG4gIGF3YWl0IGZzLmFwcGVuZEZpbGUoZmlsZVBhdGgsIGxvZ01lc3NhZ2UsIHsgZmxhZzogJ2EnIH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTG9nTGV2ZWwsIE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJ1xuXG5jb25zdCBjaGVja0ZpbHRlciA9IChmaWx0ZXJWYWx1ZTogdW5rbm93biwgdmFsdWU6IHVua25vd24pID0+XG4gIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpXG4gICAgPyBmaWx0ZXJWYWx1ZS5pbmNsdWRlcyh2YWx1ZSlcbiAgICA6IGZpbHRlclZhbHVlID09PSB2YWx1ZVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTG9nKFxuICBsb2dMZXZlbDogTG9nTGV2ZWwsXG4gIHN0YXR1czogbnVtYmVyLFxuICBtZXRob2Q6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9wdGlvbnNcbik6IGJvb2xlYW4ge1xuICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5jb25maWc/LmxvZ0ZpbHRlclxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gKFxuICAgICghZmlsdGVyLmxldmVsIHx8IGNoZWNrRmlsdGVyKGZpbHRlci5sZXZlbCwgbG9nTGV2ZWwpKSAmJlxuICAgICghZmlsdGVyLnN0YXR1cyB8fCBjaGVja0ZpbHRlcihmaWx0ZXIuc3RhdHVzLCBzdGF0dXMpKSAmJlxuICAgICghZmlsdGVyLm1ldGhvZCB8fCBjaGVja0ZpbHRlcihmaWx0ZXIubWV0aG9kLCBtZXRob2QpKVxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgSHR0cEVycm9yLCBPcHRpb25zLCBSZXF1ZXN0SW5mbywgU3RvcmVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcydcbmltcG9ydCB7IGxvZ1RvRmlsZSwgbG9nVG9UcmFuc3BvcnRzIH0gZnJvbSAnLi4vb3V0cHV0J1xuaW1wb3J0IHsgYnVpbGRMb2dNZXNzYWdlIH0gZnJvbSAnLi9idWlsZC1sb2ctbWVzc2FnZSdcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUh0dHBFcnJvcihcbiAgcmVxdWVzdDogUmVxdWVzdEluZm8sXG4gIGVycm9yOiBIdHRwRXJyb3IsXG4gIHN0b3JlOiBTdG9yZURhdGEsXG4gIG9wdGlvbnM/OiBPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhdHVzQ29kZSA9IGVycm9yLnN0YXR1cyB8fCA1MDBcbiAgY29uc3QgbG9nRGF0YSA9IHtcbiAgICBzdGF0dXM6IHN0YXR1c0NvZGUsXG4gICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICBzdGFjazogZXJyb3Iuc3RhY2tcbiAgfVxuXG4gIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXVxuXG4gIC8vIEhhbmRsZSBjb25zb2xlIGxvZ2dpbmdcbiAgaWYgKFxuICAgICEoXG4gICAgICBvcHRpb25zPy5jb25maWc/LnVzZVRyYW5zcG9ydHNPbmx5IHx8XG4gICAgICBvcHRpb25zPy5jb25maWc/LmRpc2FibGVJbnRlcm5hbExvZ2dlclxuICAgIClcbiAgKSB7XG4gICAgY29uc29sZS5lcnJvcihidWlsZExvZ01lc3NhZ2UoJ0VSUk9SJywgcmVxdWVzdCwgbG9nRGF0YSwgc3RvcmUsIG9wdGlvbnMpKVxuICB9XG5cbiAgLy8gSGFuZGxlIGZpbGUgbG9nZ2luZ1xuICBpZiAoXG4gICAgIW9wdGlvbnM/LmNvbmZpZz8udXNlVHJhbnNwb3J0c09ubHkgJiZcbiAgICBvcHRpb25zPy5jb25maWc/LmxvZ0ZpbGVQYXRoICYmXG4gICAgIW9wdGlvbnM/LmNvbmZpZz8uZGlzYWJsZUZpbGVMb2dnaW5nXG4gICkge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBsb2dUb0ZpbGUoXG4gICAgICAgIG9wdGlvbnMuY29uZmlnLmxvZ0ZpbGVQYXRoLFxuICAgICAgICAnRVJST1InLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBsb2dEYXRhLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIC8vIEhhbmRsZSB0cmFuc3BvcnQgbG9nZ2luZ1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzPy5sZW5ndGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKGxvZ1RvVHJhbnNwb3J0cygnRVJST1InLCByZXF1ZXN0LCBsb2dEYXRhLCBzdG9yZSwgb3B0aW9ucykpXG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuICBMb2dEYXRhLFxuICBMb2dnZXIsXG4gIExvZ0xldmVsLFxuICBPcHRpb25zLFxuICBSZXF1ZXN0SW5mbyxcbiAgU3RvcmVEYXRhXG59IGZyb20gJy4uL2ludGVyZmFjZXMnXG5pbXBvcnQgeyBsb2dUb0ZpbGUsIGxvZ1RvVHJhbnNwb3J0cyB9IGZyb20gJy4uL291dHB1dCdcbmltcG9ydCB7IGJ1aWxkTG9nTWVzc2FnZSB9IGZyb20gJy4vYnVpbGQtbG9nLW1lc3NhZ2UnXG5pbXBvcnQgeyBmaWx0ZXJMb2cgfSBmcm9tICcuL2ZpbHRlcidcbmltcG9ydCB7IGhhbmRsZUh0dHBFcnJvciB9IGZyb20gJy4vaGFuZGxlLWh0dHAtZXJyb3InXG5cbmZ1bmN0aW9uIGdldE1ldHJpY3MoKTogTG9nRGF0YVsnbWV0cmljcyddIHtcbiAgY29uc3QgbWVtb3J5VXNhZ2UgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQgLyAxMDI0IC8gMTAyNCAvLyBNQlxuICBjb25zdCBjcHVVc2FnZSA9IHByb2Nlc3MuY3B1VXNhZ2UoKVxuXG4gIHJldHVybiB7XG4gICAgbWVtb3J5VXNhZ2UsXG4gICAgY3B1VXNhZ2U6IGNwdVVzYWdlLnVzZXIgLyAxXzAwMF8wMDAgLy8gY29udmVydCB0byBzZWNvbmRzXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nKFxuICBsZXZlbDogTG9nTGV2ZWwsXG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBkYXRhOiBMb2dEYXRhLFxuICBzdG9yZTogU3RvcmVEYXRhLFxuICBvcHRpb25zPzogT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZmlsdGVyTG9nKGxldmVsLCBkYXRhLnN0YXR1cyB8fCAyMDAsIHJlcXVlc3QubWV0aG9kLCBvcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQWRkIG1ldHJpY3MgaWYgbm90IHByb3ZpZGVkXG4gIGlmICghZGF0YS5tZXRyaWNzKSB7XG4gICAgZGF0YS5tZXRyaWNzID0gZ2V0TWV0cmljcygpXG4gIH1cblxuICAvLyBBZGQgc3RhY2sgdHJhY2UgZm9yIGVycm9yc1xuICBpZiAobGV2ZWwgPT09ICdFUlJPUicgJiYgIWRhdGEuc3RhY2spIHtcbiAgICBkYXRhLnN0YWNrID0gbmV3IEVycm9yKGBFcnJvcjogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApLnN0YWNrXG4gIH1cblxuICBjb25zdCBsb2dNZXNzYWdlID0gYnVpbGRMb2dNZXNzYWdlKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSwgb3B0aW9ucywgdHJ1ZSlcblxuICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW11cblxuICAvLyBIYW5kbGUgY29uc29sZSBsb2dnaW5nXG4gIGlmIChcbiAgICAhKFxuICAgICAgb3B0aW9ucz8uY29uZmlnPy51c2VUcmFuc3BvcnRzT25seSB8fFxuICAgICAgb3B0aW9ucz8uY29uZmlnPy5kaXNhYmxlSW50ZXJuYWxMb2dnZXJcbiAgICApXG4gICkge1xuICAgIGNvbnNvbGUubG9nKGxvZ01lc3NhZ2UpXG4gIH1cblxuICAvLyBIYW5kbGUgZmlsZSBsb2dnaW5nXG4gIGlmIChcbiAgICAhb3B0aW9ucz8uY29uZmlnPy51c2VUcmFuc3BvcnRzT25seSAmJlxuICAgIG9wdGlvbnM/LmNvbmZpZz8ubG9nRmlsZVBhdGggJiZcbiAgICAhb3B0aW9ucz8uY29uZmlnPy5kaXNhYmxlRmlsZUxvZ2dpbmdcbiAgKSB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIGxvZ1RvRmlsZShcbiAgICAgICAgb3B0aW9ucy5jb25maWcubG9nRmlsZVBhdGgsXG4gICAgICAgIGxldmVsLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIC8vIEhhbmRsZSB0cmFuc3BvcnQgbG9nZ2luZ1xuICBpZiAob3B0aW9ucz8uY29uZmlnPy50cmFuc3BvcnRzPy5sZW5ndGgpIHtcbiAgICBwcm9taXNlcy5wdXNoKGxvZ1RvVHJhbnNwb3J0cyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpKVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIob3B0aW9ucz86IE9wdGlvbnMpOiBMb2dnZXIge1xuICBjb25zdCBsb2dnZXI6IExvZ2dlciA9IHtcbiAgICBzdG9yZTogdW5kZWZpbmVkLFxuICAgIGxvZzogKGxldmVsLCByZXF1ZXN0LCBkYXRhLCBzdG9yZSkgPT5cbiAgICAgIGxvZyhsZXZlbCwgcmVxdWVzdCwgZGF0YSwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGhhbmRsZUh0dHBFcnJvcjogYXN5bmMgKHJlcXVlc3QsIGVycm9yLCBzdG9yZSkgPT5cbiAgICAgIGF3YWl0IGhhbmRsZUh0dHBFcnJvcihyZXF1ZXN0LCBlcnJvciwgc3RvcmUsIG9wdGlvbnMpLFxuICAgIGN1c3RvbUxvZ0Zvcm1hdDogb3B0aW9ucz8uY29uZmlnPy5jdXN0b21Mb2dGb3JtYXQsXG4gICAgaW5mbzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0lORk8nLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICB7IG1lc3NhZ2UsIGNvbnRleHQsIHN0YXR1czogMjAwIH0sXG4gICAgICAgIHN0b3JlRGF0YSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIH0sXG4gICAgZXJyb3I6IChyZXF1ZXN0LCBtZXNzYWdlLCBjb250ZXh0LCBzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVEYXRhID0gc3RvcmUgfHxcbiAgICAgICAgbG9nZ2VyLnN0b3JlIHx8IHsgYmVmb3JlVGltZTogcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgfVxuICAgICAgc3RvcmVEYXRhLmhhc0N1c3RvbUxvZyA9IHRydWVcbiAgICAgIHJldHVybiBsb2coXG4gICAgICAgICdFUlJPUicsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiA1MDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICB3YXJuOiAocmVxdWVzdCwgbWVzc2FnZSwgY29udGV4dCwgc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IHN0b3JlIHx8XG4gICAgICAgIGxvZ2dlci5zdG9yZSB8fCB7IGJlZm9yZVRpbWU6IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpIH1cbiAgICAgIHN0b3JlRGF0YS5oYXNDdXN0b21Mb2cgPSB0cnVlXG4gICAgICByZXR1cm4gbG9nKFxuICAgICAgICAnV0FSTklORycsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIHsgbWVzc2FnZSwgY29udGV4dCwgc3RhdHVzOiAyMDAgfSxcbiAgICAgICAgc3RvcmVEYXRhLFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgfSxcbiAgICBkZWJ1ZzogKHJlcXVlc3QsIG1lc3NhZ2UsIGNvbnRleHQsIHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZURhdGEgPSBzdG9yZSB8fFxuICAgICAgICBsb2dnZXIuc3RvcmUgfHwgeyBiZWZvcmVUaW1lOiBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSB9XG4gICAgICBzdG9yZURhdGEuaGFzQ3VzdG9tTG9nID0gdHJ1ZVxuICAgICAgcmV0dXJuIGxvZyhcbiAgICAgICAgJ0RFQlVHJyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgeyBtZXNzYWdlLCBjb250ZXh0LCBzdGF0dXM6IDIwMCB9LFxuICAgICAgICBzdG9yZURhdGEsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvZ2dlclxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIkFBQUEsaUJBQVMsZUNFVCxJQUFNLEVBQWdCLENBQUMsRUFBYyxJQUEwQixDQUM3RCxJQUFNLEVBQWdCLEtBQUssSUFBSSxHQUFJLEVBQVEsRUFBSyxRQUFVLENBQUMsRUFDckQsRUFBVSxJQUFJLE9BQU8sQ0FBYSxFQUN4QyxNQUFPLEdBQUcsSUFBVSxJQUFPLElBQVUsT0FBTyxDQUFLLEdBR25ELFNBQXdCLENBQVcsQ0FBQyxFQUFnQixFQUF5QixDQUMzRSxJQUFNLEVBQVcsR0FBUSxVQUFZLFlBQy9CLEVBQU8sR0FBUSxNQUFRLEtBQ3ZCLEVBQVcsR0FBUSxVQUFZLE9BR3JDLEdBRm1CLEdBQVMsUUFBUSx1QkFBeUIsU0FFN0MsQ0FFZCxJQUFNLEVBQVUscUNBQTBCLE9BQWMsS0FBWSxJQUM5RCxFQUFXLEtBQUssSUFBSSxHQUFjLEVBQVEsTUFBTSxFQUFJLEVBQ3BELEVBQVMsSUFBRyxPQUFPLENBQVEsRUFDM0IsRUFBWSxFQUFjLEdBQUksQ0FBUSxFQUU1QyxRQUFRLElBQUk7QUFBQSxTQUNSO0FBQUEsU0FD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "logixlysia",
3
- "version": "5.1.1",
3
+ "version": "5.2.0",
4
4
  "description": "🦊 Logixlysia is a logger for Elysia",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",