@sockethub/server 5.0.0-alpha.23 → 5.0.0-alpha.25
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/README.md +11 -0
- package/dist/api-info.d.ts +39 -0
- package/dist/bootstrap/load-platforms.d.ts +1 -0
- package/dist/http/actions.d.ts +4 -0
- package/dist/index.js +8066 -49042
- package/dist/message-handlers.d.ts +4 -0
- package/dist/observability.d.ts +12 -1
- package/dist/platform.js +1495 -42524
- package/dist/sentry.d.ts +2 -1
- package/dist/sockethub.d.ts +0 -6
- package/dist/version.d.ts +14 -0
- package/package.json +16 -16
- package/res/sockethub-client.js +29 -17681
- package/dist/index.js.map +0 -1513
- package/dist/platform.js.map +0 -1247
- package/dist/sentry_cpu_profiler-darwin-arm64-108-x9pvc8sn.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-arm64-115-f1zntp0c.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-arm64-127-bkbjv4gh.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-arm64-137-bnbev7dh.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-arm64-147-zca3q0df.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-x64-108-k9ejvb8b.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-x64-115-5y3qs5bt.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-x64-127-a90vbs03.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-x64-137-93m96kya.node +0 -0
- package/dist/sentry_cpu_profiler-darwin-x64-147-jyxe4y9b.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-glibc-108-mqfvew5f.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-glibc-115-mqfvew5f.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-glibc-127-3tk3cast.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-glibc-137-0718g7v6.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-glibc-147-ap99rr48.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-musl-108-g2bwvb9e.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-musl-115-g2bwvb9e.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-musl-127-g2bwvb9e.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-musl-137-fda5zb96.node +0 -0
- package/dist/sentry_cpu_profiler-linux-arm64-musl-147-ky1pmw1r.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-glibc-108-b4v94gym.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-glibc-115-b4v94gym.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-glibc-127-77sdzmpr.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-glibc-137-5pe8gxxz.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-glibc-147-08jxr90t.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-musl-108-09j0f4jg.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-musl-115-09j0f4jg.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-musl-127-saq18043.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-musl-137-p73z6xnr.node +0 -0
- package/dist/sentry_cpu_profiler-linux-x64-musl-147-bg1yh1wf.node +0 -0
- package/dist/sentry_cpu_profiler-win32-x64-108-mse3z67f.node +0 -0
- package/dist/sentry_cpu_profiler-win32-x64-115-p638z8w6.node +0 -0
- package/dist/sentry_cpu_profiler-win32-x64-127-1t1rmdnc.node +0 -0
- package/dist/sentry_cpu_profiler-win32-x64-137-fd76n204.node +0 -0
- package/dist/sentry_cpu_profiler-win32-x64-147-w12dzy7w.node +0 -0
- package/res/sockethub-client.min.js +0 -32
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
(()=>{var Eg=Object.create;var{getPrototypeOf:kg,defineProperty:Rs,getOwnPropertyNames:cl,getOwnPropertyDescriptor:Ig}=Object,ul=Object.prototype.hasOwnProperty;function ll(e){return this[e]}var Tg,Rg,Os=(e,t,r)=>{var s=e!=null&&typeof e==="object";if(s){var n=t?Tg??=new WeakMap:Rg??=new WeakMap,i=n.get(e);if(i)return i}r=e!=null?Eg(kg(e)):{};let a=t||!e||!e.__esModule?Rs(r,"default",{value:e,enumerable:!0}):r;if(e&&typeof e==="object"||typeof e==="function"){for(let o of cl(e))if(!ul.call(a,o))Rs(a,o,{get:ll.bind(e,o),enumerable:!0})}if(s)n.set(e,a);return a},dl=(e)=>{var t=(ol??=new WeakMap).get(e),r;if(t)return t;if(t=Rs({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var s of cl(e))if(!ul.call(t,s))Rs(t,s,{get:ll.bind(e,s),enumerable:!(r=Ig(e,s))||r.enumerable})}return ol.set(e,t),t},ol,b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Og=(e)=>e;function xg(e,t){this[e]=Og.bind(null,t)}var fl=(e,t)=>{for(var r in t)Rs(e,r,{get:t[r],enumerable:!0,configurable:!0,set:xg.bind(t,r)})};var jg=(e,t)=>()=>(e&&(t=e(e=0)),t);var Cs=b(function(ee){Object.defineProperty(ee,"__esModule",{value:!0});ee.regexpCode=ee.getEsmExportName=ee.getProperty=ee.safeStringify=ee.stringify=ee.strConcat=ee.addCodeArg=ee.str=ee._=ee.nil=ee._Code=ee.Name=ee.IDENTIFIER=ee._CodeOrName=void 0;class qn{}ee._CodeOrName=qn;ee.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Lr extends qn{constructor(e){super();if(!ee.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}ee.Name=Lr;class pt extends qn{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,r)=>`${t}${r}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,r)=>{if(r instanceof Lr)t[r.str]=(t[r.str]||0)+1;return t},{})}}ee._Code=pt;ee.nil=new pt("");function gl(e,...t){let r=[e[0]],s=0;while(s<t.length)Pa(r,t[s]),r.push(e[++s]);return new pt(r)}ee._=gl;var Sa=new pt("+");function vl(e,...t){let r=[js(e[0])],s=0;while(s<t.length)r.push(Sa),Pa(r,t[s]),r.push(Sa,js(e[++s]));return Ng(r),new pt(r)}ee.str=vl;function Pa(e,t){if(t instanceof pt)e.push(...t._items);else if(t instanceof Lr)e.push(t);else e.push(Mg(t))}ee.addCodeArg=Pa;function Ng(e){let t=1;while(t<e.length-1){if(e[t]===Sa){let r=qg(e[t-1],e[t+1]);if(r!==void 0){e.splice(t-1,3,r);continue}e[t++]="+"}t++}}function qg(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof Lr||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof Lr))return`"${e}${t.slice(1)}`;return}function Dg(e,t){return t.emptyStr()?e:e.emptyStr()?t:vl`${e}${t}`}ee.strConcat=Dg;function Mg(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:js(Array.isArray(e)?e.join(","):e)}function Vg(e){return new pt(js(e))}ee.stringify=Vg;function js(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}ee.safeStringify=js;function Ug(e){return typeof e=="string"&&ee.IDENTIFIER.test(e)?new pt(`.${e}`):gl`[${e}]`}ee.getProperty=Ug;function zg(e){if(typeof e=="string"&&ee.IDENTIFIER.test(e))return new pt(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}ee.getEsmExportName=zg;function Fg(e){return new pt(e.toString())}ee.regexpCode=Fg});var Ia=b(function(We){Object.defineProperty(We,"__esModule",{value:!0});We.ValueScope=We.ValueScopeName=We.Scope=We.varKinds=We.UsedValueState=void 0;var Ge=Cs();class _l extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var Dn;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(Dn||(We.UsedValueState=Dn={}));We.varKinds={const:new Ge.Name("const"),let:new Ge.Name("let"),var:new Ge.Name("var")};class Ea{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof Ge.Name?e:this.name(e)}name(e){return new Ge.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,r;if(((r=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||r===void 0?void 0:r.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}We.Scope=Ea;class ka extends Ge.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=Ge._`.${new Ge.Name(t)}[${r}]`}}We.ValueScopeName=ka;var Lg=Ge._`\n`;class $l extends Ea{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?Lg:Ge.nil}}get(){return this._scope}name(e){return new ka(e,this._newName(e))}value(e,t){var r;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let s=this.toName(e),{prefix:n}=s,i=(r=t.key)!==null&&r!==void 0?r:t.ref,a=this._values[n];if(a){let u=a.get(i);if(u)return u}else a=this._values[n]=new Map;a.set(i,s);let o=this._scope[n]||(this._scope[n]=[]),c=o.length;return o[c]=t.ref,s.setValue(t,{property:n,itemIndex:c}),s}getValue(e,t){let r=this._values[e];if(!r)return;return r.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(r)=>{if(r.scopePath===void 0)throw Error(`CodeGen: name "${r}" has no value`);return Ge._`${e}${r.scopePath}`})}scopeCode(e=this._values,t,r){return this._reduceValues(e,(s)=>{if(s.value===void 0)throw Error(`CodeGen: name "${s}" has no value`);return s.value.code},t,r)}_reduceValues(e,t,r={},s){let n=Ge.nil;for(let i in e){let a=e[i];if(!a)continue;let o=r[i]=r[i]||new Map;a.forEach((c)=>{if(o.has(c))return;o.set(c,Dn.Started);let u=t(c);if(u){let l=this.opts.es5?We.varKinds.var:We.varKinds.const;n=Ge._`${n}${l} ${c} = ${u};${this.opts._n}`}else if(u=s===null||s===void 0?void 0:s(c))n=Ge._`${n}${u}${this.opts._n}`;else throw new _l(c);o.set(c,Dn.Completed)})}return n}}We.ValueScope=$l});var K=b(function(U){Object.defineProperty(U,"__esModule",{value:!0});U.or=U.and=U.not=U.CodeGen=U.operators=U.varKinds=U.ValueScopeName=U.ValueScope=U.Scope=U.Name=U.regexpCode=U.stringify=U.getProperty=U.nil=U.strConcat=U.str=U._=void 0;var W=Cs(),mt=Ia(),Zt=Cs();Object.defineProperty(U,"_",{enumerable:!0,get:function(){return Zt._}});Object.defineProperty(U,"str",{enumerable:!0,get:function(){return Zt.str}});Object.defineProperty(U,"strConcat",{enumerable:!0,get:function(){return Zt.strConcat}});Object.defineProperty(U,"nil",{enumerable:!0,get:function(){return Zt.nil}});Object.defineProperty(U,"getProperty",{enumerable:!0,get:function(){return Zt.getProperty}});Object.defineProperty(U,"stringify",{enumerable:!0,get:function(){return Zt.stringify}});Object.defineProperty(U,"regexpCode",{enumerable:!0,get:function(){return Zt.regexpCode}});Object.defineProperty(U,"Name",{enumerable:!0,get:function(){return Zt.Name}});var Ln=Ia();Object.defineProperty(U,"Scope",{enumerable:!0,get:function(){return Ln.Scope}});Object.defineProperty(U,"ValueScope",{enumerable:!0,get:function(){return Ln.ValueScope}});Object.defineProperty(U,"ValueScopeName",{enumerable:!0,get:function(){return Ln.ValueScopeName}});Object.defineProperty(U,"varKinds",{enumerable:!0,get:function(){return Ln.varKinds}});U.operators={GT:new W._Code(">"),GTE:new W._Code(">="),LT:new W._Code("<"),LTE:new W._Code("<="),EQ:new W._Code("==="),NEQ:new W._Code("!=="),NOT:new W._Code("!"),OR:new W._Code("||"),AND:new W._Code("&&"),ADD:new W._Code("+")};class Yt{optimizeNodes(){return this}optimizeNames(e,t){return this}}class wl extends Yt{constructor(e,t,r){super();this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){let r=e?mt.varKinds.var:this.varKind,s=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${s};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=Hr(this.rhs,e,t);return this}get names(){return this.rhs instanceof W._CodeOrName?this.rhs.names:{}}}class Oa extends Yt{constructor(e,t,r){super();this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof W.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=Hr(this.rhs,e,t),this}get names(){let e=this.lhs instanceof W.Name?{}:{...this.lhs.names};return Fn(e,this.rhs)}}class bl extends Oa{constructor(e,t,r,s){super(e,r,s);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class Sl extends Yt{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class Pl extends Yt{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class El extends Yt{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class kl extends Yt{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=Hr(this.code,e,t),this}get names(){return this.code instanceof W._CodeOrName?this.code.names:{}}}class Kn extends Yt{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,r)=>t+r.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let r=e[t].optimizeNodes();if(Array.isArray(r))e.splice(t,1,...r);else if(r)e[t]=r;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:r}=this,s=r.length;while(s--){let n=r[s];if(n.optimizeNames(e,t))continue;Kg(e,n.names),r.splice(s,1)}return r.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>_r(e,t.names),{})}}class er extends Kn{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Il extends Kn{}class As extends er{}As.kind="else";class Kt extends er{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let r=t.optimizeNodes();t=this.else=Array.isArray(r)?new As(r):r}if(t){if(e===!1)return t instanceof Kt?t:t.nodes;if(this.nodes.length)return this;return new Kt(jl(e),t instanceof Kt?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=Hr(this.condition,e,t),this}get names(){let e=super.names;if(Fn(e,this.condition),this.else)_r(e,this.else.names);return e}}Kt.kind="if";class Kr extends er{}Kr.kind="for";class Tl extends Kr{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=Hr(this.iteration,e,t),this}get names(){return _r(super.names,this.iteration.names)}}class Rl extends Kr{constructor(e,t,r,s){super();this.varKind=e,this.name=t,this.from=r,this.to=s}render(e){let t=e.es5?mt.varKinds.var:this.varKind,{name:r,from:s,to:n}=this;return`for(${t} ${r}=${s}; ${r}<${n}; ${r}++)`+super.render(e)}get names(){let e=Fn(super.names,this.from);return Fn(e,this.to)}}class Ta extends Kr{constructor(e,t,r,s){super();this.loop=e,this.varKind=t,this.name=r,this.iterable=s}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=Hr(this.iterable,e,t),this}get names(){return _r(super.names,this.iterable.names)}}class Mn extends er{constructor(e,t,r){super();this.name=e,this.args=t,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}Mn.kind="func";class Vn extends Kn{render(e){return"return "+super.render(e)}}Vn.kind="return";class Ol extends er{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var r,s;return super.optimizeNames(e,t),(r=this.catch)===null||r===void 0||r.optimizeNames(e,t),(s=this.finally)===null||s===void 0||s.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)_r(e,this.catch.names);if(this.finally)_r(e,this.finally.names);return e}}class Un extends er{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}Un.kind="catch";class zn extends er{render(e){return"finally"+super.render(e)}}zn.kind="finally";class xl{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
|
|
2
|
-
`:""},this._extScope=e,this._scope=new mt.Scope({parent:e}),this._nodes=[new Il]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let r=this._extScope.value(e,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,s){let n=this._scope.toName(t);if(r!==void 0&&s)this._constants[n.str]=r;return this._leafNode(new wl(e,n,r)),n}const(e,t,r){return this._def(mt.varKinds.const,e,t,r)}let(e,t,r){return this._def(mt.varKinds.let,e,t,r)}var(e,t,r){return this._def(mt.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new Oa(e,t,r))}add(e,t){return this._leafNode(new bl(e,U.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==W.nil)this._leafNode(new kl(e));return this}object(...e){let t=["{"];for(let[r,s]of e){if(t.length>1)t.push(",");if(t.push(r),r!==s||this.opts.es5)t.push(":"),(0,W.addCodeArg)(t,s)}return t.push("}"),new W._Code(t)}if(e,t,r){if(this._blockNode(new Kt(e)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Kt(e))}else(){return this._elseNode(new As)}endIf(){return this._endBlockNode(Kt,As)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new Tl(e),t)}forRange(e,t,r,s,n=this.opts.es5?mt.varKinds.var:mt.varKinds.let){let i=this._scope.toName(e);return this._for(new Rl(n,i,t,r),()=>s(i))}forOf(e,t,r,s=mt.varKinds.const){let n=this._scope.toName(e);if(this.opts.es5){let i=t instanceof W.Name?t:this.var("_arr",t);return this.forRange("_i",0,W._`${i}.length`,(a)=>{this.var(n,W._`${i}[${a}]`),r(n)})}return this._for(new Ta("of",s,n,t),()=>r(n))}forIn(e,t,r,s=this.opts.es5?mt.varKinds.var:mt.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,W._`Object.keys(${t})`,r);let n=this._scope.toName(e);return this._for(new Ta("in",s,n,t),()=>r(n))}endFor(){return this._endBlockNode(Kr)}label(e){return this._leafNode(new Sl(e))}break(e){return this._leafNode(new Pl(e))}return(e){let t=new Vn;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(Vn)}try(e,t,r){if(!t&&!r)throw Error('CodeGen: "try" without "catch" and "finally"');let s=new Ol;if(this._blockNode(s),this.code(e),t){let n=this.name("e");this._currNode=s.catch=new Un(n),t(n)}if(r)this._currNode=s.finally=new zn,this.code(r);return this._endBlockNode(Un,zn)}throw(e){return this._leafNode(new El(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||e!==void 0&&r!==e)throw Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=W.nil,r,s){if(this._blockNode(new Mn(e,t,r)),s)this.code(s).endFunc();return this}endFunc(){return this._endBlockNode(Mn)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let r=this._currNode;if(r instanceof e||t&&r instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof Kt))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}U.CodeGen=xl;function _r(e,t){for(let r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function Fn(e,t){return t instanceof W._CodeOrName?_r(e,t.names):e}function Hr(e,t,r){if(e instanceof W.Name)return s(e);if(!n(e))return e;return new W._Code(e._items.reduce((i,a)=>{if(a instanceof W.Name)a=s(a);if(a instanceof W._Code)i.push(...a._items);else i.push(a);return i},[]));function s(i){let a=r[i.str];if(a===void 0||t[i.str]!==1)return i;return delete t[i.str],a}function n(i){return i instanceof W._Code&&i._items.some((a)=>a instanceof W.Name&&t[a.str]===1&&r[a.str]!==void 0)}}function Kg(e,t){for(let r in t)e[r]=(e[r]||0)-(t[r]||0)}function jl(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:W._`!${Ra(e)}`}U.not=jl;var Hg=Cl(U.operators.AND);function Gg(...e){return e.reduce(Hg)}U.and=Gg;var Wg=Cl(U.operators.OR);function Jg(...e){return e.reduce(Wg)}U.or=Jg;function Cl(e){return(t,r)=>t===W.nil?r:r===W.nil?t:W._`${Ra(t)} ${e} ${Ra(r)}`}function Ra(e){return e instanceof W.Name?e:W._`(${e})`}});var B=b(function(H){Object.defineProperty(H,"__esModule",{value:!0});H.checkStrictMode=H.getErrorPath=H.Type=H.useFunc=H.setEvaluated=H.evaluatedPropsToName=H.mergeEvaluated=H.eachItem=H.unescapeJsonPointer=H.escapeJsonPointer=H.escapeFragment=H.unescapeFragment=H.schemaRefOrVal=H.schemaHasRulesButRef=H.schemaHasRules=H.checkUnknownRules=H.alwaysValidSchema=H.toHash=void 0;var de=K(),Qg=Cs();function Bg(e){let t={};for(let r of e)t[r]=!0;return t}H.toHash=Bg;function Xg(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return ql(e,t),!Dl(t,e.self.RULES.all)}H.alwaysValidSchema=Xg;function ql(e,t=e.schema){let{opts:r,self:s}=e;if(!r.strictSchema)return;if(typeof t==="boolean")return;let n=s.RULES.keywords;for(let i in t)if(!n[i])Ul(e,`unknown keyword: "${i}"`)}H.checkUnknownRules=ql;function Dl(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(t[r])return!0;return!1}H.schemaHasRules=Dl;function Zg(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(r!=="$ref"&&t.all[r])return!0;return!1}H.schemaHasRulesButRef=Zg;function Yg({topSchemaRef:e,schemaPath:t},r,s,n){if(!n){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return de._`${r}`}return de._`${e}${t}${(0,de.getProperty)(s)}`}H.schemaRefOrVal=Yg;function ev(e){return Ml(decodeURIComponent(e))}H.unescapeFragment=ev;function tv(e){return encodeURIComponent(ja(e))}H.escapeFragment=tv;function ja(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}H.escapeJsonPointer=ja;function Ml(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}H.unescapeJsonPointer=Ml;function rv(e,t){if(Array.isArray(e))for(let r of e)t(r);else t(e)}H.eachItem=rv;function Al({mergeNames:e,mergeToName:t,mergeValues:r,resultToName:s}){return(n,i,a,o)=>{let c=a===void 0?i:a instanceof de.Name?(i instanceof de.Name?e(n,i,a):t(n,i,a),a):i instanceof de.Name?(t(n,a,i),i):r(i,a);return o===de.Name&&!(c instanceof de.Name)?s(n,c):c}}H.mergeEvaluated={props:Al({mergeNames:(e,t,r)=>e.if(de._`${r} !== true && ${t} !== undefined`,()=>{e.if(de._`${t} === true`,()=>e.assign(r,!0),()=>e.assign(r,de._`${r} || {}`).code(de._`Object.assign(${r}, ${t})`))}),mergeToName:(e,t,r)=>e.if(de._`${r} !== true`,()=>{if(t===!0)e.assign(r,!0);else e.assign(r,de._`${r} || {}`),Ca(e,r,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:Vl}),items:Al({mergeNames:(e,t,r)=>e.if(de._`${r} !== true && ${t} !== undefined`,()=>e.assign(r,de._`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`)),mergeToName:(e,t,r)=>e.if(de._`${r} !== true`,()=>e.assign(r,t===!0?!0:de._`${r} > ${t} ? ${r} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function Vl(e,t){if(t===!0)return e.var("props",!0);let r=e.var("props",de._`{}`);if(t!==void 0)Ca(e,r,t);return r}H.evaluatedPropsToName=Vl;function Ca(e,t,r){Object.keys(r).forEach((s)=>e.assign(de._`${t}${(0,de.getProperty)(s)}`,!0))}H.setEvaluated=Ca;var Nl={};function sv(e,t){return e.scopeValue("func",{ref:t,code:Nl[t.code]||(Nl[t.code]=new Qg._Code(t.code))})}H.useFunc=sv;var xa;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(xa||(H.Type=xa={}));function nv(e,t,r){if(e instanceof de.Name){let s=t===xa.Num;return r?s?de._`"[" + ${e} + "]"`:de._`"['" + ${e} + "']"`:s?de._`"/" + ${e}`:de._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?(0,de.getProperty)(e).toString():"/"+ja(e)}H.getErrorPath=nv;function Ul(e,t,r=e.opts.strictSchema){if(!r)return;if(t=`strict mode: ${t}`,r===!0)throw Error(t);e.self.logger.warn(t)}H.checkStrictMode=Ul});var Ht=b(function(Aa){Object.defineProperty(Aa,"__esModule",{value:!0});var je=K(),iv={data:new je.Name("data"),valCxt:new je.Name("valCxt"),instancePath:new je.Name("instancePath"),parentData:new je.Name("parentData"),parentDataProperty:new je.Name("parentDataProperty"),rootData:new je.Name("rootData"),dynamicAnchors:new je.Name("dynamicAnchors"),vErrors:new je.Name("vErrors"),errors:new je.Name("errors"),this:new je.Name("this"),self:new je.Name("self"),scope:new je.Name("scope"),json:new je.Name("json"),jsonPos:new je.Name("jsonPos"),jsonLen:new je.Name("jsonLen"),jsonPart:new je.Name("jsonPart")};Aa.default=iv});var Ns=b(function(Ce){Object.defineProperty(Ce,"__esModule",{value:!0});Ce.extendErrors=Ce.resetErrorsCount=Ce.reportExtraError=Ce.reportError=Ce.keyword$DataError=Ce.keywordError=void 0;var X=K(),Hn=B(),Ve=Ht();Ce.keywordError={message:({keyword:e})=>X.str`must pass "${e}" keyword validation`};Ce.keyword$DataError={message:({keyword:e,schemaType:t})=>t?X.str`"${e}" keyword must be ${t} ($data)`:X.str`"${e}" keyword is invalid ($data)`};function av(e,t=Ce.keywordError,r,s){let{it:n}=e,{gen:i,compositeRule:a,allErrors:o}=n,c=Ll(e,t,r);if(s!==null&&s!==void 0?s:a||o)zl(i,c);else Fl(n,X._`[${c}]`)}Ce.reportError=av;function ov(e,t=Ce.keywordError,r){let{it:s}=e,{gen:n,compositeRule:i,allErrors:a}=s,o=Ll(e,t,r);if(zl(n,o),!(i||a))Fl(s,Ve.default.vErrors)}Ce.reportExtraError=ov;function cv(e,t){e.assign(Ve.default.errors,t),e.if(X._`${Ve.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(X._`${Ve.default.vErrors}.length`,t),()=>e.assign(Ve.default.vErrors,null)))}Ce.resetErrorsCount=cv;function uv({gen:e,keyword:t,schemaValue:r,data:s,errsCount:n,it:i}){if(n===void 0)throw Error("ajv implementation error");let a=e.name("err");e.forRange("i",n,Ve.default.errors,(o)=>{if(e.const(a,X._`${Ve.default.vErrors}[${o}]`),e.if(X._`${a}.instancePath === undefined`,()=>e.assign(X._`${a}.instancePath`,(0,X.strConcat)(Ve.default.instancePath,i.errorPath))),e.assign(X._`${a}.schemaPath`,X.str`${i.errSchemaPath}/${t}`),i.opts.verbose)e.assign(X._`${a}.schema`,r),e.assign(X._`${a}.data`,s)})}Ce.extendErrors=uv;function zl(e,t){let r=e.const("err",t);e.if(X._`${Ve.default.vErrors} === null`,()=>e.assign(Ve.default.vErrors,X._`[${r}]`),X._`${Ve.default.vErrors}.push(${r})`),e.code(X._`${Ve.default.errors}++`)}function Fl(e,t){let{gen:r,validateName:s,schemaEnv:n}=e;if(n.$async)r.throw(X._`new ${e.ValidationError}(${t})`);else r.assign(X._`${s}.errors`,t),r.return(!1)}var $r={keyword:new X.Name("keyword"),schemaPath:new X.Name("schemaPath"),params:new X.Name("params"),propertyName:new X.Name("propertyName"),message:new X.Name("message"),schema:new X.Name("schema"),parentSchema:new X.Name("parentSchema")};function Ll(e,t,r){let{createErrors:s}=e.it;if(s===!1)return X._`{}`;return lv(e,t,r)}function lv(e,t,r={}){let{gen:s,it:n}=e,i=[dv(n,r),fv(e,r)];return pv(e,t,i),s.object(...i)}function dv({errorPath:e},{instancePath:t}){let r=t?X.str`${e}${(0,Hn.getErrorPath)(t,Hn.Type.Str)}`:e;return[Ve.default.instancePath,(0,X.strConcat)(Ve.default.instancePath,r)]}function fv({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:s}){let n=s?t:X.str`${t}/${e}`;if(r)n=X.str`${n}${(0,Hn.getErrorPath)(r,Hn.Type.Str)}`;return[$r.schemaPath,n]}function pv(e,{params:t,message:r},s){let{keyword:n,data:i,schemaValue:a,it:o}=e,{opts:c,propertyName:u,topSchemaRef:l,schemaPath:d}=o;if(s.push([$r.keyword,n],[$r.params,typeof t=="function"?t(e):t||X._`{}`]),c.messages)s.push([$r.message,typeof r=="function"?r(e):r]);if(c.verbose)s.push([$r.schema,a],[$r.parentSchema,X._`${l}${d}`],[Ve.default.data,i]);if(u)s.push([$r.propertyName,u])}});var Hl=b(function(Gr){Object.defineProperty(Gr,"__esModule",{value:!0});Gr.boolOrEmptySchema=Gr.topBoolOrEmptySchema=void 0;var mv=Ns(),hv=K(),yv=Ht(),gv={message:"boolean schema is false"};function vv(e){let{gen:t,schema:r,validateName:s}=e;if(r===!1)Kl(e,!1);else if(typeof r=="object"&&r.$async===!0)t.return(yv.default.data);else t.assign(hv._`${s}.errors`,null),t.return(!0)}Gr.topBoolOrEmptySchema=vv;function _v(e,t){let{gen:r,schema:s}=e;if(s===!1)r.var(t,!1),Kl(e);else r.var(t,!0)}Gr.boolOrEmptySchema=_v;function Kl(e,t){let{gen:r,data:s}=e,n={gen:r,keyword:"false schema",data:s,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,mv.reportError)(n,gv,void 0,t)}});var Na=b(function(Wr){Object.defineProperty(Wr,"__esModule",{value:!0});Wr.getRules=Wr.isJSONType=void 0;var $v=["string","number","integer","boolean","null","object","array"],wv=new Set($v);function bv(e){return typeof e=="string"&&wv.has(e)}Wr.isJSONType=bv;function Sv(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Wr.getRules=Sv});var qa=b(function(tr){Object.defineProperty(tr,"__esModule",{value:!0});tr.shouldUseRule=tr.shouldUseGroup=tr.schemaHasRulesForType=void 0;function Pv({schema:e,self:t},r){let s=t.RULES.types[r];return s&&s!==!0&&Gl(e,s)}tr.schemaHasRulesForType=Pv;function Gl(e,t){return t.rules.some((r)=>Wl(e,r))}tr.shouldUseGroup=Gl;function Wl(e,t){var r;return e[t.keyword]!==void 0||((r=t.definition.implements)===null||r===void 0?void 0:r.some((s)=>e[s]!==void 0))}tr.shouldUseRule=Wl});var qs=b(function(Ae){Object.defineProperty(Ae,"__esModule",{value:!0});Ae.reportTypeError=Ae.checkDataTypes=Ae.checkDataType=Ae.coerceAndCheckDataType=Ae.getJSONTypes=Ae.getSchemaTypes=Ae.DataType=void 0;var Ev=Na(),kv=qa(),Iv=Ns(),q=K(),Jl=B(),Jr;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(Jr||(Ae.DataType=Jr={}));function Tv(e){let t=Ql(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}Ae.getSchemaTypes=Tv;function Ql(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every(Ev.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}Ae.getJSONTypes=Ql;function Rv(e,t){let{gen:r,data:s,opts:n}=e,i=Ov(t,n.coerceTypes),a=t.length>0&&!(i.length===0&&t.length===1&&(0,kv.schemaHasRulesForType)(e,t[0]));if(a){let o=Ma(t,s,n.strictNumbers,Jr.Wrong);r.if(o,()=>{if(i.length)xv(e,t,i);else Va(e)})}return a}Ae.coerceAndCheckDataType=Rv;var Bl=new Set(["string","number","integer","boolean","null"]);function Ov(e,t){return t?e.filter((r)=>Bl.has(r)||t==="array"&&r==="array"):[]}function xv(e,t,r){let{gen:s,data:n,opts:i}=e,a=s.let("dataType",q._`typeof ${n}`),o=s.let("coerced",q._`undefined`);if(i.coerceTypes==="array")s.if(q._`${a} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>s.assign(n,q._`${n}[0]`).assign(a,q._`typeof ${n}`).if(Ma(t,n,i.strictNumbers),()=>s.assign(o,n)));s.if(q._`${o} !== undefined`);for(let u of r)if(Bl.has(u)||u==="array"&&i.coerceTypes==="array")c(u);s.else(),Va(e),s.endIf(),s.if(q._`${o} !== undefined`,()=>{s.assign(n,o),jv(e,o)});function c(u){switch(u){case"string":s.elseIf(q._`${a} == "number" || ${a} == "boolean"`).assign(o,q._`"" + ${n}`).elseIf(q._`${n} === null`).assign(o,q._`""`);return;case"number":s.elseIf(q._`${a} == "boolean" || ${n} === null
|
|
3
|
-
|| (${a} == "string" && ${n} && ${n} == +${n})`).assign(o,q._`+${n}`);return;case"integer":s.elseIf(q._`${a} === "boolean" || ${n} === null
|
|
4
|
-
|| (${a} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(o,q._`+${n}`);return;case"boolean":s.elseIf(q._`${n} === "false" || ${n} === 0 || ${n} === null`).assign(o,!1).elseIf(q._`${n} === "true" || ${n} === 1`).assign(o,!0);return;case"null":s.elseIf(q._`${n} === "" || ${n} === 0 || ${n} === false`),s.assign(o,null);return;case"array":s.elseIf(q._`${a} === "string" || ${a} === "number"
|
|
5
|
-
|| ${a} === "boolean" || ${n} === null`).assign(o,q._`[${n}]`)}}}function jv({gen:e,parentData:t,parentDataProperty:r},s){e.if(q._`${t} !== undefined`,()=>e.assign(q._`${t}[${r}]`,s))}function Da(e,t,r,s=Jr.Correct){let n=s===Jr.Correct?q.operators.EQ:q.operators.NEQ,i;switch(e){case"null":return q._`${t} ${n} null`;case"array":i=q._`Array.isArray(${t})`;break;case"object":i=q._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=a(q._`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=a();break;default:return q._`typeof ${t} ${n} ${e}`}return s===Jr.Correct?i:(0,q.not)(i);function a(o=q.nil){return(0,q.and)(q._`typeof ${t} == "number"`,o,r?q._`isFinite(${t})`:q.nil)}}Ae.checkDataType=Da;function Ma(e,t,r,s){if(e.length===1)return Da(e[0],t,r,s);let n,i=(0,Jl.toHash)(e);if(i.array&&i.object){let a=q._`typeof ${t} != "object"`;n=i.null?a:q._`!${t} || ${a}`,delete i.null,delete i.array,delete i.object}else n=q.nil;if(i.number)delete i.integer;for(let a in i)n=(0,q.and)(n,Da(a,t,r,s));return n}Ae.checkDataTypes=Ma;var Cv={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?q._`{type: ${e}}`:q._`{type: ${t}}`};function Va(e){let t=Av(e);(0,Iv.reportError)(t,Cv)}Ae.reportTypeError=Va;function Av(e){let{gen:t,data:r,schema:s}=e,n=(0,Jl.schemaRefOrVal)(e,s,"type");return{gen:t,keyword:"type",data:r,schema:s.type,schemaCode:n,schemaValue:n,parentSchema:s,params:{},it:e}}});var Zl=b(function(Gn){Object.defineProperty(Gn,"__esModule",{value:!0});Gn.assignDefaults=void 0;var Qr=K(),Nv=B();function qv(e,t){let{properties:r,items:s}=e.schema;if(t==="object"&&r)for(let n in r)Xl(e,n,r[n].default);else if(t==="array"&&Array.isArray(s))s.forEach((n,i)=>Xl(e,i,n.default))}Gn.assignDefaults=qv;function Xl(e,t,r){let{gen:s,compositeRule:n,data:i,opts:a}=e;if(r===void 0)return;let o=Qr._`${i}${(0,Qr.getProperty)(t)}`;if(n){(0,Nv.checkStrictMode)(e,`default is ignored for: ${o}`);return}let c=Qr._`${o} === undefined`;if(a.useDefaults==="empty")c=Qr._`${c} || ${o} === null || ${o} === ""`;s.if(c,Qr._`${o} = ${(0,Qr.stringify)(r)}`)}});var it=b(function(oe){Object.defineProperty(oe,"__esModule",{value:!0});oe.validateUnion=oe.validateArray=oe.usePattern=oe.callValidateCode=oe.schemaProperties=oe.allSchemaProperties=oe.noPropertyInData=oe.propertyInData=oe.isOwnProperty=oe.hasPropFunc=oe.reportMissingProp=oe.checkMissingProp=oe.checkReportMissingProp=void 0;var pe=K(),Ua=B(),rr=Ht(),Dv=B();function Mv(e,t){let{gen:r,data:s,it:n}=e;r.if(Fa(r,s,t,n.opts.ownProperties),()=>{e.setParams({missingProperty:pe._`${t}`},!0),e.error()})}oe.checkReportMissingProp=Mv;function Vv({gen:e,data:t,it:{opts:r}},s,n){return(0,pe.or)(...s.map((i)=>(0,pe.and)(Fa(e,t,i,r.ownProperties),pe._`${n} = ${i}`)))}oe.checkMissingProp=Vv;function Uv(e,t){e.setParams({missingProperty:t},!0),e.error()}oe.reportMissingProp=Uv;function Yl(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:pe._`Object.prototype.hasOwnProperty`})}oe.hasPropFunc=Yl;function za(e,t,r){return pe._`${Yl(e)}.call(${t}, ${r})`}oe.isOwnProperty=za;function zv(e,t,r,s){let n=pe._`${t}${(0,pe.getProperty)(r)} !== undefined`;return s?pe._`${n} && ${za(e,t,r)}`:n}oe.propertyInData=zv;function Fa(e,t,r,s){let n=pe._`${t}${(0,pe.getProperty)(r)} === undefined`;return s?(0,pe.or)(n,(0,pe.not)(za(e,t,r))):n}oe.noPropertyInData=Fa;function ed(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}oe.allSchemaProperties=ed;function Fv(e,t){return ed(t).filter((r)=>!(0,Ua.alwaysValidSchema)(e,t[r]))}oe.schemaProperties=Fv;function Lv({schemaCode:e,data:t,it:{gen:r,topSchemaRef:s,schemaPath:n,errorPath:i},it:a},o,c,u){let l=u?pe._`${e}, ${t}, ${s}${n}`:t,d=[[rr.default.instancePath,(0,pe.strConcat)(rr.default.instancePath,i)],[rr.default.parentData,a.parentData],[rr.default.parentDataProperty,a.parentDataProperty],[rr.default.rootData,rr.default.rootData]];if(a.opts.dynamicRef)d.push([rr.default.dynamicAnchors,rr.default.dynamicAnchors]);let v=pe._`${l}, ${r.object(...d)}`;return c!==pe.nil?pe._`${o}.call(${c}, ${v})`:pe._`${o}(${v})`}oe.callValidateCode=Lv;var Kv=pe._`new RegExp`;function Hv({gen:e,it:{opts:t}},r){let s=t.unicodeRegExp?"u":"",{regExp:n}=t.code,i=n(r,s);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:pe._`${n.code==="new RegExp"?Kv:(0,Dv.useFunc)(e,n)}(${r}, ${s})`})}oe.usePattern=Hv;function Gv(e){let{gen:t,data:r,keyword:s,it:n}=e,i=t.name("valid");if(n.allErrors){let o=t.let("valid",!0);return a(()=>t.assign(o,!1)),o}return t.var(i,!0),a(()=>t.break()),i;function a(o){let c=t.const("len",pe._`${r}.length`);t.forRange("i",0,c,(u)=>{e.subschema({keyword:s,dataProp:u,dataPropType:Ua.Type.Num},i),t.if((0,pe.not)(i),o)})}}oe.validateArray=Gv;function Wv(e){let{gen:t,schema:r,keyword:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(r.some((c)=>(0,Ua.alwaysValidSchema)(n,c))&&!n.opts.unevaluated)return;let a=t.let("valid",!1),o=t.name("_valid");t.block(()=>r.forEach((c,u)=>{let l=e.subschema({keyword:s,schemaProp:u,compositeRule:!0},o);if(t.assign(a,pe._`${a} || ${o}`),!e.mergeValidEvaluated(l,o))t.if((0,pe.not)(a))})),e.result(a,()=>e.reset(),()=>e.error(!0))}oe.validateUnion=Wv});var sd=b(function(Rt){Object.defineProperty(Rt,"__esModule",{value:!0});Rt.validateKeywordUsage=Rt.validSchemaType=Rt.funcKeywordCode=Rt.macroKeywordCode=void 0;var Ue=K(),wr=Ht(),Jv=it(),Qv=Ns();function Bv(e,t){let{gen:r,keyword:s,schema:n,parentSchema:i,it:a}=e,o=t.macro.call(a.self,n,i,a),c=rd(r,s,o);if(a.opts.validateSchema!==!1)a.self.validateSchema(o,!0);let u=r.name("valid");e.subschema({schema:o,schemaPath:Ue.nil,errSchemaPath:`${a.errSchemaPath}/${s}`,topSchemaRef:c,compositeRule:!0},u),e.pass(u,()=>e.error(!0))}Rt.macroKeywordCode=Bv;function Xv(e,t){var r;let{gen:s,keyword:n,schema:i,parentSchema:a,$data:o,it:c}=e;Yv(c,t);let u=!o&&t.compile?t.compile.call(c.self,i,a,c):t.validate,l=rd(s,n,u),d=s.let("valid");e.block$data(d,v),e.ok((r=t.valid)!==null&&r!==void 0?r:d);function v(){if(t.errors===!1){if(p(),t.modifying)td(e);_(()=>e.error())}else{let w=t.async?m():h();if(t.modifying)td(e);_(()=>Zv(e,w))}}function m(){let w=s.let("ruleErrs",null);return s.try(()=>p(Ue._`await `),(k)=>s.assign(d,!1).if(Ue._`${k} instanceof ${c.ValidationError}`,()=>s.assign(w,Ue._`${k}.errors`),()=>s.throw(k))),w}function h(){let w=Ue._`${l}.errors`;return s.assign(w,null),p(Ue.nil),w}function p(w=t.async?Ue._`await `:Ue.nil){let k=c.opts.passContext?wr.default.this:wr.default.self,I=!(("compile"in t)&&!o||t.schema===!1);s.assign(d,Ue._`${w}${(0,Jv.callValidateCode)(e,l,k,I)}`,t.modifying)}function _(w){var k;s.if((0,Ue.not)((k=t.valid)!==null&&k!==void 0?k:d),w)}}Rt.funcKeywordCode=Xv;function td(e){let{gen:t,data:r,it:s}=e;t.if(s.parentData,()=>t.assign(r,Ue._`${s.parentData}[${s.parentDataProperty}]`))}function Zv(e,t){let{gen:r}=e;r.if(Ue._`Array.isArray(${t})`,()=>{r.assign(wr.default.vErrors,Ue._`${wr.default.vErrors} === null ? ${t} : ${wr.default.vErrors}.concat(${t})`).assign(wr.default.errors,Ue._`${wr.default.vErrors}.length`),(0,Qv.extendErrors)(e)},()=>e.error())}function Yv({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function rd(e,t,r){if(r===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof r=="function"?{ref:r}:{ref:r,code:(0,Ue.stringify)(r)})}function e_(e,t,r=!1){return!t.length||t.some((s)=>s==="array"?Array.isArray(e):s==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==s||r&&typeof e>"u")}Rt.validSchemaType=e_;function t_({schema:e,opts:t,self:r,errSchemaPath:s},n,i){if(Array.isArray(n.keyword)?!n.keyword.includes(i):n.keyword!==i)throw Error("ajv implementation error");let a=n.dependencies;if(a===null||a===void 0?void 0:a.some((o)=>!Object.prototype.hasOwnProperty.call(e,o)))throw Error(`parent schema must have dependencies of ${i}: ${a.join(",")}`);if(n.validateSchema){if(!n.validateSchema(e[i])){let c=`keyword "${i}" value is invalid at path "${s}": `+r.errorsText(n.validateSchema.errors);if(t.validateSchema==="log")r.logger.error(c);else throw Error(c)}}}Rt.validateKeywordUsage=t_});var id=b(function(sr){Object.defineProperty(sr,"__esModule",{value:!0});sr.extendSubschemaMode=sr.extendSubschemaData=sr.getSubschema=void 0;var Ot=K(),nd=B();function r_(e,{keyword:t,schemaProp:r,schema:s,schemaPath:n,errSchemaPath:i,topSchemaRef:a}){if(t!==void 0&&s!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let o=e.schema[t];return r===void 0?{schema:o,schemaPath:Ot._`${e.schemaPath}${(0,Ot.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:o[r],schemaPath:Ot._`${e.schemaPath}${(0,Ot.getProperty)(t)}${(0,Ot.getProperty)(r)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,nd.escapeFragment)(r)}`}}if(s!==void 0){if(n===void 0||i===void 0||a===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:s,schemaPath:n,topSchemaRef:a,errSchemaPath:i}}throw Error('either "keyword" or "schema" must be passed')}sr.getSubschema=r_;function s_(e,t,{dataProp:r,dataPropType:s,data:n,dataTypes:i,propertyName:a}){if(n!==void 0&&r!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:o}=t;if(r!==void 0){let{errorPath:u,dataPathArr:l,opts:d}=t,v=o.let("data",Ot._`${t.data}${(0,Ot.getProperty)(r)}`,!0);c(v),e.errorPath=Ot.str`${u}${(0,nd.getErrorPath)(r,s,d.jsPropertySyntax)}`,e.parentDataProperty=Ot._`${r}`,e.dataPathArr=[...l,e.parentDataProperty]}if(n!==void 0){let u=n instanceof Ot.Name?n:o.let("data",n,!0);if(c(u),a!==void 0)e.propertyName=a}if(i)e.dataTypes=i;function c(u){e.data=u,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,u]}}sr.extendSubschemaData=s_;function n_(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:s,createErrors:n,allErrors:i}){if(s!==void 0)e.compositeRule=s;if(n!==void 0)e.createErrors=n;if(i!==void 0)e.allErrors=i;e.jtdDiscriminator=t,e.jtdMetadata=r}sr.extendSubschemaMode=n_});var Ds=b(function(qI,ad){ad.exports=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var s,n,i;if(Array.isArray(t)){if(s=t.length,s!=r.length)return!1;for(n=s;n--!==0;)if(!e(t[n],r[n]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(i=Object.keys(t),s=i.length,s!==Object.keys(r).length)return!1;for(n=s;n--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[n]))return!1;for(n=s;n--!==0;){var a=i[n];if(!e(t[a],r[a]))return!1}return!0}return t!==t&&r!==r}});var La=b(function(DI,od){var nr=od.exports=function(e,t,r){if(typeof t=="function")r=t,t={};r=t.cb||r;var s=typeof r=="function"?r:r.pre||function(){},n=r.post||function(){};Wn(t,s,n,e,"",e)};nr.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};nr.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};nr.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};nr.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Wn(e,t,r,s,n,i,a,o,c,u){if(s&&typeof s=="object"&&!Array.isArray(s)){t(s,n,i,a,o,c,u);for(var l in s){var d=s[l];if(Array.isArray(d)){if(l in nr.arrayKeywords)for(var v=0;v<d.length;v++)Wn(e,t,r,d[v],n+"/"+l+"/"+v,i,n,l,s,v)}else if(l in nr.propsKeywords){if(d&&typeof d=="object")for(var m in d)Wn(e,t,r,d[m],n+"/"+l+"/"+i_(m),i,n,l,s,m)}else if(l in nr.keywords||e.allKeys&&!(l in nr.skipKeywords))Wn(e,t,r,d,n+"/"+l,i,n,l,s)}r(s,n,i,a,o,c,u)}}function i_(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}});var Ms=b(function(Je){Object.defineProperty(Je,"__esModule",{value:!0});Je.getSchemaRefs=Je.resolveUrl=Je.normalizeId=Je._getFullPath=Je.getFullPath=Je.inlineRef=void 0;var a_=B(),o_=Ds(),c_=La(),u_=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function l_(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!Ka(e);if(!t)return!1;return cd(e)<=t}Je.inlineRef=l_;var d_=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function Ka(e){for(let t in e){if(d_.has(t))return!0;let r=e[t];if(Array.isArray(r)&&r.some(Ka))return!0;if(typeof r=="object"&&Ka(r))return!0}return!1}function cd(e){let t=0;for(let r in e){if(r==="$ref")return 1/0;if(t++,u_.has(r))continue;if(typeof e[r]=="object")(0,a_.eachItem)(e[r],(s)=>t+=cd(s));if(t===1/0)return 1/0}return t}function ud(e,t="",r){if(r!==!1)t=Br(t);let s=e.parse(t);return ld(e,s)}Je.getFullPath=ud;function ld(e,t){return e.serialize(t).split("#")[0]+"#"}Je._getFullPath=ld;var f_=/#\/?$/;function Br(e){return e?e.replace(f_,""):""}Je.normalizeId=Br;function p_(e,t,r){return r=Br(r),e.resolve(t,r)}Je.resolveUrl=p_;var m_=/^[a-z_][-a-z0-9._]*$/i;function h_(e,t){if(typeof e=="boolean")return{};let{schemaId:r,uriResolver:s}=this.opts,n=Br(e[r]||t),i={"":n},a=ud(s,n,!1),o={},c=new Set;return c_(e,{allKeys:!0},(d,v,m,h)=>{if(h===void 0)return;let p=a+v,_=i[h];if(typeof d[r]=="string")_=w.call(this,d[r]);k.call(this,d.$anchor),k.call(this,d.$dynamicAnchor),i[v]=_;function w(I){let R=this.opts.uriResolver.resolve;if(I=Br(_?R(_,I):I),c.has(I))throw l(I);c.add(I);let S=this.refs[I];if(typeof S=="string")S=this.refs[S];if(typeof S=="object")u(d,S.schema,I);else if(I!==Br(p))if(I[0]==="#")u(d,o[I],I),o[I]=d;else this.refs[I]=p;return I}function k(I){if(typeof I=="string"){if(!m_.test(I))throw Error(`invalid anchor "${I}"`);w.call(this,`#${I}`)}}}),o;function u(d,v,m){if(v!==void 0&&!o_(d,v))throw l(m)}function l(d){return Error(`reference "${d}" resolves to more than one schema`)}}Je.getSchemaRefs=h_});var zs=b(function(ir){Object.defineProperty(ir,"__esModule",{value:!0});ir.getData=ir.KeywordCxt=ir.validateFunctionCode=void 0;var hd=Hl(),dd=qs(),Ga=qa(),Jn=qs(),y_=Zl(),Us=sd(),Ha=id(),x=K(),C=Ht(),g_=Ms(),Gt=B(),Vs=Ns();function v_(e){if(vd(e)){if(_d(e),gd(e)){w_(e);return}}yd(e,()=>(0,hd.topBoolOrEmptySchema)(e))}ir.validateFunctionCode=v_;function yd({gen:e,validateName:t,schema:r,schemaEnv:s,opts:n},i){if(n.code.es5)e.func(t,x._`${C.default.data}, ${C.default.valCxt}`,s.$async,()=>{e.code(x._`"use strict"; ${fd(r,n)}`),$_(e,n),e.code(i)});else e.func(t,x._`${C.default.data}, ${__(n)}`,s.$async,()=>e.code(fd(r,n)).code(i))}function __(e){return x._`{${C.default.instancePath}="", ${C.default.parentData}, ${C.default.parentDataProperty}, ${C.default.rootData}=${C.default.data}${e.dynamicRef?x._`, ${C.default.dynamicAnchors}={}`:x.nil}}={}`}function $_(e,t){e.if(C.default.valCxt,()=>{if(e.var(C.default.instancePath,x._`${C.default.valCxt}.${C.default.instancePath}`),e.var(C.default.parentData,x._`${C.default.valCxt}.${C.default.parentData}`),e.var(C.default.parentDataProperty,x._`${C.default.valCxt}.${C.default.parentDataProperty}`),e.var(C.default.rootData,x._`${C.default.valCxt}.${C.default.rootData}`),t.dynamicRef)e.var(C.default.dynamicAnchors,x._`${C.default.valCxt}.${C.default.dynamicAnchors}`)},()=>{if(e.var(C.default.instancePath,x._`""`),e.var(C.default.parentData,x._`undefined`),e.var(C.default.parentDataProperty,x._`undefined`),e.var(C.default.rootData,C.default.data),t.dynamicRef)e.var(C.default.dynamicAnchors,x._`{}`)})}function w_(e){let{schema:t,opts:r,gen:s}=e;yd(e,()=>{if(r.$comment&&t.$comment)wd(e);if(k_(e),s.let(C.default.vErrors,null),s.let(C.default.errors,0),r.unevaluated)b_(e);$d(e),R_(e)});return}function b_(e){let{gen:t,validateName:r}=e;e.evaluated=t.const("evaluated",x._`${r}.evaluated`),t.if(x._`${e.evaluated}.dynamicProps`,()=>t.assign(x._`${e.evaluated}.props`,x._`undefined`)),t.if(x._`${e.evaluated}.dynamicItems`,()=>t.assign(x._`${e.evaluated}.items`,x._`undefined`))}function fd(e,t){let r=typeof e=="object"&&e[t.schemaId];return r&&(t.code.source||t.code.process)?x._`/*# sourceURL=${r} */`:x.nil}function S_(e,t){if(vd(e)){if(_d(e),gd(e)){P_(e,t);return}}(0,hd.boolOrEmptySchema)(e,t)}function gd({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let r in e)if(t.RULES.all[r])return!0;return!1}function vd(e){return typeof e.schema!="boolean"}function P_(e,t){let{schema:r,gen:s,opts:n}=e;if(n.$comment&&r.$comment)wd(e);I_(e),T_(e);let i=s.const("_errs",C.default.errors);$d(e,i),s.var(t,x._`${i} === ${C.default.errors}`)}function _d(e){(0,Gt.checkUnknownRules)(e),E_(e)}function $d(e,t){if(e.opts.jtd)return pd(e,[],!1,t);let r=(0,dd.getSchemaTypes)(e.schema),s=(0,dd.coerceAndCheckDataType)(e,r);pd(e,r,!s,t)}function E_(e){let{schema:t,errSchemaPath:r,opts:s,self:n}=e;if(t.$ref&&s.ignoreKeywordsWithRef&&(0,Gt.schemaHasRulesButRef)(t,n.RULES))n.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}function k_(e){let{schema:t,opts:r}=e;if(t.default!==void 0&&r.useDefaults&&r.strictSchema)(0,Gt.checkStrictMode)(e,"default is ignored in the schema root")}function I_(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=(0,g_.resolveUrl)(e.opts.uriResolver,e.baseId,t)}function T_(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function wd({gen:e,schemaEnv:t,schema:r,errSchemaPath:s,opts:n}){let i=r.$comment;if(n.$comment===!0)e.code(x._`${C.default.self}.logger.log(${i})`);else if(typeof n.$comment=="function"){let a=x.str`${s}/$comment`,o=e.scopeValue("root",{ref:t.root});e.code(x._`${C.default.self}.opts.$comment(${i}, ${a}, ${o}.schema)`)}}function R_(e){let{gen:t,schemaEnv:r,validateName:s,ValidationError:n,opts:i}=e;if(r.$async)t.if(x._`${C.default.errors} === 0`,()=>t.return(C.default.data),()=>t.throw(x._`new ${n}(${C.default.vErrors})`));else{if(t.assign(x._`${s}.errors`,C.default.vErrors),i.unevaluated)O_(e);t.return(x._`${C.default.errors} === 0`)}}function O_({gen:e,evaluated:t,props:r,items:s}){if(r instanceof x.Name)e.assign(x._`${t}.props`,r);if(s instanceof x.Name)e.assign(x._`${t}.items`,s)}function pd(e,t,r,s){let{gen:n,schema:i,data:a,allErrors:o,opts:c,self:u}=e,{RULES:l}=u;if(i.$ref&&(c.ignoreKeywordsWithRef||!(0,Gt.schemaHasRulesButRef)(i,l))){n.block(()=>Sd(e,"$ref",l.all.$ref.definition));return}if(!c.jtd)x_(e,t);n.block(()=>{for(let v of l.rules)d(v);d(l.post)});function d(v){if(!(0,Ga.shouldUseGroup)(i,v))return;if(v.type){if(n.if((0,Jn.checkDataType)(v.type,a,c.strictNumbers)),md(e,v),t.length===1&&t[0]===v.type&&r)n.else(),(0,Jn.reportTypeError)(e);n.endIf()}else md(e,v);if(!o)n.if(x._`${C.default.errors} === ${s||0}`)}}function md(e,t){let{gen:r,schema:s,opts:{useDefaults:n}}=e;if(n)(0,y_.assignDefaults)(e,t.type);r.block(()=>{for(let i of t.rules)if((0,Ga.shouldUseRule)(s,i))Sd(e,i.keyword,i.definition,t.type)})}function x_(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(j_(e,t),!e.opts.allowUnionTypes)C_(e,t);A_(e,e.dataTypes)}function j_(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((r)=>{if(!bd(e.dataTypes,r))Wa(e,`type "${r}" not allowed by context "${e.dataTypes.join(",")}"`)}),q_(e,t)}function C_(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))Wa(e,"use allowUnionTypes to allow union type keyword")}function A_(e,t){let r=e.self.RULES.all;for(let s in r){let n=r[s];if(typeof n=="object"&&(0,Ga.shouldUseRule)(e.schema,n)){let{type:i}=n.definition;if(i.length&&!i.some((a)=>N_(t,a)))Wa(e,`missing type "${i.join(",")}" for keyword "${s}"`)}}}function N_(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function bd(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function q_(e,t){let r=[];for(let s of e.dataTypes)if(bd(t,s))r.push(s);else if(t.includes("integer")&&s==="number")r.push("integer");e.dataTypes=r}function Wa(e,t){let r=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${r}" (strictTypes)`,(0,Gt.checkStrictMode)(e,t,e.opts.strictTypes)}class Ja{constructor(e,t,r){if((0,Us.validateKeywordUsage)(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,Gt.schemaRefOrVal)(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",Pd(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,Us.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",C.default.errors)}result(e,t,r){this.failResult((0,x.not)(e),t,r)}failResult(e,t,r){if(this.gen.if(e),r)r();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult((0,x.not)(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(x._`${t} !== undefined && (${(0,x.or)(this.invalid$data(),e)})`)}error(e,t,r){if(t){this.setParams(t),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,t){(e?Vs.reportExtraError:Vs.reportError)(this,this.def.error,t)}$dataError(){(0,Vs.reportError)(this,this.def.$dataError||Vs.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,Vs.resetErrorsCount)(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,r=x.nil){this.gen.block(()=>{this.check$data(e,r),t()})}check$data(e=x.nil,t=x.nil){if(!this.$data)return;let{gen:r,schemaCode:s,schemaType:n,def:i}=this;if(r.if((0,x.or)(x._`${s} === undefined`,t)),e!==x.nil)r.assign(e,!0);if(n.length||i.validateSchema){if(r.elseIf(this.invalid$data()),this.$dataError(),e!==x.nil)r.assign(e,!1)}r.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:r,def:s,it:n}=this;return(0,x.or)(i(),a());function i(){if(r.length){if(!(t instanceof x.Name))throw Error("ajv implementation error");let o=Array.isArray(r)?r:[r];return x._`${(0,Jn.checkDataTypes)(o,t,n.opts.strictNumbers,Jn.DataType.Wrong)}`}return x.nil}function a(){if(s.validateSchema){let o=e.scopeValue("validate$data",{ref:s.validateSchema});return x._`!${o}(${t})`}return x.nil}}subschema(e,t){let r=(0,Ha.getSubschema)(this.it,e);(0,Ha.extendSubschemaData)(r,this.it,e),(0,Ha.extendSubschemaMode)(r,e);let s={...this.it,...r,items:void 0,props:void 0};return S_(s,t),s}mergeEvaluated(e,t){let{it:r,gen:s}=this;if(!r.opts.unevaluated)return;if(r.props!==!0&&e.props!==void 0)r.props=Gt.mergeEvaluated.props(s,e.props,r.props,t);if(r.items!==!0&&e.items!==void 0)r.items=Gt.mergeEvaluated.items(s,e.items,r.items,t)}mergeValidEvaluated(e,t){let{it:r,gen:s}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return s.if(t,()=>this.mergeEvaluated(e,x.Name)),!0}}ir.KeywordCxt=Ja;function Sd(e,t,r,s){let n=new Ja(e,r,t);if("code"in r)r.code(n,s);else if(n.$data&&r.validate)(0,Us.funcKeywordCode)(n,r);else if("macro"in r)(0,Us.macroKeywordCode)(n,r);else if(r.compile||r.validate)(0,Us.funcKeywordCode)(n,r)}var D_=/^\/(?:[^~]|~0|~1)*$/,M_=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Pd(e,{dataLevel:t,dataNames:r,dataPathArr:s}){let n,i;if(e==="")return C.default.rootData;if(e[0]==="/"){if(!D_.test(e))throw Error(`Invalid JSON-pointer: ${e}`);n=e,i=C.default.rootData}else{let u=M_.exec(e);if(!u)throw Error(`Invalid JSON-pointer: ${e}`);let l=+u[1];if(n=u[2],n==="#"){if(l>=t)throw Error(c("property/index",l));return s[t-l]}if(l>t)throw Error(c("data",l));if(i=r[t-l],!n)return i}let a=i,o=n.split("/");for(let u of o)if(u)i=x._`${i}${(0,x.getProperty)((0,Gt.unescapeJsonPointer)(u))}`,a=x._`${a} && ${i}`;return a;function c(u,l){return`Cannot access ${u} ${l} levels up, current level is ${t}`}}ir.getData=Pd});var Qn=b(function(Qa){Object.defineProperty(Qa,"__esModule",{value:!0});class Ed extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}Qa.default=Ed});var Fs=b(function(Xa){Object.defineProperty(Xa,"__esModule",{value:!0});var Ba=Ms();class kd extends Error{constructor(e,t,r,s){super(s||`can't resolve reference ${r} from id ${t}`);this.missingRef=(0,Ba.resolveUrl)(e,t,r),this.missingSchema=(0,Ba.normalizeId)((0,Ba.getFullPath)(e,this.missingRef))}}Xa.default=kd});var Xn=b(function(at){Object.defineProperty(at,"__esModule",{value:!0});at.resolveSchema=at.getCompilingSchema=at.resolveRef=at.compileSchema=at.SchemaEnv=void 0;var ht=K(),V_=Qn(),br=Ht(),yt=Ms(),Id=B(),U_=zs();class Ls{constructor(e){var t;this.refs={},this.dynamicAnchors={};let r;if(typeof e.schema=="object")r=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:(0,yt.normalizeId)(r===null||r===void 0?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r===null||r===void 0?void 0:r.$async,this.refs={}}}at.SchemaEnv=Ls;function Ya(e){let t=Td.call(this,e);if(t)return t;let r=(0,yt.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:s,lines:n}=this.opts.code,{ownProperties:i}=this.opts,a=new ht.CodeGen(this.scope,{es5:s,lines:n,ownProperties:i}),o;if(e.$async)o=a.scopeValue("Error",{ref:V_.default,code:ht._`require("ajv/dist/runtime/validation_error").default`});let c=a.scopeName("validate");e.validateName=c;let u={gen:a,allErrors:this.opts.allErrors,data:br.default.data,parentData:br.default.parentData,parentDataProperty:br.default.parentDataProperty,dataNames:[br.default.data],dataPathArr:[ht.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:a.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:(0,ht.stringify)(e.schema)}:{ref:e.schema}),validateName:c,ValidationError:o,schema:e.schema,schemaEnv:e,rootId:r,baseId:e.baseId||r,schemaPath:ht.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:ht._`""`,opts:this.opts,self:this},l;try{this._compilations.add(e),(0,U_.validateFunctionCode)(u),a.optimize(this.opts.code.optimize);let d=a.toString();if(l=`${a.scopeRefs(br.default.scope)}return ${d}`,this.opts.code.process)l=this.opts.code.process(l,e);let m=Function(`${br.default.self}`,`${br.default.scope}`,l)(this,this.scope.get());if(this.scope.value(c,{ref:m}),m.errors=null,m.schema=e.schema,m.schemaEnv=e,e.$async)m.$async=!0;if(this.opts.code.source===!0)m.source={validateName:c,validateCode:d,scopeValues:a._values};if(this.opts.unevaluated){let{props:h,items:p}=u;if(m.evaluated={props:h instanceof ht.Name?void 0:h,items:p instanceof ht.Name?void 0:p,dynamicProps:h instanceof ht.Name,dynamicItems:p instanceof ht.Name},m.source)m.source.evaluated=(0,ht.stringify)(m.evaluated)}return e.validate=m,e}catch(d){if(delete e.validate,delete e.validateName,l)this.logger.error("Error compiling schema, function code:",l);throw d}finally{this._compilations.delete(e)}}at.compileSchema=Ya;function z_(e,t,r){var s;r=(0,yt.resolveUrl)(this.opts.uriResolver,t,r);let n=e.refs[r];if(n)return n;let i=K_.call(this,e,r);if(i===void 0){let a=(s=e.localRefs)===null||s===void 0?void 0:s[r],{schemaId:o}=this.opts;if(a)i=new Ls({schema:a,schemaId:o,root:e,baseId:t})}if(i===void 0)return;return e.refs[r]=F_.call(this,i)}at.resolveRef=z_;function F_(e){if((0,yt.inlineRef)(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:Ya.call(this,e)}function Td(e){for(let t of this._compilations)if(L_(t,e))return t}at.getCompilingSchema=Td;function L_(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function K_(e,t){let r;while(typeof(r=this.refs[t])=="string")t=r;return r||this.schemas[t]||Bn.call(this,e,t)}function Bn(e,t){let r=this.opts.uriResolver.parse(t),s=(0,yt._getFullPath)(this.opts.uriResolver,r),n=(0,yt.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&s===n)return Za.call(this,r,e);let i=(0,yt.normalizeId)(s),a=this.refs[i]||this.schemas[i];if(typeof a=="string"){let o=Bn.call(this,e,a);if(typeof(o===null||o===void 0?void 0:o.schema)!=="object")return;return Za.call(this,r,o)}if(typeof(a===null||a===void 0?void 0:a.schema)!=="object")return;if(!a.validate)Ya.call(this,a);if(i===(0,yt.normalizeId)(t)){let{schema:o}=a,{schemaId:c}=this.opts,u=o[c];if(u)n=(0,yt.resolveUrl)(this.opts.uriResolver,n,u);return new Ls({schema:o,schemaId:c,root:e,baseId:n})}return Za.call(this,r,a)}at.resolveSchema=Bn;var H_=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Za(e,{baseId:t,schema:r,root:s}){var n;if(((n=e.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let o of e.fragment.slice(1).split("/")){if(typeof r==="boolean")return;let c=r[(0,Id.unescapeFragment)(o)];if(c===void 0)return;r=c;let u=typeof r==="object"&&r[this.opts.schemaId];if(!H_.has(o)&&u)t=(0,yt.resolveUrl)(this.opts.uriResolver,t,u)}let i;if(typeof r!="boolean"&&r.$ref&&!(0,Id.schemaHasRulesButRef)(r,this.RULES)){let o=(0,yt.resolveUrl)(this.opts.uriResolver,t,r.$ref);i=Bn.call(this,s,o)}let{schemaId:a}=this.opts;if(i=i||new Ls({schema:r,schemaId:a,root:s,baseId:t}),i.schema!==i.root.schema)return i;return}});var Rd=b(function(LI,G_){G_.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var to=b(function(KI,Cd){var W_=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),xd=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function eo(e){let t="",r=0,s=0;for(s=0;s<e.length;s++){if(r=e[s].charCodeAt(0),r===48)continue;if(!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";t+=e[s];break}for(s+=1;s<e.length;s++){if(r=e[s].charCodeAt(0),!(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102))return"";t+=e[s]}return t}var J_=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function Od(e){return e.length=0,!0}function Q_(e,t,r){if(e.length){let s=eo(e);if(s!=="")t.push(s);else return r.error=!0,!1;e.length=0}return!0}function B_(e){let t=0,r={error:!1,address:"",zone:""},s=[],n=[],i=!1,a=!1,o=Q_;for(let c=0;c<e.length;c++){let u=e[c];if(u==="["||u==="]")continue;if(u===":"){if(i===!0)a=!0;if(!o(n,s,r))break;if(++t>7){r.error=!0;break}if(c>0&&e[c-1]===":")i=!0;s.push(":");continue}else if(u==="%"){if(!o(n,s,r))break;o=Od}else{n.push(u);continue}}if(n.length)if(o===Od)r.zone=n.join("");else if(a)s.push(n.join(""));else s.push(eo(n));return r.address=s.join(""),r}function jd(e){if(X_(e,":")<2)return{host:e,isIPV6:!1};let t=B_(e);if(!t.error){let{address:r,address:s}=t;if(t.zone)r+="%"+t.zone,s+="%25"+t.zone;return{host:r,isIPV6:!0,escapedHost:s}}else return{host:e,isIPV6:!1}}function X_(e,t){let r=0;for(let s=0;s<e.length;s++)if(e[s]===t)r++;return r}function Z_(e){let t=e,r=[],s=-1,n=0;while(n=t.length){if(n===1)if(t===".")break;else if(t==="/"){r.push("/");break}else{r.push(t);break}else if(n===2){if(t[0]==="."){if(t[1]===".")break;else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."||t[1]==="/"){r.push("/");break}}}else if(n===3){if(t==="/.."){if(r.length!==0)r.pop();r.push("/");break}}if(t[0]==="."){if(t[1]==="."){if(t[2]==="/"){t=t.slice(3);continue}}else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."){if(t[2]==="/"){t=t.slice(2);continue}else if(t[2]==="."){if(t[3]==="/"){if(t=t.slice(3),r.length!==0)r.pop();continue}}}}if((s=t.indexOf("/",1))===-1){r.push(t);break}else r.push(t.slice(0,s)),t=t.slice(s)}return r.join("")}function Y_(e,t){let r=t!==!0?escape:unescape;if(e.scheme!==void 0)e.scheme=r(e.scheme);if(e.userinfo!==void 0)e.userinfo=r(e.userinfo);if(e.host!==void 0)e.host=r(e.host);if(e.path!==void 0)e.path=r(e.path);if(e.query!==void 0)e.query=r(e.query);if(e.fragment!==void 0)e.fragment=r(e.fragment);return e}function e$(e){let t=[];if(e.userinfo!==void 0)t.push(e.userinfo),t.push("@");if(e.host!==void 0){let r=unescape(e.host);if(!xd(r)){let s=jd(r);if(s.isIPV6===!0)r=`[${s.escapedHost}]`;else r=e.host}t.push(r)}if(typeof e.port==="number"||typeof e.port==="string")t.push(":"),t.push(String(e.port));return t.length?t.join(""):void 0}Cd.exports={nonSimpleDomain:J_,recomposeAuthority:e$,normalizeComponentEncoding:Y_,removeDotSegments:Z_,isIPv4:xd,isUUID:W_,normalizeIPv6:jd,stringArrayToHexStripped:eo}});var Md=b(function(HI,Dd){var{isUUID:t$}=to(),r$=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,s$=["http","https","ws","wss","urn","urn:uuid"];function n$(e){return s$.indexOf(e)!==-1}function ro(e){if(e.secure===!0)return!0;else if(e.secure===!1)return!1;else if(e.scheme)return e.scheme.length===3&&(e.scheme[0]==="w"||e.scheme[0]==="W")&&(e.scheme[1]==="s"||e.scheme[1]==="S")&&(e.scheme[2]==="s"||e.scheme[2]==="S");else return!1}function Ad(e){if(!e.host)e.error=e.error||"HTTP URIs must have a host.";return e}function Nd(e){let t=String(e.scheme).toLowerCase()==="https";if(e.port===(t?443:80)||e.port==="")e.port=void 0;if(!e.path)e.path="/";return e}function i$(e){return e.secure=ro(e),e.resourceName=(e.path||"/")+(e.query?"?"+e.query:""),e.path=void 0,e.query=void 0,e}function a$(e){if(e.port===(ro(e)?443:80)||e.port==="")e.port=void 0;if(typeof e.secure==="boolean")e.scheme=e.secure?"wss":"ws",e.secure=void 0;if(e.resourceName){let[t,r]=e.resourceName.split("?");e.path=t&&t!=="/"?t:void 0,e.query=r,e.resourceName=void 0}return e.fragment=void 0,e}function o$(e,t){if(!e.path)return e.error="URN can not be parsed",e;let r=e.path.match(r$);if(r){let s=t.scheme||e.scheme||"urn";e.nid=r[1].toLowerCase(),e.nss=r[2];let n=`${s}:${t.nid||e.nid}`,i=so(n);if(e.path=void 0,i)e=i.parse(e,t)}else e.error=e.error||"URN can not be parsed.";return e}function c$(e,t){if(e.nid===void 0)throw Error("URN without nid cannot be serialized");let r=t.scheme||e.scheme||"urn",s=e.nid.toLowerCase(),n=`${r}:${t.nid||s}`,i=so(n);if(i)e=i.serialize(e,t);let a=e,o=e.nss;return a.path=`${s||t.nid}:${o}`,t.skipEscape=!0,a}function u$(e,t){let r=e;if(r.uuid=r.nss,r.nss=void 0,!t.tolerant&&(!r.uuid||!t$(r.uuid)))r.error=r.error||"UUID is not valid.";return r}function l$(e){let t=e;return t.nss=(e.uuid||"").toLowerCase(),t}var qd={scheme:"http",domainHost:!0,parse:Ad,serialize:Nd},d$={scheme:"https",domainHost:qd.domainHost,parse:Ad,serialize:Nd},Zn={scheme:"ws",domainHost:!0,parse:i$,serialize:a$},f$={scheme:"wss",domainHost:Zn.domainHost,parse:Zn.parse,serialize:Zn.serialize},p$={scheme:"urn",parse:o$,serialize:c$,skipNormalize:!0},m$={scheme:"urn:uuid",parse:u$,serialize:l$,skipNormalize:!0},Yn={http:qd,https:d$,ws:Zn,wss:f$,urn:p$,"urn:uuid":m$};Object.setPrototypeOf(Yn,null);function so(e){return e&&(Yn[e]||Yn[e.toLowerCase()])||void 0}Dd.exports={wsIsSecure:ro,SCHEMES:Yn,isValidSchemeName:n$,getSchemeHandler:so}});var zd=b(function(GI,ti){var{normalizeIPv6:h$,removeDotSegments:Ks,recomposeAuthority:y$,normalizeComponentEncoding:ei,isIPv4:g$,nonSimpleDomain:v$}=to(),{SCHEMES:_$,getSchemeHandler:Vd}=Md();function $$(e,t){if(typeof e==="string")e=xt(Wt(e,t),t);else if(typeof e==="object")e=Wt(xt(e,t),t);return e}function w$(e,t,r){let s=r?Object.assign({scheme:"null"},r):{scheme:"null"},n=Ud(Wt(e,s),Wt(t,s),s,!0);return s.skipEscape=!0,xt(n,s)}function Ud(e,t,r,s){let n={};if(!s)e=Wt(xt(e,r),r),t=Wt(xt(t,r),r);if(r=r||{},!r.tolerant&&t.scheme)n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=Ks(t.path||""),n.query=t.query;else{if(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=Ks(t.path||""),n.query=t.query;else{if(!t.path)if(n.path=e.path,t.query!==void 0)n.query=t.query;else n.query=e.query;else{if(t.path[0]==="/")n.path=Ks(t.path);else{if((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path)n.path="/"+t.path;else if(!e.path)n.path=t.path;else n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path;n.path=Ks(n.path)}n.query=t.query}n.userinfo=e.userinfo,n.host=e.host,n.port=e.port}n.scheme=e.scheme}return n.fragment=t.fragment,n}function b$(e,t,r){if(typeof e==="string")e=unescape(e),e=xt(ei(Wt(e,r),!0),{...r,skipEscape:!0});else if(typeof e==="object")e=xt(ei(e,!0),{...r,skipEscape:!0});if(typeof t==="string")t=unescape(t),t=xt(ei(Wt(t,r),!0),{...r,skipEscape:!0});else if(typeof t==="object")t=xt(ei(t,!0),{...r,skipEscape:!0});return e.toLowerCase()===t.toLowerCase()}function xt(e,t){let r={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:""},s=Object.assign({},t),n=[],i=Vd(s.scheme||r.scheme);if(i&&i.serialize)i.serialize(r,s);if(r.path!==void 0)if(!s.skipEscape){if(r.path=escape(r.path),r.scheme!==void 0)r.path=r.path.split("%3A").join(":")}else r.path=unescape(r.path);if(s.reference!=="suffix"&&r.scheme)n.push(r.scheme,":");let a=y$(r);if(a!==void 0){if(s.reference!=="suffix")n.push("//");if(n.push(a),r.path&&r.path[0]!=="/")n.push("/")}if(r.path!==void 0){let o=r.path;if(!s.absolutePath&&(!i||!i.absolutePath))o=Ks(o);if(a===void 0&&o[0]==="/"&&o[1]==="/")o="/%2F"+o.slice(2);n.push(o)}if(r.query!==void 0)n.push("?",r.query);if(r.fragment!==void 0)n.push("#",r.fragment);return n.join("")}var S$=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function Wt(e,t){let r=Object.assign({},t),s={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},n=!1;if(r.reference==="suffix")if(r.scheme)e=r.scheme+":"+e;else e="//"+e;let i=e.match(S$);if(i){if(s.scheme=i[1],s.userinfo=i[3],s.host=i[4],s.port=parseInt(i[5],10),s.path=i[6]||"",s.query=i[7],s.fragment=i[8],isNaN(s.port))s.port=i[5];if(s.host)if(g$(s.host)===!1){let c=h$(s.host);s.host=c.host.toLowerCase(),n=c.isIPV6}else n=!0;if(s.scheme===void 0&&s.userinfo===void 0&&s.host===void 0&&s.port===void 0&&s.query===void 0&&!s.path)s.reference="same-document";else if(s.scheme===void 0)s.reference="relative";else if(s.fragment===void 0)s.reference="absolute";else s.reference="uri";if(r.reference&&r.reference!=="suffix"&&r.reference!==s.reference)s.error=s.error||"URI is not a "+r.reference+" reference.";let a=Vd(r.scheme||s.scheme);if(!r.unicodeSupport&&(!a||!a.unicodeSupport)){if(s.host&&(r.domainHost||a&&a.domainHost)&&n===!1&&v$(s.host))try{s.host=URL.domainToASCII(s.host.toLowerCase())}catch(o){s.error=s.error||"Host's domain name can not be converted to ASCII: "+o}}if(!a||a&&!a.skipNormalize){if(e.indexOf("%")!==-1){if(s.scheme!==void 0)s.scheme=unescape(s.scheme);if(s.host!==void 0)s.host=unescape(s.host)}if(s.path)s.path=escape(unescape(s.path));if(s.fragment)s.fragment=encodeURI(decodeURIComponent(s.fragment))}if(a&&a.parse)a.parse(s,r)}else s.error=s.error||"URI can not be parsed.";return s}var no={SCHEMES:_$,normalize:$$,resolve:w$,resolveComponent:Ud,equal:b$,serialize:xt,parse:Wt};ti.exports=no;ti.exports.default=no;ti.exports.fastUri=no});var Ld=b(function(io){Object.defineProperty(io,"__esModule",{value:!0});var Fd=zd();Fd.code='require("ajv/dist/runtime/uri").default';io.default=Fd});var Xd=b(function(ke){Object.defineProperty(ke,"__esModule",{value:!0});ke.CodeGen=ke.Name=ke.nil=ke.stringify=ke.str=ke._=ke.KeywordCxt=void 0;var P$=zs();Object.defineProperty(ke,"KeywordCxt",{enumerable:!0,get:function(){return P$.KeywordCxt}});var Xr=K();Object.defineProperty(ke,"_",{enumerable:!0,get:function(){return Xr._}});Object.defineProperty(ke,"str",{enumerable:!0,get:function(){return Xr.str}});Object.defineProperty(ke,"stringify",{enumerable:!0,get:function(){return Xr.stringify}});Object.defineProperty(ke,"nil",{enumerable:!0,get:function(){return Xr.nil}});Object.defineProperty(ke,"Name",{enumerable:!0,get:function(){return Xr.Name}});Object.defineProperty(ke,"CodeGen",{enumerable:!0,get:function(){return Xr.CodeGen}});var E$=Qn(),Jd=Fs(),k$=Na(),Hs=Xn(),I$=K(),Gs=Ms(),ri=qs(),oo=B(),Kd=Rd(),T$=Ld(),Qd=(e,t)=>new RegExp(e,t);Qd.code="new RegExp";var R$=["removeAdditional","useDefaults","coerceTypes"],O$=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),x$={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},j$={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},Hd=200;function C$(e){var t,r,s,n,i,a,o,c,u,l,d,v,m,h,p,_,w,k,I,R,S,O,L,V,ne;let G=e.strict,$e=(t=e.code)===null||t===void 0?void 0:t.optimize,ue=$e===!0||$e===void 0?1:$e||0,Ee=(s=(r=e.code)===null||r===void 0?void 0:r.regExp)!==null&&s!==void 0?s:Qd,Me=(n=e.uriResolver)!==null&&n!==void 0?n:T$.default;return{strictSchema:(a=(i=e.strictSchema)!==null&&i!==void 0?i:G)!==null&&a!==void 0?a:!0,strictNumbers:(c=(o=e.strictNumbers)!==null&&o!==void 0?o:G)!==null&&c!==void 0?c:!0,strictTypes:(l=(u=e.strictTypes)!==null&&u!==void 0?u:G)!==null&&l!==void 0?l:"log",strictTuples:(v=(d=e.strictTuples)!==null&&d!==void 0?d:G)!==null&&v!==void 0?v:"log",strictRequired:(h=(m=e.strictRequired)!==null&&m!==void 0?m:G)!==null&&h!==void 0?h:!1,code:e.code?{...e.code,optimize:ue,regExp:Ee}:{optimize:ue,regExp:Ee},loopRequired:(p=e.loopRequired)!==null&&p!==void 0?p:Hd,loopEnum:(_=e.loopEnum)!==null&&_!==void 0?_:Hd,meta:(w=e.meta)!==null&&w!==void 0?w:!0,messages:(k=e.messages)!==null&&k!==void 0?k:!0,inlineRefs:(I=e.inlineRefs)!==null&&I!==void 0?I:!0,schemaId:(R=e.schemaId)!==null&&R!==void 0?R:"$id",addUsedSchema:(S=e.addUsedSchema)!==null&&S!==void 0?S:!0,validateSchema:(O=e.validateSchema)!==null&&O!==void 0?O:!0,validateFormats:(L=e.validateFormats)!==null&&L!==void 0?L:!0,unicodeRegExp:(V=e.unicodeRegExp)!==null&&V!==void 0?V:!0,int32range:(ne=e.int32range)!==null&&ne!==void 0?ne:!0,uriResolver:Me}}class si{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...C$(e)};let{es5:t,lines:r}=this.opts.code;this.scope=new I$.ValueScope({scope:{},prefixes:O$,es5:t,lines:r}),this.logger=V$(e.logger);let s=e.validateFormats;if(e.validateFormats=!1,this.RULES=(0,k$.getRules)(),Gd.call(this,x$,e,"NOT SUPPORTED"),Gd.call(this,j$,e,"DEPRECATED","warn"),this._metaOpts=D$.call(this),e.formats)N$.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)q$.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);A$.call(this),e.validateFormats=s}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:r}=this.opts,s=Kd;if(r==="id")s={...Kd},s.id=s.$id,delete s.$id;if(t&&e)this.addMetaSchema(s,s[r],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let s=r(t);if(!("$async"in r))this.errors=r.errors;return s}compile(e,t){let r=this._addSchema(e,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return s.call(this,e,t);async function s(u,l){await n.call(this,u.$schema);let d=this._addSchema(u,l);return d.validate||i.call(this,d)}async function n(u){if(u&&!this.getSchema(u))await s.call(this,{$ref:u},!0)}async function i(u){try{return this._compileSchemaEnv(u)}catch(l){if(!(l instanceof Jd.default))throw l;return a.call(this,l),await o.call(this,l.missingSchema),i.call(this,u)}}function a({missingSchema:u,missingRef:l}){if(this.refs[u])throw Error(`AnySchema ${u} is loaded but ${l} cannot be resolved`)}async function o(u){let l=await c.call(this,u);if(!this.refs[u])await n.call(this,l.$schema);if(!this.refs[u])this.addSchema(l,u,t)}async function c(u){let l=this._loading[u];if(l)return l;try{return await(this._loading[u]=r(u))}finally{delete this._loading[u]}}}addSchema(e,t,r,s=this.opts.validateSchema){if(Array.isArray(e)){for(let i of e)this.addSchema(i,void 0,r,s);return this}let n;if(typeof e==="object"){let{schemaId:i}=this.opts;if(n=e[i],n!==void 0&&typeof n!="string")throw Error(`schema ${i} must be string`)}return t=(0,Gs.normalizeId)(t||n),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,s,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let s=this.validate(r,e);if(!s&&t){let n="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(n);else throw Error(n)}return s}getSchema(e){let t;while(typeof(t=Wd.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:r}=this.opts,s=new Hs.SchemaEnv({schema:{},schemaId:r});if(t=Hs.resolveSchema.call(this,s,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=Wd.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let r=e[this.opts.schemaId];if(r)r=(0,Gs.normalizeId)(r),delete this.schemas[r],delete this.refs[r];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if(typeof e=="string"){if(r=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r}else if(typeof e=="object"&&t===void 0){if(t=e,r=t.keyword,Array.isArray(r)&&!r.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(z$.call(this,r,t),!t)return(0,oo.eachItem)(r,(n)=>ao.call(this,n)),this;L$.call(this,t);let s={...t,type:(0,ri.getJSONTypes)(t.type),schemaType:(0,ri.getJSONTypes)(t.schemaType)};return(0,oo.eachItem)(r,s.type.length===0?(n)=>ao.call(this,n,s):(n)=>s.type.forEach((i)=>ao.call(this,n,s,i))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let r of t.rules){let s=r.rules.findIndex((n)=>n.keyword===e);if(s>=0)r.rules.splice(s,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:r="data"}={}){if(!e||e.length===0)return"No errors";return e.map((s)=>`${r}${s.instancePath} ${s.message}`).reduce((s,n)=>s+t+n)}$dataMetaSchema(e,t){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let s of t){let n=s.split("/").slice(1),i=e;for(let a of n)i=i[a];for(let a in r){let o=r[a];if(typeof o!="object")continue;let{$data:c}=o.definition,u=i[a];if(c&&u)i[a]=Bd(u)}}return e}_removeAllSchemas(e,t){for(let r in e){let s=e[r];if(!t||t.test(r)){if(typeof s=="string")delete e[r];else if(s&&!s.meta)this._cache.delete(s.schema),delete e[r]}}}_addSchema(e,t,r,s=this.opts.validateSchema,n=this.opts.addUsedSchema){let i,{schemaId:a}=this.opts;if(typeof e=="object")i=e[a];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let o=this._cache.get(e);if(o!==void 0)return o;r=(0,Gs.normalizeId)(i||r);let c=Gs.getSchemaRefs.call(this,e,r);if(o=new Hs.SchemaEnv({schema:e,schemaId:a,meta:t,baseId:r,localRefs:c}),this._cache.set(o.schema,o),n&&!r.startsWith("#")){if(r)this._checkUnique(r);this.refs[r]=o}if(s)this.validateSchema(e,!0);return o}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else Hs.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{Hs.compileSchema.call(this,e)}finally{this.opts=t}}}si.ValidationError=E$.default;si.MissingRefError=Jd.default;ke.default=si;function Gd(e,t,r,s="error"){for(let n in e){let i=n;if(i in t)this.logger[s](`${r}: option ${n}. ${e[i]}`)}}function Wd(e){return e=(0,Gs.normalizeId)(e),this.schemas[e]||this.refs[e]}function A$(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function N$(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function q$(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let r=e[t];if(!r.keyword)r.keyword=t;this.addKeyword(r)}}function D$(){let e={...this.opts};for(let t of R$)delete e[t];return e}var M$={log(){},warn(){},error(){}};function V$(e){if(e===!1)return M$;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var U$=/^[a-z_$][a-z0-9_$:-]*$/i;function z$(e,t){let{RULES:r}=this;if((0,oo.eachItem)(e,(s)=>{if(r.keywords[s])throw Error(`Keyword ${s} is already defined`);if(!U$.test(s))throw Error(`Keyword ${s} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function ao(e,t,r){var s;let n=t===null||t===void 0?void 0:t.post;if(r&&n)throw Error('keyword with "post" flag cannot have "type"');let{RULES:i}=this,a=n?i.post:i.rules.find(({type:c})=>c===r);if(!a)a={type:r,rules:[]},i.rules.push(a);if(i.keywords[e]=!0,!t)return;let o={keyword:e,definition:{...t,type:(0,ri.getJSONTypes)(t.type),schemaType:(0,ri.getJSONTypes)(t.schemaType)}};if(t.before)F$.call(this,a,o,t.before);else a.rules.push(o);i.all[e]=o,(s=t.implements)===null||s===void 0||s.forEach((c)=>this.addKeyword(c))}function F$(e,t,r){let s=e.rules.findIndex((n)=>n.keyword===r);if(s>=0)e.rules.splice(s,0,t);else e.rules.push(t),this.logger.warn(`rule ${r} is not defined`)}function L$(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=Bd(t);e.validateSchema=this.compile(t,!0)}var K$={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function Bd(e){return{anyOf:[e,K$]}}});var Zd=b(function(co){Object.defineProperty(co,"__esModule",{value:!0});var H$={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};co.default=H$});var rf=b(function(Sr){Object.defineProperty(Sr,"__esModule",{value:!0});Sr.callRef=Sr.getValidate=void 0;var G$=Fs(),Yd=it(),Qe=K(),Zr=Ht(),ef=Xn(),ni=B(),W$={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:r,it:s}=e,{baseId:n,schemaEnv:i,validateName:a,opts:o,self:c}=s,{root:u}=i;if((r==="#"||r==="#/")&&n===u.baseId)return d();let l=ef.resolveRef.call(c,u,n,r);if(l===void 0)throw new G$.default(s.opts.uriResolver,n,r);if(l instanceof ef.SchemaEnv)return v(l);return m(l);function d(){if(i===u)return ii(e,a,i,i.$async);let h=t.scopeValue("root",{ref:u});return ii(e,Qe._`${h}.validate`,u,u.$async)}function v(h){let p=tf(e,h);ii(e,p,h,h.$async)}function m(h){let p=t.scopeValue("schema",o.code.source===!0?{ref:h,code:(0,Qe.stringify)(h)}:{ref:h}),_=t.name("valid"),w=e.subschema({schema:h,dataTypes:[],schemaPath:Qe.nil,topSchemaRef:p,errSchemaPath:r},_);e.mergeEvaluated(w),e.ok(_)}}};function tf(e,t){let{gen:r}=e;return t.validate?r.scopeValue("validate",{ref:t.validate}):Qe._`${r.scopeValue("wrapper",{ref:t})}.validate`}Sr.getValidate=tf;function ii(e,t,r,s){let{gen:n,it:i}=e,{allErrors:a,schemaEnv:o,opts:c}=i,u=c.passContext?Zr.default.this:Qe.nil;if(s)l();else d();function l(){if(!o.$async)throw Error("async schema referenced by sync schema");let h=n.let("valid");n.try(()=>{if(n.code(Qe._`await ${(0,Yd.callValidateCode)(e,t,u)}`),m(t),!a)n.assign(h,!0)},(p)=>{if(n.if(Qe._`!(${p} instanceof ${i.ValidationError})`,()=>n.throw(p)),v(p),!a)n.assign(h,!1)}),e.ok(h)}function d(){e.result((0,Yd.callValidateCode)(e,t,u),()=>m(t),()=>v(t))}function v(h){let p=Qe._`${h}.errors`;n.assign(Zr.default.vErrors,Qe._`${Zr.default.vErrors} === null ? ${p} : ${Zr.default.vErrors}.concat(${p})`),n.assign(Zr.default.errors,Qe._`${Zr.default.vErrors}.length`)}function m(h){var p;if(!i.opts.unevaluated)return;let _=(p=r===null||r===void 0?void 0:r.validate)===null||p===void 0?void 0:p.evaluated;if(i.props!==!0)if(_&&!_.dynamicProps){if(_.props!==void 0)i.props=ni.mergeEvaluated.props(n,_.props,i.props)}else{let w=n.var("props",Qe._`${h}.evaluated.props`);i.props=ni.mergeEvaluated.props(n,w,i.props,Qe.Name)}if(i.items!==!0)if(_&&!_.dynamicItems){if(_.items!==void 0)i.items=ni.mergeEvaluated.items(n,_.items,i.items)}else{let w=n.var("items",Qe._`${h}.evaluated.items`);i.items=ni.mergeEvaluated.items(n,w,i.items,Qe.Name)}}}Sr.callRef=ii;Sr.default=W$});var sf=b(function(uo){Object.defineProperty(uo,"__esModule",{value:!0});var J$=Zd(),Q$=rf(),B$=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",J$.default,Q$.default];uo.default=B$});var nf=b(function(lo){Object.defineProperty(lo,"__esModule",{value:!0});var ai=K(),ar=ai.operators,oi={maximum:{okStr:"<=",ok:ar.LTE,fail:ar.GT},minimum:{okStr:">=",ok:ar.GTE,fail:ar.LT},exclusiveMaximum:{okStr:"<",ok:ar.LT,fail:ar.GTE},exclusiveMinimum:{okStr:">",ok:ar.GT,fail:ar.LTE}},X$={message:({keyword:e,schemaCode:t})=>ai.str`must be ${oi[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>ai._`{comparison: ${oi[e].okStr}, limit: ${t}}`},Z$={keyword:Object.keys(oi),type:"number",schemaType:"number",$data:!0,error:X$,code(e){let{keyword:t,data:r,schemaCode:s}=e;e.fail$data(ai._`${r} ${oi[t].fail} ${s} || isNaN(${r})`)}};lo.default=Z$});var af=b(function(fo){Object.defineProperty(fo,"__esModule",{value:!0});var Ws=K(),Y$={message:({schemaCode:e})=>Ws.str`must be multiple of ${e}`,params:({schemaCode:e})=>Ws._`{multipleOf: ${e}}`},ew={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:Y$,code(e){let{gen:t,data:r,schemaCode:s,it:n}=e,i=n.opts.multipleOfPrecision,a=t.let("res"),o=i?Ws._`Math.abs(Math.round(${a}) - ${a}) > 1e-${i}`:Ws._`${a} !== parseInt(${a})`;e.fail$data(Ws._`(${s} === 0 || (${a} = ${r}/${s}, ${o}))`)}};fo.default=ew});var cf=b(function(po){Object.defineProperty(po,"__esModule",{value:!0});function of(e){let t=e.length,r=0,s=0,n;while(s<t)if(r++,n=e.charCodeAt(s++),n>=55296&&n<=56319&&s<t){if(n=e.charCodeAt(s),(n&64512)===56320)s++}return r}po.default=of;of.code='require("ajv/dist/runtime/ucs2length").default'});var uf=b(function(mo){Object.defineProperty(mo,"__esModule",{value:!0});var Pr=K(),tw=B(),rw=cf(),sw={message({keyword:e,schemaCode:t}){let r=e==="maxLength"?"more":"fewer";return Pr.str`must NOT have ${r} than ${t} characters`},params:({schemaCode:e})=>Pr._`{limit: ${e}}`},nw={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:sw,code(e){let{keyword:t,data:r,schemaCode:s,it:n}=e,i=t==="maxLength"?Pr.operators.GT:Pr.operators.LT,a=n.opts.unicode===!1?Pr._`${r}.length`:Pr._`${(0,tw.useFunc)(e.gen,rw.default)}(${r})`;e.fail$data(Pr._`${a} ${i} ${s}`)}};mo.default=nw});var lf=b(function(ho){Object.defineProperty(ho,"__esModule",{value:!0});var iw=it(),aw=B(),Yr=K(),ow={message:({schemaCode:e})=>Yr.str`must match pattern "${e}"`,params:({schemaCode:e})=>Yr._`{pattern: ${e}}`},cw={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:ow,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:a}=e,o=a.opts.unicodeRegExp?"u":"";if(s){let{regExp:c}=a.opts.code,u=c.code==="new RegExp"?Yr._`new RegExp`:(0,aw.useFunc)(t,c),l=t.let("valid");t.try(()=>t.assign(l,Yr._`${u}(${i}, ${o}).test(${r})`),()=>t.assign(l,!1)),e.fail$data(Yr._`!${l}`)}else{let c=(0,iw.usePattern)(e,n);e.fail$data(Yr._`!${c}.test(${r})`)}}};ho.default=cw});var df=b(function(yo){Object.defineProperty(yo,"__esModule",{value:!0});var Js=K(),uw={message({keyword:e,schemaCode:t}){let r=e==="maxProperties"?"more":"fewer";return Js.str`must NOT have ${r} than ${t} properties`},params:({schemaCode:e})=>Js._`{limit: ${e}}`},lw={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:uw,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxProperties"?Js.operators.GT:Js.operators.LT;e.fail$data(Js._`Object.keys(${r}).length ${n} ${s}`)}};yo.default=lw});var ff=b(function(go){Object.defineProperty(go,"__esModule",{value:!0});var Qs=it(),Bs=K(),dw=B(),fw={message:({params:{missingProperty:e}})=>Bs.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>Bs._`{missingProperty: ${e}}`},pw={keyword:"required",type:"object",schemaType:"array",$data:!0,error:fw,code(e){let{gen:t,schema:r,schemaCode:s,data:n,$data:i,it:a}=e,{opts:o}=a;if(!i&&r.length===0)return;let c=r.length>=o.loopRequired;if(a.allErrors)u();else l();if(o.strictRequired){let m=e.parentSchema.properties,{definedProperties:h}=e.it;for(let p of r)if((m===null||m===void 0?void 0:m[p])===void 0&&!h.has(p)){let _=a.schemaEnv.baseId+a.errSchemaPath,w=`required property "${p}" is not defined at "${_}" (strictRequired)`;(0,dw.checkStrictMode)(a,w,a.opts.strictRequired)}}function u(){if(c||i)e.block$data(Bs.nil,d);else for(let m of r)(0,Qs.checkReportMissingProp)(e,m)}function l(){let m=t.let("missing");if(c||i){let h=t.let("valid",!0);e.block$data(h,()=>v(m,h)),e.ok(h)}else t.if((0,Qs.checkMissingProp)(e,r,m)),(0,Qs.reportMissingProp)(e,m),t.else()}function d(){t.forOf("prop",s,(m)=>{e.setParams({missingProperty:m}),t.if((0,Qs.noPropertyInData)(t,n,m,o.ownProperties),()=>e.error())})}function v(m,h){e.setParams({missingProperty:m}),t.forOf(m,s,()=>{t.assign(h,(0,Qs.propertyInData)(t,n,m,o.ownProperties)),t.if((0,Bs.not)(h),()=>{e.error(),t.break()})},Bs.nil)}}};go.default=pw});var pf=b(function(vo){Object.defineProperty(vo,"__esModule",{value:!0});var Xs=K(),mw={message({keyword:e,schemaCode:t}){let r=e==="maxItems"?"more":"fewer";return Xs.str`must NOT have ${r} than ${t} items`},params:({schemaCode:e})=>Xs._`{limit: ${e}}`},hw={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:mw,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxItems"?Xs.operators.GT:Xs.operators.LT;e.fail$data(Xs._`${r}.length ${n} ${s}`)}};vo.default=hw});var ci=b(function(_o){Object.defineProperty(_o,"__esModule",{value:!0});var mf=Ds();mf.code='require("ajv/dist/runtime/equal").default';_o.default=mf});var hf=b(function(wo){Object.defineProperty(wo,"__esModule",{value:!0});var $o=qs(),Ie=K(),yw=B(),gw=ci(),vw={message:({params:{i:e,j:t}})=>Ie.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>Ie._`{i: ${e}, j: ${t}}`},_w={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:vw,code(e){let{gen:t,data:r,$data:s,schema:n,parentSchema:i,schemaCode:a,it:o}=e;if(!s&&!n)return;let c=t.let("valid"),u=i.items?(0,$o.getSchemaTypes)(i.items):[];e.block$data(c,l,Ie._`${a} === false`),e.ok(c);function l(){let h=t.let("i",Ie._`${r}.length`),p=t.let("j");e.setParams({i:h,j:p}),t.assign(c,!0),t.if(Ie._`${h} > 1`,()=>(d()?v:m)(h,p))}function d(){return u.length>0&&!u.some((h)=>h==="object"||h==="array")}function v(h,p){let _=t.name("item"),w=(0,$o.checkDataTypes)(u,_,o.opts.strictNumbers,$o.DataType.Wrong),k=t.const("indices",Ie._`{}`);t.for(Ie._`;${h}--;`,()=>{if(t.let(_,Ie._`${r}[${h}]`),t.if(w,Ie._`continue`),u.length>1)t.if(Ie._`typeof ${_} == "string"`,Ie._`${_} += "_"`);t.if(Ie._`typeof ${k}[${_}] == "number"`,()=>{t.assign(p,Ie._`${k}[${_}]`),e.error(),t.assign(c,!1).break()}).code(Ie._`${k}[${_}] = ${h}`)})}function m(h,p){let _=(0,yw.useFunc)(t,gw.default),w=t.name("outer");t.label(w).for(Ie._`;${h}--;`,()=>t.for(Ie._`${p} = ${h}; ${p}--;`,()=>t.if(Ie._`${_}(${r}[${h}], ${r}[${p}])`,()=>{e.error(),t.assign(c,!1).break(w)})))}}};wo.default=_w});var yf=b(function(So){Object.defineProperty(So,"__esModule",{value:!0});var bo=K(),$w=B(),ww=ci(),bw={message:"must be equal to constant",params:({schemaCode:e})=>bo._`{allowedValue: ${e}}`},Sw={keyword:"const",$data:!0,error:bw,code(e){let{gen:t,data:r,$data:s,schemaCode:n,schema:i}=e;if(s||i&&typeof i=="object")e.fail$data(bo._`!${(0,$w.useFunc)(t,ww.default)}(${r}, ${n})`);else e.fail(bo._`${i} !== ${r}`)}};So.default=Sw});var gf=b(function(Po){Object.defineProperty(Po,"__esModule",{value:!0});var Zs=K(),Pw=B(),Ew=ci(),kw={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>Zs._`{allowedValues: ${e}}`},Iw={keyword:"enum",schemaType:"array",$data:!0,error:kw,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:a}=e;if(!s&&n.length===0)throw Error("enum must have non-empty array");let o=n.length>=a.opts.loopEnum,c,u=()=>c!==null&&c!==void 0?c:c=(0,Pw.useFunc)(t,Ew.default),l;if(o||s)l=t.let("valid"),e.block$data(l,d);else{if(!Array.isArray(n))throw Error("ajv implementation error");let m=t.const("vSchema",i);l=(0,Zs.or)(...n.map((h,p)=>v(m,p)))}e.pass(l);function d(){t.assign(l,!1),t.forOf("v",i,(m)=>t.if(Zs._`${u()}(${r}, ${m})`,()=>t.assign(l,!0).break()))}function v(m,h){let p=n[h];return typeof p==="object"&&p!==null?Zs._`${u()}(${r}, ${m}[${h}])`:Zs._`${r} === ${p}`}}};Po.default=Iw});var vf=b(function(Eo){Object.defineProperty(Eo,"__esModule",{value:!0});var Tw=nf(),Rw=af(),Ow=uf(),xw=lf(),jw=df(),Cw=ff(),Aw=pf(),Nw=hf(),qw=yf(),Dw=gf(),Mw=[Tw.default,Rw.default,Ow.default,xw.default,jw.default,Cw.default,Aw.default,Nw.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},qw.default,Dw.default];Eo.default=Mw});var Io=b(function(Ys){Object.defineProperty(Ys,"__esModule",{value:!0});Ys.validateAdditionalItems=void 0;var Er=K(),ko=B(),Vw={message:({params:{len:e}})=>Er.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>Er._`{limit: ${e}}`},Uw={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:Vw,code(e){let{parentSchema:t,it:r}=e,{items:s}=t;if(!Array.isArray(s)){(0,ko.checkStrictMode)(r,'"additionalItems" is ignored when "items" is not an array of schemas');return}_f(e,s)}};function _f(e,t){let{gen:r,schema:s,data:n,keyword:i,it:a}=e;a.items=!0;let o=r.const("len",Er._`${n}.length`);if(s===!1)e.setParams({len:t.length}),e.pass(Er._`${o} <= ${t.length}`);else if(typeof s=="object"&&!(0,ko.alwaysValidSchema)(a,s)){let u=r.var("valid",Er._`${o} <= ${t.length}`);r.if((0,Er.not)(u),()=>c(u)),e.ok(u)}function c(u){r.forRange("i",t.length,o,(l)=>{if(e.subschema({keyword:i,dataProp:l,dataPropType:ko.Type.Num},u),!a.allErrors)r.if((0,Er.not)(u),()=>r.break())})}}Ys.validateAdditionalItems=_f;Ys.default=Uw});var To=b(function(en){Object.defineProperty(en,"__esModule",{value:!0});en.validateTuple=void 0;var $f=K(),ui=B(),zw=it(),Fw={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:r}=e;if(Array.isArray(t))return wf(e,"additionalItems",t);if(r.items=!0,(0,ui.alwaysValidSchema)(r,t))return;e.ok((0,zw.validateArray)(e))}};function wf(e,t,r=e.schema){let{gen:s,parentSchema:n,data:i,keyword:a,it:o}=e;if(l(n),o.opts.unevaluated&&r.length&&o.items!==!0)o.items=ui.mergeEvaluated.items(s,r.length,o.items);let c=s.name("valid"),u=s.const("len",$f._`${i}.length`);r.forEach((d,v)=>{if((0,ui.alwaysValidSchema)(o,d))return;s.if($f._`${u} > ${v}`,()=>e.subschema({keyword:a,schemaProp:v,dataProp:v},c)),e.ok(c)});function l(d){let{opts:v,errSchemaPath:m}=o,h=r.length,p=h===d.minItems&&(h===d.maxItems||d[t]===!1);if(v.strictTuples&&!p){let _=`"${a}" is ${h}-tuple, but minItems or maxItems/${t} are not specified or different at path "${m}"`;(0,ui.checkStrictMode)(o,_,v.strictTuples)}}}en.validateTuple=wf;en.default=Fw});var bf=b(function(Ro){Object.defineProperty(Ro,"__esModule",{value:!0});var Lw=To(),Kw={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>(0,Lw.validateTuple)(e,"items")};Ro.default=Kw});var Pf=b(function(Oo){Object.defineProperty(Oo,"__esModule",{value:!0});var Sf=K(),Hw=B(),Gw=it(),Ww=Io(),Jw={message:({params:{len:e}})=>Sf.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>Sf._`{limit: ${e}}`},Qw={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:Jw,code(e){let{schema:t,parentSchema:r,it:s}=e,{prefixItems:n}=r;if(s.items=!0,(0,Hw.alwaysValidSchema)(s,t))return;if(n)(0,Ww.validateAdditionalItems)(e,n);else e.ok((0,Gw.validateArray)(e))}};Oo.default=Qw});var Ef=b(function(xo){Object.defineProperty(xo,"__esModule",{value:!0});var ot=K(),li=B(),Bw={message:({params:{min:e,max:t}})=>t===void 0?ot.str`must contain at least ${e} valid item(s)`:ot.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?ot._`{minContains: ${e}}`:ot._`{minContains: ${e}, maxContains: ${t}}`},Xw={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:Bw,code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e,a,o,{minContains:c,maxContains:u}=s;if(i.opts.next)a=c===void 0?1:c,o=u;else a=1;let l=t.const("len",ot._`${n}.length`);if(e.setParams({min:a,max:o}),o===void 0&&a===0){(0,li.checkStrictMode)(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(o!==void 0&&a>o){(0,li.checkStrictMode)(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if((0,li.alwaysValidSchema)(i,r)){let p=ot._`${l} >= ${a}`;if(o!==void 0)p=ot._`${p} && ${l} <= ${o}`;e.pass(p);return}i.items=!0;let d=t.name("valid");if(o===void 0&&a===1)m(d,()=>t.if(d,()=>t.break()));else if(a===0){if(t.let(d,!0),o!==void 0)t.if(ot._`${n}.length > 0`,v)}else t.let(d,!1),v();e.result(d,()=>e.reset());function v(){let p=t.name("_valid"),_=t.let("count",0);m(p,()=>t.if(p,()=>h(_)))}function m(p,_){t.forRange("i",0,l,(w)=>{e.subschema({keyword:"contains",dataProp:w,dataPropType:li.Type.Num,compositeRule:!0},p),_()})}function h(p){if(t.code(ot._`${p}++`),o===void 0)t.if(ot._`${p} >= ${a}`,()=>t.assign(d,!0).break());else if(t.if(ot._`${p} > ${o}`,()=>t.assign(d,!1).break()),a===1)t.assign(d,!0);else t.if(ot._`${p} >= ${a}`,()=>t.assign(d,!0))}}};xo.default=Xw});var Tf=b(function(jt){Object.defineProperty(jt,"__esModule",{value:!0});jt.validateSchemaDeps=jt.validatePropertyDeps=jt.error=void 0;var jo=K(),Zw=B(),tn=it();jt.error={message:({params:{property:e,depsCount:t,deps:r}})=>{let s=t===1?"property":"properties";return jo.str`must have ${s} ${r} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:r,missingProperty:s}})=>jo._`{property: ${e},
|
|
6
|
-
missingProperty: ${s},
|
|
7
|
-
depsCount: ${t},
|
|
8
|
-
deps: ${r}}`};var Yw={keyword:"dependencies",type:"object",schemaType:"object",error:jt.error,code(e){let[t,r]=e0(e);kf(e,t),If(e,r)}};function e0({schema:e}){let t={},r={};for(let s in e){if(s==="__proto__")continue;let n=Array.isArray(e[s])?t:r;n[s]=e[s]}return[t,r]}function kf(e,t=e.schema){let{gen:r,data:s,it:n}=e;if(Object.keys(t).length===0)return;let i=r.let("missing");for(let a in t){let o=t[a];if(o.length===0)continue;let c=(0,tn.propertyInData)(r,s,a,n.opts.ownProperties);if(e.setParams({property:a,depsCount:o.length,deps:o.join(", ")}),n.allErrors)r.if(c,()=>{for(let u of o)(0,tn.checkReportMissingProp)(e,u)});else r.if(jo._`${c} && (${(0,tn.checkMissingProp)(e,o,i)})`),(0,tn.reportMissingProp)(e,i),r.else()}}jt.validatePropertyDeps=kf;function If(e,t=e.schema){let{gen:r,data:s,keyword:n,it:i}=e,a=r.name("valid");for(let o in t){if((0,Zw.alwaysValidSchema)(i,t[o]))continue;r.if((0,tn.propertyInData)(r,s,o,i.opts.ownProperties),()=>{let c=e.subschema({keyword:n,schemaProp:o},a);e.mergeValidEvaluated(c,a)},()=>r.var(a,!0)),e.ok(a)}}jt.validateSchemaDeps=If;jt.default=Yw});var Of=b(function(Co){Object.defineProperty(Co,"__esModule",{value:!0});var Rf=K(),t0=B(),r0={message:"property name must be valid",params:({params:e})=>Rf._`{propertyName: ${e.propertyName}}`},s0={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:r0,code(e){let{gen:t,schema:r,data:s,it:n}=e;if((0,t0.alwaysValidSchema)(n,r))return;let i=t.name("valid");t.forIn("key",s,(a)=>{e.setParams({propertyName:a}),e.subschema({keyword:"propertyNames",data:a,dataTypes:["string"],propertyName:a,compositeRule:!0},i),t.if((0,Rf.not)(i),()=>{if(e.error(!0),!n.allErrors)t.break()})}),e.ok(i)}};Co.default=s0});var No=b(function(Ao){Object.defineProperty(Ao,"__esModule",{value:!0});var di=it(),gt=K(),n0=Ht(),fi=B(),i0={message:"must NOT have additional properties",params:({params:e})=>gt._`{additionalProperty: ${e.additionalProperty}}`},a0={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:i0,code(e){let{gen:t,schema:r,parentSchema:s,data:n,errsCount:i,it:a}=e;if(!i)throw Error("ajv implementation error");let{allErrors:o,opts:c}=a;if(a.props=!0,c.removeAdditional!=="all"&&(0,fi.alwaysValidSchema)(a,r))return;let u=(0,di.allSchemaProperties)(s.properties),l=(0,di.allSchemaProperties)(s.patternProperties);d(),e.ok(gt._`${i} === ${n0.default.errors}`);function d(){t.forIn("key",n,(_)=>{if(!u.length&&!l.length)h(_);else t.if(v(_),()=>h(_))})}function v(_){let w;if(u.length>8){let k=(0,fi.schemaRefOrVal)(a,s.properties,"properties");w=(0,di.isOwnProperty)(t,k,_)}else if(u.length)w=(0,gt.or)(...u.map((k)=>gt._`${_} === ${k}`));else w=gt.nil;if(l.length)w=(0,gt.or)(w,...l.map((k)=>gt._`${(0,di.usePattern)(e,k)}.test(${_})`));return(0,gt.not)(w)}function m(_){t.code(gt._`delete ${n}[${_}]`)}function h(_){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){m(_);return}if(r===!1){if(e.setParams({additionalProperty:_}),e.error(),!o)t.break();return}if(typeof r=="object"&&!(0,fi.alwaysValidSchema)(a,r)){let w=t.name("valid");if(c.removeAdditional==="failing")p(_,w,!1),t.if((0,gt.not)(w),()=>{e.reset(),m(_)});else if(p(_,w),!o)t.if((0,gt.not)(w),()=>t.break())}}function p(_,w,k){let I={keyword:"additionalProperties",dataProp:_,dataPropType:fi.Type.Str};if(k===!1)Object.assign(I,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(I,w)}}};Ao.default=a0});var Cf=b(function(Do){Object.defineProperty(Do,"__esModule",{value:!0});var o0=zs(),xf=it(),qo=B(),jf=No(),c0={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e;if(i.opts.removeAdditional==="all"&&s.additionalProperties===void 0)jf.default.code(new o0.KeywordCxt(i,jf.default,"additionalProperties"));let a=(0,xf.allSchemaProperties)(r);for(let d of a)i.definedProperties.add(d);if(i.opts.unevaluated&&a.length&&i.props!==!0)i.props=qo.mergeEvaluated.props(t,(0,qo.toHash)(a),i.props);let o=a.filter((d)=>!(0,qo.alwaysValidSchema)(i,r[d]));if(o.length===0)return;let c=t.name("valid");for(let d of o){if(u(d))l(d);else{if(t.if((0,xf.propertyInData)(t,n,d,i.opts.ownProperties)),l(d),!i.allErrors)t.else().var(c,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(c)}function u(d){return i.opts.useDefaults&&!i.compositeRule&&r[d].default!==void 0}function l(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};Do.default=c0});var Df=b(function(Mo){Object.defineProperty(Mo,"__esModule",{value:!0});var Af=it(),pi=K(),Nf=B(),qf=B(),u0={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,data:s,parentSchema:n,it:i}=e,{opts:a}=i,o=(0,Af.allSchemaProperties)(r),c=o.filter((p)=>(0,Nf.alwaysValidSchema)(i,r[p]));if(o.length===0||c.length===o.length&&(!i.opts.unevaluated||i.props===!0))return;let u=a.strictSchema&&!a.allowMatchingProperties&&n.properties,l=t.name("valid");if(i.props!==!0&&!(i.props instanceof pi.Name))i.props=(0,qf.evaluatedPropsToName)(t,i.props);let{props:d}=i;v();function v(){for(let p of o){if(u)m(p);if(i.allErrors)h(p);else t.var(l,!0),h(p),t.if(l)}}function m(p){for(let _ in u)if(new RegExp(p).test(_))(0,Nf.checkStrictMode)(i,`property ${_} matches pattern ${p} (use allowMatchingProperties)`)}function h(p){t.forIn("key",s,(_)=>{t.if(pi._`${(0,Af.usePattern)(e,p)}.test(${_})`,()=>{let w=c.includes(p);if(!w)e.subschema({keyword:"patternProperties",schemaProp:p,dataProp:_,dataPropType:qf.Type.Str},l);if(i.opts.unevaluated&&d!==!0)t.assign(pi._`${d}[${_}]`,!0);else if(!w&&!i.allErrors)t.if((0,pi.not)(l),()=>t.break())})})}}};Mo.default=u0});var Mf=b(function(Vo){Object.defineProperty(Vo,"__esModule",{value:!0});var l0=B(),d0={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:r,it:s}=e;if((0,l0.alwaysValidSchema)(s,r)){e.fail();return}let n=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),e.failResult(n,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};Vo.default=d0});var Vf=b(function(Uo){Object.defineProperty(Uo,"__esModule",{value:!0});var f0=it(),p0={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:f0.validateUnion,error:{message:"must match a schema in anyOf"}};Uo.default=p0});var Uf=b(function(zo){Object.defineProperty(zo,"__esModule",{value:!0});var mi=K(),m0=B(),h0={message:"must match exactly one schema in oneOf",params:({params:e})=>mi._`{passingSchemas: ${e.passing}}`},y0={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:h0,code(e){let{gen:t,schema:r,parentSchema:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(n.opts.discriminator&&s.discriminator)return;let i=r,a=t.let("valid",!1),o=t.let("passing",null),c=t.name("_valid");e.setParams({passing:o}),t.block(u),e.result(a,()=>e.reset(),()=>e.error(!0));function u(){i.forEach((l,d)=>{let v;if((0,m0.alwaysValidSchema)(n,l))t.var(c,!0);else v=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c);if(d>0)t.if(mi._`${c} && ${a}`).assign(a,!1).assign(o,mi._`[${o}, ${d}]`).else();t.if(c,()=>{if(t.assign(a,!0),t.assign(o,d),v)e.mergeEvaluated(v,mi.Name)})})}}};zo.default=y0});var zf=b(function(Fo){Object.defineProperty(Fo,"__esModule",{value:!0});var g0=B(),v0={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:r,it:s}=e;if(!Array.isArray(r))throw Error("ajv implementation error");let n=t.name("valid");r.forEach((i,a)=>{if((0,g0.alwaysValidSchema)(s,i))return;let o=e.subschema({keyword:"allOf",schemaProp:a},n);e.ok(n),e.mergeEvaluated(o)})}};Fo.default=v0});var Kf=b(function(Lo){Object.defineProperty(Lo,"__esModule",{value:!0});var hi=K(),Lf=B(),_0={message:({params:e})=>hi.str`must match "${e.ifClause}" schema`,params:({params:e})=>hi._`{failingKeyword: ${e.ifClause}}`},$0={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:_0,code(e){let{gen:t,parentSchema:r,it:s}=e;if(r.then===void 0&&r.else===void 0)(0,Lf.checkStrictMode)(s,'"if" without "then" and "else" is ignored');let n=Ff(s,"then"),i=Ff(s,"else");if(!n&&!i)return;let a=t.let("valid",!0),o=t.name("_valid");if(c(),e.reset(),n&&i){let l=t.let("ifClause");e.setParams({ifClause:l}),t.if(o,u("then",l),u("else",l))}else if(n)t.if(o,u("then"));else t.if((0,hi.not)(o),u("else"));e.pass(a,()=>e.error(!0));function c(){let l=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},o);e.mergeEvaluated(l)}function u(l,d){return()=>{let v=e.subschema({keyword:l},o);if(t.assign(a,o),e.mergeValidEvaluated(v,a),d)t.assign(d,hi._`${l}`);else e.setParams({ifClause:l})}}}};function Ff(e,t){let r=e.schema[t];return r!==void 0&&!(0,Lf.alwaysValidSchema)(e,r)}Lo.default=$0});var Hf=b(function(Ko){Object.defineProperty(Ko,"__esModule",{value:!0});var w0=B(),b0={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){if(t.if===void 0)(0,w0.checkStrictMode)(r,`"${e}" without "if" is ignored`)}};Ko.default=b0});var Gf=b(function(Ho){Object.defineProperty(Ho,"__esModule",{value:!0});var S0=Io(),P0=bf(),E0=To(),k0=Pf(),I0=Ef(),T0=Tf(),R0=Of(),O0=No(),x0=Cf(),j0=Df(),C0=Mf(),A0=Vf(),N0=Uf(),q0=zf(),D0=Kf(),M0=Hf();function V0(e=!1){let t=[C0.default,A0.default,N0.default,q0.default,D0.default,M0.default,R0.default,O0.default,T0.default,x0.default,j0.default];if(e)t.push(P0.default,k0.default);else t.push(S0.default,E0.default);return t.push(I0.default),t}Ho.default=V0});var Wf=b(function(Go){Object.defineProperty(Go,"__esModule",{value:!0});var we=K(),U0={message:({schemaCode:e})=>we.str`must match format "${e}"`,params:({schemaCode:e})=>we._`{format: ${e}}`},z0={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:U0,code(e,t){let{gen:r,data:s,$data:n,schema:i,schemaCode:a,it:o}=e,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=o;if(!c.validateFormats)return;if(n)v();else m();function v(){let h=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),p=r.const("fDef",we._`${h}[${a}]`),_=r.let("fType"),w=r.let("format");r.if(we._`typeof ${p} == "object" && !(${p} instanceof RegExp)`,()=>r.assign(_,we._`${p}.type || "string"`).assign(w,we._`${p}.validate`),()=>r.assign(_,we._`"string"`).assign(w,p)),e.fail$data((0,we.or)(k(),I()));function k(){if(c.strictSchema===!1)return we.nil;return we._`${a} && !${w}`}function I(){let R=l.$async?we._`(${p}.async ? await ${w}(${s}) : ${w}(${s}))`:we._`${w}(${s})`,S=we._`(typeof ${w} == "function" ? ${R} : ${w}.test(${s}))`;return we._`${w} && ${w} !== true && ${_} === ${t} && !${S}`}}function m(){let h=d.formats[i];if(!h){k();return}if(h===!0)return;let[p,_,w]=I(h);if(p===t)e.pass(R());function k(){if(c.strictSchema===!1){d.logger.warn(S());return}throw Error(S());function S(){return`unknown format "${i}" ignored in schema at path "${u}"`}}function I(S){let O=S instanceof RegExp?(0,we.regexpCode)(S):c.code.formats?we._`${c.code.formats}${(0,we.getProperty)(i)}`:void 0,L=r.scopeValue("formats",{key:i,ref:S,code:O});if(typeof S=="object"&&!(S instanceof RegExp))return[S.type||"string",S.validate,we._`${L}.validate`];return["string",S,L]}function R(){if(typeof h=="object"&&!(h instanceof RegExp)&&h.async){if(!l.$async)throw Error("async format in sync schema");return we._`await ${w}(${s})`}return typeof _=="function"?we._`${w}(${s})`:we._`${w}.test(${s})`}}}};Go.default=z0});var Jf=b(function(Wo){Object.defineProperty(Wo,"__esModule",{value:!0});var F0=Wf(),L0=[F0.default];Wo.default=L0});var Qf=b(function(es){Object.defineProperty(es,"__esModule",{value:!0});es.contentVocabulary=es.metadataVocabulary=void 0;es.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];es.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var Xf=b(function(Jo){Object.defineProperty(Jo,"__esModule",{value:!0});var K0=sf(),H0=vf(),G0=Gf(),W0=Jf(),Bf=Qf(),J0=[K0.default,H0.default,(0,G0.default)(),W0.default,Bf.metadataVocabulary,Bf.contentVocabulary];Jo.default=J0});var Yf=b(function(yi){Object.defineProperty(yi,"__esModule",{value:!0});yi.DiscrError=void 0;var Zf;(function(e){e.Tag="tag",e.Mapping="mapping"})(Zf||(yi.DiscrError=Zf={}))});var tp=b(function(Bo){Object.defineProperty(Bo,"__esModule",{value:!0});var ts=K(),Qo=Yf(),ep=Xn(),Q0=Fs(),B0=B(),X0={message:({params:{discrError:e,tagName:t}})=>e===Qo.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>ts._`{error: ${e}, tag: ${r}, tagValue: ${t}}`},Z0={keyword:"discriminator",type:"object",schemaType:"object",error:X0,code(e){let{gen:t,data:r,schema:s,parentSchema:n,it:i}=e,{oneOf:a}=n;if(!i.opts.discriminator)throw Error("discriminator: requires discriminator option");let o=s.propertyName;if(typeof o!="string")throw Error("discriminator: requires propertyName");if(s.mapping)throw Error("discriminator: mapping is not supported");if(!a)throw Error("discriminator: requires oneOf keyword");let c=t.let("valid",!1),u=t.const("tag",ts._`${r}${(0,ts.getProperty)(o)}`);t.if(ts._`typeof ${u} == "string"`,()=>l(),()=>e.error(!1,{discrError:Qo.DiscrError.Tag,tag:u,tagName:o})),e.ok(c);function l(){let m=v();t.if(!1);for(let h in m)t.elseIf(ts._`${u} === ${h}`),t.assign(c,d(m[h]));t.else(),e.error(!1,{discrError:Qo.DiscrError.Mapping,tag:u,tagName:o}),t.endIf()}function d(m){let h=t.name("valid"),p=e.subschema({keyword:"oneOf",schemaProp:m},h);return e.mergeEvaluated(p,ts.Name),h}function v(){var m;let h={},p=w(n),_=!0;for(let R=0;R<a.length;R++){let S=a[R];if((S===null||S===void 0?void 0:S.$ref)&&!(0,B0.schemaHasRulesButRef)(S,i.self.RULES)){let L=S.$ref;if(S=ep.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,L),S instanceof ep.SchemaEnv)S=S.schema;if(S===void 0)throw new Q0.default(i.opts.uriResolver,i.baseId,L)}let O=(m=S===null||S===void 0?void 0:S.properties)===null||m===void 0?void 0:m[o];if(typeof O!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${o}"`);_=_&&(p||w(S)),k(O,R)}if(!_)throw Error(`discriminator: "${o}" must be required`);return h;function w({required:R}){return Array.isArray(R)&&R.includes(o)}function k(R,S){if(R.const)I(R.const,S);else if(R.enum)for(let O of R.enum)I(O,S);else throw Error(`discriminator: "properties/${o}" must have "const" or "enum"`)}function I(R,S){if(typeof R!="string"||R in h)throw Error(`discriminator: "${o}" values must be unique strings`);h[R]=S}}}};Bo.default=Z0});var rp=b(function(AT,Y0){Y0.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Zo=b(function(me,Xo){Object.defineProperty(me,"__esModule",{value:!0});me.MissingRefError=me.ValidationError=me.CodeGen=me.Name=me.nil=me.stringify=me.str=me._=me.KeywordCxt=me.Ajv=void 0;var eb=Xd(),tb=Xf(),rb=tp(),sp=rp(),sb=["/properties"],gi="http://json-schema.org/draft-07/schema";class rn extends eb.default{_addVocabularies(){if(super._addVocabularies(),tb.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(rb.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(sp,sb):sp;this.addMetaSchema(e,gi,!1),this.refs["http://json-schema.org/schema"]=gi}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(gi)?gi:void 0)}}me.Ajv=rn;Xo.exports=me=rn;Xo.exports.Ajv=rn;Object.defineProperty(me,"__esModule",{value:!0});me.default=rn;var nb=zs();Object.defineProperty(me,"KeywordCxt",{enumerable:!0,get:function(){return nb.KeywordCxt}});var rs=K();Object.defineProperty(me,"_",{enumerable:!0,get:function(){return rs._}});Object.defineProperty(me,"str",{enumerable:!0,get:function(){return rs.str}});Object.defineProperty(me,"stringify",{enumerable:!0,get:function(){return rs.stringify}});Object.defineProperty(me,"nil",{enumerable:!0,get:function(){return rs.nil}});Object.defineProperty(me,"Name",{enumerable:!0,get:function(){return rs.Name}});Object.defineProperty(me,"CodeGen",{enumerable:!0,get:function(){return rs.CodeGen}});var ib=Qn();Object.defineProperty(me,"ValidationError",{enumerable:!0,get:function(){return ib.default}});var ab=Fs();Object.defineProperty(me,"MissingRefError",{enumerable:!0,get:function(){return ab.default}})});var mp=b(function(Ct){Object.defineProperty(Ct,"__esModule",{value:!0});Ct.formatNames=Ct.fastFormats=Ct.fullFormats=void 0;function ss(e,t){return{validate:e,compare:t}}Ct.fullFormats={date:ss(dp,nc),time:ss(fp,ic),"date-time":ss(hb,pp),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:vb,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:Eb,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:_b,int32:{type:"number",validate:bb},int64:{type:"number",validate:Sb},float:{type:"number",validate:lp},double:{type:"number",validate:lp},password:!0,binary:!0};Ct.fastFormats={...Ct.fullFormats,date:ss(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,nc),time:ss(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,ic),"date-time":ss(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,pp),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};Ct.formatNames=Object.keys(Ct.fullFormats);function fb(e){return e%4===0&&(e%100!==0||e%400===0)}var pb=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,mb=[0,31,28,31,30,31,30,31,31,30,31,30,31];function dp(e){let t=pb.exec(e);if(!t)return!1;let r=+t[1],s=+t[2],n=+t[3];return s>=1&&s<=12&&n>=1&&n<=(s===2&&fb(r)?29:mb[s])}function nc(e,t){if(!(e&&t))return;if(e>t)return 1;if(e<t)return-1;return 0}var rc=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;function fp(e,t){let r=rc.exec(e);if(!r)return!1;let s=+r[1],n=+r[2],i=+r[3],a=r[5];return(s<=23&&n<=59&&i<=59||s===23&&n===59&&i===60)&&(!t||a!=="")}function ic(e,t){if(!(e&&t))return;let r=rc.exec(e),s=rc.exec(t);if(!(r&&s))return;if(e=r[1]+r[2]+r[3]+(r[4]||""),t=s[1]+s[2]+s[3]+(s[4]||""),e>t)return 1;if(e<t)return-1;return 0}var sc=/t|\s/i;function hb(e){let t=e.split(sc);return t.length===2&&dp(t[0])&&fp(t[1],!0)}function pp(e,t){if(!(e&&t))return;let[r,s]=e.split(sc),[n,i]=t.split(sc),a=nc(r,n);if(a===void 0)return;return a||ic(s,i)}var yb=/\/|:/,gb=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function vb(e){return yb.test(e)&&gb.test(e)}var up=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function _b(e){return up.lastIndex=0,up.test(e)}var $b=-2147483648,wb=2147483647;function bb(e){return Number.isInteger(e)&&e<=wb&&e>=$b}function Sb(e){return Number.isInteger(e)}function lp(){return!0}var Pb=/[^\\]\\Z/;function Eb(e){if(Pb.test(e))return!1;try{return new RegExp(e),!0}catch(t){return!1}}});var nn=b(function(te){Object.defineProperty(te,"__esModule",{value:!0});te.regexpCode=te.getEsmExportName=te.getProperty=te.safeStringify=te.stringify=te.strConcat=te.addCodeArg=te.str=te._=te.nil=te._Code=te.Name=te.IDENTIFIER=te._CodeOrName=void 0;class wi{}te._CodeOrName=wi;te.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class ns extends wi{constructor(e){super();if(!te.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}te.Name=ns;class vt extends wi{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,r)=>`${t}${r}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,r)=>{if(r instanceof ns)t[r.str]=(t[r.str]||0)+1;return t},{})}}te._Code=vt;te.nil=new vt("");function hp(e,...t){let r=[e[0]],s=0;while(s<t.length)oc(r,t[s]),r.push(e[++s]);return new vt(r)}te._=hp;var ac=new vt("+");function yp(e,...t){let r=[sn(e[0])],s=0;while(s<t.length)r.push(ac),oc(r,t[s]),r.push(ac,sn(e[++s]));return kb(r),new vt(r)}te.str=yp;function oc(e,t){if(t instanceof vt)e.push(...t._items);else if(t instanceof ns)e.push(t);else e.push(Rb(t))}te.addCodeArg=oc;function kb(e){let t=1;while(t<e.length-1){if(e[t]===ac){let r=Ib(e[t-1],e[t+1]);if(r!==void 0){e.splice(t-1,3,r);continue}e[t++]="+"}t++}}function Ib(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof ns||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof ns))return`"${e}${t.slice(1)}`;return}function Tb(e,t){return t.emptyStr()?e:e.emptyStr()?t:yp`${e}${t}`}te.strConcat=Tb;function Rb(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:sn(Array.isArray(e)?e.join(","):e)}function Ob(e){return new vt(sn(e))}te.stringify=Ob;function sn(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}te.safeStringify=sn;function xb(e){return typeof e=="string"&&te.IDENTIFIER.test(e)?new vt(`.${e}`):hp`[${e}]`}te.getProperty=xb;function jb(e){if(typeof e=="string"&&te.IDENTIFIER.test(e))return new vt(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}te.getEsmExportName=jb;function Cb(e){return new vt(e.toString())}te.regexpCode=Cb});var dc=b(function(ze){Object.defineProperty(ze,"__esModule",{value:!0});ze.ValueScope=ze.ValueScopeName=ze.Scope=ze.varKinds=ze.UsedValueState=void 0;var Be=nn();class gp extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var cc;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(cc=ze.UsedValueState||(ze.UsedValueState={}));ze.varKinds={const:new Be.Name("const"),let:new Be.Name("let"),var:new Be.Name("var")};class uc{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof Be.Name?e:this.name(e)}name(e){return new Be.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,r;if(((r=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||r===void 0?void 0:r.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}ze.Scope=uc;class lc extends Be.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=Be._`.${new Be.Name(t)}[${r}]`}}ze.ValueScopeName=lc;var Ab=Be._`\n`;class vp extends uc{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?Ab:Be.nil}}get(){return this._scope}name(e){return new lc(e,this._newName(e))}value(e,t){var r;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let s=this.toName(e),{prefix:n}=s,i=(r=t.key)!==null&&r!==void 0?r:t.ref,a=this._values[n];if(a){let u=a.get(i);if(u)return u}else a=this._values[n]=new Map;a.set(i,s);let o=this._scope[n]||(this._scope[n]=[]),c=o.length;return o[c]=t.ref,s.setValue(t,{property:n,itemIndex:c}),s}getValue(e,t){let r=this._values[e];if(!r)return;return r.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(r)=>{if(r.scopePath===void 0)throw Error(`CodeGen: name "${r}" has no value`);return Be._`${e}${r.scopePath}`})}scopeCode(e=this._values,t,r){return this._reduceValues(e,(s)=>{if(s.value===void 0)throw Error(`CodeGen: name "${s}" has no value`);return s.value.code},t,r)}_reduceValues(e,t,r={},s){let n=Be.nil;for(let i in e){let a=e[i];if(!a)continue;let o=r[i]=r[i]||new Map;a.forEach((c)=>{if(o.has(c))return;o.set(c,cc.Started);let u=t(c);if(u){let l=this.opts.es5?ze.varKinds.var:ze.varKinds.const;n=Be._`${n}${l} ${c} = ${u};${this.opts._n}`}else if(u=s===null||s===void 0?void 0:s(c))n=Be._`${n}${u}${this.opts._n}`;else throw new gp(c);o.set(c,cc.Completed)})}return n}}ze.ValueScope=vp});var M=b(function(z){Object.defineProperty(z,"__esModule",{value:!0});z.or=z.and=z.not=z.CodeGen=z.operators=z.varKinds=z.ValueScopeName=z.ValueScope=z.Scope=z.Name=z.regexpCode=z.stringify=z.getProperty=z.nil=z.strConcat=z.str=z._=void 0;var J=nn(),_t=dc(),or=nn();Object.defineProperty(z,"_",{enumerable:!0,get:function(){return or._}});Object.defineProperty(z,"str",{enumerable:!0,get:function(){return or.str}});Object.defineProperty(z,"strConcat",{enumerable:!0,get:function(){return or.strConcat}});Object.defineProperty(z,"nil",{enumerable:!0,get:function(){return or.nil}});Object.defineProperty(z,"getProperty",{enumerable:!0,get:function(){return or.getProperty}});Object.defineProperty(z,"stringify",{enumerable:!0,get:function(){return or.stringify}});Object.defineProperty(z,"regexpCode",{enumerable:!0,get:function(){return or.regexpCode}});Object.defineProperty(z,"Name",{enumerable:!0,get:function(){return or.Name}});var Ii=dc();Object.defineProperty(z,"Scope",{enumerable:!0,get:function(){return Ii.Scope}});Object.defineProperty(z,"ValueScope",{enumerable:!0,get:function(){return Ii.ValueScope}});Object.defineProperty(z,"ValueScopeName",{enumerable:!0,get:function(){return Ii.ValueScopeName}});Object.defineProperty(z,"varKinds",{enumerable:!0,get:function(){return Ii.varKinds}});z.operators={GT:new J._Code(">"),GTE:new J._Code(">="),LT:new J._Code("<"),LTE:new J._Code("<="),EQ:new J._Code("==="),NEQ:new J._Code("!=="),NOT:new J._Code("!"),OR:new J._Code("||"),AND:new J._Code("&&"),ADD:new J._Code("+")};class cr{optimizeNodes(){return this}optimizeNames(e,t){return this}}class _p extends cr{constructor(e,t,r){super();this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){let r=e?_t.varKinds.var:this.varKind,s=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${s};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=as(this.rhs,e,t);return this}get names(){return this.rhs instanceof J._CodeOrName?this.rhs.names:{}}}class mc extends cr{constructor(e,t,r){super();this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof J.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=as(this.rhs,e,t),this}get names(){let e=this.lhs instanceof J.Name?{}:{...this.lhs.names};return ki(e,this.rhs)}}class $p extends mc{constructor(e,t,r,s){super(e,r,s);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class wp extends cr{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class bp extends cr{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class Sp extends cr{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class Pp extends cr{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=as(this.code,e,t),this}get names(){return this.code instanceof J._CodeOrName?this.code.names:{}}}class Ti extends cr{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,r)=>t+r.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let r=e[t].optimizeNodes();if(Array.isArray(r))e.splice(t,1,...r);else if(r)e[t]=r;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:r}=this,s=r.length;while(s--){let n=r[s];if(n.optimizeNames(e,t))continue;Nb(e,n.names),r.splice(s,1)}return r.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>kr(e,t.names),{})}}class ur extends Ti{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Ep extends Ti{}class an extends ur{}an.kind="else";class Jt extends ur{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let r=t.optimizeNodes();t=this.else=Array.isArray(r)?new an(r):r}if(t){if(e===!1)return t instanceof Jt?t:t.nodes;if(this.nodes.length)return this;return new Jt(Op(e),t instanceof Jt?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=as(this.condition,e,t),this}get names(){let e=super.names;if(ki(e,this.condition),this.else)kr(e,this.else.names);return e}}Jt.kind="if";class is extends ur{}is.kind="for";class kp extends is{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=as(this.iteration,e,t),this}get names(){return kr(super.names,this.iteration.names)}}class Ip extends is{constructor(e,t,r,s){super();this.varKind=e,this.name=t,this.from=r,this.to=s}render(e){let t=e.es5?_t.varKinds.var:this.varKind,{name:r,from:s,to:n}=this;return`for(${t} ${r}=${s}; ${r}<${n}; ${r}++)`+super.render(e)}get names(){let e=ki(super.names,this.from);return ki(e,this.to)}}class fc extends is{constructor(e,t,r,s){super();this.loop=e,this.varKind=t,this.name=r,this.iterable=s}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=as(this.iterable,e,t),this}get names(){return kr(super.names,this.iterable.names)}}class bi extends ur{constructor(e,t,r){super();this.name=e,this.args=t,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}bi.kind="func";class Si extends Ti{render(e){return"return "+super.render(e)}}Si.kind="return";class Tp extends ur{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var r,s;return super.optimizeNames(e,t),(r=this.catch)===null||r===void 0||r.optimizeNames(e,t),(s=this.finally)===null||s===void 0||s.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)kr(e,this.catch.names);if(this.finally)kr(e,this.finally.names);return e}}class Pi extends ur{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}Pi.kind="catch";class Ei extends ur{render(e){return"finally"+super.render(e)}}Ei.kind="finally";class Rp{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
|
|
9
|
-
`:""},this._extScope=e,this._scope=new _t.Scope({parent:e}),this._nodes=[new Ep]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let r=this._extScope.value(e,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,s){let n=this._scope.toName(t);if(r!==void 0&&s)this._constants[n.str]=r;return this._leafNode(new _p(e,n,r)),n}const(e,t,r){return this._def(_t.varKinds.const,e,t,r)}let(e,t,r){return this._def(_t.varKinds.let,e,t,r)}var(e,t,r){return this._def(_t.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new mc(e,t,r))}add(e,t){return this._leafNode(new $p(e,z.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==J.nil)this._leafNode(new Pp(e));return this}object(...e){let t=["{"];for(let[r,s]of e){if(t.length>1)t.push(",");if(t.push(r),r!==s||this.opts.es5)t.push(":"),(0,J.addCodeArg)(t,s)}return t.push("}"),new J._Code(t)}if(e,t,r){if(this._blockNode(new Jt(e)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Jt(e))}else(){return this._elseNode(new an)}endIf(){return this._endBlockNode(Jt,an)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new kp(e),t)}forRange(e,t,r,s,n=this.opts.es5?_t.varKinds.var:_t.varKinds.let){let i=this._scope.toName(e);return this._for(new Ip(n,i,t,r),()=>s(i))}forOf(e,t,r,s=_t.varKinds.const){let n=this._scope.toName(e);if(this.opts.es5){let i=t instanceof J.Name?t:this.var("_arr",t);return this.forRange("_i",0,J._`${i}.length`,(a)=>{this.var(n,J._`${i}[${a}]`),r(n)})}return this._for(new fc("of",s,n,t),()=>r(n))}forIn(e,t,r,s=this.opts.es5?_t.varKinds.var:_t.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,J._`Object.keys(${t})`,r);let n=this._scope.toName(e);return this._for(new fc("in",s,n,t),()=>r(n))}endFor(){return this._endBlockNode(is)}label(e){return this._leafNode(new wp(e))}break(e){return this._leafNode(new bp(e))}return(e){let t=new Si;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(Si)}try(e,t,r){if(!t&&!r)throw Error('CodeGen: "try" without "catch" and "finally"');let s=new Tp;if(this._blockNode(s),this.code(e),t){let n=this.name("e");this._currNode=s.catch=new Pi(n),t(n)}if(r)this._currNode=s.finally=new Ei,this.code(r);return this._endBlockNode(Pi,Ei)}throw(e){return this._leafNode(new Sp(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||e!==void 0&&r!==e)throw Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=J.nil,r,s){if(this._blockNode(new bi(e,t,r)),s)this.code(s).endFunc();return this}endFunc(){return this._endBlockNode(bi)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let r=this._currNode;if(r instanceof e||t&&r instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof Jt))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}z.CodeGen=Rp;function kr(e,t){for(let r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function ki(e,t){return t instanceof J._CodeOrName?kr(e,t.names):e}function as(e,t,r){if(e instanceof J.Name)return s(e);if(!n(e))return e;return new J._Code(e._items.reduce((i,a)=>{if(a instanceof J.Name)a=s(a);if(a instanceof J._Code)i.push(...a._items);else i.push(a);return i},[]));function s(i){let a=r[i.str];if(a===void 0||t[i.str]!==1)return i;return delete t[i.str],a}function n(i){return i instanceof J._Code&&i._items.some((a)=>a instanceof J.Name&&t[a.str]===1&&r[a.str]!==void 0)}}function Nb(e,t){for(let r in t)e[r]=(e[r]||0)-(t[r]||0)}function Op(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:J._`!${pc(e)}`}z.not=Op;var qb=xp(z.operators.AND);function Db(...e){return e.reduce(qb)}z.and=Db;var Mb=xp(z.operators.OR);function Vb(...e){return e.reduce(Mb)}z.or=Vb;function xp(e){return(t,r)=>t===J.nil?r:r===J.nil?t:J._`${pc(t)} ${e} ${pc(r)}`}function pc(e){return e instanceof J.Name?e:J._`(${e})`}});var re=b(function(F){Object.defineProperty(F,"__esModule",{value:!0});F.checkStrictMode=F.getErrorPath=F.Type=F.useFunc=F.setEvaluated=F.evaluatedPropsToName=F.mergeEvaluated=F.eachItem=F.unescapeJsonPointer=F.escapeJsonPointer=F.escapeFragment=F.unescapeFragment=F.schemaRefOrVal=F.schemaHasRulesButRef=F.schemaHasRules=F.checkUnknownRules=F.alwaysValidSchema=F.toHash=void 0;var fe=M(),Ub=nn();function zb(e){let t={};for(let r of e)t[r]=!0;return t}F.toHash=zb;function Fb(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return Ap(e,t),!Np(t,e.self.RULES.all)}F.alwaysValidSchema=Fb;function Ap(e,t=e.schema){let{opts:r,self:s}=e;if(!r.strictSchema)return;if(typeof t==="boolean")return;let n=s.RULES.keywords;for(let i in t)if(!n[i])Vp(e,`unknown keyword: "${i}"`)}F.checkUnknownRules=Ap;function Np(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(t[r])return!0;return!1}F.schemaHasRules=Np;function Lb(e,t){if(typeof e=="boolean")return!e;for(let r in e)if(r!=="$ref"&&t.all[r])return!0;return!1}F.schemaHasRulesButRef=Lb;function Kb({topSchemaRef:e,schemaPath:t},r,s,n){if(!n){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return fe._`${r}`}return fe._`${e}${t}${(0,fe.getProperty)(s)}`}F.schemaRefOrVal=Kb;function Hb(e){return qp(decodeURIComponent(e))}F.unescapeFragment=Hb;function Gb(e){return encodeURIComponent(hc(e))}F.escapeFragment=Gb;function hc(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}F.escapeJsonPointer=hc;function qp(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}F.unescapeJsonPointer=qp;function Wb(e,t){if(Array.isArray(e))for(let r of e)t(r);else t(e)}F.eachItem=Wb;function jp({mergeNames:e,mergeToName:t,mergeValues:r,resultToName:s}){return(n,i,a,o)=>{let c=a===void 0?i:a instanceof fe.Name?(i instanceof fe.Name?e(n,i,a):t(n,i,a),a):i instanceof fe.Name?(t(n,a,i),i):r(i,a);return o===fe.Name&&!(c instanceof fe.Name)?s(n,c):c}}F.mergeEvaluated={props:jp({mergeNames:(e,t,r)=>e.if(fe._`${r} !== true && ${t} !== undefined`,()=>{e.if(fe._`${t} === true`,()=>e.assign(r,!0),()=>e.assign(r,fe._`${r} || {}`).code(fe._`Object.assign(${r}, ${t})`))}),mergeToName:(e,t,r)=>e.if(fe._`${r} !== true`,()=>{if(t===!0)e.assign(r,!0);else e.assign(r,fe._`${r} || {}`),yc(e,r,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:Dp}),items:jp({mergeNames:(e,t,r)=>e.if(fe._`${r} !== true && ${t} !== undefined`,()=>e.assign(r,fe._`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`)),mergeToName:(e,t,r)=>e.if(fe._`${r} !== true`,()=>e.assign(r,t===!0?!0:fe._`${r} > ${t} ? ${r} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function Dp(e,t){if(t===!0)return e.var("props",!0);let r=e.var("props",fe._`{}`);if(t!==void 0)yc(e,r,t);return r}F.evaluatedPropsToName=Dp;function yc(e,t,r){Object.keys(r).forEach((s)=>e.assign(fe._`${t}${(0,fe.getProperty)(s)}`,!0))}F.setEvaluated=yc;var Cp={};function Jb(e,t){return e.scopeValue("func",{ref:t,code:Cp[t.code]||(Cp[t.code]=new Ub._Code(t.code))})}F.useFunc=Jb;var Mp;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(Mp=F.Type||(F.Type={}));function Qb(e,t,r){if(e instanceof fe.Name){let s=t===Mp.Num;return r?s?fe._`"[" + ${e} + "]"`:fe._`"['" + ${e} + "']"`:s?fe._`"/" + ${e}`:fe._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?(0,fe.getProperty)(e).toString():"/"+hc(e)}F.getErrorPath=Qb;function Vp(e,t,r=e.opts.strictSchema){if(!r)return;if(t=`strict mode: ${t}`,r===!0)throw Error(t);e.self.logger.warn(t)}F.checkStrictMode=Vp});var Qt=b(function(gc){Object.defineProperty(gc,"__esModule",{value:!0});var Ne=M(),Bb={data:new Ne.Name("data"),valCxt:new Ne.Name("valCxt"),instancePath:new Ne.Name("instancePath"),parentData:new Ne.Name("parentData"),parentDataProperty:new Ne.Name("parentDataProperty"),rootData:new Ne.Name("rootData"),dynamicAnchors:new Ne.Name("dynamicAnchors"),vErrors:new Ne.Name("vErrors"),errors:new Ne.Name("errors"),this:new Ne.Name("this"),self:new Ne.Name("self"),scope:new Ne.Name("scope"),json:new Ne.Name("json"),jsonPos:new Ne.Name("jsonPos"),jsonLen:new Ne.Name("jsonLen"),jsonPart:new Ne.Name("jsonPart")};gc.default=Bb});var on=b(function(qe){Object.defineProperty(qe,"__esModule",{value:!0});qe.extendErrors=qe.resetErrorsCount=qe.reportExtraError=qe.reportError=qe.keyword$DataError=qe.keywordError=void 0;var Z=M(),Ri=re(),Fe=Qt();qe.keywordError={message:({keyword:e})=>Z.str`must pass "${e}" keyword validation`};qe.keyword$DataError={message:({keyword:e,schemaType:t})=>t?Z.str`"${e}" keyword must be ${t} ($data)`:Z.str`"${e}" keyword is invalid ($data)`};function Xb(e,t=qe.keywordError,r,s){let{it:n}=e,{gen:i,compositeRule:a,allErrors:o}=n,c=Fp(e,t,r);if(s!==null&&s!==void 0?s:a||o)Up(i,c);else zp(n,Z._`[${c}]`)}qe.reportError=Xb;function Zb(e,t=qe.keywordError,r){let{it:s}=e,{gen:n,compositeRule:i,allErrors:a}=s,o=Fp(e,t,r);if(Up(n,o),!(i||a))zp(s,Fe.default.vErrors)}qe.reportExtraError=Zb;function Yb(e,t){e.assign(Fe.default.errors,t),e.if(Z._`${Fe.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(Z._`${Fe.default.vErrors}.length`,t),()=>e.assign(Fe.default.vErrors,null)))}qe.resetErrorsCount=Yb;function eS({gen:e,keyword:t,schemaValue:r,data:s,errsCount:n,it:i}){if(n===void 0)throw Error("ajv implementation error");let a=e.name("err");e.forRange("i",n,Fe.default.errors,(o)=>{if(e.const(a,Z._`${Fe.default.vErrors}[${o}]`),e.if(Z._`${a}.instancePath === undefined`,()=>e.assign(Z._`${a}.instancePath`,(0,Z.strConcat)(Fe.default.instancePath,i.errorPath))),e.assign(Z._`${a}.schemaPath`,Z.str`${i.errSchemaPath}/${t}`),i.opts.verbose)e.assign(Z._`${a}.schema`,r),e.assign(Z._`${a}.data`,s)})}qe.extendErrors=eS;function Up(e,t){let r=e.const("err",t);e.if(Z._`${Fe.default.vErrors} === null`,()=>e.assign(Fe.default.vErrors,Z._`[${r}]`),Z._`${Fe.default.vErrors}.push(${r})`),e.code(Z._`${Fe.default.errors}++`)}function zp(e,t){let{gen:r,validateName:s,schemaEnv:n}=e;if(n.$async)r.throw(Z._`new ${e.ValidationError}(${t})`);else r.assign(Z._`${s}.errors`,t),r.return(!1)}var Ir={keyword:new Z.Name("keyword"),schemaPath:new Z.Name("schemaPath"),params:new Z.Name("params"),propertyName:new Z.Name("propertyName"),message:new Z.Name("message"),schema:new Z.Name("schema"),parentSchema:new Z.Name("parentSchema")};function Fp(e,t,r){let{createErrors:s}=e.it;if(s===!1)return Z._`{}`;return tS(e,t,r)}function tS(e,t,r={}){let{gen:s,it:n}=e,i=[rS(n,r),sS(e,r)];return nS(e,t,i),s.object(...i)}function rS({errorPath:e},{instancePath:t}){let r=t?Z.str`${e}${(0,Ri.getErrorPath)(t,Ri.Type.Str)}`:e;return[Fe.default.instancePath,(0,Z.strConcat)(Fe.default.instancePath,r)]}function sS({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:s}){let n=s?t:Z.str`${t}/${e}`;if(r)n=Z.str`${n}${(0,Ri.getErrorPath)(r,Ri.Type.Str)}`;return[Ir.schemaPath,n]}function nS(e,{params:t,message:r},s){let{keyword:n,data:i,schemaValue:a,it:o}=e,{opts:c,propertyName:u,topSchemaRef:l,schemaPath:d}=o;if(s.push([Ir.keyword,n],[Ir.params,typeof t=="function"?t(e):t||Z._`{}`]),c.messages)s.push([Ir.message,typeof r=="function"?r(e):r]);if(c.verbose)s.push([Ir.schema,a],[Ir.parentSchema,Z._`${l}${d}`],[Fe.default.data,i]);if(u)s.push([Ir.propertyName,u])}});var Kp=b(function(os){Object.defineProperty(os,"__esModule",{value:!0});os.boolOrEmptySchema=os.topBoolOrEmptySchema=void 0;var iS=on(),aS=M(),oS=Qt(),cS={message:"boolean schema is false"};function uS(e){let{gen:t,schema:r,validateName:s}=e;if(r===!1)Lp(e,!1);else if(typeof r=="object"&&r.$async===!0)t.return(oS.default.data);else t.assign(aS._`${s}.errors`,null),t.return(!0)}os.topBoolOrEmptySchema=uS;function lS(e,t){let{gen:r,schema:s}=e;if(s===!1)r.var(t,!1),Lp(e);else r.var(t,!0)}os.boolOrEmptySchema=lS;function Lp(e,t){let{gen:r,data:s}=e,n={gen:r,keyword:"false schema",data:s,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,iS.reportError)(n,cS,void 0,t)}});var vc=b(function(cs){Object.defineProperty(cs,"__esModule",{value:!0});cs.getRules=cs.isJSONType=void 0;var dS=["string","number","integer","boolean","null","object","array"],fS=new Set(dS);function pS(e){return typeof e=="string"&&fS.has(e)}cs.isJSONType=pS;function mS(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}cs.getRules=mS});var _c=b(function(lr){Object.defineProperty(lr,"__esModule",{value:!0});lr.shouldUseRule=lr.shouldUseGroup=lr.schemaHasRulesForType=void 0;function hS({schema:e,self:t},r){let s=t.RULES.types[r];return s&&s!==!0&&Hp(e,s)}lr.schemaHasRulesForType=hS;function Hp(e,t){return t.rules.some((r)=>Gp(e,r))}lr.shouldUseGroup=Hp;function Gp(e,t){var r;return e[t.keyword]!==void 0||((r=t.definition.implements)===null||r===void 0?void 0:r.some((s)=>e[s]!==void 0))}lr.shouldUseRule=Gp});var un=b(function(Te){Object.defineProperty(Te,"__esModule",{value:!0});Te.reportTypeError=Te.checkDataTypes=Te.checkDataType=Te.coerceAndCheckDataType=Te.getJSONTypes=Te.getSchemaTypes=Te.DataType=void 0;var yS=vc(),gS=_c(),vS=on(),D=M(),Wp=re(),cn;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(cn=Te.DataType||(Te.DataType={}));function _S(e){let t=Jp(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}Te.getSchemaTypes=_S;function Jp(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every(yS.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}Te.getJSONTypes=Jp;function $S(e,t){let{gen:r,data:s,opts:n}=e,i=wS(t,n.coerceTypes),a=t.length>0&&!(i.length===0&&t.length===1&&(0,gS.schemaHasRulesForType)(e,t[0]));if(a){let o=wc(t,s,n.strictNumbers,cn.Wrong);r.if(o,()=>{if(i.length)bS(e,t,i);else bc(e)})}return a}Te.coerceAndCheckDataType=$S;var Qp=new Set(["string","number","integer","boolean","null"]);function wS(e,t){return t?e.filter((r)=>Qp.has(r)||t==="array"&&r==="array"):[]}function bS(e,t,r){let{gen:s,data:n,opts:i}=e,a=s.let("dataType",D._`typeof ${n}`),o=s.let("coerced",D._`undefined`);if(i.coerceTypes==="array")s.if(D._`${a} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>s.assign(n,D._`${n}[0]`).assign(a,D._`typeof ${n}`).if(wc(t,n,i.strictNumbers),()=>s.assign(o,n)));s.if(D._`${o} !== undefined`);for(let u of r)if(Qp.has(u)||u==="array"&&i.coerceTypes==="array")c(u);s.else(),bc(e),s.endIf(),s.if(D._`${o} !== undefined`,()=>{s.assign(n,o),SS(e,o)});function c(u){switch(u){case"string":s.elseIf(D._`${a} == "number" || ${a} == "boolean"`).assign(o,D._`"" + ${n}`).elseIf(D._`${n} === null`).assign(o,D._`""`);return;case"number":s.elseIf(D._`${a} == "boolean" || ${n} === null
|
|
10
|
-
|| (${a} == "string" && ${n} && ${n} == +${n})`).assign(o,D._`+${n}`);return;case"integer":s.elseIf(D._`${a} === "boolean" || ${n} === null
|
|
11
|
-
|| (${a} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(o,D._`+${n}`);return;case"boolean":s.elseIf(D._`${n} === "false" || ${n} === 0 || ${n} === null`).assign(o,!1).elseIf(D._`${n} === "true" || ${n} === 1`).assign(o,!0);return;case"null":s.elseIf(D._`${n} === "" || ${n} === 0 || ${n} === false`),s.assign(o,null);return;case"array":s.elseIf(D._`${a} === "string" || ${a} === "number"
|
|
12
|
-
|| ${a} === "boolean" || ${n} === null`).assign(o,D._`[${n}]`)}}}function SS({gen:e,parentData:t,parentDataProperty:r},s){e.if(D._`${t} !== undefined`,()=>e.assign(D._`${t}[${r}]`,s))}function $c(e,t,r,s=cn.Correct){let n=s===cn.Correct?D.operators.EQ:D.operators.NEQ,i;switch(e){case"null":return D._`${t} ${n} null`;case"array":i=D._`Array.isArray(${t})`;break;case"object":i=D._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":i=a(D._`!(${t} % 1) && !isNaN(${t})`);break;case"number":i=a();break;default:return D._`typeof ${t} ${n} ${e}`}return s===cn.Correct?i:(0,D.not)(i);function a(o=D.nil){return(0,D.and)(D._`typeof ${t} == "number"`,o,r?D._`isFinite(${t})`:D.nil)}}Te.checkDataType=$c;function wc(e,t,r,s){if(e.length===1)return $c(e[0],t,r,s);let n,i=(0,Wp.toHash)(e);if(i.array&&i.object){let a=D._`typeof ${t} != "object"`;n=i.null?a:D._`!${t} || ${a}`,delete i.null,delete i.array,delete i.object}else n=D.nil;if(i.number)delete i.integer;for(let a in i)n=(0,D.and)(n,$c(a,t,r,s));return n}Te.checkDataTypes=wc;var PS={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?D._`{type: ${e}}`:D._`{type: ${t}}`};function bc(e){let t=ES(e);(0,vS.reportError)(t,PS)}Te.reportTypeError=bc;function ES(e){let{gen:t,data:r,schema:s}=e,n=(0,Wp.schemaRefOrVal)(e,s,"type");return{gen:t,keyword:"type",data:r,schema:s.type,schemaCode:n,schemaValue:n,parentSchema:s,params:{},it:e}}});var Xp=b(function(Oi){Object.defineProperty(Oi,"__esModule",{value:!0});Oi.assignDefaults=void 0;var us=M(),kS=re();function IS(e,t){let{properties:r,items:s}=e.schema;if(t==="object"&&r)for(let n in r)Bp(e,n,r[n].default);else if(t==="array"&&Array.isArray(s))s.forEach((n,i)=>Bp(e,i,n.default))}Oi.assignDefaults=IS;function Bp(e,t,r){let{gen:s,compositeRule:n,data:i,opts:a}=e;if(r===void 0)return;let o=us._`${i}${(0,us.getProperty)(t)}`;if(n){(0,kS.checkStrictMode)(e,`default is ignored for: ${o}`);return}let c=us._`${o} === undefined`;if(a.useDefaults==="empty")c=us._`${c} || ${o} === null || ${o} === ""`;s.if(c,us._`${o} = ${(0,us.stringify)(r)}`)}});var ct=b(function(ce){Object.defineProperty(ce,"__esModule",{value:!0});ce.validateUnion=ce.validateArray=ce.usePattern=ce.callValidateCode=ce.schemaProperties=ce.allSchemaProperties=ce.noPropertyInData=ce.propertyInData=ce.isOwnProperty=ce.hasPropFunc=ce.reportMissingProp=ce.checkMissingProp=ce.checkReportMissingProp=void 0;var he=M(),Sc=re(),dr=Qt(),TS=re();function RS(e,t){let{gen:r,data:s,it:n}=e;r.if(Ec(r,s,t,n.opts.ownProperties),()=>{e.setParams({missingProperty:he._`${t}`},!0),e.error()})}ce.checkReportMissingProp=RS;function OS({gen:e,data:t,it:{opts:r}},s,n){return(0,he.or)(...s.map((i)=>(0,he.and)(Ec(e,t,i,r.ownProperties),he._`${n} = ${i}`)))}ce.checkMissingProp=OS;function xS(e,t){e.setParams({missingProperty:t},!0),e.error()}ce.reportMissingProp=xS;function Zp(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:he._`Object.prototype.hasOwnProperty`})}ce.hasPropFunc=Zp;function Pc(e,t,r){return he._`${Zp(e)}.call(${t}, ${r})`}ce.isOwnProperty=Pc;function jS(e,t,r,s){let n=he._`${t}${(0,he.getProperty)(r)} !== undefined`;return s?he._`${n} && ${Pc(e,t,r)}`:n}ce.propertyInData=jS;function Ec(e,t,r,s){let n=he._`${t}${(0,he.getProperty)(r)} === undefined`;return s?(0,he.or)(n,(0,he.not)(Pc(e,t,r))):n}ce.noPropertyInData=Ec;function Yp(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}ce.allSchemaProperties=Yp;function CS(e,t){return Yp(t).filter((r)=>!(0,Sc.alwaysValidSchema)(e,t[r]))}ce.schemaProperties=CS;function AS({schemaCode:e,data:t,it:{gen:r,topSchemaRef:s,schemaPath:n,errorPath:i},it:a},o,c,u){let l=u?he._`${e}, ${t}, ${s}${n}`:t,d=[[dr.default.instancePath,(0,he.strConcat)(dr.default.instancePath,i)],[dr.default.parentData,a.parentData],[dr.default.parentDataProperty,a.parentDataProperty],[dr.default.rootData,dr.default.rootData]];if(a.opts.dynamicRef)d.push([dr.default.dynamicAnchors,dr.default.dynamicAnchors]);let v=he._`${l}, ${r.object(...d)}`;return c!==he.nil?he._`${o}.call(${c}, ${v})`:he._`${o}(${v})`}ce.callValidateCode=AS;var NS=he._`new RegExp`;function qS({gen:e,it:{opts:t}},r){let s=t.unicodeRegExp?"u":"",{regExp:n}=t.code,i=n(r,s);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:he._`${n.code==="new RegExp"?NS:(0,TS.useFunc)(e,n)}(${r}, ${s})`})}ce.usePattern=qS;function DS(e){let{gen:t,data:r,keyword:s,it:n}=e,i=t.name("valid");if(n.allErrors){let o=t.let("valid",!0);return a(()=>t.assign(o,!1)),o}return t.var(i,!0),a(()=>t.break()),i;function a(o){let c=t.const("len",he._`${r}.length`);t.forRange("i",0,c,(u)=>{e.subschema({keyword:s,dataProp:u,dataPropType:Sc.Type.Num},i),t.if((0,he.not)(i),o)})}}ce.validateArray=DS;function MS(e){let{gen:t,schema:r,keyword:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(r.some((c)=>(0,Sc.alwaysValidSchema)(n,c))&&!n.opts.unevaluated)return;let a=t.let("valid",!1),o=t.name("_valid");t.block(()=>r.forEach((c,u)=>{let l=e.subschema({keyword:s,schemaProp:u,compositeRule:!0},o);if(t.assign(a,he._`${a} || ${o}`),!e.mergeValidEvaluated(l,o))t.if((0,he.not)(a))})),e.result(a,()=>e.reset(),()=>e.error(!0))}ce.validateUnion=MS});var rm=b(function(At){Object.defineProperty(At,"__esModule",{value:!0});At.validateKeywordUsage=At.validSchemaType=At.funcKeywordCode=At.macroKeywordCode=void 0;var Le=M(),Tr=Qt(),VS=ct(),US=on();function zS(e,t){let{gen:r,keyword:s,schema:n,parentSchema:i,it:a}=e,o=t.macro.call(a.self,n,i,a),c=tm(r,s,o);if(a.opts.validateSchema!==!1)a.self.validateSchema(o,!0);let u=r.name("valid");e.subschema({schema:o,schemaPath:Le.nil,errSchemaPath:`${a.errSchemaPath}/${s}`,topSchemaRef:c,compositeRule:!0},u),e.pass(u,()=>e.error(!0))}At.macroKeywordCode=zS;function FS(e,t){var r;let{gen:s,keyword:n,schema:i,parentSchema:a,$data:o,it:c}=e;KS(c,t);let u=!o&&t.compile?t.compile.call(c.self,i,a,c):t.validate,l=tm(s,n,u),d=s.let("valid");e.block$data(d,v),e.ok((r=t.valid)!==null&&r!==void 0?r:d);function v(){if(t.errors===!1){if(p(),t.modifying)em(e);_(()=>e.error())}else{let w=t.async?m():h();if(t.modifying)em(e);_(()=>LS(e,w))}}function m(){let w=s.let("ruleErrs",null);return s.try(()=>p(Le._`await `),(k)=>s.assign(d,!1).if(Le._`${k} instanceof ${c.ValidationError}`,()=>s.assign(w,Le._`${k}.errors`),()=>s.throw(k))),w}function h(){let w=Le._`${l}.errors`;return s.assign(w,null),p(Le.nil),w}function p(w=t.async?Le._`await `:Le.nil){let k=c.opts.passContext?Tr.default.this:Tr.default.self,I=!(("compile"in t)&&!o||t.schema===!1);s.assign(d,Le._`${w}${(0,VS.callValidateCode)(e,l,k,I)}`,t.modifying)}function _(w){var k;s.if((0,Le.not)((k=t.valid)!==null&&k!==void 0?k:d),w)}}At.funcKeywordCode=FS;function em(e){let{gen:t,data:r,it:s}=e;t.if(s.parentData,()=>t.assign(r,Le._`${s.parentData}[${s.parentDataProperty}]`))}function LS(e,t){let{gen:r}=e;r.if(Le._`Array.isArray(${t})`,()=>{r.assign(Tr.default.vErrors,Le._`${Tr.default.vErrors} === null ? ${t} : ${Tr.default.vErrors}.concat(${t})`).assign(Tr.default.errors,Le._`${Tr.default.vErrors}.length`),(0,US.extendErrors)(e)},()=>e.error())}function KS({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function tm(e,t,r){if(r===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof r=="function"?{ref:r}:{ref:r,code:(0,Le.stringify)(r)})}function HS(e,t,r=!1){return!t.length||t.some((s)=>s==="array"?Array.isArray(e):s==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==s||r&&typeof e>"u")}At.validSchemaType=HS;function GS({schema:e,opts:t,self:r,errSchemaPath:s},n,i){if(Array.isArray(n.keyword)?!n.keyword.includes(i):n.keyword!==i)throw Error("ajv implementation error");let a=n.dependencies;if(a===null||a===void 0?void 0:a.some((o)=>!Object.prototype.hasOwnProperty.call(e,o)))throw Error(`parent schema must have dependencies of ${i}: ${a.join(",")}`);if(n.validateSchema){if(!n.validateSchema(e[i])){let c=`keyword "${i}" value is invalid at path "${s}": `+r.errorsText(n.validateSchema.errors);if(t.validateSchema==="log")r.logger.error(c);else throw Error(c)}}}At.validateKeywordUsage=GS});var nm=b(function(fr){Object.defineProperty(fr,"__esModule",{value:!0});fr.extendSubschemaMode=fr.extendSubschemaData=fr.getSubschema=void 0;var Nt=M(),sm=re();function WS(e,{keyword:t,schemaProp:r,schema:s,schemaPath:n,errSchemaPath:i,topSchemaRef:a}){if(t!==void 0&&s!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let o=e.schema[t];return r===void 0?{schema:o,schemaPath:Nt._`${e.schemaPath}${(0,Nt.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:o[r],schemaPath:Nt._`${e.schemaPath}${(0,Nt.getProperty)(t)}${(0,Nt.getProperty)(r)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,sm.escapeFragment)(r)}`}}if(s!==void 0){if(n===void 0||i===void 0||a===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:s,schemaPath:n,topSchemaRef:a,errSchemaPath:i}}throw Error('either "keyword" or "schema" must be passed')}fr.getSubschema=WS;function JS(e,t,{dataProp:r,dataPropType:s,data:n,dataTypes:i,propertyName:a}){if(n!==void 0&&r!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:o}=t;if(r!==void 0){let{errorPath:u,dataPathArr:l,opts:d}=t,v=o.let("data",Nt._`${t.data}${(0,Nt.getProperty)(r)}`,!0);c(v),e.errorPath=Nt.str`${u}${(0,sm.getErrorPath)(r,s,d.jsPropertySyntax)}`,e.parentDataProperty=Nt._`${r}`,e.dataPathArr=[...l,e.parentDataProperty]}if(n!==void 0){let u=n instanceof Nt.Name?n:o.let("data",n,!0);if(c(u),a!==void 0)e.propertyName=a}if(i)e.dataTypes=i;function c(u){e.data=u,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,u]}}fr.extendSubschemaData=JS;function QS(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:s,createErrors:n,allErrors:i}){if(s!==void 0)e.compositeRule=s;if(n!==void 0)e.createErrors=n;if(i!==void 0)e.allErrors=i;e.jtdDiscriminator=t,e.jtdMetadata=r}fr.extendSubschemaMode=QS});var ln=b(function(Xe){Object.defineProperty(Xe,"__esModule",{value:!0});Xe.getSchemaRefs=Xe.resolveUrl=Xe.normalizeId=Xe._getFullPath=Xe.getFullPath=Xe.inlineRef=void 0;var BS=re(),XS=Ds(),ZS=La(),YS=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function eP(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!kc(e);if(!t)return!1;return im(e)<=t}Xe.inlineRef=eP;var tP=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function kc(e){for(let t in e){if(tP.has(t))return!0;let r=e[t];if(Array.isArray(r)&&r.some(kc))return!0;if(typeof r=="object"&&kc(r))return!0}return!1}function im(e){let t=0;for(let r in e){if(r==="$ref")return 1/0;if(t++,YS.has(r))continue;if(typeof e[r]=="object")(0,BS.eachItem)(e[r],(s)=>t+=im(s));if(t===1/0)return 1/0}return t}function am(e,t="",r){if(r!==!1)t=ls(t);let s=e.parse(t);return om(e,s)}Xe.getFullPath=am;function om(e,t){return e.serialize(t).split("#")[0]+"#"}Xe._getFullPath=om;var rP=/#\/?$/;function ls(e){return e?e.replace(rP,""):""}Xe.normalizeId=ls;function sP(e,t,r){return r=ls(r),e.resolve(t,r)}Xe.resolveUrl=sP;var nP=/^[a-z_][-a-z0-9._]*$/i;function iP(e,t){if(typeof e=="boolean")return{};let{schemaId:r,uriResolver:s}=this.opts,n=ls(e[r]||t),i={"":n},a=am(s,n,!1),o={},c=new Set;return ZS(e,{allKeys:!0},(d,v,m,h)=>{if(h===void 0)return;let p=a+v,_=i[h];if(typeof d[r]=="string")_=w.call(this,d[r]);k.call(this,d.$anchor),k.call(this,d.$dynamicAnchor),i[v]=_;function w(I){let R=this.opts.uriResolver.resolve;if(I=ls(_?R(_,I):I),c.has(I))throw l(I);c.add(I);let S=this.refs[I];if(typeof S=="string")S=this.refs[S];if(typeof S=="object")u(d,S.schema,I);else if(I!==ls(p))if(I[0]==="#")u(d,o[I],I),o[I]=d;else this.refs[I]=p;return I}function k(I){if(typeof I=="string"){if(!nP.test(I))throw Error(`invalid anchor "${I}"`);w.call(this,`#${I}`)}}}),o;function u(d,v,m){if(v!==void 0&&!XS(d,v))throw l(m)}function l(d){return Error(`reference "${d}" resolves to more than one schema`)}}Xe.getSchemaRefs=iP});var pn=b(function(pr){Object.defineProperty(pr,"__esModule",{value:!0});pr.getData=pr.KeywordCxt=pr.validateFunctionCode=void 0;var fm=Kp(),cm=un(),Tc=_c(),xi=un(),aP=Xp(),fn=rm(),Ic=nm(),j=M(),A=Qt(),oP=ln(),Bt=re(),dn=on();function cP(e){if(hm(e)){if(ym(e),mm(e)){dP(e);return}}pm(e,()=>(0,fm.topBoolOrEmptySchema)(e))}pr.validateFunctionCode=cP;function pm({gen:e,validateName:t,schema:r,schemaEnv:s,opts:n},i){if(n.code.es5)e.func(t,j._`${A.default.data}, ${A.default.valCxt}`,s.$async,()=>{e.code(j._`"use strict"; ${um(r,n)}`),lP(e,n),e.code(i)});else e.func(t,j._`${A.default.data}, ${uP(n)}`,s.$async,()=>e.code(um(r,n)).code(i))}function uP(e){return j._`{${A.default.instancePath}="", ${A.default.parentData}, ${A.default.parentDataProperty}, ${A.default.rootData}=${A.default.data}${e.dynamicRef?j._`, ${A.default.dynamicAnchors}={}`:j.nil}}={}`}function lP(e,t){e.if(A.default.valCxt,()=>{if(e.var(A.default.instancePath,j._`${A.default.valCxt}.${A.default.instancePath}`),e.var(A.default.parentData,j._`${A.default.valCxt}.${A.default.parentData}`),e.var(A.default.parentDataProperty,j._`${A.default.valCxt}.${A.default.parentDataProperty}`),e.var(A.default.rootData,j._`${A.default.valCxt}.${A.default.rootData}`),t.dynamicRef)e.var(A.default.dynamicAnchors,j._`${A.default.valCxt}.${A.default.dynamicAnchors}`)},()=>{if(e.var(A.default.instancePath,j._`""`),e.var(A.default.parentData,j._`undefined`),e.var(A.default.parentDataProperty,j._`undefined`),e.var(A.default.rootData,A.default.data),t.dynamicRef)e.var(A.default.dynamicAnchors,j._`{}`)})}function dP(e){let{schema:t,opts:r,gen:s}=e;pm(e,()=>{if(r.$comment&&t.$comment)vm(e);if(yP(e),s.let(A.default.vErrors,null),s.let(A.default.errors,0),r.unevaluated)fP(e);gm(e),_P(e)});return}function fP(e){let{gen:t,validateName:r}=e;e.evaluated=t.const("evaluated",j._`${r}.evaluated`),t.if(j._`${e.evaluated}.dynamicProps`,()=>t.assign(j._`${e.evaluated}.props`,j._`undefined`)),t.if(j._`${e.evaluated}.dynamicItems`,()=>t.assign(j._`${e.evaluated}.items`,j._`undefined`))}function um(e,t){let r=typeof e=="object"&&e[t.schemaId];return r&&(t.code.source||t.code.process)?j._`/*# sourceURL=${r} */`:j.nil}function pP(e,t){if(hm(e)){if(ym(e),mm(e)){mP(e,t);return}}(0,fm.boolOrEmptySchema)(e,t)}function mm({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let r in e)if(t.RULES.all[r])return!0;return!1}function hm(e){return typeof e.schema!="boolean"}function mP(e,t){let{schema:r,gen:s,opts:n}=e;if(n.$comment&&r.$comment)vm(e);gP(e),vP(e);let i=s.const("_errs",A.default.errors);gm(e,i),s.var(t,j._`${i} === ${A.default.errors}`)}function ym(e){(0,Bt.checkUnknownRules)(e),hP(e)}function gm(e,t){if(e.opts.jtd)return lm(e,[],!1,t);let r=(0,cm.getSchemaTypes)(e.schema),s=(0,cm.coerceAndCheckDataType)(e,r);lm(e,r,!s,t)}function hP(e){let{schema:t,errSchemaPath:r,opts:s,self:n}=e;if(t.$ref&&s.ignoreKeywordsWithRef&&(0,Bt.schemaHasRulesButRef)(t,n.RULES))n.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}function yP(e){let{schema:t,opts:r}=e;if(t.default!==void 0&&r.useDefaults&&r.strictSchema)(0,Bt.checkStrictMode)(e,"default is ignored in the schema root")}function gP(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=(0,oP.resolveUrl)(e.opts.uriResolver,e.baseId,t)}function vP(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function vm({gen:e,schemaEnv:t,schema:r,errSchemaPath:s,opts:n}){let i=r.$comment;if(n.$comment===!0)e.code(j._`${A.default.self}.logger.log(${i})`);else if(typeof n.$comment=="function"){let a=j.str`${s}/$comment`,o=e.scopeValue("root",{ref:t.root});e.code(j._`${A.default.self}.opts.$comment(${i}, ${a}, ${o}.schema)`)}}function _P(e){let{gen:t,schemaEnv:r,validateName:s,ValidationError:n,opts:i}=e;if(r.$async)t.if(j._`${A.default.errors} === 0`,()=>t.return(A.default.data),()=>t.throw(j._`new ${n}(${A.default.vErrors})`));else{if(t.assign(j._`${s}.errors`,A.default.vErrors),i.unevaluated)$P(e);t.return(j._`${A.default.errors} === 0`)}}function $P({gen:e,evaluated:t,props:r,items:s}){if(r instanceof j.Name)e.assign(j._`${t}.props`,r);if(s instanceof j.Name)e.assign(j._`${t}.items`,s)}function lm(e,t,r,s){let{gen:n,schema:i,data:a,allErrors:o,opts:c,self:u}=e,{RULES:l}=u;if(i.$ref&&(c.ignoreKeywordsWithRef||!(0,Bt.schemaHasRulesButRef)(i,l))){n.block(()=>$m(e,"$ref",l.all.$ref.definition));return}if(!c.jtd)wP(e,t);n.block(()=>{for(let v of l.rules)d(v);d(l.post)});function d(v){if(!(0,Tc.shouldUseGroup)(i,v))return;if(v.type){if(n.if((0,xi.checkDataType)(v.type,a,c.strictNumbers)),dm(e,v),t.length===1&&t[0]===v.type&&r)n.else(),(0,xi.reportTypeError)(e);n.endIf()}else dm(e,v);if(!o)n.if(j._`${A.default.errors} === ${s||0}`)}}function dm(e,t){let{gen:r,schema:s,opts:{useDefaults:n}}=e;if(n)(0,aP.assignDefaults)(e,t.type);r.block(()=>{for(let i of t.rules)if((0,Tc.shouldUseRule)(s,i))$m(e,i.keyword,i.definition,t.type)})}function wP(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(bP(e,t),!e.opts.allowUnionTypes)SP(e,t);PP(e,e.dataTypes)}function bP(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((r)=>{if(!_m(e.dataTypes,r))Rc(e,`type "${r}" not allowed by context "${e.dataTypes.join(",")}"`)}),kP(e,t)}function SP(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))Rc(e,"use allowUnionTypes to allow union type keyword")}function PP(e,t){let r=e.self.RULES.all;for(let s in r){let n=r[s];if(typeof n=="object"&&(0,Tc.shouldUseRule)(e.schema,n)){let{type:i}=n.definition;if(i.length&&!i.some((a)=>EP(t,a)))Rc(e,`missing type "${i.join(",")}" for keyword "${s}"`)}}}function EP(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function _m(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function kP(e,t){let r=[];for(let s of e.dataTypes)if(_m(t,s))r.push(s);else if(t.includes("integer")&&s==="number")r.push("integer");e.dataTypes=r}function Rc(e,t){let r=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${r}" (strictTypes)`,(0,Bt.checkStrictMode)(e,t,e.opts.strictTypes)}class Oc{constructor(e,t,r){if((0,fn.validateKeywordUsage)(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,Bt.schemaRefOrVal)(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",wm(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,fn.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",A.default.errors)}result(e,t,r){this.failResult((0,j.not)(e),t,r)}failResult(e,t,r){if(this.gen.if(e),r)r();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult((0,j.not)(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(j._`${t} !== undefined && (${(0,j.or)(this.invalid$data(),e)})`)}error(e,t,r){if(t){this.setParams(t),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,t){(e?dn.reportExtraError:dn.reportError)(this,this.def.error,t)}$dataError(){(0,dn.reportError)(this,this.def.$dataError||dn.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,dn.resetErrorsCount)(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,r=j.nil){this.gen.block(()=>{this.check$data(e,r),t()})}check$data(e=j.nil,t=j.nil){if(!this.$data)return;let{gen:r,schemaCode:s,schemaType:n,def:i}=this;if(r.if((0,j.or)(j._`${s} === undefined`,t)),e!==j.nil)r.assign(e,!0);if(n.length||i.validateSchema){if(r.elseIf(this.invalid$data()),this.$dataError(),e!==j.nil)r.assign(e,!1)}r.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:r,def:s,it:n}=this;return(0,j.or)(i(),a());function i(){if(r.length){if(!(t instanceof j.Name))throw Error("ajv implementation error");let o=Array.isArray(r)?r:[r];return j._`${(0,xi.checkDataTypes)(o,t,n.opts.strictNumbers,xi.DataType.Wrong)}`}return j.nil}function a(){if(s.validateSchema){let o=e.scopeValue("validate$data",{ref:s.validateSchema});return j._`!${o}(${t})`}return j.nil}}subschema(e,t){let r=(0,Ic.getSubschema)(this.it,e);(0,Ic.extendSubschemaData)(r,this.it,e),(0,Ic.extendSubschemaMode)(r,e);let s={...this.it,...r,items:void 0,props:void 0};return pP(s,t),s}mergeEvaluated(e,t){let{it:r,gen:s}=this;if(!r.opts.unevaluated)return;if(r.props!==!0&&e.props!==void 0)r.props=Bt.mergeEvaluated.props(s,e.props,r.props,t);if(r.items!==!0&&e.items!==void 0)r.items=Bt.mergeEvaluated.items(s,e.items,r.items,t)}mergeValidEvaluated(e,t){let{it:r,gen:s}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return s.if(t,()=>this.mergeEvaluated(e,j.Name)),!0}}pr.KeywordCxt=Oc;function $m(e,t,r,s){let n=new Oc(e,r,t);if("code"in r)r.code(n,s);else if(n.$data&&r.validate)(0,fn.funcKeywordCode)(n,r);else if("macro"in r)(0,fn.macroKeywordCode)(n,r);else if(r.compile||r.validate)(0,fn.funcKeywordCode)(n,r)}var IP=/^\/(?:[^~]|~0|~1)*$/,TP=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function wm(e,{dataLevel:t,dataNames:r,dataPathArr:s}){let n,i;if(e==="")return A.default.rootData;if(e[0]==="/"){if(!IP.test(e))throw Error(`Invalid JSON-pointer: ${e}`);n=e,i=A.default.rootData}else{let u=TP.exec(e);if(!u)throw Error(`Invalid JSON-pointer: ${e}`);let l=+u[1];if(n=u[2],n==="#"){if(l>=t)throw Error(c("property/index",l));return s[t-l]}if(l>t)throw Error(c("data",l));if(i=r[t-l],!n)return i}let a=i,o=n.split("/");for(let u of o)if(u)i=j._`${i}${(0,j.getProperty)((0,Bt.unescapeJsonPointer)(u))}`,a=j._`${a} && ${i}`;return a;function c(u,l){return`Cannot access ${u} ${l} levels up, current level is ${t}`}}pr.getData=wm});var ji=b(function(xc){Object.defineProperty(xc,"__esModule",{value:!0});class bm extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}xc.default=bm});var Ci=b(function(Cc){Object.defineProperty(Cc,"__esModule",{value:!0});var jc=ln();class Sm extends Error{constructor(e,t,r,s){super(s||`can't resolve reference ${r} from id ${t}`);this.missingRef=(0,jc.resolveUrl)(e,t,r),this.missingSchema=(0,jc.normalizeId)((0,jc.getFullPath)(e,this.missingRef))}}Cc.default=Sm});var Ni=b(function(ut){Object.defineProperty(ut,"__esModule",{value:!0});ut.resolveSchema=ut.getCompilingSchema=ut.resolveRef=ut.compileSchema=ut.SchemaEnv=void 0;var $t=M(),RP=ji(),Rr=Qt(),wt=ln(),Pm=re(),OP=pn();class mn{constructor(e){var t;this.refs={},this.dynamicAnchors={};let r;if(typeof e.schema=="object")r=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:(0,wt.normalizeId)(r===null||r===void 0?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r===null||r===void 0?void 0:r.$async,this.refs={}}}ut.SchemaEnv=mn;function Nc(e){let t=Em.call(this,e);if(t)return t;let r=(0,wt.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:s,lines:n}=this.opts.code,{ownProperties:i}=this.opts,a=new $t.CodeGen(this.scope,{es5:s,lines:n,ownProperties:i}),o;if(e.$async)o=a.scopeValue("Error",{ref:RP.default,code:$t._`require("ajv/dist/runtime/validation_error").default`});let c=a.scopeName("validate");e.validateName=c;let u={gen:a,allErrors:this.opts.allErrors,data:Rr.default.data,parentData:Rr.default.parentData,parentDataProperty:Rr.default.parentDataProperty,dataNames:[Rr.default.data],dataPathArr:[$t.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:a.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:(0,$t.stringify)(e.schema)}:{ref:e.schema}),validateName:c,ValidationError:o,schema:e.schema,schemaEnv:e,rootId:r,baseId:e.baseId||r,schemaPath:$t.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:$t._`""`,opts:this.opts,self:this},l;try{this._compilations.add(e),(0,OP.validateFunctionCode)(u),a.optimize(this.opts.code.optimize);let d=a.toString();if(l=`${a.scopeRefs(Rr.default.scope)}return ${d}`,this.opts.code.process)l=this.opts.code.process(l,e);let m=Function(`${Rr.default.self}`,`${Rr.default.scope}`,l)(this,this.scope.get());if(this.scope.value(c,{ref:m}),m.errors=null,m.schema=e.schema,m.schemaEnv=e,e.$async)m.$async=!0;if(this.opts.code.source===!0)m.source={validateName:c,validateCode:d,scopeValues:a._values};if(this.opts.unevaluated){let{props:h,items:p}=u;if(m.evaluated={props:h instanceof $t.Name?void 0:h,items:p instanceof $t.Name?void 0:p,dynamicProps:h instanceof $t.Name,dynamicItems:p instanceof $t.Name},m.source)m.source.evaluated=(0,$t.stringify)(m.evaluated)}return e.validate=m,e}catch(d){if(delete e.validate,delete e.validateName,l)this.logger.error("Error compiling schema, function code:",l);throw d}finally{this._compilations.delete(e)}}ut.compileSchema=Nc;function xP(e,t,r){var s;r=(0,wt.resolveUrl)(this.opts.uriResolver,t,r);let n=e.refs[r];if(n)return n;let i=AP.call(this,e,r);if(i===void 0){let a=(s=e.localRefs)===null||s===void 0?void 0:s[r],{schemaId:o}=this.opts;if(a)i=new mn({schema:a,schemaId:o,root:e,baseId:t})}if(i===void 0)return;return e.refs[r]=jP.call(this,i)}ut.resolveRef=xP;function jP(e){if((0,wt.inlineRef)(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:Nc.call(this,e)}function Em(e){for(let t of this._compilations)if(CP(t,e))return t}ut.getCompilingSchema=Em;function CP(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function AP(e,t){let r;while(typeof(r=this.refs[t])=="string")t=r;return r||this.schemas[t]||Ai.call(this,e,t)}function Ai(e,t){let r=this.opts.uriResolver.parse(t),s=(0,wt._getFullPath)(this.opts.uriResolver,r),n=(0,wt.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&s===n)return Ac.call(this,r,e);let i=(0,wt.normalizeId)(s),a=this.refs[i]||this.schemas[i];if(typeof a=="string"){let o=Ai.call(this,e,a);if(typeof(o===null||o===void 0?void 0:o.schema)!=="object")return;return Ac.call(this,r,o)}if(typeof(a===null||a===void 0?void 0:a.schema)!=="object")return;if(!a.validate)Nc.call(this,a);if(i===(0,wt.normalizeId)(t)){let{schema:o}=a,{schemaId:c}=this.opts,u=o[c];if(u)n=(0,wt.resolveUrl)(this.opts.uriResolver,n,u);return new mn({schema:o,schemaId:c,root:e,baseId:n})}return Ac.call(this,r,a)}ut.resolveSchema=Ai;var NP=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Ac(e,{baseId:t,schema:r,root:s}){var n;if(((n=e.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let o of e.fragment.slice(1).split("/")){if(typeof r==="boolean")return;let c=r[(0,Pm.unescapeFragment)(o)];if(c===void 0)return;r=c;let u=typeof r==="object"&&r[this.opts.schemaId];if(!NP.has(o)&&u)t=(0,wt.resolveUrl)(this.opts.uriResolver,t,u)}let i;if(typeof r!="boolean"&&r.$ref&&!(0,Pm.schemaHasRulesButRef)(r,this.RULES)){let o=(0,wt.resolveUrl)(this.opts.uriResolver,t,r.$ref);i=Ai.call(this,s,o)}let{schemaId:a}=this.opts;if(i=i||new mn({schema:r,schemaId:a,root:s,baseId:t}),i.schema!==i.root.schema)return i;return}});var km=b(function(hR,qP){qP.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Di=b(function(qi,Im){(function(e,t){typeof qi==="object"&&typeof Im<"u"?t(qi):typeof define==="function"&&define.amd?define(["exports"],t):t(e.URI=e.URI||{})})(qi,function(e){function t(){for(var y=arguments.length,f=Array(y),g=0;g<y;g++)f[g]=arguments[g];if(f.length>1){f[0]=f[0].slice(0,-1);var P=f.length-1;for(var E=1;E<P;++E)f[E]=f[E].slice(1,-1);return f[P]=f[P].slice(1),f.join("")}else return f[0]}function r(y){return"(?:"+y+")"}function s(y){return y===void 0?"undefined":y===null?"null":Object.prototype.toString.call(y).split(" ").pop().split("]").shift().toLowerCase()}function n(y){return y.toUpperCase()}function i(y){return y!==void 0&&y!==null?y instanceof Array?y:typeof y.length!=="number"||y.split||y.setInterval||y.call?[y]:Array.prototype.slice.call(y):[]}function a(y,f){var g=y;if(f)for(var P in f)g[P]=f[P];return g}function o(y){var f="[A-Za-z]",g="[\\x0D]",P="[0-9]",E="[\\x22]",T=t(P,"[A-Fa-f]"),N="[\\x0A]",Y="[\\x20]",ie=r(r("%[EFef]"+T+"%"+T+T+"%"+T+T)+"|"+r("%[89A-Fa-f]"+T+"%"+T+T)+"|"+r("%"+T+T)),Se="[\\:\\/\\?\\#\\[\\]\\@]",Q="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",ge=t(Se,Q),Pe=y?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",ye=y?"[\\uE000-\\uF8FF]":"[]",se=t(f,P,"[\\-\\.\\_\\~]",Pe),ve=r(f+t(f,P,"[\\+\\-\\.]")+"*"),ae=r(r(ie+"|"+t(se,Q,"[\\:]"))+"*"),yr=r(r("25[0-5]")+"|"+r("2[0-4]"+P)+"|"+r("1"+P+P)+"|"+r("[1-9]"+P)+"|"+P),et=r(r("25[0-5]")+"|"+r("2[0-4]"+P)+"|"+r("1"+P+P)+"|"+r("0?[1-9]"+P)+"|0?0?"+P),st=r(et+"\\."+et+"\\."+et+"\\."+et),le=r(T+"{1,4}"),tt=r(r(le+"\\:"+le)+"|"+st),nt=r(r(le+"\\:")+"{6}"+tt),Tt=r("\\:\\:"+r(le+"\\:")+"{5}"+tt),gr=r(r(le)+"?\\:\\:"+r(le+"\\:")+"{4}"+tt),zt=r(r(r(le+"\\:")+"{0,1}"+le)+"?\\:\\:"+r(le+"\\:")+"{3}"+tt),Ps=r(r(r(le+"\\:")+"{0,2}"+le)+"?\\:\\:"+r(le+"\\:")+"{2}"+tt),Cn=r(r(r(le+"\\:")+"{0,3}"+le)+"?\\:\\:"+le+"\\:"+tt),An=r(r(r(le+"\\:")+"{0,4}"+le)+"?\\:\\:"+tt),Dr=r(r(r(le+"\\:")+"{0,5}"+le)+"?\\:\\:"+le),Mr=r(r(r(le+"\\:")+"{0,6}"+le)+"?\\:\\:"),Ft=r([nt,Tt,gr,zt,Ps,Cn,An,Dr,Mr].join("|")),Vr=r(r(se+"|"+ie)+"+"),fa=r(Ft+"\\%25"+Vr),vr=r(Ft+r("\\%25|\\%(?!"+T+"{2})")+Vr),vg=r("[vV]"+T+"+\\."+t(se,Q,"[\\:]")+"+"),_g=r("\\["+r(vr+"|"+Ft+"|"+vg)+"\\]"),sl=r(r(ie+"|"+t(se,Q))+"*"),Es=r(_g+"|"+st+"(?!"+sl+")|"+sl),ks=r(P+"*"),nl=r(r(ae+"@")+"?"+Es+r("\\:"+ks)+"?"),Is=r(ie+"|"+t(se,Q,"[\\:\\@]")),$g=r(Is+"*"),il=r(Is+"+"),wg=r(r(ie+"|"+t(se,Q,"[\\@]"))+"+"),Lt=r(r("\\/"+$g)+"*"),Ur=r("\\/"+r(il+Lt)+"?"),pa=r(wg+Lt),Nn=r(il+Lt),zr="(?!"+Is+")",fI=r(Lt+"|"+Ur+"|"+pa+"|"+Nn+"|"+zr),Fr=r(r(Is+"|"+t("[\\/\\?]",ye))+"*"),Ts=r(r(Is+"|[\\/\\?]")+"*"),al=r(r("\\/\\/"+nl+Lt)+"|"+Ur+"|"+Nn+"|"+zr),bg=r(ve+"\\:"+al+r("\\?"+Fr)+"?"+r("\\#"+Ts)+"?"),Sg=r(r("\\/\\/"+nl+Lt)+"|"+Ur+"|"+pa+"|"+zr),Pg=r(Sg+r("\\?"+Fr)+"?"+r("\\#"+Ts)+"?"),pI=r(bg+"|"+Pg),mI=r(ve+"\\:"+al+r("\\?"+Fr)+"?"),hI="^("+ve+")\\:"+r(r("\\/\\/("+r("("+ae+")@")+"?("+Es+")"+r("\\:("+ks+")")+"?)")+"?("+Lt+"|"+Ur+"|"+Nn+"|"+zr+")")+r("\\?("+Fr+")")+"?"+r("\\#("+Ts+")")+"?$",yI="^(){0}"+r(r("\\/\\/("+r("("+ae+")@")+"?("+Es+")"+r("\\:("+ks+")")+"?)")+"?("+Lt+"|"+Ur+"|"+pa+"|"+zr+")")+r("\\?("+Fr+")")+"?"+r("\\#("+Ts+")")+"?$",gI="^("+ve+")\\:"+r(r("\\/\\/("+r("("+ae+")@")+"?("+Es+")"+r("\\:("+ks+")")+"?)")+"?("+Lt+"|"+Ur+"|"+Nn+"|"+zr+")")+r("\\?("+Fr+")")+"?$",vI="^"+r("\\#("+Ts+")")+"?$",_I="^"+r("("+ae+")@")+"?("+Es+")"+r("\\:("+ks+")")+"?$";return{NOT_SCHEME:new RegExp(t("[^]",f,P,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(t("[^\\%\\:]",se,Q),"g"),NOT_HOST:new RegExp(t("[^\\%\\[\\]\\:]",se,Q),"g"),NOT_PATH:new RegExp(t("[^\\%\\/\\:\\@]",se,Q),"g"),NOT_PATH_NOSCHEME:new RegExp(t("[^\\%\\/\\@]",se,Q),"g"),NOT_QUERY:new RegExp(t("[^\\%]",se,Q,"[\\:\\@\\/\\?]",ye),"g"),NOT_FRAGMENT:new RegExp(t("[^\\%]",se,Q,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(t("[^]",se,Q),"g"),UNRESERVED:new RegExp(se,"g"),OTHER_CHARS:new RegExp(t("[^\\%]",se,ge),"g"),PCT_ENCODED:new RegExp(ie,"g"),IPV4ADDRESS:new RegExp("^("+st+")$"),IPV6ADDRESS:new RegExp("^\\[?("+Ft+")"+r(r("\\%25|\\%(?!"+T+"{2})")+"("+Vr+")")+"?\\]?$")}}var c=o(!1),u=o(!0),l=function(){function y(f,g){var P=[],E=!0,T=!1,N=void 0;try{for(var Y=f[Symbol.iterator](),ie;!(E=(ie=Y.next()).done);E=!0)if(P.push(ie.value),g&&P.length===g)break}catch(Se){T=!0,N=Se}finally{try{if(!E&&Y.return)Y.return()}finally{if(T)throw N}}return P}return function(f,g){if(Array.isArray(f))return f;else if(Symbol.iterator in Object(f))return y(f,g);else throw TypeError("Invalid attempt to destructure non-iterable instance")}}(),d=function(y){if(Array.isArray(y)){for(var f=0,g=Array(y.length);f<y.length;f++)g[f]=y[f];return g}else return Array.from(y)},v=2147483647,m=36,h=1,p=26,_=38,w=700,k=72,I=128,R="-",S=/^xn--/,O=/[^\0-\x7E]/,L=/[\x2E\u3002\uFF0E\uFF61]/g,V={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},ne=m-h,G=Math.floor,$e=String.fromCharCode;function ue(y){throw RangeError(V[y])}function Ee(y,f){var g=[],P=y.length;while(P--)g[P]=f(y[P]);return g}function Me(y,f){var g=y.split("@"),P="";if(g.length>1)P=g[0]+"@",y=g[1];y=y.replace(L,".");var E=y.split("."),T=Ee(E,f).join(".");return P+T}function He(y){var f=[],g=0,P=y.length;while(g<P){var E=y.charCodeAt(g++);if(E>=55296&&E<=56319&&g<P){var T=y.charCodeAt(g++);if((T&64512)==56320)f.push(((E&1023)<<10)+(T&1023)+65536);else f.push(E),g--}else f.push(E)}return f}var dt=function(f){return String.fromCodePoint.apply(String,d(f))},ft=function(f){if(f-48<10)return f-22;if(f-65<26)return f-65;if(f-97<26)return f-97;return m},Pt=function(f,g){return f+22+75*(f<26)-((g!=0)<<5)},Xt=function(f,g,P){var E=0;f=P?G(f/w):f>>1,f+=G(f/g);for(;f>ne*p>>1;E+=m)f=G(f/ne);return G(E+(ne+1)*f/(f+_))},ws=function(f){var g=[],P=f.length,E=0,T=I,N=k,Y=f.lastIndexOf(R);if(Y<0)Y=0;for(var ie=0;ie<Y;++ie){if(f.charCodeAt(ie)>=128)ue("not-basic");g.push(f.charCodeAt(ie))}for(var Se=Y>0?Y+1:0;Se<P;){var Q=E;for(var ge=1,Pe=m;;Pe+=m){if(Se>=P)ue("invalid-input");var ye=ft(f.charCodeAt(Se++));if(ye>=m||ye>G((v-E)/ge))ue("overflow");E+=ye*ge;var se=Pe<=N?h:Pe>=N+p?p:Pe-N;if(ye<se)break;var ve=m-se;if(ge>G(v/ve))ue("overflow");ge*=ve}var ae=g.length+1;if(N=Xt(E-Q,ae,Q==0),G(E/ae)>v-T)ue("overflow");T+=G(E/ae),E%=ae,g.splice(E++,0,T)}return String.fromCodePoint.apply(String,g)},Lu=function(f){var g=[];f=He(f);var P=f.length,E=I,T=0,N=k,Y=!0,ie=!1,Se=void 0;try{for(var Q=f[Symbol.iterator](),ge;!(Y=(ge=Q.next()).done);Y=!0){var Pe=ge.value;if(Pe<128)g.push($e(Pe))}}catch(vr){ie=!0,Se=vr}finally{try{if(!Y&&Q.return)Q.return()}finally{if(ie)throw Se}}var ye=g.length,se=ye;if(ye)g.push(R);while(se<P){var ve=v,ae=!0,yr=!1,et=void 0;try{for(var st=f[Symbol.iterator](),le;!(ae=(le=st.next()).done);ae=!0){var tt=le.value;if(tt>=E&&tt<ve)ve=tt}}catch(vr){yr=!0,et=vr}finally{try{if(!ae&&st.return)st.return()}finally{if(yr)throw et}}var nt=se+1;if(ve-E>G((v-T)/nt))ue("overflow");T+=(ve-E)*nt,E=ve;var Tt=!0,gr=!1,zt=void 0;try{for(var Ps=f[Symbol.iterator](),Cn;!(Tt=(Cn=Ps.next()).done);Tt=!0){var An=Cn.value;if(An<E&&++T>v)ue("overflow");if(An==E){var Dr=T;for(var Mr=m;;Mr+=m){var Ft=Mr<=N?h:Mr>=N+p?p:Mr-N;if(Dr<Ft)break;var Vr=Dr-Ft,fa=m-Ft;g.push($e(Pt(Ft+Vr%fa,0))),Dr=G(Vr/fa)}g.push($e(Pt(Dr,0))),N=Xt(T,nt,se==ye),T=0,++se}}}catch(vr){gr=!0,zt=vr}finally{try{if(!Tt&&Ps.return)Ps.return()}finally{if(gr)throw zt}}++T,++E}return g.join("")},By=function(f){return Me(f,function(g){return S.test(g)?ws(g.slice(4).toLowerCase()):g})},Xy=function(f){return Me(f,function(g){return O.test(g)?"xn--"+Lu(g):g})},Cr={version:"2.1.0",ucs2:{decode:He,encode:dt},decode:ws,encode:Lu,toASCII:Xy,toUnicode:By},rt={};function Et(y){var f=y.charCodeAt(0),g=void 0;if(f<16)g="%0"+f.toString(16).toUpperCase();else if(f<128)g="%"+f.toString(16).toUpperCase();else if(f<2048)g="%"+(f>>6|192).toString(16).toUpperCase()+"%"+(f&63|128).toString(16).toUpperCase();else g="%"+(f>>12|224).toString(16).toUpperCase()+"%"+(f>>6&63|128).toString(16).toUpperCase()+"%"+(f&63|128).toString(16).toUpperCase();return g}function Ar(y){var f="",g=0,P=y.length;while(g<P){var E=parseInt(y.substr(g+1,2),16);if(E<128)f+=String.fromCharCode(E),g+=3;else if(E>=194&&E<224){if(P-g>=6){var T=parseInt(y.substr(g+4,2),16);f+=String.fromCharCode((E&31)<<6|T&63)}else f+=y.substr(g,6);g+=6}else if(E>=224){if(P-g>=9){var N=parseInt(y.substr(g+4,2),16),Y=parseInt(y.substr(g+7,2),16);f+=String.fromCharCode((E&15)<<12|(N&63)<<6|Y&63)}else f+=y.substr(g,9);g+=9}else f+=y.substr(g,3),g+=3}return f}function ca(y,f){function g(P){var E=Ar(P);return!E.match(f.UNRESERVED)?P:E}if(y.scheme)y.scheme=String(y.scheme).replace(f.PCT_ENCODED,g).toLowerCase().replace(f.NOT_SCHEME,"");if(y.userinfo!==void 0)y.userinfo=String(y.userinfo).replace(f.PCT_ENCODED,g).replace(f.NOT_USERINFO,Et).replace(f.PCT_ENCODED,n);if(y.host!==void 0)y.host=String(y.host).replace(f.PCT_ENCODED,g).toLowerCase().replace(f.NOT_HOST,Et).replace(f.PCT_ENCODED,n);if(y.path!==void 0)y.path=String(y.path).replace(f.PCT_ENCODED,g).replace(y.scheme?f.NOT_PATH:f.NOT_PATH_NOSCHEME,Et).replace(f.PCT_ENCODED,n);if(y.query!==void 0)y.query=String(y.query).replace(f.PCT_ENCODED,g).replace(f.NOT_QUERY,Et).replace(f.PCT_ENCODED,n);if(y.fragment!==void 0)y.fragment=String(y.fragment).replace(f.PCT_ENCODED,g).replace(f.NOT_FRAGMENT,Et).replace(f.PCT_ENCODED,n);return y}function ua(y){return y.replace(/^0*(.*)/,"$1")||"0"}function la(y,f){var g=y.match(f.IPV4ADDRESS)||[],P=l(g,2),E=P[1];if(E)return E.split(".").map(ua).join(".");else return y}function Ku(y,f){var g=y.match(f.IPV6ADDRESS)||[],P=l(g,3),E=P[1],T=P[2];if(E){var N=E.toLowerCase().split("::").reverse(),Y=l(N,2),ie=Y[0],Se=Y[1],Q=Se?Se.split(":").map(ua):[],ge=ie.split(":").map(ua),Pe=f.IPV4ADDRESS.test(ge[ge.length-1]),ye=Pe?7:8,se=ge.length-ye,ve=Array(ye);for(var ae=0;ae<ye;++ae)ve[ae]=Q[ae]||ge[se+ae]||"";if(Pe)ve[ye-1]=la(ve[ye-1],f);var yr=ve.reduce(function(nt,Tt,gr){if(!Tt||Tt==="0"){var zt=nt[nt.length-1];if(zt&&zt.index+zt.length===gr)zt.length++;else nt.push({index:gr,length:1})}return nt},[]),et=yr.sort(function(nt,Tt){return Tt.length-nt.length})[0],st=void 0;if(et&&et.length>1){var le=ve.slice(0,et.index),tt=ve.slice(et.index+et.length);st=le.join(":")+"::"+tt.join(":")}else st=ve.join(":");if(T)st+="%"+T;return st}else return y}var Zy=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Yy="".match(/(){0}/)[1]===void 0;function Vt(y){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g={},P=f.iri!==!1?u:c;if(f.reference==="suffix")y=(f.scheme?f.scheme+":":"")+"//"+y;var E=y.match(Zy);if(E){if(Yy){if(g.scheme=E[1],g.userinfo=E[3],g.host=E[4],g.port=parseInt(E[5],10),g.path=E[6]||"",g.query=E[7],g.fragment=E[8],isNaN(g.port))g.port=E[5]}else if(g.scheme=E[1]||void 0,g.userinfo=y.indexOf("@")!==-1?E[3]:void 0,g.host=y.indexOf("//")!==-1?E[4]:void 0,g.port=parseInt(E[5],10),g.path=E[6]||"",g.query=y.indexOf("?")!==-1?E[7]:void 0,g.fragment=y.indexOf("#")!==-1?E[8]:void 0,isNaN(g.port))g.port=y.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?E[4]:void 0;if(g.host)g.host=Ku(la(g.host,P),P);if(g.scheme===void 0&&g.userinfo===void 0&&g.host===void 0&&g.port===void 0&&!g.path&&g.query===void 0)g.reference="same-document";else if(g.scheme===void 0)g.reference="relative";else if(g.fragment===void 0)g.reference="absolute";else g.reference="uri";if(f.reference&&f.reference!=="suffix"&&f.reference!==g.reference)g.error=g.error||"URI is not a "+f.reference+" reference.";var T=rt[(f.scheme||g.scheme||"").toLowerCase()];if(!f.unicodeSupport&&(!T||!T.unicodeSupport)){if(g.host&&(f.domainHost||T&&T.domainHost))try{g.host=Cr.toASCII(g.host.replace(P.PCT_ENCODED,Ar).toLowerCase())}catch(N){g.error=g.error||"Host's domain name can not be converted to ASCII via punycode: "+N}ca(g,c)}else ca(g,P);if(T&&T.parse)T.parse(g,f)}else g.error=g.error||"URI can not be parsed.";return g}function eg(y,f){var g=f.iri!==!1?u:c,P=[];if(y.userinfo!==void 0)P.push(y.userinfo),P.push("@");if(y.host!==void 0)P.push(Ku(la(String(y.host),g),g).replace(g.IPV6ADDRESS,function(E,T,N){return"["+T+(N?"%25"+N:"")+"]"}));if(typeof y.port==="number"||typeof y.port==="string")P.push(":"),P.push(String(y.port));return P.length?P.join(""):void 0}var Hu=/^\.\.?\//,Gu=/^\/\.(\/|$)/,Wu=/^\/\.\.(\/|$)/,tg=/^\/?(?:.|\n)*?(?=\/|$)/;function Nr(y){var f=[];while(y.length)if(y.match(Hu))y=y.replace(Hu,"");else if(y.match(Gu))y=y.replace(Gu,"/");else if(y.match(Wu))y=y.replace(Wu,"/"),f.pop();else if(y==="."||y==="..")y="";else{var g=y.match(tg);if(g){var P=g[0];y=y.slice(P.length),f.push(P)}else throw Error("Unexpected dot segment condition")}return f.join("")}function kt(y){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g=f.iri?u:c,P=[],E=rt[(f.scheme||y.scheme||"").toLowerCase()];if(E&&E.serialize)E.serialize(y,f);if(y.host){if(g.IPV6ADDRESS.test(y.host));else if(f.domainHost||E&&E.domainHost)try{y.host=!f.iri?Cr.toASCII(y.host.replace(g.PCT_ENCODED,Ar).toLowerCase()):Cr.toUnicode(y.host)}catch(Y){y.error=y.error||"Host's domain name can not be converted to "+(!f.iri?"ASCII":"Unicode")+" via punycode: "+Y}}if(ca(y,g),f.reference!=="suffix"&&y.scheme)P.push(y.scheme),P.push(":");var T=eg(y,f);if(T!==void 0){if(f.reference!=="suffix")P.push("//");if(P.push(T),y.path&&y.path.charAt(0)!=="/")P.push("/")}if(y.path!==void 0){var N=y.path;if(!f.absolutePath&&(!E||!E.absolutePath))N=Nr(N);if(T===void 0)N=N.replace(/^\/\//,"/%2F");P.push(N)}if(y.query!==void 0)P.push("?"),P.push(y.query);if(y.fragment!==void 0)P.push("#"),P.push(y.fragment);return P.join("")}function Ju(y,f){var g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},P=arguments[3],E={};if(!P)y=Vt(kt(y,g),g),f=Vt(kt(f,g),g);if(g=g||{},!g.tolerant&&f.scheme)E.scheme=f.scheme,E.userinfo=f.userinfo,E.host=f.host,E.port=f.port,E.path=Nr(f.path||""),E.query=f.query;else{if(f.userinfo!==void 0||f.host!==void 0||f.port!==void 0)E.userinfo=f.userinfo,E.host=f.host,E.port=f.port,E.path=Nr(f.path||""),E.query=f.query;else{if(!f.path)if(E.path=y.path,f.query!==void 0)E.query=f.query;else E.query=y.query;else{if(f.path.charAt(0)==="/")E.path=Nr(f.path);else{if((y.userinfo!==void 0||y.host!==void 0||y.port!==void 0)&&!y.path)E.path="/"+f.path;else if(!y.path)E.path=f.path;else E.path=y.path.slice(0,y.path.lastIndexOf("/")+1)+f.path;E.path=Nr(E.path)}E.query=f.query}E.userinfo=y.userinfo,E.host=y.host,E.port=y.port}E.scheme=y.scheme}return E.fragment=f.fragment,E}function rg(y,f,g){var P=a({scheme:"null"},g);return kt(Ju(Vt(y,P),Vt(f,P),P,!0),P)}function sg(y,f){if(typeof y==="string")y=kt(Vt(y,f),f);else if(s(y)==="object")y=Vt(kt(y,f),f);return y}function ng(y,f,g){if(typeof y==="string")y=kt(Vt(y,g),g);else if(s(y)==="object")y=kt(y,g);if(typeof f==="string")f=kt(Vt(f,g),g);else if(s(f)==="object")f=kt(f,g);return y===f}function ig(y,f){return y&&y.toString().replace(!f||!f.iri?c.ESCAPE:u.ESCAPE,Et)}function Ut(y,f){return y&&y.toString().replace(!f||!f.iri?c.PCT_ENCODED:u.PCT_ENCODED,Ar)}var bs={scheme:"http",domainHost:!0,parse:function(f,g){if(!f.host)f.error=f.error||"HTTP URIs must have a host.";return f},serialize:function(f,g){var P=String(f.scheme).toLowerCase()==="https";if(f.port===(P?443:80)||f.port==="")f.port=void 0;if(!f.path)f.path="/";return f}},Qu={scheme:"https",domainHost:bs.domainHost,parse:bs.parse,serialize:bs.serialize};function Bu(y){return typeof y.secure==="boolean"?y.secure:String(y.scheme).toLowerCase()==="wss"}var Ss={scheme:"ws",domainHost:!0,parse:function(f,g){var P=f;return P.secure=Bu(P),P.resourceName=(P.path||"/")+(P.query?"?"+P.query:""),P.path=void 0,P.query=void 0,P},serialize:function(f,g){if(f.port===(Bu(f)?443:80)||f.port==="")f.port=void 0;if(typeof f.secure==="boolean")f.scheme=f.secure?"wss":"ws",f.secure=void 0;if(f.resourceName){var P=f.resourceName.split("?"),E=l(P,2),T=E[0],N=E[1];f.path=T&&T!=="/"?T:void 0,f.query=N,f.resourceName=void 0}return f.fragment=void 0,f}},Xu={scheme:"wss",domainHost:Ss.domainHost,parse:Ss.parse,serialize:Ss.serialize},ag={},og=!0,Zu="[A-Za-z0-9\\-\\.\\_\\~"+(og?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]",It="[0-9A-Fa-f]",cg=r(r("%[EFef]"+It+"%"+It+It+"%"+It+It)+"|"+r("%[89A-Fa-f]"+It+"%"+It+It)+"|"+r("%"+It+It)),ug="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",lg="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",dg=t(lg,"[\\\"\\\\]"),fg="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",pg=new RegExp(Zu,"g"),qr=new RegExp(cg,"g"),mg=new RegExp(t("[^]",ug,"[\\.]","[\\\"]",dg),"g"),Yu=new RegExp(t("[^]",Zu,fg),"g"),hg=Yu;function da(y){var f=Ar(y);return!f.match(pg)?y:f}var el={scheme:"mailto",parse:function(f,g){var P=f,E=P.to=P.path?P.path.split(","):[];if(P.path=void 0,P.query){var T=!1,N={},Y=P.query.split("&");for(var ie=0,Se=Y.length;ie<Se;++ie){var Q=Y[ie].split("=");switch(Q[0]){case"to":var ge=Q[1].split(",");for(var Pe=0,ye=ge.length;Pe<ye;++Pe)E.push(ge[Pe]);break;case"subject":P.subject=Ut(Q[1],g);break;case"body":P.body=Ut(Q[1],g);break;default:T=!0,N[Ut(Q[0],g)]=Ut(Q[1],g);break}}if(T)P.headers=N}P.query=void 0;for(var se=0,ve=E.length;se<ve;++se){var ae=E[se].split("@");if(ae[0]=Ut(ae[0]),!g.unicodeSupport)try{ae[1]=Cr.toASCII(Ut(ae[1],g).toLowerCase())}catch(yr){P.error=P.error||"Email address's domain name can not be converted to ASCII via punycode: "+yr}else ae[1]=Ut(ae[1],g).toLowerCase();E[se]=ae.join("@")}return P},serialize:function(f,g){var P=f,E=i(f.to);if(E){for(var T=0,N=E.length;T<N;++T){var Y=String(E[T]),ie=Y.lastIndexOf("@"),Se=Y.slice(0,ie).replace(qr,da).replace(qr,n).replace(mg,Et),Q=Y.slice(ie+1);try{Q=!g.iri?Cr.toASCII(Ut(Q,g).toLowerCase()):Cr.toUnicode(Q)}catch(se){P.error=P.error||"Email address's domain name can not be converted to "+(!g.iri?"ASCII":"Unicode")+" via punycode: "+se}E[T]=Se+"@"+Q}P.path=E.join(",")}var ge=f.headers=f.headers||{};if(f.subject)ge.subject=f.subject;if(f.body)ge.body=f.body;var Pe=[];for(var ye in ge)if(ge[ye]!==ag[ye])Pe.push(ye.replace(qr,da).replace(qr,n).replace(Yu,Et)+"="+ge[ye].replace(qr,da).replace(qr,n).replace(hg,Et));if(Pe.length)P.query=Pe.join("&");return P}},yg=/^([^\:]+)\:(.*)/,tl={scheme:"urn",parse:function(f,g){var P=f.path&&f.path.match(yg),E=f;if(P){var T=g.scheme||E.scheme||"urn",N=P[1].toLowerCase(),Y=P[2],ie=T+":"+(g.nid||N),Se=rt[ie];if(E.nid=N,E.nss=Y,E.path=void 0,Se)E=Se.parse(E,g)}else E.error=E.error||"URN can not be parsed.";return E},serialize:function(f,g){var P=g.scheme||f.scheme||"urn",E=f.nid,T=P+":"+(g.nid||E),N=rt[T];if(N)f=N.serialize(f,g);var Y=f,ie=f.nss;return Y.path=(E||g.nid)+":"+ie,Y}},gg=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,rl={scheme:"urn:uuid",parse:function(f,g){var P=f;if(P.uuid=P.nss,P.nss=void 0,!g.tolerant&&(!P.uuid||!P.uuid.match(gg)))P.error=P.error||"UUID is not valid.";return P},serialize:function(f,g){var P=f;return P.nss=(f.uuid||"").toLowerCase(),P}};rt[bs.scheme]=bs,rt[Qu.scheme]=Qu,rt[Ss.scheme]=Ss,rt[Xu.scheme]=Xu,rt[el.scheme]=el,rt[tl.scheme]=tl,rt[rl.scheme]=rl,e.SCHEMES=rt,e.pctEncChar=Et,e.pctDecChars=Ar,e.parse=Vt,e.removeDotSegments=Nr,e.serialize=kt,e.resolveComponents=Ju,e.resolve=rg,e.normalize=sg,e.equal=ng,e.escapeComponent=ig,e.unescapeComponent=Ut,Object.defineProperty(e,"__esModule",{value:!0})})});var Rm=b(function(qc){Object.defineProperty(qc,"__esModule",{value:!0});var Tm=Di();Tm.code='require("ajv/dist/runtime/uri").default';qc.default=Tm});var Dm=b(function(Re){Object.defineProperty(Re,"__esModule",{value:!0});Re.CodeGen=Re.Name=Re.nil=Re.stringify=Re.str=Re._=Re.KeywordCxt=void 0;var DP=pn();Object.defineProperty(Re,"KeywordCxt",{enumerable:!0,get:function(){return DP.KeywordCxt}});var ds=M();Object.defineProperty(Re,"_",{enumerable:!0,get:function(){return ds._}});Object.defineProperty(Re,"str",{enumerable:!0,get:function(){return ds.str}});Object.defineProperty(Re,"stringify",{enumerable:!0,get:function(){return ds.stringify}});Object.defineProperty(Re,"nil",{enumerable:!0,get:function(){return ds.nil}});Object.defineProperty(Re,"Name",{enumerable:!0,get:function(){return ds.Name}});Object.defineProperty(Re,"CodeGen",{enumerable:!0,get:function(){return ds.CodeGen}});var MP=ji(),Am=Ci(),VP=vc(),hn=Ni(),UP=M(),yn=ln(),Mi=un(),Mc=re(),Om=km(),zP=Rm(),Nm=(e,t)=>new RegExp(e,t);Nm.code="new RegExp";var FP=["removeAdditional","useDefaults","coerceTypes"],LP=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),KP={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},HP={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},xm=200;function GP(e){var t,r,s,n,i,a,o,c,u,l,d,v,m,h,p,_,w,k,I,R,S,O,L,V,ne;let G=e.strict,$e=(t=e.code)===null||t===void 0?void 0:t.optimize,ue=$e===!0||$e===void 0?1:$e||0,Ee=(s=(r=e.code)===null||r===void 0?void 0:r.regExp)!==null&&s!==void 0?s:Nm,Me=(n=e.uriResolver)!==null&&n!==void 0?n:zP.default;return{strictSchema:(a=(i=e.strictSchema)!==null&&i!==void 0?i:G)!==null&&a!==void 0?a:!0,strictNumbers:(c=(o=e.strictNumbers)!==null&&o!==void 0?o:G)!==null&&c!==void 0?c:!0,strictTypes:(l=(u=e.strictTypes)!==null&&u!==void 0?u:G)!==null&&l!==void 0?l:"log",strictTuples:(v=(d=e.strictTuples)!==null&&d!==void 0?d:G)!==null&&v!==void 0?v:"log",strictRequired:(h=(m=e.strictRequired)!==null&&m!==void 0?m:G)!==null&&h!==void 0?h:!1,code:e.code?{...e.code,optimize:ue,regExp:Ee}:{optimize:ue,regExp:Ee},loopRequired:(p=e.loopRequired)!==null&&p!==void 0?p:xm,loopEnum:(_=e.loopEnum)!==null&&_!==void 0?_:xm,meta:(w=e.meta)!==null&&w!==void 0?w:!0,messages:(k=e.messages)!==null&&k!==void 0?k:!0,inlineRefs:(I=e.inlineRefs)!==null&&I!==void 0?I:!0,schemaId:(R=e.schemaId)!==null&&R!==void 0?R:"$id",addUsedSchema:(S=e.addUsedSchema)!==null&&S!==void 0?S:!0,validateSchema:(O=e.validateSchema)!==null&&O!==void 0?O:!0,validateFormats:(L=e.validateFormats)!==null&&L!==void 0?L:!0,unicodeRegExp:(V=e.unicodeRegExp)!==null&&V!==void 0?V:!0,int32range:(ne=e.int32range)!==null&&ne!==void 0?ne:!0,uriResolver:Me}}class Vi{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...GP(e)};let{es5:t,lines:r}=this.opts.code;this.scope=new UP.ValueScope({scope:{},prefixes:LP,es5:t,lines:r}),this.logger=ZP(e.logger);let s=e.validateFormats;if(e.validateFormats=!1,this.RULES=(0,VP.getRules)(),jm.call(this,KP,e,"NOT SUPPORTED"),jm.call(this,HP,e,"DEPRECATED","warn"),this._metaOpts=BP.call(this),e.formats)JP.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)QP.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);WP.call(this),e.validateFormats=s}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:r}=this.opts,s=Om;if(r==="id")s={...Om},s.id=s.$id,delete s.$id;if(t&&e)this.addMetaSchema(s,s[r],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let s=r(t);if(!("$async"in r))this.errors=r.errors;return s}compile(e,t){let r=this._addSchema(e,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return s.call(this,e,t);async function s(u,l){await n.call(this,u.$schema);let d=this._addSchema(u,l);return d.validate||i.call(this,d)}async function n(u){if(u&&!this.getSchema(u))await s.call(this,{$ref:u},!0)}async function i(u){try{return this._compileSchemaEnv(u)}catch(l){if(!(l instanceof Am.default))throw l;return a.call(this,l),await o.call(this,l.missingSchema),i.call(this,u)}}function a({missingSchema:u,missingRef:l}){if(this.refs[u])throw Error(`AnySchema ${u} is loaded but ${l} cannot be resolved`)}async function o(u){let l=await c.call(this,u);if(!this.refs[u])await n.call(this,l.$schema);if(!this.refs[u])this.addSchema(l,u,t)}async function c(u){let l=this._loading[u];if(l)return l;try{return await(this._loading[u]=r(u))}finally{delete this._loading[u]}}}addSchema(e,t,r,s=this.opts.validateSchema){if(Array.isArray(e)){for(let i of e)this.addSchema(i,void 0,r,s);return this}let n;if(typeof e==="object"){let{schemaId:i}=this.opts;if(n=e[i],n!==void 0&&typeof n!="string")throw Error(`schema ${i} must be string`)}return t=(0,yn.normalizeId)(t||n),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,s,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let s=this.validate(r,e);if(!s&&t){let n="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(n);else throw Error(n)}return s}getSchema(e){let t;while(typeof(t=Cm.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:r}=this.opts,s=new hn.SchemaEnv({schema:{},schemaId:r});if(t=hn.resolveSchema.call(this,s,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=Cm.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let r=e[this.opts.schemaId];if(r)r=(0,yn.normalizeId)(r),delete this.schemas[r],delete this.refs[r];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if(typeof e=="string"){if(r=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r}else if(typeof e=="object"&&t===void 0){if(t=e,r=t.keyword,Array.isArray(r)&&!r.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(eE.call(this,r,t),!t)return(0,Mc.eachItem)(r,(n)=>Dc.call(this,n)),this;rE.call(this,t);let s={...t,type:(0,Mi.getJSONTypes)(t.type),schemaType:(0,Mi.getJSONTypes)(t.schemaType)};return(0,Mc.eachItem)(r,s.type.length===0?(n)=>Dc.call(this,n,s):(n)=>s.type.forEach((i)=>Dc.call(this,n,s,i))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let r of t.rules){let s=r.rules.findIndex((n)=>n.keyword===e);if(s>=0)r.rules.splice(s,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:r="data"}={}){if(!e||e.length===0)return"No errors";return e.map((s)=>`${r}${s.instancePath} ${s.message}`).reduce((s,n)=>s+t+n)}$dataMetaSchema(e,t){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let s of t){let n=s.split("/").slice(1),i=e;for(let a of n)i=i[a];for(let a in r){let o=r[a];if(typeof o!="object")continue;let{$data:c}=o.definition,u=i[a];if(c&&u)i[a]=qm(u)}}return e}_removeAllSchemas(e,t){for(let r in e){let s=e[r];if(!t||t.test(r)){if(typeof s=="string")delete e[r];else if(s&&!s.meta)this._cache.delete(s.schema),delete e[r]}}}_addSchema(e,t,r,s=this.opts.validateSchema,n=this.opts.addUsedSchema){let i,{schemaId:a}=this.opts;if(typeof e=="object")i=e[a];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let o=this._cache.get(e);if(o!==void 0)return o;r=(0,yn.normalizeId)(i||r);let c=yn.getSchemaRefs.call(this,e,r);if(o=new hn.SchemaEnv({schema:e,schemaId:a,meta:t,baseId:r,localRefs:c}),this._cache.set(o.schema,o),n&&!r.startsWith("#")){if(r)this._checkUnique(r);this.refs[r]=o}if(s)this.validateSchema(e,!0);return o}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else hn.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{hn.compileSchema.call(this,e)}finally{this.opts=t}}}Re.default=Vi;Vi.ValidationError=MP.default;Vi.MissingRefError=Am.default;function jm(e,t,r,s="error"){for(let n in e){let i=n;if(i in t)this.logger[s](`${r}: option ${n}. ${e[i]}`)}}function Cm(e){return e=(0,yn.normalizeId)(e),this.schemas[e]||this.refs[e]}function WP(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function JP(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function QP(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let r=e[t];if(!r.keyword)r.keyword=t;this.addKeyword(r)}}function BP(){let e={...this.opts};for(let t of FP)delete e[t];return e}var XP={log(){},warn(){},error(){}};function ZP(e){if(e===!1)return XP;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var YP=/^[a-z_$][a-z0-9_$:-]*$/i;function eE(e,t){let{RULES:r}=this;if((0,Mc.eachItem)(e,(s)=>{if(r.keywords[s])throw Error(`Keyword ${s} is already defined`);if(!YP.test(s))throw Error(`Keyword ${s} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function Dc(e,t,r){var s;let n=t===null||t===void 0?void 0:t.post;if(r&&n)throw Error('keyword with "post" flag cannot have "type"');let{RULES:i}=this,a=n?i.post:i.rules.find(({type:c})=>c===r);if(!a)a={type:r,rules:[]},i.rules.push(a);if(i.keywords[e]=!0,!t)return;let o={keyword:e,definition:{...t,type:(0,Mi.getJSONTypes)(t.type),schemaType:(0,Mi.getJSONTypes)(t.schemaType)}};if(t.before)tE.call(this,a,o,t.before);else a.rules.push(o);i.all[e]=o,(s=t.implements)===null||s===void 0||s.forEach((c)=>this.addKeyword(c))}function tE(e,t,r){let s=e.rules.findIndex((n)=>n.keyword===r);if(s>=0)e.rules.splice(s,0,t);else e.rules.push(t),this.logger.warn(`rule ${r} is not defined`)}function rE(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=qm(t);e.validateSchema=this.compile(t,!0)}var sE={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function qm(e){return{anyOf:[e,sE]}}});var Mm=b(function(Vc){Object.defineProperty(Vc,"__esModule",{value:!0});var nE={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Vc.default=nE});var Fm=b(function(Or){Object.defineProperty(Or,"__esModule",{value:!0});Or.callRef=Or.getValidate=void 0;var iE=Ci(),Vm=ct(),Ze=M(),fs=Qt(),Um=Ni(),Ui=re(),aE={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:r,it:s}=e,{baseId:n,schemaEnv:i,validateName:a,opts:o,self:c}=s,{root:u}=i;if((r==="#"||r==="#/")&&n===u.baseId)return d();let l=Um.resolveRef.call(c,u,n,r);if(l===void 0)throw new iE.default(s.opts.uriResolver,n,r);if(l instanceof Um.SchemaEnv)return v(l);return m(l);function d(){if(i===u)return zi(e,a,i,i.$async);let h=t.scopeValue("root",{ref:u});return zi(e,Ze._`${h}.validate`,u,u.$async)}function v(h){let p=zm(e,h);zi(e,p,h,h.$async)}function m(h){let p=t.scopeValue("schema",o.code.source===!0?{ref:h,code:(0,Ze.stringify)(h)}:{ref:h}),_=t.name("valid"),w=e.subschema({schema:h,dataTypes:[],schemaPath:Ze.nil,topSchemaRef:p,errSchemaPath:r},_);e.mergeEvaluated(w),e.ok(_)}}};function zm(e,t){let{gen:r}=e;return t.validate?r.scopeValue("validate",{ref:t.validate}):Ze._`${r.scopeValue("wrapper",{ref:t})}.validate`}Or.getValidate=zm;function zi(e,t,r,s){let{gen:n,it:i}=e,{allErrors:a,schemaEnv:o,opts:c}=i,u=c.passContext?fs.default.this:Ze.nil;if(s)l();else d();function l(){if(!o.$async)throw Error("async schema referenced by sync schema");let h=n.let("valid");n.try(()=>{if(n.code(Ze._`await ${(0,Vm.callValidateCode)(e,t,u)}`),m(t),!a)n.assign(h,!0)},(p)=>{if(n.if(Ze._`!(${p} instanceof ${i.ValidationError})`,()=>n.throw(p)),v(p),!a)n.assign(h,!1)}),e.ok(h)}function d(){e.result((0,Vm.callValidateCode)(e,t,u),()=>m(t),()=>v(t))}function v(h){let p=Ze._`${h}.errors`;n.assign(fs.default.vErrors,Ze._`${fs.default.vErrors} === null ? ${p} : ${fs.default.vErrors}.concat(${p})`),n.assign(fs.default.errors,Ze._`${fs.default.vErrors}.length`)}function m(h){var p;if(!i.opts.unevaluated)return;let _=(p=r===null||r===void 0?void 0:r.validate)===null||p===void 0?void 0:p.evaluated;if(i.props!==!0)if(_&&!_.dynamicProps){if(_.props!==void 0)i.props=Ui.mergeEvaluated.props(n,_.props,i.props)}else{let w=n.var("props",Ze._`${h}.evaluated.props`);i.props=Ui.mergeEvaluated.props(n,w,i.props,Ze.Name)}if(i.items!==!0)if(_&&!_.dynamicItems){if(_.items!==void 0)i.items=Ui.mergeEvaluated.items(n,_.items,i.items)}else{let w=n.var("items",Ze._`${h}.evaluated.items`);i.items=Ui.mergeEvaluated.items(n,w,i.items,Ze.Name)}}}Or.callRef=zi;Or.default=aE});var Lm=b(function(Uc){Object.defineProperty(Uc,"__esModule",{value:!0});var oE=Mm(),cE=Fm(),uE=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",oE.default,cE.default];Uc.default=uE});var Km=b(function(zc){Object.defineProperty(zc,"__esModule",{value:!0});var Fi=M(),mr=Fi.operators,Li={maximum:{okStr:"<=",ok:mr.LTE,fail:mr.GT},minimum:{okStr:">=",ok:mr.GTE,fail:mr.LT},exclusiveMaximum:{okStr:"<",ok:mr.LT,fail:mr.GTE},exclusiveMinimum:{okStr:">",ok:mr.GT,fail:mr.LTE}},lE={message:({keyword:e,schemaCode:t})=>Fi.str`must be ${Li[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>Fi._`{comparison: ${Li[e].okStr}, limit: ${t}}`},dE={keyword:Object.keys(Li),type:"number",schemaType:"number",$data:!0,error:lE,code(e){let{keyword:t,data:r,schemaCode:s}=e;e.fail$data(Fi._`${r} ${Li[t].fail} ${s} || isNaN(${r})`)}};zc.default=dE});var Hm=b(function(Fc){Object.defineProperty(Fc,"__esModule",{value:!0});var gn=M(),fE={message:({schemaCode:e})=>gn.str`must be multiple of ${e}`,params:({schemaCode:e})=>gn._`{multipleOf: ${e}}`},pE={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:fE,code(e){let{gen:t,data:r,schemaCode:s,it:n}=e,i=n.opts.multipleOfPrecision,a=t.let("res"),o=i?gn._`Math.abs(Math.round(${a}) - ${a}) > 1e-${i}`:gn._`${a} !== parseInt(${a})`;e.fail$data(gn._`(${s} === 0 || (${a} = ${r}/${s}, ${o}))`)}};Fc.default=pE});var Wm=b(function(Lc){Object.defineProperty(Lc,"__esModule",{value:!0});function Gm(e){let t=e.length,r=0,s=0,n;while(s<t)if(r++,n=e.charCodeAt(s++),n>=55296&&n<=56319&&s<t){if(n=e.charCodeAt(s),(n&64512)===56320)s++}return r}Lc.default=Gm;Gm.code='require("ajv/dist/runtime/ucs2length").default'});var Jm=b(function(Kc){Object.defineProperty(Kc,"__esModule",{value:!0});var xr=M(),mE=re(),hE=Wm(),yE={message({keyword:e,schemaCode:t}){let r=e==="maxLength"?"more":"fewer";return xr.str`must NOT have ${r} than ${t} characters`},params:({schemaCode:e})=>xr._`{limit: ${e}}`},gE={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:yE,code(e){let{keyword:t,data:r,schemaCode:s,it:n}=e,i=t==="maxLength"?xr.operators.GT:xr.operators.LT,a=n.opts.unicode===!1?xr._`${r}.length`:xr._`${(0,mE.useFunc)(e.gen,hE.default)}(${r})`;e.fail$data(xr._`${a} ${i} ${s}`)}};Kc.default=gE});var Qm=b(function(Hc){Object.defineProperty(Hc,"__esModule",{value:!0});var vE=ct(),Ki=M(),_E={message:({schemaCode:e})=>Ki.str`must match pattern "${e}"`,params:({schemaCode:e})=>Ki._`{pattern: ${e}}`},$E={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:_E,code(e){let{data:t,$data:r,schema:s,schemaCode:n,it:i}=e,a=i.opts.unicodeRegExp?"u":"",o=r?Ki._`(new RegExp(${n}, ${a}))`:(0,vE.usePattern)(e,s);e.fail$data(Ki._`!${o}.test(${t})`)}};Hc.default=$E});var Bm=b(function(Gc){Object.defineProperty(Gc,"__esModule",{value:!0});var vn=M(),wE={message({keyword:e,schemaCode:t}){let r=e==="maxProperties"?"more":"fewer";return vn.str`must NOT have ${r} than ${t} properties`},params:({schemaCode:e})=>vn._`{limit: ${e}}`},bE={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:wE,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxProperties"?vn.operators.GT:vn.operators.LT;e.fail$data(vn._`Object.keys(${r}).length ${n} ${s}`)}};Gc.default=bE});var Xm=b(function(Wc){Object.defineProperty(Wc,"__esModule",{value:!0});var _n=ct(),$n=M(),SE=re(),PE={message:({params:{missingProperty:e}})=>$n.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>$n._`{missingProperty: ${e}}`},EE={keyword:"required",type:"object",schemaType:"array",$data:!0,error:PE,code(e){let{gen:t,schema:r,schemaCode:s,data:n,$data:i,it:a}=e,{opts:o}=a;if(!i&&r.length===0)return;let c=r.length>=o.loopRequired;if(a.allErrors)u();else l();if(o.strictRequired){let m=e.parentSchema.properties,{definedProperties:h}=e.it;for(let p of r)if((m===null||m===void 0?void 0:m[p])===void 0&&!h.has(p)){let _=a.schemaEnv.baseId+a.errSchemaPath,w=`required property "${p}" is not defined at "${_}" (strictRequired)`;(0,SE.checkStrictMode)(a,w,a.opts.strictRequired)}}function u(){if(c||i)e.block$data($n.nil,d);else for(let m of r)(0,_n.checkReportMissingProp)(e,m)}function l(){let m=t.let("missing");if(c||i){let h=t.let("valid",!0);e.block$data(h,()=>v(m,h)),e.ok(h)}else t.if((0,_n.checkMissingProp)(e,r,m)),(0,_n.reportMissingProp)(e,m),t.else()}function d(){t.forOf("prop",s,(m)=>{e.setParams({missingProperty:m}),t.if((0,_n.noPropertyInData)(t,n,m,o.ownProperties),()=>e.error())})}function v(m,h){e.setParams({missingProperty:m}),t.forOf(m,s,()=>{t.assign(h,(0,_n.propertyInData)(t,n,m,o.ownProperties)),t.if((0,$n.not)(h),()=>{e.error(),t.break()})},$n.nil)}}};Wc.default=EE});var Zm=b(function(Jc){Object.defineProperty(Jc,"__esModule",{value:!0});var wn=M(),kE={message({keyword:e,schemaCode:t}){let r=e==="maxItems"?"more":"fewer";return wn.str`must NOT have ${r} than ${t} items`},params:({schemaCode:e})=>wn._`{limit: ${e}}`},IE={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:kE,code(e){let{keyword:t,data:r,schemaCode:s}=e,n=t==="maxItems"?wn.operators.GT:wn.operators.LT;e.fail$data(wn._`${r}.length ${n} ${s}`)}};Jc.default=IE});var Hi=b(function(Qc){Object.defineProperty(Qc,"__esModule",{value:!0});var Ym=Ds();Ym.code='require("ajv/dist/runtime/equal").default';Qc.default=Ym});var eh=b(function(Xc){Object.defineProperty(Xc,"__esModule",{value:!0});var Bc=un(),Oe=M(),TE=re(),RE=Hi(),OE={message:({params:{i:e,j:t}})=>Oe.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>Oe._`{i: ${e}, j: ${t}}`},xE={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:OE,code(e){let{gen:t,data:r,$data:s,schema:n,parentSchema:i,schemaCode:a,it:o}=e;if(!s&&!n)return;let c=t.let("valid"),u=i.items?(0,Bc.getSchemaTypes)(i.items):[];e.block$data(c,l,Oe._`${a} === false`),e.ok(c);function l(){let h=t.let("i",Oe._`${r}.length`),p=t.let("j");e.setParams({i:h,j:p}),t.assign(c,!0),t.if(Oe._`${h} > 1`,()=>(d()?v:m)(h,p))}function d(){return u.length>0&&!u.some((h)=>h==="object"||h==="array")}function v(h,p){let _=t.name("item"),w=(0,Bc.checkDataTypes)(u,_,o.opts.strictNumbers,Bc.DataType.Wrong),k=t.const("indices",Oe._`{}`);t.for(Oe._`;${h}--;`,()=>{if(t.let(_,Oe._`${r}[${h}]`),t.if(w,Oe._`continue`),u.length>1)t.if(Oe._`typeof ${_} == "string"`,Oe._`${_} += "_"`);t.if(Oe._`typeof ${k}[${_}] == "number"`,()=>{t.assign(p,Oe._`${k}[${_}]`),e.error(),t.assign(c,!1).break()}).code(Oe._`${k}[${_}] = ${h}`)})}function m(h,p){let _=(0,TE.useFunc)(t,RE.default),w=t.name("outer");t.label(w).for(Oe._`;${h}--;`,()=>t.for(Oe._`${p} = ${h}; ${p}--;`,()=>t.if(Oe._`${_}(${r}[${h}], ${r}[${p}])`,()=>{e.error(),t.assign(c,!1).break(w)})))}}};Xc.default=xE});var th=b(function(Yc){Object.defineProperty(Yc,"__esModule",{value:!0});var Zc=M(),jE=re(),CE=Hi(),AE={message:"must be equal to constant",params:({schemaCode:e})=>Zc._`{allowedValue: ${e}}`},NE={keyword:"const",$data:!0,error:AE,code(e){let{gen:t,data:r,$data:s,schemaCode:n,schema:i}=e;if(s||i&&typeof i=="object")e.fail$data(Zc._`!${(0,jE.useFunc)(t,CE.default)}(${r}, ${n})`);else e.fail(Zc._`${i} !== ${r}`)}};Yc.default=NE});var rh=b(function(eu){Object.defineProperty(eu,"__esModule",{value:!0});var bn=M(),qE=re(),DE=Hi(),ME={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>bn._`{allowedValues: ${e}}`},VE={keyword:"enum",schemaType:"array",$data:!0,error:ME,code(e){let{gen:t,data:r,$data:s,schema:n,schemaCode:i,it:a}=e;if(!s&&n.length===0)throw Error("enum must have non-empty array");let o=n.length>=a.opts.loopEnum,c,u=()=>c!==null&&c!==void 0?c:c=(0,qE.useFunc)(t,DE.default),l;if(o||s)l=t.let("valid"),e.block$data(l,d);else{if(!Array.isArray(n))throw Error("ajv implementation error");let m=t.const("vSchema",i);l=(0,bn.or)(...n.map((h,p)=>v(m,p)))}e.pass(l);function d(){t.assign(l,!1),t.forOf("v",i,(m)=>t.if(bn._`${u()}(${r}, ${m})`,()=>t.assign(l,!0).break()))}function v(m,h){let p=n[h];return typeof p==="object"&&p!==null?bn._`${u()}(${r}, ${m}[${h}])`:bn._`${r} === ${p}`}}};eu.default=VE});var sh=b(function(tu){Object.defineProperty(tu,"__esModule",{value:!0});var UE=Km(),zE=Hm(),FE=Jm(),LE=Qm(),KE=Bm(),HE=Xm(),GE=Zm(),WE=eh(),JE=th(),QE=rh(),BE=[UE.default,zE.default,FE.default,LE.default,KE.default,HE.default,GE.default,WE.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},JE.default,QE.default];tu.default=BE});var su=b(function(Sn){Object.defineProperty(Sn,"__esModule",{value:!0});Sn.validateAdditionalItems=void 0;var jr=M(),ru=re(),XE={message:({params:{len:e}})=>jr.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>jr._`{limit: ${e}}`},ZE={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:XE,code(e){let{parentSchema:t,it:r}=e,{items:s}=t;if(!Array.isArray(s)){(0,ru.checkStrictMode)(r,'"additionalItems" is ignored when "items" is not an array of schemas');return}nh(e,s)}};function nh(e,t){let{gen:r,schema:s,data:n,keyword:i,it:a}=e;a.items=!0;let o=r.const("len",jr._`${n}.length`);if(s===!1)e.setParams({len:t.length}),e.pass(jr._`${o} <= ${t.length}`);else if(typeof s=="object"&&!(0,ru.alwaysValidSchema)(a,s)){let u=r.var("valid",jr._`${o} <= ${t.length}`);r.if((0,jr.not)(u),()=>c(u)),e.ok(u)}function c(u){r.forRange("i",t.length,o,(l)=>{if(e.subschema({keyword:i,dataProp:l,dataPropType:ru.Type.Num},u),!a.allErrors)r.if((0,jr.not)(u),()=>r.break())})}}Sn.validateAdditionalItems=nh;Sn.default=ZE});var nu=b(function(Pn){Object.defineProperty(Pn,"__esModule",{value:!0});Pn.validateTuple=void 0;var ih=M(),Gi=re(),YE=ct(),e1={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:r}=e;if(Array.isArray(t))return ah(e,"additionalItems",t);if(r.items=!0,(0,Gi.alwaysValidSchema)(r,t))return;e.ok((0,YE.validateArray)(e))}};function ah(e,t,r=e.schema){let{gen:s,parentSchema:n,data:i,keyword:a,it:o}=e;if(l(n),o.opts.unevaluated&&r.length&&o.items!==!0)o.items=Gi.mergeEvaluated.items(s,r.length,o.items);let c=s.name("valid"),u=s.const("len",ih._`${i}.length`);r.forEach((d,v)=>{if((0,Gi.alwaysValidSchema)(o,d))return;s.if(ih._`${u} > ${v}`,()=>e.subschema({keyword:a,schemaProp:v,dataProp:v},c)),e.ok(c)});function l(d){let{opts:v,errSchemaPath:m}=o,h=r.length,p=h===d.minItems&&(h===d.maxItems||d[t]===!1);if(v.strictTuples&&!p){let _=`"${a}" is ${h}-tuple, but minItems or maxItems/${t} are not specified or different at path "${m}"`;(0,Gi.checkStrictMode)(o,_,v.strictTuples)}}}Pn.validateTuple=ah;Pn.default=e1});var oh=b(function(iu){Object.defineProperty(iu,"__esModule",{value:!0});var t1=nu(),r1={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>(0,t1.validateTuple)(e,"items")};iu.default=r1});var uh=b(function(au){Object.defineProperty(au,"__esModule",{value:!0});var ch=M(),s1=re(),n1=ct(),i1=su(),a1={message:({params:{len:e}})=>ch.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>ch._`{limit: ${e}}`},o1={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:a1,code(e){let{schema:t,parentSchema:r,it:s}=e,{prefixItems:n}=r;if(s.items=!0,(0,s1.alwaysValidSchema)(s,t))return;if(n)(0,i1.validateAdditionalItems)(e,n);else e.ok((0,n1.validateArray)(e))}};au.default=o1});var lh=b(function(ou){Object.defineProperty(ou,"__esModule",{value:!0});var lt=M(),Wi=re(),c1={message:({params:{min:e,max:t}})=>t===void 0?lt.str`must contain at least ${e} valid item(s)`:lt.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?lt._`{minContains: ${e}}`:lt._`{minContains: ${e}, maxContains: ${t}}`},u1={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:c1,code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e,a,o,{minContains:c,maxContains:u}=s;if(i.opts.next)a=c===void 0?1:c,o=u;else a=1;let l=t.const("len",lt._`${n}.length`);if(e.setParams({min:a,max:o}),o===void 0&&a===0){(0,Wi.checkStrictMode)(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(o!==void 0&&a>o){(0,Wi.checkStrictMode)(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if((0,Wi.alwaysValidSchema)(i,r)){let p=lt._`${l} >= ${a}`;if(o!==void 0)p=lt._`${p} && ${l} <= ${o}`;e.pass(p);return}i.items=!0;let d=t.name("valid");if(o===void 0&&a===1)m(d,()=>t.if(d,()=>t.break()));else if(a===0){if(t.let(d,!0),o!==void 0)t.if(lt._`${n}.length > 0`,v)}else t.let(d,!1),v();e.result(d,()=>e.reset());function v(){let p=t.name("_valid"),_=t.let("count",0);m(p,()=>t.if(p,()=>h(_)))}function m(p,_){t.forRange("i",0,l,(w)=>{e.subschema({keyword:"contains",dataProp:w,dataPropType:Wi.Type.Num,compositeRule:!0},p),_()})}function h(p){if(t.code(lt._`${p}++`),o===void 0)t.if(lt._`${p} >= ${a}`,()=>t.assign(d,!0).break());else if(t.if(lt._`${p} > ${o}`,()=>t.assign(d,!1).break()),a===1)t.assign(d,!0);else t.if(lt._`${p} >= ${a}`,()=>t.assign(d,!0))}}};ou.default=u1});var ph=b(function(qt){Object.defineProperty(qt,"__esModule",{value:!0});qt.validateSchemaDeps=qt.validatePropertyDeps=qt.error=void 0;var cu=M(),l1=re(),En=ct();qt.error={message:({params:{property:e,depsCount:t,deps:r}})=>{let s=t===1?"property":"properties";return cu.str`must have ${s} ${r} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:r,missingProperty:s}})=>cu._`{property: ${e},
|
|
13
|
-
missingProperty: ${s},
|
|
14
|
-
depsCount: ${t},
|
|
15
|
-
deps: ${r}}`};var d1={keyword:"dependencies",type:"object",schemaType:"object",error:qt.error,code(e){let[t,r]=f1(e);dh(e,t),fh(e,r)}};function f1({schema:e}){let t={},r={};for(let s in e){if(s==="__proto__")continue;let n=Array.isArray(e[s])?t:r;n[s]=e[s]}return[t,r]}function dh(e,t=e.schema){let{gen:r,data:s,it:n}=e;if(Object.keys(t).length===0)return;let i=r.let("missing");for(let a in t){let o=t[a];if(o.length===0)continue;let c=(0,En.propertyInData)(r,s,a,n.opts.ownProperties);if(e.setParams({property:a,depsCount:o.length,deps:o.join(", ")}),n.allErrors)r.if(c,()=>{for(let u of o)(0,En.checkReportMissingProp)(e,u)});else r.if(cu._`${c} && (${(0,En.checkMissingProp)(e,o,i)})`),(0,En.reportMissingProp)(e,i),r.else()}}qt.validatePropertyDeps=dh;function fh(e,t=e.schema){let{gen:r,data:s,keyword:n,it:i}=e,a=r.name("valid");for(let o in t){if((0,l1.alwaysValidSchema)(i,t[o]))continue;r.if((0,En.propertyInData)(r,s,o,i.opts.ownProperties),()=>{let c=e.subschema({keyword:n,schemaProp:o},a);e.mergeValidEvaluated(c,a)},()=>r.var(a,!0)),e.ok(a)}}qt.validateSchemaDeps=fh;qt.default=d1});var hh=b(function(uu){Object.defineProperty(uu,"__esModule",{value:!0});var mh=M(),p1=re(),m1={message:"property name must be valid",params:({params:e})=>mh._`{propertyName: ${e.propertyName}}`},h1={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:m1,code(e){let{gen:t,schema:r,data:s,it:n}=e;if((0,p1.alwaysValidSchema)(n,r))return;let i=t.name("valid");t.forIn("key",s,(a)=>{e.setParams({propertyName:a}),e.subschema({keyword:"propertyNames",data:a,dataTypes:["string"],propertyName:a,compositeRule:!0},i),t.if((0,mh.not)(i),()=>{if(e.error(!0),!n.allErrors)t.break()})}),e.ok(i)}};uu.default=h1});var du=b(function(lu){Object.defineProperty(lu,"__esModule",{value:!0});var Ji=ct(),bt=M(),y1=Qt(),Qi=re(),g1={message:"must NOT have additional properties",params:({params:e})=>bt._`{additionalProperty: ${e.additionalProperty}}`},v1={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:g1,code(e){let{gen:t,schema:r,parentSchema:s,data:n,errsCount:i,it:a}=e;if(!i)throw Error("ajv implementation error");let{allErrors:o,opts:c}=a;if(a.props=!0,c.removeAdditional!=="all"&&(0,Qi.alwaysValidSchema)(a,r))return;let u=(0,Ji.allSchemaProperties)(s.properties),l=(0,Ji.allSchemaProperties)(s.patternProperties);d(),e.ok(bt._`${i} === ${y1.default.errors}`);function d(){t.forIn("key",n,(_)=>{if(!u.length&&!l.length)h(_);else t.if(v(_),()=>h(_))})}function v(_){let w;if(u.length>8){let k=(0,Qi.schemaRefOrVal)(a,s.properties,"properties");w=(0,Ji.isOwnProperty)(t,k,_)}else if(u.length)w=(0,bt.or)(...u.map((k)=>bt._`${_} === ${k}`));else w=bt.nil;if(l.length)w=(0,bt.or)(w,...l.map((k)=>bt._`${(0,Ji.usePattern)(e,k)}.test(${_})`));return(0,bt.not)(w)}function m(_){t.code(bt._`delete ${n}[${_}]`)}function h(_){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){m(_);return}if(r===!1){if(e.setParams({additionalProperty:_}),e.error(),!o)t.break();return}if(typeof r=="object"&&!(0,Qi.alwaysValidSchema)(a,r)){let w=t.name("valid");if(c.removeAdditional==="failing")p(_,w,!1),t.if((0,bt.not)(w),()=>{e.reset(),m(_)});else if(p(_,w),!o)t.if((0,bt.not)(w),()=>t.break())}}function p(_,w,k){let I={keyword:"additionalProperties",dataProp:_,dataPropType:Qi.Type.Str};if(k===!1)Object.assign(I,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(I,w)}}};lu.default=v1});var vh=b(function(pu){Object.defineProperty(pu,"__esModule",{value:!0});var _1=pn(),yh=ct(),fu=re(),gh=du(),$1={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,parentSchema:s,data:n,it:i}=e;if(i.opts.removeAdditional==="all"&&s.additionalProperties===void 0)gh.default.code(new _1.KeywordCxt(i,gh.default,"additionalProperties"));let a=(0,yh.allSchemaProperties)(r);for(let d of a)i.definedProperties.add(d);if(i.opts.unevaluated&&a.length&&i.props!==!0)i.props=fu.mergeEvaluated.props(t,(0,fu.toHash)(a),i.props);let o=a.filter((d)=>!(0,fu.alwaysValidSchema)(i,r[d]));if(o.length===0)return;let c=t.name("valid");for(let d of o){if(u(d))l(d);else{if(t.if((0,yh.propertyInData)(t,n,d,i.opts.ownProperties)),l(d),!i.allErrors)t.else().var(c,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(c)}function u(d){return i.opts.useDefaults&&!i.compositeRule&&r[d].default!==void 0}function l(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};pu.default=$1});var bh=b(function(mu){Object.defineProperty(mu,"__esModule",{value:!0});var _h=ct(),Bi=M(),$h=re(),wh=re(),w1={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,data:s,parentSchema:n,it:i}=e,{opts:a}=i,o=(0,_h.allSchemaProperties)(r),c=o.filter((p)=>(0,$h.alwaysValidSchema)(i,r[p]));if(o.length===0||c.length===o.length&&(!i.opts.unevaluated||i.props===!0))return;let u=a.strictSchema&&!a.allowMatchingProperties&&n.properties,l=t.name("valid");if(i.props!==!0&&!(i.props instanceof Bi.Name))i.props=(0,wh.evaluatedPropsToName)(t,i.props);let{props:d}=i;v();function v(){for(let p of o){if(u)m(p);if(i.allErrors)h(p);else t.var(l,!0),h(p),t.if(l)}}function m(p){for(let _ in u)if(new RegExp(p).test(_))(0,$h.checkStrictMode)(i,`property ${_} matches pattern ${p} (use allowMatchingProperties)`)}function h(p){t.forIn("key",s,(_)=>{t.if(Bi._`${(0,_h.usePattern)(e,p)}.test(${_})`,()=>{let w=c.includes(p);if(!w)e.subschema({keyword:"patternProperties",schemaProp:p,dataProp:_,dataPropType:wh.Type.Str},l);if(i.opts.unevaluated&&d!==!0)t.assign(Bi._`${d}[${_}]`,!0);else if(!w&&!i.allErrors)t.if((0,Bi.not)(l),()=>t.break())})})}}};mu.default=w1});var Sh=b(function(hu){Object.defineProperty(hu,"__esModule",{value:!0});var b1=re(),S1={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:r,it:s}=e;if((0,b1.alwaysValidSchema)(s,r)){e.fail();return}let n=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),e.failResult(n,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};hu.default=S1});var Ph=b(function(yu){Object.defineProperty(yu,"__esModule",{value:!0});var P1=ct(),E1={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:P1.validateUnion,error:{message:"must match a schema in anyOf"}};yu.default=E1});var Eh=b(function(gu){Object.defineProperty(gu,"__esModule",{value:!0});var Xi=M(),k1=re(),I1={message:"must match exactly one schema in oneOf",params:({params:e})=>Xi._`{passingSchemas: ${e.passing}}`},T1={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:I1,code(e){let{gen:t,schema:r,parentSchema:s,it:n}=e;if(!Array.isArray(r))throw Error("ajv implementation error");if(n.opts.discriminator&&s.discriminator)return;let i=r,a=t.let("valid",!1),o=t.let("passing",null),c=t.name("_valid");e.setParams({passing:o}),t.block(u),e.result(a,()=>e.reset(),()=>e.error(!0));function u(){i.forEach((l,d)=>{let v;if((0,k1.alwaysValidSchema)(n,l))t.var(c,!0);else v=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c);if(d>0)t.if(Xi._`${c} && ${a}`).assign(a,!1).assign(o,Xi._`[${o}, ${d}]`).else();t.if(c,()=>{if(t.assign(a,!0),t.assign(o,d),v)e.mergeEvaluated(v,Xi.Name)})})}}};gu.default=T1});var kh=b(function(vu){Object.defineProperty(vu,"__esModule",{value:!0});var R1=re(),O1={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:r,it:s}=e;if(!Array.isArray(r))throw Error("ajv implementation error");let n=t.name("valid");r.forEach((i,a)=>{if((0,R1.alwaysValidSchema)(s,i))return;let o=e.subschema({keyword:"allOf",schemaProp:a},n);e.ok(n),e.mergeEvaluated(o)})}};vu.default=O1});var Rh=b(function(_u){Object.defineProperty(_u,"__esModule",{value:!0});var Zi=M(),Th=re(),x1={message:({params:e})=>Zi.str`must match "${e.ifClause}" schema`,params:({params:e})=>Zi._`{failingKeyword: ${e.ifClause}}`},j1={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:x1,code(e){let{gen:t,parentSchema:r,it:s}=e;if(r.then===void 0&&r.else===void 0)(0,Th.checkStrictMode)(s,'"if" without "then" and "else" is ignored');let n=Ih(s,"then"),i=Ih(s,"else");if(!n&&!i)return;let a=t.let("valid",!0),o=t.name("_valid");if(c(),e.reset(),n&&i){let l=t.let("ifClause");e.setParams({ifClause:l}),t.if(o,u("then",l),u("else",l))}else if(n)t.if(o,u("then"));else t.if((0,Zi.not)(o),u("else"));e.pass(a,()=>e.error(!0));function c(){let l=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},o);e.mergeEvaluated(l)}function u(l,d){return()=>{let v=e.subschema({keyword:l},o);if(t.assign(a,o),e.mergeValidEvaluated(v,a),d)t.assign(d,Zi._`${l}`);else e.setParams({ifClause:l})}}}};function Ih(e,t){let r=e.schema[t];return r!==void 0&&!(0,Th.alwaysValidSchema)(e,r)}_u.default=j1});var Oh=b(function($u){Object.defineProperty($u,"__esModule",{value:!0});var C1=re(),A1={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){if(t.if===void 0)(0,C1.checkStrictMode)(r,`"${e}" without "if" is ignored`)}};$u.default=A1});var xh=b(function(wu){Object.defineProperty(wu,"__esModule",{value:!0});var N1=su(),q1=oh(),D1=nu(),M1=uh(),V1=lh(),U1=ph(),z1=hh(),F1=du(),L1=vh(),K1=bh(),H1=Sh(),G1=Ph(),W1=Eh(),J1=kh(),Q1=Rh(),B1=Oh();function X1(e=!1){let t=[H1.default,G1.default,W1.default,J1.default,Q1.default,B1.default,z1.default,F1.default,U1.default,L1.default,K1.default];if(e)t.push(q1.default,M1.default);else t.push(N1.default,D1.default);return t.push(V1.default),t}wu.default=X1});var jh=b(function(bu){Object.defineProperty(bu,"__esModule",{value:!0});var be=M(),Z1={message:({schemaCode:e})=>be.str`must match format "${e}"`,params:({schemaCode:e})=>be._`{format: ${e}}`},Y1={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:Z1,code(e,t){let{gen:r,data:s,$data:n,schema:i,schemaCode:a,it:o}=e,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=o;if(!c.validateFormats)return;if(n)v();else m();function v(){let h=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),p=r.const("fDef",be._`${h}[${a}]`),_=r.let("fType"),w=r.let("format");r.if(be._`typeof ${p} == "object" && !(${p} instanceof RegExp)`,()=>r.assign(_,be._`${p}.type || "string"`).assign(w,be._`${p}.validate`),()=>r.assign(_,be._`"string"`).assign(w,p)),e.fail$data((0,be.or)(k(),I()));function k(){if(c.strictSchema===!1)return be.nil;return be._`${a} && !${w}`}function I(){let R=l.$async?be._`(${p}.async ? await ${w}(${s}) : ${w}(${s}))`:be._`${w}(${s})`,S=be._`(typeof ${w} == "function" ? ${R} : ${w}.test(${s}))`;return be._`${w} && ${w} !== true && ${_} === ${t} && !${S}`}}function m(){let h=d.formats[i];if(!h){k();return}if(h===!0)return;let[p,_,w]=I(h);if(p===t)e.pass(R());function k(){if(c.strictSchema===!1){d.logger.warn(S());return}throw Error(S());function S(){return`unknown format "${i}" ignored in schema at path "${u}"`}}function I(S){let O=S instanceof RegExp?(0,be.regexpCode)(S):c.code.formats?be._`${c.code.formats}${(0,be.getProperty)(i)}`:void 0,L=r.scopeValue("formats",{key:i,ref:S,code:O});if(typeof S=="object"&&!(S instanceof RegExp))return[S.type||"string",S.validate,be._`${L}.validate`];return["string",S,L]}function R(){if(typeof h=="object"&&!(h instanceof RegExp)&&h.async){if(!l.$async)throw Error("async format in sync schema");return be._`await ${w}(${s})`}return typeof _=="function"?be._`${w}(${s})`:be._`${w}.test(${s})`}}}};bu.default=Y1});var Ch=b(function(Su){Object.defineProperty(Su,"__esModule",{value:!0});var ek=jh(),tk=[ek.default];Su.default=tk});var Ah=b(function(ps){Object.defineProperty(ps,"__esModule",{value:!0});ps.contentVocabulary=ps.metadataVocabulary=void 0;ps.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];ps.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var qh=b(function(Pu){Object.defineProperty(Pu,"__esModule",{value:!0});var rk=Lm(),sk=sh(),nk=xh(),ik=Ch(),Nh=Ah(),ak=[rk.default,sk.default,(0,nk.default)(),ik.default,Nh.metadataVocabulary,Nh.contentVocabulary];Pu.default=ak});var Dh=b(function(kn){Object.defineProperty(kn,"__esModule",{value:!0});kn.DiscrError=void 0;var ok;(function(e){e.Tag="tag",e.Mapping="mapping"})(ok=kn.DiscrError||(kn.DiscrError={}))});var Vh=b(function(ku){Object.defineProperty(ku,"__esModule",{value:!0});var ms=M(),Eu=Dh(),Mh=Ni(),ck=re(),uk={message:({params:{discrError:e,tagName:t}})=>e===Eu.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>ms._`{error: ${e}, tag: ${r}, tagValue: ${t}}`},lk={keyword:"discriminator",type:"object",schemaType:"object",error:uk,code(e){let{gen:t,data:r,schema:s,parentSchema:n,it:i}=e,{oneOf:a}=n;if(!i.opts.discriminator)throw Error("discriminator: requires discriminator option");let o=s.propertyName;if(typeof o!="string")throw Error("discriminator: requires propertyName");if(s.mapping)throw Error("discriminator: mapping is not supported");if(!a)throw Error("discriminator: requires oneOf keyword");let c=t.let("valid",!1),u=t.const("tag",ms._`${r}${(0,ms.getProperty)(o)}`);t.if(ms._`typeof ${u} == "string"`,()=>l(),()=>e.error(!1,{discrError:Eu.DiscrError.Tag,tag:u,tagName:o})),e.ok(c);function l(){let m=v();t.if(!1);for(let h in m)t.elseIf(ms._`${u} === ${h}`),t.assign(c,d(m[h]));t.else(),e.error(!1,{discrError:Eu.DiscrError.Mapping,tag:u,tagName:o}),t.endIf()}function d(m){let h=t.name("valid"),p=e.subschema({keyword:"oneOf",schemaProp:m},h);return e.mergeEvaluated(p,ms.Name),h}function v(){var m;let h={},p=w(n),_=!0;for(let R=0;R<a.length;R++){let S=a[R];if((S===null||S===void 0?void 0:S.$ref)&&!(0,ck.schemaHasRulesButRef)(S,i.self.RULES)){if(S=Mh.resolveRef.call(i.self,i.schemaEnv.root,i.baseId,S===null||S===void 0?void 0:S.$ref),S instanceof Mh.SchemaEnv)S=S.schema}let O=(m=S===null||S===void 0?void 0:S.properties)===null||m===void 0?void 0:m[o];if(typeof O!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${o}"`);_=_&&(p||w(S)),k(O,R)}if(!_)throw Error(`discriminator: "${o}" must be required`);return h;function w({required:R}){return Array.isArray(R)&&R.includes(o)}function k(R,S){if(R.const)I(R.const,S);else if(R.enum)for(let O of R.enum)I(O,S);else throw Error(`discriminator: "properties/${o}" must have "const" or "enum"`)}function I(R,S){if(typeof R!="string"||R in h)throw Error(`discriminator: "${o}" values must be unique strings`);h[R]=S}}}};ku.default=lk});var Uh=b(function(sO,dk){dk.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Lh=b(function(_e,Fh){Object.defineProperty(_e,"__esModule",{value:!0});_e.MissingRefError=_e.ValidationError=_e.CodeGen=_e.Name=_e.nil=_e.stringify=_e.str=_e._=_e.KeywordCxt=void 0;var fk=Dm(),pk=qh(),mk=Vh(),zh=Uh(),hk=["/properties"],Yi="http://json-schema.org/draft-07/schema";class Iu extends fk.default{_addVocabularies(){if(super._addVocabularies(),pk.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(mk.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(zh,hk):zh;this.addMetaSchema(e,Yi,!1),this.refs["http://json-schema.org/schema"]=Yi}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(Yi)?Yi:void 0)}}Fh.exports=_e=Iu;Object.defineProperty(_e,"__esModule",{value:!0});_e.default=Iu;var yk=pn();Object.defineProperty(_e,"KeywordCxt",{enumerable:!0,get:function(){return yk.KeywordCxt}});var hs=M();Object.defineProperty(_e,"_",{enumerable:!0,get:function(){return hs._}});Object.defineProperty(_e,"str",{enumerable:!0,get:function(){return hs.str}});Object.defineProperty(_e,"stringify",{enumerable:!0,get:function(){return hs.stringify}});Object.defineProperty(_e,"nil",{enumerable:!0,get:function(){return hs.nil}});Object.defineProperty(_e,"Name",{enumerable:!0,get:function(){return hs.Name}});Object.defineProperty(_e,"CodeGen",{enumerable:!0,get:function(){return hs.CodeGen}});var gk=ji();Object.defineProperty(_e,"ValidationError",{enumerable:!0,get:function(){return gk.default}});var vk=Ci();Object.defineProperty(_e,"MissingRefError",{enumerable:!0,get:function(){return vk.default}})});var Kh=b(function(ys){Object.defineProperty(ys,"__esModule",{value:!0});ys.formatLimitDefinition=void 0;var _k=Lh(),St=M(),hr=St.operators,ea={formatMaximum:{okStr:"<=",ok:hr.LTE,fail:hr.GT},formatMinimum:{okStr:">=",ok:hr.GTE,fail:hr.LT},formatExclusiveMaximum:{okStr:"<",ok:hr.LT,fail:hr.GTE},formatExclusiveMinimum:{okStr:">",ok:hr.GT,fail:hr.LTE}},$k={message:({keyword:e,schemaCode:t})=>St.str`should be ${ea[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>St._`{comparison: ${ea[e].okStr}, limit: ${t}}`};ys.formatLimitDefinition={keyword:Object.keys(ea),type:"string",schemaType:"string",$data:!0,error:$k,code(e){let{gen:t,data:r,schemaCode:s,keyword:n,it:i}=e,{opts:a,self:o}=i;if(!a.validateFormats)return;let c=new _k.KeywordCxt(i,o.RULES.all.format.definition,"format");if(c.$data)u();else l();function u(){let v=t.scopeValue("formats",{ref:o.formats,code:a.code.formats}),m=t.const("fmt",St._`${v}[${c.schemaCode}]`);e.fail$data(St.or(St._`typeof ${m} != "object"`,St._`${m} instanceof RegExp`,St._`typeof ${m}.compare != "function"`,d(m)))}function l(){let v=c.schema,m=o.formats[v];if(!m||m===!0)return;if(typeof m!="object"||m instanceof RegExp||typeof m.compare!="function")throw Error(`"${n}": format "${v}" does not define "compare" function`);let h=t.scopeValue("formats",{key:v,ref:m,code:a.code.formats?St._`${a.code.formats}${St.getProperty(v)}`:void 0});e.fail$data(d(h))}function d(v){return St._`${v}.compare(${r}, ${s}) ${ea[n].fail} 0`}},dependencies:["format"]};var wk=(e)=>(e.addKeyword(ys.formatLimitDefinition),e);ys.default=wk});var Jh=b(function(In,Wh){Object.defineProperty(In,"__esModule",{value:!0});var gs=mp(),bk=Kh(),Tu=M(),Hh=new Tu.Name("fullFormats"),Sk=new Tu.Name("fastFormats"),Ru=(e,t={keywords:!0})=>{if(Array.isArray(t))return Gh(e,t,gs.fullFormats,Hh),e;let[r,s]=t.mode==="fast"?[gs.fastFormats,Sk]:[gs.fullFormats,Hh],n=t.formats||gs.formatNames;if(Gh(e,n,r,s),t.keywords)bk.default(e);return e};Ru.get=(e,t="full")=>{let s=(t==="fast"?gs.fastFormats:gs.fullFormats)[e];if(!s)throw Error(`Unknown format "${e}"`);return s};function Gh(e,t,r,s){var n,i;(n=(i=e.opts.code).formats)!==null&&n!==void 0||(i.formats=Tu._`require("ajv-formats/dist/formats").${s}`);for(let a of t)e.addFormat(a,r[a])}Wh.exports=In=Ru;Object.defineProperty(In,"__esModule",{value:!0});In.default=Ru});var Bh=b(function(Qh,ta){(function(e,t){if(typeof ta==="object"&&ta.exports)ta.exports=t();else e.nearley=t()})(Qh,function(){function e(c,u,l){return this.id=++e.highestId,this.name=c,this.symbols=u,this.postprocess=l,this}e.highestId=0,e.prototype.toString=function(c){var u=typeof c>"u"?this.symbols.map(o).join(" "):this.symbols.slice(0,c).map(o).join(" ")+" ● "+this.symbols.slice(c).map(o).join(" ");return this.name+" → "+u};function t(c,u,l,d){this.rule=c,this.dot=u,this.reference=l,this.data=[],this.wantedBy=d,this.isComplete=this.dot===c.symbols.length}t.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},t.prototype.nextState=function(c){var u=new t(this.rule,this.dot+1,this.reference,this.wantedBy);if(u.left=this,u.right=c,u.isComplete)u.data=u.build(),u.right=void 0;return u},t.prototype.build=function(){var c=[],u=this;do c.push(u.right.data),u=u.left;while(u.left);return c.reverse(),c},t.prototype.finish=function(){if(this.rule.postprocess)this.data=this.rule.postprocess(this.data,this.reference,i.fail)};function r(c,u){this.grammar=c,this.index=u,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(c){var u=this.states,l=this.wants,d=this.completed;for(var v=0;v<u.length;v++){var m=u[v];if(m.isComplete){if(m.finish(),m.data!==i.fail){var h=m.wantedBy;for(var p=h.length;p--;){var _=h[p];this.complete(_,m)}if(m.reference===this.index){var w=m.rule.name;(this.completed[w]=this.completed[w]||[]).push(m)}}}else{var w=m.rule.symbols[m.dot];if(typeof w!=="string"){this.scannable.push(m);continue}if(l[w]){if(l[w].push(m),d.hasOwnProperty(w)){var k=d[w];for(var p=0;p<k.length;p++){var I=k[p];this.complete(m,I)}}}else l[w]=[m],this.predict(w)}}},r.prototype.predict=function(c){var u=this.grammar.byName[c]||[];for(var l=0;l<u.length;l++){var d=u[l],v=this.wants[c],m=new t(d,0,this.index,v);this.states.push(m)}},r.prototype.complete=function(c,u){var l=c.nextState(u);this.states.push(l)};function s(c,u){this.rules=c,this.start=u||this.rules[0].name;var l=this.byName={};this.rules.forEach(function(d){if(!l.hasOwnProperty(d.name))l[d.name]=[];l[d.name].push(d)})}s.fromCompiled=function(d,u){var l=d.Lexer;if(d.ParserStart)u=d.ParserStart,d=d.ParserRules;var d=d.map(function(m){return new e(m.name,m.symbols,m.postprocess)}),v=new s(d,u);return v.lexer=l,v};function n(){this.reset("")}n.prototype.reset=function(c,u){this.buffer=c,this.index=0,this.line=u?u.line:1,this.lastLineBreak=u?-u.col:0},n.prototype.next=function(){if(this.index<this.buffer.length){var c=this.buffer[this.index++];if(c===`
|
|
16
|
-
`)this.line+=1,this.lastLineBreak=this.index;return{value:c}}},n.prototype.save=function(){return{line:this.line,col:this.index-this.lastLineBreak}},n.prototype.formatError=function(c,u){var l=this.buffer;if(typeof l==="string"){var d=l.split(`
|
|
17
|
-
`).slice(Math.max(0,this.line-5),this.line),v=l.indexOf(`
|
|
18
|
-
`,this.index);if(v===-1)v=l.length;var m=this.index-this.lastLineBreak,h=String(this.line).length;return u+=" at line "+this.line+" col "+m+`:
|
|
19
|
-
|
|
20
|
-
`,u+=d.map(function(_,w){return p(this.line-d.length+w+1,h)+" "+_},this).join(`
|
|
21
|
-
`),u+=`
|
|
22
|
-
`+p("",h+m)+`^
|
|
23
|
-
`,u}else return u+" at index "+(this.index-1);function p(_,w){var k=String(_);return Array(w-k.length+1).join(" ")+k}};function i(c,u,l){if(c instanceof s)var d=c,l=u;else var d=s.fromCompiled(c,u);this.grammar=d,this.options={keepHistory:!1,lexer:d.lexer||new n};for(var v in l||{})this.options[v]=l[v];this.lexer=this.options.lexer,this.lexerState=void 0;var m=new r(d,0),h=this.table=[m];m.wants[d.start]=[],m.predict(d.start),m.process(),this.current=0}i.fail={},i.prototype.feed=function(c){var u=this.lexer;u.reset(c,this.lexerState);var l;while(!0){try{if(l=u.next(),!l)break}catch(O){var h=new r(this.grammar,this.current+1);this.table.push(h);var d=Error(this.reportLexerError(O));throw d.offset=this.current,d.token=O.token,d}var v=this.table[this.current];if(!this.options.keepHistory)delete this.table[this.current-1];var m=this.current+1,h=new r(this.grammar,m);this.table.push(h);var p=l.text!==void 0?l.text:l.value,_=u.constructor===n?l.value:l,w=v.scannable;for(var k=w.length;k--;){var I=w[k],R=I.rule.symbols[I.dot];if(R.test?R.test(_):R.type?R.type===l.type:R.literal===p){var S=I.nextState({data:_,token:l,isToken:!0,reference:m-1});h.states.push(S)}}if(h.process(),h.states.length===0){var d=Error(this.reportError(l));throw d.offset=this.current,d.token=l,d}if(this.options.keepHistory)v.lexerState=u.save();this.current++}if(v)this.lexerState=u.save();return this.results=this.finish(),this},i.prototype.reportLexerError=function(c){var u,l,d=c.token;if(d)u="input "+JSON.stringify(d.text[0])+" (lexer error)",l=this.lexer.formatError(d,"Syntax error");else u="input (lexer error)",l=c.message;return this.reportErrorCommon(l,u)},i.prototype.reportError=function(c){var u=(c.type?c.type+" token: ":"")+JSON.stringify(c.value!==void 0?c.value:c),l=this.lexer.formatError(c,"Syntax error");return this.reportErrorCommon(l,u)},i.prototype.reportErrorCommon=function(c,u){var l=[];l.push(c);var d=this.table.length-2,v=this.table[d],m=v.states.filter(function(p){var _=p.rule.symbols[p.dot];return _&&typeof _!=="string"});if(m.length===0)l.push("Unexpected "+u+`. I did not expect any more input. Here is the state of my parse table:
|
|
24
|
-
`),this.displayStateStack(v.states,l);else{l.push("Unexpected "+u+`. Instead, I was expecting to see one of the following:
|
|
25
|
-
`);var h=m.map(function(p){return this.buildFirstStateStack(p,[])||[p]},this);h.forEach(function(p){var _=p[0],w=_.rule.symbols[_.dot],k=this.getSymbolDisplay(w);l.push("A "+k+" based on:"),this.displayStateStack(p,l)},this)}return l.push(""),l.join(`
|
|
26
|
-
`)},i.prototype.displayStateStack=function(c,u){var l,d=0;for(var v=0;v<c.length;v++){var m=c[v],h=m.rule.toString(m.dot);if(h===l)d++;else{if(d>0)u.push(" ^ "+d+" more lines identical to this");d=0,u.push(" "+h)}l=h}},i.prototype.getSymbolDisplay=function(c){return a(c)},i.prototype.buildFirstStateStack=function(c,u){if(u.indexOf(c)!==-1)return null;if(c.wantedBy.length===0)return[c];var l=c.wantedBy[0],d=[c].concat(u),v=this.buildFirstStateStack(l,d);if(v===null)return null;return[c].concat(v)},i.prototype.save=function(){var c=this.table[this.current];return c.lexerState=this.lexerState,c},i.prototype.restore=function(c){var u=c.index;this.current=u,this.table[u]=c,this.table.splice(u+1),this.lexerState=c.lexerState,this.results=this.finish()},i.prototype.rewind=function(c){if(!this.options.keepHistory)throw Error("set option `keepHistory` to enable rewinding");this.restore(this.table[c])},i.prototype.finish=function(){var c=[],u=this.grammar.start,l=this.table[this.table.length-1];return l.states.forEach(function(d){if(d.rule.name===u&&d.dot===d.rule.symbols.length&&d.reference===0&&d.data!==i.fail)c.push(d)}),c.map(function(d){return d.data})};function a(c){var u=typeof c;if(u==="string")return c;else if(u==="object")if(c.literal)return JSON.stringify(c.literal);else if(c instanceof RegExp)return"character matching "+c;else if(c.type)return c.type+" token";else if(c.test)return"token matching "+String(c.test);else throw Error("Unknown symbol type: "+c)}function o(c){var u=typeof c;if(u==="string")return c;else if(u==="object")if(c.literal)return JSON.stringify(c.literal);else if(c instanceof RegExp)return c.toString();else if(c.type)return"%"+c.type;else if(c.test)return"<"+String(c.test)+">";else throw Error("Unknown symbol type: "+c)}return{Parser:i,Grammar:s,Rule:e}})});var Zh=b(function(Ou){Object.defineProperty(Ou,"__esModule",{value:!0});function xe(e){return e[0]}var Xh=(e)=>[].concat(...e.map((t)=>Array.isArray(t)?Xh(t):t));function vs(e){if(e){if(Array.isArray(e))return Xh(e).join("");return e}return""}var Pk={Lexer:void 0,ParserRules:[{name:"Reverse_path",symbols:["Path"]},{name:"Reverse_path$string$1",symbols:[{literal:"<"},{literal:">"}],postprocess:(e)=>e.join("")},{name:"Reverse_path",symbols:["Reverse_path$string$1"]},{name:"Forward_path$subexpression$1$subexpression$1",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:"@"}],postprocess:function(e){return e.join("")}},{name:"Forward_path$subexpression$1",symbols:["Forward_path$subexpression$1$subexpression$1","Domain",{literal:">"}]},{name:"Forward_path",symbols:["Forward_path$subexpression$1"]},{name:"Forward_path$subexpression$2",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:">"}],postprocess:function(e){return e.join("")}},{name:"Forward_path",symbols:["Forward_path$subexpression$2"]},{name:"Forward_path",symbols:["Path"]},{name:"Path$ebnf$1$subexpression$1",symbols:["A_d_l",{literal:":"}]},{name:"Path$ebnf$1",symbols:["Path$ebnf$1$subexpression$1"],postprocess:xe},{name:"Path$ebnf$1",symbols:[],postprocess:()=>null},{name:"Path",symbols:[{literal:"<"},"Path$ebnf$1","Mailbox",{literal:">"}]},{name:"A_d_l$ebnf$1",symbols:[]},{name:"A_d_l$ebnf$1$subexpression$1",symbols:[{literal:","},"At_domain"]},{name:"A_d_l$ebnf$1",symbols:["A_d_l$ebnf$1","A_d_l$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"A_d_l",symbols:["At_domain","A_d_l$ebnf$1"]},{name:"At_domain",symbols:[{literal:"@"},"Domain"]},{name:"Domain$ebnf$1",symbols:[]},{name:"Domain$ebnf$1$subexpression$1",symbols:[{literal:"."},"sub_domain"]},{name:"Domain$ebnf$1",symbols:["Domain$ebnf$1","Domain$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Domain",symbols:["sub_domain","Domain$ebnf$1"]},{name:"sub_domain",symbols:["U_label"]},{name:"Let_dig",symbols:["ALPHA_DIGIT"],postprocess:xe},{name:"Ldh_str$ebnf$1",symbols:[]},{name:"Ldh_str$ebnf$1",symbols:["Ldh_str$ebnf$1","ALPHA_DIG_DASH"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Ldh_str",symbols:["Ldh_str$ebnf$1","Let_dig"]},{name:"U_Let_dig",symbols:["ALPHA_DIGIT_U"],postprocess:xe},{name:"U_Ldh_str$ebnf$1",symbols:[]},{name:"U_Ldh_str$ebnf$1",symbols:["U_Ldh_str$ebnf$1","ALPHA_DIG_DASH_U"],postprocess:(e)=>e[0].concat([e[1]])},{name:"U_Ldh_str",symbols:["U_Ldh_str$ebnf$1","U_Let_dig"]},{name:"U_label$ebnf$1$subexpression$1",symbols:["U_Ldh_str"]},{name:"U_label$ebnf$1",symbols:["U_label$ebnf$1$subexpression$1"],postprocess:xe},{name:"U_label$ebnf$1",symbols:[],postprocess:()=>null},{name:"U_label",symbols:["U_Let_dig","U_label$ebnf$1"]},{name:"address_literal$subexpression$1",symbols:["IPv4_address_literal"]},{name:"address_literal$subexpression$1",symbols:["IPv6_address_literal"]},{name:"address_literal$subexpression$1",symbols:["General_address_literal"]},{name:"address_literal",symbols:[{literal:"["},"address_literal$subexpression$1",{literal:"]"}]},{name:"non_local_part",symbols:["Domain"],postprocess:function(e){return{DomainName:vs(e[0])}}},{name:"non_local_part",symbols:["address_literal"],postprocess:function(e){return{AddressLiteral:vs(e[0])}}},{name:"Mailbox",symbols:["Local_part",{literal:"@"},"non_local_part"],postprocess:function(e){return{localPart:vs(e[0]),domainPart:vs(e[2])}}},{name:"Local_part",symbols:["Dot_string"],postprocess:function(e){return{DotString:vs(e[0])}}},{name:"Local_part",symbols:["Quoted_string"],postprocess:function(e){return{QuotedString:vs(e[0])}}},{name:"Dot_string$ebnf$1",symbols:[]},{name:"Dot_string$ebnf$1$subexpression$1",symbols:[{literal:"."},"Atom"]},{name:"Dot_string$ebnf$1",symbols:["Dot_string$ebnf$1","Dot_string$ebnf$1$subexpression$1"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Dot_string",symbols:["Atom","Dot_string$ebnf$1"]},{name:"Atom$ebnf$1",symbols:[/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/]},{name:"Atom$ebnf$1",symbols:["Atom$ebnf$1",/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/],postprocess:(e)=>e[0].concat([e[1]])},{name:"Atom",symbols:["Atom$ebnf$1"]},{name:"Quoted_string$ebnf$1",symbols:[]},{name:"Quoted_string$ebnf$1",symbols:["Quoted_string$ebnf$1","QcontentSMTP"],postprocess:(e)=>e[0].concat([e[1]])},{name:"Quoted_string",symbols:["DQUOTE","Quoted_string$ebnf$1","DQUOTE"]},{name:"QcontentSMTP",symbols:["qtextSMTP"]},{name:"QcontentSMTP",symbols:["quoted_pairSMTP"]},{name:"quoted_pairSMTP",symbols:[{literal:"\\"},/[\x20-\x7e]/]},{name:"qtextSMTP",symbols:[/[\x20-\x21\x23-\x5b\x5d-\x7e\u0080-\uFFFF]/],postprocess:xe},{name:"IPv4_address_literal$macrocall$2",symbols:[{literal:"."},"Snum"]},{name:"IPv4_address_literal$macrocall$1",symbols:["IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2"]},{name:"IPv4_address_literal",symbols:["Snum","IPv4_address_literal$macrocall$1"]},{name:"IPv6_address_literal$subexpression$1",symbols:[/[iI]/,/[pP]/,/[vV]/,{literal:"6"},{literal:":"}],postprocess:function(e){return e.join("")}},{name:"IPv6_address_literal",symbols:["IPv6_address_literal$subexpression$1","IPv6_addr"]},{name:"General_address_literal$ebnf$1",symbols:["dcontent"]},{name:"General_address_literal$ebnf$1",symbols:["General_address_literal$ebnf$1","dcontent"],postprocess:(e)=>e[0].concat([e[1]])},{name:"General_address_literal",symbols:["Standardized_tag",{literal:":"},"General_address_literal$ebnf$1"]},{name:"Standardized_tag",symbols:["Ldh_str"]},{name:"dcontent",symbols:[/[\x21-\x5a\x5e-\x7e]/],postprocess:xe},{name:"Snum",symbols:["DIGIT"]},{name:"Snum$subexpression$1",symbols:[/[1-9]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$1"]},{name:"Snum$subexpression$2",symbols:[{literal:"1"},"DIGIT","DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$2"]},{name:"Snum$subexpression$3",symbols:[{literal:"2"},/[0-4]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$3"]},{name:"Snum$subexpression$4",symbols:[{literal:"2"},{literal:"5"},/[0-5]/]},{name:"Snum",symbols:["Snum$subexpression$4"]},{name:"IPv6_addr",symbols:["IPv6_full"]},{name:"IPv6_addr",symbols:["IPv6_comp"]},{name:"IPv6_addr",symbols:["IPv6v4_full"]},{name:"IPv6_addr",symbols:["IPv6v4_comp"]},{name:"IPv6_hex",symbols:["HEXDIG"]},{name:"IPv6_hex$subexpression$1",symbols:["HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$1"]},{name:"IPv6_hex$subexpression$2",symbols:["HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$2"]},{name:"IPv6_hex$subexpression$3",symbols:["HEXDIG","HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$3"]},{name:"IPv6_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_full$macrocall$1",symbols:["IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2"]},{name:"IPv6_full",symbols:["IPv6_hex","IPv6_full$macrocall$1"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$1",symbols:["IPv6_comp$ebnf$1$subexpression$1"],postprocess:xe},{name:"IPv6_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(e)=>e.join("")},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$2$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$2",symbols:["IPv6_comp$ebnf$2$subexpression$1"],postprocess:xe},{name:"IPv6_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6_comp",symbols:["IPv6_comp$ebnf$1","IPv6_comp$string$1","IPv6_comp$ebnf$2"]},{name:"IPv6v4_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_full$macrocall$1",symbols:["IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2"]},{name:"IPv6v4_full",symbols:["IPv6_hex","IPv6v4_full$macrocall$1",{literal:":"},"IPv4_address_literal"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6v4_comp$ebnf$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1"],postprocess:xe},{name:"IPv6v4_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(e)=>e.join("")},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",{literal:":"}]},{name:"IPv6v4_comp$ebnf$2",symbols:["IPv6v4_comp$ebnf$2$subexpression$1"],postprocess:xe},{name:"IPv6v4_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp",symbols:["IPv6v4_comp$ebnf$1","IPv6v4_comp$string$1","IPv6v4_comp$ebnf$2","IPv4_address_literal"]},{name:"DIGIT",symbols:[/[0-9]/],postprocess:xe},{name:"ALPHA_DIGIT_U",symbols:[/[0-9A-Za-z\u0080-\uFFFF]/],postprocess:xe},{name:"ALPHA_DIGIT",symbols:[/[0-9A-Za-z]/],postprocess:xe},{name:"ALPHA_DIG_DASH",symbols:[/[-0-9A-Za-z]/],postprocess:xe},{name:"ALPHA_DIG_DASH_U",symbols:[/[-0-9A-Za-z\u0080-\uFFFF]/],postprocess:xe},{name:"HEXDIG",symbols:[/[0-9A-Fa-f]/],postprocess:xe},{name:"DQUOTE",symbols:[{literal:'"'}],postprocess:xe}],ParserStart:"Reverse_path"};Ou.default=Pk});var ra=b(function(Ye){var Ek=Ye&&Ye.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ye,"__esModule",{value:!0});Ye.canonicalize=Ye.canonicalize_quoted_string=Ye.normalize=Ye.normalize_dot_string=Ye.parse=void 0;var Yh=Bh(),ey=Ek(Zh());ey.default.ParserStart="Mailbox";var kk=Yh.Grammar.fromCompiled(ey.default);function xu(e){if(e.length>986)throw Error("address too long");let r=new Yh.Parser(kk);if(r.feed(e),r.results.length!==1)throw Error("address parsing failed: ambiguous grammar");let s=e.lastIndexOf("@"),n=e.substring(s+1);if(n[0]!=="["){if(n.length>253)throw Error("domain too long");let i=n.split(".");if(i.length<2)throw Error("domain not fully qualified");if(i[i.length-1].length<2)throw Error("top level domain label too short");if(i.sort(function(a,o){return o.length-a.length}),i[0].length>63)throw Error("domain label too long")}return r.results[0]}Ye.parse=xu;function ty(e){return function(){let s=e.indexOf("+");if(s===-1)return e;return e.substr(0,s)}().replace(/\./g,"").toLowerCase()}Ye.normalize_dot_string=ty;function Ik(e){var t,r;let s=xu(e),n=(t=s.domainPart.AddressLiteral)!==null&&t!==void 0?t:s.domainPart.DomainName.toLowerCase();return`${(r=s.localPart.QuotedString)!==null&&r!==void 0?r:ty(s.localPart.DotString)}@${n}`}Ye.normalize=Ik;function ry(e){return`"${e.substr(1).substr(0,e.length-2).replace(/(?:\\(.))/g,"$1").replace(/(?:(["\\]))/g,"\\$1")}"`}Ye.canonicalize_quoted_string=ry;function Tk(e){var t;let r=xu(e),s=(t=r.domainPart.AddressLiteral)!==null&&t!==void 0?t:r.domainPart.DomainName.toLowerCase();return`${r.localPart.QuotedString?ry(r.localPart.QuotedString):r.localPart.DotString}@${s}`}Ye.canonicalize=Tk});var dy=b(function(oO,ly){var sa=Object.prototype.hasOwnProperty,uy=Object.prototype.toString,sy=Object.defineProperty,ny=Object.getOwnPropertyDescriptor,iy=function(t){if(typeof Array.isArray==="function")return Array.isArray(t);return uy.call(t)==="[object Array]"},ay=function(t){if(!t||uy.call(t)!=="[object Object]")return!1;var r=sa.call(t,"constructor"),s=t.constructor&&t.constructor.prototype&&sa.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!s)return!1;var n;for(n in t);return typeof n>"u"||sa.call(t,n)},oy=function(t,r){if(sy&&r.name==="__proto__")sy(t,r.name,{enumerable:!0,configurable:!0,value:r.newValue,writable:!0});else t[r.name]=r.newValue},cy=function(t,r){if(r==="__proto__"){if(!sa.call(t,r))return;else if(ny)return ny(t,r).value}return t[r]};ly.exports=function e(){var t,r,s,n,i,a,o=arguments[0],c=1,u=arguments.length,l=!1;if(typeof o==="boolean")l=o,o=arguments[1]||{},c=2;if(o==null||typeof o!=="object"&&typeof o!=="function")o={};for(;c<u;++c)if(t=arguments[c],t!=null){for(r in t)if(s=cy(o,r),n=cy(t,r),o!==n){if(l&&n&&(ay(n)||(i=iy(n)))){if(i)i=!1,a=s&&iy(s)?s:[];else a=s&&ay(s)?s:{};oy(o,{name:r,newValue:e(l,a,n)})}else if(typeof n<"u")oy(o,{name:r,newValue:n})}}return o}});var fy=b(function(cO,Rk){Rk.exports=[{scheme:"aaa",description:"Diameter Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"aaas",description:"Diameter Protocol with Secure Transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"about",description:"about",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6694"}]},{scheme:"acap",description:"application configuration access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2244"}]},{scheme:"acct",description:"acct",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7565"}]},{scheme:"cap",description:"Calendar Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4324"}]},{scheme:"cid",description:"content identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"coap",description:"coap",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"coaps",description:"coaps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"crid",description:"TV-Anytime Content Reference Identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4078"}]},{scheme:"data",description:"data",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2397"}]},{scheme:"dav",description:"dav",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"dict",description:"dictionary service protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2229"}]},{scheme:"dns",description:"Domain Name System",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4501"}]},{scheme:"example",description:"example",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7595"}]},{scheme:"file",description:"Host-specific file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"ftp",description:"File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"geo",description:"Geographic Locations",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5870"}]},{scheme:"go",description:"go",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3368"}]},{scheme:"gopher",description:"The Gopher Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4266"}]},{scheme:"h323",description:"H.323",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3508"}]},{scheme:"http",description:"Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"https",description:"Hypertext Transfer Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"iax",description:"Inter-Asterisk eXchange Version 2",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5456"}]},{scheme:"icap",description:"Internet Content Adaptation Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3507"}]},{scheme:"im",description:"Instant Messaging",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3860"}]},{scheme:"imap",description:"internet message access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5092"}]},{scheme:"info",description:`Information Assets with Identifiers in Public Namespaces.
|
|
27
|
-
(section 3) defines an "info" registry
|
|
28
|
-
of public namespaces, which is maintained by NISO and can be accessed
|
|
29
|
-
from .`,reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4452"}]},{scheme:"ipp",description:"Internet Printing Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3510"}]},{scheme:"ipps",description:"Internet Printing Protocol over HTTPS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7472"}]},{scheme:"iris",description:"Internet Registry Information Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3981"}]},{scheme:"iris.beep",description:"iris.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3983"}]},{scheme:"iris.lwz",description:"iris.lwz",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4993"}]},{scheme:"iris.xpc",description:"iris.xpc",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"iris.xpcs",description:"iris.xpcs",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"jabber",description:"jabber",reference:[],template:"http://www.iana.org/assignments/uri-schemes/perm/jabber"},{scheme:"ldap",description:"Lightweight Directory Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4516"}]},{scheme:"mailto",description:"Electronic mail address",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6068"}]},{scheme:"mid",description:"message identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"msrp",description:"Message Session Relay Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"msrps",description:"Message Session Relay Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"mtqp",description:"Message Tracking Query Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3887"}]},{scheme:"mupdate",description:"Mailbox Update (MUPDATE) Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3656"}]},{scheme:"news",description:"USENET news",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"nfs",description:"network file system protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2224"}]},{scheme:"ni",description:"ni",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nih",description:"nih",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nntp",description:"USENET news using NNTP access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"opaquelocktoken",description:"opaquelocktokent",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"pkcs11",description:"PKCS#11",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7512"}]},{scheme:"pop",description:"Post Office Protocol v3",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2384"}]},{scheme:"pres",description:"Presence",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3859"}]},{scheme:"reload",description:"reload",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6940"}]},{scheme:"rtsp",description:"Real-time Streaming Protocol (RTSP)",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtsps",description:"Real-time Streaming Protocol (RTSP) over TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtspu",description:"Real-time Streaming Protocol (RTSP) over unreliable datagram transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"}]},{scheme:"service",description:"service location",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2609"}]},{scheme:"session",description:"session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6787"}]},{scheme:"shttp",description:"Secure Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2660"}]},{scheme:"sieve",description:"ManageSieve Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5804"}]},{scheme:"sip",description:"session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sips",description:"secure session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sms",description:"Short Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5724"}]},{scheme:"snmp",description:"Simple Network Management Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4088"}]},{scheme:"soap.beep",description:"soap.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"soap.beeps",description:"soap.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"stun",description:"stun",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"stuns",description:"stuns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"tag",description:"tag",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4151"}]},{scheme:"tel",description:"telephone",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"telnet",description:"Reference to interactive sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4248"}]},{scheme:"tftp",description:"Trivial File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3617"}]},{scheme:"thismessage",description:"multipart/related relative reference resolution",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2557"}],template:"http://www.iana.org/assignments/uri-schemes/perm/thismessage"},{scheme:"tip",description:"Transaction Internet Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2371"}]},{scheme:"tn3270",description:"Interactive 3270 emulation sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6270"}]},{scheme:"turn",description:"turn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"turns",description:"turns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"tv",description:"TV Broadcasts",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2838"}]},{scheme:"urn",description:"Uniform Resource Names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2141"},{type:"registry",href:"http://www.iana.org/assignments/urn-namespaces"}]},{scheme:"vemmi",description:"versatile multimedia interface",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2122"}]},{scheme:"vnc",description:"Remote Framebuffer Protocol",reference:[{type:"draft",href:"http://www.iana.org/go/RFC-warden-appsawg-vnc-scheme-10"}]},{scheme:"ws",description:"WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"wss",description:"Encrypted WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"xcon",description:"xcon",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xcon-userid",description:"xcon-userid",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xmlrpc.beep",description:"xmlrpc.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmlrpc.beeps",description:"xmlrpc.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmpp",description:"Extensible Messaging and Presence Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5122"}]},{scheme:"z39.50r",description:"Z39.50 Retrieval",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]},{scheme:"z39.50s",description:"Z39.50 Session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var py=b(function(uO,Ok){Ok.exports=[{scheme:"acr",description:"acr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/acr"},{scheme:"adiumxtra",description:"adiumxtra",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/adiumxtra"},{scheme:"afp",description:"afp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/afp"},{scheme:"afs",description:"Andrew File System global file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"aim",description:"aim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aim"},{scheme:"appdata",description:"appdata",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/appdata"},{scheme:"apt",description:"apt",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/apt"},{scheme:"attachment",description:"attachment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/attachment"},{scheme:"aw",description:"aw",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aw"},{scheme:"barion",description:"barion",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/barion"},{scheme:"beshare",description:"beshare",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/beshare"},{scheme:"bitcoin",description:"bitcoin",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bitcoin"},{scheme:"blob",description:"blob",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/blob"},{scheme:"bolo",description:"bolo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bolo"},{scheme:"callto",description:"callto",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/callto"},{scheme:"chrome",description:"chrome",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome"},{scheme:"chrome-extension",description:"chrome-extension",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome-extension"},{scheme:"com-eventbrite-attendee",description:"com-eventbrite-attendee",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/com-eventbrite-attendee"},{scheme:"content",description:"content",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/content"},{scheme:"cvs",description:"cvs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/cvs"},{scheme:"dis",description:"dis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dis"},{scheme:"dlna-playcontainer",description:"dlna-playcontainer",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playcontainer"},{scheme:"dlna-playsingle",description:"dlna-playsingle",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playsingle"},{scheme:"dntp",description:"dntp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dntp"},{scheme:"dtn",description:"DTNRG research and development",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5050"}]},{scheme:"dvb",description:"dvb",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mcroberts-uri-dvb"}]},{scheme:"ed2k",description:"ed2k",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ed2k"},{scheme:"facetime",description:"facetime",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/facetime"},{scheme:"feed",description:"feed",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feed"},{scheme:"feedready",description:"feedready",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feedready"},{scheme:"finger",description:"finger",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/finger"},{scheme:"fish",description:"fish",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/fish"},{scheme:"gg",description:"gg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gg"},{scheme:"git",description:"git",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/git"},{scheme:"gizmoproject",description:"gizmoproject",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gizmoproject"},{scheme:"gtalk",description:"gtalk",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gtalk"},{scheme:"ham",description:"ham",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7046"}]},{scheme:"hcp",description:"hcp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/hcp"},{scheme:"icon",description:"icon",reference:[{type:"draft",href:"http://www.iana.org/go/draft-lafayette-icon-uri-scheme"}]},{scheme:"iotdisco",description:"iotdisco",reference:[{type:"uri",href:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco.pdf"}],template:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco"},{scheme:"ipn",description:"ipn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6260"}]},{scheme:"irc",description:"irc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc"},{scheme:"irc6",description:"irc6",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc6"},{scheme:"ircs",description:"ircs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ircs"},{scheme:"isostore",description:"isostore",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/isostore"},{scheme:"itms",description:"itms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/itms"},{scheme:"jar",description:"jar",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/jar"},{scheme:"jms",description:"Java Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6167"}]},{scheme:"keyparc",description:"keyparc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/keyparc"},{scheme:"lastfm",description:"lastfm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/lastfm"},{scheme:"ldaps",description:"ldaps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ldaps"},{scheme:"magnet",description:"magnet",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/magnet"},{scheme:"maps",description:"maps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/maps"},{scheme:"market",description:"market",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/market"},{scheme:"message",description:"message",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/message"},{scheme:"mms",description:"mms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mms"},{scheme:"ms-access",description:"ms-access",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-access"},{scheme:"ms-drive-to",description:"ms-drive-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-drive-to"},{scheme:"ms-enrollment",description:"ms-enrollment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-enrollment"},{scheme:"ms-excel",description:"ms-excel",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-excel"},{scheme:"ms-getoffice",description:"ms-getoffice",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-getoffice"},{scheme:"ms-help",description:"ms-help",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-help"},{scheme:"ms-infopath",description:"ms-infopath",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-infopath"},{scheme:"ms-media-stream-id",description:"ms-media-stream-id",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-media-stream-id"},{scheme:"ms-powerpoint",description:"ms-powerpoint",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-powerpoint"},{scheme:"ms-project",description:"ms-project",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-project"},{scheme:"ms-publisher",description:"ms-publisher",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-publisher"},{scheme:"ms-search-repair",description:"ms-search-repair",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-search-repair"},{scheme:"ms-secondary-screen-controller",description:"ms-secondary-screen-controller",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-controller"},{scheme:"ms-secondary-screen-setup",description:"ms-secondary-screen-setup",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-setup"},{scheme:"ms-settings",description:"ms-settings",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings"},{scheme:"ms-settings-airplanemode",description:"ms-settings-airplanemode",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-airplanemode"},{scheme:"ms-settings-bluetooth",description:"ms-settings-bluetooth",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-bluetooth"},{scheme:"ms-settings-camera",description:"ms-settings-camera",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-camera"},{scheme:"ms-settings-cellular",description:"ms-settings-cellular",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cellular"},{scheme:"ms-settings-cloudstorage",description:"ms-settings-cloudstorage",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cloudstorage"},{scheme:"ms-settings-connectabledevices",description:"ms-settings-connectabledevices",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-connectabledevices"},{scheme:"ms-settings-displays-topology",description:"ms-settings-displays-topology",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-displays-topology"},{scheme:"ms-settings-emailandaccounts",description:"ms-settings-emailandaccounts",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-emailandaccounts"},{scheme:"ms-settings-language",description:"ms-settings-language",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-language"},{scheme:"ms-settings-location",description:"ms-settings-location",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-location"},{scheme:"ms-settings-lock",description:"ms-settings-lock",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-lock"},{scheme:"ms-settings-nfctransactions",description:"ms-settings-nfctransactions",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-nfctransactions"},{scheme:"ms-settings-notifications",description:"ms-settings-notifications",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-notifications"},{scheme:"ms-settings-power",description:"ms-settings-power",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-power"},{scheme:"ms-settings-privacy",description:"ms-settings-privacy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-privacy"},{scheme:"ms-settings-proximity",description:"ms-settings-proximity",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-proximity"},{scheme:"ms-settings-screenrotation",description:"ms-settings-screenrotation",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-screenrotation"},{scheme:"ms-settings-wifi",description:"ms-settings-wifi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-wifi"},{scheme:"ms-settings-workplace",description:"ms-settings-workplace",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-workplace"},{scheme:"ms-spd",description:"ms-spd",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-spd"},{scheme:"ms-transit-to",description:"ms-transit-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-transit-to"},{scheme:"ms-visio",description:"ms-visio",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-visio"},{scheme:"ms-walk-to",description:"ms-walk-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-walk-to"},{scheme:"ms-word",description:"ms-word",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-word"},{scheme:"msnim",description:"msnim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/msnim"},{scheme:"mumble",description:"mumble",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mumble"},{scheme:"mvn",description:"mvn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mvn"},{scheme:"notes",description:"notes",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/notes"},{scheme:"oid",description:"oid",reference:[{type:"draft",href:"http://www.iana.org/go/draft-larmouth-oid-iri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/oid"},{scheme:"palm",description:"palm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/palm"},{scheme:"paparazzi",description:"paparazzi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/paparazzi"},{scheme:"platform",description:"platform",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/platform"},{scheme:"proxy",description:"proxy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/proxy"},{scheme:"psyc",description:"psyc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/psyc"},{scheme:"query",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/query"},{scheme:"redis",description:"redis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/redis"},{scheme:"rediss",description:"rediss",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rediss"},{scheme:"res",description:"res",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/res"},{scheme:"resource",description:"resource",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/resource"},{scheme:"rmi",description:"rmi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rmi"},{scheme:"rsync",description:"rsync",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5781"}]},{scheme:"rtmfp",description:"rtmfp",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7425"}],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmfp"},{scheme:"rtmp",description:"rtmp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmp"},{scheme:"secondlife",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/secondlife"},{scheme:"sftp",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sftp"},{scheme:"sgn",description:"sgn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sgn"},{scheme:"skype",description:"skype",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/skype"},{scheme:"smb",description:"smb",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/smb"},{scheme:"smtp",description:"smtp",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/smtp"},{scheme:"soldat",description:"soldat",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/soldat"},{scheme:"spotify",description:"spotify",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/spotify"},{scheme:"ssh",description:"ssh",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ssh"},{scheme:"steam",description:"steam",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/steam"},{scheme:"submit",description:"submit",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/submit"},{scheme:"svn",description:"svn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/svn"},{scheme:"teamspeak",description:"teamspeak",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teamspeak"},{scheme:"teliaeid",description:"teliaeid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teliaeid"},{scheme:"things",description:"things",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/things"},{scheme:"tool",description:"tool",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/tool"},{scheme:"udp",description:"udp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/udp"},{scheme:"unreal",description:"unreal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/unreal"},{scheme:"ut2004",description:"ut2004",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ut2004"},{scheme:"v-event",description:"v-event",reference:[{type:"draft",href:"http://www.iana.org/go/draft-menderico-v-event-uri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/v-event"},{scheme:"ventrilo",description:"ventrilo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ventrilo"},{scheme:"view-source",description:"view-source",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/view-source"},{scheme:"webcal",description:"webcal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/webcal"},{scheme:"wpid",description:"wpid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wpid"},{scheme:"wtai",description:"wtai",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wtai"},{scheme:"wyciwyg",description:"wyciwyg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wyciwyg"},{scheme:"xfire",description:"xfire",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xfire"},{scheme:"xri",description:"xri",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xri"},{scheme:"ymsgr",description:"ymsgr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ymsgr"}]});var my=b(function(lO,xk){xk.exports=[{scheme:"fax",description:"fax",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"filesystem",description:"filesystem",reference:[],template:"http://www.iana.org/assignments/uri-schemes/historic/filesystem"},{scheme:"mailserver",description:"Access to data available from mail servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6196"}]},{scheme:"modem",description:"modem",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"pack",description:"pack",reference:[{type:"draft",href:"http://www.iana.org/go/draft-shur-pack-uri-scheme"}],template:"http://www.iana.org/assignments/uri-schemes/historic/pack"},{scheme:"prospero",description:"Prospero Directory Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4157"}]},{scheme:"snews",description:"NNTP over SSL/TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"videotex",description:"videotex",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mavrakis-videotex-url-spec"},{type:"rfc",href:"http://www.iana.org/go/rfc2122"},{type:"rfc",href:"http://www.iana.org/go/rfc3986"}],template:"http://www.iana.org/assignments/uri-schemes/historic/videotex"},{scheme:"wais",description:"Wide Area Information Servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4156"}]},{scheme:"z39.50",description:"Z39.50 information access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"},{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var hy=b(function(dO,jk){jk.exports=[{scheme:"android-app"},{scheme:"webpack"},{scheme:"s3",description:"Amazon Web Services S3 bucket"},{scheme:"gs",description:"Google Cloud Storage"},{scheme:"mqtt",description:"Message Queuing Telemetry Transport Protocol"},{scheme:"modbus+tcp",description:"Modbus over TCP"}]});var Cu=b(function(fO,yy){var ju=dy(),Tn={permanent:fy(),provosional:py(),historical:my()},na={};Object.keys(Tn).forEach(function(e){Tn[e].forEach(function(t){na[t.scheme]=ju(t,{type:e})})});Tn.unofficial=hy().filter(function(e){return!na[e.scheme]});Tn.unofficial.forEach(function(e){na[e.scheme]=ju(e,{type:"unofficial"})});yy.exports=ju(Tn,{allByName:na})});var vy=b(function(pO,gy){var{parse:Ck}=Di(),{addressParser:Ak}=ra(),Nk=Cu();function qk(e){try{return Ak(e),!0}catch(t){return!1}}gy.exports=(e)=>{let t=Ck(e);if(t.scheme==="mailto"&&t.to.every(qk))return!0;if(t.reference==="absolute"&&Nk.allByName[t.scheme])return!0;return!1}});var $y=b(function(mO,_y){_y.exports=/^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$/});var by=b(function(hO,wy){var{parse:Dk}=ra();wy.exports=(e)=>{try{return Dk(e),!0}catch(t){return!1}}});var Ty={};fl(Ty,{default:()=>Wk});function Nu(e){return this[e]}function Hk(e,t){this[e]=Kk.bind(null,t)}var Mk,Vk,Rn,Sy,Au,Uk=(e,t,r)=>{var s=Sy(t);for(let n of s)if(!Au.call(e,n)&&n!=="default")Rn(e,n,{get:Nu.bind(t,n),enumerable:!0});if(r){for(let n of s)if(!Au.call(r,n)&&n!=="default")Rn(r,n,{get:Nu.bind(t,n),enumerable:!0});return r}},zk,Fk,Py=(e,t,r)=>{var s=e!=null&&typeof e==="object";if(s){var n=t?zk??=new WeakMap:Fk??=new WeakMap,i=n.get(e);if(i)return i}r=e!=null?Mk(Vk(e)):{};let a=t||!e||!e.__esModule?Rn(r,"default",{value:e,enumerable:!0}):r;for(let o of Sy(e))if(!Au.call(a,o))Rn(a,o,{get:Nu.bind(e,o),enumerable:!0});if(s)n.set(e,a);return a},Lk=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Kk=(e)=>e,Gk=(e,t)=>{for(var r in t)Rn(e,r,{get:t[r],enumerable:!0,configurable:!0,set:Hk.bind(t,r)})},Ey,ky,Iy,Wk;var Ry=jg(()=>{Mk=Object.create,{getPrototypeOf:Vk,defineProperty:Rn,getOwnPropertyNames:Sy}=Object,Au=Object.prototype.hasOwnProperty;Ey=Lk((e,t)=>{var r=/^xn--/,s=/[^\0-\x7F]/,n=/[\x2E\u3002\uFF0E\uFF61]/g,i={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},a=Math.floor,o=String.fromCharCode;function c(S){throw RangeError(i[S])}function u(S,O){let L=[],V=S.length;while(V--)L[V]=O(S[V]);return L}function l(S,O){let L=S.split("@"),V="";if(L.length>1)V=L[0]+"@",S=L[1];S=S.replace(n,".");let ne=S.split("."),G=u(ne,O).join(".");return V+G}function d(S){let O=[],L=0,V=S.length;while(L<V){let ne=S.charCodeAt(L++);if(ne>=55296&&ne<=56319&&L<V){let G=S.charCodeAt(L++);if((G&64512)==56320)O.push(((ne&1023)<<10)+(G&1023)+65536);else O.push(ne),L--}else O.push(ne)}return O}var v=(S)=>String.fromCodePoint(...S),m=function(S){if(S>=48&&S<58)return 26+(S-48);if(S>=65&&S<91)return S-65;if(S>=97&&S<123)return S-97;return 36},h=function(S,O){return S+22+75*(S<26)-((O!=0)<<5)},p=function(S,O,L){let V=0;S=L?a(S/700):S>>1,S+=a(S/O);for(;S>455;V+=36)S=a(S/35);return a(V+36*S/(S+38))},_=function(S){let O=[],L=S.length,V=0,ne=128,G=72,$e=S.lastIndexOf("-");if($e<0)$e=0;for(let ue=0;ue<$e;++ue){if(S.charCodeAt(ue)>=128)c("not-basic");O.push(S.charCodeAt(ue))}for(let ue=$e>0?$e+1:0;ue<L;){let Ee=V;for(let He=1,dt=36;;dt+=36){if(ue>=L)c("invalid-input");let ft=m(S.charCodeAt(ue++));if(ft>=36)c("invalid-input");if(ft>a((2147483647-V)/He))c("overflow");V+=ft*He;let Pt=dt<=G?1:dt>=G+26?26:dt-G;if(ft<Pt)break;let Xt=36-Pt;if(He>a(2147483647/Xt))c("overflow");He*=Xt}let Me=O.length+1;if(G=p(V-Ee,Me,Ee==0),a(V/Me)>2147483647-ne)c("overflow");ne+=a(V/Me),V%=Me,O.splice(V++,0,ne)}return String.fromCodePoint(...O)},w=function(S){let O=[];S=d(S);let L=S.length,V=128,ne=0,G=72;for(let Ee of S)if(Ee<128)O.push(o(Ee));let $e=O.length,ue=$e;if($e)O.push("-");while(ue<L){let Ee=2147483647;for(let He of S)if(He>=V&&He<Ee)Ee=He;let Me=ue+1;if(Ee-V>a((2147483647-ne)/Me))c("overflow");ne+=(Ee-V)*Me,V=Ee;for(let He of S){if(He<V&&++ne>2147483647)c("overflow");if(He===V){let dt=ne;for(let ft=36;;ft+=36){let Pt=ft<=G?1:ft>=G+26?26:ft-G;if(dt<Pt)break;let Xt=dt-Pt,ws=36-Pt;O.push(o(h(Pt+Xt%ws,0))),dt=a(Xt/ws)}O.push(o(h(dt,0))),G=p(ne,Me,ue===$e),ne=0,++ue}}++ne,++V}return O.join("")},k=function(S){return l(S,function(O){return r.test(O)?_(O.slice(4).toLowerCase()):O})},I=function(S){return l(S,function(O){return s.test(O)?"xn--"+w(O):O})},R={version:"2.3.1",ucs2:{decode:d,encode:v},decode:_,encode:w,toASCII:I,toUnicode:k};t.exports=R}),ky={};Gk(ky,{default:()=>Iy.default});Uk(ky,Py(Ey(),1));Iy=Py(Ey(),1),Wk=Iy.default});var xy=b(function(yO,Oy){var{toASCII:Jk}=(Ry(),dl(Ty)),Qk=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;Oy.exports=(e)=>{let t=Jk(e);return t.replace(/\.$/,"").length<=253&&Qk.test(t)}});var Ay=b(function(gO,Cy){var{parse:Bk}=Di(),{addressParser:Xk}=ra(),jy=Cu();function Zk(e){try{return Xk(e),!0}catch(t){return!1}}Cy.exports=(e)=>{let t=Bk(e);if(t.scheme==="mailto"&&t.to.every(Zk))return!0;if(t.reference==="absolute"&&t.path!==void 0&&jy.allByName[t.scheme])return!0;if(t.scheme&&!jy.allByName[t.scheme])return!1;return t.path!==void 0&&(t.reference==="relative"||t.reference==="same-document"||t.reference==="uri")}});var Ny=b(function(vO,_s){vO.iri=vy();vO.duration=$y();vO["idn-email"]=by();vO["idn-hostname"]=xy();vO["iri-reference"]=Ay()});var My=b(function(_O,Dy){var qy=Ny();Dy.exports=(e,t={})=>{let r=Object.keys(qy),s=r;if(t.formats){if(!Array.isArray(t.formats))throw Error("options.formats must be an array");s=t.formats}return r.filter((n)=>s.includes(n)).forEach((n)=>{e.addFormat(n,qy[n])}),e}});var Wy=b(function(BO,Fu){var uI=Object.prototype.hasOwnProperty,Ke="~";function jn(){}if(Object.create){if(jn.prototype=Object.create(null),!new jn().__proto__)Ke=!1}function lI(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function Gy(e,t,r,s,n){if(typeof r!=="function")throw TypeError("The listener must be a function");var i=new lI(r,s||e,n),a=Ke?Ke+t:t;if(!e._events[a])e._events[a]=i,e._eventsCount++;else if(!e._events[a].fn)e._events[a].push(i);else e._events[a]=[e._events[a],i];return e}function oa(e,t){if(--e._eventsCount===0)e._events=new jn;else delete e._events[t]}function De(){this._events=new jn,this._eventsCount=0}De.prototype.eventNames=function(){var t=[],r,s;if(this._eventsCount===0)return t;for(s in r=this._events)if(uI.call(r,s))t.push(Ke?s.slice(1):s);if(Object.getOwnPropertySymbols)return t.concat(Object.getOwnPropertySymbols(r));return t};De.prototype.listeners=function(t){var r=Ke?Ke+t:t,s=this._events[r];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,a=Array(i);n<i;n++)a[n]=s[n].fn;return a};De.prototype.listenerCount=function(t){var r=Ke?Ke+t:t,s=this._events[r];if(!s)return 0;if(s.fn)return 1;return s.length};De.prototype.emit=function(t,r,s,n,i,a){var o=Ke?Ke+t:t;if(!this._events[o])return!1;var c=this._events[o],u=arguments.length,l,d;if(c.fn){if(c.once)this.removeListener(t,c.fn,void 0,!0);switch(u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,s),!0;case 4:return c.fn.call(c.context,r,s,n),!0;case 5:return c.fn.call(c.context,r,s,n,i),!0;case 6:return c.fn.call(c.context,r,s,n,i,a),!0}for(d=1,l=Array(u-1);d<u;d++)l[d-1]=arguments[d];c.fn.apply(c.context,l)}else{var v=c.length,m;for(d=0;d<v;d++){if(c[d].once)this.removeListener(t,c[d].fn,void 0,!0);switch(u){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,r);break;case 3:c[d].fn.call(c[d].context,r,s);break;case 4:c[d].fn.call(c[d].context,r,s,n);break;default:if(!l)for(m=1,l=Array(u-1);m<u;m++)l[m-1]=arguments[m];c[d].fn.apply(c[d].context,l)}}}return!0};De.prototype.on=function(t,r,s){return Gy(this,t,r,s,!1)};De.prototype.once=function(t,r,s){return Gy(this,t,r,s,!0)};De.prototype.removeListener=function(t,r,s,n){var i=Ke?Ke+t:t;if(!this._events[i])return this;if(!r)return oa(this,i),this;var a=this._events[i];if(a.fn){if(a.fn===r&&(!n||a.once)&&(!s||a.context===s))oa(this,i)}else{for(var o=0,c=[],u=a.length;o<u;o++)if(a[o].fn!==r||n&&!a[o].once||s&&a[o].context!==s)c.push(a[o]);if(c.length)this._events[i]=c.length===1?c[0]:c;else oa(this,i)}return this};De.prototype.removeAllListeners=function(t){var r;if(t){if(r=Ke?Ke+t:t,this._events[r])oa(this,r)}else this._events=new jn,this._eventsCount=0;return this};De.prototype.off=De.prototype.removeListener;De.prototype.addListener=De.prototype.on;De.prefixed=Ke;De.EventEmitter=De;if(typeof Fu<"u")Fu.exports=De});var dI={};fl(dI,{default:()=>$s});var ma="https://www.w3.org/ns/activitystreams",ha="https://sockethub.org/ns/context/v1.jsonld";var ya="error",ga="https://sockethub.org/ns/context/platform/error/v1.jsonld",va="sockethub:internal",_a="https://sockethub.org/ns/context/platform/sockethub:internal/v1.jsonld",$a=new Map,pl=new Map,ml=new Map;function Cg(e){if(!Array.isArray(e))return[];return e.filter((t)=>typeof t==="string")}function Ag(e){return Cg(e["@context"])}function wa(e,t,r,s){$a.set(t,e),pl.set(t,r),ml.set(t,s)}function xs(e){let r=Ag(e).filter((s)=>$a.has(s));if(r.length!==1)return null;return r[0]}function ba(e){return $a.get(e)}function hl(e){return pl.get(e)}function yl(e){return ml.get(e)}var np=Os(Zo(),1);var DT=new np.default({strictTypes:!1,allErrors:!0});var vi={feed:{required:["id","type"],additionalProperties:!0,properties:{type:{enum:["feed"]},id:{type:"string",format:"iri"},name:{type:"string"},description:{type:"string"},author:{type:"string"},favicon:{type:"string"}}},person:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["person"]},name:{type:"string"}}},room:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["room"]},name:{type:"string"}}},service:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["service"]},name:{type:"string"}}},platform:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["platform"]},name:{type:"string"}}},website:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["website"]},name:{type:"string"}}},address:{required:["type"],additionalProperties:!1,properties:{type:{enum:["address"]}}},calendar:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["calendar"]},name:{type:"string"},components:{type:"array",items:{enum:["event","task"]}}}},addressBook:{required:["id","type"],additionalProperties:!1,properties:{id:{type:"string",format:"iri"},type:{enum:["addressBook"]}}}};var Yo=Object.keys(vi),_i=["person","room","service","feed","website","platform"],$i=["person","room","service","feed","website","platform","address","calendar","addressBook"],ip=_i.map((e)=>({$ref:`#/definitions/type/${e}`})),ap=$i.map((e)=>({$ref:`#/definitions/type/${e}`}));var cb={type:"array",minItems:3,maxItems:3,items:{type:"string"},allOf:[{contains:{const:ma}},{contains:{const:ha}}]},ub={type:"string"},ec={$id:"https://sockethub.org/schemas/v/activity-stream.json",description:"Schema for Sockethub Activity Streams",type:"object",required:["@context","type","actor"],additionalProperties:!1,properties:{"@context":cb,id:{type:"string"},type:ub,actor:{type:"object",oneOf:ip},target:{type:"object",oneOf:ap},object:{type:"object"},published:{type:"string",format:"date-time"}},definitions:{type:vi}};var op={name:"@sockethub/schemas",description:"JSON schema files for validating Sockethub Activity Streams",version:"3.0.0-alpha.23",type:"module",private:!1,author:"Nick Jennings <nick@silverbucket.net>",license:"MIT",publishConfig:{access:"public"},main:"dist/index.js",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",default:"./dist/index.js"},"./context":{types:"./dist/context.d.ts",import:"./dist/context.js",default:"./dist/context.js"},"./object-types":{types:"./dist/object-types.d.ts",import:"./dist/object-types.js",default:"./dist/object-types.js"},"./examples-config":{types:"./dist/examples-config.d.ts",bun:"./src/examples-config.ts",import:"./dist/examples-config.js",default:"./dist/examples-config.js"},"./schemas/json/sockethub-config.json":{default:"./dist/schemas/json/sockethub-config.json"},"./schemas/json/examples-config.json":{default:"./dist/schemas/json/examples-config.json"}},files:["dist/"],engines:{node:">=20"},keywords:["sockethub","sockethub schema","activity streams","activity objects","sockethub platforms"],repository:{type:"git",url:"git+https://github.com/sockethub/sockethub.git",directory:"packages/schemas"},homepage:"https://github.com/sockethub/sockethub/tree/master/packages/schemas",devDependencies:{"@types/bun":"latest"},scripts:{build:"bun ./scripts/export-json-schema.ts && bun ./scripts/export-canonical-assets.ts && bun build src/index.ts src/object-types.ts --outdir dist --target node --format esm --sourcemap=external && bun build src/context.ts src/activity-stream-helper.ts src/examples-config.ts --outdir dist --target browser --format esm --sourcemap=external",clean:"rm -rf dist","clean:deps":"rm -rf node_modules"},dependencies:{ajv:"^8.17.1","ajv-formats":"^2.1.1","ajv-formats-draft2019":"^1.6.1"},gitHead:"a6d303097640e82c7d1a7cef6dea2e6dae5f2cac",types:"./dist/index.d.ts"};function cp(e,t){return e.replace("/v/",`/${t}/`)}var tc={$id:"https://sockethub.org/schemas/v/sockethub-config.json",description:"Sockethub Config Schema",type:"object",required:["platforms"],additionalProperties:!1,properties:{$schema:{type:"string"},examples:{type:"boolean",default:!0,description:"Enable the examples pages served at [host]:[port]/examples"},info:{type:"boolean",default:!1,description:"Display Sockethub runtime information"},logging:{type:"object",additionalProperties:!1,properties:{level:{type:"string",enum:["error","warn","info","debug"],default:"info"},fileLevel:{type:"string",enum:["error","warn","info","debug"],default:"debug"},file:{type:"string",default:"sockethub.log"}}},platforms:{type:"array",items:{type:"string"},description:"Platform packages to load",default:["@sockethub/platform-carddav","@sockethub/platform-caldav","@sockethub/platform-dummy","@sockethub/platform-feeds","@sockethub/platform-irc","@sockethub/platform-metadata","@sockethub/platform-xmpp"]},packageConfig:{type:"object",default:{},description:"Per-platform config keyed by package name, validated against each platform's config schema and forwarded to its child process",properties:{"@sockethub/platform-carddav":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"integer",minimum:1},allowPrivateAddresses:{type:"boolean"},allowInsecureHttp:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-caldav":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"integer",minimum:1},allowPrivateAddresses:{type:"boolean"},allowInsecureHttp:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-dummy":{type:"object",additionalProperties:!1,properties:{greeting:{type:"string",default:"Hello"}}},"@sockethub/platform-feeds":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"},allowPrivateAddresses:{type:"boolean"},concurrency:{type:"integer",minimum:1}}},"@sockethub/platform-irc":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"}}},"@sockethub/platform-xmpp":{type:"object",additionalProperties:!1,properties:{connectTimeoutMs:{type:"number"}}},"@sockethub/platform-metadata":{type:"object",additionalProperties:!1,properties:{allowPrivateAddresses:{type:"boolean"},concurrency:{type:"integer",minimum:1}}}}},credentials:{type:"object",additionalProperties:!1,properties:{ttlMs:{type:"number",minimum:0,default:604800000,description:"Sliding TTL in milliseconds for per-session encrypted credential keys in Redis, refreshed on every save and read. A backstop against keys orphaned by crashes; sessions normally delete their key on disconnect. "+"Size generously — idle sessions do not refresh it. "+"0 disables expiry."}}},credentialCheck:{type:"object",additionalProperties:!1,properties:{reconnectIpSource:{type:"string",enum:["socket","proxy"],default:"socket"},proxyHeader:{type:"string",default:"x-forwarded-for"}}},public:{type:"object",additionalProperties:!1,properties:{protocol:{type:"string",default:"http"},host:{type:"string",default:"localhost"},port:{type:"number",default:10550},path:{type:"string",default:"/"}}},rateLimiter:{type:"object",additionalProperties:!1,properties:{windowMs:{type:"number",default:1000},maxRequests:{type:"number",default:100},blockDurationMs:{type:"number",default:5000},maxConnectionsPerIp:{type:"number",minimum:0,default:20,description:"Maximum concurrent socket connections per client IP. The per-event rate limiter is keyed by socket id, so without a connection cap a client can bypass it by opening more sockets. 0 disables the cap."}}},limits:{type:"object",additionalProperties:!1,properties:{maxPlatformInstances:{type:"number",minimum:0,default:100,description:"Upper bound on concurrently running platform instances (child processes). Each persistent-platform actor forks its own process, so an unbounded count is a resource exhaustion risk on public instances. 0 disables the cap."}}},redis:{type:"object",additionalProperties:!1,properties:{url:{type:"string",default:"redis://127.0.0.1:6379"},connectTimeout:{type:"number",default:1e4,description:"Connection timeout in milliseconds"},disconnectTimeout:{type:"number",default:5000,description:"Disconnect timeout in milliseconds"},maxRetriesPerRequest:{type:["number","null"],default:null,description:"Maximum number of retries per request (null for BullMQ default)"}}},sentry:{type:"object",additionalProperties:!1,properties:{dsn:{type:"string",default:""},environment:{type:"string",default:"production"},release:{type:"string",default:""},enableLogs:{type:"boolean",default:!1},logLevels:{type:"array",items:{type:"string",enum:["debug","info","warn","error"]},default:["warn","error"]},enableMetrics:{type:"boolean",default:!0},tracesSampleRate:{type:"number",minimum:0,maximum:1,default:0.1},profileSessionSampleRate:{type:"number",minimum:0,maximum:1,default:0},sendDefaultPii:{type:"boolean",default:!1}}},sockethub:{type:"object",additionalProperties:!1,properties:{port:{type:"number",default:10550},host:{type:"string",default:"localhost"},path:{type:"string",default:"/sockethub"},maxPayloadBytes:{type:"integer",minimum:1,default:262144,description:"Maximum size in bytes of a single Socket.IO message."},trustProxy:{type:["boolean","number","string"],default:!1,description:"Express 'trust proxy' setting, deciding whether 'x-forwarded-for' is believed when determining a client's IP for HTTP rate limiting. false trusts no proxy; a number trusts that many hops; a string takes an address, subnet or preset ('loopback'). Only enable behind a reverse proxy that overwrites the header. When left false while credentialCheck.reconnectIpSource is 'proxy' and credentialCheck.proxyHeader is 'x-forwarded-for', one hop is trusted so both paths agree; a custom proxyHeader requires setting this explicitly."},cors:{type:"object",additionalProperties:!1,properties:{origin:{type:"string",default:"*",description:"Allowed CORS origin(s) for socket.io connections and the HTTP actions endpoint. '*' allows any website to connect visitors' browsers to this instance; public deployments should set an explicit origin or comma-separated list of origins."}}}}},httpActions:{type:"object",additionalProperties:!1,properties:{enabled:{type:"boolean",default:!1,description:"Enable the HTTP actions endpoint"},path:{type:"string",default:"/sockethub-http"},requireRequestId:{type:"boolean",default:!0},maxMessagesPerRequest:{type:"number",minimum:1,default:20},maxPayloadBytes:{type:"number",minimum:1,default:262144},idempotencyTtlMs:{type:"number",minimum:0,default:300000},requestTimeoutMs:{type:"number",minimum:0,default:30000},idleTimeoutMs:{type:"number",minimum:0,default:15000}}},platformHeartbeat:{type:"object",additionalProperties:!1,properties:{intervalMs:{type:"number",default:5000},timeoutMs:{type:"number",default:15000}}}}},db=cp(tc.$id,op.version);var zy=Os(Zo(),1),Fy=Os(Jh(),1),Ly=Os(My(),1);function Yk(e){let t=`${e.instancePath?e.instancePath:"activity stream"}: ${e.message}`;if(e.keyword==="additionalProperties")t+=`: ${e.params.additionalProperty}`;else if(e.keyword==="enum")t+=`: ${e.params.allowedValues.join(", ")}`;return t}function On(e){let t=[];if(e?.type)t.push(e.type);let r=e;for(let s in r){let n=r[s];if(n&&typeof n==="object"&&"type"in n)t.push(...On(n))}return t}function eI(e){let t=e.schemaPath.match(/#\/\w+\/\w+\/([\w-]+)\//);return t?t[1]:void 0}function tI(e){let t=e.instancePath.match(/\/(\w+)/);return t?t[1]:void 0}function rI(e,t){let r=eI(e),s=tI(e);if(!s)return-1;let n=t[s];if(!n)return-1;if(!r||!n.includes(r))return-1;return e.instancePath.split("/").length}function sI(e){if(!Array.isArray(e["@context"]))return{actor:[],target:[],object:On(e)};let t=e;return{actor:On(t.actor),target:On(t.target),object:t.object?On(t.object):[]}}function qu(e,t,r){let s=sI(e),n=0,i=-1;for(let a=0;a<t.length;a++){let o=rI(t[a],s);if(o>i)i=o,n=a}return i>=0?Yk(t[n]):iI(t[t.length-1],r)}function nI(e,t){if(!t?.excludeTypes||t.excludeTypes.length===0)return e;let r=new Set(t.excludeTypes);return e.filter((s)=>!r.has(s))}function iI(e,t){let r;if(e.keyword==="oneOf"){let s=e.instancePath.split("/")[1],n=s==="actor"?_i:s==="target"?$i:Yo,i=nI(n,t),a=i.length>0?i:n;r=`${e.instancePath}: ${e.message}: ${a.join(", ")}`}else r=`${e.instancePath?e.instancePath:"activity stream"}: ${e.message}`;if("additionalProperty"in e.params)r+=`: ${e.params.additionalProperty}`;return r}var Dt=new zy.default({strictTypes:!1,allErrors:!0});Fy.default(Dt);Ly.default(Dt);var Mt="https://sockethub.org/schemas/v0",Du={},oI={},Vy=!1;Du[`${Mt}/activity-stream`]=ec;for(let e in Du)Dt.addSchema(Du[e],e);function Uy(e,t){wa(e,t,`${Mt}/context/${e}/messages`,`${Mt}/context/${e}/credentials`);let r=`${Mt}/context/${e}/messages`;if(!Dt.getSchema(r))Dt.addSchema({},r);let s=`${Mt}/context/${e}/credentials`;if(!Dt.getSchema(s))Dt.addSchema({},s)}function Ky(){if(Vy)return;Uy(ya,ga),Uy(va,_a),Vy=!0}Ky();function ia(e,t){let r=Dt.getSchema(e);if(!r)return`schema ${e} not found`;if(!r(t)){let n=qu(t,r.errors,oI);if(Array.isArray(t["@context"])){let i=xs(t);if(i){let a=ba(i);if(a)n=`[${a}] ${n}`}}return n}return""}function Mu(e){let t=ia(`${Mt}/activity-stream`,e);if(t)return t;let r=xs(e);if(!r)return"activity streams must have exactly one registered platform context URL in @context";let s=hl(r);if(!s)return`platform context URL ${r} does not have a registered message schema`;return ia(s,e)}function Vu(e){if(!Array.isArray(e["@context"]))return"credential activity streams must have an @context set";if(e.type!=="credentials")return"credential activity streams must have credentials set as type";let t=ia(`${Mt}/activity-stream`,e);if(t)return t;let r=xs(e);if(!r)return"credential activity streams must have exactly one registered platform context URL in @context";let s=yl(r);if(!s)return`platform context URL ${r} does not have a registered credentials schema`;return ia(s,e)}function aa(e,t){let r=`${Mt}/context/${t}`;if(!Dt.getSchema(r))Dt.addSchema(e,r)}function Uu(e,t){wa(e,t,`${Mt}/context/${e}/messages`,`${Mt}/context/${e}/credentials`)}function zu(e){let t=xs(e);if(!t)return null;return ba(t)??null}var Hy={actor:"id",target:"id",object:"content"};function cI(e,t){if(typeof e==="string")return{[t]:e};if(Array.isArray(e))return e.map((r)=>{if(typeof r==="string")return{id:r};return r});return e}function xn(e){let t={...e};for(let r of Object.keys(Hy))if(r in t)t[r]=cI(t[r],Hy[r]);return t}var Jy=Os(Wy(),1);var Qy=Jy.default;class $s{events={credentials:new Map,connect:new Map,join:new Map};_socket;socket;debug=!0;options;platformRegistry=new Map;asContextUrl;sockethubContextUrl;sockethubVersion;initState="idle";hasReadyOnce=!1;initCycle;initTokenCounter=0;initTimeoutTimer;waitingWarningTimer;waitingWarningIntervalMs=1e4;readyWaiters=[];outboundQueue=[];outboundSequence=0;registryFingerprint;latestReadyInfo;constructor(e,t={}){if(!e)throw Error("SockethubClient requires a socket.io instance");if(this._socket=e,this.options={initTimeoutMs:t.initTimeoutMs??5000,maxQueuedOutbound:t.maxQueuedOutbound??1000,maxQueuedAgeMs:t.maxQueuedAgeMs??30000},this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this._socket.connected)this.socket.connected=!0,this.socket.id=this._socket.id,this.socket._emit("connect"),this.startInitialization("initial-connect",!0)}clearCredentials(){this.events.credentials.clear()}getRegisteredPlatforms(){return Array.from(this.platformRegistry.values()).map((e)=>({...e,types:[...e.types],schemas:{...e.schemas}}))}isSchemasReady(){return this.isReady()}isReady(){return this.initState==="ready"}getInitState(){return this.initState}getRegisteredBaseContexts(){if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");return{as:this.asContextUrl,sockethub:this.sockethubContextUrl}}getPlatformSchema(e,t="messages"){let r=e?.trim();if(!r)return;return this.platformRegistry.get(r)?.schemas?.[t]}async waitForSchemas(e=2000){return await this.ready(e),this.buildPlatformRegistryPayload()}ready(e=this.options.initTimeoutMs){if(this.isReady()&&this.latestReadyInfo)return Promise.resolve(this.latestReadyInfo);return new Promise((t,r)=>{let s={resolve:t,reject:r};if(e>0)s.timer=setTimeout(()=>{this.readyWaiters=this.readyWaiters.filter((n)=>n!==s),r(Error(`SockethubClient ready() timed out after ${e}ms`))},e);if(this.readyWaiters.push(s),this.socket.connected&&this.initState==="idle")this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)})}validateActivity(e){if(e.type==="credentials")return Vu(e);return Mu(e)}contextFor(e){if(typeof e!=="string"||e.trim().length===0)throw Error("SockethubClient.contextFor(platform) requires a non-empty platform string");if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");let t=e.trim(),r=this.platformRegistry.get(t);if(!r){let s=Array.from(this.platformRegistry.keys()).sort();throw Error(`unknown platform '${t}'. Registered platforms: ${s.join(", ")}`)}return[this.asContextUrl,this.sockethubContextUrl,r.contextUrl]}createPublicEmitter(){let e=new Qy;return e._emit=e.emit,e.emit=(t,r,s)=>{this.handlePublicEmit(t,r,s)},e.connected=!1,e.disconnect=()=>{this._socket.disconnect()},e.connect=()=>{this._socket.connect()},e}requestSchemaRegistry(){if(!("io"in this._socket))return;this._socket.emit("schemas",this.registryFingerprint,(t)=>{this.handleSchemasPayload(t)})}applyPlatformRegistry(e){if(!e||typeof e!=="object")return;let t=e,r=t.contexts?.as,s=t.contexts?.sockethub;if(typeof r!=="string"||typeof s!=="string"||!Array.isArray(t.platforms))return;this.sockethubVersion=typeof t.version==="string"?t.version:"unknown",this.asContextUrl=r,this.sockethubContextUrl=s,this.platformRegistry.clear();for(let i of t.platforms){if(!i||typeof i!=="object"||typeof i.id!=="string"||typeof i.version!=="string"||typeof i.contextUrl!=="string")continue;this.platformRegistry.set(i.id,{...i,version:i.version,types:Array.isArray(i.types)?i.types:[],schemas:i.schemas||{}}),Uu(i.id,i.contextUrl);try{let a=i.schemas?.credentials;if(a&&typeof a==="object"&&!Array.isArray(a))aa(a,`${i.id}/credentials`);let o=i.schemas?.messages;if(o&&typeof o==="object"&&!Array.isArray(o))aa(o,`${i.id}/messages`)}catch(a){let o=a instanceof Error?a.message:String(a);console.warn(`[SockethubClient] Failed to register schemas for platform ${i.id}: ${o}`)}}let n=this.buildPlatformRegistryPayload();return this.registryFingerprint=typeof t.fingerprint==="string"?t.fingerprint:void 0,this.socket._emit("schemas",n),n}eventCredentials(e){if(e.object&&e.object.type==="credentials")this.events.credentials.set($s.getKey(e),e)}eventMessage(e){if(!this._socket.connected)return;let t=$s.getKey(e);if(e.type==="join"||e.type==="connect")this.events[e.type].set(t,e);else if(e.type==="leave")this.events.join.delete(t);else if(e.type==="disconnect")this.events.connect.delete(t)}static getKey(e){let t=e.actor?.id||e.actor;if(!t)throw Error(`actor property not present for message type: ${e?.type}`);let r=e.target?e.target.id||e.target:"";return`${zu(e)??""}:${t}-${r}`}buildPlatformRegistryPayload(){return{version:this.sockethubVersion,contexts:this.asContextUrl&&this.sockethubContextUrl?{as:this.asContextUrl,sockethub:this.sockethubContextUrl}:void 0,platforms:this.getRegisteredPlatforms()}}buildReadyInfo(e){if(!this.sockethubVersion||!this.asContextUrl||!this.sockethubContextUrl)return;return{state:"ready",reason:e,sockethubVersion:this.sockethubVersion,contexts:{as:this.asContextUrl,sockethub:this.sockethubContextUrl},platforms:this.getRegisteredPlatforms().map((t)=>({id:t.id,version:t.version,contextUrl:t.contextUrl,contextVersion:t.contextVersion,schemaVersion:t.schemaVersion,types:[...t.types]}))}}resolveReadyWaiters(e){let t=this.readyWaiters;this.readyWaiters=[];for(let r of t){if(r.timer)clearTimeout(r.timer);r.resolve(e)}}rejectReadyWaiters(e){let t=this.readyWaiters;this.readyWaiters=[];for(let r of t){if(r.timer)clearTimeout(r.timer);r.reject(e)}}emitInitError(e,t,r){this.socket._emit("init_error",{error:e,phase:t,retrying:r})}emitClientError(e,t,r){if(typeof t==="function"){t({error:r});return}this.socket._emit("client_error",{event:e,error:r})}clearInitTimers(){if(this.initTimeoutTimer)clearTimeout(this.initTimeoutTimer),this.initTimeoutTimer=void 0;if(this.waitingWarningTimer)clearInterval(this.waitingWarningTimer),this.waitingWarningTimer=void 0}startWaitingWarnings(){if(this.waitingWarningTimer)return;this.waitingWarningTimer=setInterval(()=>{if(this.isReady()||this.initState==="closed"){this.clearInitTimers();return}let e=this.outboundQueue.length,t=this.outboundQueue[0],r=t?((Date.now()-t.enqueuedAt)/1000).toFixed(1):"0.0";console.warn(`[SockethubClient] Still waiting for schemas; queued outbound messages: ${e}; oldest queued age: ${r}s.`)},this.waitingWarningIntervalMs)}startInitialization(e,t){if(!this.socket.connected||this.initState==="closed")return;let r=++this.initTokenCounter;this.initCycle={token:r,reason:e,startedAt:Date.now(),replayOnReady:t,timedOut:!1},this.initState="initializing",this.clearInitTimers(),this.initTimeoutTimer=setTimeout(()=>{if(!this.initCycle||this.initCycle.token!==r)return;this.initCycle.timedOut=!0,this.initState="init_error";let s=`Initialization timed out after ${this.options.initTimeoutMs}ms waiting for schemas`;console.warn(`[SockethubClient] ${s}; queued outbound messages: ${this.outboundQueue.length}. Waiting for schemas event from server.`),this.emitInitError(s,"timeout",!1),this.startWaitingWarnings()},this.options.initTimeoutMs);try{this.requestSchemaRegistry()}catch(s){this.initState="init_error";let n=s instanceof Error?s.message:String(s);this.emitInitError(n,"schemas-request",!1),this.startWaitingWarnings()}}markReady(e){let t=this.initCycle,r=Boolean(t?.replayOnReady);this.initCycle=void 0,this.clearInitTimers(),this.initState="ready",this.hasReadyOnce=!0;let s=this.buildReadyInfo(e);if(!s){let n=Error("Failed to build ready payload");this.initState="init_error",this.emitInitError(n.message,"schemas-apply",!0),this.rejectReadyWaiters(n);return}if(this.socket._emit("ready",s),this.latestReadyInfo=s,this.resolveReadyWaiters(s),r)this.replay("credentials",this.events.credentials),this.replay("message",this.events.connect),this.replay("message",this.events.join);this.flushOutboundQueue()}handleSchemasPayload(e){if(!e||typeof e!=="object")return;if(e.unchanged===!0){if(typeof this.registryFingerprint==="string"&&this.platformRegistry.size>0){if(this.initCycle)this.markReady(this.initCycle.reason);else if(this.initState!=="ready")this.markReady("schemas-update");return}}let t=e.fingerprint;if(this.initState==="ready"&&!this.initCycle&&t&&t===this.registryFingerprint)return;if(this.initState==="ready"&&!this.initCycle)this.initState="initializing";if(!this.applyPlatformRegistry(e)){this.initState="init_error",this.emitInitError("Received invalid schemas payload from server","schemas-apply",!0),this.startWaitingWarnings();return}if(this.initCycle){this.markReady(this.initCycle.reason);return}this.markReady("schemas-update")}handlePublicEmit(e,t,r){let s={event:e,content:t,callback:r,enqueuedAt:Date.now(),sequence:this.outboundSequence++};if(!this.isReady()){this.enqueueOutbound(s);return}this.sendOutbound(s)}enqueueOutbound(e){if(this.outboundQueue.push(e),this.outboundQueue.length<=this.options.maxQueuedOutbound)return;let t=this.outboundQueue.shift();if(!t)return;this.emitClientError(t.event,t.callback,"SockethubClient queue overflow before ready")}flushOutboundQueue(){if(!this.isReady()||this.outboundQueue.length===0)return;let e=Date.now(),t=this.outboundQueue.sort((r,s)=>r.sequence-s.sequence);this.outboundQueue=[];for(let r of t){if(e-r.enqueuedAt>this.options.maxQueuedAgeMs){this.emitClientError(r.event,r.callback,`SockethubClient queued message expired after ${this.options.maxQueuedAgeMs}ms before initialization`);continue}this.sendOutbound(r)}}sendOutbound(e){let t=e.content;try{if(e.event==="credentials"||e.event==="message"){if(t=xn(e.content),t&&typeof t==="object"){let r=t;if(e.event==="credentials"&&!r.type)r.type="credentials";if(r.actor&&typeof r.actor==="object"&&!r.actor.type)r.actor.type="person"}if(this.platformRegistry.size>0){let r=this.validateActivity(t);if(r){this.emitClientError(e.event,e.callback,`SockethubClient validation failed: ${r}`);return}}}if(e.event==="credentials")this.eventCredentials(t);else if(e.event==="message")this.eventMessage(t);this._socket.emit(e.event,t,e.callback)}catch(r){let s=r instanceof Error?r.message:String(r);this.emitClientError(e.event,e.callback,s)}}log(e,t){if(this.debug)console.log(e,t)}registerSocketIOHandlers(){this._socket.on("connect",()=>{this.socket.id=this._socket.id,this.socket.connected=!0,this.socket._emit("connect"),this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)}),this._socket.on("connect_error",(e)=>{this.socket._emit("connect_error",e)}),this._socket.on("disconnect",(e)=>{if(this.socket.connected=!1,this.initState!=="closed")this.initState="idle";this.clearInitTimers(),this.socket._emit("disconnect",e)}),this._socket.on("schemas",(e)=>{this.handleSchemasPayload(e)}),this._socket.on("message",(e)=>{this.socket._emit("message",xn(e))})}hasActorId(e){return"actor"in e&&e.actor!==null&&typeof e.actor==="object"&&"id"in e.actor&&typeof e.actor.id==="string"}replay(e,t){for(let r of t.values()){let s=xn(r),n=s?.id;if(this.hasActorId(s)){let i=s.actor;n=typeof i==="string"?i:i.id}this.log(`replaying ${e} for ${n}`),this._socket.emit(e,s)}}}((e)=>{e.SockethubClient=$s})(typeof globalThis==="object"?globalThis:{});})();
|
|
30
|
-
|
|
31
|
-
//# debugId=80FC8DDBDCDEF99F64756E2164756E21
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vc2NvcGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL25hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2Vycm9ycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3J1bGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGVmYXVsdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvc3Vic2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3Jlc29sdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9yZWZfZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2xpYi91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3NjaGVtZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VyaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29yZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb3JlL3JlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9tdWx0aXBsZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9wYXR0ZXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL2VxdWFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vY29uc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2VudW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsSXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMyMDIwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0eU5hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcGF0dGVyblByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL25vdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL29uZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbGxPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3RoZW5FbHNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9mb3JtYXQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9tZXRhZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvZm9ybWF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL3Njb3BlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9uYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9ydWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvYXBwbGljYWJpbGl0eS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RlZmF1bHRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL3N1YnNjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvcmVzb2x2ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3JlZl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9kaXN0L2VzNS91cmkuYWxsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS91cmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb3JlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9yZWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbXVsdGlwbGVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vcGF0dGVybi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0UHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvZXF1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2NvbnN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vZW51bS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYWRkaXRpb25hbEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zMjAyMC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2NvbnRhaW5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydHlOYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3BhdHRlcm5Qcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3Ivbm90LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9vbmVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FsbE9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL21ldGFkYXRhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvbGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL25lYXJsZXkvbGliL25lYXJsZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NtdHAtYWRkcmVzcy1wYXJzZXIvZGlzdC9saWIvZ3JhbW1hci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc210cC1hZGRyZXNzLXBhcnNlci9kaXN0L2xpYi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zY2hlbWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzLWRyYWZ0MjAxOS9mb3JtYXRzL2R1cmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pZG4tZW1haWwuanMiLCAibm9kZTpwdW55Y29kZSIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2Zvcm1hdHMvaWRuLWhvc3RuYW1lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmktcmVmZXJlbmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwgIi4uL3NjaGVtYXMvc3JjL2NvbnRleHQudHMiLCAiLi4vc2NoZW1hcy9zcmMvZXhhbXBsZXMtY29uZmlnLnRzIiwgIi4uL3NjaGVtYXMvc3JjL2hlbHBlcnMvb2JqZWN0cy50cyIsICIuLi9zY2hlbWFzL3NyYy9zY2hlbWFzL2FjdGl2aXR5LXN0cmVhbS50cyIsICIuLi9zY2hlbWFzL3NyYy9zY2hlbWEtaWQudHMiLCAiLi4vc2NoZW1hcy9zcmMvc2NoZW1hcy9zb2NrZXRodWItY29uZmlnLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3ZhbGlkYXRvci50cyIsICIuLi9zY2hlbWFzL3NyYy9oZWxwZXJzL2Vycm9yLXBhcnNlci50cyIsICIuLi9zY2hlbWFzL3NyYy9hY3Rpdml0eS1zdHJlYW0taGVscGVyLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4Lm1qcyIsICJzcmMvc29ja2V0aHViLWNsaWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5hZGRDb2RlQXJnID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuX0NvZGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLklERU5USUZJRVIgPSBleHBvcnRzLl9Db2RlT3JOYW1lID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHRyYW5lb3VzLWNsYXNzXG5jbGFzcyBfQ29kZU9yTmFtZSB7XG59XG5leHBvcnRzLl9Db2RlT3JOYW1lID0gX0NvZGVPck5hbWU7XG5leHBvcnRzLklERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmNsYXNzIE5hbWUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3Iocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIWV4cG9ydHMuSURFTlRJRklFUi50ZXN0KHMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5zdHIgPSBzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB7IFt0aGlzLnN0cl06IDEgfTtcbiAgICB9XG59XG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuY2xhc3MgX0NvZGUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiID8gW2NvZGVdIDogY29kZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07XG4gICAgICAgIHJldHVybiBpdGVtID09PSBcIlwiIHx8IGl0ZW0gPT09ICdcIlwiJztcbiAgICB9XG4gICAgZ2V0IHN0cigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX3N0cikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX3N0ciA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgocywgYykgPT4gYCR7c30ke2N9YCwgXCJcIikpKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fbmFtZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9uYW1lcyA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgobmFtZXMsIGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgICAgICAgICBuYW1lc1tjLnN0cl0gPSAobmFtZXNbYy5zdHJdIHx8IDApICsgMTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfSwge30pKSk7XG4gICAgfVxufVxuZXhwb3J0cy5fQ29kZSA9IF9Db2RlO1xuZXhwb3J0cy5uaWwgPSBuZXcgX0NvZGUoXCJcIik7XG5mdW5jdGlvbiBfKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb2RlID0gW3N0cnNbMF1dO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZENvZGVBcmcoY29kZSwgYXJnc1tpXSk7XG4gICAgICAgIGNvZGUucHVzaChzdHJzWysraV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Db2RlKGNvZGUpO1xufVxuZXhwb3J0cy5fID0gXztcbmNvbnN0IHBsdXMgPSBuZXcgX0NvZGUoXCIrXCIpO1xuZnVuY3Rpb24gc3RyKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHByID0gW3NhZmVTdHJpbmdpZnkoc3Ryc1swXSldO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGV4cHIucHVzaChwbHVzKTtcbiAgICAgICAgYWRkQ29kZUFyZyhleHByLCBhcmdzW2ldKTtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMsIHNhZmVTdHJpbmdpZnkoc3Ryc1srK2ldKSk7XG4gICAgfVxuICAgIG9wdGltaXplKGV4cHIpO1xuICAgIHJldHVybiBuZXcgX0NvZGUoZXhwcik7XG59XG5leHBvcnRzLnN0ciA9IHN0cjtcbmZ1bmN0aW9uIGFkZENvZGVBcmcoY29kZSwgYXJnKSB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIF9Db2RlKVxuICAgICAgICBjb2RlLnB1c2goLi4uYXJnLl9pdGVtcyk7XG4gICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgY29kZS5wdXNoKGFyZyk7XG4gICAgZWxzZVxuICAgICAgICBjb2RlLnB1c2goaW50ZXJwb2xhdGUoYXJnKSk7XG59XG5leHBvcnRzLmFkZENvZGVBcmcgPSBhZGRDb2RlQXJnO1xuZnVuY3Rpb24gb3B0aW1pemUoZXhwcikge1xuICAgIGxldCBpID0gMTtcbiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAoZXhwcltpXSA9PT0gcGx1cykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbWVyZ2VFeHBySXRlbXMoZXhwcltpIC0gMV0sIGV4cHJbaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4cHIuc3BsaWNlKGkgLSAxLCAzLCByZXMpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwcltpKytdID0gXCIrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRXhwckl0ZW1zKGEsIGIpIHtcbiAgICBpZiAoYiA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBpZiAoYSA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5hbWUgfHwgYVthLmxlbmd0aCAtIDFdICE9PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGIgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBgJHthLnNsaWNlKDAsIC0xKX0ke2J9XCJgO1xuICAgICAgICBpZiAoYlswXSA9PT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybiBhLnNsaWNlKDAsIC0xKSArIGIuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgJiYgYlswXSA9PT0gJ1wiJyAmJiAhKGEgaW5zdGFuY2VvZiBOYW1lKSlcbiAgICAgICAgcmV0dXJuIGBcIiR7YX0ke2Iuc2xpY2UoMSl9YDtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiBzdHJDb25jYXQoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLmVtcHR5U3RyKCkgPyBjMSA6IGMxLmVtcHR5U3RyKCkgPyBjMiA6IHN0ciBgJHtjMX0ke2MyfWA7XG59XG5leHBvcnRzLnN0ckNvbmNhdCA9IHN0ckNvbmNhdDtcbi8vIFRPRE8gZG8gbm90IGFsbG93IGFycmF5cyBoZXJlXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgeCA9PT0gbnVsbFxuICAgICAgICA/IHhcbiAgICAgICAgOiBzYWZlU3RyaW5naWZ5KEFycmF5LmlzQXJyYXkoeCkgPyB4LmpvaW4oXCIsXCIpIDogeCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUoc2FmZVN0cmluZ2lmeSh4KSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCBcIlxcXFx1MjAyOFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCBcIlxcXFx1MjAyOVwiKTtcbn1cbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IHNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkgPyBuZXcgX0NvZGUoYC4ke2tleX1gKSA6IF8gYFske2tleX1dYDtcbn1cbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbi8vRG9lcyBiZXN0IGVmZm9ydCB0byBmb3JtYXQgdGhlIG5hbWUgcHJvcGVybHlcbmZ1bmN0aW9uIGdldEVzbUV4cG9ydE5hbWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgX0NvZGUoYCR7a2V5fWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7a2V5fSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKTtcbn1cbmV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGdldEVzbUV4cG9ydE5hbWU7XG5mdW5jdGlvbiByZWdleHBDb2RlKHJ4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShyeC50b1N0cmluZygpKTtcbn1cbmV4cG9ydHMucmVnZXhwQ29kZSA9IHJlZ2V4cENvZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSB8fCAoZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IFVzZWRWYWx1ZVN0YXRlID0ge30pKTtcbmV4cG9ydHMudmFyS2luZHMgPSB7XG4gICAgY29uc3Q6IG5ldyBjb2RlXzEuTmFtZShcImNvbnN0XCIpLFxuICAgIGxldDogbmV3IGNvZGVfMS5OYW1lKFwibGV0XCIpLFxuICAgIHZhcjogbmV3IGNvZGVfMS5OYW1lKFwidmFyXCIpLFxufTtcbmNsYXNzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3Rvcih7IHByZWZpeGVzLCBwYXJlbnQgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX25hbWVzID0ge307XG4gICAgICAgIHRoaXMuX3ByZWZpeGVzID0gcHJlZml4ZXM7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdG9OYW1lKG5hbWVPclByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmFtZU9yUHJlZml4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBuYW1lT3JQcmVmaXggOiB0aGlzLm5hbWUobmFtZU9yUHJlZml4KTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuTmFtZSh0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICBfbmV3TmFtZShwcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbmcgPSB0aGlzLl9uYW1lc1twcmVmaXhdIHx8IHRoaXMuX25hbWVHcm91cChwcmVmaXgpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bmcuaW5kZXgrK31gO1xuICAgIH1cbiAgICBfbmFtZUdyb3VwKHByZWZpeCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKChfYiA9IChfYSA9IHRoaXMuX3BhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9wcmVmaXhlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhwcmVmaXgpKSB8fCAodGhpcy5fcHJlZml4ZXMgJiYgIXRoaXMuX3ByZWZpeGVzLmhhcyhwcmVmaXgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggXCIke3ByZWZpeH1cIiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHNjb3BlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLl9uYW1lc1twcmVmaXhdID0geyBwcmVmaXgsIGluZGV4OiAwIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2NvcGUgPSBTY29wZTtcbmNsYXNzIFZhbHVlU2NvcGVOYW1lIGV4dGVuZHMgY29kZV8xLk5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgbmFtZVN0cikge1xuICAgICAgICBzdXBlcihuYW1lU3RyKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5LCBpdGVtSW5kZXggfSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2NvcGVQYXRoID0gKDAsIGNvZGVfMS5fKSBgLiR7bmV3IGNvZGVfMS5OYW1lKHByb3BlcnR5KX1bJHtpdGVtSW5kZXh9XWA7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IFZhbHVlU2NvcGVOYW1lO1xuY29uc3QgbGluZSA9ICgwLCBjb2RlXzEuXykgYFxcbmA7XG5jbGFzcyBWYWx1ZVNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zY29wZSA9IG9wdHMuc2NvcGU7XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBsaW5lIDogY29kZV8xLm5pbCB9O1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZVNjb3BlTmFtZShwcmVmaXgsIHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIHZhbHVlKG5hbWVPclByZWZpeCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodmFsdWUucmVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWVcIik7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBjb25zdCB7IHByZWZpeCB9ID0gbmFtZTtcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSAoX2EgPSB2YWx1ZS5rZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlLnJlZjtcbiAgICAgICAgbGV0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgICAgY29uc3QgX25hbWUgPSB2cy5nZXQodmFsdWVLZXkpO1xuICAgICAgICAgICAgaWYgKF9uYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF0gPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdnMuc2V0KHZhbHVlS2V5LCBuYW1lKTtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuX3Njb3BlW3ByZWZpeF0gfHwgKHRoaXMuX3Njb3BlW3ByZWZpeF0gPSBbXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHMubGVuZ3RoO1xuICAgICAgICBzW2l0ZW1JbmRleF0gPSB2YWx1ZS5yZWY7XG4gICAgICAgIG5hbWUuc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHk6IHByZWZpeCwgaXRlbUluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdnMuZ2V0KGtleU9yUmVmKTtcbiAgICB9XG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSwgdmFsdWVzID0gdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUuc2NvcGVQYXRoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlXzEuXykgYCR7c2NvcGVOYW1lfSR7bmFtZS5zY29wZVBhdGh9YDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSh2YWx1ZXMgPSB0aGlzLl92YWx1ZXMsIHVzZWRWYWx1ZXMsIGdldENvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnZhbHVlLmNvZGU7XG4gICAgICAgIH0sIHVzZWRWYWx1ZXMsIGdldENvZGUpO1xuICAgIH1cbiAgICBfcmVkdWNlVmFsdWVzKHZhbHVlcywgdmFsdWVDb2RlLCB1c2VkVmFsdWVzID0ge30sIGdldENvZGUpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBjb2RlXzEubmlsO1xuICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZzID0gdmFsdWVzW3ByZWZpeF07XG4gICAgICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbmFtZVNldCA9ICh1c2VkVmFsdWVzW3ByZWZpeF0gPSB1c2VkVmFsdWVzW3ByZWZpeF0gfHwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHZzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZVNldC5oYXMobmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5TdGFydGVkKTtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IHZhbHVlQ29kZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWYgPSB0aGlzLm9wdHMuZXM1ID8gZXhwb3J0cy52YXJLaW5kcy52YXIgOiBleHBvcnRzLnZhcktpbmRzLmNvbnN0O1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7ZGVmfSAke25hbWV9ID0gJHtjfTske3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgoYyA9IGdldENvZGUgPT09IG51bGwgfHwgZ2V0Q29kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0Q29kZShuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2N9JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5Db21wbGV0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlID0gVmFsdWVTY29wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9yID0gZXhwb3J0cy5hbmQgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMub3BlcmF0b3JzID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNvbnN0IHNjb3BlXzEgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbnZhciBjb2RlXzIgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJDb25jYXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJDb25jYXQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLmdldFByb3BlcnR5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVnZXhwQ29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnJlZ2V4cENvZGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuTmFtZTsgfSB9KTtcbnZhciBzY29wZV8yID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5TY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGVOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyS2luZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIudmFyS2luZHM7IH0gfSk7XG5leHBvcnRzLm9wZXJhdG9ycyA9IHtcbiAgICBHVDogbmV3IGNvZGVfMS5fQ29kZShcIj5cIiksXG4gICAgR1RFOiBuZXcgY29kZV8xLl9Db2RlKFwiPj1cIiksXG4gICAgTFQ6IG5ldyBjb2RlXzEuX0NvZGUoXCI8XCIpLFxuICAgIExURTogbmV3IGNvZGVfMS5fQ29kZShcIjw9XCIpLFxuICAgIEVROiBuZXcgY29kZV8xLl9Db2RlKFwiPT09XCIpLFxuICAgIE5FUTogbmV3IGNvZGVfMS5fQ29kZShcIiE9PVwiKSxcbiAgICBOT1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCIhXCIpLFxuICAgIE9SOiBuZXcgY29kZV8xLl9Db2RlKFwifHxcIiksXG4gICAgQU5EOiBuZXcgY29kZV8xLl9Db2RlKFwiJiZcIiksXG4gICAgQUREOiBuZXcgY29kZV8xLl9Db2RlKFwiK1wiKSxcbn07XG5jbGFzcyBOb2RlIHtcbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhfbmFtZXMsIF9jb25zdGFudHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuY2xhc3MgRGVmIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgcmhzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgIH1cbiAgICByZW5kZXIoeyBlczUsIF9uIH0pIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IGVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgPSAke3RoaXMucmhzfWA7XG4gICAgICAgIHJldHVybiBgJHt2YXJLaW5kfSAke3RoaXMubmFtZX0ke3Joc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFuYW1lc1t0aGlzLm5hbWUuc3RyXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmhzKVxuICAgICAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLnJocy5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgICAgIHRoaXMuc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0cztcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ID0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgIW5hbWVzW3RoaXMubGhzLnN0cl0gJiYgIXRoaXMuc2lkZUVmZmVjdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8ge30gOiB7IC4uLnRoaXMubGhzLm5hbWVzIH07XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMucmhzKTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ25PcCBleHRlbmRzIEFzc2lnbiB7XG4gICAgY29uc3RydWN0b3IobGhzLCBvcCwgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcihsaHMsIHJocywgc2lkZUVmZmVjdHMpO1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSAke3RoaXMub3B9PSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgTGFiZWwgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH06YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIEJyZWFrIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsID8gYCAke3RoaXMubGFiZWx9YCA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgYnJlYWske2xhYmVsfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgVGhyb3cgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGB0aHJvdyAke3RoaXMuZXJyb3J9O2AgKyBfbjtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvci5uYW1lcztcbiAgICB9XG59XG5jbGFzcyBBbnlDb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX1gID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGltaXplRXhwcih0aGlzLmNvZGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5jb2RlLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgUGFyZW50Tm9kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5vZGVzID0gW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGNvZGUsIG4pID0+IGNvZGUgKyBuLnJlbmRlcihvcHRzKSwgXCJcIik7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV0ub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobikpXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEsIC4uLm4pO1xuICAgICAgICAgICAgZWxzZSBpZiAobilcbiAgICAgICAgICAgICAgICBub2Rlc1tpXSA9IG47XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRpbmcgYmFja3dhcmRzIGltcHJvdmVzIDEtcGFzcyBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChuLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBuLm5hbWVzKTtcbiAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChuYW1lcywgbikgPT4gYWRkTmFtZXMobmFtZXMsIG4ubmFtZXMpLCB7fSk7XG4gICAgfVxufVxuY2xhc3MgQmxvY2tOb2RlIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgb3B0cy5fbiArIHN1cGVyLnJlbmRlcihvcHRzKSArIFwifVwiICsgb3B0cy5fbjtcbiAgICB9XG59XG5jbGFzcyBSb290IGV4dGVuZHMgUGFyZW50Tm9kZSB7XG59XG5jbGFzcyBFbHNlIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkVsc2Uua2luZCA9IFwiZWxzZVwiO1xuY2xhc3MgSWYgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvbmRpdGlvbiwgbm9kZXMpIHtcbiAgICAgICAgc3VwZXIobm9kZXMpO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBgaWYoJHt0aGlzLmNvbmRpdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGNvZGUgKz0gXCJlbHNlIFwiICsgdGhpcy5lbHNlLnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgY29uc3QgY29uZCA9IHRoaXMuY29uZGl0aW9uO1xuICAgICAgICBpZiAoY29uZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVzOyAvLyBlbHNlIGlzIGlnbm9yZWQgaGVyZVxuICAgICAgICBsZXQgZSA9IHRoaXMuZWxzZTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gZS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBlID0gdGhpcy5lbHNlID0gQXJyYXkuaXNBcnJheShucykgPyBuZXcgRWxzZShucykgOiBucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgSWYgPyBlIDogZS5ub2RlcztcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWYobm90KGNvbmQpLCBlIGluc3RhbmNlb2YgSWYgPyBbZV0gOiBlLm5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UgfHwgIXRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZWxzZSA9IChfYSA9IHRoaXMuZWxzZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIGlmICghKHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykgfHwgdGhpcy5lbHNlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5jb25kaXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmVsc2UubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuSWYua2luZCA9IFwiaWZcIjtcbmNsYXNzIEZvciBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5Gb3Iua2luZCA9IFwiZm9yXCI7XG5jbGFzcyBGb3JMb29wIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy5pdGVyYXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmF0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhdGlvbi5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRm9yUmFuZ2UgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJvbSA9IGZyb207XG4gICAgICAgIHRoaXMudG8gPSB0bztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IG9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZnJvbSwgdG8gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dmFyS2luZH0gJHtuYW1lfT0ke2Zyb219OyAke25hbWV9PCR7dG99OyAke25hbWV9KyspYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IGFkZEV4cHJOYW1lcyhzdXBlci5uYW1lcywgdGhpcy5mcm9tKTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy50byk7XG4gICAgfVxufVxuY2xhc3MgRm9ySXRlciBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IobG9vcCwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb29wID0gbG9vcDtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IGl0ZXJhYmxlO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMudmFyS2luZH0gJHt0aGlzLm5hbWV9ICR7dGhpcy5sb29wfSAke3RoaXMuaXRlcmFibGV9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYWJsZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYWJsZS5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRnVuYyBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgYXJncywgYXN5bmMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5hc3luYyA9IGFzeW5jO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCBfYXN5bmMgPSB0aGlzLmFzeW5jID8gXCJhc3luYyBcIiA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHtfYXN5bmN9ZnVuY3Rpb24gJHt0aGlzLm5hbWV9KCR7dGhpcy5hcmdzfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZ1bmMua2luZCA9IFwiZnVuY1wiO1xuY2xhc3MgUmV0dXJuIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwicmV0dXJuIFwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cblJldHVybi5raW5kID0gXCJyZXR1cm5cIjtcbmNsYXNzIFRyeSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBcInRyeVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5jYXRjaC5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuZmluYWxseS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5jYXRjaC5uYW1lcyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5maW5hbGx5Lm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIENhdGNoIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgY2F0Y2goJHt0aGlzLmVycm9yfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkNhdGNoLmtpbmQgPSBcImNhdGNoXCI7XG5jbGFzcyBGaW5hbGx5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJmaW5hbGx5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRmluYWxseS5raW5kID0gXCJmaW5hbGx5XCI7XG5jbGFzcyBDb2RlR2VuIHtcbiAgICBjb25zdHJ1Y3RvcihleHRTY29wZSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cyA9IFtdO1xuICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IFwiXFxuXCIgOiBcIlwiIH07XG4gICAgICAgIHRoaXMuX2V4dFNjb3BlID0gZXh0U2NvcGU7XG4gICAgICAgIHRoaXMuX3Njb3BlID0gbmV3IHNjb3BlXzEuU2NvcGUoeyBwYXJlbnQ6IGV4dFNjb3BlIH0pO1xuICAgICAgICB0aGlzLl9ub2RlcyA9IFtuZXcgUm9vdCgpXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LnJlbmRlcih0aGlzLm9wdHMpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHVuaXF1ZSBuYW1lIGluIHRoZSBpbnRlcm5hbCBzY29wZVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZVxuICAgIHNjb3BlTmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlIGFuZCBhc3NpZ25zIHZhbHVlIHRvIGl0XG4gICAgc2NvcGVWYWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9leHRTY29wZS52YWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdIHx8ICh0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdID0gbmV3IFNldCgpKTtcbiAgICAgICAgdnMuYWRkKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0U2NvcGVWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5nZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGNvZGUgdGhhdCBhc3NpZ25zIHZhbHVlcyBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgdG8gdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgaW50ZXJuYWxseVxuICAgIC8vIChzYW1lIG5hbWVzIHRoYXQgd2VyZSByZXR1cm5lZCBieSBnZW4uc2NvcGVOYW1lIG9yIGdlbi5zY29wZVZhbHVlKVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhzY29wZU5hbWUsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBfZGVmKHZhcktpbmQsIG5hbWVPclByZWZpeCwgcmhzLCBjb25zdGFudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmIChyaHMgIT09IHVuZGVmaW5lZCAmJiBjb25zdGFudClcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tuYW1lLnN0cl0gPSByaHM7XG4gICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBEZWYodmFyS2luZCwgbmFtZSwgcmhzKSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICAvLyBgY29uc3RgIGRlY2xhcmF0aW9uIChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBjb25zdChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5jb25zdCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGBsZXRgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudCAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgbGV0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmxldCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGB2YXJgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudFxuICAgIHZhcihuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy52YXIsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBhc3NpZ25tZW50IGNvZGVcbiAgICBhc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykpO1xuICAgIH1cbiAgICAvLyBgKz1gIGNvZGVcbiAgICBhZGQobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ25PcChsaHMsIGV4cG9ydHMub3BlcmF0b3JzLkFERCwgcmhzKSk7XG4gICAgfVxuICAgIC8vIGFwcGVuZHMgcGFzc2VkIFNhZmVFeHByIHRvIGNvZGUgb3IgZXhlY3V0ZXMgQmxvY2tcbiAgICBjb2RlKGMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGMoKTtcbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gY29kZV8xLm5pbClcbiAgICAgICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBBbnlDb2RlKGMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIHJldHVybnMgY29kZSBmb3Igb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSBwYXNzZWQgYXJndW1lbnQgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnNcbiAgICBvYmplY3QoLi4ua2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBbXCJ7XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBrZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChjb2RlLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiLFwiKTtcbiAgICAgICAgICAgIGNvZGUucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gdmFsdWUgfHwgdGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIjpcIik7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5hZGRDb2RlQXJnKShjb2RlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29kZS5wdXNoKFwifVwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoY29kZSk7XG4gICAgfVxuICAgIC8vIGBpZmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYHRoZW5Cb2R5YCBhbmQsIG9wdGlvbmFsbHksIGBlbHNlQm9keWAgYXJlIHBhc3NlZClcbiAgICBpZihjb25kaXRpb24sIHRoZW5Cb2R5LCBlbHNlQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgICAgICBpZiAodGhlbkJvZHkgJiYgZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZWxzZSgpLmNvZGUoZWxzZUJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhlbkJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiBib2R5IHdpdGhvdXQgXCJ0aGVuXCIgYm9keScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZWxzZSBpZmAgY2xhdXNlIC0gaW52YWxpZCB3aXRob3V0IGBpZmAgb3IgYWZ0ZXIgYGVsc2VgIGNsYXVzZXNcbiAgICBlbHNlSWYoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgfVxuICAgIC8vIGBlbHNlYCBjbGF1c2UgLSBvbmx5IHZhbGlkIGFmdGVyIGBpZmAgb3IgYGVsc2UgaWZgIGNsYXVzZXNcbiAgICBlbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IEVsc2UoKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgaWZgIHN0YXRlbWVudCAobmVlZGVkIGlmIGdlbi5pZiB3YXMgdXNlZCBvbmx5IHdpdGggY29uZGl0aW9uKVxuICAgIGVuZElmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKElmLCBFbHNlKTtcbiAgICB9XG4gICAgX2Zvcihub2RlLCBmb3JCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZvckJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZm9yQm9keSkuZW5kRm9yKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBhIGdlbmVyaWMgYGZvcmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYGZvckJvZHlgIGlzIHBhc3NlZClcbiAgICBmb3IoaXRlcmF0aW9uLCBmb3JCb2R5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckxvb3AoaXRlcmF0aW9uKSwgZm9yQm9keSk7XG4gICAgfVxuICAgIC8vIGBmb3JgIHN0YXRlbWVudCBmb3IgYSByYW5nZSBvZiB2YWx1ZXNcbiAgICBmb3JSYW5nZShuYW1lT3JQcmVmaXgsIGZyb20sIHRvLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5sZXQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JSYW5nZSh2YXJLaW5kLCBuYW1lLCBmcm9tLCB0byksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLW9mYCBzdGF0ZW1lbnQgKGluIGVzNSBtb2RlIHJlcGxhY2Ugd2l0aCBhIG5vcm1hbCBmb3IgbG9vcClcbiAgICBmb3JPZihuYW1lT3JQcmVmaXgsIGl0ZXJhYmxlLCBmb3JCb2R5LCB2YXJLaW5kID0gc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBpdGVyYWJsZSBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gaXRlcmFibGUgOiB0aGlzLnZhcihcIl9hcnJcIiwgaXRlcmFibGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yUmFuZ2UoXCJfaVwiLCAwLCAoMCwgY29kZV8xLl8pIGAke2Fycn0ubGVuZ3RoYCwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcihuYW1lLCAoMCwgY29kZV8xLl8pIGAke2Fycn1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBmb3JCb2R5KG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcIm9mXCIsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3ItaW5gIHN0YXRlbWVudC5cbiAgICAvLyBXaXRoIG9wdGlvbiBgb3duUHJvcGVydGllc2AgcmVwbGFjZWQgd2l0aCBhIGBmb3Itb2ZgIGxvb3AgZm9yIG9iamVjdCBrZXlzXG4gICAgZm9ySW4obmFtZU9yUHJlZml4LCBvYmosIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMub3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yT2YobmFtZU9yUHJlZml4LCAoMCwgY29kZV8xLl8pIGBPYmplY3Qua2V5cygke29ian0pYCwgZm9yQm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwiaW5cIiwgdmFyS2luZCwgbmFtZSwgb2JqKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgZm9yYCBsb29wXG4gICAgZW5kRm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZvcik7XG4gICAgfVxuICAgIC8vIGBsYWJlbGAgc3RhdGVtZW50XG4gICAgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBMYWJlbChsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgYnJlYWtgIHN0YXRlbWVudFxuICAgIGJyZWFrKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQnJlYWsobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYHJldHVybmAgc3RhdGVtZW50XG4gICAgcmV0dXJuKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInJldHVyblwiIHNob3VsZCBoYXZlIG9uZSBub2RlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoUmV0dXJuKTtcbiAgICB9XG4gICAgLy8gYHRyeWAgc3RhdGVtZW50XG4gICAgdHJ5KHRyeUJvZHksIGNhdGNoQ29kZSwgZmluYWxseUNvZGUpIHtcbiAgICAgICAgaWYgKCFjYXRjaENvZGUgJiYgIWZpbmFsbHlDb2RlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInRyeVwiIHdpdGhvdXQgXCJjYXRjaFwiIGFuZCBcImZpbmFsbHlcIicpO1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyeSgpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh0cnlCb2R5KTtcbiAgICAgICAgaWYgKGNhdGNoQ29kZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5hbWUoXCJlXCIpO1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmNhdGNoID0gbmV3IENhdGNoKGVycm9yKTtcbiAgICAgICAgICAgIGNhdGNoQ29kZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsbHlDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuZmluYWxseSA9IG5ldyBGaW5hbGx5KCk7XG4gICAgICAgICAgICB0aGlzLmNvZGUoZmluYWxseUNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoQ2F0Y2gsIEZpbmFsbHkpO1xuICAgIH1cbiAgICAvLyBgdGhyb3dgIHN0YXRlbWVudFxuICAgIHRocm93KGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgVGhyb3coZXJyb3IpKTtcbiAgICB9XG4gICAgLy8gc3RhcnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBibG9jayhib2R5LCBub2RlQ291bnQpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpO1xuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShib2R5KS5lbmRCbG9jayhub2RlQ291bnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIHRoZSBjdXJyZW50IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgZW5kQmxvY2sobm9kZUNvdW50KSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuX2Jsb2NrU3RhcnRzLnBvcCgpO1xuICAgICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBub3QgaW4gc2VsZi1iYWxhbmNpbmcgYmxvY2tcIik7XG4gICAgICAgIGNvbnN0IHRvQ2xvc2UgPSB0aGlzLl9ub2Rlcy5sZW5ndGggLSBsZW47XG4gICAgICAgIGlmICh0b0Nsb3NlIDwgMCB8fCAobm9kZUNvdW50ICE9PSB1bmRlZmluZWQgJiYgdG9DbG9zZSAhPT0gbm9kZUNvdW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiB3cm9uZyBudW1iZXIgb2Ygbm9kZXM6ICR7dG9DbG9zZX0gdnMgJHtub2RlQ291bnR9IGV4cGVjdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm9kZXMubGVuZ3RoID0gbGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGZ1bmN0aW9uYCBoZWFkaW5nIChvciBkZWZpbml0aW9uIGlmIGZ1bmNCb2R5IGlzIHBhc3NlZClcbiAgICBmdW5jKG5hbWUsIGFyZ3MgPSBjb2RlXzEubmlsLCBhc3luYywgZnVuY0JvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBGdW5jKG5hbWUsIGFyZ3MsIGFzeW5jKSk7XG4gICAgICAgIGlmIChmdW5jQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmdW5jQm9keSkuZW5kRnVuYygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICBlbmRGdW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZ1bmMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShuID0gMSkge1xuICAgICAgICB3aGlsZSAobi0tID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTmFtZXModGhpcy5fcm9vdC5uYW1lcywgdGhpcy5fY29uc3RhbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbGVhZk5vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX2Jsb2NrTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIF9lbmRCbG9ja05vZGUoTjEsIE4yKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBOMSB8fCAoTjIgJiYgbiBpbnN0YW5jZW9mIE4yKSkge1xuICAgICAgICAgICAgdGhpcy5fbm9kZXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5vdCBpbiBibG9jayBcIiR7TjIgPyBgJHtOMS5raW5kfS8ke04yLmtpbmR9YCA6IE4xLmtpbmR9XCJgKTtcbiAgICB9XG4gICAgX2Vsc2VOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAoIShuIGluc3RhbmNlb2YgSWYpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIHdpdGhvdXQgXCJpZlwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBuLmVsc2UgPSBub2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IF9yb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbMF07XG4gICAgfVxuICAgIGdldCBfY3Vyck5vZGUoKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIHJldHVybiBuc1tucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgc2V0IF9jdXJyTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIG5zW25zLmxlbmd0aCAtIDFdID0gbm9kZTtcbiAgICB9XG59XG5leHBvcnRzLkNvZGVHZW4gPSBDb2RlR2VuO1xuZnVuY3Rpb24gYWRkTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgKyAoZnJvbVtuXSB8fCAwKTtcbiAgICByZXR1cm4gbmFtZXM7XG59XG5mdW5jdGlvbiBhZGRFeHByTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICByZXR1cm4gZnJvbSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IGFkZE5hbWVzKG5hbWVzLCBmcm9tLm5hbWVzKSA6IG5hbWVzO1xufVxuZnVuY3Rpb24gb3B0aW1pemVFeHByKGV4cHIsIG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICBpZiAoZXhwciBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICByZXR1cm4gcmVwbGFjZU5hbWUoZXhwcik7XG4gICAgaWYgKCFjYW5PcHRpbWl6ZShleHByKSlcbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoZXhwci5faXRlbXMucmVkdWNlKChpdGVtcywgYykgPT4ge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICAgICAgYyA9IHJlcGxhY2VOYW1lKGMpO1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSlcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uYy5faXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10pKTtcbiAgICBmdW5jdGlvbiByZXBsYWNlTmFtZShuKSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdGFudHNbbi5zdHJdO1xuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzW24uc3RyXSAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWxldGUgbmFtZXNbbi5zdHJdO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoZSkge1xuICAgICAgICByZXR1cm4gKGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUgJiZcbiAgICAgICAgICAgIGUuX2l0ZW1zLnNvbWUoKGMpID0+IGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiBuYW1lc1tjLnN0cl0gPT09IDEgJiYgY29uc3RhbnRzW2Muc3RyXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VidHJhY3ROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSAtIChmcm9tW25dIHx8IDApO1xufVxuZnVuY3Rpb24gbm90KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB4ID09PSBudWxsID8gIXggOiAoMCwgY29kZV8xLl8pIGAhJHtwYXIoeCl9YDtcbn1cbmV4cG9ydHMubm90ID0gbm90O1xuY29uc3QgYW5kQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuQU5EKTtcbi8vIGJvb2xlYW4gQU5EICgmJikgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBhbmQoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShhbmRDb2RlKTtcbn1cbmV4cG9ydHMuYW5kID0gYW5kO1xuY29uc3Qgb3JDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5PUik7XG4vLyBib29sZWFuIE9SICh8fCkgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBvciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKG9yQ29kZSk7XG59XG5leHBvcnRzLm9yID0gb3I7XG5mdW5jdGlvbiBtYXBwZW5kKG9wKSB7XG4gICAgcmV0dXJuICh4LCB5KSA9PiAoeCA9PT0gY29kZV8xLm5pbCA/IHkgOiB5ID09PSBjb2RlXzEubmlsID8geCA6ICgwLCBjb2RlXzEuXykgYCR7cGFyKHgpfSAke29wfSAke3Bhcih5KX1gKTtcbn1cbmZ1bmN0aW9uIHBhcih4KSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHggOiAoMCwgY29kZV8xLl8pIGAoJHt4fSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gZXhwb3J0cy5nZXRFcnJvclBhdGggPSBleHBvcnRzLlR5cGUgPSBleHBvcnRzLnVzZUZ1bmMgPSBleHBvcnRzLnNldEV2YWx1YXRlZCA9IGV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBleHBvcnRzLm1lcmdlRXZhbHVhdGVkID0gZXhwb3J0cy5lYWNoSXRlbSA9IGV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBleHBvcnRzLnRvSGFzaCA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuL2NvZGVcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBTZXRcbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgICBjb25zdCBoYXNoID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycilcbiAgICAgICAgaGFzaFtpdGVtXSA9IHRydWU7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5leHBvcnRzLnRvSGFzaCA9IHRvSGFzaDtcbmZ1bmN0aW9uIGFsd2F5c1ZhbGlkU2NoZW1hKGl0LCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEpO1xuICAgIHJldHVybiAhc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBpdC5zZWxmLlJVTEVTLmFsbCk7XG59XG5leHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gYWx3YXlzVmFsaWRTY2hlbWE7XG5mdW5jdGlvbiBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hID0gaXQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoIW9wdHMuc3RyaWN0U2NoZW1hKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZXMgPSBzZWxmLlJVTEVTLmtleXdvcmRzO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoIXJ1bGVzW2tleV0pXG4gICAgICAgICAgICBjaGVja1N0cmljdE1vZGUoaXQsIGB1bmtub3duIGtleXdvcmQ6IFwiJHtrZXl9XCJgKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gY2hlY2tVbmtub3duUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIHJ1bGVzKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHJ1bGVzW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gc2NoZW1hSGFzUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlc0J1dFJlZihzY2hlbWEsIFJVTEVTKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKGtleSAhPT0gXCIkcmVmXCIgJiYgUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gc2NoZW1hSGFzUnVsZXNCdXRSZWY7XG5mdW5jdGlvbiBzY2hlbWFSZWZPclZhbCh7IHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9LCBzY2hlbWEsIGtleXdvcmQsICRkYXRhKSB7XG4gICAgaWYgKCEkZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfWA7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX1gO1xufVxuZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IHNjaGVtYVJlZk9yVmFsO1xuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5leHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSB1bmVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlc2NhcGVKc29uUG9pbnRlcihzdHIpKTtcbn1cbmV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBlc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIGlmICh0eXBlb2Ygc3RyID09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbn1cbmV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBlc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCBcIi9cIikucmVwbGFjZSgvfjAvZywgXCJ+XCIpO1xufVxuZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gdW5lc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIGVhY2hJdGVtKHhzLCBmKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiB4cylcbiAgICAgICAgICAgIGYoeCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmKHhzKTtcbiAgICB9XG59XG5leHBvcnRzLmVhY2hJdGVtID0gZWFjaEl0ZW07XG5mdW5jdGlvbiBtYWtlTWVyZ2VFdmFsdWF0ZWQoeyBtZXJnZU5hbWVzLCBtZXJnZVRvTmFtZSwgbWVyZ2VWYWx1ZXMsIHJlc3VsdFRvTmFtZSwgfSkge1xuICAgIHJldHVybiAoZ2VuLCBmcm9tLCB0bywgdG9OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRvID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZnJvbVxuICAgICAgICAgICAgOiB0byBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgPyAoZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gbWVyZ2VOYW1lcyhnZW4sIGZyb20sIHRvKSA6IG1lcmdlVG9OYW1lKGdlbiwgZnJvbSwgdG8pLCB0bylcbiAgICAgICAgICAgICAgICA6IGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChtZXJnZVRvTmFtZShnZW4sIHRvLCBmcm9tKSwgZnJvbSlcbiAgICAgICAgICAgICAgICAgICAgOiBtZXJnZVZhbHVlcyhmcm9tLCB0byk7XG4gICAgICAgIHJldHVybiB0b05hbWUgPT09IGNvZGVnZW5fMS5OYW1lICYmICEocmVzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpID8gcmVzdWx0VG9OYW1lKGdlbiwgcmVzKSA6IHJlcztcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IHtcbiAgICBwcm9wczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIHRydWUpLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LmFzc2lnbigke3RvfSwgJHtmcm9tfSlgKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmcm9tID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApO1xuICAgICAgICAgICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHRvLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IHsgLi4uZnJvbSwgLi4udG8gfSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogZXZhbHVhdGVkUHJvcHNUb05hbWUsXG4gICAgfSksXG4gICAgaXRlbXM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZSA/IHRydWUgOiAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IE1hdGgubWF4KGZyb20sIHRvKSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogKGdlbiwgaXRlbXMpID0+IGdlbi52YXIoXCJpdGVtc1wiLCBpdGVtcyksXG4gICAgfSksXG59O1xuZnVuY3Rpb24gZXZhbHVhdGVkUHJvcHNUb05hbWUoZ2VuLCBwcykge1xuICAgIGlmIChwcyA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIGdlbi52YXIoXCJwcm9wc1wiLCB0cnVlKTtcbiAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIGlmIChwcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpO1xuICAgIHJldHVybiBwcm9wcztcbn1cbmV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBldmFsdWF0ZWRQcm9wc1RvTmFtZTtcbmZ1bmN0aW9uIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcykge1xuICAgIE9iamVjdC5rZXlzKHBzKS5mb3JFYWNoKChwKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwKX1gLCB0cnVlKSk7XG59XG5leHBvcnRzLnNldEV2YWx1YXRlZCA9IHNldEV2YWx1YXRlZDtcbmNvbnN0IHNuaXBwZXRzID0ge307XG5mdW5jdGlvbiB1c2VGdW5jKGdlbiwgZikge1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImZ1bmNcIiwge1xuICAgICAgICByZWY6IGYsXG4gICAgICAgIGNvZGU6IHNuaXBwZXRzW2YuY29kZV0gfHwgKHNuaXBwZXRzW2YuY29kZV0gPSBuZXcgY29kZV8xLl9Db2RlKGYuY29kZSkpLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VGdW5jID0gdXNlRnVuYztcbnZhciBUeXBlO1xuKGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgVHlwZVtUeXBlW1wiTnVtXCJdID0gMF0gPSBcIk51bVwiO1xuICAgIFR5cGVbVHlwZVtcIlN0clwiXSA9IDFdID0gXCJTdHJcIjtcbn0pKFR5cGUgfHwgKGV4cG9ydHMuVHlwZSA9IFR5cGUgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0RXJyb3JQYXRoKGRhdGFQcm9wLCBkYXRhUHJvcFR5cGUsIGpzUHJvcGVydHlTeW50YXgpIHtcbiAgICAvLyBsZXQgcGF0aFxuICAgIGlmIChkYXRhUHJvcCBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gZGF0YVByb3BUeXBlID09PSBUeXBlLk51bTtcbiAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXhcbiAgICAgICAgICAgID8gaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiW1wiICsgJHtkYXRhUHJvcH0gKyBcIl1cImBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiWydcIiArICR7ZGF0YVByb3B9ICsgXCInXVwiYFxuICAgICAgICAgICAgOiBpc051bWJlclxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgXCIvXCIgKyAke2RhdGFQcm9wfWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH0ucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcXFwvL2csIFwifjFcIilgOyAvLyBUT0RPIG1heWJlIHVzZSBnbG9iYWwgZXNjYXBlUG9pbnRlclxuICAgIH1cbiAgICByZXR1cm4ganNQcm9wZXJ0eVN5bnRheCA/ICgwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGRhdGFQcm9wKS50b1N0cmluZygpIDogXCIvXCIgKyBlc2NhcGVKc29uUG9pbnRlcihkYXRhUHJvcCk7XG59XG5leHBvcnRzLmdldEVycm9yUGF0aCA9IGdldEVycm9yUGF0aDtcbmZ1bmN0aW9uIGNoZWNrU3RyaWN0TW9kZShpdCwgbXNnLCBtb2RlID0gaXQub3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICBpZiAoIW1vZGUpXG4gICAgICAgIHJldHVybjtcbiAgICBtc2cgPSBgc3RyaWN0IG1vZGU6ICR7bXNnfWA7XG4gICAgaWYgKG1vZGUgPT09IHRydWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIGl0LnNlbGYubG9nZ2VyLndhcm4obXNnKTtcbn1cbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gY2hlY2tTdHJpY3RNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzID0ge1xuICAgIC8vIHZhbGlkYXRpb24gZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgZGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZGF0YVwiKSwgLy8gZGF0YSBwYXNzZWQgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIC8vIGFyZ3MgcGFzc2VkIGZyb20gcmVmZXJlbmNpbmcgc2NoZW1hXG4gICAgdmFsQ3h0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2YWxDeHRcIiksIC8vIHZhbGlkYXRpb24vZGF0YSBjb250ZXh0IC0gc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LCBpdCBpcyBkZXN0cnVjdHVyZWQgdG8gdGhlIG5hbWVzIGJlbG93XG4gICAgaW5zdGFuY2VQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJpbnN0YW5jZVBhdGhcIiksXG4gICAgcGFyZW50RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVwiKSxcbiAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudERhdGFQcm9wZXJ0eVwiKSxcbiAgICByb290RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicm9vdERhdGFcIiksIC8vIHJvb3QgZGF0YSAtIHNhbWUgYXMgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBmaXJzdC90b3AgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIGR5bmFtaWNBbmNob3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkeW5hbWljQW5jaG9yc1wiKSwgLy8gdXNlZCB0byBzdXBwb3J0IHJlY3Vyc2l2ZVJlZiBhbmQgZHluYW1pY1JlZlxuICAgIC8vIGZ1bmN0aW9uIHNjb3BlZCB2YXJpYWJsZXNcbiAgICB2RXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2RXJyb3JzXCIpLCAvLyBudWxsIG9yIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgZXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJlcnJvcnNcIiksIC8vIGNvdW50ZXIgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB0aGlzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ0aGlzXCIpLFxuICAgIC8vIFwiZ2xvYmFsc1wiXG4gICAgc2VsZjogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2VsZlwiKSxcbiAgICBzY29wZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2NvcGVcIiksXG4gICAgLy8gSlREIHNlcmlhbGl6ZS9wYXJzZSBuYW1lIGZvciBKU09OIHN0cmluZyBhbmQgcG9zaXRpb25cbiAgICBqc29uOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uXCIpLFxuICAgIGpzb25Qb3M6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25Qb3NcIiksXG4gICAganNvbkxlbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvbkxlblwiKSxcbiAgICBqc29uUGFydDogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBhcnRcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gbmFtZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSBleHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSBleHBvcnRzLnJlcG9ydEVycm9yID0gZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5leHBvcnRzLmtleXdvcmRFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBwYXNzIFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgdmFsaWRhdGlvbmAsXG59O1xuZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFUeXBlIH0pID0+IHNjaGVtYVR5cGVcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgbXVzdCBiZSAke3NjaGVtYVR5cGV9ICgkZGF0YSlgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0RXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzLCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgaWYgKG92ZXJyaWRlQWxsRXJyb3JzICE9PSBudWxsICYmIG92ZXJyaWRlQWxsRXJyb3JzICE9PSB2b2lkIDAgPyBvdmVycmlkZUFsbEVycm9ycyA6IChjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJPYmp9XWApO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXJyb3IgPSByZXBvcnRFcnJvcjtcbmZ1bmN0aW9uIHJlcG9ydEV4dHJhRXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgaWYgKCEoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IHJlcG9ydEV4dHJhRXJyb3I7XG5mdW5jdGlvbiByZXNldEVycm9yc0NvdW50KGdlbiwgZXJyc0NvdW50KSB7XG4gICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCBlcnJzQ291bnQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsICgpID0+IGdlbi5pZihlcnJzQ291bnQsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCwgZXJyc0NvdW50KSwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCkpKTtcbn1cbmV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IHJlc2V0RXJyb3JzQ291bnQ7XG5mdW5jdGlvbiBleHRlbmRFcnJvcnMoeyBnZW4sIGtleXdvcmQsIHNjaGVtYVZhbHVlLCBkYXRhLCBlcnJzQ291bnQsIGl0LCB9KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgZXJyID0gZ2VuLm5hbWUoXCJlcnJcIik7XG4gICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBlcnJzQ291bnQsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIChpKSA9PiB7XG4gICAgICAgIGdlbi5jb25zdChlcnIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9WyR7aX1dYCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaXQuZXJyb3JQYXRoKSkpO1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHIpIGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hYCwgc2NoZW1hVmFsdWUpO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uZGF0YWAsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4dGVuZEVycm9ycztcbmZ1bmN0aW9uIGFkZEVycm9yKGdlbiwgZXJyT2JqKSB7XG4gICAgY29uc3QgZXJyID0gZ2VuLmNvbnN0KFwiZXJyXCIsIGVyck9iaik7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsYCwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyfV1gKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ucHVzaCgke2Vycn0pYCk7XG4gICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSsrYCk7XG59XG5mdW5jdGlvbiByZXR1cm5FcnJvcnMoaXQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWFFbnYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KCR7ZXJyc30pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBlcnJzKTtcbiAgICAgICAgZ2VuLnJldHVybihmYWxzZSk7XG4gICAgfVxufVxuY29uc3QgRSA9IHtcbiAgICBrZXl3b3JkOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJrZXl3b3JkXCIpLFxuICAgIHNjaGVtYVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVBhdGhcIiksIC8vIGFsc28gdXNlZCBpbiBKVEQgZXJyb3JzXG4gICAgcGFyYW1zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJhbXNcIiksXG4gICAgcHJvcGVydHlOYW1lOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwcm9wZXJ0eU5hbWVcIiksXG4gICAgbWVzc2FnZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwibWVzc2FnZVwiKSxcbiAgICBzY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVwiKSxcbiAgICBwYXJlbnRTY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudFNjaGVtYVwiKSxcbn07XG5mdW5jdGlvbiBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgY3JlYXRlRXJyb3JzIH0gPSBjeHQuaXQ7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7fWA7XG4gICAgcmV0dXJuIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xufVxuZnVuY3Rpb24gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyA9IHt9KSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW1xuICAgICAgICBlcnJvckluc3RhbmNlUGF0aChpdCwgZXJyb3JQYXRocyksXG4gICAgICAgIGVycm9yU2NoZW1hUGF0aChjeHQsIGVycm9yUGF0aHMpLFxuICAgIF07XG4gICAgZXh0cmFFcnJvclByb3BzKGN4dCwgZXJyb3IsIGtleVZhbHVlcyk7XG4gICAgcmV0dXJuIGdlbi5vYmplY3QoLi4ua2V5VmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGVycm9ySW5zdGFuY2VQYXRoKHsgZXJyb3JQYXRoIH0sIHsgaW5zdGFuY2VQYXRoIH0pIHtcbiAgICBjb25zdCBpbnN0UGF0aCA9IGluc3RhbmNlUGF0aFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoaW5zdGFuY2VQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWBcbiAgICAgICAgOiBlcnJvclBhdGg7XG4gICAgcmV0dXJuIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaW5zdFBhdGgpXTtcbn1cbmZ1bmN0aW9uIGVycm9yU2NoZW1hUGF0aCh7IGtleXdvcmQsIGl0OiB7IGVyclNjaGVtYVBhdGggfSB9LCB7IHNjaGVtYVBhdGgsIHBhcmVudFNjaGVtYSB9KSB7XG4gICAgbGV0IHNjaFBhdGggPSBwYXJlbnRTY2hlbWEgPyBlcnJTY2hlbWFQYXRoIDogKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gO1xuICAgIGlmIChzY2hlbWFQYXRoKSB7XG4gICAgICAgIHNjaFBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7c2NoUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShzY2hlbWFQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWA7XG4gICAgfVxuICAgIHJldHVybiBbRS5zY2hlbWFQYXRoLCBzY2hQYXRoXTtcbn1cbmZ1bmN0aW9uIGV4dHJhRXJyb3JQcm9wcyhjeHQsIHsgcGFyYW1zLCBtZXNzYWdlIH0sIGtleVZhbHVlcykge1xuICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hVmFsdWUsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBvcHRzLCBwcm9wZXJ0eU5hbWUsIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAga2V5VmFsdWVzLnB1c2goW0Uua2V5d29yZCwga2V5d29yZF0sIFtFLnBhcmFtcywgdHlwZW9mIHBhcmFtcyA9PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoY3h0KSA6IHBhcmFtcyB8fCAoMCwgY29kZWdlbl8xLl8pIGB7fWBdKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlcykge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5tZXNzYWdlLCB0eXBlb2YgbWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgPyBtZXNzYWdlKGN4dCkgOiBtZXNzYWdlXSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnZlcmJvc2UpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0Uuc2NoZW1hLCBzY2hlbWFWYWx1ZV0sIFtFLnBhcmVudFNjaGVtYSwgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWBdLCBbbmFtZXNfMS5kZWZhdWx0LmRhdGEsIGRhdGFdKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5TmFtZSlcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ib29sT3JFbXB0eVNjaGVtYSA9IGV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBib29sRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJib29sZWFuIHNjaGVtYSBpcyBmYWxzZVwiLFxufTtcbmZ1bmN0aW9uIHRvcEJvb2xPckVtcHR5U2NoZW1hKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0LCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWEuJGFzeW5jID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbnVsbCk7XG4gICAgICAgIGdlbi5yZXR1cm4odHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy50b3BCb29sT3JFbXB0eVNjaGVtYSA9IHRvcEJvb2xPckVtcHR5U2NoZW1hO1xuZnVuY3Rpb24gYm9vbE9yRW1wdHlTY2hlbWEoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZ2VuLnZhcih2YWxpZCwgZmFsc2UpOyAvLyBUT0RPIHZhclxuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIHRydWUpOyAvLyBUT0RPIHZhclxuICAgIH1cbn1cbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBib29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGZhbHNlU2NoZW1hRXJyb3IoaXQsIG92ZXJyaWRlQWxsRXJyb3JzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEgfSA9IGl0O1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBvdGhlciBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgZm9yIG5vbi1rZXl3b3JkIHZhbGlkYXRpb24gZXJyb3JzLi4uXG4gICAgY29uc3QgY3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwiZmFsc2Ugc2NoZW1hXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogZmFsc2UsXG4gICAgICAgIHNjaGVtYUNvZGU6IGZhbHNlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogZmFsc2UsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIGJvb2xFcnJvciwgdW5kZWZpbmVkLCBvdmVycmlkZUFsbEVycm9ycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib29sU2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bGVzID0gZXhwb3J0cy5pc0pTT05UeXBlID0gdm9pZCAwO1xuY29uc3QgX2pzb25UeXBlcyA9IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcImFycmF5XCJdO1xuY29uc3QganNvblR5cGVzID0gbmV3IFNldChfanNvblR5cGVzKTtcbmZ1bmN0aW9uIGlzSlNPTlR5cGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcInN0cmluZ1wiICYmIGpzb25UeXBlcy5oYXMoeCk7XG59XG5leHBvcnRzLmlzSlNPTlR5cGUgPSBpc0pTT05UeXBlO1xuZnVuY3Rpb24gZ2V0UnVsZXMoKSB7XG4gICAgY29uc3QgZ3JvdXBzID0ge1xuICAgICAgICBudW1iZXI6IHsgdHlwZTogXCJudW1iZXJcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIHN0cmluZzogeyB0eXBlOiBcInN0cmluZ1wiLCBydWxlczogW10gfSxcbiAgICAgICAgYXJyYXk6IHsgdHlwZTogXCJhcnJheVwiLCBydWxlczogW10gfSxcbiAgICAgICAgb2JqZWN0OiB7IHR5cGU6IFwib2JqZWN0XCIsIHJ1bGVzOiBbXSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IHsgLi4uZ3JvdXBzLCBpbnRlZ2VyOiB0cnVlLCBib29sZWFuOiB0cnVlLCBudWxsOiB0cnVlIH0sXG4gICAgICAgIHJ1bGVzOiBbeyBydWxlczogW10gfSwgZ3JvdXBzLm51bWJlciwgZ3JvdXBzLnN0cmluZywgZ3JvdXBzLmFycmF5LCBncm91cHMub2JqZWN0XSxcbiAgICAgICAgcG9zdDogeyBydWxlczogW10gfSxcbiAgICAgICAgYWxsOiB7fSxcbiAgICAgICAga2V5d29yZHM6IHt9LFxuICAgIH07XG59XG5leHBvcnRzLmdldFJ1bGVzID0gZ2V0UnVsZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydWxlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gdm9pZCAwO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNGb3JUeXBlKHsgc2NoZW1hLCBzZWxmIH0sIHR5cGUpIHtcbiAgICBjb25zdCBncm91cCA9IHNlbGYuUlVMRVMudHlwZXNbdHlwZV07XG4gICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwICE9PSB0cnVlICYmIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSBzY2hlbWFIYXNSdWxlc0ZvclR5cGU7XG5mdW5jdGlvbiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKSB7XG4gICAgcmV0dXJuIGdyb3VwLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZUdyb3VwID0gc2hvdWxkVXNlR3JvdXA7XG5mdW5jdGlvbiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKHNjaGVtYVtydWxlLmtleXdvcmRdICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKChfYSA9IHJ1bGUuZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc29tZSgoa3dkKSA9PiBzY2hlbWFba3dkXSAhPT0gdW5kZWZpbmVkKSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gc2hvdWxkVXNlUnVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGxpY2FiaWxpdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGV4cG9ydHMuRGF0YVR5cGUgPSB2b2lkIDA7XG5jb25zdCBydWxlc18xID0gcmVxdWlyZShcIi4uL3J1bGVzXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG52YXIgRGF0YVR5cGU7XG4oZnVuY3Rpb24gKERhdGFUeXBlKSB7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJDb3JyZWN0XCJdID0gMF0gPSBcIkNvcnJlY3RcIjtcbiAgICBEYXRhVHlwZVtEYXRhVHlwZVtcIldyb25nXCJdID0gMV0gPSBcIldyb25nXCI7XG59KShEYXRhVHlwZSB8fCAoZXhwb3J0cy5EYXRhVHlwZSA9IERhdGFUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGVzKHNjaGVtYSkge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0SlNPTlR5cGVzKHNjaGVtYS50eXBlKTtcbiAgICBjb25zdCBoYXNOdWxsID0gdHlwZXMuaW5jbHVkZXMoXCJudWxsXCIpO1xuICAgIGlmIChoYXNOdWxsKSB7XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2VcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXR5cGVzLmxlbmd0aCAmJiBzY2hlbWEubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm51bGxhYmxlXCIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBcInR5cGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IHRydWUpXG4gICAgICAgICAgICB0eXBlcy5wdXNoKFwibnVsbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGdldFNjaGVtYVR5cGVzO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbmZ1bmN0aW9uIGdldEpTT05UeXBlcyh0cykge1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkuaXNBcnJheSh0cykgPyB0cyA6IHRzID8gW3RzXSA6IFtdO1xuICAgIGlmICh0eXBlcy5ldmVyeShydWxlc18xLmlzSlNPTlR5cGUpKVxuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBtdXN0IGJlIEpTT05UeXBlIG9yIEpTT05UeXBlW106IFwiICsgdHlwZXMuam9pbihcIixcIikpO1xufVxuZXhwb3J0cy5nZXRKU09OVHlwZXMgPSBnZXRKU09OVHlwZXM7XG5mdW5jdGlvbiBjb2VyY2VBbmRDaGVja0RhdGFUeXBlKGl0LCB0eXBlcykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBjb2VyY2VUbyA9IGNvZXJjZVRvVHlwZXModHlwZXMsIG9wdHMuY29lcmNlVHlwZXMpO1xuICAgIGNvbnN0IGNoZWNrVHlwZXMgPSB0eXBlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICEoY29lcmNlVG8ubGVuZ3RoID09PSAwICYmIHR5cGVzLmxlbmd0aCA9PT0gMSAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSkoaXQsIHR5cGVzWzBdKSk7XG4gICAgaWYgKGNoZWNrVHlwZXMpIHtcbiAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycywgRGF0YVR5cGUuV3JvbmcpO1xuICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29lcmNlVG8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja1R5cGVzO1xufVxuZXhwb3J0cy5jb2VyY2VBbmRDaGVja0RhdGFUeXBlID0gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZTtcbmNvbnN0IENPRVJDSUJMRSA9IG5ldyBTZXQoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImJvb2xlYW5cIiwgXCJudWxsXCJdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXModHlwZXMsIGNvZXJjZVR5cGVzKSB7XG4gICAgcmV0dXJuIGNvZXJjZVR5cGVzXG4gICAgICAgID8gdHlwZXMuZmlsdGVyKCh0KSA9PiBDT0VSQ0lCTEUuaGFzKHQpIHx8IChjb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiICYmIHQgPT09IFwiYXJyYXlcIikpXG4gICAgICAgIDogW107XG59XG5mdW5jdGlvbiBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBnZW4ubGV0KFwiZGF0YVR5cGVcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKTtcbiAgICBjb25zdCBjb2VyY2VkID0gZ2VuLmxldChcImNvZXJjZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgaWYgKG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikge1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSgke2RhdGF9KSAmJiAke2RhdGF9Lmxlbmd0aCA9PSAxYCwgKCkgPT4gZ2VuXG4gICAgICAgICAgICAuYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bMF1gKVxuICAgICAgICAgICAgLmFzc2lnbihkYXRhVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKVxuICAgICAgICAgICAgLmlmKGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpLCAoKSA9PiBnZW4uYXNzaWduKGNvZXJjZWQsIGRhdGEpKSk7XG4gICAgfVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgKTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29lcmNlVG8pIHtcbiAgICAgICAgaWYgKENPRVJDSUJMRS5oYXModCkgfHwgKHQgPT09IFwiYXJyYXlcIiAmJiBvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpKSB7XG4gICAgICAgICAgICBjb2VyY2VTcGVjaWZpY1R5cGUodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2VuLmVsc2UoKTtcbiAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgIGdlbi5lbmRJZigpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgIGdlbi5hc3NpZ24oZGF0YSwgY29lcmNlZCk7XG4gICAgICAgIGFzc2lnblBhcmVudERhdGEoaXQsIGNvZXJjZWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNvZXJjZVNwZWNpZmljVHlwZSh0KSB7XG4gICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwibnVtYmVyXCIgfHwgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCJgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCIgKyAke2RhdGF9YClcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9KWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0gJiYgISgke2RhdGF9ICUgMSkpYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJmYWxzZVwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJ0cnVlXCIgfHwgJHtkYXRhfSA9PT0gMWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBmYWxzZWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oY29lcmNlZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgfHwgJHtkYXRhVHlwZX0gPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgfHwgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFske2RhdGF9XWApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduUGFyZW50RGF0YSh7IGdlbiwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5IH0sIGV4cHIpIHtcbiAgICAvLyBUT0RPIHVzZSBnZW4ucHJvcGVydHlcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9WyR7cGFyZW50RGF0YVByb3BlcnR5fV1gLCBleHByKSk7XG59XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0ID0gRGF0YVR5cGUuQ29ycmVjdCkge1xuICAgIGNvbnN0IEVRID0gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuRVEgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLk5FUTtcbiAgICBsZXQgY29uZDtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0VRfSBudWxsYDtcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJiYgdHlwZW9mICR7ZGF0YX0gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCgwLCBjb2RlZ2VuXzEuXykgYCEoJHtkYXRhfSAlIDEpICYmICFpc05hTigke2RhdGF9KWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAke0VRfSAke2RhdGFUeXBlfWA7XG4gICAgfVxuICAgIHJldHVybiBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29uZCA6ICgwLCBjb2RlZ2VuXzEubm90KShjb25kKTtcbiAgICBmdW5jdGlvbiBudW1Db25kKF9jb25kID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5hbmQpKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ID09IFwibnVtYmVyXCJgLCBfY29uZCwgc3RyaWN0TnVtcyA/ICgwLCBjb2RlZ2VuXzEuXykgYGlzRmluaXRlKCR7ZGF0YX0pYCA6IGNvZGVnZW5fMS5uaWwpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGNoZWNrRGF0YVR5cGU7XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpIHtcbiAgICBpZiAoZGF0YVR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpO1xuICAgIH1cbiAgICBsZXQgY29uZDtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCB1dGlsXzEudG9IYXNoKShkYXRhVHlwZXMpO1xuICAgIGlmICh0eXBlcy5hcnJheSAmJiB0eXBlcy5vYmplY3QpIHtcbiAgICAgICAgY29uc3Qgbm90T2JqID0gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gIT0gXCJvYmplY3RcImA7XG4gICAgICAgIGNvbmQgPSB0eXBlcy5udWxsID8gbm90T2JqIDogKDAsIGNvZGVnZW5fMS5fKSBgISR7ZGF0YX0gfHwgJHtub3RPYmp9YDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbmQgPSBjb2RlZ2VuXzEubmlsO1xuICAgIH1cbiAgICBpZiAodHlwZXMubnVtYmVyKVxuICAgICAgICBkZWxldGUgdHlwZXMuaW50ZWdlcjtcbiAgICBmb3IgKGNvbnN0IHQgaW4gdHlwZXMpXG4gICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLmFuZCkoY29uZCwgY2hlY2tEYXRhVHlwZSh0LCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSk7XG4gICAgcmV0dXJuIGNvbmQ7XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGVzID0gY2hlY2tEYXRhVHlwZXM7XG5jb25zdCB0eXBlRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hIH0pID0+IGBtdXN0IGJlICR7c2NoZW1hfWAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWEsIHNjaGVtYVZhbHVlIH0pID0+IHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIiA/ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYX19YCA6ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYVZhbHVlfX1gLFxufTtcbmZ1bmN0aW9uIHJlcG9ydFR5cGVFcnJvcihpdCkge1xuICAgIGNvbnN0IGN4dCA9IGdldFR5cGVFcnJvckNvbnRleHQoaXQpO1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCB0eXBlRXJyb3IpO1xufVxuZXhwb3J0cy5yZXBvcnRUeXBlRXJyb3IgPSByZXBvcnRUeXBlRXJyb3I7XG5mdW5jdGlvbiBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSB9ID0gaXQ7XG4gICAgY29uc3Qgc2NoZW1hQ29kZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBzY2hlbWEsIFwidHlwZVwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwidHlwZVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYS50eXBlLFxuICAgICAgICBzY2hlbWFDb2RlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogc2NoZW1hQ29kZSxcbiAgICAgICAgcGFyZW50U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhVHlwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhpdCwgdHkpIHtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIGl0ZW1zIH0gPSBpdC5zY2hlbWE7XG4gICAgaWYgKHR5ID09PSBcIm9iamVjdFwiICYmIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgYXNzaWduRGVmYXVsdChpdCwga2V5LCBwcm9wZXJ0aWVzW2tleV0uZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHkgPT09IFwiYXJyYXlcIiAmJiBBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChzY2gsIGkpID0+IGFzc2lnbkRlZmF1bHQoaXQsIGksIHNjaC5kZWZhdWx0KSk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IGFzc2lnbkRlZmF1bHRzO1xuZnVuY3Rpb24gYXNzaWduRGVmYXVsdChpdCwgcHJvcCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNoaWxkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3ApfWA7XG4gICAgaWYgKGNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJHtjaGlsZERhdGF9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYDtcbiAgICBpZiAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiKSB7XG4gICAgICAgIGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZGl0aW9ufSB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYDtcbiAgICB9XG4gICAgLy8gYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYCArXG4gICAgLy8gKG9wdHMudXNlRGVmYXVsdHMgPT09IFwiZW1wdHlcIiA/IGAgfHwgJHtjaGlsZERhdGF9ID09PSBudWxsIHx8ICR7Y2hpbGREYXRhfSA9PT0gXCJcImAgOiBcIlwiKVxuICAgIGdlbi5pZihjb25kaXRpb24sICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9ICR7KDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKGRlZmF1bHRWYWx1ZSl9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gZXhwb3J0cy51c2VQYXR0ZXJuID0gZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBleHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuZnVuY3Rpb24gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcChjeHQsIHByb3ApIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wfWAgfSwgdHJ1ZSk7XG4gICAgICAgIGN4dC5lcnJvcigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGNoZWNrTWlzc2luZ1Byb3AoeyBnZW4sIGRhdGEsIGl0OiB7IG9wdHMgfSB9LCBwcm9wZXJ0aWVzLCBtaXNzaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BlcnRpZXMubWFwKChwcm9wKSA9PiAoMCwgY29kZWdlbl8xLmFuZCkobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgwLCBjb2RlZ2VuXzEuXykgYCR7bWlzc2luZ30gPSAke3Byb3B9YCkpKTtcbn1cbmV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGNoZWNrTWlzc2luZ1Byb3A7XG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nUHJvcChjeHQsIG1pc3NpbmcpIHtcbiAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0sIHRydWUpO1xuICAgIGN4dC5lcnJvcigpO1xufVxuZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IHJlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gaGFzUHJvcEZ1bmMoZ2VuKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgcmVmOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5YCxcbiAgICB9KTtcbn1cbmV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBoYXNQcm9wRnVuYztcbmZ1bmN0aW9uIGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BGdW5jKGdlbil9LmNhbGwoJHtkYXRhfSwgJHtwcm9wZXJ0eX0pYDtcbn1cbmV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGlzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBwcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gIT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7aXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KX1gIDogY29uZDtcbn1cbmV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBwcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ID09PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5vcikoY29uZCwgKDAsIGNvZGVnZW5fMS5ub3QpKGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkpKSA6IGNvbmQ7XG59XG5leHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBub1Byb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gc2NoZW1hTWFwID8gT2JqZWN0LmtleXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+IHAgIT09IFwiX19wcm90b19fXCIpIDogW107XG59XG5leHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBhbGxTY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gc2NoZW1hUHJvcGVydGllcyhpdCwgc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hTWFwW3BdKSk7XG59XG5leHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBzY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gY2FsbFZhbGlkYXRlQ29kZSh7IHNjaGVtYUNvZGUsIGRhdGEsIGl0OiB7IGdlbiwgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoLCBlcnJvclBhdGggfSwgaXQgfSwgZnVuYywgY29udGV4dCwgcGFzc1NjaGVtYSkge1xuICAgIGNvbnN0IGRhdGFBbmRTY2hlbWEgPSBwYXNzU2NoZW1hID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSwgJHtkYXRhfSwgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWAgOiBkYXRhO1xuICAgIGNvbnN0IHZhbEN4dCA9IFtcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBlcnJvclBhdGgpXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCBpdC5wYXJlbnREYXRhXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksIGl0LnBhcmVudERhdGFQcm9wZXJ0eV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YV0sXG4gICAgXTtcbiAgICBpZiAoaXQub3B0cy5keW5hbWljUmVmKVxuICAgICAgICB2YWxDeHQucHVzaChbbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCBuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnNdKTtcbiAgICBjb25zdCBhcmdzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhQW5kU2NoZW1hfSwgJHtnZW4ub2JqZWN0KC4uLnZhbEN4dCl9YDtcbiAgICByZXR1cm4gY29udGV4dCAhPT0gY29kZWdlbl8xLm5pbCA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30uY2FsbCgke2NvbnRleHR9LCAke2FyZ3N9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9KCR7YXJnc30pYDtcbn1cbmV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGNhbGxWYWxpZGF0ZUNvZGU7XG5jb25zdCBuZXdSZWdFeHAgPSAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYDtcbmZ1bmN0aW9uIHVzZVBhdHRlcm4oeyBnZW4sIGl0OiB7IG9wdHMgfSB9LCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgdSA9IG9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICBjb25zdCB7IHJlZ0V4cCB9ID0gb3B0cy5jb2RlO1xuICAgIGNvbnN0IHJ4ID0gcmVnRXhwKHBhdHRlcm4sIHUpO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcInBhdHRlcm5cIiwge1xuICAgICAgICBrZXk6IHJ4LnRvU3RyaW5nKCksXG4gICAgICAgIHJlZjogcngsXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwLmNvZGUgPT09IFwibmV3IFJlZ0V4cFwiID8gbmV3UmVnRXhwIDogKDAsIHV0aWxfMi51c2VGdW5jKShnZW4sIHJlZ0V4cCl9KCR7cGF0dGVybn0sICR7dX0pYCxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlUGF0dGVybiA9IHVzZVBhdHRlcm47XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQXJyID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5hc3NpZ24odmFsaWRBcnIsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiB2YWxpZEFycjtcbiAgICB9XG4gICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgcmV0dXJuIHZhbGlkO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMobm90VmFsaWQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCBub3RWYWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBcnJheSA9IHZhbGlkYXRlQXJyYXk7XG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICBjb25zdCBhbHdheXNWYWxpZCA9IHNjaGVtYS5zb21lKChzY2gpID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKTtcbiAgICBpZiAoYWx3YXlzVmFsaWQgJiYgIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICBnZW4uYmxvY2soKCkgPT4gc2NoZW1hLmZvckVhY2goKF9zY2gsIGkpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZH0gfHwgJHtzY2hWYWxpZH1gKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCBzY2hWYWxpZCk7XG4gICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXMvSXRlbXNgIG5vdCBzdXBwb3J0ZWQgKG9wdHMudW5ldmFsdWF0ZWQgIT09IHRydWUpXG4gICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIGFuZCBpdGVtcyB3ZXJlIGV2YWx1YXRlZCAoaXQucHJvcHMgPT09IHRydWUgJiYgaXQuaXRlbXMgPT09IHRydWUpXG4gICAgICAgIGlmICghbWVyZ2VkKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCkpO1xuICAgIH0pKTtcbiAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IHZhbGlkYXRlVW5pb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSBleHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi8uLi92b2NhYnVsYXJpZXMvY29kZVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIG1hY3JvS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgbWFjcm9TY2hlbWEgPSBkZWYubWFjcm8uY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCBtYWNyb1NjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKVxuICAgICAgICBpdC5zZWxmLnZhbGlkYXRlU2NoZW1hKG1hY3JvU2NoZW1hLCB0cnVlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgIHNjaGVtYTogbWFjcm9TY2hlbWEsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaGVtYVJlZixcbiAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICB9LCB2YWxpZCk7XG4gICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSBtYWNyb0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gZnVuY0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tBc3luY0tleXdvcmQoaXQsIGRlZik7XG4gICAgY29uc3QgdmFsaWRhdGUgPSAhJGRhdGEgJiYgZGVmLmNvbXBpbGUgPyBkZWYuY29tcGlsZS5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCkgOiBkZWYudmFsaWRhdGU7XG4gICAgY29uc3QgdmFsaWRhdGVSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgdmFsaWRhdGUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZUtleXdvcmQpO1xuICAgIGN4dC5vaygoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKTtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoKSB7XG4gICAgICAgIGlmIChkZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXNzaWduVmFsaWQoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVycnMgPSBkZWYuYXN5bmMgPyB2YWxpZGF0ZUFzeW5jKCkgOiB2YWxpZGF0ZVN5bmMoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gYWRkRXJycyhjeHQsIHJ1bGVFcnJzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVBc3luYygpIHtcbiAgICAgICAgY29uc3QgcnVsZUVycnMgPSBnZW4ubGV0KFwicnVsZUVycnNcIiwgbnVsbCk7XG4gICAgICAgIGdlbi50cnkoKCkgPT4gYXNzaWduVmFsaWQoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCksIChlKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfWAsICgpID0+IGdlbi5hc3NpZ24ocnVsZUVycnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0uZXJyb3JzYCksICgpID0+IGdlbi50aHJvdyhlKSkpO1xuICAgICAgICByZXR1cm4gcnVsZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3luYygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZVJlZn0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZGF0ZUVycnMsIG51bGwpO1xuICAgICAgICBhc3NpZ25WYWxpZChjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzaWduVmFsaWQoX2F3YWl0ID0gZGVmLmFzeW5jID8gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCA6IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgY29uc3QgcGFzc0N4dCA9IGl0Lm9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IG5hbWVzXzEuZGVmYXVsdC5zZWxmO1xuICAgICAgICBjb25zdCBwYXNzU2NoZW1hID0gISgoXCJjb21waWxlXCIgaW4gZGVmICYmICEkZGF0YSkgfHwgZGVmLnNjaGVtYSA9PT0gZmFsc2UpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke19hd2FpdH0keygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2YWxpZGF0ZVJlZiwgcGFzc0N4dCwgcGFzc1NjaGVtYSl9YCwgZGVmLm1vZGlmeWluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEVycnMoZXJyb3JzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSgoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKSwgZXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGZ1bmNLZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIG1vZGlmeURhdGEoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKGl0LnBhcmVudERhdGEsICgpID0+IGdlbi5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5wYXJlbnREYXRhfVske2l0LnBhcmVudERhdGFQcm9wZXJ0eX1dYCkpO1xufVxuZnVuY3Rpb24gYWRkRXJycyhjeHQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZXJyc30pYCwgKCkgPT4ge1xuICAgICAgICBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgICAgICAoMCwgZXJyb3JzXzEuZXh0ZW5kRXJyb3JzKShjeHQpO1xuICAgIH0sICgpID0+IGN4dC5lcnJvcigpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNLZXl3b3JkKHsgc2NoZW1hRW52IH0sIGRlZikge1xuICAgIGlmIChkZWYuYXN5bmMgJiYgIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgcmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleXdvcmQgXCIke2tleXdvcmR9XCIgZmFpbGVkIHRvIGNvbXBpbGVgKTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJrZXl3b3JkXCIsIHR5cGVvZiByZXN1bHQgPT0gXCJmdW5jdGlvblwiID8geyByZWY6IHJlc3VsdCB9IDogeyByZWY6IHJlc3VsdCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHJlc3VsdCkgfSk7XG59XG5mdW5jdGlvbiB2YWxpZFNjaGVtYVR5cGUoc2NoZW1hLCBzY2hlbWFUeXBlLCBhbGxvd1VuZGVmaW5lZCA9IGZhbHNlKSB7XG4gICAgLy8gVE9ETyBhZGQgdGVzdHNcbiAgICByZXR1cm4gKCFzY2hlbWFUeXBlLmxlbmd0aCB8fFxuICAgICAgICBzY2hlbWFUeXBlLnNvbWUoKHN0KSA9PiBzdCA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgOiBzdCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2NoZW1hID09IHN0IHx8IChhbGxvd1VuZGVmaW5lZCAmJiB0eXBlb2Ygc2NoZW1hID09IFwidW5kZWZpbmVkXCIpKSk7XG59XG5leHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IHZhbGlkU2NoZW1hVHlwZTtcbmZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZFVzYWdlKHsgc2NoZW1hLCBvcHRzLCBzZWxmLCBlcnJTY2hlbWFQYXRoIH0sIGRlZiwga2V5d29yZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZi5rZXl3b3JkKSA/ICFkZWYua2V5d29yZC5pbmNsdWRlcyhrZXl3b3JkKSA6IGRlZi5rZXl3b3JkICE9PSBrZXl3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVwcyA9IGRlZi5kZXBlbmRlbmNpZXM7XG4gICAgaWYgKGRlcHMgPT09IG51bGwgfHwgZGVwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwcy5zb21lKChrd2QpID0+ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBrd2QpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGRlcGVuZGVuY2llcyBvZiAke2tleXdvcmR9OiAke2RlcHMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBkZWYudmFsaWRhdGVTY2hlbWEoc2NoZW1hW2tleXdvcmRdKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYGtleXdvcmQgXCIke2tleXdvcmR9XCIgdmFsdWUgaXMgaW52YWxpZCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiOiBgICtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yc1RleHQoZGVmLnZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2cpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IHZhbGlkYXRlS2V5d29yZFVzYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5d29yZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gZ2V0U3Vic2NoZW1hKGl0LCB7IGtleXdvcmQsIHNjaGVtYVByb3AsIHNjaGVtYSwgc2NoZW1hUGF0aCwgZXJyU2NoZW1hUGF0aCwgdG9wU2NoZW1hUmVmIH0pIHtcbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImtleXdvcmRcIiBhbmQgXCJzY2hlbWFcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2ggPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHJldHVybiBzY2hlbWFQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaFtzY2hlbWFQcm9wXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfS8keygwLCB1dGlsXzEuZXNjYXBlRnJhZ21lbnQpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCBlcnJTY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgdG9wU2NoZW1hUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzY2hlbWFQYXRoXCIsIFwiZXJyU2NoZW1hUGF0aFwiIGFuZCBcInRvcFNjaGVtYVJlZlwiIGFyZSByZXF1aXJlZCB3aXRoIFwic2NoZW1hXCInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgc2NoZW1hUGF0aCxcbiAgICAgICAgICAgIHRvcFNjaGVtYVJlZixcbiAgICAgICAgICAgIGVyclNjaGVtYVBhdGgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZWl0aGVyIFwia2V5d29yZFwiIG9yIFwic2NoZW1hXCIgbXVzdCBiZSBwYXNzZWQnKTtcbn1cbmV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gZ2V0U3Vic2NoZW1hO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hRGF0YShzdWJzY2hlbWEsIGl0LCB7IGRhdGFQcm9wLCBkYXRhUHJvcFR5cGU6IGRwVHlwZSwgZGF0YSwgZGF0YVR5cGVzLCBwcm9wZXJ0eU5hbWUgfSkge1xuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJkYXRhXCIgYW5kIFwiZGF0YVByb3BcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBnZW4gfSA9IGl0O1xuICAgIGlmIChkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JQYXRoLCBkYXRhUGF0aEFyciwgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZ2VuLmxldChcImRhdGFcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5kYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApfWAsIHRydWUpO1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgc3Vic2NoZW1hLmVycm9yUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoZGF0YVByb3AsIGRwVHlwZSwgb3B0cy5qc1Byb3BlcnR5U3ludGF4KX1gO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5ID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhUHJvcH1gO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVBhdGhBcnIgPSBbLi4uZGF0YVBhdGhBcnIsIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHldO1xuICAgIH1cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZGF0YSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gZGF0YSA6IGdlbi5sZXQoXCJkYXRhXCIsIGRhdGEsIHRydWUpOyAvLyByZXBsYWNlYWJsZSBpZiB1c2VkIG9uY2U/XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzdWJzY2hlbWEucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICAvLyBUT0RPIHNvbWV0aGluZyBpcyBwb3NzaWJseSB3cm9uZyBoZXJlIHdpdGggbm90IGNoYW5naW5nIHBhcmVudERhdGFQcm9wZXJ0eSBhbmQgbm90IGFwcGVuZGluZyBkYXRhUGF0aEFyclxuICAgIH1cbiAgICBpZiAoZGF0YVR5cGVzKVxuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gZGF0YVR5cGVzO1xuICAgIGZ1bmN0aW9uIGRhdGFDb250ZXh0UHJvcHMoX25leHREYXRhKSB7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhID0gX25leHREYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IFtdO1xuICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGEgPSBpdC5kYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YU5hbWVzID0gWy4uLml0LmRhdGFOYW1lcywgX25leHREYXRhXTtcbiAgICB9XG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHRlbmRTdWJzY2hlbWFEYXRhO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hTW9kZShzdWJzY2hlbWEsIHsganRkRGlzY3JpbWluYXRvciwganRkTWV0YWRhdGEsIGNvbXBvc2l0ZVJ1bGUsIGNyZWF0ZUVycm9ycywgYWxsRXJyb3JzIH0pIHtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY29tcG9zaXRlUnVsZSA9IGNvbXBvc2l0ZVJ1bGU7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY3JlYXRlRXJyb3JzID0gY3JlYXRlRXJyb3JzO1xuICAgIGlmIChhbGxFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmFsbEVycm9ycyA9IGFsbEVycm9ycztcbiAgICBzdWJzY2hlbWEuanRkRGlzY3JpbWluYXRvciA9IGp0ZERpc2NyaW1pbmF0b3I7IC8vIG5vdCBpbmhlcml0ZWRcbiAgICBzdWJzY2hlbWEuanRkTWV0YWRhdGEgPSBqdGRNZXRhZGF0YTsgLy8gbm90IGluaGVyaXRlZFxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXh0ZW5kU3Vic2NoZW1hTW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjaGVtYS5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciB0cmF2ZXJzZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVtYSwgb3B0cywgY2IpIHtcbiAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIHYwLjMuMSBhbmQgZWFybGllci5cbiAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgY2IgPSBvcHRzLmNiIHx8IGNiO1xuICB2YXIgcHJlID0gKHR5cGVvZiBjYiA9PSAnZnVuY3Rpb24nKSA/IGNiIDogY2IucHJlIHx8IGZ1bmN0aW9uKCkge307XG4gIHZhciBwb3N0ID0gY2IucG9zdCB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwgJycsIHNjaGVtYSk7XG59O1xuXG5cbnRyYXZlcnNlLmtleXdvcmRzID0ge1xuICBhZGRpdGlvbmFsSXRlbXM6IHRydWUsXG4gIGl0ZW1zOiB0cnVlLFxuICBjb250YWluczogdHJ1ZSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gIHByb3BlcnR5TmFtZXM6IHRydWUsXG4gIG5vdDogdHJ1ZSxcbiAgaWY6IHRydWUsXG4gIHRoZW46IHRydWUsXG4gIGVsc2U6IHRydWVcbn07XG5cbnRyYXZlcnNlLmFycmF5S2V5d29yZHMgPSB7XG4gIGl0ZW1zOiB0cnVlLFxuICBhbGxPZjogdHJ1ZSxcbiAgYW55T2Y6IHRydWUsXG4gIG9uZU9mOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5wcm9wc0tleXdvcmRzID0ge1xuICAkZGVmczogdHJ1ZSxcbiAgZGVmaW5pdGlvbnM6IHRydWUsXG4gIHByb3BlcnRpZXM6IHRydWUsXG4gIHBhdHRlcm5Qcm9wZXJ0aWVzOiB0cnVlLFxuICBkZXBlbmRlbmNpZXM6IHRydWVcbn07XG5cbnRyYXZlcnNlLnNraXBLZXl3b3JkcyA9IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgZW51bTogdHJ1ZSxcbiAgY29uc3Q6IHRydWUsXG4gIHJlcXVpcmVkOiB0cnVlLFxuICBtYXhpbXVtOiB0cnVlLFxuICBtaW5pbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNYXhpbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNaW5pbXVtOiB0cnVlLFxuICBtdWx0aXBsZU9mOiB0cnVlLFxuICBtYXhMZW5ndGg6IHRydWUsXG4gIG1pbkxlbmd0aDogdHJ1ZSxcbiAgcGF0dGVybjogdHJ1ZSxcbiAgZm9ybWF0OiB0cnVlLFxuICBtYXhJdGVtczogdHJ1ZSxcbiAgbWluSXRlbXM6IHRydWUsXG4gIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICBtYXhQcm9wZXJ0aWVzOiB0cnVlLFxuICBtaW5Qcm9wZXJ0aWVzOiB0cnVlXG59O1xuXG5cbmZ1bmN0aW9uIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCkge1xuICBpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHByZShzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIHZhciBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0cmF2ZXJzZS5hcnJheUtleXdvcmRzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHNjaC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtpXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2UucHJvcHNLZXl3b3Jkcykge1xuICAgICAgICBpZiAoc2NoICYmIHR5cGVvZiBzY2ggPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNjaClcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtwcm9wXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGVzY2FwZUpzb25QdHIocHJvcCksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2Uua2V5d29yZHMgfHwgKG9wdHMuYWxsS2V5cyAmJiAhKGtleSBpbiB0cmF2ZXJzZS5za2lwS2V5d29yZHMpKSkge1xuICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2gsIGpzb25QdHIgKyAnLycgKyBrZXksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcG9zdChzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblB0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csICd+MCcpLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBleHBvcnRzLnJlc29sdmVVcmwgPSBleHBvcnRzLm5vcm1hbGl6ZUlkID0gZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBleHBvcnRzLmdldEZ1bGxQYXRoID0gZXhwb3J0cy5pbmxpbmVSZWYgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuY29uc3QgdHJhdmVyc2UgPSByZXF1aXJlKFwianNvbi1zY2hlbWEtdHJhdmVyc2VcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBrZXl3b3JkIGRlZmluaXRpb25zXG5jb25zdCBTSU1QTEVfSU5MSU5FRCA9IG5ldyBTZXQoW1xuICAgIFwidHlwZVwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1pbkxlbmd0aFwiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcIm1pbkl0ZW1zXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobGltaXQgPT09IHRydWUpXG4gICAgICAgIHJldHVybiAhaGFzUmVmKHNjaGVtYSk7XG4gICAgaWYgKCFsaW1pdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cbmV4cG9ydHMuaW5saW5lUmVmID0gaW5saW5lUmVmO1xuY29uc3QgUkVGX0tFWVdPUkRTID0gbmV3IFNldChbXG4gICAgXCIkcmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgXCIkZHluYW1pY1JlZlwiLFxuICAgIFwiJGR5bmFtaWNBbmNob3JcIixcbl0pO1xuZnVuY3Rpb24gaGFzUmVmKHNjaGVtYSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoUkVGX0tFWVdPUkRTLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpICYmIHNjaC5zb21lKGhhc1JlZikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIiAmJiBoYXNSZWYoc2NoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChTSU1QTEVfSU5MSU5FRC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYVtrZXldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKHNjaGVtYVtrZXldLCAoc2NoKSA9PiAoY291bnQgKz0gY291bnRLZXlzKHNjaCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5mdW5jdGlvbiBnZXRGdWxsUGF0aChyZXNvbHZlciwgaWQgPSBcIlwiLCBub3JtYWxpemUpIHtcbiAgICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSlcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgY29uc3QgcCA9IHJlc29sdmVyLnBhcnNlKGlkKTtcbiAgICByZXR1cm4gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKTtcbn1cbmV4cG9ydHMuZ2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSByZXNvbHZlci5zZXJpYWxpemUocCk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQuc3BsaXQoXCIjXCIpWzBdICsgXCIjXCI7XG59XG5leHBvcnRzLl9nZXRGdWxsUGF0aCA9IF9nZXRGdWxsUGF0aDtcbmNvbnN0IFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCBcIlwiKSA6IFwiXCI7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUlkID0gbm9ybWFsaXplSWQ7XG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlc29sdmVyLCBiYXNlSWQsIGlkKSB7XG4gICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5leHBvcnRzLnJlc29sdmVVcmwgPSByZXNvbHZlVXJsO1xuY29uc3QgQU5DSE9SID0gL15bYS16X11bLWEtejAtOS5fXSokL2k7XG5mdW5jdGlvbiBnZXRTY2hlbWFSZWZzKHNjaGVtYSwgYmFzZUlkKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHNjaGVtYUlkLCB1cmlSZXNvbHZlciB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IHNjaElkID0gbm9ybWFsaXplSWQoc2NoZW1hW3NjaGVtYUlkXSB8fCBiYXNlSWQpO1xuICAgIGNvbnN0IGJhc2VJZHMgPSB7IFwiXCI6IHNjaElkIH07XG4gICAgY29uc3QgcGF0aFByZWZpeCA9IGdldEZ1bGxQYXRoKHVyaVJlc29sdmVyLCBzY2hJZCwgZmFsc2UpO1xuICAgIGNvbnN0IGxvY2FsUmVmcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYVJlZnMgPSBuZXcgU2V0KCk7XG4gICAgdHJhdmVyc2Uoc2NoZW1hLCB7IGFsbEtleXM6IHRydWUgfSwgKHNjaCwganNvblB0ciwgXywgcGFyZW50SnNvblB0cikgPT4ge1xuICAgICAgICBpZiAocGFyZW50SnNvblB0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhQcmVmaXggKyBqc29uUHRyO1xuICAgICAgICBsZXQgaW5uZXJCYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgICAgICBpZiAodHlwZW9mIHNjaFtzY2hlbWFJZF0gPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGlubmVyQmFzZUlkID0gYWRkUmVmLmNhbGwodGhpcywgc2NoW3NjaGVtYUlkXSk7XG4gICAgICAgIGFkZEFuY2hvci5jYWxsKHRoaXMsIHNjaC4kYW5jaG9yKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRkeW5hbWljQW5jaG9yKTtcbiAgICAgICAgYmFzZUlkc1tqc29uUHRyXSA9IGlubmVyQmFzZUlkO1xuICAgICAgICBmdW5jdGlvbiBhZGRSZWYocmVmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5yZXNvbHZlO1xuICAgICAgICAgICAgcmVmID0gbm9ybWFsaXplSWQoaW5uZXJCYXNlSWQgPyBfcmVzb2x2ZShpbm5lckJhc2VJZCwgcmVmKSA6IHJlZik7XG4gICAgICAgICAgICBpZiAoc2NoZW1hUmVmcy5oYXMocmVmKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgICAgICAgICAgc2NoZW1hUmVmcy5hZGQocmVmKTtcbiAgICAgICAgICAgIGxldCBzY2hPclJlZiA9IHRoaXMucmVmc1tyZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHNjaE9yUmVmID0gdGhpcy5yZWZzW3NjaE9yUmVmXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBzY2hPclJlZi5zY2hlbWEsIHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYgIT09IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWZbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBsb2NhbFJlZnNbcmVmXSwgcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZWZzW3JlZl0gPSBzY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnNbcmVmXSA9IGZ1bGxQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkQW5jaG9yKGFuY2hvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhbmNob3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICghQU5DSE9SLnRlc3QoYW5jaG9yKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFuY2hvciBcIiR7YW5jaG9yfVwiYCk7XG4gICAgICAgICAgICAgICAgYWRkUmVmLmNhbGwodGhpcywgYCMke2FuY2hvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsb2NhbFJlZnM7XG4gICAgZnVuY3Rpb24gY2hlY2tBbWJpZ3Vvc1JlZihzY2gxLCBzY2gyLCByZWYpIHtcbiAgICAgICAgaWYgKHNjaDIgIT09IHVuZGVmaW5lZCAmJiAhZXF1YWwoc2NoMSwgc2NoMikpXG4gICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhbWJpZ3VvcyhyZWYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgcmVmZXJlbmNlIFwiJHtyZWZ9XCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWFgKTtcbiAgICB9XG59XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBnZXRTY2hlbWFSZWZzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREYXRhID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGJvb2xTY2hlbWFfMSA9IHJlcXVpcmUoXCIuL2Jvb2xTY2hlbWFcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZGF0YVR5cGVfMiA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgZGVmYXVsdHNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRzXCIpO1xuY29uc3Qga2V5d29yZF8xID0gcmVxdWlyZShcIi4va2V5d29yZFwiKTtcbmNvbnN0IHN1YnNjaGVtYV8xID0gcmVxdWlyZShcIi4vc3Vic2NoZW1hXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4uL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIGdlbmVyYXRlcyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBzdWJzY2hlbWFDb2RlIChiZWxvdykgaXMgdXNlZCBmb3Igc3Vic2NoZW1hc1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvZGUoaXQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICB0b3BTY2hlbWFPYmpDb2RlKGl0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiAoMCwgYm9vbFNjaGVtYV8xLnRvcEJvb2xPckVtcHR5U2NoZW1hKShpdCkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZhbGlkYXRlRnVuY3Rpb25Db2RlO1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWEsIHNjaGVtYUVudiwgb3B0cyB9LCBib2R5KSB7XG4gICAgaWYgKG9wdHMuY29kZS5lczUpIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYFwidXNlIHN0cmljdFwiOyAke2Z1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKX1gKTtcbiAgICAgICAgICAgIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cyk7XG4gICAgICAgICAgICBnZW4uY29kZShib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke2Rlc3RydWN0dXJlVmFsQ3h0KG9wdHMpfWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IGdlbi5jb2RlKGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSkuY29kZShib2R5KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7JHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofT1cIlwiLCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fSwgJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9PSR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9JHtvcHRzLmR5bmFtaWNSZWYgPyAoMCwgY29kZWdlbl8xLl8pIGAsICR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfT17fWAgOiBjb2RlZ2VuXzEubmlsfX09e31gO1xufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKSB7XG4gICAgZ2VuLmlmKG5hbWVzXzEuZGVmYXVsdC52YWxDeHQsICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX1gKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfWApO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b3BTY2hlbWFPYmpDb2RlKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMsIGdlbiB9ID0gaXQ7XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4ge1xuICAgICAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgICAgIGNoZWNrTm9EZWZhdWx0KGl0KTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LmVycm9ycywgMCk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmVzZXRFdmFsdWF0ZWQoaXQpO1xuICAgICAgICB0eXBlQW5kS2V5d29yZHMoaXQpO1xuICAgICAgICByZXR1cm5SZXN1bHRzKGl0KTtcbiAgICB9KTtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiByZXNldEV2YWx1YXRlZChpdCkge1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBob29rIHRvIGV4ZWN1dGUgaXQgaW4gdGhlIGVuZCB0byBjaGVjayB3aGV0aGVyIHByb3BzL2l0ZW1zIGFyZSBOYW1lLCBhcyBpbiBhc3NpZ25FdmFsdWF0ZWRcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpdC5ldmFsdWF0ZWQgPSBnZW4uY29uc3QoXCJldmFsdWF0ZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmV2YWx1YXRlZGApO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY1Byb3BzYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0ucHJvcHNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljSXRlbXNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5pdGVtc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbn1cbmZ1bmN0aW9uIGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSB7XG4gICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hW29wdHMuc2NoZW1hSWRdO1xuICAgIHJldHVybiBzY2hJZCAmJiAob3B0cy5jb2RlLnNvdXJjZSB8fCBvcHRzLmNvZGUucHJvY2VzcykgPyAoMCwgY29kZWdlbl8xLl8pIGAvKiMgc291cmNlVVJMPSR7c2NoSWR9ICovYCA6IGNvZGVnZW5fMS5uaWw7XG59XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgdG8gZ2VuZXJhdGUgY29kZSBmb3Igc3ViLXNjaGVtYXNcbmZ1bmN0aW9uIHN1YnNjaGVtYUNvZGUoaXQsIHZhbGlkKSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBib29sU2NoZW1hXzEuYm9vbE9yRW1wdHlTY2hlbWEpKGl0LCB2YWxpZCk7XG59XG5mdW5jdGlvbiBzY2hlbWFDeHRIYXNSdWxlcyh7IHNjaGVtYSwgc2VsZiB9KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHNlbGYuUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NjaGVtYU9iaihpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQuc2NoZW1hICE9IFwiYm9vbGVhblwiO1xufVxuZnVuY3Rpb24gc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZ2VuLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICB1cGRhdGVDb250ZXh0KGl0KTtcbiAgICBjaGVja0FzeW5jU2NoZW1hKGl0KTtcbiAgICBjb25zdCBlcnJzQ291bnQgPSBnZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCk7XG4gICAgLy8gVE9ETyB2YXJcbiAgICBnZW4udmFyKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZHMoaXQpIHtcbiAgICAoMCwgdXRpbF8xLmNoZWNrVW5rbm93blJ1bGVzKShpdCk7XG4gICAgY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpO1xufVxuZnVuY3Rpb24gdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpIHtcbiAgICBpZiAoaXQub3B0cy5qdGQpXG4gICAgICAgIHJldHVybiBzY2hlbWFLZXl3b3JkcyhpdCwgW10sIGZhbHNlLCBlcnJzQ291bnQpO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKGl0LnNjaGVtYSk7XG4gICAgY29uc3QgY2hlY2tlZFR5cGVzID0gKDAsIGRhdGFUeXBlXzEuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoaXQsIHR5cGVzKTtcbiAgICBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsICFjaGVja2VkVHlwZXMsIGVycnNDb3VudCk7XG59XG5mdW5jdGlvbiBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgb3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgJiYgKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBzZWxmLlJVTEVTKSkge1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKGAkcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tOb0RlZmF1bHQoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgb3B0cy51c2VEZWZhdWx0cyAmJiBvcHRzLnN0cmljdFNjaGVtYSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIFwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGl0KSB7XG4gICAgY29uc3Qgc2NoSWQgPSBpdC5zY2hlbWFbaXQub3B0cy5zY2hlbWFJZF07XG4gICAgaWYgKHNjaElkKVxuICAgICAgICBpdC5iYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgc2NoSWQpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY1NjaGVtYShpdCkge1xuICAgIGlmIChpdC5zY2hlbWEuJGFzeW5jICYmICFpdC5zY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiBjb21tZW50S2V5d29yZCh7IGdlbiwgc2NoZW1hRW52LCBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMgfSkge1xuICAgIGNvbnN0IG1zZyA9IHNjaGVtYS4kY29tbWVudDtcbiAgICBpZiAob3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5sb2dnZXIubG9nKCR7bXNnfSlgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9wdHMuJGNvbW1lbnQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyU2NoZW1hUGF0aH0vJGNvbW1lbnRgO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogc2NoZW1hRW52LnJvb3QgfSk7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHttc2d9LCAke3NjaGVtYVBhdGh9LCAke3Jvb3ROYW1lfS5zY2hlbWEpYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmV0dXJuUmVzdWx0cyhpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFFbnYsIHZhbGlkYXRlTmFtZSwgVmFsaWRhdGlvbkVycm9yLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICAvLyBUT0RPIGFzc2lnbiB1bmV2YWx1YXRlZFxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsICgpID0+IGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpLCAoKSA9PiBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7VmFsaWRhdGlvbkVycm9yfSgke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSlgKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBuYW1lc18xLmRlZmF1bHQudkVycm9ycyk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgYXNzaWduRXZhbHVhdGVkKGl0KTtcbiAgICAgICAgZ2VuLnJldHVybigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduRXZhbHVhdGVkKHsgZ2VuLCBldmFsdWF0ZWQsIHByb3BzLCBpdGVtcyB9KSB7XG4gICAgaWYgKHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9LnByb3BzYCwgcHJvcHMpO1xuICAgIGlmIChpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5pdGVtc2AsIGl0ZW1zKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgdHlwZUVycm9ycywgZXJyc0NvdW50KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgYWxsRXJyb3JzLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSBzZWxmO1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiAob3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgfHwgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgUlVMRVMpKSkge1xuICAgICAgICBnZW4uYmxvY2soKCkgPT4ga2V5d29yZENvZGUoaXQsIFwiJHJlZlwiLCBSVUxFUy5hbGwuJHJlZi5kZWZpbml0aW9uKSk7IC8vIFRPRE8gdHlwZWNhc3RcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9wdHMuanRkKVxuICAgICAgICBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcylcbiAgICAgICAgICAgIGdyb3VwS2V5d29yZHMoZ3JvdXApO1xuICAgICAgICBncm91cEtleXdvcmRzKFJVTEVTLnBvc3QpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGdyb3VwS2V5d29yZHMoZ3JvdXApIHtcbiAgICAgICAgaWYgKCEoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZUdyb3VwKShzY2hlbWEsIGdyb3VwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlKShncm91cC50eXBlLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpKTtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0eXBlc1swXSA9PT0gZ3JvdXAudHlwZSAmJiB0eXBlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgICAgICAoMCwgZGF0YVR5cGVfMi5yZXBvcnRUeXBlRXJyb3IpKGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBtYWtlIGl0IFwib2tcIiBjYWxsP1xuICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAke2VycnNDb3VudCB8fCAwfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBvcHRzOiB7IHVzZURlZmF1bHRzIH0sIH0gPSBpdDtcbiAgICBpZiAodXNlRGVmYXVsdHMpXG4gICAgICAgICgwLCBkZWZhdWx0c18xLmFzc2lnbkRlZmF1bHRzKShpdCwgZ3JvdXAudHlwZSk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGdyb3VwLnJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShzY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAga2V5d29yZENvZGUoaXQsIHJ1bGUua2V5d29yZCwgcnVsZS5kZWZpbml0aW9uLCBncm91cC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoaXQuc2NoZW1hRW52Lm1ldGEgfHwgIWl0Lm9wdHMuc3RyaWN0VHlwZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGlmICghaXQub3B0cy5hbGxvd1VuaW9uVHlwZXMpXG4gICAgICAgIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGNoZWNrS2V5d29yZFR5cGVzKGl0LCBpdC5kYXRhVHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKCF0eXBlcy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIWl0LmRhdGFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgaXQuZGF0YVR5cGVzID0gdHlwZXM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHlwZXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAoIWluY2x1ZGVzVHlwZShpdC5kYXRhVHlwZXMsIHQpKSB7XG4gICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgdHlwZSBcIiR7dH1cIiBub3QgYWxsb3dlZCBieSBjb250ZXh0IFwiJHtpdC5kYXRhVHlwZXMuam9pbihcIixcIil9XCJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB0eXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja011bHRpcGxlVHlwZXMoaXQsIHRzKSB7XG4gICAgaWYgKHRzLmxlbmd0aCA+IDEgJiYgISh0cy5sZW5ndGggPT09IDIgJiYgdHMuaW5jbHVkZXMoXCJudWxsXCIpKSkge1xuICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBcInVzZSBhbGxvd1VuaW9uVHlwZXMgdG8gYWxsb3cgdW5pb24gdHlwZSBrZXl3b3JkXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZFR5cGVzKGl0LCB0cykge1xuICAgIGNvbnN0IHJ1bGVzID0gaXQuc2VsZi5SVUxFUy5hbGw7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIHJ1bGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShpdC5zY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICh0eXBlLmxlbmd0aCAmJiAhdHlwZS5zb21lKCh0KSA9PiBoYXNBcHBsaWNhYmxlVHlwZSh0cywgdCkpKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYG1pc3NpbmcgdHlwZSBcIiR7dHlwZS5qb2luKFwiLFwiKX1cIiBmb3Iga2V5d29yZCBcIiR7a2V5d29yZH1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzQXBwbGljYWJsZVR5cGUoc2NoVHMsIGt3ZFQpIHtcbiAgICByZXR1cm4gc2NoVHMuaW5jbHVkZXMoa3dkVCkgfHwgKGt3ZFQgPT09IFwibnVtYmVyXCIgJiYgc2NoVHMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpKTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzVHlwZSh0cywgdCkge1xuICAgIHJldHVybiB0cy5pbmNsdWRlcyh0KSB8fCAodCA9PT0gXCJpbnRlZ2VyXCIgJiYgdHMuaW5jbHVkZXMoXCJudW1iZXJcIikpO1xufVxuZnVuY3Rpb24gbmFycm93U2NoZW1hVHlwZXMoaXQsIHdpdGhUeXBlcykge1xuICAgIGNvbnN0IHRzID0gW107XG4gICAgZm9yIChjb25zdCB0IG9mIGl0LmRhdGFUeXBlcykge1xuICAgICAgICBpZiAoaW5jbHVkZXNUeXBlKHdpdGhUeXBlcywgdCkpXG4gICAgICAgICAgICB0cy5wdXNoKHQpO1xuICAgICAgICBlbHNlIGlmICh3aXRoVHlwZXMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpICYmIHQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB0cy5wdXNoKFwiaW50ZWdlclwiKTtcbiAgICB9XG4gICAgaXQuZGF0YVR5cGVzID0gdHM7XG59XG5mdW5jdGlvbiBzdHJpY3RUeXBlc0Vycm9yKGl0LCBtc2cpIHtcbiAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgbXNnICs9IGAgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFR5cGVzKWA7XG4gICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0VHlwZXMpO1xufVxuY2xhc3MgS2V5d29yZEN4dCB7XG4gICAgY29uc3RydWN0b3IoaXQsIGRlZiwga2V5d29yZCkge1xuICAgICAgICAoMCwga2V5d29yZF8xLnZhbGlkYXRlS2V5d29yZFVzYWdlKShpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICAgICAgdGhpcy5nZW4gPSBpdC5nZW47XG4gICAgICAgIHRoaXMuYWxsRXJyb3JzID0gaXQuYWxsRXJyb3JzO1xuICAgICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmRhdGEgPSBpdC5kYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgdGhpcy4kZGF0YSA9IGRlZi4kZGF0YSAmJiBpdC5vcHRzLiRkYXRhICYmIHRoaXMuc2NoZW1hICYmIHRoaXMuc2NoZW1hLiRkYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYVZhbHVlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHRoaXMuc2NoZW1hLCBrZXl3b3JkLCB0aGlzLiRkYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlbWFUeXBlID0gZGVmLnNjaGVtYVR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50U2NoZW1hID0gaXQuc2NoZW1hO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IHt9O1xuICAgICAgICB0aGlzLml0ID0gaXQ7XG4gICAgICAgIHRoaXMuZGVmID0gZGVmO1xuICAgICAgICBpZiAodGhpcy4kZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gaXQuZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBnZXREYXRhKHRoaXMuJGRhdGEsIGl0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSB0aGlzLnNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoMCwga2V5d29yZF8xLnZhbGlkU2NoZW1hVHlwZSkodGhpcy5zY2hlbWEsIGRlZi5zY2hlbWFUeXBlLCBkZWYuYWxsb3dVbmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleXdvcmR9IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShkZWYuc2NoZW1hVHlwZSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiY29kZVwiIGluIGRlZiA/IGRlZi50cmFja0Vycm9ycyA6IGRlZi5lcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmVycnNDb3VudCA9IGl0Lmdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbFJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKGZhaWxBY3Rpb24pXG4gICAgICAgICAgICBmYWlsQWN0aW9uKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIHN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhc3MoY29uZGl0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgdW5kZWZpbmVkLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbChjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGZhbHNlKTsgLy8gdGhpcyBicmFuY2ggd2lsbCBiZSByZW1vdmVkIGJ5IGdlbi5vcHRpbWl6ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgIH1cbiAgICBmYWlsJGRhdGEoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWwoY29uZGl0aW9uKTtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFDb2RlIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLCBjb2RlZ2VuXzEub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksIGNvbmRpdGlvbil9KWApO1xuICAgIH1cbiAgICBlcnJvcihhcHBlbmQsIGVycm9yUGFyYW1zLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIGlmIChlcnJvclBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoZXJyb3JQYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICBfZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIDtcbiAgICAgICAgKGFwcGVuZCA/IGVycm9yc18xLnJlcG9ydEV4dHJhRXJyb3IgOiBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICAkZGF0YUVycm9yKCkge1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLiRkYXRhRXJyb3IgfHwgZXJyb3JzXzEua2V5d29yZCREYXRhRXJyb3IpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyc0NvdW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZCBcInRyYWNrRXJyb3JzXCIgdG8ga2V5d29yZCBkZWZpbml0aW9uJyk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXNldEVycm9yc0NvdW50KSh0aGlzLmdlbiwgdGhpcy5lcnJzQ291bnQpO1xuICAgIH1cbiAgICBvayhjb25kKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5pZihjb25kKTtcbiAgICB9XG4gICAgc2V0UGFyYW1zKG9iaiwgYXNzaWduKSB7XG4gICAgICAgIGlmIChhc3NpZ24pXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLCBvYmopO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IG9iajtcbiAgICB9XG4gICAgYmxvY2skZGF0YSh2YWxpZCwgY29kZUJsb2NrLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICB0aGlzLmdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrJGRhdGEodmFsaWQsICRkYXRhVmFsaWQpO1xuICAgICAgICAgICAgY29kZUJsb2NrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjaGVjayRkYXRhKHZhbGlkID0gY29kZWdlbl8xLm5pbCwgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmIH0gPSB0aGlzO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5vcikoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gdW5kZWZpbmVkYCwgJGRhdGFWYWxpZCkpO1xuICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoIHx8IGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgZ2VuLmVsc2VJZih0aGlzLmludmFsaWQkZGF0YSgpKTtcbiAgICAgICAgICAgIHRoaXMuJGRhdGFFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBnZW4uZWxzZSgpO1xuICAgIH1cbiAgICBpbnZhbGlkJGRhdGEoKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYsIGl0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikod3JvbmckRGF0YVR5cGUoKSwgaW52YWxpZCREYXRhU2NoZW1hKCkpO1xuICAgICAgICBmdW5jdGlvbiB3cm9uZyREYXRhVHlwZSgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghKHNjaGVtYUNvZGUgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgPyBzY2hlbWFUeXBlIDogW3NjaGVtYVR5cGVdO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGVzKShzdCwgc2NoZW1hQ29kZSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8yLkRhdGFUeXBlLldyb25nKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW52YWxpZCREYXRhU2NoZW1hKCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlU2NoZW1hUmVmID0gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZSRkYXRhXCIsIHsgcmVmOiBkZWYudmFsaWRhdGVTY2hlbWEgfSk7IC8vIFRPRE8gdmFsdWUuY29kZSBmb3Igc3RhbmRhbG9uZVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZGF0ZVNjaGVtYVJlZn0oJHtzY2hlbWFDb2RlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NoZW1hKGFwcGwsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9ICgwLCBzdWJzY2hlbWFfMS5nZXRTdWJzY2hlbWEpKHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hRGF0YSkoc3Vic2NoZW1hLCB0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYU1vZGUpKHN1YnNjaGVtYSwgYXBwbCk7XG4gICAgICAgIGNvbnN0IG5leHRDb250ZXh0ID0geyAuLi50aGlzLml0LCAuLi5zdWJzY2hlbWEsIGl0ZW1zOiB1bmRlZmluZWQsIHByb3BzOiB1bmRlZmluZWQgfTtcbiAgICAgICAgc3Vic2NoZW1hQ29kZShuZXh0Q29udGV4dCwgdmFsaWQpO1xuICAgICAgICByZXR1cm4gbmV4dENvbnRleHQ7XG4gICAgfVxuICAgIG1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgdG9OYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgc2NoZW1hQ3h0LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoZW1hQ3h0LnByb3BzLCBpdC5wcm9wcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUgJiYgc2NoZW1hQ3h0Lml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoZW1hQ3h0Lml0ZW1zLCBpdC5pdGVtcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZVZhbGlkRXZhbHVhdGVkKHNjaGVtYUN4dCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiAoaXQucHJvcHMgIT09IHRydWUgfHwgaXQuaXRlbXMgIT09IHRydWUpKSB7XG4gICAgICAgICAgICBnZW4uaWYodmFsaWQsICgpID0+IHRoaXMubWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCBjb2RlZ2VuXzEuTmFtZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLktleXdvcmRDeHQgPSBLZXl3b3JkQ3h0O1xuZnVuY3Rpb24ga2V5d29yZENvZGUoaXQsIGtleXdvcmQsIGRlZiwgcnVsZVR5cGUpIHtcbiAgICBjb25zdCBjeHQgPSBuZXcgS2V5d29yZEN4dChpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICBpZiAoXCJjb2RlXCIgaW4gZGVmKSB7XG4gICAgICAgIGRlZi5jb2RlKGN4dCwgcnVsZVR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjeHQuJGRhdGEgJiYgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKFwibWFjcm9cIiBpbiBkZWYpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5tYWNyb0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRlZi5jb21waWxlIHx8IGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbn1cbmNvbnN0IEpTT05fUE9JTlRFUiA9IC9eXFwvKD86W15+XXx+MHx+MSkqJC87XG5jb25zdCBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIHsgZGF0YUxldmVsLCBkYXRhTmFtZXMsIGRhdGFQYXRoQXJyIH0pIHtcbiAgICBsZXQganNvblBvaW50ZXI7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKCRkYXRhID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIGlmICgkZGF0YVswXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgaWYgKCFKU09OX1BPSU5URVIudGVzdCgkZGF0YSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgICAgICBkYXRhID0gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFJFTEFUSVZFX0pTT05fUE9JTlRFUi5leGVjKCRkYXRhKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAgY29uc3QgdXAgPSArbWF0Y2hlc1sxXTtcbiAgICAgICAganNvblBvaW50ZXIgPSBtYXRjaGVzWzJdO1xuICAgICAgICBpZiAoanNvblBvaW50ZXIgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAodXAgPj0gZGF0YUxldmVsKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcInByb3BlcnR5L2luZGV4XCIsIHVwKSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVBhdGhBcnJbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCA+IGRhdGFMZXZlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcImRhdGFcIiwgdXApKTtcbiAgICAgICAgZGF0YSA9IGRhdGFOYW1lc1tkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIGlmICghanNvblBvaW50ZXIpXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgbGV0IGV4cHIgPSBkYXRhO1xuICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgZGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKCgwLCB1dGlsXzEudW5lc2NhcGVKc29uUG9pbnRlcikoc2VnbWVudCkpfWA7XG4gICAgICAgICAgICBleHByID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtleHByfSAmJiAke2RhdGF9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbiAgICBmdW5jdGlvbiBlcnJvck1zZyhwb2ludGVyVHlwZSwgdXApIHtcbiAgICAgICAgcmV0dXJuIGBDYW5ub3QgYWNjZXNzICR7cG9pbnRlclR5cGV9ICR7dXB9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke2RhdGFMZXZlbH1gO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RGF0YSA9IGdldERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgICAgICBzdXBlcihcInZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5hanYgPSB0aGlzLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFZhbGlkYXRpb25FcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRpb25fZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jbGFzcyBNaXNzaW5nUmVmRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocmVzb2x2ZXIsIGJhc2VJZCwgcmVmLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnIHx8IGBjYW4ndCByZXNvbHZlIHJlZmVyZW5jZSAke3JlZn0gZnJvbSBpZCAke2Jhc2VJZH1gKTtcbiAgICAgICAgdGhpcy5taXNzaW5nUmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShyZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgICAgICB0aGlzLm1pc3NpbmdTY2hlbWEgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKSgoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKShyZXNvbHZlciwgdGhpcy5taXNzaW5nUmVmKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWlzc2luZ1JlZkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmX2Vycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSBleHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGV4cG9ydHMucmVzb2x2ZVJlZiA9IGV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGV4cG9ydHMuU2NoZW1hRW52ID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVwiKTtcbmNsYXNzIFNjaGVtYUVudiB7XG4gICAgY29uc3RydWN0b3IoZW52KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZHluYW1pY0FuY2hvcnMgPSB7fTtcbiAgICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYuc2NoZW1hID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBzY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hSWQgPSBlbnYuc2NoZW1hSWQ7XG4gICAgICAgIHRoaXMucm9vdCA9IGVudi5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuYmFzZUlkID0gKF9hID0gZW52LmJhc2VJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hW2Vudi5zY2hlbWFJZCB8fCBcIiRpZFwiXSk7XG4gICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IGVudi5zY2hlbWFQYXRoO1xuICAgICAgICB0aGlzLmxvY2FsUmVmcyA9IGVudi5sb2NhbFJlZnM7XG4gICAgICAgIHRoaXMubWV0YSA9IGVudi5tZXRhO1xuICAgICAgICB0aGlzLiRhc3luYyA9IHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYS4kYXN5bmM7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2NoZW1hRW52ID0gU2NoZW1hRW52O1xuLy8gbGV0IGNvZGVTaXplID0gMFxuLy8gbGV0IG5vZGVDb3VudCA9IDBcbi8vIENvbXBpbGVzIHNjaGVtYSBpbiBTY2hlbWFFbnZcbmZ1bmN0aW9uIGNvbXBpbGVTY2hlbWEoc2NoKSB7XG4gICAgLy8gVE9ETyByZWZhY3RvciAtIHJlbW92ZSBjb21waWxhdGlvbnNcbiAgICBjb25zdCBfc2NoID0gZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICBpZiAoX3NjaClcbiAgICAgICAgcmV0dXJuIF9zY2g7XG4gICAgY29uc3Qgcm9vdElkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBzY2gucm9vdC5iYXNlSWQpOyAvLyBUT0RPIGlmIGdldEZ1bGxQYXRoIHJlbW92ZWQgMSB0ZXN0cyBmYWlsc1xuICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgY29uc3QgeyBvd25Qcm9wZXJ0aWVzIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3QgZ2VuID0gbmV3IGNvZGVnZW5fMS5Db2RlR2VuKHRoaXMuc2NvcGUsIHsgZXM1LCBsaW5lcywgb3duUHJvcGVydGllcyB9KTtcbiAgICBsZXQgX1ZhbGlkYXRpb25FcnJvcjtcbiAgICBpZiAoc2NoLiRhc3luYykge1xuICAgICAgICBfVmFsaWRhdGlvbkVycm9yID0gZ2VuLnNjb3BlVmFsdWUoXCJFcnJvclwiLCB7XG4gICAgICAgICAgICByZWY6IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0LFxuICAgICAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKS5kZWZhdWx0YCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IGdlbi5zY29wZU5hbWUoXCJ2YWxpZGF0ZVwiKTtcbiAgICBzY2gudmFsaWRhdGVOYW1lID0gdmFsaWRhdGVOYW1lO1xuICAgIGNvbnN0IHNjaGVtYUN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBhbGxFcnJvcnM6IHRoaXMub3B0cy5hbGxFcnJvcnMsXG4gICAgICAgIGRhdGE6IG5hbWVzXzEuZGVmYXVsdC5kYXRhLFxuICAgICAgICBwYXJlbnREYXRhOiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSxcbiAgICAgICAgcGFyZW50RGF0YVByb3BlcnR5OiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LFxuICAgICAgICBkYXRhTmFtZXM6IFtuYW1lc18xLmRlZmF1bHQuZGF0YV0sXG4gICAgICAgIGRhdGFQYXRoQXJyOiBbY29kZWdlbl8xLm5pbF0sIC8vIFRPRE8gY2FuIGl0cyBsZW5ndGggYmUgdXNlZCBhcyBkYXRhTGV2ZWwgaWYgbmlsIGlzIHJlbW92ZWQ/XG4gICAgICAgIGRhdGFMZXZlbDogMCxcbiAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgZGVmaW5lZFByb3BlcnRpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCB0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWVcbiAgICAgICAgICAgID8geyByZWY6IHNjaC5zY2hlbWEsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2guc2NoZW1hKSB9XG4gICAgICAgICAgICA6IHsgcmVmOiBzY2guc2NoZW1hIH0pLFxuICAgICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjogX1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgc2NoZW1hOiBzY2guc2NoZW1hLFxuICAgICAgICBzY2hlbWFFbnY6IHNjaCxcbiAgICAgICAgcm9vdElkLFxuICAgICAgICBiYXNlSWQ6IHNjaC5iYXNlSWQgfHwgcm9vdElkLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBzY2guc2NoZW1hUGF0aCB8fCAodGhpcy5vcHRzLmp0ZCA/IFwiXCIgOiBcIiNcIiksXG4gICAgICAgIGVycm9yUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgXCJcImAsXG4gICAgICAgIG9wdHM6IHRoaXMub3B0cyxcbiAgICAgICAgc2VsZjogdGhpcyxcbiAgICB9O1xuICAgIGxldCBzb3VyY2VDb2RlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5hZGQoc2NoKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlXzEudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHNjaGVtYUN4dCk7XG4gICAgICAgIGdlbi5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7XG4gICAgICAgIC8vIGdlbi5vcHRpbWl6ZSgxKVxuICAgICAgICBjb25zdCB2YWxpZGF0ZUNvZGUgPSBnZW4udG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlQ29kZSA9IGAke2dlbi5zY29wZVJlZnMobmFtZXNfMS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHt2YWxpZGF0ZUNvZGV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coKGNvZGVTaXplICs9IHNvdXJjZUNvZGUubGVuZ3RoKSwgKG5vZGVDb3VudCArPSBnZW4ubm9kZUNvdW50KSlcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnByb2Nlc3MpXG4gICAgICAgICAgICBzb3VyY2VDb2RlID0gdGhpcy5vcHRzLmNvZGUucHJvY2Vzcyhzb3VyY2VDb2RlLCBzY2gpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUpXG4gICAgICAgIGNvbnN0IG1ha2VWYWxpZGF0ZSA9IG5ldyBGdW5jdGlvbihgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn1gLCBgJHtuYW1lc18xLmRlZmF1bHQuc2NvcGV9YCwgc291cmNlQ29kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKHRoaXMsIHRoaXMuc2NvcGUuZ2V0KCkpO1xuICAgICAgICB0aGlzLnNjb3BlLnZhbHVlKHZhbGlkYXRlTmFtZSwgeyByZWY6IHZhbGlkYXRlIH0pO1xuICAgICAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWEgPSBzY2guc2NoZW1hO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWFFbnYgPSBzY2g7XG4gICAgICAgIGlmIChzY2guJGFzeW5jKVxuICAgICAgICAgICAgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlID0geyB2YWxpZGF0ZU5hbWUsIHZhbGlkYXRlQ29kZSwgc2NvcGVWYWx1ZXM6IGdlbi5fdmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy51bmV2YWx1YXRlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgaXRlbXMgfSA9IHNjaGVtYUN4dDtcbiAgICAgICAgICAgIHZhbGlkYXRlLmV2YWx1YXRlZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IHByb3BzLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogaXRlbXMsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNJdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodmFsaWRhdGUuc291cmNlKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZS5ldmFsdWF0ZWQgPSAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkodmFsaWRhdGUuZXZhbHVhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzY2gudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZTtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZU5hbWU7XG4gICAgICAgIGlmIChzb3VyY2VDb2RlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOlwiLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlLCB0aGlzLm9wdHMpXG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKHNjaCk7XG4gICAgfVxufVxuZXhwb3J0cy5jb21waWxlU2NoZW1hID0gY29tcGlsZVNjaGVtYTtcbmZ1bmN0aW9uIHJlc29sdmVSZWYocm9vdCwgYmFzZUlkLCByZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICBjb25zdCBzY2hPckZ1bmMgPSByb290LnJlZnNbcmVmXTtcbiAgICBpZiAoc2NoT3JGdW5jKVxuICAgICAgICByZXR1cm4gc2NoT3JGdW5jO1xuICAgIGxldCBfc2NoID0gcmVzb2x2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSAoX2EgPSByb290LmxvY2FsUmVmcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3JlZl07IC8vIFRPRE8gbWF5YmUgbG9jYWxSZWZzIHNob3VsZCBob2xkIFNjaGVtYUVudlxuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmIChzY2hlbWEpXG4gICAgICAgICAgICBfc2NoID0gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiAocm9vdC5yZWZzW3JlZl0gPSBpbmxpbmVPckNvbXBpbGUuY2FsbCh0aGlzLCBfc2NoKSk7XG59XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZnVuY3Rpb24gaW5saW5lT3JDb21waWxlKHNjaCkge1xuICAgIGlmICgoMCwgcmVzb2x2ZV8xLmlubGluZVJlZikoc2NoLnNjaGVtYSwgdGhpcy5vcHRzLmlubGluZVJlZnMpKVxuICAgICAgICByZXR1cm4gc2NoLnNjaGVtYTtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlID8gc2NoIDogY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG59XG4vLyBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG5mdW5jdGlvbiBnZXRDb21waWxpbmdTY2hlbWEoc2NoRW52KSB7XG4gICAgZm9yIChjb25zdCBzY2ggb2YgdGhpcy5fY29tcGlsYXRpb25zKSB7XG4gICAgICAgIGlmIChzYW1lU2NoZW1hRW52KHNjaCwgc2NoRW52KSlcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBnZXRDb21waWxpbmdTY2hlbWE7XG5mdW5jdGlvbiBzYW1lU2NoZW1hRW52KHMxLCBzMikge1xuICAgIHJldHVybiBzMS5zY2hlbWEgPT09IHMyLnNjaGVtYSAmJiBzMS5yb290ID09PSBzMi5yb290ICYmIHMxLmJhc2VJZCA9PT0gczIuYmFzZUlkO1xufVxuLy8gcmVzb2x2ZSBhbmQgY29tcGlsZSB0aGUgcmVmZXJlbmNlcyAoJHJlZilcbi8vIFRPRE8gcmV0dXJucyBBbnlTY2hlbWFPYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbmZ1bmN0aW9uIHJlc29sdmUocm9vdCwgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgbGV0IHNjaDtcbiAgICB3aGlsZSAodHlwZW9mIChzY2ggPSB0aGlzLnJlZnNbcmVmXSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmVmID0gc2NoO1xuICAgIHJldHVybiBzY2ggfHwgdGhpcy5zY2hlbWFzW3JlZl0gfHwgcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG59XG4vLyBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCAvLyByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZzIFRPRE8gYmVsb3cgU2NoZW1hRW52IGlzIGFzc2lnbmVkIHRvIGl0XG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGNvbnN0IHAgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucGFyc2UocmVmKTtcbiAgICBjb25zdCByZWZQYXRoID0gKDAsIHJlc29sdmVfMS5fZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcCk7XG4gICAgbGV0IGJhc2VJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcm9vdC5iYXNlSWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gVE9ETyBgT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDBgIHNob3VsZCBub3QgYmUgbmVlZGVkIC0gYnV0IHJlbW92aW5nIGJyZWFrcyAyIHRlc3RzXG4gICAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwICYmIHJlZlBhdGggPT09IGJhc2VJZCkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCByb290KTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWZQYXRoKTtcbiAgICBjb25zdCBzY2hPclJlZiA9IHRoaXMucmVmc1tpZF0gfHwgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHNjaE9yUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHNjaE9yUmVmID09PSBudWxsIHx8IHNjaE9yUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hPclJlZi5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFzY2hPclJlZi52YWxpZGF0ZSlcbiAgICAgICAgY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaE9yUmVmKTtcbiAgICBpZiAoaWQgPT09ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZikpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHNjaE9yUmVmO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGNvbnN0IHNjaElkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgaWYgKHNjaElkKVxuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoT3JSZWYpO1xufVxuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gcmVzb2x2ZVNjaGVtYTtcbmNvbnN0IFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gbmV3IFNldChbXG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuXSk7XG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIHsgYmFzZUlkLCBzY2hlbWEsIHJvb3QgfSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKChfYSA9IHBhcnNlZFJlZi5mcmFnbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSAhPT0gXCIvXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFyc2VkUmVmLmZyYWdtZW50LnNsaWNlKDEpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnRTY2hlbWEgPSBzY2hlbWFbKDAsIHV0aWxfMS51bmVzY2FwZUZyYWdtZW50KShwYXJ0KV07XG4gICAgICAgIGlmIChwYXJ0U2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNjaGVtYSA9IHBhcnRTY2hlbWE7XG4gICAgICAgIC8vIFRPRE8gUFJFVkVOVF9TQ09QRV9DSEFOR0UgY291bGQgYmUgZGVmaW5lZCBpbiBrZXl3b3JkIGRlZj9cbiAgICAgICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYVt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFLmhhcyhwYXJ0KSAmJiBzY2hJZCkge1xuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBlbnY7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIgJiYgc2NoZW1hLiRyZWYgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgdGhpcy5SVUxFUykpIHtcbiAgICAgICAgY29uc3QgJHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgZW52ID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgIH1cbiAgICAvLyBldmVuIHRob3VnaCByZXNvbHV0aW9uIGZhaWxlZCB3ZSBuZWVkIHRvIHJldHVybiBTY2hlbWFFbnYgdG8gdGhyb3cgZXhjZXB0aW9uXG4gICAgLy8gc28gdGhhdCBjb21waWxlQXN5bmMgbG9hZHMgbWlzc2luZyBzY2hlbWEuXG4gICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgIGVudiA9IGVudiB8fCBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIGlmIChlbnYuc2NoZW1hICE9PSBlbnYucm9vdC5zY2hlbWEpXG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc1VVSUQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXltcXGRhLWZdezh9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezEyfSQvaXUpXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc0lQdjQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGR7Mn18WzEtOV1cXGR8XFxkKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkezJ9fFsxLTldXFxkfFxcZCkkL3UpXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpbnB1dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkIChpbnB1dCkge1xuICBsZXQgYWNjID0gJydcbiAgbGV0IGNvZGUgPSAwXG4gIGxldCBpID0gMFxuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvZGUgPSBpbnB1dFtpXS5jaGFyQ29kZUF0KDApXG4gICAgaWYgKGNvZGUgPT09IDQ4KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoISgoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB8fCAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwKSB8fCAoY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMikpKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgYWNjICs9IGlucHV0W2ldXG4gICAgYnJlYWtcbiAgfVxuXG4gIGZvciAoaSArPSAxOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb2RlID0gaW5wdXRbaV0uY2hhckNvZGVBdCgwKVxuICAgIGlmICghKChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHx8IChjb2RlID49IDY1ICYmIGNvZGUgPD0gNzApIHx8IChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTAyKSkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBhY2MgKz0gaW5wdXRbaV1cbiAgfVxuICByZXR1cm4gYWNjXG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gR2V0SVBWNlJlc3VsdFxuICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvciAtIEluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgSVB2NiBhZGRyZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgcGFyc2VkIElQdjYgYWRkcmVzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbem9uZV0gLSBUaGUgem9uZSBpZGVudGlmaWVyLCBpZiBwcmVzZW50LlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3Qgbm9uU2ltcGxlRG9tYWluID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoL1teIVwiJCYnKCkqKyxcXC0uOz1fYGEtent9fl0vdSlcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGJ1ZmZlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVJc1pvbmUgKGJ1ZmZlcikge1xuICBidWZmZXIubGVuZ3RoID0gMFxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYnVmZmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFkZHJlc3NcbiAqIEBwYXJhbSB7R2V0SVBWNlJlc3VsdH0gb3V0cHV0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uc3VtZUhleHRldHMgKGJ1ZmZlciwgYWRkcmVzcywgb3V0cHV0KSB7XG4gIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgY29uc3QgaGV4ID0gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkKGJ1ZmZlcilcbiAgICBpZiAoaGV4ICE9PSAnJykge1xuICAgICAgYWRkcmVzcy5wdXNoKGhleClcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LmVycm9yID0gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGJ1ZmZlci5sZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEByZXR1cm5zIHtHZXRJUFY2UmVzdWx0fVxuICovXG5mdW5jdGlvbiBnZXRJUFY2IChpbnB1dCkge1xuICBsZXQgdG9rZW5Db3VudCA9IDBcbiAgY29uc3Qgb3V0cHV0ID0geyBlcnJvcjogZmFsc2UsIGFkZHJlc3M6ICcnLCB6b25lOiAnJyB9XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYWRkcmVzcyA9IFtdXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYnVmZmVyID0gW11cbiAgbGV0IGVuZGlwdjZFbmNvdW50ZXJlZCA9IGZhbHNlXG4gIGxldCBlbmRJcHY2ID0gZmFsc2VcblxuICBsZXQgY29uc3VtZSA9IGNvbnN1bWVIZXh0ZXRzXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnNvciA9IGlucHV0W2ldXG4gICAgaWYgKGN1cnNvciA9PT0gJ1snIHx8IGN1cnNvciA9PT0gJ10nKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAoY3Vyc29yID09PSAnOicpIHtcbiAgICAgIGlmIChlbmRpcHY2RW5jb3VudGVyZWQgPT09IHRydWUpIHtcbiAgICAgICAgZW5kSXB2NiA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICghY29uc3VtZShidWZmZXIsIGFkZHJlc3MsIG91dHB1dCkpIHsgYnJlYWsgfVxuICAgICAgaWYgKCsrdG9rZW5Db3VudCA+IDcpIHtcbiAgICAgICAgLy8gbm90IHZhbGlkXG4gICAgICAgIG91dHB1dC5lcnJvciA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChpID4gMCAmJiBpbnB1dFtpIC0gMV0gPT09ICc6Jykge1xuICAgICAgICBlbmRpcHY2RW5jb3VudGVyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBhZGRyZXNzLnB1c2goJzonKVxuICAgICAgY29udGludWVcbiAgICB9IGVsc2UgaWYgKGN1cnNvciA9PT0gJyUnKSB7XG4gICAgICBpZiAoIWNvbnN1bWUoYnVmZmVyLCBhZGRyZXNzLCBvdXRwdXQpKSB7IGJyZWFrIH1cbiAgICAgIC8vIHN3aXRjaCB0byB6b25lIGRldGVjdGlvblxuICAgICAgY29uc3VtZSA9IGNvbnN1bWVJc1pvbmVcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLnB1c2goY3Vyc29yKVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gY29uc3VtZUlzWm9uZSkge1xuICAgICAgb3V0cHV0LnpvbmUgPSBidWZmZXIuam9pbignJylcbiAgICB9IGVsc2UgaWYgKGVuZElwdjYpIHtcbiAgICAgIGFkZHJlc3MucHVzaChidWZmZXIuam9pbignJykpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaChzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWQoYnVmZmVyKSlcbiAgICB9XG4gIH1cbiAgb3V0cHV0LmFkZHJlc3MgPSBhZGRyZXNzLmpvaW4oJycpXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBOb3JtYWxpemVJUHY2UmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdCAtIFRoZSBub3JtYWxpemVkIGhvc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2VzY2FwZWRIb3N0XSAtIFRoZSBlc2NhcGVkIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzSVBWNiAtIEluZGljYXRlcyBpZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdFxuICogQHJldHVybnMge05vcm1hbGl6ZUlQdjZSZXN1bHR9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlQdjYgKGhvc3QpIHtcbiAgaWYgKGZpbmRUb2tlbihob3N0LCAnOicpIDwgMikgeyByZXR1cm4geyBob3N0LCBpc0lQVjY6IGZhbHNlIH0gfVxuICBjb25zdCBpcHY2ID0gZ2V0SVBWNihob3N0KVxuXG4gIGlmICghaXB2Ni5lcnJvcikge1xuICAgIGxldCBuZXdIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgbGV0IGVzY2FwZWRIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgaWYgKGlwdjYuem9uZSkge1xuICAgICAgbmV3SG9zdCArPSAnJScgKyBpcHY2LnpvbmVcbiAgICAgIGVzY2FwZWRIb3N0ICs9ICclMjUnICsgaXB2Ni56b25lXG4gICAgfVxuICAgIHJldHVybiB7IGhvc3Q6IG5ld0hvc3QsIGlzSVBWNjogdHJ1ZSwgZXNjYXBlZEhvc3QgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGhvc3QsIGlzSVBWNjogZmFsc2UgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBmaW5kVG9rZW4gKHN0ciwgdG9rZW4pIHtcbiAgbGV0IGluZCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyW2ldID09PSB0b2tlbikgaW5kKytcbiAgfVxuICByZXR1cm4gaW5kXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuNFxuICovXG5mdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyAocGF0aCkge1xuICBsZXQgaW5wdXQgPSBwYXRoXG4gIGNvbnN0IG91dHB1dCA9IFtdXG4gIGxldCBuZXh0U2xhc2ggPSAtMVxuICBsZXQgbGVuID0gMFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuICB3aGlsZSAobGVuID0gaW5wdXQubGVuZ3RoKSB7XG4gICAgaWYgKGxlbiA9PT0gMSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnLicpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICcvJykge1xuICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaChpbnB1dClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gMikge1xuICAgICAgaWYgKGlucHV0WzBdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDIpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFswXSA9PT0gJy8nKSB7XG4gICAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nIHx8IGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGVuID09PSAzKSB7XG4gICAgICBpZiAoaW5wdXQgPT09ICcvLi4nKSB7XG4gICAgICAgIGlmIChvdXRwdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgb3V0cHV0LnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0LnB1c2goJy8nKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5wdXRbMF0gPT09ICcuJykge1xuICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzJdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFsxXSA9PT0gJy8nKSB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMilcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlucHV0WzBdID09PSAnLycpIHtcbiAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nKSB7XG4gICAgICAgIGlmIChpbnB1dFsyXSA9PT0gJy8nKSB7XG4gICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgyKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRbMl0gPT09ICcuJykge1xuICAgICAgICAgIGlmIChpbnB1dFszXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICBvdXRwdXQucG9wKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUnVsZSAyRTogTW92ZSBub3JtYWwgcGF0aCBzZWdtZW50IHRvIG91dHB1dFxuICAgIGlmICgobmV4dFNsYXNoID0gaW5wdXQuaW5kZXhPZignLycsIDEpKSA9PT0gLTEpIHtcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0KVxuICAgICAgYnJlYWtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goaW5wdXQuc2xpY2UoMCwgbmV4dFNsYXNoKSlcbiAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UobmV4dFNsYXNoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHBhcmFtIHtib29sZWFufSBlc2NcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyAoY29tcG9uZW50LCBlc2MpIHtcbiAgY29uc3QgZnVuYyA9IGVzYyAhPT0gdHJ1ZSA/IGVzY2FwZSA6IHVuZXNjYXBlXG4gIGlmIChjb21wb25lbnQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQuc2NoZW1lID0gZnVuYyhjb21wb25lbnQuc2NoZW1lKVxuICB9XG4gIGlmIChjb21wb25lbnQudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC51c2VyaW5mbyA9IGZ1bmMoY29tcG9uZW50LnVzZXJpbmZvKVxuICB9XG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50Lmhvc3QgPSBmdW5jKGNvbXBvbmVudC5ob3N0KVxuICB9XG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LnBhdGggPSBmdW5jKGNvbXBvbmVudC5wYXRoKVxuICB9XG4gIGlmIChjb21wb25lbnQucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5xdWVyeSA9IGZ1bmMoY29tcG9uZW50LnF1ZXJ5KVxuICB9XG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5mcmFnbWVudCA9IGZ1bmMoY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHJlY29tcG9zZUF1dGhvcml0eSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHVyaVRva2VucyA9IFtdXG5cbiAgaWYgKGNvbXBvbmVudC51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50LnVzZXJpbmZvKVxuICAgIHVyaVRva2Vucy5wdXNoKCdAJylcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGhvc3QgPSB1bmVzY2FwZShjb21wb25lbnQuaG9zdClcbiAgICBpZiAoIWlzSVB2NChob3N0KSkge1xuICAgICAgY29uc3QgaXBWNnJlcyA9IG5vcm1hbGl6ZUlQdjYoaG9zdClcbiAgICAgIGlmIChpcFY2cmVzLmlzSVBWNiA9PT0gdHJ1ZSkge1xuICAgICAgICBob3N0ID0gYFske2lwVjZyZXMuZXNjYXBlZEhvc3R9XWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhvc3QgPSBjb21wb25lbnQuaG9zdFxuICAgICAgfVxuICAgIH1cbiAgICB1cmlUb2tlbnMucHVzaChob3N0KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnQucG9ydCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGNvbXBvbmVudC5wb3J0ID09PSAnc3RyaW5nJykge1xuICAgIHVyaVRva2Vucy5wdXNoKCc6JylcbiAgICB1cmlUb2tlbnMucHVzaChTdHJpbmcoY29tcG9uZW50LnBvcnQpKVxuICB9XG5cbiAgcmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbignJykgOiB1bmRlZmluZWRcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBub25TaW1wbGVEb21haW4sXG4gIHJlY29tcG9zZUF1dGhvcml0eSxcbiAgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsXG4gIHJlbW92ZURvdFNlZ21lbnRzLFxuICBpc0lQdjQsXG4gIGlzVVVJRCxcbiAgbm9ybWFsaXplSVB2NixcbiAgc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVVJRCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCBVUk5fUkVHID0gLyhbXFxkYS16XVtcXGRcXC1hLXpdezAsMzF9KTooKD86W1xcdyEkJygpKissXFwtLjo7PUBdfCVbXFxkYS1mXXsyfSkrKS9pdVxuXG5jb25zdCBzdXBwb3J0ZWRTY2hlbWVOYW1lcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2h0dHAnLCAnaHR0cHMnLCAnd3MnLFxuICAnd3NzJywgJ3VybicsICd1cm46dXVpZCddKVxuXG4vKiogQHR5cGVkZWYge3N1cHBvcnRlZFNjaGVtZU5hbWVzW251bWJlcl19IFNjaGVtZU5hbWUgKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge25hbWUgaXMgU2NoZW1lTmFtZX1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFNjaGVtZU5hbWUgKG5hbWUpIHtcbiAgcmV0dXJuIHN1cHBvcnRlZFNjaGVtZU5hbWVzLmluZGV4T2YoLyoqIEB0eXBlIHsqfSAqLyAobmFtZSkpICE9PSAtMVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayBTY2hlbWVGblxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSBjb21wb25lbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2NoZW1lSGFuZGxlclxuICogQHByb3BlcnR5IHtTY2hlbWVOYW1lfSBzY2hlbWUgLSBUaGUgc2NoZW1lIG5hbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkb21haW5Ib3N0XSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHN1cHBvcnRzIGRvbWFpbiBob3N0cy5cbiAqIEBwcm9wZXJ0eSB7U2NoZW1lRm59IHBhcnNlIC0gRnVuY3Rpb24gdG8gcGFyc2UgdGhlIFVSSSBjb21wb25lbnQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtTY2hlbWVGbn0gc2VyaWFsaXplIC0gRnVuY3Rpb24gdG8gc2VyaWFsaXplIHRoZSBVUkkgY29tcG9uZW50IGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBOb3JtYWxpemVdIC0gSW5kaWNhdGVzIGlmIG5vcm1hbGl6YXRpb24gc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYWJzb2x1dGVQYXRoXSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHVzZXMgYWJzb2x1dGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmljb2RlU3VwcG9ydF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSBzdXBwb3J0cyBVbmljb2RlLlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSB3c0NvbXBvbmVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHdzSXNTZWN1cmUgKHdzQ29tcG9uZW50KSB7XG4gIGlmICh3c0NvbXBvbmVudC5zZWN1cmUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHdzQ29tcG9uZW50LnNlY3VyZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh3c0NvbXBvbmVudC5zY2hlbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgd3NDb21wb25lbnQuc2NoZW1lLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ3cnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ1cnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ1MnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ1MnKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFBhcnNlIChjb21wb25lbnQpIHtcbiAgaWYgKCFjb21wb25lbnQuaG9zdCkge1xuICAgIGNvbXBvbmVudC5lcnJvciA9IGNvbXBvbmVudC5lcnJvciB8fCAnSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuJ1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFNlcmlhbGl6ZSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHNlY3VyZSA9IFN0cmluZyhjb21wb25lbnQuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSAnaHR0cHMnXG5cbiAgLy8gbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgaWYgKGNvbXBvbmVudC5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudC5wb3J0ID09PSAnJykge1xuICAgIGNvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBub3JtYWxpemUgdGhlIGVtcHR5IHBhdGhcbiAgaWYgKCFjb21wb25lbnQucGF0aCkge1xuICAgIGNvbXBvbmVudC5wYXRoID0gJy8nXG4gIH1cblxuICAvLyBOT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gIC8vIGFzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuICAvLyBhbmQgbm90IHRoZSBIVFRQIHNwZWMuXG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gd3NQYXJzZSAod3NDb21wb25lbnQpIHtcbi8vIGluZGljYXRlIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXRcbiAgd3NDb21wb25lbnQuc2VjdXJlID0gd3NJc1NlY3VyZSh3c0NvbXBvbmVudClcblxuICAvLyBjb25zdHJ1Y3QgcmVzb3VjZSBuYW1lXG4gIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9ICh3c0NvbXBvbmVudC5wYXRoIHx8ICcvJykgKyAod3NDb21wb25lbnQucXVlcnkgPyAnPycgKyB3c0NvbXBvbmVudC5xdWVyeSA6ICcnKVxuICB3c0NvbXBvbmVudC5wYXRoID0gdW5kZWZpbmVkXG4gIHdzQ29tcG9uZW50LnF1ZXJ5ID0gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHdzQ29tcG9uZW50XG59XG5cbi8qKiBAdHlwZSB7U2NoZW1lRm59ICovXG5mdW5jdGlvbiB3c1NlcmlhbGl6ZSAod3NDb21wb25lbnQpIHtcbi8vIG5vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICh3c0NvbXBvbmVudC5wb3J0ID09PSAod3NJc1NlY3VyZSh3c0NvbXBvbmVudCkgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnQucG9ydCA9PT0gJycpIHtcbiAgICB3c0NvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBlbnN1cmUgc2NoZW1lIG1hdGNoZXMgc2VjdXJlIGZsYWdcbiAgaWYgKHR5cGVvZiB3c0NvbXBvbmVudC5zZWN1cmUgPT09ICdib29sZWFuJykge1xuICAgIHdzQ29tcG9uZW50LnNjaGVtZSA9ICh3c0NvbXBvbmVudC5zZWN1cmUgPyAnd3NzJyA6ICd3cycpXG4gICAgd3NDb21wb25lbnQuc2VjdXJlID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyByZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuICBpZiAod3NDb21wb25lbnQucmVzb3VyY2VOYW1lKSB7XG4gICAgY29uc3QgW3BhdGgsIHF1ZXJ5XSA9IHdzQ29tcG9uZW50LnJlc291cmNlTmFtZS5zcGxpdCgnPycpXG4gICAgd3NDb21wb25lbnQucGF0aCA9IChwYXRoICYmIHBhdGggIT09ICcvJyA/IHBhdGggOiB1bmRlZmluZWQpXG4gICAgd3NDb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gZm9yYmlkIGZyYWdtZW50IGNvbXBvbmVudFxuICB3c0NvbXBvbmVudC5mcmFnbWVudCA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiB3c0NvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuUGFyc2UgKHVybkNvbXBvbmVudCwgb3B0aW9ucykge1xuICBpZiAoIXVybkNvbXBvbmVudC5wYXRoKSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gJ1VSTiBjYW4gbm90IGJlIHBhcnNlZCdcbiAgICByZXR1cm4gdXJuQ29tcG9uZW50XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHVybkNvbXBvbmVudC5wYXRoLm1hdGNoKFVSTl9SRUcpXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50LnNjaGVtZSB8fCAndXJuJ1xuICAgIHVybkNvbXBvbmVudC5uaWQgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKClcbiAgICB1cm5Db21wb25lbnQubnNzID0gbWF0Y2hlc1syXVxuICAgIGNvbnN0IHVyblNjaGVtZSA9IGAke3NjaGVtZX06JHtvcHRpb25zLm5pZCB8fCB1cm5Db21wb25lbnQubmlkfWBcbiAgICBjb25zdCBzY2hlbWVIYW5kbGVyID0gZ2V0U2NoZW1lSGFuZGxlcih1cm5TY2hlbWUpXG4gICAgdXJuQ29tcG9uZW50LnBhdGggPSB1bmRlZmluZWRcblxuICAgIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgICB1cm5Db21wb25lbnQgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudCwgb3B0aW9ucylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gdXJuQ29tcG9uZW50LmVycm9yIHx8ICdVUk4gY2FuIG5vdCBiZSBwYXJzZWQuJ1xuICB9XG5cbiAgcmV0dXJuIHVybkNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuU2VyaWFsaXplICh1cm5Db21wb25lbnQsIG9wdGlvbnMpIHtcbiAgaWYgKHVybkNvbXBvbmVudC5uaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJOIHdpdGhvdXQgbmlkIGNhbm5vdCBiZSBzZXJpYWxpemVkJylcbiAgfVxuICBjb25zdCBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnQuc2NoZW1lIHx8ICd1cm4nXG4gIGNvbnN0IG5pZCA9IHVybkNvbXBvbmVudC5uaWQudG9Mb3dlckNhc2UoKVxuICBjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWBcbiAgY29uc3Qgc2NoZW1lSGFuZGxlciA9IGdldFNjaGVtZUhhbmRsZXIodXJuU2NoZW1lKVxuXG4gIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgdXJuQ29tcG9uZW50ID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50LCBvcHRpb25zKVxuICB9XG5cbiAgY29uc3QgdXJpQ29tcG9uZW50ID0gdXJuQ29tcG9uZW50XG4gIGNvbnN0IG5zcyA9IHVybkNvbXBvbmVudC5uc3NcbiAgdXJpQ29tcG9uZW50LnBhdGggPSBgJHtuaWQgfHwgb3B0aW9ucy5uaWR9OiR7bnNzfWBcblxuICBvcHRpb25zLnNraXBFc2NhcGUgPSB0cnVlXG4gIHJldHVybiB1cmlDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVybnV1aWRQYXJzZSAodXJuQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHV1aWRDb21wb25lbnQgPSB1cm5Db21wb25lbnRcbiAgdXVpZENvbXBvbmVudC51dWlkID0gdXVpZENvbXBvbmVudC5uc3NcbiAgdXVpZENvbXBvbmVudC5uc3MgPSB1bmRlZmluZWRcblxuICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgKCF1dWlkQ29tcG9uZW50LnV1aWQgfHwgIWlzVVVJRCh1dWlkQ29tcG9uZW50LnV1aWQpKSkge1xuICAgIHV1aWRDb21wb25lbnQuZXJyb3IgPSB1dWlkQ29tcG9uZW50LmVycm9yIHx8ICdVVUlEIGlzIG5vdCB2YWxpZC4nXG4gIH1cblxuICByZXR1cm4gdXVpZENvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJudXVpZFNlcmlhbGl6ZSAodXVpZENvbXBvbmVudCkge1xuICBjb25zdCB1cm5Db21wb25lbnQgPSB1dWlkQ29tcG9uZW50XG4gIC8vIG5vcm1hbGl6ZSBVVUlEXG4gIHVybkNvbXBvbmVudC5uc3MgPSAodXVpZENvbXBvbmVudC51dWlkIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiB1cm5Db21wb25lbnRcbn1cblxuY29uc3QgaHR0cCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAnaHR0cCcsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiBodHRwUGFyc2UsXG4gIHNlcmlhbGl6ZTogaHR0cFNlcmlhbGl6ZVxufSlcblxuY29uc3QgaHR0cHMgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ2h0dHBzJyxcbiAgZG9tYWluSG9zdDogaHR0cC5kb21haW5Ib3N0LFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn0pXG5cbmNvbnN0IHdzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICd3cycsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiB3c1BhcnNlLFxuICBzZXJpYWxpemU6IHdzU2VyaWFsaXplXG59KVxuXG5jb25zdCB3c3MgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3dzcycsXG4gIGRvbWFpbkhvc3Q6IHdzLmRvbWFpbkhvc3QsXG4gIHBhcnNlOiB3cy5wYXJzZSxcbiAgc2VyaWFsaXplOiB3cy5zZXJpYWxpemVcbn0pXG5cbmNvbnN0IHVybiA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuJyxcbiAgcGFyc2U6IHVyblBhcnNlLFxuICBzZXJpYWxpemU6IHVyblNlcmlhbGl6ZSxcbiAgc2tpcE5vcm1hbGl6ZTogdHJ1ZVxufSlcblxuY29uc3QgdXJudXVpZCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuOnV1aWQnLFxuICBwYXJzZTogdXJudXVpZFBhcnNlLFxuICBzZXJpYWxpemU6IHVybnV1aWRTZXJpYWxpemUsXG4gIHNraXBOb3JtYWxpemU6IHRydWVcbn0pXG5cbmNvbnN0IFNDSEVNRVMgPSAvKiogQHR5cGUge1JlY29yZDxTY2hlbWVOYW1lLCBTY2hlbWVIYW5kbGVyPn0gKi8gKHtcbiAgaHR0cCxcbiAgaHR0cHMsXG4gIHdzLFxuICB3c3MsXG4gIHVybixcbiAgJ3Vybjp1dWlkJzogdXJudXVpZFxufSlcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFNDSEVNRVMsIG51bGwpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBzY2hlbWVcbiAqIEByZXR1cm5zIHtTY2hlbWVIYW5kbGVyfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1lSGFuZGxlciAoc2NoZW1lKSB7XG4gIHJldHVybiAoXG4gICAgc2NoZW1lICYmIChcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyAoc2NoZW1lKV0gfHxcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyhzY2hlbWUudG9Mb3dlckNhc2UoKSldKVxuICApIHx8XG4gICAgdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3c0lzU2VjdXJlLFxuICBTQ0hFTUVTLFxuICBpc1ZhbGlkU2NoZW1lTmFtZSxcbiAgZ2V0U2NoZW1lSGFuZGxlcixcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbm9ybWFsaXplSVB2NiwgcmVtb3ZlRG90U2VnbWVudHMsIHJlY29tcG9zZUF1dGhvcml0eSwgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsIGlzSVB2NCwgbm9uU2ltcGxlRG9tYWluIH0gPSByZXF1aXJlKCcuL2xpYi91dGlscycpXG5jb25zdCB7IFNDSEVNRVMsIGdldFNjaGVtZUhhbmRsZXIgfSA9IHJlcXVpcmUoJy4vbGliL3NjaGVtZXMnKVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fHN0cmluZ30gVFxuICogQHBhcmFtIHtUfSB1cmlcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7VH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplICh1cmksIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAoc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB1cmkgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAocGFyc2Uoc2VyaWFsaXplKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9XG4gIHJldHVybiB1cmlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJJXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZSAoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2NoZW1lbGVzc09wdGlvbnMgPSBvcHRpb25zID8gT2JqZWN0LmFzc2lnbih7IHNjaGVtZTogJ251bGwnIH0sIG9wdGlvbnMpIDogeyBzY2hlbWU6ICdudWxsJyB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNvbXBvbmVudChwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKVxuICBzY2hlbWVsZXNzT3B0aW9ucy5za2lwRXNjYXBlID0gdHJ1ZVxuICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVkLCBzY2hlbWVsZXNzT3B0aW9ucylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGJhc2VcbiAqIEBwYXJhbSB7aW1wb3J0ICgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gcmVsYXRpdmVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwTm9ybWFsaXphdGlvbj1mYWxzZV1cbiAqIEByZXR1cm5zIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50IChiYXNlLCByZWxhdGl2ZSwgb3B0aW9ucywgc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHRhcmdldCA9IHt9XG4gIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICBiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgYmFzZSBjb21wb25lbnRcbiAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICB0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lXG4gICAgLy8gdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdFxuICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydFxuICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICB9IGVsc2Uge1xuICAgIGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0XG4gICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnRcbiAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aFxuICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVsYXRpdmUucGF0aFswXSA9PT0gJy8nKSB7XG4gICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoYmFzZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IGJhc2UuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IGJhc2UucG9ydCAhPT0gdW5kZWZpbmVkKSAmJiAhYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9ICcvJyArIHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICB9XG4gICAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvXG4gICAgICB0YXJnZXQuaG9zdCA9IGJhc2UuaG9zdFxuICAgICAgdGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnRcbiAgICB9XG4gICAgdGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lXG4gIH1cblxuICB0YXJnZXQuZnJhZ21lbnQgPSByZWxhdGl2ZS5mcmFnbWVudFxuXG4gIHJldHVybiB0YXJnZXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlBXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlCXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXF1YWwgKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmlBID09PSAnc3RyaW5nJykge1xuICAgIHVyaUEgPSB1bmVzY2FwZSh1cmlBKVxuICAgIHVyaUEgPSBzZXJpYWxpemUobm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcocGFyc2UodXJpQSwgb3B0aW9ucyksIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpQSA9PT0gJ29iamVjdCcpIHtcbiAgICB1cmlBID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHVyaUEsIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgdXJpQiA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlCID0gdW5lc2NhcGUodXJpQilcbiAgICB1cmlCID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaUIgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpQiA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyh1cmlCLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4gdXJpQS50b0xvd2VyQ2FzZSgpID09PSB1cmlCLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PGltcG9ydCgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudD59IGNtcHRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplIChjbXB0cywgb3B0cykge1xuICBjb25zdCBjb21wb25lbnQgPSB7XG4gICAgaG9zdDogY21wdHMuaG9zdCxcbiAgICBzY2hlbWU6IGNtcHRzLnNjaGVtZSxcbiAgICB1c2VyaW5mbzogY21wdHMudXNlcmluZm8sXG4gICAgcG9ydDogY21wdHMucG9ydCxcbiAgICBwYXRoOiBjbXB0cy5wYXRoLFxuICAgIHF1ZXJ5OiBjbXB0cy5xdWVyeSxcbiAgICBuaWQ6IGNtcHRzLm5pZCxcbiAgICBuc3M6IGNtcHRzLm5zcyxcbiAgICB1dWlkOiBjbXB0cy51dWlkLFxuICAgIGZyYWdtZW50OiBjbXB0cy5mcmFnbWVudCxcbiAgICByZWZlcmVuY2U6IGNtcHRzLnJlZmVyZW5jZSxcbiAgICByZXNvdXJjZU5hbWU6IGNtcHRzLnJlc291cmNlTmFtZSxcbiAgICBzZWN1cmU6IGNtcHRzLnNlY3VyZSxcbiAgICBlcnJvcjogJydcbiAgfVxuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgY29uc3QgdXJpVG9rZW5zID0gW11cblxuICAvLyBmaW5kIHNjaGVtZSBoYW5kbGVyXG4gIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudC5zY2hlbWUpXG5cbiAgLy8gcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50LCBvcHRpb25zKVxuXG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFvcHRpb25zLnNraXBFc2NhcGUpIHtcbiAgICAgIGNvbXBvbmVudC5wYXRoID0gZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuXG4gICAgICBpZiAoY29tcG9uZW50LnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbXBvbmVudC5wYXRoID0gY29tcG9uZW50LnBhdGguc3BsaXQoJyUzQScpLmpvaW4oJzonKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQucGF0aCA9IHVuZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcgJiYgY29tcG9uZW50LnNjaGVtZSkge1xuICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudC5zY2hlbWUsICc6JylcbiAgfVxuXG4gIGNvbnN0IGF1dGhvcml0eSA9IHJlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnQpXG4gIGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvLycpXG4gICAgfVxuXG4gICAgdXJpVG9rZW5zLnB1c2goYXV0aG9yaXR5KVxuXG4gICAgaWYgKGNvbXBvbmVudC5wYXRoICYmIGNvbXBvbmVudC5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvJylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudC5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgcyA9IGNvbXBvbmVudC5wYXRoXG5cbiAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRob3JpdHkgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgc1swXSA9PT0gJy8nICYmXG4gICAgICBzWzFdID09PSAnLydcbiAgICApIHtcbiAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICBzID0gJy8lMkYnICsgcy5zbGljZSgyKVxuICAgIH1cblxuICAgIHVyaVRva2Vucy5wdXNoKHMpXG4gIH1cblxuICBpZiAoY29tcG9uZW50LnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnPycsIGNvbXBvbmVudC5xdWVyeSlcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHVyaVRva2Vucy5wdXNoKCcjJywgY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiB1cmlUb2tlbnMuam9pbignJylcbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW14jLzo/XSspOik/KD86XFwvXFwvKCg/OihbXiMvP0BdKilAKT8oXFxbW14jLz9cXF1dK1xcXXxbXiMvOj9dKikoPzo6KFxcZCopKT8pKT8oW14jP10qKSg/OlxcPyhbXiNdKikpPyg/OiMoKD86LnxbXFxuXFxyXSkqKSk/L3VcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHVyaSwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHBhcnNlZCA9IHtcbiAgICBzY2hlbWU6IHVuZGVmaW5lZCxcbiAgICB1c2VyaW5mbzogdW5kZWZpbmVkLFxuICAgIGhvc3Q6ICcnLFxuICAgIHBvcnQ6IHVuZGVmaW5lZCxcbiAgICBwYXRoOiAnJyxcbiAgICBxdWVyeTogdW5kZWZpbmVkLFxuICAgIGZyYWdtZW50OiB1bmRlZmluZWRcbiAgfVxuXG4gIGxldCBpc0lQID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSAnc3VmZml4Jykge1xuICAgIGlmIChvcHRpb25zLnNjaGVtZSkge1xuICAgICAgdXJpID0gb3B0aW9ucy5zY2hlbWUgKyAnOicgKyB1cmlcbiAgICB9IGVsc2Uge1xuICAgICAgdXJpID0gJy8vJyArIHVyaVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSB1cmkubWF0Y2goVVJJX1BBUlNFKVxuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgLy8gc3RvcmUgZWFjaCBjb21wb25lbnRcbiAgICBwYXJzZWQuc2NoZW1lID0gbWF0Y2hlc1sxXVxuICAgIHBhcnNlZC51c2VyaW5mbyA9IG1hdGNoZXNbM11cbiAgICBwYXJzZWQuaG9zdCA9IG1hdGNoZXNbNF1cbiAgICBwYXJzZWQucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKVxuICAgIHBhcnNlZC5wYXRoID0gbWF0Y2hlc1s2XSB8fCAnJ1xuICAgIHBhcnNlZC5xdWVyeSA9IG1hdGNoZXNbN11cbiAgICBwYXJzZWQuZnJhZ21lbnQgPSBtYXRjaGVzWzhdXG5cbiAgICAvLyBmaXggcG9ydCBudW1iZXJcbiAgICBpZiAoaXNOYU4ocGFyc2VkLnBvcnQpKSB7XG4gICAgICBwYXJzZWQucG9ydCA9IG1hdGNoZXNbNV1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5ob3N0KSB7XG4gICAgICBjb25zdCBpcHY0cmVzdWx0ID0gaXNJUHY0KHBhcnNlZC5ob3N0KVxuICAgICAgaWYgKGlwdjRyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGlwdjZyZXN1bHQgPSBub3JtYWxpemVJUHY2KHBhcnNlZC5ob3N0KVxuICAgICAgICBwYXJzZWQuaG9zdCA9IGlwdjZyZXN1bHQuaG9zdC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGlzSVAgPSBpcHY2cmVzdWx0LmlzSVBWNlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNJUCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQuaG9zdCA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC5wb3J0ID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLnF1ZXJ5ID09PSB1bmRlZmluZWQgJiYgIXBhcnNlZC5wYXRoKSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ3NhbWUtZG9jdW1lbnQnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAncmVsYXRpdmUnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICdhYnNvbHV0ZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICd1cmknXG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09ICdzdWZmaXgnICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBwYXJzZWQucmVmZXJlbmNlKSB7XG4gICAgICBwYXJzZWQuZXJyb3IgPSBwYXJzZWQuZXJyb3IgfHwgJ1VSSSBpcyBub3QgYSAnICsgb3B0aW9ucy5yZWZlcmVuY2UgKyAnIHJlZmVyZW5jZS4nXG4gICAgfVxuXG4gICAgLy8gZmluZCBzY2hlbWUgaGFuZGxlclxuICAgIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IHBhcnNlZC5zY2hlbWUpXG5cbiAgICAvLyBjaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcbiAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgLy8gaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgaWYgKHBhcnNlZC5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkgJiYgaXNJUCA9PT0gZmFsc2UgJiYgbm9uU2ltcGxlRG9tYWluKHBhcnNlZC5ob3N0KSkge1xuICAgICAgICAvLyBjb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gVVJMLmRvbWFpblRvQVNDSUkocGFyc2VkLmhvc3QudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSTogXCIgKyBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnZlcnQgSVJJIC0+IFVSSVxuICAgIH1cblxuICAgIGlmICghc2NoZW1lSGFuZGxlciB8fCAoc2NoZW1lSGFuZGxlciAmJiAhc2NoZW1lSGFuZGxlci5za2lwTm9ybWFsaXplKSkge1xuICAgICAgaWYgKHVyaS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgIGlmIChwYXJzZWQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJzZWQuc2NoZW1lID0gdW5lc2NhcGUocGFyc2VkLnNjaGVtZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gdW5lc2NhcGUocGFyc2VkLmhvc3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJzZWQucGF0aCkge1xuICAgICAgICBwYXJzZWQucGF0aCA9IGVzY2FwZSh1bmVzY2FwZShwYXJzZWQucGF0aCkpXG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLmZyYWdtZW50KSB7XG4gICAgICAgIHBhcnNlZC5mcmFnbWVudCA9IGVuY29kZVVSSShkZWNvZGVVUklDb21wb25lbnQocGFyc2VkLmZyYWdtZW50KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG4gICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShwYXJzZWQsIG9wdGlvbnMpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCAnVVJJIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuICByZXR1cm4gcGFyc2VkXG59XG5cbmNvbnN0IGZhc3RVcmkgPSB7XG4gIFNDSEVNRVMsXG4gIG5vcm1hbGl6ZSxcbiAgcmVzb2x2ZSxcbiAgcmVzb2x2ZUNvbXBvbmVudCxcbiAgZXF1YWwsXG4gIHNlcmlhbGl6ZSxcbiAgcGFyc2Vcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYXN0VXJpXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZmFzdFVyaVxubW9kdWxlLmV4cG9ydHMuZmFzdFVyaSA9IGZhc3RVcmlcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1cmkgPSByZXF1aXJlKFwiZmFzdC11cmlcIik7XG51cmkuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91cmlcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSB1cmk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgZGF0YSAvLyB0byBiZSB2YWxpZGF0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmdldFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCF2KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gc2NoZW1hIHdpdGgga2V5IG9yIHJlZiBcIiR7c2NoZW1hS2V5UmVmfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5jb21waWxlKHNjaGVtYUtleVJlZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB2KGRhdGEpO1xuICAgICAgICBpZiAoIShcIiRhc3luY1wiIGluIHYpKVxuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB2LmVycm9ycztcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBjb21waWxlKHNjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEpO1xuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICBjb21waWxlQXN5bmMoc2NoZW1hLCBtZXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmxvYWRTY2hlbWEgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2FkU2NoZW1hIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2hlbWEsIG1ldGEpO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiBydW5Db21waWxlQXN5bmMoX3NjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShfc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlIHx8IF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hKCRyZWYpIHtcbiAgICAgICAgICAgIGlmICgkcmVmICYmICF0aGlzLmdldFNjaGVtYSgkcmVmKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHsgJHJlZiB9LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgcmVmX2Vycm9yXzEuZGVmYXVsdCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWlzc2luZ1NjaGVtYS5jYWxsKHRoaXMsIGUubWlzc2luZ1NjaGVtYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKHsgbWlzc2luZ1NjaGVtYTogcmVmLCBtaXNzaW5nUmVmIH0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnNbcmVmXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW55U2NoZW1hICR7cmVmfSBpcyBsb2FkZWQgYnV0ICR7bWlzc2luZ1JlZn0gY2Fubm90IGJlIHJlc29sdmVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1pc3NpbmdTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gYXdhaXQgX2xvYWRTY2hlbWEuY2FsbCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKF9zY2hlbWEsIHJlZiwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2xvYWRTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgaWYgKHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCAodGhpcy5fbG9hZGluZ1tyZWZdID0gbG9hZFNjaGVtYShyZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWRkcyBzY2hlbWEgdG8gdGhlIGluc3RhbmNlXG4gICAgYWRkU2NoZW1hKHNjaGVtYSwgLy8gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCB3aWxsIGJlIGlnbm9yZWRcbiAgICBrZXksIC8vIE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gICAgX21ldGEsIC8vIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLiBVc2VkIGludGVybmFsbHksIG9wdGlvbiB2YWxpZGF0ZVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgICkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaCBvZiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoLCB1bmRlZmluZWQsIF9tZXRhLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGlkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSAke3NjaGVtYUlkfSBtdXN0IGJlIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleSB8fCBpZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGtleSk7XG4gICAgICAgIHRoaXMuc2NoZW1hc1trZXldID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEsIGtleSwgX3ZhbGlkYXRlU2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBzY2hlbWEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgb3RoZXIgc2NoZW1hc1xuICAgIC8vIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gICAgYWRkTWV0YVNjaGVtYShzY2hlbWEsIGtleSwgLy8gc2NoZW1hIGtleVxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gICAgKSB7XG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaGVtYSwga2V5LCB0cnVlLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gIFZhbGlkYXRlIHNjaGVtYSBhZ2FpbnN0IGl0cyBtZXRhLXNjaGVtYVxuICAgIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCAkc2NoZW1hO1xuICAgICAgICAkc2NoZW1hID0gc2NoZW1hLiRzY2hlbWE7XG4gICAgICAgIGlmICgkc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICRzY2hlbWEgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgICRzY2hlbWEgPSAkc2NoZW1hIHx8IHRoaXMub3B0cy5kZWZhdWx0TWV0YSB8fCB0aGlzLmRlZmF1bHRNZXRhKCk7XG4gICAgICAgIGlmICghJHNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1ldGEtc2NoZW1hIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcInNjaGVtYSBpcyBpbnZhbGlkOiBcIiArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICAvLyBHZXQgY29tcGlsZWQgc2NoZW1hIGJ5IGBrZXlgIG9yIGByZWZgLlxuICAgIC8vIChga2V5YCB0aGF0IHdhcyBwYXNzZWQgdG8gYGFkZFNjaGVtYWAgb3IgZnVsbCBzY2hlbWEgcmVmZXJlbmNlIC0gYHNjaGVtYS4kaWRgIG9yIHJlc29sdmVkIGlkKVxuICAgIGdldFNjaGVtYShrZXlSZWYpIHtcbiAgICAgICAgbGV0IHNjaDtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywga2V5UmVmKSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGtleVJlZiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBjb25zdCByb290ID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWE6IHt9LCBzY2hlbWFJZCB9KTtcbiAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwga2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghc2NoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucmVmc1trZXlSZWZdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBjYWNoZWQgc2NoZW1hKHMpLlxuICAgIC8vIElmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBFdmVuIGlmIHNjaGVtYSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIHNjaGVtYXMgaXQgc3RpbGwgY2FuIGJlIHJlbW92ZWQgYXMgb3RoZXIgc2NoZW1hcyBoYXZlIGxvY2FsIHJlZmVyZW5jZXMuXG4gICAgcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICAgICAgICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlb2Ygc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gc2NoZW1hS2V5UmVmO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gc2NoZW1hS2V5UmVmW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tpZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYucmVtb3ZlU2NoZW1hOiBpbnZhbGlkIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGQgXCJ2b2NhYnVsYXJ5XCIgLSBhIGNvbGxlY3Rpb24gb2Yga2V5d29yZHNcbiAgICBhZGRWb2NhYnVsYXJ5KGRlZmluaXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRLZXl3b3JkKGt3ZE9yRGVmLCBkZWYgLy8gZGVwcmVjYXRlZFxuICAgICkge1xuICAgICAgICBsZXQga2V5d29yZDtcbiAgICAgICAgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBrZXl3b3JkID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcInRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQsIHNlZSBkb2NzIGZvciBhZGRLZXl3b3JkXCIpO1xuICAgICAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJvYmplY3RcIiAmJiBkZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBrZXl3b3JkID0gZGVmLmtleXdvcmQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXl3b3JkKSAmJiAha2V5d29yZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGFkZEtleXdvcmRzIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tLZXl3b3JkLmNhbGwodGhpcywga2V5d29yZCwgZGVmKTtcbiAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrd2QpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGtleXdvcmRNZXRhc2NoZW1hLmNhbGwodGhpcywgZGVmKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYuc2NoZW1hVHlwZSksXG4gICAgICAgIH07XG4gICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIGRlZmluaXRpb24udHlwZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gKGspID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uKVxuICAgICAgICAgICAgOiAoaykgPT4gZGVmaW5pdGlvbi50eXBlLmZvckVhY2goKHQpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uLCB0KSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLlJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgPyBydWxlLmRlZmluaXRpb24gOiAhIXJ1bGU7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBrZXl3b3JkXG4gICAgcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIC8vIFRPRE8gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIEFqdlxuICAgICAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICAgICBkZWxldGUgUlVMRVMua2V5d29yZHNba2V5d29yZF07XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBncm91cC5ydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHJ1bGUua2V5d29yZCA9PT0ga2V5d29yZCk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGdyb3VwLnJ1bGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIGZvcm1hdFxuICAgIGFkZEZvcm1hdChuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGZvcm1hdCA9IG5ldyBSZWdFeHAoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5mb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXJyb3JzVGV4dChlcnJvcnMgPSB0aGlzLmVycm9ycywgLy8gb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB7IHNlcGFyYXRvciA9IFwiLCBcIiwgZGF0YVZhciA9IFwiZGF0YVwiIH0gPSB7fSAvLyBvcHRpb25hbCBvcHRpb25zIHdpdGggcHJvcGVydGllcyBgc2VwYXJhdG9yYCBhbmQgYGRhdGFWYXJgXG4gICAgKSB7XG4gICAgICAgIGlmICghZXJyb3JzIHx8IGVycm9ycy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gXCJObyBlcnJvcnNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yc1xuICAgICAgICAgICAgLm1hcCgoZSkgPT4gYCR7ZGF0YVZhcn0ke2UuaW5zdGFuY2VQYXRofSAke2UubWVzc2FnZX1gKVxuICAgICAgICAgICAgLnJlZHVjZSgodGV4dCwgbXNnKSA9PiB0ZXh0ICsgc2VwYXJhdG9yICsgbXNnKTtcbiAgICB9XG4gICAgJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5SVUxFUy5hbGw7XG4gICAgICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICAgICAgZm9yIChjb25zdCBqc29uUG9pbnRlciBvZiBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIikuc2xpY2UoMSk7IC8vIGZpcnN0IHNlZ21lbnQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBsZXQga2V5d29yZHMgPSBtZXRhU2NoZW1hO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpXG4gICAgICAgICAgICAgICAga2V5d29yZHMgPSBrZXl3b3Jkc1tzZWddO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyAkZGF0YSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGtleXdvcmRzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCRkYXRhICYmIHNjaGVtYSlcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHNba2V5XSA9IHNjaGVtYU9yRGF0YShzY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXRhU2NoZW1hO1xuICAgIH1cbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzY2hlbWFzLCByZWdleCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICBpZiAoIXJlZ2V4IHx8IHJlZ2V4LnRlc3Qoa2V5UmVmKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoICYmICFzY2gubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRTY2hlbWEoc2NoZW1hLCBtZXRhLCBiYXNlSWQsIHZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hLCBhZGRTY2hlbWEgPSB0aGlzLm9wdHMuYWRkVXNlZFNjaGVtYSkge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5qdGQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3Qgb3IgYm9vbGVhblwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2NoID0gdGhpcy5fY2FjaGUuZ2V0KHNjaGVtYSk7XG4gICAgICAgIGlmIChzY2ggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkIHx8IGJhc2VJZCk7XG4gICAgICAgIGNvbnN0IGxvY2FsUmVmcyA9IHJlc29sdmVfMS5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcywgc2NoZW1hLCBiYXNlSWQpO1xuICAgICAgICBzY2ggPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIG1ldGEsIGJhc2VJZCwgbG9jYWxSZWZzIH0pO1xuICAgICAgICB0aGlzLl9jYWNoZS5zZXQoc2NoLnNjaGVtYSwgc2NoKTtcbiAgICAgICAgaWYgKGFkZFNjaGVtYSAmJiAhYmFzZUlkLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF0bSBpdCBpcyBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBzY2hlbWFzIHdpdGhvdXQgaWQgKGluc3RlYWQgb2Ygbm90IGFkZGluZyB0aGVtKVxuICAgICAgICAgICAgaWYgKGJhc2VJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShiYXNlSWQpO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2Jhc2VJZF0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKVxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBfY2hlY2tVbmlxdWUoaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NoZW1hc1tpZF0gfHwgdGhpcy5yZWZzW2lkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgXCIke2lkfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSB7XG4gICAgICAgIGlmIChzY2gubWV0YSlcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghc2NoLnZhbGlkYXRlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlO1xuICAgIH1cbiAgICBfY29tcGlsZU1ldGFTY2hlbWEoc2NoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRzID0gdGhpcy5vcHRzO1xuICAgICAgICB0aGlzLm9wdHMgPSB0aGlzLl9tZXRhT3B0cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMub3B0cyA9IGN1cnJlbnRPcHRzO1xuICAgICAgICB9XG4gICAgfVxufVxuQWp2LlZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0O1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IHJlZl9lcnJvcl8xLmRlZmF1bHQ7XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG5mdW5jdGlvbiBjaGVja09wdGlvbnMoY2hlY2tPcHRzLCBvcHRpb25zLCBtc2csIGxvZyA9IFwiZXJyb3JcIikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoZWNrT3B0cykge1xuICAgICAgICBjb25zdCBvcHQgPSBrZXk7XG4gICAgICAgIGlmIChvcHQgaW4gb3B0aW9ucylcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyW2xvZ10oYCR7bXNnfTogb3B0aW9uICR7a2V5fS4gJHtjaGVja09wdHNbb3B0XX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTY2hFbnYoa2V5UmVmKSB7XG4gICAga2V5UmVmID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5UmVmKTsgLy8gVE9ETyB0ZXN0cyBmYWlsIHdpdGhvdXQgdGhpcyBsaW5lXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hc1trZXlSZWZdIHx8IHRoaXMucmVmc1trZXlSZWZdO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbFNjaGVtYXMoKSB7XG4gICAgY29uc3Qgb3B0c1NjaGVtYXMgPSB0aGlzLm9wdHMuc2NoZW1hcztcbiAgICBpZiAoIW9wdHNTY2hlbWFzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0c1NjaGVtYXMpKVxuICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hcyk7XG4gICAgZWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRzU2NoZW1hcylcbiAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzW2tleV0sIGtleSk7XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cygpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5vcHRzLmZvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5vcHRzLmZvcm1hdHNbbmFtZV07XG4gICAgICAgIGlmIChmb3JtYXQpXG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxLZXl3b3JkcyhkZWZzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmcykpIHtcbiAgICAgICAgdGhpcy5hZGRWb2NhYnVsYXJ5KGRlZnMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLndhcm4oXCJrZXl3b3JkcyBvcHRpb24gYXMgbWFwIGlzIGRlcHJlY2F0ZWQsIHBhc3MgYXJyYXlcIik7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIGRlZnMpIHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKCFkZWYua2V5d29yZClcbiAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YU9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIE1FVEFfSUdOT1JFX09QVElPTlMpXG4gICAgICAgIGRlbGV0ZSBtZXRhT3B0c1tvcHRdO1xuICAgIHJldHVybiBtZXRhT3B0cztcbn1cbmNvbnN0IG5vTG9ncyA9IHsgbG9nKCkgeyB9LCB3YXJuKCkgeyB9LCBlcnJvcigpIHsgfSB9O1xuZnVuY3Rpb24gZ2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgIGlmIChsb2dnZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbm9Mb2dzO1xuICAgIGlmIChsb2dnZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGNvbnNvbGU7XG4gICAgaWYgKGxvZ2dlci5sb2cgJiYgbG9nZ2VyLndhcm4gJiYgbG9nZ2VyLmVycm9yKVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIHRocm93IG5ldyBFcnJvcihcImxvZ2dlciBtdXN0IGltcGxlbWVudCBsb2csIHdhcm4gYW5kIGVycm9yIG1ldGhvZHNcIik7XG59XG5jb25zdCBLRVlXT1JEX05BTUUgPSAvXlthLXpfJF1bYS16MC05XyQ6LV0qJC9pO1xuZnVuY3Rpb24gY2hlY2tLZXl3b3JkKGtleXdvcmQsIGRlZikge1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4ge1xuICAgICAgICBpZiAoUlVMRVMua2V5d29yZHNba3dkXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaXMgYWxyZWFkeSBkZWZpbmVkYCk7XG4gICAgICAgIGlmICghS0VZV09SRF9OQU1FLnRlc3Qoa3dkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaGFzIGludmFsaWQgbmFtZWApO1xuICAgIH0pO1xuICAgIGlmICghZGVmKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiAhKFwiY29kZVwiIGluIGRlZiB8fCBcInZhbGlkYXRlXCIgaW4gZGVmKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRkYXRhIGtleXdvcmQgbXVzdCBoYXZlIFwiY29kZVwiIG9yIFwidmFsaWRhdGVcIiBmdW5jdGlvbicpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZFJ1bGUoa2V5d29yZCwgZGVmaW5pdGlvbiwgZGF0YVR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcG9zdCA9IGRlZmluaXRpb24gPT09IG51bGwgfHwgZGVmaW5pdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmaW5pdGlvbi5wb3N0O1xuICAgIGlmIChkYXRhVHlwZSAmJiBwb3N0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgd2l0aCBcInBvc3RcIiBmbGFnIGNhbm5vdCBoYXZlIFwidHlwZVwiJyk7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICBsZXQgcnVsZUdyb3VwID0gcG9zdCA/IFJVTEVTLnBvc3QgOiBSVUxFUy5ydWxlcy5maW5kKCh7IHR5cGU6IHQgfSkgPT4gdCA9PT0gZGF0YVR5cGUpO1xuICAgIGlmICghcnVsZUdyb3VwKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgICBSVUxFUy5ydWxlcy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBpZiAoIWRlZmluaXRpb24pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnNjaGVtYVR5cGUpLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRlZmluaXRpb24uYmVmb3JlKVxuICAgICAgICBhZGRCZWZvcmVSdWxlLmNhbGwodGhpcywgcnVsZUdyb3VwLCBydWxlLCBkZWZpbml0aW9uLmJlZm9yZSk7XG4gICAgZWxzZVxuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSBydWxlO1xuICAgIChfYSA9IGRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goKGt3ZCkgPT4gdGhpcy5hZGRLZXl3b3JkKGt3ZCkpO1xufVxuZnVuY3Rpb24gYWRkQmVmb3JlUnVsZShydWxlR3JvdXAsIHJ1bGUsIGJlZm9yZSkge1xuICAgIGNvbnN0IGkgPSBydWxlR3JvdXAucnVsZXMuZmluZEluZGV4KChfcnVsZSkgPT4gX3J1bGUua2V5d29yZCA9PT0gYmVmb3JlKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5zcGxpY2UoaSwgMCwgcnVsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcnVsZSAke2JlZm9yZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBrZXl3b3JkTWV0YXNjaGVtYShkZWYpIHtcbiAgICBsZXQgeyBtZXRhU2NoZW1hIH0gPSBkZWY7XG4gICAgaWYgKG1ldGFTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgdGhpcy5vcHRzLiRkYXRhKVxuICAgICAgICBtZXRhU2NoZW1hID0gc2NoZW1hT3JEYXRhKG1ldGFTY2hlbWEpO1xuICAgIGRlZi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbn1cbmNvbnN0ICRkYXRhUmVmID0ge1xuICAgICRyZWY6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jXCIsXG59O1xuZnVuY3Rpb24gc2NoZW1hT3JEYXRhKHNjaGVtYSkge1xuICAgIHJldHVybiB7IGFueU9mOiBbc2NoZW1hLCAkZGF0YVJlZl0gfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlkXCIsXG4gICAgY29kZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOT1QgU1VQUE9SVEVEOiBrZXl3b3JkIFwiaWRcIiwgdXNlIFwiJGlkXCIgZm9yIHNjaGVtYSBJRCcpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FsbFJlZiA9IGV4cG9ydHMuZ2V0VmFsaWRhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIiRyZWZcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWE6ICRyZWYsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgYmFzZUlkLCBzY2hlbWFFbnY6IGVudiwgdmFsaWRhdGVOYW1lLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgY29uc3QgeyByb290IH0gPSBlbnY7XG4gICAgICAgIGlmICgoJHJlZiA9PT0gXCIjXCIgfHwgJHJlZiA9PT0gXCIjL1wiKSAmJiBiYXNlSWQgPT09IHJvb3QuYmFzZUlkKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxSb290UmVmKCk7XG4gICAgICAgIGNvbnN0IHNjaE9yRW52ID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChzZWxmLCByb290LCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyByZWZfZXJyb3JfMS5kZWZhdWx0KGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgJHJlZik7XG4gICAgICAgIGlmIChzY2hPckVudiBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICByZXR1cm4gY2FsbFZhbGlkYXRlKHNjaE9yRW52KTtcbiAgICAgICAgcmV0dXJuIGlubGluZVJlZlNjaGVtYShzY2hPckVudik7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxSb290UmVmKCkge1xuICAgICAgICAgICAgaWYgKGVudiA9PT0gcm9vdClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFJlZihjeHQsIHZhbGlkYXRlTmFtZSwgZW52LCBlbnYuJGFzeW5jKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiByb290IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCAoMCwgY29kZWdlbl8xLl8pIGAke3Jvb3ROYW1lfS52YWxpZGF0ZWAsIHJvb3QsIHJvb3QuJGFzeW5jKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoc2NoKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpO1xuICAgICAgICAgICAgY2FsbFJlZihjeHQsIHYsIHNjaCwgc2NoLiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5saW5lUmVmU2NoZW1hKHNjaCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoTmFtZSA9IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIG9wdHMuY29kZS5zb3VyY2UgPT09IHRydWUgPyB7IHJlZjogc2NoLCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoc2NoKSB9IDogeyByZWY6IHNjaCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW10sXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaE5hbWUsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogJHJlZixcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIHJldHVybiBzY2gudmFsaWRhdGVcbiAgICAgICAgPyBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlXCIsIHsgcmVmOiBzY2gudmFsaWRhdGUgfSlcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2dlbi5zY29wZVZhbHVlKFwid3JhcHBlclwiLCB7IHJlZjogc2NoIH0pfS52YWxpZGF0ZWA7XG59XG5leHBvcnRzLmdldFZhbGlkYXRlID0gZ2V0VmFsaWRhdGU7XG5mdW5jdGlvbiBjYWxsUmVmKGN4dCwgdiwgc2NoLCAkYXN5bmMpIHtcbiAgICBjb25zdCB7IGdlbiwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGFsbEVycm9ycywgc2NoZW1hRW52OiBlbnYsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IHBhc3NDeHQgPSBvcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBjb2RlZ2VuXzEubmlsO1xuICAgIGlmICgkYXN5bmMpXG4gICAgICAgIGNhbGxBc3luY1JlZigpO1xuICAgIGVsc2VcbiAgICAgICAgY2FsbFN5bmNSZWYoKTtcbiAgICBmdW5jdGlvbiBjYWxsQXN5bmNSZWYoKSB7XG4gICAgICAgIGlmICghZW52LiRhc3luYylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCAkeygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2LCBwYXNzQ3h0KX1gKTtcbiAgICAgICAgICAgIGFkZEV2YWx1YXRlZEZyb20odik7IC8vIFRPRE8gd2lsbCBub3Qgd29yayB3aXRoIGFzeW5jLCBpdCBoYXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgcmVzdWx0XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn0pYCwgKCkgPT4gZ2VuLnRocm93KGUpKTtcbiAgICAgICAgICAgIGFkZEVycm9yc0Zyb20oZSk7XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsU3luY1JlZigpIHtcbiAgICAgICAgY3h0LnJlc3VsdCgoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCksICgpID0+IGFkZEV2YWx1YXRlZEZyb20odiksICgpID0+IGFkZEVycm9yc0Zyb20odikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFcnJvcnNGcm9tKHNvdXJjZSkge1xuICAgICAgICBjb25zdCBlcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApOyAvLyBUT0RPIHRhZ2dlZFxuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFdmFsdWF0ZWRGcm9tKHNvdXJjZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoRXZhbHVhdGVkID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnZhbGlkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXZhbHVhdGVkO1xuICAgICAgICAvLyBUT0RPIHJlZmFjdG9yXG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaEV2YWx1YXRlZC5wcm9wcywgaXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQucHJvcHNgKTtcbiAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHByb3BzLCBpdC5wcm9wcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNJdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaEV2YWx1YXRlZC5pdGVtcywgaXQuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2VuLnZhcihcIml0ZW1zXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQuaXRlbXNgKTtcbiAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIGl0ZW1zLCBpdC5pdGVtcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5jYWxsUmVmID0gY2FsbFJlZjtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaWRfMSA9IHJlcXVpcmUoXCIuL2lkXCIpO1xuY29uc3QgcmVmXzEgPSByZXF1aXJlKFwiLi9yZWZcIik7XG5jb25zdCBjb3JlID0gW1xuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJGlkXCIsXG4gICAgXCIkZGVmc1wiLFxuICAgIFwiJHZvY2FidWxhcnlcIixcbiAgICB7IGtleXdvcmQ6IFwiJGNvbW1lbnRcIiB9LFxuICAgIFwiZGVmaW5pdGlvbnNcIixcbiAgICBpZF8xLmRlZmF1bHQsXG4gICAgcmVmXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBjb3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBtYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBtaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7S1dEc1trZXl3b3JkXS5mYWlsfSAke3NjaGVtYUNvZGV9IHx8IGlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdE51bWJlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlIG11bHRpcGxlIG9mICR7c2NoZW1hQ29kZX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bXVsdGlwbGVPZjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm11bHRpcGxlT2ZcIixcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8vIGNvbnN0IGJkdCA9IGJhZCREYXRhVHlwZShzY2hlbWFDb2RlLCA8c3RyaW5nPmRlZi5zY2hlbWFUeXBlLCAkZGF0YSlcbiAgICAgICAgY29uc3QgcHJlYyA9IGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbjtcbiAgICAgICAgY29uc3QgcmVzID0gZ2VuLmxldChcInJlc1wiKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHByZWNcbiAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgTWF0aC5hYnMoTWF0aC5yb3VuZCgke3Jlc30pIC0gJHtyZXN9KSA+IDFlLSR7cHJlY31gXG4gICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVzfSAhPT0gcGFyc2VJbnQoJHtyZXN9KWA7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgKCR7c2NoZW1hQ29kZX0gPT09IDAgfHwgKCR7cmVzfSA9ICR7ZGF0YX0vJHtzY2hlbWFDb2RlfSwgJHtpbnZhbGlkfSkpYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBsZU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzIC0gcHVueWNvZGUudWNzMi5kZWNvZGVcbmZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gICAgY29uc3QgbGVuID0gc3RyLmxlbmd0aDtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBsZXQgdmFsdWU7XG4gICAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgICAgICBsZW5ndGgrKztcbiAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MrKyk7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAweGQ4MDAgJiYgdmFsdWUgPD0gMHhkYmZmICYmIHBvcyA8IGxlbikge1xuICAgICAgICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgICAgICBpZiAoKHZhbHVlICYgMHhmYzAwKSA9PT0gMHhkYzAwKVxuICAgICAgICAgICAgICAgIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHVjczJsZW5ndGg7XG51Y3MybGVuZ3RoLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aFwiKS5kZWZhdWx0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVjczJsZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdWNzMmxlbmd0aF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvdWNzMmxlbmd0aFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBjaGFyYWN0ZXJzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4TGVuZ3RoXCIsIFwibWluTGVuZ3RoXCJdLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhMZW5ndGhcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjb25zdCBsZW4gPSBpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGN4dC5nZW4sIHVjczJsZW5ndGhfMS5kZWZhdWx0KX0oJHtkYXRhfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdExlbmd0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGlmICgkZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgeyByZWdFeHAgfSA9IGl0Lm9wdHMuY29kZTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cENvZGUgPSByZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYCA6ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCByZWdFeHApO1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgICAgICBnZW4udHJ5KCgpID0+IGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwQ29kZX0oJHtzY2hlbWFDb2RlfSwgJHt1fSkudGVzdCgke2RhdGF9KWApLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHtyZWdFeHB9LnRlc3QoJHtkYXRhfSlgKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gcHJvcGVydGllc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heFByb3BlcnRpZXNcIiwgXCJtaW5Qcm9wZXJ0aWVzXCJdLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5rZXlzKCR7ZGF0YX0pLmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJyR7bWlzc2luZ1Byb3BlcnR5fSdgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHttaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInJlcXVpcmVkXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgc2NoZW1hQ29kZSwgZGF0YSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gb3B0cy5sb29wUmVxdWlyZWQ7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICBhbGxFcnJvcnNNb2RlKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGV4aXRPbkVycm9yTW9kZSgpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RSZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBjeHQucGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCB7IGRlZmluZWRQcm9wZXJ0aWVzIH0gPSBjeHQuaXQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVpcmVkS2V5IG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICgocHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzW3JlcXVpcmVkS2V5XSkgPT09IHVuZGVmaW5lZCAmJiAhZGVmaW5lZFByb3BlcnRpZXMuaGFzKHJlcXVpcmVkS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7cmVxdWlyZWRLZXl9XCIgaXMgbm90IGRlZmluZWQgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFJlcXVpcmVkKWA7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxsRXJyb3JzTW9kZSgpIHtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEoY29kZWdlbl8xLm5pbCwgbG9vcEFsbFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGl0T25FcnJvck1vZGUoKSB7XG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCAoKSA9PiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSk7XG4gICAgICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgc2NoZW1hLCBtaXNzaW5nKSk7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BBbGxSZXF1aXJlZCgpIHtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInByb3BcIiwgc2NoZW1hQ29kZSwgKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBwcm9wIH0pO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLm5vUHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9KTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihtaXNzaW5nLCBzY2hlbWFDb2RlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBtaXNzaW5nLCBvcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWlyZWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBpdGVtc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heEl0ZW1zXCIsIFwibWluSXRlbXNcIl0sXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy84ODlcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmVxdWFsLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvZXF1YWxcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSBlcXVhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVxdWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgJHtqfSBhbmQgJHtpfSBhcmUgaWRlbnRpY2FsKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtpOiAke2l9LCBqOiAke2p9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiAhc2NoZW1hKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGVzID0gcGFyZW50U2NoZW1hLml0ZW1zID8gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKHBhcmVudFNjaGVtYS5pdGVtcykgOiBbXTtcbiAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlVW5pcXVlSXRlbXMsICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IGZhbHNlYCk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlVW5pcXVlSXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ2VuLmxldChcImlcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnZW4ubGV0KFwialwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpLCBqIH0pO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpfSA+IDFgLCAoKSA9PiAoY2FuT3B0aW1pemUoKSA/IGxvb3BOIDogbG9vcE4yKShpLCBqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVR5cGVzLmxlbmd0aCA+IDAgJiYgIWl0ZW1UeXBlcy5zb21lKCh0KSA9PiB0ID09PSBcIm9iamVjdFwiIHx8IHQgPT09IFwiYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4oaSwgaikge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdlbi5uYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdyb25nVHlwZSA9ICgwLCBkYXRhVHlwZV8xLmNoZWNrRGF0YVR5cGVzKShpdGVtVHlwZXMsIGl0ZW0sIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMS5EYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZ2VuLmNvbnN0KFwiaW5kaWNlc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgICAgICAgICAgZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4ubGV0KGl0ZW0sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBjb250aW51ZWApO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2l0ZW19ID09IFwic3RyaW5nXCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0ZW19ICs9IFwiX1wiYCk7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpbmRpY2VzfVske2l0ZW19XSA9PSBcIm51bWJlclwiYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGosICgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV0gPSAke2l9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTjIoaSwgaikge1xuICAgICAgICAgICAgY29uc3QgZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCk7XG4gICAgICAgICAgICBjb25zdCBvdXRlciA9IGdlbi5uYW1lKFwib3V0ZXJcIik7XG4gICAgICAgICAgICBnZW4ubGFiZWwob3V0ZXIpLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgJHtqfSA9ICR7aX07ICR7an0tLTtgLCAoKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcWx9KCR7ZGF0YX1bJHtpfV0sICR7ZGF0YX1bJHtqfV0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhayhvdXRlcik7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gY29uc3RhbnRcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZTogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnN0XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWFDb2RlLCBzY2hlbWEgfSA9IGN4dDtcbiAgICAgICAgaWYgKCRkYXRhIHx8IChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KX0oJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfSAhPT0gJHtkYXRhfWApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1wiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlczogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImVudW1cIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVudW0gbXVzdCBoYXZlIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gaXQub3B0cy5sb29wRW51bTtcbiAgICAgICAgbGV0IGVxbDtcbiAgICAgICAgY29uc3QgZ2V0RXFsID0gKCkgPT4gKGVxbCAhPT0gbnVsbCAmJiBlcWwgIT09IHZvaWQgMCA/IGVxbCA6IChlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KSkpO1xuICAgICAgICBsZXQgdmFsaWQ7XG4gICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCBsb29wRW51bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IHZTY2hlbWEgPSBnZW4uY29uc3QoXCJ2U2NoZW1hXCIsIHNjaGVtYUNvZGUpO1xuICAgICAgICAgICAgdmFsaWQgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5zY2hlbWEubWFwKChfeCwgaSkgPT4gZXF1YWxDb2RlKHZTY2hlbWEsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiBsb29wRW51bSgpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInZcIiwgc2NoZW1hQ29kZSwgKHYpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3Z9KWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlcXVhbENvZGUodlNjaGVtYSwgaSkge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2ldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzY2ggPT09IFwib2JqZWN0XCIgJiYgc2NoICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3ZTY2hlbWF9WyR7aX1dKWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09ICR7c2NofWA7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGxpbWl0TnVtYmVyXzEgPSByZXF1aXJlKFwiLi9saW1pdE51bWJlclwiKTtcbmNvbnN0IG11bHRpcGxlT2ZfMSA9IHJlcXVpcmUoXCIuL211bHRpcGxlT2ZcIik7XG5jb25zdCBsaW1pdExlbmd0aF8xID0gcmVxdWlyZShcIi4vbGltaXRMZW5ndGhcIik7XG5jb25zdCBwYXR0ZXJuXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuXCIpO1xuY29uc3QgbGltaXRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9saW1pdFByb3BlcnRpZXNcIik7XG5jb25zdCByZXF1aXJlZF8xID0gcmVxdWlyZShcIi4vcmVxdWlyZWRcIik7XG5jb25zdCBsaW1pdEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9saW1pdEl0ZW1zXCIpO1xuY29uc3QgdW5pcXVlSXRlbXNfMSA9IHJlcXVpcmUoXCIuL3VuaXF1ZUl0ZW1zXCIpO1xuY29uc3QgY29uc3RfMSA9IHJlcXVpcmUoXCIuL2NvbnN0XCIpO1xuY29uc3QgZW51bV8xID0gcmVxdWlyZShcIi4vZW51bVwiKTtcbmNvbnN0IHZhbGlkYXRpb24gPSBbXG4gICAgLy8gbnVtYmVyXG4gICAgbGltaXROdW1iZXJfMS5kZWZhdWx0LFxuICAgIG11bHRpcGxlT2ZfMS5kZWZhdWx0LFxuICAgIC8vIHN0cmluZ1xuICAgIGxpbWl0TGVuZ3RoXzEuZGVmYXVsdCxcbiAgICBwYXR0ZXJuXzEuZGVmYXVsdCxcbiAgICAvLyBvYmplY3RcbiAgICBsaW1pdFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIHJlcXVpcmVkXzEuZGVmYXVsdCxcbiAgICAvLyBhcnJheVxuICAgIGxpbWl0SXRlbXNfMS5kZWZhdWx0LFxuICAgIHVuaXF1ZUl0ZW1zXzEuZGVmYXVsdCxcbiAgICAvLyBhbnlcbiAgICB7IGtleXdvcmQ6IFwidHlwZVwiLCBzY2hlbWFUeXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiXSB9LFxuICAgIHsga2V5d29yZDogXCJudWxsYWJsZVwiLCBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIiB9LFxuICAgIGNvbnN0XzEuZGVmYXVsdCxcbiAgICBlbnVtXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWQgd2hlbiBcIml0ZW1zXCIgaXMgbm90IGFuIGFycmF5IG9mIHNjaGVtYXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbGVuOiBpdGVtcy5sZW5ndGggfSk7XG4gICAgICAgIGN4dC5wYXNzKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi52YXIoXCJ2YWxpZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXModmFsaWQpIHtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBpdGVtcy5sZW5ndGgsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYXJyYXlcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVHVwbGUoY3h0LCBcImFkZGl0aW9uYWxJdGVtc1wiLCBzY2hlbWEpO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZVR1cGxlKGN4dCwgZXh0cmFJdGVtcywgc2NoQXJyID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tTdHJpY3RUdXBsZShwYXJlbnRTY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHNjaEFyci5sZW5ndGggJiYgaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hBcnIubGVuZ3RoLCBpdC5pdGVtcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+ICR7aX1gLCAoKSA9PiBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgIH0sIHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY2hlY2tTdHJpY3RUdXBsZShzY2gpIHtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbCA9IHNjaEFyci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGxUdXBsZSA9IGwgPT09IHNjaC5taW5JdGVtcyAmJiAobCA9PT0gc2NoLm1heEl0ZW1zIHx8IHNjaFtleHRyYUl0ZW1zXSA9PT0gZmFsc2UpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RUdXBsZXMgJiYgIWZ1bGxUdXBsZSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYFwiJHtrZXl3b3JkfVwiIGlzICR7bH0tdHVwbGUsIGJ1dCBtaW5JdGVtcyBvciBtYXhJdGVtcy8ke2V4dHJhSXRlbXN9IGFyZSBub3Qgc3BlY2lmaWVkIG9yIGRpZmZlcmVudCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBvcHRzLnN0cmljdFR1cGxlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2YWxpZGF0ZVR1cGxlO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByZWZpeEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImFycmF5XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGU6IChjeHQpID0+ICgwLCBpdGVtc18xLnZhbGlkYXRlVHVwbGUpKGN4dCwgXCJpdGVtc1wiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVmaXhJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gdmFsaWQgaXRlbShzKWBcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gYW5kIG5vIG1vcmUgdGhhbiAke21heH0gdmFsaWQgaXRlbShzKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZCA/ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufSwgbWF4Q29udGFpbnM6ICR7bWF4fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBsZXQgbWluO1xuICAgICAgICBsZXQgbWF4O1xuICAgICAgICBjb25zdCB7IG1pbkNvbnRhaW5zLCBtYXhDb250YWlucyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoaXQub3B0cy5uZXh0KSB7XG4gICAgICAgICAgICBtaW4gPSBtaW5Db250YWlucyA9PT0gdW5kZWZpbmVkID8gMSA6IG1pbkNvbnRhaW5zO1xuICAgICAgICAgICAgbWF4ID0gbWF4Q29udGFpbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaW4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWluLCBtYXggfSk7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDApIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA9PSAwIHdpdGhvdXQgXCJtYXhDb250YWluc1wiOiBcImNvbnRhaW5zXCIga2V5d29yZCBpZ25vcmVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1pbiA+IG1heCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID4gXCJtYXhDb250YWluc1wiIGlzIGFsd2F5cyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgbGV0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPj0gJHttaW59YDtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2xlbn0gPD0gJHttYXh9YDtcbiAgICAgICAgICAgIGN4dC5wYXNzKGNvbmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAxKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHZhbGlkLCAoKSA9PiBnZW4uaWYodmFsaWQsICgpID0+IGdlbi5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggPiAwYCwgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VuLmxldChcImNvdW50XCIsIDApO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyhzY2hWYWxpZCwgKCkgPT4gZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiBjaGVja0xpbWl0cyhjb3VudCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKF92YWxpZCwgYmxvY2spIHtcbiAgICAgICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgICAgIGJsb2NrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xpbWl0cyhjb3VudCkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0rK2ApO1xuICAgICAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID4gJHttYXh9YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGFpbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IGV4cG9ydHMuZXJyb3IgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuZXhwb3J0cy5lcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlfaWVzID0gZGVwc0NvdW50ID09PSAxID8gXCJwcm9wZXJ0eVwiIDogXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSAke3Byb3BlcnR5X2llc30gJHtkZXBzfSB3aGVuIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIHByZXNlbnRgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcywgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5OiAke3Byb3BlcnR5fSxcbiAgICBtaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fSxcbiAgICBkZXBzQ291bnQ6ICR7ZGVwc0NvdW50fSxcbiAgICBkZXBzOiAke2RlcHN9fWAsIC8vIFRPRE8gY2hhbmdlIHRvIHJlZmVyZW5jZVxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRlcGVuZGVuY2llc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcjogZXhwb3J0cy5lcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaERlcHNdID0gc3BsaXREZXBlbmRlbmNpZXMoY3h0KTtcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wRGVwcyk7XG4gICAgICAgIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaERlcHMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gc3BsaXREZXBlbmRlbmNpZXMoeyBzY2hlbWEgfSkge1xuICAgIGNvbnN0IHByb3BlcnR5RGVwcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYURlcHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBkZXBzID0gQXJyYXkuaXNBcnJheShzY2hlbWFba2V5XSkgPyBwcm9wZXJ0eURlcHMgOiBzY2hlbWFEZXBzO1xuICAgICAgICBkZXBzW2tleV0gPSBzY2hlbWFba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm9wZXJ0eURlcHMsIHNjaGVtYURlcHNdO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wZXJ0eURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnR5RGVwcykubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wZXJ0eURlcHMpIHtcbiAgICAgICAgY29uc3QgZGVwcyA9IHByb3BlcnR5RGVwc1twcm9wXTtcbiAgICAgICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGhhc1Byb3BlcnR5ID0gKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgZGVwc0NvdW50OiBkZXBzLmxlbmd0aCxcbiAgICAgICAgICAgIGRlcHM6IGRlcHMuam9pbihcIiwgXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgZ2VuLmlmKGhhc1Byb3BlcnR5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBQcm9wIG9mIGRlcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIGRlcFByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcGVydHl9ICYmICgkeygwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBkZXBzLCBtaXNzaW5nKX0pYCk7XG4gICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSB2YWxpZGF0ZVByb3BlcnR5RGVwcztcbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaGVtYURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY2hlbWFEZXBzKSB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hRGVwc1twcm9wXSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIHNjaGVtYVByb3A6IHByb3AgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgIH0sICgpID0+IGdlbi52YXIodmFsaWQsIHRydWUpIC8vIFRPRE8gdmFyXG4gICAgICAgICk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSB2YWxpZGF0ZVNjaGVtYURlcHM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBlbmRlbmNpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJwcm9wZXJ0eSBuYW1lIG11c3QgYmUgdmFsaWRcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHlOYW1lOiAke3BhcmFtcy5wcm9wZXJ0eU5hbWV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwcm9wZXJ0eU5hbWU6IGtleSB9KTtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHlOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXNcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWRkaXRpb25hbFByb3BlcnR5OiAke3BhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBbXCJvYmplY3RcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBhbGxvd1VuZGVmaW5lZDogdHJ1ZSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGVycnNDb3VudCwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghZXJyc0NvdW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB7IGFsbEVycm9ycywgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGl0LnByb3BzID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAhPT0gXCJhbGxcIiAmJiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcGF0UHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKTtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BzLmxlbmd0aCAmJiAhcGF0UHJvcHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoaXNBZGRpdGlvbmFsKGtleSksICgpID0+IGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0FkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBsZXQgZGVmaW5lZFByb3A7XG4gICAgICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gOCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbWF5YmUgYW4gb3B0aW9uIGluc3RlYWQgb2YgaGFyZC1jb2RlZCA4P1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzU2NoZW1hID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzLCBcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZV8xLmlzT3duUHJvcGVydHkpKGdlbiwgcHJvcHNTY2hlbWEsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl9ID09PSAke3B9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdFByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoZGVmaW5lZFByb3AsIC4uLnBhdFByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcCl9LnRlc3QoJHtrZXl9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm5vdCkoZGVmaW5lZFByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBkZWxldGUgJHtkYXRhfVske2tleX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgfHwgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAmJiBzY2hlbWEgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBhZGRpdGlvbmFsUHJvcGVydHk6IGtleSB9KTtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJmYWlsaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5TdHIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN1YnNjaGVtYSwge1xuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYShzdWJzY2hlbWEsIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiICYmIHBhcmVudFNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQuY29kZShuZXcgdmFsaWRhdGVfMS5LZXl3b3JkQ3h0KGl0LCBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsbFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBhbGxQcm9wcy5sZW5ndGggJiYgaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgKDAsIHV0aWxfMS50b0hhc2gpKGFsbFByb3BzKSwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhbGxQcm9wcy5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGhhc0RlZmF1bHQocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmVsc2UoKS52YXIodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0Lml0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzRGVmYXVsdChwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZSAmJiBzY2hlbWFbcHJvcF0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCkge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcHJvcCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogcHJvcCxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIGN4dC5mYWlsUmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgIH0sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IE5PVCBiZSB2YWxpZFwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFueU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGU6IGNvZGVfMS52YWxpZGF0ZVVuaW9uLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiBhbnlPZlwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW55T2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXNzaW5nU2NoZW1hczogJHtwYXJhbXMucGFzc2luZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMuZGlzY3JpbWluYXRvciAmJiBwYXJlbnRTY2hlbWEuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoQXJyID0gc2NoZW1hO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBhc3NpbmcgPSBnZW4ubGV0KFwicGFzc2luZ1wiLCBudWxsKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IHBhc3NpbmcgfSk7XG4gICAgICAgIC8vIFRPRE8gcG9zc2libHkgZmFpbCBzdHJhaWdodCBhd2F5ICh3aXRoIHdhcm5pbmcgb3IgZXhjZXB0aW9uKSBpZiB0aGVyZSBhcmUgdHdvIGVtcHR5IGFsd2F5cyB2YWxpZCBzY2hlbWFzXG4gICAgICAgIGdlbi5ibG9jayh2YWxpZGF0ZU9uZU9mKTtcbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlT25lT2YoKSB7XG4gICAgICAgICAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaEN4dDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcihzY2hWYWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGAke3NjaFZhbGlkfSAmJiAke3ZhbGlkfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHZhbGlkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24ocGFzc2luZywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7cGFzc2luZ30sICR7aX1dYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbHNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihwYXNzaW5nLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaEN4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbmVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFsbE9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBzY2hlbWEuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwiYWxsT2ZcIiwgc2NoZW1hUHJvcDogaSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBcIiR7cGFyYW1zLmlmQ2xhdXNlfVwiIHNjaGVtYWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2ZhaWxpbmdLZXl3b3JkOiAke3BhcmFtcy5pZkNsYXVzZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZlwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS50aGVuID09PSB1bmRlZmluZWQgJiYgcGFyZW50U2NoZW1hLmVsc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJpZlwiIHdpdGhvdXQgXCJ0aGVuXCIgYW5kIFwiZWxzZVwiIGlzIGlnbm9yZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNUaGVuID0gaGFzU2NoZW1hKGl0LCBcInRoZW5cIik7XG4gICAgICAgIGNvbnN0IGhhc0Vsc2UgPSBoYXNTY2hlbWEoaXQsIFwiZWxzZVwiKTtcbiAgICAgICAgaWYgKCFoYXNUaGVuICYmICFoYXNFbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgdmFsaWRhdGVJZigpO1xuICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgaWYgKGhhc1RoZW4gJiYgaGFzRWxzZSkge1xuICAgICAgICAgICAgY29uc3QgaWZDbGF1c2UgPSBnZW4ubGV0KFwiaWZDbGF1c2VcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2UgfSk7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiLCBpZkNsYXVzZSksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiLCBpZkNsYXVzZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1RoZW4pIHtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoc2NoVmFsaWQpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIikpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUlmKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJpZlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVDbGF1c2Uoa2V5d29yZCwgaWZDbGF1c2UpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWZDbGF1c2UpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaWZDbGF1c2UsICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5d29yZH1gKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZToga2V5d29yZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGhhc1NjaGVtYShpdCwga2V5d29yZCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICByZXR1cm4gc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IHByZWZpeEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9wcmVmaXhJdGVtc1wiKTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGl0ZW1zMjAyMF8xID0gcmVxdWlyZShcIi4vaXRlbXMyMDIwXCIpO1xuY29uc3QgY29udGFpbnNfMSA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zXCIpO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBwcm9wZXJ0eU5hbWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0eU5hbWVzXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcHJvcGVydGllc1wiKTtcbmNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuUHJvcGVydGllc1wiKTtcbmNvbnN0IG5vdF8xID0gcmVxdWlyZShcIi4vbm90XCIpO1xuY29uc3QgYW55T2ZfMSA9IHJlcXVpcmUoXCIuL2FueU9mXCIpO1xuY29uc3Qgb25lT2ZfMSA9IHJlcXVpcmUoXCIuL29uZU9mXCIpO1xuY29uc3QgYWxsT2ZfMSA9IHJlcXVpcmUoXCIuL2FsbE9mXCIpO1xuY29uc3QgaWZfMSA9IHJlcXVpcmUoXCIuL2lmXCIpO1xuY29uc3QgdGhlbkVsc2VfMSA9IHJlcXVpcmUoXCIuL3RoZW5FbHNlXCIpO1xuZnVuY3Rpb24gZ2V0QXBwbGljYXRvcihkcmFmdDIwMjAgPSBmYWxzZSkge1xuICAgIGNvbnN0IGFwcGxpY2F0b3IgPSBbXG4gICAgICAgIC8vIGFueVxuICAgICAgICBub3RfMS5kZWZhdWx0LFxuICAgICAgICBhbnlPZl8xLmRlZmF1bHQsXG4gICAgICAgIG9uZU9mXzEuZGVmYXVsdCxcbiAgICAgICAgYWxsT2ZfMS5kZWZhdWx0LFxuICAgICAgICBpZl8xLmRlZmF1bHQsXG4gICAgICAgIHRoZW5FbHNlXzEuZGVmYXVsdCxcbiAgICAgICAgLy8gb2JqZWN0XG4gICAgICAgIHByb3BlcnR5TmFtZXNfMS5kZWZhdWx0LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIGRlcGVuZGVuY2llc18xLmRlZmF1bHQsXG4gICAgICAgIHByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwYXR0ZXJuUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgXTtcbiAgICAvLyBhcnJheVxuICAgIGlmIChkcmFmdDIwMjApXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChwcmVmaXhJdGVtc18xLmRlZmF1bHQsIGl0ZW1zMjAyMF8xLmRlZmF1bHQpO1xuICAgIGVsc2VcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKGFkZGl0aW9uYWxJdGVtc18xLmRlZmF1bHQsIGl0ZW1zXzEuZGVmYXVsdCk7XG4gICAgYXBwbGljYXRvci5wdXNoKGNvbnRhaW5zXzEuZGVmYXVsdCk7XG4gICAgcmV0dXJuIGFwcGxpY2F0b3I7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBnZXRBcHBsaWNhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBmb3JtYXQgXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7Zm9ybWF0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZm9ybWF0XCIsXG4gICAgdHlwZTogW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQsIHJ1bGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGgsIHNjaGVtYUVudiwgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGlmICghb3B0cy52YWxpZGF0ZUZvcm1hdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICgkZGF0YSlcbiAgICAgICAgICAgIHZhbGlkYXRlJERhdGFGb3JtYXQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXQoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGUkRGF0YUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZtdHMgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogc2VsZi5mb3JtYXRzLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmRGVmID0gZ2VuLmNvbnN0KFwiZkRlZlwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdHN9WyR7c2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjb25zdCBmVHlwZSA9IGdlbi5sZXQoXCJmVHlwZVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGdlbi5sZXQoXCJmb3JtYXRcIik7XG4gICAgICAgICAgICAvLyBUT0RPIHNpbXBsaWZ5XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZkRlZn0gPT0gXCJvYmplY3RcIiAmJiAhKCR7ZkRlZn0gaW5zdGFuY2VvZiBSZWdFeHApYCwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS50eXBlIHx8IFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnZhbGlkYXRlYCksICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCBmRGVmKSk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEub3IpKHVua25vd25GbXQoKSwgaW52YWxpZEZtdCgpKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm10KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICYmICEke2Zvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaW52YWxpZEZtdCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsRm9ybWF0ID0gc2NoZW1hRW52LiRhc3luY1xuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCgke2ZEZWZ9LmFzeW5jID8gYXdhaXQgJHtmb3JtYXR9KCR7ZGF0YX0pIDogJHtmb3JtYXR9KCR7ZGF0YX0pKWBcbiAgICAgICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCh0eXBlb2YgJHtmb3JtYXR9ID09IFwiZnVuY3Rpb25cIiA/ICR7Y2FsbEZvcm1hdH0gOiAke2Zvcm1hdH0udGVzdCgke2RhdGF9KSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0gJiYgJHtmb3JtYXR9ICE9PSB0cnVlICYmICR7ZlR5cGV9ID09PSAke3J1bGVUeXBlfSAmJiAhJHt2YWxpZERhdGF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdERlZiA9IHNlbGYuZm9ybWF0c1tzY2hlbWFdO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXREZWYpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duRm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBbZm10VHlwZSwgZm9ybWF0LCBmbXRSZWZdID0gZ2V0Rm9ybWF0KGZvcm1hdERlZik7XG4gICAgICAgICAgICBpZiAoZm10VHlwZSA9PT0gcnVsZVR5cGUpXG4gICAgICAgICAgICAgICAgY3h0LnBhc3ModmFsaWRDb25kaXRpb24oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm9ybWF0KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Nc2coKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgdW5rbm93biBmb3JtYXQgXCIke3NjaGVtYX1cIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRGb3JtYXQoZm10RGVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEucmVnZXhwQ29kZSkoZm10RGVmKVxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMuY29kZS5mb3JtYXRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWEpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7IGtleTogc2NoZW1hLCByZWY6IGZtdERlZiwgY29kZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2ZtdERlZi50eXBlIHx8IFwic3RyaW5nXCIsIGZtdERlZi52YWxpZGF0ZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXR9LnZhbGlkYXRlYF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJzdHJpbmdcIiwgZm10RGVmLCBmbXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRDb25kaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZvcm1hdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgZm9ybWF0RGVmLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7Zm10UmVmfSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZm9ybWF0ID09IFwiZnVuY3Rpb25cIiA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfSgke2RhdGF9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0udGVzdCgke2RhdGF9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IGV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gdm9pZCAwO1xuZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSBbXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcInJlYWRPbmx5XCIsXG4gICAgXCJ3cml0ZU9ubHlcIixcbiAgICBcImV4YW1wbGVzXCIsXG5dO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IFtcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFwcGxpY2F0b3JfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2F0b3JcIik7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGRyYWZ0N1ZvY2FidWxhcmllcyA9IFtcbiAgICBjb3JlXzEuZGVmYXVsdCxcbiAgICB2YWxpZGF0aW9uXzEuZGVmYXVsdCxcbiAgICAoMCwgYXBwbGljYXRvcl8xLmRlZmF1bHQpKCksXG4gICAgZm9ybWF0XzEuZGVmYXVsdCxcbiAgICBtZXRhZGF0YV8xLm1ldGFkYXRhVm9jYWJ1bGFyeSxcbiAgICBtZXRhZGF0YV8xLmNvbnRlbnRWb2NhYnVsYXJ5LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0N1ZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0Ny5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaXNjckVycm9yID0gdm9pZCAwO1xudmFyIERpc2NyRXJyb3I7XG4oZnVuY3Rpb24gKERpc2NyRXJyb3IpIHtcbiAgICBEaXNjckVycm9yW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICBEaXNjckVycm9yW1wiTWFwcGluZ1wiXSA9IFwibWFwcGluZ1wiO1xufSkoRGlzY3JFcnJvciB8fCAoZXhwb3J0cy5EaXNjckVycm9yID0gRGlzY3JFcnJvciA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vZGlzY3JpbWluYXRvci90eXBlc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZ05hbWUgfSB9KSA9PiBkaXNjckVycm9yID09PSB0eXBlc18xLkRpc2NyRXJyb3IuVGFnXG4gICAgICAgID8gYHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHN0cmluZ2BcbiAgICAgICAgOiBgdmFsdWUgb2YgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgaW4gb25lT2ZgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZywgdGFnTmFtZSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtlcnJvcjogJHtkaXNjckVycm9yfSwgdGFnOiAke3RhZ05hbWV9LCB0YWdWYWx1ZTogJHt0YWd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGlzY3JpbWluYXRvclwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb25lT2YgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLmRpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIGRpc2NyaW1pbmF0b3Igb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBzY2hlbWEucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAodHlwZW9mIHRhZ05hbWUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIHByb3BlcnR5TmFtZVwiKTtcbiAgICAgICAgaWYgKHNjaGVtYS5tYXBwaW5nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogbWFwcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICBpZiAoIW9uZU9mKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgb25lT2Yga2V5d29yZFwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCB0YWcgPSBnZW4uY29uc3QoXCJ0YWdcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkodGFnTmFtZSl9YCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHt0YWd9ID09IFwic3RyaW5nXCJgLCAoKSA9PiB2YWxpZGF0ZU1hcHBpbmcoKSwgKCkgPT4gY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5UYWcsIHRhZywgdGFnTmFtZSB9KSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTWFwcGluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRNYXBwaW5nKCk7XG4gICAgICAgICAgICBnZW4uaWYoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBpbiBtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke3RhZ30gPT09ICR7dGFnVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgYXBwbHlUYWdTY2hlbWEobWFwcGluZ1t0YWdWYWx1ZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLk1hcHBpbmcsIHRhZywgdGFnTmFtZSB9KTtcbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5VGFnU2NoZW1hKHNjaGVtYVByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJvbmVPZlwiLCBzY2hlbWFQcm9wIH0sIF92YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gX3ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE1hcHBpbmcoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvbmVPZk1hcHBpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFJlcXVpcmVkID0gaGFzUmVxdWlyZWQocGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIGxldCB0YWdSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZU9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaCA9IG9uZU9mW2ldO1xuICAgICAgICAgICAgICAgIGlmICgoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2gsIGl0LnNlbGYuUlVMRVMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IHNjaC4kcmVmO1xuICAgICAgICAgICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVJlZi5jYWxsKGl0LnNlbGYsIGl0LnNjaGVtYUVudi5yb290LCBpdC5iYXNlSWQsIHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2ggaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoID0gc2NoLnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IHJlZl9lcnJvcl8xLmRlZmF1bHQoaXQub3B0cy51cmlSZXNvbHZlciwgaXQuYmFzZUlkLCByZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wU2NoID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnByb3BlcnRpZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVt0YWdOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BTY2ggIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IG9uZU9mIHN1YnNjaGVtYXMgKG9yIHJlZmVyZW5jZWQgc2NoZW1hcykgbXVzdCBoYXZlIFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFnUmVxdWlyZWQgPSB0YWdSZXF1aXJlZCAmJiAodG9wUmVxdWlyZWQgfHwgaGFzUmVxdWlyZWQoc2NoKSk7XG4gICAgICAgICAgICAgICAgYWRkTWFwcGluZ3MocHJvcFNjaCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRhZ1JlcXVpcmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgbXVzdCBiZSByZXF1aXJlZGApO1xuICAgICAgICAgICAgcmV0dXJuIG9uZU9mTWFwcGluZztcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhhc1JlcXVpcmVkKHsgcmVxdWlyZWQgfSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJlcXVpcmVkKSAmJiByZXF1aXJlZC5pbmNsdWRlcyh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdzKHNjaCwgaSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2guY29uc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyhzY2guY29uc3QsIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2guZW51bSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIG9mIHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcInByb3BlcnRpZXMvJHt0YWdOYW1lfVwiIG11c3QgaGF2ZSBcImNvbnN0XCIgb3IgXCJlbnVtXCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRNYXBwaW5nKHRhZ1ZhbHVlLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YWdWYWx1ZSAhPSBcInN0cmluZ1wiIHx8IHRhZ1ZhbHVlIGluIG9uZU9mTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwiJHt0YWdOYW1lfVwiIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSBzdHJpbmdzYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uZU9mTWFwcGluZ1t0YWdWYWx1ZV0gPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaXNzaW5nUmVmRXJyb3IgPSBleHBvcnRzLlZhbGlkYXRpb25FcnJvciA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IGV4cG9ydHMuQWp2ID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IGRyYWZ0N18xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2RyYWZ0N1wiKTtcbmNvbnN0IGRpc2NyaW1pbmF0b3JfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yXCIpO1xuY29uc3QgZHJhZnQ3TWV0YVNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvblwiKTtcbmNvbnN0IE1FVEFfU1VQUE9SVF9EQVRBID0gW1wiL3Byb3BlcnRpZXNcIl07XG5jb25zdCBNRVRBX1NDSEVNQV9JRCA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWFcIjtcbmNsYXNzIEFqdiBleHRlbmRzIGNvcmVfMS5kZWZhdWx0IHtcbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICBzdXBlci5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIGRyYWZ0N18xLmRlZmF1bHQuZm9yRWFjaCgodikgPT4gdGhpcy5hZGRWb2NhYnVsYXJ5KHYpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRpc2NyaW1pbmF0b3JfMS5kZWZhdWx0KTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubWV0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWV0YVNjaGVtYSA9IHRoaXMub3B0cy4kZGF0YVxuICAgICAgICAgICAgPyB0aGlzLiRkYXRhTWV0YVNjaGVtYShkcmFmdDdNZXRhU2NoZW1hLCBNRVRBX1NVUFBPUlRfREFUQSlcbiAgICAgICAgICAgIDogZHJhZnQ3TWV0YVNjaGVtYTtcbiAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCBmYWxzZSk7XG4gICAgICAgIHRoaXMucmVmc1tcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hXCJdID0gTUVUQV9TQ0hFTUFfSUQ7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9XG4gICAgICAgICAgICBzdXBlci5kZWZhdWx0TWV0YSgpIHx8ICh0aGlzLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRCkgPyBNRVRBX1NDSEVNQV9JRCA6IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQWp2ID0gQWp2O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gQWp2O1xubW9kdWxlLmV4cG9ydHMuQWp2ID0gQWp2O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gQWp2O1xudmFyIHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2V5d29yZEN4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVfMS5LZXl3b3JkQ3h0OyB9IH0pO1xudmFyIGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLk5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2RlR2VuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuQ29kZUdlbjsgfSB9KTtcbnZhciB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWxpZGF0aW9uRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNaXNzaW5nUmVmRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZl9lcnJvcl8xLmRlZmF1bHQ7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hanYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybWF0TmFtZXMgPSBleHBvcnRzLmZhc3RGb3JtYXRzID0gZXhwb3J0cy5mdWxsRm9ybWF0cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGZtdERlZih2YWxpZGF0ZSwgY29tcGFyZSkge1xuICAgIHJldHVybiB7IHZhbGlkYXRlLCBjb21wYXJlIH07XG59XG5leHBvcnRzLmZ1bGxGb3JtYXRzID0ge1xuICAgIC8vIGRhdGU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBkYXRlOiBmbXREZWYoZGF0ZSwgY29tcGFyZURhdGUpLFxuICAgIC8vIGRhdGUtdGltZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIHRpbWU6IGZtdERlZih0aW1lLCBjb21wYXJlVGltZSksXG4gICAgXCJkYXRlLXRpbWVcIjogZm10RGVmKGRhdGVfdGltZSwgY29tcGFyZURhdGVUaW1lKSxcbiAgICAvLyBkdXJhdGlvbjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQVxuICAgIGR1cmF0aW9uOiAvXlAoPyEkKSgoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8oVCg/PVxcZCkoXFxkK0gpPyhcXGQrTSk/KFxcZCtTKT8pP3woXFxkK1cpPykkLyxcbiAgICB1cmksXG4gICAgXCJ1cmktcmVmZXJlbmNlXCI6IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopPyg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopPyg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2ksXG4gICAgLy8gdXJpLXRlbXBsYXRlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU3MFxuICAgIFwidXJpLXRlbXBsYXRlXCI6IC9eKD86KD86W15cXHgwMC1cXHgyMFwiJzw+JVxcXFxeYHt8fV18JVswLTlhLWZdezJ9KXxcXHtbKyMuLzs/Jj0sIUB8XT8oPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KD86LCg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8pKlxcfSkqJC9pLFxuICAgIC8vIEZvciB0aGUgc291cmNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NFxuICAgIC8vIEZvciB0ZXN0IGNhc2VzOiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvZGVtby91cmwtcmVnZXhcbiAgICB1cmw6IC9eKD86aHR0cHM/fGZ0cCk6XFwvXFwvKD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPyEoPzoxMHwxMjcpKD86XFwuXFxkezEsM30pezN9KSg/ISg/OjE2OVxcLjI1NHwxOTJcXC4xNjgpKD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSg/OlxcLig/OlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSstKSpbYS16MC05XFx1ezAwYTF9LVxcdXtmZmZmfV0rKSooPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfV17Mix9KSkpKD86OlxcZHsyLDV9KT8oPzpcXC9bXlxcc10qKT8kL2l1LFxuICAgIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgICBob3N0bmFtZTogL14oPz0uezEsMjUzfVxcLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXFwuPyQvaSxcbiAgICAvLyBvcHRpbWl6ZWQgaHR0cHM6Ly93d3cuc2FmYXJpYm9va3NvbmxpbmUuY29tL2xpYnJhcnkvdmlldy9yZWd1bGFyLWV4cHJlc3Npb25zLWNvb2tib29rLzk3ODA1OTY4MDI4MzcvY2gwN3MxNi5odG1sXG4gICAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgICBpcHY2OiAvXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSQvaSxcbiAgICByZWdleCxcbiAgICAvLyB1dWlkOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyXG4gICAgdXVpZDogL14oPzp1cm46dXVpZDopP1swLTlhLWZdezh9LSg/OlswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kL2ksXG4gICAgLy8gSlNPTi1wb2ludGVyOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMVxuICAgIC8vIHVyaSBmcmFnbWVudDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQVxuICAgIFwianNvbi1wb2ludGVyXCI6IC9eKD86XFwvKD86W15+L118fjB8fjEpKikqJC8sXG4gICAgXCJqc29uLXBvaW50ZXItdXJpLWZyYWdtZW50XCI6IC9eIyg/OlxcLyg/OlthLXowLTlfXFwtLiEkJicoKSorLDs6PUBdfCVbMC05YS1mXXsyfXx+MHx+MSkqKSokL2ksXG4gICAgLy8gcmVsYXRpdmUgSlNPTi1wb2ludGVyOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1sdWZmLXJlbGF0aXZlLWpzb24tcG9pbnRlci0wMFxuICAgIFwicmVsYXRpdmUtanNvbi1wb2ludGVyXCI6IC9eKD86MHxbMS05XVswLTldKikoPzojfCg/OlxcLyg/Oltefi9dfH4wfH4xKSopKikkLyxcbiAgICAvLyB0aGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHVzZWQgYnkgdGhlIG9wZW5hcGkgc3BlY2lmaWNhdGlvbjogaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4wI2RhdGEtdHlwZXNcbiAgICAvLyBieXRlOiBodHRwczovL2dpdGh1Yi5jb20vbWlndWVsbW90YS9pcy1iYXNlNjRcbiAgICBieXRlLFxuICAgIC8vIHNpZ25lZCAzMiBiaXQgaW50ZWdlclxuICAgIGludDMyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZUludDMyIH0sXG4gICAgLy8gc2lnbmVkIDY0IGJpdCBpbnRlZ2VyXG4gICAgaW50NjQ6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsaWRhdGU6IHZhbGlkYXRlSW50NjQgfSxcbiAgICAvLyBDLXR5cGUgZmxvYXRcbiAgICBmbG9hdDogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVOdW1iZXIgfSxcbiAgICAvLyBDLXR5cGUgZG91YmxlXG4gICAgZG91YmxlOiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZU51bWJlciB9LFxuICAgIC8vIGhpbnQgdG8gdGhlIFVJIHRvIGhpZGUgaW5wdXQgc3RyaW5nc1xuICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgIC8vIHVuY2hlY2tlZCBzdHJpbmcgcGF5bG9hZFxuICAgIGJpbmFyeTogdHJ1ZSxcbn07XG5leHBvcnRzLmZhc3RGb3JtYXRzID0ge1xuICAgIC4uLmV4cG9ydHMuZnVsbEZvcm1hdHMsXG4gICAgZGF0ZTogZm10RGVmKC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkJC8sIGNvbXBhcmVEYXRlKSxcbiAgICB0aW1lOiBmbXREZWYoL14oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2ksIGNvbXBhcmVUaW1lKSxcbiAgICBcImRhdGUtdGltZVwiOiBmbXREZWYoL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGRbdFxcc10oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KSQvaSwgY29tcGFyZURhdGVUaW1lKSxcbiAgICAvLyB1cmk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvaXMtbXktanNvbi12YWxpZC9ibG9iL21hc3Rlci9mb3JtYXRzLmpzXG4gICAgdXJpOiAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8pP1teXFxzXSokL2ksXG4gICAgXCJ1cmktcmVmZXJlbmNlXCI6IC9eKD86KD86W2Etel1bYS16MC05K1xcLS5dKjopP1xcLz9cXC8pPyg/OlteXFxcXFxccyNdW15cXHMjXSopPyg/OiNbXlxcXFxcXHNdKik/JC9pLFxuICAgIC8vIGVtYWlsIChzb3VyY2VzIGZyb20ganNlbiB2YWxpZGF0b3IpOlxuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjAxMzIzL3VzaW5nLWEtcmVndWxhci1leHByZXNzaW9uLXRvLXZhbGlkYXRlLWFuLWVtYWlsLWFkZHJlc3MjYW5zd2VyLTg4MjkzNjNcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxmdWwgdmlvbGF0aW9uJylcbiAgICBlbWFpbDogL15bYS16MC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8pKiQvaSxcbn07XG5leHBvcnRzLmZvcm1hdE5hbWVzID0gT2JqZWN0LmtleXMoZXhwb3J0cy5mdWxsRm9ybWF0cyk7XG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNhcHBlbmRpeC1DXG4gICAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xufVxuY29uc3QgREFURSA9IC9eKFxcZFxcZFxcZFxcZCktKFxcZFxcZCktKFxcZFxcZCkkLztcbmNvbnN0IERBWVMgPSBbMCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5mdW5jdGlvbiBkYXRlKHN0cikge1xuICAgIC8vIGZ1bGwtZGF0ZSBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgICBjb25zdCBtYXRjaGVzID0gREFURS5leGVjKHN0cik7XG4gICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgeWVhciA9ICttYXRjaGVzWzFdO1xuICAgIGNvbnN0IG1vbnRoID0gK21hdGNoZXNbMl07XG4gICAgY29uc3QgZGF5ID0gK21hdGNoZXNbM107XG4gICAgcmV0dXJuIChtb250aCA+PSAxICYmXG4gICAgICAgIG1vbnRoIDw9IDEyICYmXG4gICAgICAgIGRheSA+PSAxICYmXG4gICAgICAgIGRheSA8PSAobW9udGggPT09IDIgJiYgaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogREFZU1ttb250aF0pKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVEYXRlKGQxLCBkMikge1xuICAgIGlmICghKGQxICYmIGQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoZDEgPiBkMilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKGQxIDwgZDIpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICByZXR1cm4gMDtcbn1cbmNvbnN0IFRJTUUgPSAvXihcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpKFxcLlxcZCspPyh6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2k7XG5mdW5jdGlvbiB0aW1lKHN0ciwgd2l0aFRpbWVab25lKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IFRJTUUuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhvdXIgPSArbWF0Y2hlc1sxXTtcbiAgICBjb25zdCBtaW51dGUgPSArbWF0Y2hlc1syXTtcbiAgICBjb25zdCBzZWNvbmQgPSArbWF0Y2hlc1szXTtcbiAgICBjb25zdCB0aW1lWm9uZSA9IG1hdGNoZXNbNV07XG4gICAgcmV0dXJuICgoKGhvdXIgPD0gMjMgJiYgbWludXRlIDw9IDU5ICYmIHNlY29uZCA8PSA1OSkgfHxcbiAgICAgICAgKGhvdXIgPT09IDIzICYmIG1pbnV0ZSA9PT0gNTkgJiYgc2Vjb25kID09PSA2MCkpICYmXG4gICAgICAgICghd2l0aFRpbWVab25lIHx8IHRpbWVab25lICE9PSBcIlwiKSk7XG59XG5mdW5jdGlvbiBjb21wYXJlVGltZSh0MSwgdDIpIHtcbiAgICBpZiAoISh0MSAmJiB0MikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYTEgPSBUSU1FLmV4ZWModDEpO1xuICAgIGNvbnN0IGEyID0gVElNRS5leGVjKHQyKTtcbiAgICBpZiAoIShhMSAmJiBhMikpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdDEgPSBhMVsxXSArIGExWzJdICsgYTFbM10gKyAoYTFbNF0gfHwgXCJcIik7XG4gICAgdDIgPSBhMlsxXSArIGEyWzJdICsgYTJbM10gKyAoYTJbNF0gfHwgXCJcIik7XG4gICAgaWYgKHQxID4gdDIpXG4gICAgICAgIHJldHVybiAxO1xuICAgIGlmICh0MSA8IHQyKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG59XG5jb25zdCBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIGNvbnN0IGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICAgIHJldHVybiBkYXRlVGltZS5sZW5ndGggPT09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBjb21wYXJlRGF0ZVRpbWUoZHQxLCBkdDIpIHtcbiAgICBpZiAoIShkdDEgJiYgZHQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBbZDEsIHQxXSA9IGR0MS5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgICBjb25zdCBbZDIsIHQyXSA9IGR0Mi5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgICBjb25zdCByZXMgPSBjb21wYXJlRGF0ZShkMSwgZDIpO1xuICAgIGlmIChyZXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzIHx8IGNvbXBhcmVUaW1lKHQxLCB0Mik7XG59XG5jb25zdCBOT1RfVVJJX0ZSQUdNRU5UID0gL1xcL3w6LztcbmNvbnN0IFVSSSA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKikoPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG5mdW5jdGlvbiB1cmkoc3RyKSB7XG4gICAgLy8gaHR0cDovL2ptcndhcmUuY29tL2FydGljbGVzLzIwMDkvdXJpX3JlZ2V4cC9VUklfcmVnZXguaHRtbCArIG9wdGlvbmFsIHByb3RvY29sICsgcmVxdWlyZWQgXCIuXCJcbiAgICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cbmNvbnN0IEJZVEUgPSAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC9nbTtcbmZ1bmN0aW9uIGJ5dGUoc3RyKSB7XG4gICAgQllURS5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBCWVRFLnRlc3Qoc3RyKTtcbn1cbmNvbnN0IE1JTl9JTlQzMiA9IC0oMiAqKiAzMSk7XG5jb25zdCBNQVhfSU5UMzIgPSAyICoqIDMxIC0gMTtcbmZ1bmN0aW9uIHZhbGlkYXRlSW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPD0gTUFYX0lOVDMyICYmIHZhbHVlID49IE1JTl9JTlQzMjtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlSW50NjQodmFsdWUpIHtcbiAgICAvLyBKU09OIGFuZCBqYXZhc2NyaXB0IG1heCBJbnQgaXMgMioqNTMsIHNvIGFueSBpbnQgdGhhdCBwYXNzZXMgaXNJbnRlZ2VyIGlzIHZhbGlkIGZvciBJbnQ2NFxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKCkge1xuICAgIHJldHVybiB0cnVlO1xufVxuY29uc3QgWl9BTkNIT1IgPSAvW15cXFxcXVxcXFxaLztcbmZ1bmN0aW9uIHJlZ2V4KHN0cikge1xuICAgIGlmIChaX0FOQ0hPUi50ZXN0KHN0cikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBuZXcgUmVnRXhwKHN0cik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5nZXRFc21FeHBvcnROYW1lID0gZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJDb25jYXQgPSBleHBvcnRzLmFkZENvZGVBcmcgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5fQ29kZSA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMuSURFTlRJRklFUiA9IGV4cG9ydHMuX0NvZGVPck5hbWUgPSB2b2lkIDA7XG5jbGFzcyBfQ29kZU9yTmFtZSB7XG59XG5leHBvcnRzLl9Db2RlT3JOYW1lID0gX0NvZGVPck5hbWU7XG5leHBvcnRzLklERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmNsYXNzIE5hbWUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3Iocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIWV4cG9ydHMuSURFTlRJRklFUi50ZXN0KHMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5zdHIgPSBzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB7IFt0aGlzLnN0cl06IDEgfTtcbiAgICB9XG59XG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuY2xhc3MgX0NvZGUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiID8gW2NvZGVdIDogY29kZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07XG4gICAgICAgIHJldHVybiBpdGVtID09PSBcIlwiIHx8IGl0ZW0gPT09ICdcIlwiJztcbiAgICB9XG4gICAgZ2V0IHN0cigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX3N0cikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX3N0ciA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgocywgYykgPT4gYCR7c30ke2N9YCwgXCJcIikpKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fbmFtZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9uYW1lcyA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgobmFtZXMsIGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgICAgICAgICBuYW1lc1tjLnN0cl0gPSAobmFtZXNbYy5zdHJdIHx8IDApICsgMTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfSwge30pKSk7XG4gICAgfVxufVxuZXhwb3J0cy5fQ29kZSA9IF9Db2RlO1xuZXhwb3J0cy5uaWwgPSBuZXcgX0NvZGUoXCJcIik7XG5mdW5jdGlvbiBfKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb2RlID0gW3N0cnNbMF1dO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZENvZGVBcmcoY29kZSwgYXJnc1tpXSk7XG4gICAgICAgIGNvZGUucHVzaChzdHJzWysraV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Db2RlKGNvZGUpO1xufVxuZXhwb3J0cy5fID0gXztcbmNvbnN0IHBsdXMgPSBuZXcgX0NvZGUoXCIrXCIpO1xuZnVuY3Rpb24gc3RyKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHByID0gW3NhZmVTdHJpbmdpZnkoc3Ryc1swXSldO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGV4cHIucHVzaChwbHVzKTtcbiAgICAgICAgYWRkQ29kZUFyZyhleHByLCBhcmdzW2ldKTtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMsIHNhZmVTdHJpbmdpZnkoc3Ryc1srK2ldKSk7XG4gICAgfVxuICAgIG9wdGltaXplKGV4cHIpO1xuICAgIHJldHVybiBuZXcgX0NvZGUoZXhwcik7XG59XG5leHBvcnRzLnN0ciA9IHN0cjtcbmZ1bmN0aW9uIGFkZENvZGVBcmcoY29kZSwgYXJnKSB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIF9Db2RlKVxuICAgICAgICBjb2RlLnB1c2goLi4uYXJnLl9pdGVtcyk7XG4gICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgY29kZS5wdXNoKGFyZyk7XG4gICAgZWxzZVxuICAgICAgICBjb2RlLnB1c2goaW50ZXJwb2xhdGUoYXJnKSk7XG59XG5leHBvcnRzLmFkZENvZGVBcmcgPSBhZGRDb2RlQXJnO1xuZnVuY3Rpb24gb3B0aW1pemUoZXhwcikge1xuICAgIGxldCBpID0gMTtcbiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAoZXhwcltpXSA9PT0gcGx1cykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbWVyZ2VFeHBySXRlbXMoZXhwcltpIC0gMV0sIGV4cHJbaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4cHIuc3BsaWNlKGkgLSAxLCAzLCByZXMpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwcltpKytdID0gXCIrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRXhwckl0ZW1zKGEsIGIpIHtcbiAgICBpZiAoYiA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBpZiAoYSA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5hbWUgfHwgYVthLmxlbmd0aCAtIDFdICE9PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGIgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBgJHthLnNsaWNlKDAsIC0xKX0ke2J9XCJgO1xuICAgICAgICBpZiAoYlswXSA9PT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybiBhLnNsaWNlKDAsIC0xKSArIGIuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgJiYgYlswXSA9PT0gJ1wiJyAmJiAhKGEgaW5zdGFuY2VvZiBOYW1lKSlcbiAgICAgICAgcmV0dXJuIGBcIiR7YX0ke2Iuc2xpY2UoMSl9YDtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiBzdHJDb25jYXQoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLmVtcHR5U3RyKCkgPyBjMSA6IGMxLmVtcHR5U3RyKCkgPyBjMiA6IHN0ciBgJHtjMX0ke2MyfWA7XG59XG5leHBvcnRzLnN0ckNvbmNhdCA9IHN0ckNvbmNhdDtcbi8vIFRPRE8gZG8gbm90IGFsbG93IGFycmF5cyBoZXJlXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgeCA9PT0gbnVsbFxuICAgICAgICA/IHhcbiAgICAgICAgOiBzYWZlU3RyaW5naWZ5KEFycmF5LmlzQXJyYXkoeCkgPyB4LmpvaW4oXCIsXCIpIDogeCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUoc2FmZVN0cmluZ2lmeSh4KSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCBcIlxcXFx1MjAyOFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCBcIlxcXFx1MjAyOVwiKTtcbn1cbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IHNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkgPyBuZXcgX0NvZGUoYC4ke2tleX1gKSA6IF8gYFske2tleX1dYDtcbn1cbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbi8vRG9lcyBiZXN0IGVmZm9ydCB0byBmb3JtYXQgdGhlIG5hbWUgcHJvcGVybHlcbmZ1bmN0aW9uIGdldEVzbUV4cG9ydE5hbWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgX0NvZGUoYCR7a2V5fWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7a2V5fSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKTtcbn1cbmV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGdldEVzbUV4cG9ydE5hbWU7XG5mdW5jdGlvbiByZWdleHBDb2RlKHJ4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShyeC50b1N0cmluZygpKTtcbn1cbmV4cG9ydHMucmVnZXhwQ29kZSA9IHJlZ2V4cENvZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSA9IGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgfHwgKGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgPSB7fSkpO1xuZXhwb3J0cy52YXJLaW5kcyA9IHtcbiAgICBjb25zdDogbmV3IGNvZGVfMS5OYW1lKFwiY29uc3RcIiksXG4gICAgbGV0OiBuZXcgY29kZV8xLk5hbWUoXCJsZXRcIiksXG4gICAgdmFyOiBuZXcgY29kZV8xLk5hbWUoXCJ2YXJcIiksXG59O1xuY2xhc3MgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHsgcHJlZml4ZXMsIHBhcmVudCB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5fbmFtZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcHJlZml4ZXMgPSBwcmVmaXhlcztcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICB0b05hbWUobmFtZU9yUHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuYW1lT3JQcmVmaXggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IG5hbWVPclByZWZpeCA6IHRoaXMubmFtZShuYW1lT3JQcmVmaXgpO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IGNvZGVfMS5OYW1lKHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIF9uZXdOYW1lKHByZWZpeCkge1xuICAgICAgICBjb25zdCBuZyA9IHRoaXMuX25hbWVzW3ByZWZpeF0gfHwgdGhpcy5fbmFtZUdyb3VwKHByZWZpeCk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtuZy5pbmRleCsrfWA7XG4gICAgfVxuICAgIF9uYW1lR3JvdXAocHJlZml4KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoKF9iID0gKF9hID0gdGhpcy5fcGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuX3ByZWZpeGVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGFzKHByZWZpeCkpIHx8ICh0aGlzLl9wcmVmaXhlcyAmJiAhdGhpcy5fcHJlZml4ZXMuaGFzKHByZWZpeCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHByZWZpeCBcIiR7cHJlZml4fVwiIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc2NvcGVgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuX25hbWVzW3ByZWZpeF0gPSB7IHByZWZpeCwgaW5kZXg6IDAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TY29wZSA9IFNjb3BlO1xuY2xhc3MgVmFsdWVTY29wZU5hbWUgZXh0ZW5kcyBjb2RlXzEuTmFtZSB7XG4gICAgY29uc3RydWN0b3IocHJlZml4LCBuYW1lU3RyKSB7XG4gICAgICAgIHN1cGVyKG5hbWVTdHIpO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgICB9XG4gICAgc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHksIGl0ZW1JbmRleCB9KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zY29wZVBhdGggPSAoMCwgY29kZV8xLl8pIGAuJHtuZXcgY29kZV8xLk5hbWUocHJvcGVydHkpfVske2l0ZW1JbmRleH1dYDtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gVmFsdWVTY29wZU5hbWU7XG5jb25zdCBsaW5lID0gKDAsIGNvZGVfMS5fKSBgXFxuYDtcbmNsYXNzIFZhbHVlU2NvcGUgZXh0ZW5kcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuX3Njb3BlID0gb3B0cy5zY29wZTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IGxpbmUgOiBjb2RlXzEubmlsIH07XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xuICAgIH1cbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbHVlU2NvcGVOYW1lKHByZWZpeCwgdGhpcy5fbmV3TmFtZShwcmVmaXgpKTtcbiAgICB9XG4gICAgdmFsdWUobmFtZU9yUHJlZml4LCB2YWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh2YWx1ZS5yZWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IHJlZiBtdXN0IGJlIHBhc3NlZCBpbiB2YWx1ZVwiKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4IH0gPSBuYW1lO1xuICAgICAgICBjb25zdCB2YWx1ZUtleSA9IChfYSA9IHZhbHVlLmtleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsdWUucmVmO1xuICAgICAgICBsZXQgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgaWYgKHZzKSB7XG4gICAgICAgICAgICBjb25zdCBfbmFtZSA9IHZzLmdldCh2YWx1ZUtleSk7XG4gICAgICAgICAgICBpZiAoX25hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICB2cy5zZXQodmFsdWVLZXksIG5hbWUpO1xuICAgICAgICBjb25zdCBzID0gdGhpcy5fc2NvcGVbcHJlZml4XSB8fCAodGhpcy5fc2NvcGVbcHJlZml4XSA9IFtdKTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gcy5sZW5ndGg7XG4gICAgICAgIHNbaXRlbUluZGV4XSA9IHZhbHVlLnJlZjtcbiAgICAgICAgbmFtZS5zZXRWYWx1ZSh2YWx1ZSwgeyBwcm9wZXJ0eTogcHJlZml4LCBpdGVtSW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBnZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIGNvbnN0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiB2cy5nZXQoa2V5T3JSZWYpO1xuICAgIH1cbiAgICBzY29wZVJlZnMoc2NvcGVOYW1lLCB2YWx1ZXMgPSB0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS5zY29wZVBhdGggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgXCIke25hbWV9XCIgaGFzIG5vIHZhbHVlYCk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVfMS5fKSBgJHtzY29wZU5hbWV9JHtuYW1lLnNjb3BlUGF0aH1gO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2NvcGVDb2RlKHZhbHVlcyA9IHRoaXMuX3ZhbHVlcywgdXNlZFZhbHVlcywgZ2V0Q29kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkdWNlVmFsdWVzKHZhbHVlcywgKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lLnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWUudmFsdWUuY29kZTtcbiAgICAgICAgfSwgdXNlZFZhbHVlcywgZ2V0Q29kZSk7XG4gICAgfVxuICAgIF9yZWR1Y2VWYWx1ZXModmFsdWVzLCB2YWx1ZUNvZGUsIHVzZWRWYWx1ZXMgPSB7fSwgZ2V0Q29kZSkge1xuICAgICAgICBsZXQgY29kZSA9IGNvZGVfMS5uaWw7XG4gICAgICAgIGZvciAoY29uc3QgcHJlZml4IGluIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdnMgPSB2YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgICAgIGlmICghdnMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBuYW1lU2V0ID0gKHVzZWRWYWx1ZXNbcHJlZml4XSA9IHVzZWRWYWx1ZXNbcHJlZml4XSB8fCBuZXcgTWFwKCkpO1xuICAgICAgICAgICAgdnMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLlN0YXJ0ZWQpO1xuICAgICAgICAgICAgICAgIGxldCBjID0gdmFsdWVDb2RlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZiA9IHRoaXMub3B0cy5lczUgPyBleHBvcnRzLnZhcktpbmRzLnZhciA6IGV4cG9ydHMudmFyS2luZHMuY29uc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoMCwgY29kZV8xLl8pIGAke2NvZGV9JHtkZWZ9ICR7bmFtZX0gPSAke2N9OyR7dGhpcy5vcHRzLl9ufWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChjID0gZ2V0Q29kZSA9PT0gbnVsbCB8fCBnZXRDb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRDb2RlKG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7Y30ke3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXJyb3IobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5hbWVTZXQuc2V0KG5hbWUsIFVzZWRWYWx1ZVN0YXRlLkNvbXBsZXRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG59XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBWYWx1ZVNjb3BlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NvcGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub3IgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubm90ID0gZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5vcGVyYXRvcnMgPSBleHBvcnRzLnZhcktpbmRzID0gZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IGV4cG9ydHMuVmFsdWVTY29wZSA9IGV4cG9ydHMuU2NvcGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLnJlZ2V4cENvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSB2b2lkIDA7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuY29uc3Qgc2NvcGVfMSA9IHJlcXVpcmUoXCIuL3Njb3BlXCIpO1xudmFyIGNvZGVfMiA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ckNvbmNhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0ckNvbmNhdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFByb3BlcnR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuZ2V0UHJvcGVydHk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJpbmdpZnk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWdleHBDb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIucmVnZXhwQ29kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5OYW1lOyB9IH0pO1xudmFyIHNjb3BlXzIgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNjb3BlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlNjb3BlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsdWVTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5WYWx1ZVNjb3BlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsdWVTY29wZU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJLaW5kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi52YXJLaW5kczsgfSB9KTtcbmV4cG9ydHMub3BlcmF0b3JzID0ge1xuICAgIEdUOiBuZXcgY29kZV8xLl9Db2RlKFwiPlwiKSxcbiAgICBHVEU6IG5ldyBjb2RlXzEuX0NvZGUoXCI+PVwiKSxcbiAgICBMVDogbmV3IGNvZGVfMS5fQ29kZShcIjxcIiksXG4gICAgTFRFOiBuZXcgY29kZV8xLl9Db2RlKFwiPD1cIiksXG4gICAgRVE6IG5ldyBjb2RlXzEuX0NvZGUoXCI9PT1cIiksXG4gICAgTkVROiBuZXcgY29kZV8xLl9Db2RlKFwiIT09XCIpLFxuICAgIE5PVDogbmV3IGNvZGVfMS5fQ29kZShcIiFcIiksXG4gICAgT1I6IG5ldyBjb2RlXzEuX0NvZGUoXCJ8fFwiKSxcbiAgICBBTkQ6IG5ldyBjb2RlXzEuX0NvZGUoXCImJlwiKSxcbiAgICBBREQ6IG5ldyBjb2RlXzEuX0NvZGUoXCIrXCIpLFxufTtcbmNsYXNzIE5vZGUge1xuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKF9uYW1lcywgX2NvbnN0YW50cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5jbGFzcyBEZWYgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih2YXJLaW5kLCBuYW1lLCByaHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgfVxuICAgIHJlbmRlcih7IGVzNSwgX24gfSkge1xuICAgICAgICBjb25zdCB2YXJLaW5kID0gZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHJocyA9IHRoaXMucmhzID09PSB1bmRlZmluZWQgPyBcIlwiIDogYCA9ICR7dGhpcy5yaHN9YDtcbiAgICAgICAgcmV0dXJuIGAke3ZhcktpbmR9ICR7dGhpcy5uYW1lfSR7cmhzfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIW5hbWVzW3RoaXMubmFtZS5zdHJdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yaHMpXG4gICAgICAgICAgICB0aGlzLnJocyA9IG9wdGltaXplRXhwcih0aGlzLnJocywgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJocyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IHRoaXMucmhzLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgQXNzaWduIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGhzID0gbGhzO1xuICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICAgICAgdGhpcy5zaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxoc30gPSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAodGhpcy5saHMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiAhbmFtZXNbdGhpcy5saHMuc3RyXSAmJiAhdGhpcy5zaWRlRWZmZWN0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyB7fSA6IHsgLi4udGhpcy5saHMubmFtZXMgfTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy5yaHMpO1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbk9wIGV4dGVuZHMgQXNzaWduIHtcbiAgICBjb25zdHJ1Y3RvcihsaHMsIG9wLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHN1cGVyKGxocywgcmhzLCBzaWRlRWZmZWN0cyk7XG4gICAgICAgIHRoaXMub3AgPSBvcDtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ICR7dGhpcy5vcH09ICR7dGhpcy5yaHN9O2AgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBMYWJlbCBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5uYW1lcyA9IHt9O1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfTpgICsgX247XG4gICAgfVxufVxuY2xhc3MgQnJlYWsgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgPyBgICR7dGhpcy5sYWJlbH1gIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIGBicmVhayR7bGFiZWx9O2AgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBUaHJvdyBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYHRocm93ICR7dGhpcy5lcnJvcn07YCArIF9uO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yLm5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIEFueUNvZGUgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX07YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2RlfWAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdGhpcy5jb2RlID0gb3B0aW1pemVFeHByKHRoaXMuY29kZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvZGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLmNvZGUubmFtZXMgOiB7fTtcbiAgICB9XG59XG5jbGFzcyBQYXJlbnROb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3Iobm9kZXMgPSBbXSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5vZGVzID0gbm9kZXM7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLnJlZHVjZSgoY29kZSwgbikgPT4gY29kZSArIG4ucmVuZGVyKG9wdHMpLCBcIlwiKTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgY29uc3QgeyBub2RlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuKSlcbiAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSwgLi4ubik7XG4gICAgICAgICAgICBlbHNlIGlmIChuKVxuICAgICAgICAgICAgICAgIG5vZGVzW2ldID0gbjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgY29uc3QgeyBub2RlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGkgPSBub2Rlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGluZyBiYWNrd2FyZHMgaW1wcm92ZXMgMS1wYXNzIG9wdGltaXphdGlvblxuICAgICAgICAgICAgY29uc3QgbiA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKG4ub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHN1YnRyYWN0TmFtZXMobmFtZXMsIG4ubmFtZXMpO1xuICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKG5hbWVzLCBuKSA9PiBhZGROYW1lcyhuYW1lcywgbi5uYW1lcyksIHt9KTtcbiAgICB9XG59XG5jbGFzcyBCbG9ja05vZGUgZXh0ZW5kcyBQYXJlbnROb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJ7XCIgKyBvcHRzLl9uICsgc3VwZXIucmVuZGVyKG9wdHMpICsgXCJ9XCIgKyBvcHRzLl9uO1xuICAgIH1cbn1cbmNsYXNzIFJvb3QgZXh0ZW5kcyBQYXJlbnROb2RlIHtcbn1cbmNsYXNzIEVsc2UgZXh0ZW5kcyBCbG9ja05vZGUge1xufVxuRWxzZS5raW5kID0gXCJlbHNlXCI7XG5jbGFzcyBJZiBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29uZGl0aW9uLCBub2Rlcykge1xuICAgICAgICBzdXBlcihub2Rlcyk7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBsZXQgY29kZSA9IGBpZigke3RoaXMuY29uZGl0aW9ufSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5lbHNlKVxuICAgICAgICAgICAgY29kZSArPSBcImVsc2UgXCIgKyB0aGlzLmVsc2UucmVuZGVyKG9wdHMpO1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOb2RlcygpO1xuICAgICAgICBjb25zdCBjb25kID0gdGhpcy5jb25kaXRpb247XG4gICAgICAgIGlmIChjb25kID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXM7IC8vIGVsc2UgaXMgaWdub3JlZCBoZXJlXG4gICAgICAgIGxldCBlID0gdGhpcy5lbHNlO1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgY29uc3QgbnMgPSBlLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIGUgPSB0aGlzLmVsc2UgPSBBcnJheS5pc0FycmF5KG5zKSA/IG5ldyBFbHNlKG5zKSA6IG5zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBJZiA/IGUgOiBlLm5vZGVzO1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJZihub3QoY29uZCksIGUgaW5zdGFuY2VvZiBJZiA/IFtlXSA6IGUubm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kID09PSBmYWxzZSB8fCAhdGhpcy5ub2Rlcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5lbHNlID0gKF9hID0gdGhpcy5lbHNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgaWYgKCEoc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB8fCB0aGlzLmVsc2UpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IG9wdGltaXplRXhwcih0aGlzLmNvbmRpdGlvbiwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gc3VwZXIubmFtZXM7XG4gICAgICAgIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy5jb25kaXRpb24pO1xuICAgICAgICBpZiAodGhpcy5lbHNlKVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuZWxzZS5uYW1lcyk7XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG59XG5JZi5raW5kID0gXCJpZlwiO1xuY2xhc3MgRm9yIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkZvci5raW5kID0gXCJmb3JcIjtcbmNsYXNzIEZvckxvb3AgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKGl0ZXJhdGlvbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLml0ZXJhdGlvbiA9IGl0ZXJhdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt0aGlzLml0ZXJhdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gYWRkTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuaXRlcmF0aW9uLm5hbWVzKTtcbiAgICB9XG59XG5jbGFzcyBGb3JSYW5nZSBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgZnJvbSwgdG8pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5mcm9tID0gZnJvbTtcbiAgICAgICAgdGhpcy50byA9IHRvO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCB2YXJLaW5kID0gb3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHRoaXMudmFyS2luZDtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBmcm9tLCB0byB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt2YXJLaW5kfSAke25hbWV9PSR7ZnJvbX07ICR7bmFtZX08JHt0b307ICR7bmFtZX0rKylgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gYWRkRXhwck5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLmZyb20pO1xuICAgICAgICByZXR1cm4gYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLnRvKTtcbiAgICB9XG59XG5jbGFzcyBGb3JJdGVyIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihsb29wLCB2YXJLaW5kLCBuYW1lLCBpdGVyYWJsZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvb3AgPSBsb29wO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLml0ZXJhYmxlID0gaXRlcmFibGU7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy52YXJLaW5kfSAke3RoaXMubmFtZX0gJHt0aGlzLmxvb3B9ICR7dGhpcy5pdGVyYWJsZX0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IG9wdGltaXplRXhwcih0aGlzLml0ZXJhYmxlLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhYmxlLm5hbWVzKTtcbiAgICB9XG59XG5jbGFzcyBGdW5jIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBhcmdzLCBhc3luYykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgICAgICB0aGlzLmFzeW5jID0gYXN5bmM7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IF9hc3luYyA9IHRoaXMuYXN5bmMgPyBcImFzeW5jIFwiIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIGAke19hc3luY31mdW5jdGlvbiAke3RoaXMubmFtZX0oJHt0aGlzLmFyZ3N9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRnVuYy5raW5kID0gXCJmdW5jXCI7XG5jbGFzcyBSZXR1cm4gZXh0ZW5kcyBQYXJlbnROb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJyZXR1cm4gXCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuUmV0dXJuLmtpbmQgPSBcInJldHVyblwiO1xuY2xhc3MgVHJ5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBsZXQgY29kZSA9IFwidHJ5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmNhdGNoKVxuICAgICAgICAgICAgY29kZSArPSB0aGlzLmNhdGNoLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluYWxseSlcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5maW5hbGx5LnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgKF9hID0gdGhpcy5jYXRjaCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOb2RlcygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2IgPSB0aGlzLmZpbmFsbHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmNhdGNoLm5hbWVzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluYWxseSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmZpbmFsbHkubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuY2xhc3MgQ2F0Y2ggZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBjYXRjaCgke3RoaXMuZXJyb3J9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuQ2F0Y2gua2luZCA9IFwiY2F0Y2hcIjtcbmNsYXNzIEZpbmFsbHkgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcImZpbmFsbHlcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5GaW5hbGx5LmtpbmQgPSBcImZpbmFsbHlcIjtcbmNsYXNzIENvZGVHZW4ge1xuICAgIGNvbnN0cnVjdG9yKGV4dFNjb3BlLCBvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuX2Jsb2NrU3RhcnRzID0gW107XG4gICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuICAgICAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIF9uOiBvcHRzLmxpbmVzID8gXCJcXG5cIiA6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5fZXh0U2NvcGUgPSBleHRTY29wZTtcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBuZXcgc2NvcGVfMS5TY29wZSh7IHBhcmVudDogZXh0U2NvcGUgfSk7XG4gICAgICAgIHRoaXMuX25vZGVzID0gW25ldyBSb290KCldO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QucmVuZGVyKHRoaXMub3B0cyk7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdW5pcXVlIG5hbWUgaW4gdGhlIGludGVybmFsIHNjb3BlXG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlXG4gICAgc2NvcGVOYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUubmFtZShwcmVmaXgpO1xuICAgIH1cbiAgICAvLyByZXNlcnZlcyB1bmlxdWUgbmFtZSBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgYW5kIGFzc2lnbnMgdmFsdWUgdG8gaXRcbiAgICBzY29wZVZhbHVlKHByZWZpeE9yTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX2V4dFNjb3BlLnZhbHVlKHByZWZpeE9yTmFtZSwgdmFsdWUpO1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1tuYW1lLnByZWZpeF0gfHwgKHRoaXMuX3ZhbHVlc1tuYW1lLnByZWZpeF0gPSBuZXcgU2V0KCkpO1xuICAgICAgICB2cy5hZGQobmFtZSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBnZXRTY29wZVZhbHVlKHByZWZpeCwga2V5T3JSZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLmdldFZhbHVlKHByZWZpeCwga2V5T3JSZWYpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gY29kZSB0aGF0IGFzc2lnbnMgdmFsdWVzIGluIHRoZSBleHRlcm5hbCBzY29wZSB0byB0aGUgbmFtZXMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5XG4gICAgLy8gKHNhbWUgbmFtZXMgdGhhdCB3ZXJlIHJldHVybmVkIGJ5IGdlbi5zY29wZU5hbWUgb3IgZ2VuLnNjb3BlVmFsdWUpXG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuc2NvcGVSZWZzKHNjb3BlTmFtZSwgdGhpcy5fdmFsdWVzKTtcbiAgICB9XG4gICAgc2NvcGVDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuc2NvcGVDb2RlKHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIF9kZWYodmFyS2luZCwgbmFtZU9yUHJlZml4LCByaHMsIGNvbnN0YW50KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgaWYgKHJocyAhPT0gdW5kZWZpbmVkICYmIGNvbnN0YW50KVxuICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW25hbWUuc3RyXSA9IHJocztcbiAgICAgICAgdGhpcy5fbGVhZk5vZGUobmV3IERlZih2YXJLaW5kLCBuYW1lLCByaHMpKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIC8vIGBjb25zdGAgZGVjbGFyYXRpb24gKGB2YXJgIGluIGVzNSBtb2RlKVxuICAgIGNvbnN0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmNvbnN0LCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYGxldGAgZGVjbGFyYXRpb24gd2l0aCBvcHRpb25hbCBhc3NpZ25tZW50IChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBsZXQobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMubGV0LCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYHZhcmAgZGVjbGFyYXRpb24gd2l0aCBvcHRpb25hbCBhc3NpZ25tZW50XG4gICAgdmFyKG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLnZhciwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGFzc2lnbm1lbnQgY29kZVxuICAgIGFzc2lnbihsaHMsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSk7XG4gICAgfVxuICAgIC8vIGArPWAgY29kZVxuICAgIGFkZChsaHMsIHJocykge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEFzc2lnbk9wKGxocywgZXhwb3J0cy5vcGVyYXRvcnMuQURELCByaHMpKTtcbiAgICB9XG4gICAgLy8gYXBwZW5kcyBwYXNzZWQgU2FmZUV4cHIgdG8gY29kZSBvciBleGVjdXRlcyBCbG9ja1xuICAgIGNvZGUoYykge1xuICAgICAgICBpZiAodHlwZW9mIGMgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgYygpO1xuICAgICAgICBlbHNlIGlmIChjICE9PSBjb2RlXzEubmlsKVxuICAgICAgICAgICAgdGhpcy5fbGVhZk5vZGUobmV3IEFueUNvZGUoYykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gcmV0dXJucyBjb2RlIGZvciBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlIHBhc3NlZCBhcmd1bWVudCBsaXN0IG9mIGtleS12YWx1ZSBwYWlyc1xuICAgIG9iamVjdCguLi5rZXlWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IFtcIntcIl07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGtleVZhbHVlcykge1xuICAgICAgICAgICAgaWYgKGNvZGUubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICBjb2RlLnB1c2goXCIsXCIpO1xuICAgICAgICAgICAgY29kZS5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSB2YWx1ZSB8fCB0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiOlwiKTtcbiAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmFkZENvZGVBcmcpKGNvZGUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2RlLnB1c2goXCJ9XCIpO1xuICAgICAgICByZXR1cm4gbmV3IGNvZGVfMS5fQ29kZShjb2RlKTtcbiAgICB9XG4gICAgLy8gYGlmYCBjbGF1c2UgKG9yIHN0YXRlbWVudCBpZiBgdGhlbkJvZHlgIGFuZCwgb3B0aW9uYWxseSwgYGVsc2VCb2R5YCBhcmUgcGFzc2VkKVxuICAgIGlmKGNvbmRpdGlvbiwgdGhlbkJvZHksIGVsc2VCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgICAgIGlmICh0aGVuQm9keSAmJiBlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlKHRoZW5Cb2R5KS5lbHNlKCkuY29kZShlbHNlQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGVuQm9keSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlKHRoZW5Cb2R5KS5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVsc2VCb2R5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIGJvZHkgd2l0aG91dCBcInRoZW5cIiBib2R5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGBlbHNlIGlmYCBjbGF1c2UgLSBpbnZhbGlkIHdpdGhvdXQgYGlmYCBvciBhZnRlciBgZWxzZWAgY2xhdXNlc1xuICAgIGVsc2VJZihjb25kaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBJZihjb25kaXRpb24pKTtcbiAgICB9XG4gICAgLy8gYGVsc2VgIGNsYXVzZSAtIG9ubHkgdmFsaWQgYWZ0ZXIgYGlmYCBvciBgZWxzZSBpZmAgY2xhdXNlc1xuICAgIGVsc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgRWxzZSgpKTtcbiAgICB9XG4gICAgLy8gZW5kIGBpZmAgc3RhdGVtZW50IChuZWVkZWQgaWYgZ2VuLmlmIHdhcyB1c2VkIG9ubHkgd2l0aCBjb25kaXRpb24pXG4gICAgZW5kSWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoSWYsIEVsc2UpO1xuICAgIH1cbiAgICBfZm9yKG5vZGUsIGZvckJvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZm9yQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmb3JCb2R5KS5lbmRGb3IoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGEgZ2VuZXJpYyBgZm9yYCBjbGF1c2UgKG9yIHN0YXRlbWVudCBpZiBgZm9yQm9keWAgaXMgcGFzc2VkKVxuICAgIGZvcihpdGVyYXRpb24sIGZvckJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9yTG9vcChpdGVyYXRpb24pLCBmb3JCb2R5KTtcbiAgICB9XG4gICAgLy8gYGZvcmAgc3RhdGVtZW50IGZvciBhIHJhbmdlIG9mIHZhbHVlc1xuICAgIGZvclJhbmdlKG5hbWVPclByZWZpeCwgZnJvbSwgdG8sIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmxldCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvclJhbmdlKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3Itb2ZgIHN0YXRlbWVudCAoaW4gZXM1IG1vZGUgcmVwbGFjZSB3aXRoIGEgbm9ybWFsIGZvciBsb29wKVxuICAgIGZvck9mKG5hbWVPclByZWZpeCwgaXRlcmFibGUsIGZvckJvZHksIHZhcktpbmQgPSBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lczUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IGl0ZXJhYmxlIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBpdGVyYWJsZSA6IHRoaXMudmFyKFwiX2FyclwiLCBpdGVyYWJsZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JSYW5nZShcIl9pXCIsIDAsICgwLCBjb2RlXzEuXykgYCR7YXJyfS5sZW5ndGhgLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFyKG5hbWUsICgwLCBjb2RlXzEuXykgYCR7YXJyfVske2l9XWApO1xuICAgICAgICAgICAgICAgIGZvckJvZHkobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwib2ZcIiwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gYGZvci1pbmAgc3RhdGVtZW50LlxuICAgIC8vIFdpdGggb3B0aW9uIGBvd25Qcm9wZXJ0aWVzYCByZXBsYWNlZCB3aXRoIGEgYGZvci1vZmAgbG9vcCBmb3Igb2JqZWN0IGtleXNcbiAgICBmb3JJbihuYW1lT3JQcmVmaXgsIG9iaiwgZm9yQm9keSwgdmFyS2luZCA9IHRoaXMub3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHNjb3BlXzEudmFyS2luZHMuY29uc3QpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5vd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JPZihuYW1lT3JQcmVmaXgsICgwLCBjb2RlXzEuXykgYE9iamVjdC5rZXlzKCR7b2JqfSlgLCBmb3JCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckl0ZXIoXCJpblwiLCB2YXJLaW5kLCBuYW1lLCBvYmopLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gZW5kIGBmb3JgIGxvb3BcbiAgICBlbmRGb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoRm9yKTtcbiAgICB9XG4gICAgLy8gYGxhYmVsYCBzdGF0ZW1lbnRcbiAgICBsYWJlbChsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IExhYmVsKGxhYmVsKSk7XG4gICAgfVxuICAgIC8vIGBicmVha2Agc3RhdGVtZW50XG4gICAgYnJlYWsobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBCcmVhayhsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgcmV0dXJuYCBzdGF0ZW1lbnRcbiAgICByZXR1cm4odmFsdWUpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBSZXR1cm4oKTtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmNvZGUodmFsdWUpO1xuICAgICAgICBpZiAobm9kZS5ub2Rlcy5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwicmV0dXJuXCIgc2hvdWxkIGhhdmUgb25lIG5vZGUnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShSZXR1cm4pO1xuICAgIH1cbiAgICAvLyBgdHJ5YCBzdGF0ZW1lbnRcbiAgICB0cnkodHJ5Qm9keSwgY2F0Y2hDb2RlLCBmaW5hbGx5Q29kZSkge1xuICAgICAgICBpZiAoIWNhdGNoQ29kZSAmJiAhZmluYWxseUNvZGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwidHJ5XCIgd2l0aG91dCBcImNhdGNoXCIgYW5kIFwiZmluYWxseVwiJyk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJ5KCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHRyeUJvZHkpO1xuICAgICAgICBpZiAoY2F0Y2hDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubmFtZShcImVcIik7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuY2F0Y2ggPSBuZXcgQ2F0Y2goZXJyb3IpO1xuICAgICAgICAgICAgY2F0Y2hDb2RlKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmluYWxseUNvZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbm9kZS5maW5hbGx5ID0gbmV3IEZpbmFsbHkoKTtcbiAgICAgICAgICAgIHRoaXMuY29kZShmaW5hbGx5Q29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShDYXRjaCwgRmluYWxseSk7XG4gICAgfVxuICAgIC8vIGB0aHJvd2Agc3RhdGVtZW50XG4gICAgdGhyb3coZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBUaHJvdyhlcnJvcikpO1xuICAgIH1cbiAgICAvLyBzdGFydCBzZWxmLWJhbGFuY2luZyBibG9ja1xuICAgIGJsb2NrKGJvZHksIG5vZGVDb3VudCkge1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cy5wdXNoKHRoaXMuX25vZGVzLmxlbmd0aCk7XG4gICAgICAgIGlmIChib2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGJvZHkpLmVuZEJsb2NrKG5vZGVDb3VudCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBlbmQgdGhlIGN1cnJlbnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBlbmRCbG9jayhub2RlQ291bnQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5fYmxvY2tTdGFydHMucG9wKCk7XG4gICAgICAgIGlmIChsZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVHZW46IG5vdCBpbiBzZWxmLWJhbGFuY2luZyBibG9ja1wiKTtcbiAgICAgICAgY29uc3QgdG9DbG9zZSA9IHRoaXMuX25vZGVzLmxlbmd0aCAtIGxlbjtcbiAgICAgICAgaWYgKHRvQ2xvc2UgPCAwIHx8IChub2RlQ291bnQgIT09IHVuZGVmaW5lZCAmJiB0b0Nsb3NlICE9PSBub2RlQ291bnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IHdyb25nIG51bWJlciBvZiBub2RlczogJHt0b0Nsb3NlfSB2cyAke25vZGVDb3VudH0gZXhwZWN0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub2Rlcy5sZW5ndGggPSBsZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZnVuY3Rpb25gIGhlYWRpbmcgKG9yIGRlZmluaXRpb24gaWYgZnVuY0JvZHkgaXMgcGFzc2VkKVxuICAgIGZ1bmMobmFtZSwgYXJncyA9IGNvZGVfMS5uaWwsIGFzeW5jLCBmdW5jQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IEZ1bmMobmFtZSwgYXJncywgYXN5bmMpKTtcbiAgICAgICAgaWYgKGZ1bmNCb2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGZ1bmNCb2R5KS5lbmRGdW5jKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBlbmQgZnVuY3Rpb24gZGVmaW5pdGlvblxuICAgIGVuZEZ1bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoRnVuYyk7XG4gICAgfVxuICAgIG9wdGltaXplKG4gPSAxKSB7XG4gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Qub3B0aW1pemVOYW1lcyh0aGlzLl9yb290Lm5hbWVzLCB0aGlzLl9jb25zdGFudHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9sZWFmTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBfYmxvY2tOb2RlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgdGhpcy5fbm9kZXMucHVzaChub2RlKTtcbiAgICB9XG4gICAgX2VuZEJsb2NrTm9kZShOMSwgTjIpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAobiBpbnN0YW5jZW9mIE4xIHx8IChOMiAmJiBuIGluc3RhbmNlb2YgTjIpKSB7XG4gICAgICAgICAgICB0aGlzLl9ub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbm90IGluIGJsb2NrIFwiJHtOMiA/IGAke04xLmtpbmR9LyR7TjIua2luZH1gIDogTjEua2luZH1cImApO1xuICAgIH1cbiAgICBfZWxzZU5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBuID0gdGhpcy5fY3Vyck5vZGU7XG4gICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBJZikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJlbHNlXCIgd2l0aG91dCBcImlmXCInKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG4uZWxzZSA9IG5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgX3Jvb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1swXTtcbiAgICB9XG4gICAgZ2V0IF9jdXJyTm9kZSgpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLl9ub2RlcztcbiAgICAgICAgcmV0dXJuIG5zW25zLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBzZXQgX2N1cnJOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLl9ub2RlcztcbiAgICAgICAgbnNbbnMubGVuZ3RoIC0gMV0gPSBub2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29kZUdlbiA9IENvZGVHZW47XG5mdW5jdGlvbiBhZGROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSArIChmcm9tW25dIHx8IDApO1xuICAgIHJldHVybiBuYW1lcztcbn1cbmZ1bmN0aW9uIGFkZEV4cHJOYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIHJldHVybiBmcm9tIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gYWRkTmFtZXMobmFtZXMsIGZyb20ubmFtZXMpIDogbmFtZXM7XG59XG5mdW5jdGlvbiBvcHRpbWl6ZUV4cHIoZXhwciwgbmFtZXMsIGNvbnN0YW50cykge1xuICAgIGlmIChleHByIGluc3RhbmNlb2YgY29kZV8xLk5hbWUpXG4gICAgICAgIHJldHVybiByZXBsYWNlTmFtZShleHByKTtcbiAgICBpZiAoIWNhbk9wdGltaXplKGV4cHIpKVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICByZXR1cm4gbmV3IGNvZGVfMS5fQ29kZShleHByLl9pdGVtcy5yZWR1Y2UoKGl0ZW1zLCBjKSA9PiB7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29kZV8xLk5hbWUpXG4gICAgICAgICAgICBjID0gcmVwbGFjZU5hbWUoYyk7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlKVxuICAgICAgICAgICAgaXRlbXMucHVzaCguLi5jLl9pdGVtcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSkpO1xuICAgIGZ1bmN0aW9uIHJlcGxhY2VOYW1lKG4pIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0YW50c1tuLnN0cl07XG4gICAgICAgIGlmIChjID09PSB1bmRlZmluZWQgfHwgbmFtZXNbbi5zdHJdICE9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIGRlbGV0ZSBuYW1lc1tuLnN0cl07XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW5PcHRpbWl6ZShlKSB7XG4gICAgICAgIHJldHVybiAoZSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSAmJlxuICAgICAgICAgICAgZS5faXRlbXMuc29tZSgoYykgPT4gYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lICYmIG5hbWVzW2Muc3RyXSA9PT0gMSAmJiBjb25zdGFudHNbYy5zdHJdICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgZm9yIChjb25zdCBuIGluIGZyb20pXG4gICAgICAgIG5hbWVzW25dID0gKG5hbWVzW25dIHx8IDApIC0gKGZyb21bbl0gfHwgMCk7XG59XG5mdW5jdGlvbiBub3QoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcImJvb2xlYW5cIiB8fCB0eXBlb2YgeCA9PSBcIm51bWJlclwiIHx8IHggPT09IG51bGwgPyAheCA6ICgwLCBjb2RlXzEuXykgYCEke3Bhcih4KX1gO1xufVxuZXhwb3J0cy5ub3QgPSBub3Q7XG5jb25zdCBhbmRDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5BTkQpO1xuLy8gYm9vbGVhbiBBTkQgKCYmKSBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBhcmd1bWVudHNcbmZ1bmN0aW9uIGFuZCguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKGFuZENvZGUpO1xufVxuZXhwb3J0cy5hbmQgPSBhbmQ7XG5jb25zdCBvckNvZGUgPSBtYXBwZW5kKGV4cG9ydHMub3BlcmF0b3JzLk9SKTtcbi8vIGJvb2xlYW4gT1IgKHx8KSBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBhcmd1bWVudHNcbmZ1bmN0aW9uIG9yKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2Uob3JDb2RlKTtcbn1cbmV4cG9ydHMub3IgPSBvcjtcbmZ1bmN0aW9uIG1hcHBlbmQob3ApIHtcbiAgICByZXR1cm4gKHgsIHkpID0+ICh4ID09PSBjb2RlXzEubmlsID8geSA6IHkgPT09IGNvZGVfMS5uaWwgPyB4IDogKDAsIGNvZGVfMS5fKSBgJHtwYXIoeCl9ICR7b3B9ICR7cGFyKHkpfWApO1xufVxuZnVuY3Rpb24gcGFyKHgpIHtcbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8geCA6ICgwLCBjb2RlXzEuXykgYCgke3h9KWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGVja1N0cmljdE1vZGUgPSBleHBvcnRzLmdldEVycm9yUGF0aCA9IGV4cG9ydHMuVHlwZSA9IGV4cG9ydHMudXNlRnVuYyA9IGV4cG9ydHMuc2V0RXZhbHVhdGVkID0gZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV4cG9ydHMubWVyZ2VFdmFsdWF0ZWQgPSBleHBvcnRzLmVhY2hJdGVtID0gZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0J1dFJlZiA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBleHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gZXhwb3J0cy5hbHdheXNWYWxpZFNjaGVtYSA9IGV4cG9ydHMudG9IYXNoID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW4vY29kZVwiKTtcbi8vIFRPRE8gcmVmYWN0b3IgdG8gdXNlIFNldFxuZnVuY3Rpb24gdG9IYXNoKGFycikge1xuICAgIGNvbnN0IGhhc2ggPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKVxuICAgICAgICBoYXNoW2l0ZW1dID0gdHJ1ZTtcbiAgICByZXR1cm4gaGFzaDtcbn1cbmV4cG9ydHMudG9IYXNoID0gdG9IYXNoO1xuZnVuY3Rpb24gYWx3YXlzVmFsaWRTY2hlbWEoaXQsIHNjaGVtYSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIGlmIChPYmplY3Qua2V5cyhzY2hlbWEpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2hlY2tVbmtub3duUnVsZXMoaXQsIHNjaGVtYSk7XG4gICAgcmV0dXJuICFzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIGl0LnNlbGYuUlVMRVMuYWxsKTtcbn1cbmV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBhbHdheXNWYWxpZFNjaGVtYTtcbmZ1bmN0aW9uIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEgPSBpdC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGlmICghb3B0cy5zdHJpY3RTY2hlbWEpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlcyA9IHNlbGYuUlVMRVMua2V5d29yZHM7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmICghcnVsZXNba2V5XSlcbiAgICAgICAgICAgIGNoZWNrU3RyaWN0TW9kZShpdCwgYHVua25vd24ga2V5d29yZDogXCIke2tleX1cImApO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tVbmtub3duUnVsZXMgPSBjaGVja1Vua25vd25SdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgcnVsZXMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAocnVsZXNba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBzY2hlbWFIYXNSdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzQnV0UmVmKHNjaGVtYSwgUlVMRVMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAoa2V5ICE9PSBcIiRyZWZcIiAmJiBSVUxFUy5hbGxba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBzY2hlbWFIYXNSdWxlc0J1dFJlZjtcbmZ1bmN0aW9uIHNjaGVtYVJlZk9yVmFsKHsgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoIH0sIHNjaGVtYSwga2V5d29yZCwgJGRhdGEpIHtcbiAgICBpZiAoISRkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWF9YDtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWA7XG59XG5leHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gc2NoZW1hUmVmT3JWYWw7XG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICAgIHJldHVybiB1bmVzY2FwZUpzb25Qb2ludGVyKGRlY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cbmV4cG9ydHMudW5lc2NhcGVGcmFnbWVudCA9IHVuZXNjYXBlRnJhZ21lbnQ7XG5mdW5jdGlvbiBlc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVzY2FwZUpzb25Qb2ludGVyKHN0cikpO1xufVxuZXhwb3J0cy5lc2NhcGVGcmFnbWVudCA9IGVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIGAke3N0cn1gO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcLy9nLCBcIn4xXCIpO1xufVxuZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34xL2csIFwiL1wiKS5yZXBsYWNlKC9+MC9nLCBcIn5cIik7XG59XG5leHBvcnRzLnVuZXNjYXBlSnNvblBvaW50ZXIgPSB1bmVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gZWFjaEl0ZW0oeHMsIGYpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB4IG9mIHhzKVxuICAgICAgICAgICAgZih4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGYoeHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZWFjaEl0ZW0gPSBlYWNoSXRlbTtcbmZ1bmN0aW9uIG1ha2VNZXJnZUV2YWx1YXRlZCh7IG1lcmdlTmFtZXMsIG1lcmdlVG9OYW1lLCBtZXJnZVZhbHVlcywgcmVzdWx0VG9OYW1lLCB9KSB7XG4gICAgcmV0dXJuIChnZW4sIGZyb20sIHRvLCB0b05hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVzID0gdG8gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBmcm9tXG4gICAgICAgICAgICA6IHRvIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWVcbiAgICAgICAgICAgICAgICA/IChmcm9tIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBtZXJnZU5hbWVzKGdlbiwgZnJvbSwgdG8pIDogbWVyZ2VUb05hbWUoZ2VuLCBmcm9tLCB0byksIHRvKVxuICAgICAgICAgICAgICAgIDogZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgICAgID8gKG1lcmdlVG9OYW1lKGdlbiwgdG8sIGZyb20pLCBmcm9tKVxuICAgICAgICAgICAgICAgICAgICA6IG1lcmdlVmFsdWVzKGZyb20sIHRvKTtcbiAgICAgICAgcmV0dXJuIHRvTmFtZSA9PT0gY29kZWdlbl8xLk5hbWUgJiYgIShyZXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkgPyByZXN1bHRUb05hbWUoZ2VuLCByZXMpIDogcmVzO1xuICAgIH07XG59XG5leHBvcnRzLm1lcmdlRXZhbHVhdGVkID0ge1xuICAgIHByb3BzOiBtYWtlTWVyZ2VFdmFsdWF0ZWQoe1xuICAgICAgICBtZXJnZU5hbWVzOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlICYmICR7ZnJvbX0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgdHJ1ZSksICgpID0+IGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCkuY29kZSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QuYXNzaWduKCR7dG99LCAke2Zyb219KWApKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZyb20gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCk7XG4gICAgICAgICAgICAgICAgc2V0RXZhbHVhdGVkKGdlbiwgdG8sIGZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogeyAuLi5mcm9tLCAuLi50byB9KSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiBldmFsdWF0ZWRQcm9wc1RvTmFtZSxcbiAgICB9KSxcbiAgICBpdGVtczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlID8gdHJ1ZSA6ICR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VUb05hbWU6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWVgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCBmcm9tID09PSB0cnVlID8gdHJ1ZSA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogTWF0aC5tYXgoZnJvbSwgdG8pKSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiAoZ2VuLCBpdGVtcykgPT4gZ2VuLnZhcihcIml0ZW1zXCIsIGl0ZW1zKSxcbiAgICB9KSxcbn07XG5mdW5jdGlvbiBldmFsdWF0ZWRQcm9wc1RvTmFtZShnZW4sIHBzKSB7XG4gICAgaWYgKHBzID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gZ2VuLnZhcihcInByb3BzXCIsIHRydWUpO1xuICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgaWYgKHBzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcyk7XG4gICAgcmV0dXJuIHByb3BzO1xufVxuZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV2YWx1YXRlZFByb3BzVG9OYW1lO1xuZnVuY3Rpb24gc2V0RXZhbHVhdGVkKGdlbiwgcHJvcHMsIHBzKSB7XG4gICAgT2JqZWN0LmtleXMocHMpLmZvckVhY2goKHApID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wc30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHApfWAsIHRydWUpKTtcbn1cbmV4cG9ydHMuc2V0RXZhbHVhdGVkID0gc2V0RXZhbHVhdGVkO1xuY29uc3Qgc25pcHBldHMgPSB7fTtcbmZ1bmN0aW9uIHVzZUZ1bmMoZ2VuLCBmKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIHJlZjogZixcbiAgICAgICAgY29kZTogc25pcHBldHNbZi5jb2RlXSB8fCAoc25pcHBldHNbZi5jb2RlXSA9IG5ldyBjb2RlXzEuX0NvZGUoZi5jb2RlKSksXG4gICAgfSk7XG59XG5leHBvcnRzLnVzZUZ1bmMgPSB1c2VGdW5jO1xudmFyIFR5cGU7XG4oZnVuY3Rpb24gKFR5cGUpIHtcbiAgICBUeXBlW1R5cGVbXCJOdW1cIl0gPSAwXSA9IFwiTnVtXCI7XG4gICAgVHlwZVtUeXBlW1wiU3RyXCJdID0gMV0gPSBcIlN0clwiO1xufSkoVHlwZSA9IGV4cG9ydHMuVHlwZSB8fCAoZXhwb3J0cy5UeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldEVycm9yUGF0aChkYXRhUHJvcCwgZGF0YVByb3BUeXBlLCBqc1Byb3BlcnR5U3ludGF4KSB7XG4gICAgLy8gbGV0IHBhdGhcbiAgICBpZiAoZGF0YVByb3AgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IGRhdGFQcm9wVHlwZSA9PT0gVHlwZS5OdW07XG4gICAgICAgIHJldHVybiBqc1Byb3BlcnR5U3ludGF4XG4gICAgICAgICAgICA/IGlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBcIltcIiArICR7ZGF0YVByb3B9ICsgXCJdXCJgXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIlsnXCIgKyAke2RhdGFQcm9wfSArIFwiJ11cImBcbiAgICAgICAgICAgIDogaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH1gXG4gICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGBcIi9cIiArICR7ZGF0YVByb3B9LnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXFxcLy9nLCBcIn4xXCIpYDsgLy8gVE9ETyBtYXliZSB1c2UgZ2xvYmFsIGVzY2FwZVBvaW50ZXJcbiAgICB9XG4gICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXggPyAoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCkudG9TdHJpbmcoKSA6IFwiL1wiICsgZXNjYXBlSnNvblBvaW50ZXIoZGF0YVByb3ApO1xufVxuZXhwb3J0cy5nZXRFcnJvclBhdGggPSBnZXRFcnJvclBhdGg7XG5mdW5jdGlvbiBjaGVja1N0cmljdE1vZGUoaXQsIG1zZywgbW9kZSA9IGl0Lm9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgaWYgKCFtb2RlKVxuICAgICAgICByZXR1cm47XG4gICAgbXNnID0gYHN0cmljdCBtb2RlOiAke21zZ31gO1xuICAgIGlmIChtb2RlID09PSB0cnVlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICBpdC5zZWxmLmxvZ2dlci53YXJuKG1zZyk7XG59XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGNoZWNrU3RyaWN0TW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lcyA9IHtcbiAgICAvLyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgIGRhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImRhdGFcIiksXG4gICAgLy8gYXJncyBwYXNzZWQgZnJvbSByZWZlcmVuY2luZyBzY2hlbWFcbiAgICB2YWxDeHQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZhbEN4dFwiKSxcbiAgICBpbnN0YW5jZVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImluc3RhbmNlUGF0aFwiKSxcbiAgICBwYXJlbnREYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnREYXRhXCIpLFxuICAgIHBhcmVudERhdGFQcm9wZXJ0eTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVByb3BlcnR5XCIpLFxuICAgIHJvb3REYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJyb290RGF0YVwiKSxcbiAgICBkeW5hbWljQW5jaG9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZHluYW1pY0FuY2hvcnNcIiksXG4gICAgLy8gZnVuY3Rpb24gc2NvcGVkIHZhcmlhYmxlc1xuICAgIHZFcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZFcnJvcnNcIiksXG4gICAgZXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJlcnJvcnNcIiksXG4gICAgdGhpczogbmV3IGNvZGVnZW5fMS5OYW1lKFwidGhpc1wiKSxcbiAgICAvLyBcImdsb2JhbHNcIlxuICAgIHNlbGY6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNlbGZcIiksXG4gICAgc2NvcGU6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjb3BlXCIpLFxuICAgIC8vIEpURCBzZXJpYWxpemUvcGFyc2UgbmFtZSBmb3IgSlNPTiBzdHJpbmcgYW5kIHBvc2l0aW9uXG4gICAganNvbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblwiKSxcbiAgICBqc29uUG9zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uUG9zXCIpLFxuICAgIGpzb25MZW46IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25MZW5cIiksXG4gICAganNvblBhcnQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25QYXJ0XCIpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IG5hbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXh0ZW5kRXJyb3JzID0gZXhwb3J0cy5yZXNldEVycm9yc0NvdW50ID0gZXhwb3J0cy5yZXBvcnRFeHRyYUVycm9yID0gZXhwb3J0cy5yZXBvcnRFcnJvciA9IGV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuL25hbWVzXCIpO1xuZXhwb3J0cy5rZXl3b3JkRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgcGFzcyBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIHZhbGlkYXRpb25gLFxufTtcbmV4cG9ydHMua2V5d29yZCREYXRhRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hVHlwZSB9KSA9PiBzY2hlbWFUeXBlXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIG11c3QgYmUgJHtzY2hlbWFUeXBlfSAoJGRhdGEpYFxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgXCIke2tleXdvcmR9XCIga2V5d29yZCBpcyBpbnZhbGlkICgkZGF0YSlgLFxufTtcbmZ1bmN0aW9uIHJlcG9ydEVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocywgb3ZlcnJpZGVBbGxFcnJvcnMpIHtcbiAgICBjb25zdCB7IGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGFsbEVycm9ycyB9ID0gaXQ7XG4gICAgY29uc3QgZXJyT2JqID0gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIGlmIChvdmVycmlkZUFsbEVycm9ycyAhPT0gbnVsbCAmJiBvdmVycmlkZUFsbEVycm9ycyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVBbGxFcnJvcnMgOiAoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIGFkZEVycm9yKGdlbiwgZXJyT2JqKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyT2JqfV1gKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEVycm9yID0gcmVwb3J0RXJyb3I7XG5mdW5jdGlvbiByZXBvcnRFeHRyYUVycm9yKGN4dCwgZXJyb3IgPSBleHBvcnRzLmtleXdvcmRFcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIGlmICghKGNvbXBvc2l0ZVJ1bGUgfHwgYWxsRXJyb3JzKSkge1xuICAgICAgICByZXR1cm5FcnJvcnMoaXQsIG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSByZXBvcnRFeHRyYUVycm9yO1xuZnVuY3Rpb24gcmVzZXRFcnJvcnNDb3VudChnZW4sIGVycnNDb3VudCkge1xuICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgZXJyc0NvdW50KTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gIT09IG51bGxgLCAoKSA9PiBnZW4uaWYoZXJyc0NvdW50LCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGAsIGVycnNDb3VudCksICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsIG51bGwpKSk7XG59XG5leHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSByZXNldEVycm9yc0NvdW50O1xuZnVuY3Rpb24gZXh0ZW5kRXJyb3JzKHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWFWYWx1ZSwgZGF0YSwgZXJyc0NvdW50LCBpdCwgfSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlcnJzQ291bnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGVyciA9IGdlbi5uYW1lKFwiZXJyXCIpO1xuICAgIGdlbi5mb3JSYW5nZShcImlcIiwgZXJyc0NvdW50LCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoaSkgPT4ge1xuICAgICAgICBnZW4uY29uc3QoZXJyLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfVske2l9XWApO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9Lmluc3RhbmNlUGF0aCA9PT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGl0LmVycm9yUGF0aCkpKTtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hUGF0aGAsICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCk7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LnNjaGVtYWAsIHNjaGVtYVZhbHVlKTtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJ9LmRhdGFgLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHRlbmRFcnJvcnM7XG5mdW5jdGlvbiBhZGRFcnJvcihnZW4sIGVyck9iaikge1xuICAgIGNvbnN0IGVyciA9IGdlbi5jb25zdChcImVyclwiLCBlcnJPYmopO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbGAsICgpID0+IGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYFske2Vycn1dYCksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LnB1c2goJHtlcnJ9KWApO1xuICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30rK2ApO1xufVxuZnVuY3Rpb24gcmV0dXJuRXJyb3JzKGl0LCBlcnJzKSB7XG4gICAgY29uc3QgeyBnZW4sIHZhbGlkYXRlTmFtZSwgc2NoZW1hRW52IH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7aXQuVmFsaWRhdGlvbkVycm9yfSgke2VycnN9KWApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgZXJycyk7XG4gICAgICAgIGdlbi5yZXR1cm4oZmFsc2UpO1xuICAgIH1cbn1cbmNvbnN0IEUgPSB7XG4gICAga2V5d29yZDogbmV3IGNvZGVnZW5fMS5OYW1lKFwia2V5d29yZFwiKSxcbiAgICBzY2hlbWFQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFQYXRoXCIpLFxuICAgIHBhcmFtczogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyYW1zXCIpLFxuICAgIHByb3BlcnR5TmFtZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicHJvcGVydHlOYW1lXCIpLFxuICAgIG1lc3NhZ2U6IG5ldyBjb2RlZ2VuXzEuTmFtZShcIm1lc3NhZ2VcIiksXG4gICAgc2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY2hlbWFcIiksXG4gICAgcGFyZW50U2NoZW1hOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnRTY2hlbWFcIiksXG59O1xuZnVuY3Rpb24gZXJyb3JPYmplY3RDb2RlKGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpIHtcbiAgICBjb25zdCB7IGNyZWF0ZUVycm9ycyB9ID0gY3h0Lml0O1xuICAgIGlmIChjcmVhdGVFcnJvcnMgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBge31gO1xuICAgIHJldHVybiBlcnJvck9iamVjdChjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbn1cbmZ1bmN0aW9uIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMgPSB7fSkge1xuICAgIGNvbnN0IHsgZ2VuLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IGtleVZhbHVlcyA9IFtcbiAgICAgICAgZXJyb3JJbnN0YW5jZVBhdGgoaXQsIGVycm9yUGF0aHMpLFxuICAgICAgICBlcnJvclNjaGVtYVBhdGgoY3h0LCBlcnJvclBhdGhzKSxcbiAgICBdO1xuICAgIGV4dHJhRXJyb3JQcm9wcyhjeHQsIGVycm9yLCBrZXlWYWx1ZXMpO1xuICAgIHJldHVybiBnZW4ub2JqZWN0KC4uLmtleVZhbHVlcyk7XG59XG5mdW5jdGlvbiBlcnJvckluc3RhbmNlUGF0aCh7IGVycm9yUGF0aCB9LCB7IGluc3RhbmNlUGF0aCB9KSB7XG4gICAgY29uc3QgaW5zdFBhdGggPSBpbnN0YW5jZVBhdGhcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyb3JQYXRofSR7KDAsIHV0aWxfMS5nZXRFcnJvclBhdGgpKGluc3RhbmNlUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gXG4gICAgICAgIDogZXJyb3JQYXRoO1xuICAgIHJldHVybiBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGluc3RQYXRoKV07XG59XG5mdW5jdGlvbiBlcnJvclNjaGVtYVBhdGgoeyBrZXl3b3JkLCBpdDogeyBlcnJTY2hlbWFQYXRoIH0gfSwgeyBzY2hlbWFQYXRoLCBwYXJlbnRTY2hlbWEgfSkge1xuICAgIGxldCBzY2hQYXRoID0gcGFyZW50U2NoZW1hID8gZXJyU2NoZW1hUGF0aCA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YDtcbiAgICBpZiAoc2NoZW1hUGF0aCkge1xuICAgICAgICBzY2hQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke3NjaFBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoc2NoZW1hUGF0aCwgdXRpbF8xLlR5cGUuU3RyKX1gO1xuICAgIH1cbiAgICByZXR1cm4gW0Uuc2NoZW1hUGF0aCwgc2NoUGF0aF07XG59XG5mdW5jdGlvbiBleHRyYUVycm9yUHJvcHMoY3h0LCB7IHBhcmFtcywgbWVzc2FnZSB9LCBrZXlWYWx1ZXMpIHtcbiAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYVZhbHVlLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgb3B0cywgcHJvcGVydHlOYW1lLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGggfSA9IGl0O1xuICAgIGtleVZhbHVlcy5wdXNoKFtFLmtleXdvcmQsIGtleXdvcmRdLCBbRS5wYXJhbXMsIHR5cGVvZiBwYXJhbXMgPT0gXCJmdW5jdGlvblwiID8gcGFyYW1zKGN4dCkgOiBwYXJhbXMgfHwgKDAsIGNvZGVnZW5fMS5fKSBge31gXSk7XG4gICAgaWYgKG9wdHMubWVzc2FnZXMpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UubWVzc2FnZSwgdHlwZW9mIG1lc3NhZ2UgPT0gXCJmdW5jdGlvblwiID8gbWVzc2FnZShjeHQpIDogbWVzc2FnZV0pO1xuICAgIH1cbiAgICBpZiAob3B0cy52ZXJib3NlKSB7XG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnNjaGVtYSwgc2NoZW1hVmFsdWVdLCBbRS5wYXJlbnRTY2hlbWEsICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH1gXSwgW25hbWVzXzEuZGVmYXVsdC5kYXRhLCBkYXRhXSk7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eU5hbWUpXG4gICAgICAgIGtleVZhbHVlcy5wdXNoKFtFLnByb3BlcnR5TmFtZSwgcHJvcGVydHlOYW1lXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBleHBvcnRzLnRvcEJvb2xPckVtcHR5U2NoZW1hID0gdm9pZCAwO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgYm9vbEVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcIixcbn07XG5mdW5jdGlvbiB0b3BCb29sT3JFbXB0eVNjaGVtYShpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG51bGwpO1xuICAgICAgICBnZW4ucmV0dXJuKHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB0b3BCb29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGJvb2xPckVtcHR5U2NoZW1hKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIGZhbHNlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICB9XG59XG5leHBvcnRzLmJvb2xPckVtcHR5U2NoZW1hID0gYm9vbE9yRW1wdHlTY2hlbWE7XG5mdW5jdGlvbiBmYWxzZVNjaGVtYUVycm9yKGl0LCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhIH0gPSBpdDtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgb3RoZXIgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciBub24ta2V5d29yZCB2YWxpZGF0aW9uIGVycm9ycy4uLlxuICAgIGNvbnN0IGN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcImZhbHNlIHNjaGVtYVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IGZhbHNlLFxuICAgICAgICBzY2hlbWFDb2RlOiBmYWxzZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IGZhbHNlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCBib29sRXJyb3IsIHVuZGVmaW5lZCwgb3ZlcnJpZGVBbGxFcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbFNjaGVtYS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdWxlcyA9IGV4cG9ydHMuaXNKU09OVHlwZSA9IHZvaWQgMDtcbmNvbnN0IF9qc29uVHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIiwgXCJvYmplY3RcIiwgXCJhcnJheVwiXTtcbmNvbnN0IGpzb25UeXBlcyA9IG5ldyBTZXQoX2pzb25UeXBlcyk7XG5mdW5jdGlvbiBpc0pTT05UeXBlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJzdHJpbmdcIiAmJiBqc29uVHlwZXMuaGFzKHgpO1xufVxuZXhwb3J0cy5pc0pTT05UeXBlID0gaXNKU09OVHlwZTtcbmZ1bmN0aW9uIGdldFJ1bGVzKCkge1xuICAgIGNvbnN0IGdyb3VwcyA9IHtcbiAgICAgICAgbnVtYmVyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBzdHJpbmc6IHsgdHlwZTogXCJzdHJpbmdcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFycmF5OiB7IHR5cGU6IFwiYXJyYXlcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIG9iamVjdDogeyB0eXBlOiBcIm9iamVjdFwiLCBydWxlczogW10gfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGVzOiB7IC4uLmdyb3VwcywgaW50ZWdlcjogdHJ1ZSwgYm9vbGVhbjogdHJ1ZSwgbnVsbDogdHJ1ZSB9LFxuICAgICAgICBydWxlczogW3sgcnVsZXM6IFtdIH0sIGdyb3Vwcy5udW1iZXIsIGdyb3Vwcy5zdHJpbmcsIGdyb3Vwcy5hcnJheSwgZ3JvdXBzLm9iamVjdF0sXG4gICAgICAgIHBvc3Q6IHsgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFsbDoge30sXG4gICAgICAgIGtleXdvcmRzOiB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRSdWxlcyA9IGdldFJ1bGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVsZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IGV4cG9ydHMuc2hvdWxkVXNlR3JvdXAgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzRm9yVHlwZSh7IHNjaGVtYSwgc2VsZiB9LCB0eXBlKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBzZWxmLlJVTEVTLnR5cGVzW3R5cGVdO1xuICAgIHJldHVybiBncm91cCAmJiBncm91cCAhPT0gdHJ1ZSAmJiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gc2NoZW1hSGFzUnVsZXNGb3JUeXBlO1xuZnVuY3Rpb24gc2hvdWxkVXNlR3JvdXAoc2NoZW1hLCBncm91cCkge1xuICAgIHJldHVybiBncm91cC5ydWxlcy5zb21lKChydWxlKSA9PiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IHNob3VsZFVzZUdyb3VwO1xuZnVuY3Rpb24gc2hvdWxkVXNlUnVsZShzY2hlbWEsIHJ1bGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChzY2hlbWFbcnVsZS5rZXl3b3JkXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICgoX2EgPSBydWxlLmRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNvbWUoKGt3ZCkgPT4gc2NoZW1hW2t3ZF0gIT09IHVuZGVmaW5lZCkpKTtcbn1cbmV4cG9ydHMuc2hvdWxkVXNlUnVsZSA9IHNob3VsZFVzZVJ1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBsaWNhYmlsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBleHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBleHBvcnRzLmdldEpTT05UeXBlcyA9IGV4cG9ydHMuZ2V0U2NoZW1hVHlwZXMgPSBleHBvcnRzLkRhdGFUeXBlID0gdm9pZCAwO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuLi9ydWxlc1wiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xudmFyIERhdGFUeXBlO1xuKGZ1bmN0aW9uIChEYXRhVHlwZSkge1xuICAgIERhdGFUeXBlW0RhdGFUeXBlW1wiQ29ycmVjdFwiXSA9IDBdID0gXCJDb3JyZWN0XCI7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJXcm9uZ1wiXSA9IDFdID0gXCJXcm9uZ1wiO1xufSkoRGF0YVR5cGUgPSBleHBvcnRzLkRhdGFUeXBlIHx8IChleHBvcnRzLkRhdGFUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGVzKHNjaGVtYSkge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0SlNPTlR5cGVzKHNjaGVtYS50eXBlKTtcbiAgICBjb25zdCBoYXNOdWxsID0gdHlwZXMuaW5jbHVkZXMoXCJudWxsXCIpO1xuICAgIGlmIChoYXNOdWxsKSB7XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2VcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXR5cGVzLmxlbmd0aCAmJiBzY2hlbWEubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm51bGxhYmxlXCIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBcInR5cGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IHRydWUpXG4gICAgICAgICAgICB0eXBlcy5wdXNoKFwibnVsbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGdldFNjaGVtYVR5cGVzO1xuZnVuY3Rpb24gZ2V0SlNPTlR5cGVzKHRzKSB7XG4gICAgY29uc3QgdHlwZXMgPSBBcnJheS5pc0FycmF5KHRzKSA/IHRzIDogdHMgPyBbdHNdIDogW107XG4gICAgaWYgKHR5cGVzLmV2ZXJ5KHJ1bGVzXzEuaXNKU09OVHlwZSkpXG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG11c3QgYmUgSlNPTlR5cGUgb3IgSlNPTlR5cGVbXTogXCIgKyB0eXBlcy5qb2luKFwiLFwiKSk7XG59XG5leHBvcnRzLmdldEpTT05UeXBlcyA9IGdldEpTT05UeXBlcztcbmZ1bmN0aW9uIGNvZXJjZUFuZENoZWNrRGF0YVR5cGUoaXQsIHR5cGVzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IGNvZXJjZVRvID0gY29lcmNlVG9UeXBlcyh0eXBlcywgb3B0cy5jb2VyY2VUeXBlcyk7XG4gICAgY29uc3QgY2hlY2tUeXBlcyA9IHR5cGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgIShjb2VyY2VUby5sZW5ndGggPT09IDAgJiYgdHlwZXMubGVuZ3RoID09PSAxICYmICgwLCBhcHBsaWNhYmlsaXR5XzEuc2NoZW1hSGFzUnVsZXNGb3JUeXBlKShpdCwgdHlwZXNbMF0pKTtcbiAgICBpZiAoY2hlY2tUeXBlcykge1xuICAgICAgICBjb25zdCB3cm9uZ1R5cGUgPSBjaGVja0RhdGFUeXBlcyh0eXBlcywgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzLCBEYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgIGdlbi5pZih3cm9uZ1R5cGUsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2VyY2VUby5sZW5ndGgpXG4gICAgICAgICAgICAgICAgY29lcmNlRGF0YShpdCwgdHlwZXMsIGNvZXJjZVRvKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrVHlwZXM7XG59XG5leHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBjb2VyY2VBbmRDaGVja0RhdGFUeXBlO1xuY29uc3QgQ09FUkNJQkxFID0gbmV3IFNldChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIl0pO1xuZnVuY3Rpb24gY29lcmNlVG9UeXBlcyh0eXBlcywgY29lcmNlVHlwZXMpIHtcbiAgICByZXR1cm4gY29lcmNlVHlwZXNcbiAgICAgICAgPyB0eXBlcy5maWx0ZXIoKHQpID0+IENPRVJDSUJMRS5oYXModCkgfHwgKGNvZXJjZVR5cGVzID09PSBcImFycmF5XCIgJiYgdCA9PT0gXCJhcnJheVwiKSlcbiAgICAgICAgOiBbXTtcbn1cbmZ1bmN0aW9uIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGdlbi5sZXQoXCJkYXRhVHlwZVwiLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApO1xuICAgIGNvbnN0IGNvZXJjZWQgPSBnZW4ubGV0KFwiY29lcmNlZFwiLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICBpZiAob3B0cy5jb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KCR7ZGF0YX0pICYmICR7ZGF0YX0ubGVuZ3RoID09IDFgLCAoKSA9PiBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfVswXWApXG4gICAgICAgICAgICAuYXNzaWduKGRhdGFUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApXG4gICAgICAgICAgICAuaWYoY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycyksICgpID0+IGdlbi5hc3NpZ24oY29lcmNlZCwgZGF0YSkpKTtcbiAgICB9XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGApO1xuICAgIGZvciAoY29uc3QgdCBvZiBjb2VyY2VUbykge1xuICAgICAgICBpZiAoQ09FUkNJQkxFLmhhcyh0KSB8fCAodCA9PT0gXCJhcnJheVwiICYmIG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikpIHtcbiAgICAgICAgICAgIGNvZXJjZVNwZWNpZmljVHlwZSh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZW4uZWxzZSgpO1xuICAgIHJlcG9ydFR5cGVFcnJvcihpdCk7XG4gICAgZ2VuLmVuZElmKCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgZ2VuLmFzc2lnbihkYXRhLCBjb2VyY2VkKTtcbiAgICAgICAgYXNzaWduUGFyZW50RGF0YShpdCwgY29lcmNlZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY29lcmNlU3BlY2lmaWNUeXBlKHQpIHtcbiAgICAgICAgc3dpdGNoICh0KSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJudW1iZXJcIiB8fCAke2RhdGFUeXBlfSA9PSBcImJvb2xlYW5cImApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcIiArICR7ZGF0YX1gKVxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbFxuICAgICAgICAgICAgICB8fCAoJHtkYXRhVHlwZX0gPT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0pYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09PSBcInN0cmluZ1wiICYmICR7ZGF0YX0gJiYgJHtkYXRhfSA9PSArJHtkYXRhfSAmJiAhKCR7ZGF0YX0gJSAxKSlgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYCske2RhdGF9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcImZhbHNlXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcInRydWVcIiB8fCAke2RhdGF9ID09PSAxYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIGdlbi5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJcIiB8fCAke2RhdGF9ID09PSAwIHx8ICR7ZGF0YX0gPT09IGZhbHNlYCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihjb2VyY2VkLCBudWxsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiB8fCAke2RhdGFUeXBlfSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICB8fCAke2RhdGFUeXBlfSA9PT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZGF0YX1dYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhc3NpZ25QYXJlbnREYXRhKHsgZ2VuLCBwYXJlbnREYXRhLCBwYXJlbnREYXRhUHJvcGVydHkgfSwgZXhwcikge1xuICAgIC8vIFRPRE8gdXNlIGdlbi5wcm9wZXJ0eVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cGFyZW50RGF0YX1bJHtwYXJlbnREYXRhUHJvcGVydHl9XWAsIGV4cHIpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QgPSBEYXRhVHlwZS5Db3JyZWN0KSB7XG4gICAgY29uc3QgRVEgPSBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29kZWdlbl8xLm9wZXJhdG9ycy5FUSA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTkVRO1xuICAgIGxldCBjb25kO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7RVF9IG51bGxgO1xuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAmJiB0eXBlb2YgJHtkYXRhfSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKDAsIGNvZGVnZW5fMS5fKSBgISgke2RhdGF9ICUgMSkgJiYgIWlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ICR7RVF9ICR7ZGF0YVR5cGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvcnJlY3QgPT09IERhdGFUeXBlLkNvcnJlY3QgPyBjb25kIDogKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmQpO1xuICAgIGZ1bmN0aW9uIG51bUNvbmQoX2NvbmQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLmFuZCkoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gPT0gXCJudW1iZXJcImAsIF9jb25kLCBzdHJpY3ROdW1zID8gKDAsIGNvZGVnZW5fMS5fKSBgaXNGaW5pdGUoJHtkYXRhfSlgIDogY29kZWdlbl8xLm5pbCk7XG4gICAgfVxufVxuZXhwb3J0cy5jaGVja0RhdGFUeXBlID0gY2hlY2tEYXRhVHlwZTtcbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGVzKGRhdGFUeXBlcywgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCkge1xuICAgIGlmIChkYXRhVHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlc1swXSwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCk7XG4gICAgfVxuICAgIGxldCBjb25kO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIHV0aWxfMS50b0hhc2gpKGRhdGFUeXBlcyk7XG4gICAgaWYgKHR5cGVzLmFycmF5ICYmIHR5cGVzLm9iamVjdCkge1xuICAgICAgICBjb25zdCBub3RPYmogPSAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAhPSBcIm9iamVjdFwiYDtcbiAgICAgICAgY29uZCA9IHR5cGVzLm51bGwgPyBub3RPYmogOiAoMCwgY29kZWdlbl8xLl8pIGAhJHtkYXRhfSB8fCAke25vdE9ian1gO1xuICAgICAgICBkZWxldGUgdHlwZXMubnVsbDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLmFycmF5O1xuICAgICAgICBkZWxldGUgdHlwZXMub2JqZWN0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uZCA9IGNvZGVnZW5fMS5uaWw7XG4gICAgfVxuICAgIGlmICh0eXBlcy5udW1iZXIpXG4gICAgICAgIGRlbGV0ZSB0eXBlcy5pbnRlZ2VyO1xuICAgIGZvciAoY29uc3QgdCBpbiB0eXBlcylcbiAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuYW5kKShjb25kLCBjaGVja0RhdGFUeXBlKHQsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpKTtcbiAgICByZXR1cm4gY29uZDtcbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBjaGVja0RhdGFUeXBlcztcbmNvbnN0IHR5cGVFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWEgfSkgPT4gYG11c3QgYmUgJHtzY2hlbWF9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYSwgc2NoZW1hVmFsdWUgfSkgPT4gdHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiID8gKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hfX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hVmFsdWV9fWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0VHlwZUVycm9yKGl0KSB7XG4gICAgY29uc3QgY3h0ID0gZ2V0VHlwZUVycm9yQ29udGV4dChpdCk7XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIHR5cGVFcnJvcik7XG59XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IHJlcG9ydFR5cGVFcnJvcjtcbmZ1bmN0aW9uIGdldFR5cGVFcnJvckNvbnRleHQoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hIH0gPSBpdDtcbiAgICBjb25zdCBzY2hlbWFDb2RlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHNjaGVtYSwgXCJ0eXBlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdlbixcbiAgICAgICAga2V5d29yZDogXCJ0eXBlXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hLnR5cGUsXG4gICAgICAgIHNjaGVtYUNvZGUsXG4gICAgICAgIHNjaGVtYVZhbHVlOiBzY2hlbWFDb2RlLFxuICAgICAgICBwYXJlbnRTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgcGFyYW1zOiB7fSxcbiAgICAgICAgaXQsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGFUeXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmZ1bmN0aW9uIGFzc2lnbkRlZmF1bHRzKGl0LCB0eSkge1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgaXRlbXMgfSA9IGl0LnNjaGVtYTtcbiAgICBpZiAodHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBhc3NpZ25EZWZhdWx0KGl0LCBrZXksIHByb3BlcnRpZXNba2V5XS5kZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eSA9PT0gXCJhcnJheVwiICYmIEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKHNjaCwgaSkgPT4gYXNzaWduRGVmYXVsdChpdCwgaSwgc2NoLmRlZmF1bHQpKTtcbiAgICB9XG59XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gYXNzaWduRGVmYXVsdHM7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0KGl0LCBwcm9wLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgY2hpbGREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcCl9YDtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBkZWZhdWx0IGlzIGlnbm9yZWQgZm9yOiAke2NoaWxkRGF0YX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgO1xuICAgIGlmIChvcHRzLnVzZURlZmF1bHRzID09PSBcImVtcHR5XCIpIHtcbiAgICAgICAgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kaXRpb259IHx8ICR7Y2hpbGREYXRhfSA9PT0gbnVsbCB8fCAke2NoaWxkRGF0YX0gPT09IFwiXCJgO1xuICAgIH1cbiAgICAvLyBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgICtcbiAgICAvLyAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiID8gYCB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYCA6IFwiXCIpXG4gICAgZ2VuLmlmKGNvbmRpdGlvbiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID0gJHsoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoZGVmYXVsdFZhbHVlKX1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVW5pb24gPSBleHBvcnRzLnZhbGlkYXRlQXJyYXkgPSBleHBvcnRzLnVzZVBhdHRlcm4gPSBleHBvcnRzLmNhbGxWYWxpZGF0ZUNvZGUgPSBleHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBleHBvcnRzLnByb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5pc093blByb3BlcnR5ID0gZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGV4cG9ydHMucmVwb3J0TWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrTWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5mdW5jdGlvbiBjaGVja1JlcG9ydE1pc3NpbmdQcm9wKGN4dCwgcHJvcCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGdlbi5pZihub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiAoMCwgY29kZWdlbl8xLl8pIGAke3Byb3B9YCB9LCB0cnVlKTtcbiAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSBjaGVja1JlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gY2hlY2tNaXNzaW5nUHJvcCh7IGdlbiwgZGF0YSwgaXQ6IHsgb3B0cyB9IH0sIHByb3BlcnRpZXMsIG1pc3NpbmcpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikoLi4ucHJvcGVydGllcy5tYXAoKHByb3ApID0+ICgwLCBjb2RlZ2VuXzEuYW5kKShub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHttaXNzaW5nfSA9ICR7cHJvcH1gKSkpO1xufVxuZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gY2hlY2tNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIHJlcG9ydE1pc3NpbmdQcm9wKGN4dCwgbWlzc2luZykge1xuICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IG1pc3NpbmcgfSwgdHJ1ZSk7XG4gICAgY3h0LmVycm9yKCk7XG59XG5leHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gcmVwb3J0TWlzc2luZ1Byb3A7XG5mdW5jdGlvbiBoYXNQcm9wRnVuYyhnZW4pIHtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJmdW5jXCIsIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZWY6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGhhc1Byb3BGdW5jO1xuZnVuY3Rpb24gaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcEZ1bmMoZ2VuKX0uY2FsbCgke2RhdGF9LCAke3Byb3BlcnR5fSlgO1xufVxuZXhwb3J0cy5pc093blByb3BlcnR5ID0gaXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIHByb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcGVydHksIG93blByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcGVydHkpfSAhPT0gdW5kZWZpbmVkYDtcbiAgICByZXR1cm4gb3duUHJvcGVydGllcyA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpfWAgOiBjb25kO1xufVxuZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IHByb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gbm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gPT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLm9yKShjb25kLCAoMCwgY29kZWdlbl8xLm5vdCkoaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSkpIDogY29uZDtcbn1cbmV4cG9ydHMubm9Qcm9wZXJ0eUluRGF0YSA9IG5vUHJvcGVydHlJbkRhdGE7XG5mdW5jdGlvbiBhbGxTY2hlbWFQcm9wZXJ0aWVzKHNjaGVtYU1hcCkge1xuICAgIHJldHVybiBzY2hlbWFNYXAgPyBPYmplY3Qua2V5cyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gcCAhPT0gXCJfX3Byb3RvX19cIikgOiBbXTtcbn1cbmV4cG9ydHMuYWxsU2NoZW1hUHJvcGVydGllcyA9IGFsbFNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBzY2hlbWFQcm9wZXJ0aWVzKGl0LCBzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFNYXBbcF0pKTtcbn1cbmV4cG9ydHMuc2NoZW1hUHJvcGVydGllcyA9IHNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBjYWxsVmFsaWRhdGVDb2RlKHsgc2NoZW1hQ29kZSwgZGF0YSwgaXQ6IHsgZ2VuLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGgsIGVycm9yUGF0aCB9LCBpdCB9LCBmdW5jLCBjb250ZXh0LCBwYXNzU2NoZW1hKSB7XG4gICAgY29uc3QgZGF0YUFuZFNjaGVtYSA9IHBhc3NTY2hlbWEgPyAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9LCAke2RhdGF9LCAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9YCA6IGRhdGE7XG4gICAgY29uc3QgdmFsQ3h0ID0gW1xuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGVycm9yUGF0aCldLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsIGl0LnBhcmVudERhdGFdLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgaXQucGFyZW50RGF0YVByb3BlcnR5XSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhXSxcbiAgICBdO1xuICAgIGlmIChpdC5vcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgIHZhbEN4dC5wdXNoKFtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsIG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc10pO1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFBbmRTY2hlbWF9LCAke2dlbi5vYmplY3QoLi4udmFsQ3h0KX1gO1xuICAgIHJldHVybiBjb250ZXh0ICE9PSBjb2RlZ2VuXzEubmlsID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmdW5jfS5jYWxsKCR7Y29udGV4dH0sICR7YXJnc30pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30oJHthcmdzfSlgO1xufVxuZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gY2FsbFZhbGlkYXRlQ29kZTtcbmNvbnN0IG5ld1JlZ0V4cCA9ICgwLCBjb2RlZ2VuXzEuXykgYG5ldyBSZWdFeHBgO1xuZnVuY3Rpb24gdXNlUGF0dGVybih7IGdlbiwgaXQ6IHsgb3B0cyB9IH0sIHBhdHRlcm4pIHtcbiAgICBjb25zdCB1ID0gb3B0cy51bmljb2RlUmVnRXhwID8gXCJ1XCIgOiBcIlwiO1xuICAgIGNvbnN0IHsgcmVnRXhwIH0gPSBvcHRzLmNvZGU7XG4gICAgY29uc3QgcnggPSByZWdFeHAocGF0dGVybiwgdSk7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwicGF0dGVyblwiLCB7XG4gICAgICAgIGtleTogcngudG9TdHJpbmcoKSxcbiAgICAgICAgcmVmOiByeCxcbiAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgJHtyZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyBuZXdSZWdFeHAgOiAoMCwgdXRpbF8yLnVzZUZ1bmMpKGdlbiwgcmVnRXhwKX0oJHtwYXR0ZXJufSwgJHt1fSlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VQYXR0ZXJuID0gdXNlUGF0dGVybjtcbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRBcnIgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgIHZhbGlkYXRlSXRlbXMoKCkgPT4gZ2VuLmFzc2lnbih2YWxpZEFyciwgZmFsc2UpKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkQXJyO1xuICAgIH1cbiAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTtcbiAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5icmVhaygpKTtcbiAgICByZXR1cm4gdmFsaWQ7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhub3RWYWxpZCkge1xuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCAwLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksIG5vdFZhbGlkKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gdmFsaWRhdGVBcnJheTtcbmZ1bmN0aW9uIHZhbGlkYXRlVW5pb24oY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGFsd2F5c1ZhbGlkID0gc2NoZW1hLnNvbWUoKHNjaCkgPT4gKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpO1xuICAgIGlmIChhbHdheXNWYWxpZCAmJiAhaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgIGdlbi5ibG9jaygoKSA9PiBzY2hlbWEuZm9yRWFjaCgoX3NjaCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkfSB8fCAke3NjaFZhbGlkfWApO1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHNjaFZhbGlkKTtcbiAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllcy9JdGVtc2Agbm90IHN1cHBvcnRlZCAob3B0cy51bmV2YWx1YXRlZCAhPT0gdHJ1ZSlcbiAgICAgICAgLy8gb3IgaWYgYWxsIHByb3BlcnRpZXMgYW5kIGl0ZW1zIHdlcmUgZXZhbHVhdGVkIChpdC5wcm9wcyA9PT0gdHJ1ZSAmJiBpdC5pdGVtcyA9PT0gdHJ1ZSlcbiAgICAgICAgaWYgKCFtZXJnZWQpXG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSk7XG4gICAgfSkpO1xuICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gdmFsaWRhdGVVbmlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvZGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVLZXl3b3JkVXNhZ2UgPSBleHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IGV4cG9ydHMuZnVuY0tleXdvcmRDb2RlID0gZXhwb3J0cy5tYWNyb0tleXdvcmRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uLy4uL3ZvY2FidWxhcmllcy9jb2RlXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuZnVuY3Rpb24gbWFjcm9LZXl3b3JkQ29kZShjeHQsIGRlZikge1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCBtYWNyb1NjaGVtYSA9IGRlZi5tYWNyby5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIG1hY3JvU2NoZW1hKTtcbiAgICBpZiAoaXQub3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpXG4gICAgICAgIGl0LnNlbGYudmFsaWRhdGVTY2hlbWEobWFjcm9TY2hlbWEsIHRydWUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgc2NoZW1hOiBtYWNyb1NjaGVtYSxcbiAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgIHRvcFNjaGVtYVJlZjogc2NoZW1hUmVmLFxuICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgIH0sIHZhbGlkKTtcbiAgICBjeHQucGFzcyh2YWxpZCwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IG1hY3JvS2V5d29yZENvZGU7XG5mdW5jdGlvbiBmdW5jS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgeyBnZW4sIGtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCAkZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBjaGVja0FzeW5jS2V5d29yZChpdCwgZGVmKTtcbiAgICBjb25zdCB2YWxpZGF0ZSA9ICEkZGF0YSAmJiBkZWYuY29tcGlsZSA/IGRlZi5jb21waWxlLmNhbGwoaXQuc2VsZiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSA6IGRlZi52YWxpZGF0ZTtcbiAgICBjb25zdCB2YWxpZGF0ZVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCB2YWxpZGF0ZSk7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlS2V5d29yZCk7XG4gICAgY3h0Lm9rKChfYSA9IGRlZi52YWxpZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsaWQpO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZCgpIHtcbiAgICAgICAgaWYgKGRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhc3NpZ25WYWxpZCgpO1xuICAgICAgICAgICAgaWYgKGRlZi5tb2RpZnlpbmcpXG4gICAgICAgICAgICAgICAgbW9kaWZ5RGF0YShjeHQpO1xuICAgICAgICAgICAgcmVwb3J0RXJycygoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBydWxlRXJycyA9IGRlZi5hc3luYyA/IHZhbGlkYXRlQXN5bmMoKSA6IHZhbGlkYXRlU3luYygpO1xuICAgICAgICAgICAgaWYgKGRlZi5tb2RpZnlpbmcpXG4gICAgICAgICAgICAgICAgbW9kaWZ5RGF0YShjeHQpO1xuICAgICAgICAgICAgcmVwb3J0RXJycygoKSA9PiBhZGRFcnJzKGN4dCwgcnVsZUVycnMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUFzeW5jKCkge1xuICAgICAgICBjb25zdCBydWxlRXJycyA9IGdlbi5sZXQoXCJydWxlRXJyc1wiLCBudWxsKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiBhc3NpZ25WYWxpZCgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCBgKSwgKGUpID0+IGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5pZigoMCwgY29kZWdlbl8xLl8pIGAke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9YCwgKCkgPT4gZ2VuLmFzc2lnbihydWxlRXJycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtlfS5lcnJvcnNgKSwgKCkgPT4gZ2VuLnRocm93KGUpKSk7XG4gICAgICAgIHJldHVybiBydWxlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTeW5jKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUVycnMgPSAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlUmVmfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkYXRlRXJycywgbnVsbCk7XG4gICAgICAgIGFzc2lnblZhbGlkKGNvZGVnZW5fMS5uaWwpO1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVFcnJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWxpZChfYXdhaXQgPSBkZWYuYXN5bmMgPyAoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCBgIDogY29kZWdlbl8xLm5pbCkge1xuICAgICAgICBjb25zdCBwYXNzQ3h0ID0gaXQub3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogbmFtZXNfMS5kZWZhdWx0LnNlbGY7XG4gICAgICAgIGNvbnN0IHBhc3NTY2hlbWEgPSAhKChcImNvbXBpbGVcIiBpbiBkZWYgJiYgISRkYXRhKSB8fCBkZWYuc2NoZW1hID09PSBmYWxzZSk7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7X2F3YWl0fSR7KDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHZhbGlkYXRlUmVmLCBwYXNzQ3h0LCBwYXNzU2NoZW1hKX1gLCBkZWYubW9kaWZ5aW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVwb3J0RXJycyhlcnJvcnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKChfYSA9IGRlZi52YWxpZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdmFsaWQpLCBlcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZnVuY0tleXdvcmRDb2RlID0gZnVuY0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gbW9kaWZ5RGF0YShjeHQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYoaXQucGFyZW50RGF0YSwgKCkgPT4gZ2VuLmFzc2lnbihkYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnBhcmVudERhdGF9WyR7aXQucGFyZW50RGF0YVByb3BlcnR5fV1gKSk7XG59XG5mdW5jdGlvbiBhZGRFcnJzKGN4dCwgZXJycykge1xuICAgIGNvbnN0IHsgZ2VuIH0gPSBjeHQ7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYEFycmF5LmlzQXJyYXkoJHtlcnJzfSlgLCAoKSA9PiB7XG4gICAgICAgIGdlblxuICAgICAgICAgICAgLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gPT09IG51bGwgPyAke2VycnN9IDogJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30uY29uY2F0KCR7ZXJyc30pYClcbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5leHRlbmRFcnJvcnMpKGN4dCk7XG4gICAgfSwgKCkgPT4gY3h0LmVycm9yKCkpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY0tleXdvcmQoeyBzY2hlbWFFbnYgfSwgZGVmKSB7XG4gICAgaWYgKGRlZi5hc3luYyAmJiAhc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMga2V5d29yZCBpbiBzeW5jIHNjaGVtYVwiKTtcbn1cbmZ1bmN0aW9uIHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCByZXN1bHQpIHtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5d29yZCBcIiR7a2V5d29yZH1cIiBmYWlsZWQgdG8gY29tcGlsZWApO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImtleXdvcmRcIiwgdHlwZW9mIHJlc3VsdCA9PSBcImZ1bmN0aW9uXCIgPyB7IHJlZjogcmVzdWx0IH0gOiB7IHJlZjogcmVzdWx0LCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkocmVzdWx0KSB9KTtcbn1cbmZ1bmN0aW9uIHZhbGlkU2NoZW1hVHlwZShzY2hlbWEsIHNjaGVtYVR5cGUsIGFsbG93VW5kZWZpbmVkID0gZmFsc2UpIHtcbiAgICAvLyBUT0RPIGFkZCB0ZXN0c1xuICAgIHJldHVybiAoIXNjaGVtYVR5cGUubGVuZ3RoIHx8XG4gICAgICAgIHNjaGVtYVR5cGUuc29tZSgoc3QpID0+IHN0ID09PSBcImFycmF5XCJcbiAgICAgICAgICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICA6IHN0ID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgPyBzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICAgICAgICAgICAgICA6IHR5cGVvZiBzY2hlbWEgPT0gc3QgfHwgKGFsbG93VW5kZWZpbmVkICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJ1bmRlZmluZWRcIikpKTtcbn1cbmV4cG9ydHMudmFsaWRTY2hlbWFUeXBlID0gdmFsaWRTY2hlbWFUeXBlO1xuZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkVXNhZ2UoeyBzY2hlbWEsIG9wdHMsIHNlbGYsIGVyclNjaGVtYVBhdGggfSwgZGVmLCBrZXl3b3JkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmLmtleXdvcmQpID8gIWRlZi5rZXl3b3JkLmluY2x1ZGVzKGtleXdvcmQpIDogZGVmLmtleXdvcmQgIT09IGtleXdvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZXBzID0gZGVmLmRlcGVuZGVuY2llcztcbiAgICBpZiAoZGVwcyA9PT0gbnVsbCB8fCBkZXBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXBzLnNvbWUoKGt3ZCkgPT4gIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzY2hlbWEsIGt3ZCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFyZW50IHNjaGVtYSBtdXN0IGhhdmUgZGVwZW5kZW5jaWVzIG9mICR7a2V5d29yZH06ICR7ZGVwcy5qb2luKFwiLFwiKX1gKTtcbiAgICB9XG4gICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGRlZi52YWxpZGF0ZVNjaGVtYShzY2hlbWFba2V5d29yZF0pO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBga2V5d29yZCBcIiR7a2V5d29yZH1cIiB2YWx1ZSBpcyBpbnZhbGlkIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCI6IGAgK1xuICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzVGV4dChkZWYudmFsaWRhdGVTY2hlbWEuZXJyb3JzKTtcbiAgICAgICAgICAgIGlmIChvcHRzLnZhbGlkYXRlU2NoZW1hID09PSBcImxvZ1wiKVxuICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKG1zZyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gdmFsaWRhdGVLZXl3b3JkVXNhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXl3b3JkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHBvcnRzLmdldFN1YnNjaGVtYSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBnZXRTdWJzY2hlbWEoaXQsIHsga2V5d29yZCwgc2NoZW1hUHJvcCwgc2NoZW1hLCBzY2hlbWFQYXRoLCBlcnJTY2hlbWFQYXRoLCB0b3BTY2hlbWFSZWYgfSkge1xuICAgIGlmIChrZXl3b3JkICE9PSB1bmRlZmluZWQgJiYgc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdib3RoIFwia2V5d29yZFwiIGFuZCBcInNjaGVtYVwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHNjaGVtYVByb3AgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2gsXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5zY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoW3NjaGVtYVByb3BdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9LyR7KDAsIHV0aWxfMS5lc2NhcGVGcmFnbWVudCkoc2NoZW1hUHJvcCl9YCxcbiAgICAgICAgICAgIH07XG4gICAgfVxuICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkIHx8IGVyclNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCB0b3BTY2hlbWFSZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInNjaGVtYVBhdGhcIiwgXCJlcnJTY2hlbWFQYXRoXCIgYW5kIFwidG9wU2NoZW1hUmVmXCIgYXJlIHJlcXVpcmVkIHdpdGggXCJzY2hlbWFcIicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBzY2hlbWFQYXRoLFxuICAgICAgICAgICAgdG9wU2NoZW1hUmVmLFxuICAgICAgICAgICAgZXJyU2NoZW1hUGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlaXRoZXIgXCJrZXl3b3JkXCIgb3IgXCJzY2hlbWFcIiBtdXN0IGJlIHBhc3NlZCcpO1xufVxuZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSBnZXRTdWJzY2hlbWE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFEYXRhKHN1YnNjaGVtYSwgaXQsIHsgZGF0YVByb3AsIGRhdGFQcm9wVHlwZTogZHBUeXBlLCBkYXRhLCBkYXRhVHlwZXMsIHByb3BlcnR5TmFtZSB9KSB7XG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImRhdGFcIiBhbmQgXCJkYXRhUHJvcFwiIHBhc3NlZCwgb25seSBvbmUgYWxsb3dlZCcpO1xuICAgIH1cbiAgICBjb25zdCB7IGdlbiB9ID0gaXQ7XG4gICAgaWYgKGRhdGFQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyBlcnJvclBhdGgsIGRhdGFQYXRoQXJyLCBvcHRzIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBnZW4ubGV0KFwiZGF0YVwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0LmRhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShkYXRhUHJvcCl9YCwgdHJ1ZSk7XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBzdWJzY2hlbWEuZXJyb3JQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2Vycm9yUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShkYXRhUHJvcCwgZHBUeXBlLCBvcHRzLmpzUHJvcGVydHlTeW50YXgpfWA7XG4gICAgICAgIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHkgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFQcm9wfWA7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhUGF0aEFyciA9IFsuLi5kYXRhUGF0aEFyciwgc3Vic2NoZW1hLnBhcmVudERhdGFQcm9wZXJ0eV07XG4gICAgfVxuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBkYXRhIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBkYXRhIDogZ2VuLmxldChcImRhdGFcIiwgZGF0YSwgdHJ1ZSk7IC8vIHJlcGxhY2VhYmxlIGlmIHVzZWQgb25jZT9cbiAgICAgICAgZGF0YUNvbnRleHRQcm9wcyhuZXh0RGF0YSk7XG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHN1YnNjaGVtYS5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gICAgICAgIC8vIFRPRE8gc29tZXRoaW5nIGlzIHBvc3NpYmx5IHdyb25nIGhlcmUgd2l0aCBub3QgY2hhbmdpbmcgcGFyZW50RGF0YVByb3BlcnR5IGFuZCBub3QgYXBwZW5kaW5nIGRhdGFQYXRoQXJyXG4gICAgfVxuICAgIGlmIChkYXRhVHlwZXMpXG4gICAgICAgIHN1YnNjaGVtYS5kYXRhVHlwZXMgPSBkYXRhVHlwZXM7XG4gICAgZnVuY3Rpb24gZGF0YUNvbnRleHRQcm9wcyhfbmV4dERhdGEpIHtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGEgPSBfbmV4dERhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gW107XG4gICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YSA9IGl0LmRhdGE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhTmFtZXMgPSBbLi4uaXQuZGF0YU5hbWVzLCBfbmV4dERhdGFdO1xuICAgIH1cbn1cbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hRGF0YSA9IGV4dGVuZFN1YnNjaGVtYURhdGE7XG5mdW5jdGlvbiBleHRlbmRTdWJzY2hlbWFNb2RlKHN1YnNjaGVtYSwgeyBqdGREaXNjcmltaW5hdG9yLCBqdGRNZXRhZGF0YSwgY29tcG9zaXRlUnVsZSwgY3JlYXRlRXJyb3JzLCBhbGxFcnJvcnMgfSkge1xuICAgIGlmIChjb21wb3NpdGVSdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jb21wb3NpdGVSdWxlID0gY29tcG9zaXRlUnVsZTtcbiAgICBpZiAoY3JlYXRlRXJyb3JzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5jcmVhdGVFcnJvcnMgPSBjcmVhdGVFcnJvcnM7XG4gICAgaWYgKGFsbEVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuYWxsRXJyb3JzID0gYWxsRXJyb3JzO1xuICAgIHN1YnNjaGVtYS5qdGREaXNjcmltaW5hdG9yID0ganRkRGlzY3JpbWluYXRvcjsgLy8gbm90IGluaGVyaXRlZFxuICAgIHN1YnNjaGVtYS5qdGRNZXRhZGF0YSA9IGp0ZE1ldGFkYXRhOyAvLyBub3QgaW5oZXJpdGVkXG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYU1vZGUgPSBleHRlbmRTdWJzY2hlbWFNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBleHBvcnRzLnJlc29sdmVVcmwgPSBleHBvcnRzLm5vcm1hbGl6ZUlkID0gZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBleHBvcnRzLmdldEZ1bGxQYXRoID0gZXhwb3J0cy5pbmxpbmVSZWYgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuY29uc3QgdHJhdmVyc2UgPSByZXF1aXJlKFwianNvbi1zY2hlbWEtdHJhdmVyc2VcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBrZXl3b3JkIGRlZmluaXRpb25zXG5jb25zdCBTSU1QTEVfSU5MSU5FRCA9IG5ldyBTZXQoW1xuICAgIFwidHlwZVwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1pbkxlbmd0aFwiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcIm1pbkl0ZW1zXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobGltaXQgPT09IHRydWUpXG4gICAgICAgIHJldHVybiAhaGFzUmVmKHNjaGVtYSk7XG4gICAgaWYgKCFsaW1pdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cbmV4cG9ydHMuaW5saW5lUmVmID0gaW5saW5lUmVmO1xuY29uc3QgUkVGX0tFWVdPUkRTID0gbmV3IFNldChbXG4gICAgXCIkcmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgXCIkZHluYW1pY1JlZlwiLFxuICAgIFwiJGR5bmFtaWNBbmNob3JcIixcbl0pO1xuZnVuY3Rpb24gaGFzUmVmKHNjaGVtYSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoUkVGX0tFWVdPUkRTLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpICYmIHNjaC5zb21lKGhhc1JlZikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIiAmJiBoYXNSZWYoc2NoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChTSU1QTEVfSU5MSU5FRC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYVtrZXldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKHNjaGVtYVtrZXldLCAoc2NoKSA9PiAoY291bnQgKz0gY291bnRLZXlzKHNjaCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5mdW5jdGlvbiBnZXRGdWxsUGF0aChyZXNvbHZlciwgaWQgPSBcIlwiLCBub3JtYWxpemUpIHtcbiAgICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSlcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgY29uc3QgcCA9IHJlc29sdmVyLnBhcnNlKGlkKTtcbiAgICByZXR1cm4gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKTtcbn1cbmV4cG9ydHMuZ2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSByZXNvbHZlci5zZXJpYWxpemUocCk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQuc3BsaXQoXCIjXCIpWzBdICsgXCIjXCI7XG59XG5leHBvcnRzLl9nZXRGdWxsUGF0aCA9IF9nZXRGdWxsUGF0aDtcbmNvbnN0IFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCBcIlwiKSA6IFwiXCI7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUlkID0gbm9ybWFsaXplSWQ7XG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlc29sdmVyLCBiYXNlSWQsIGlkKSB7XG4gICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5leHBvcnRzLnJlc29sdmVVcmwgPSByZXNvbHZlVXJsO1xuY29uc3QgQU5DSE9SID0gL15bYS16X11bLWEtejAtOS5fXSokL2k7XG5mdW5jdGlvbiBnZXRTY2hlbWFSZWZzKHNjaGVtYSwgYmFzZUlkKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHNjaGVtYUlkLCB1cmlSZXNvbHZlciB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IHNjaElkID0gbm9ybWFsaXplSWQoc2NoZW1hW3NjaGVtYUlkXSB8fCBiYXNlSWQpO1xuICAgIGNvbnN0IGJhc2VJZHMgPSB7IFwiXCI6IHNjaElkIH07XG4gICAgY29uc3QgcGF0aFByZWZpeCA9IGdldEZ1bGxQYXRoKHVyaVJlc29sdmVyLCBzY2hJZCwgZmFsc2UpO1xuICAgIGNvbnN0IGxvY2FsUmVmcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYVJlZnMgPSBuZXcgU2V0KCk7XG4gICAgdHJhdmVyc2Uoc2NoZW1hLCB7IGFsbEtleXM6IHRydWUgfSwgKHNjaCwganNvblB0ciwgXywgcGFyZW50SnNvblB0cikgPT4ge1xuICAgICAgICBpZiAocGFyZW50SnNvblB0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhQcmVmaXggKyBqc29uUHRyO1xuICAgICAgICBsZXQgYmFzZUlkID0gYmFzZUlkc1twYXJlbnRKc29uUHRyXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hbc2NoZW1hSWRdID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBiYXNlSWQgPSBhZGRSZWYuY2FsbCh0aGlzLCBzY2hbc2NoZW1hSWRdKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRhbmNob3IpO1xuICAgICAgICBhZGRBbmNob3IuY2FsbCh0aGlzLCBzY2guJGR5bmFtaWNBbmNob3IpO1xuICAgICAgICBiYXNlSWRzW2pzb25QdHJdID0gYmFzZUlkO1xuICAgICAgICBmdW5jdGlvbiBhZGRSZWYocmVmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5yZXNvbHZlO1xuICAgICAgICAgICAgcmVmID0gbm9ybWFsaXplSWQoYmFzZUlkID8gX3Jlc29sdmUoYmFzZUlkLCByZWYpIDogcmVmKTtcbiAgICAgICAgICAgIGlmIChzY2hlbWFSZWZzLmhhcyhyZWYpKVxuICAgICAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgICAgICAgICBzY2hlbWFSZWZzLmFkZChyZWYpO1xuICAgICAgICAgICAgbGV0IHNjaE9yUmVmID0gdGhpcy5yZWZzW3JlZl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgc2NoT3JSZWYgPSB0aGlzLnJlZnNbc2NoT3JSZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIHNjaE9yUmVmLnNjaGVtYSwgcmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZiAhPT0gbm9ybWFsaXplSWQoZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZlswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIGxvY2FsUmVmc1tyZWZdLCByZWYpO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFJlZnNbcmVmXSA9IHNjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmc1tyZWZdID0gZnVsbFBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGRBbmNob3IoYW5jaG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFuY2hvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBTkNIT1IudGVzdChhbmNob3IpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW5jaG9yIFwiJHthbmNob3J9XCJgKTtcbiAgICAgICAgICAgICAgICBhZGRSZWYuY2FsbCh0aGlzLCBgIyR7YW5jaG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2FsUmVmcztcbiAgICBmdW5jdGlvbiBjaGVja0FtYmlndW9zUmVmKHNjaDEsIHNjaDIsIHJlZikge1xuICAgICAgICBpZiAoc2NoMiAhPT0gdW5kZWZpbmVkICYmICFlcXVhbChzY2gxLCBzY2gyKSlcbiAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFtYmlndW9zKHJlZikge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGByZWZlcmVuY2UgXCIke3JlZn1cIiByZXNvbHZlcyB0byBtb3JlIHRoYW4gb25lIHNjaGVtYWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGdldFNjaGVtYVJlZnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERhdGEgPSBleHBvcnRzLktleXdvcmRDeHQgPSBleHBvcnRzLnZhbGlkYXRlRnVuY3Rpb25Db2RlID0gdm9pZCAwO1xuY29uc3QgYm9vbFNjaGVtYV8xID0gcmVxdWlyZShcIi4vYm9vbFNjaGVtYVwiKTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi9kYXRhVHlwZVwiKTtcbmNvbnN0IGFwcGxpY2FiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2FiaWxpdHlcIik7XG5jb25zdCBkYXRhVHlwZV8yID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBkZWZhdWx0c18xID0gcmVxdWlyZShcIi4vZGVmYXVsdHNcIik7XG5jb25zdCBrZXl3b3JkXzEgPSByZXF1aXJlKFwiLi9rZXl3b3JkXCIpO1xuY29uc3Qgc3Vic2NoZW1hXzEgPSByZXF1aXJlKFwiLi9zdWJzY2hlbWFcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi4vcmVzb2x2ZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuLy8gc2NoZW1hIGNvbXBpbGF0aW9uIC0gZ2VuZXJhdGVzIHZhbGlkYXRpb24gZnVuY3Rpb24sIHN1YnNjaGVtYUNvZGUgKGJlbG93KSBpcyB1c2VkIGZvciBzdWJzY2hlbWFzXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29kZShpdCkge1xuICAgIGlmIChpc1NjaGVtYU9iaihpdCkpIHtcbiAgICAgICAgY2hlY2tLZXl3b3JkcyhpdCk7XG4gICAgICAgIGlmIChzY2hlbWFDeHRIYXNSdWxlcyhpdCkpIHtcbiAgICAgICAgICAgIHRvcFNjaGVtYU9iakNvZGUoaXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRnVuY3Rpb24oaXQsICgpID0+ICgwLCBib29sU2NoZW1hXzEudG9wQm9vbE9yRW1wdHlTY2hlbWEpKGl0KSk7XG59XG5leHBvcnRzLnZhbGlkYXRlRnVuY3Rpb25Db2RlID0gdmFsaWRhdGVGdW5jdGlvbkNvZGU7XG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHsgZ2VuLCB2YWxpZGF0ZU5hbWUsIHNjaGVtYSwgc2NoZW1hRW52LCBvcHRzIH0sIGJvZHkpIHtcbiAgICBpZiAob3B0cy5jb2RlLmVzNSkge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9YCwgc2NoZW1hRW52LiRhc3luYywgKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgXCJ1c2Ugc3RyaWN0XCI7ICR7ZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpfWApO1xuICAgICAgICAgICAgZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKTtcbiAgICAgICAgICAgIGdlbi5jb2RlKGJvZHkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5mdW5jKHZhbGlkYXRlTmFtZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZGF0YX0sICR7ZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cyl9YCwgc2NoZW1hRW52LiRhc3luYywgKCkgPT4gZ2VuLmNvZGUoZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpKS5jb2RlKGJvZHkpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZXN0cnVjdHVyZVZhbEN4dChvcHRzKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHske25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGh9PVwiXCIsICR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGF9LCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9LCAke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX09JHtuYW1lc18xLmRlZmF1bHQuZGF0YX0ke29wdHMuZHluYW1pY1JlZiA/ICgwLCBjb2RlZ2VuXzEuXykgYCwgJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9PXt9YCA6IGNvZGVnZW5fMS5uaWx9fT17fWA7XG59XG5mdW5jdGlvbiBkZXN0cnVjdHVyZVZhbEN4dEVTNShnZW4sIG9wdHMpIHtcbiAgICBnZW4uaWYobmFtZXNfMS5kZWZhdWx0LnZhbEN4dCwgKCkgPT4ge1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGF9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHl9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhfWApO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnN9YCk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCBuYW1lc18xLmRlZmF1bHQuZGF0YSk7XG4gICAgICAgIGlmIChvcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRvcFNjaGVtYU9iakNvZGUoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cywgZ2VuIH0gPSBpdDtcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiB7XG4gICAgICAgIGlmIChvcHRzLiRjb21tZW50ICYmIHNjaGVtYS4kY29tbWVudClcbiAgICAgICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICAgICAgY2hlY2tOb0RlZmF1bHQoaXQpO1xuICAgICAgICBnZW4ubGV0KG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCBudWxsKTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAwKTtcbiAgICAgICAgaWYgKG9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXNldEV2YWx1YXRlZChpdCk7XG4gICAgICAgIHR5cGVBbmRLZXl3b3JkcyhpdCk7XG4gICAgICAgIHJldHVyblJlc3VsdHMoaXQpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbn1cbmZ1bmN0aW9uIHJlc2V0RXZhbHVhdGVkKGl0KSB7XG4gICAgLy8gVE9ETyBtYXliZSBzb21lIGhvb2sgdG8gZXhlY3V0ZSBpdCBpbiB0aGUgZW5kIHRvIGNoZWNrIHdoZXRoZXIgcHJvcHMvaXRlbXMgYXJlIE5hbWUsIGFzIGluIGFzc2lnbkV2YWx1YXRlZFxuICAgIGNvbnN0IHsgZ2VuLCB2YWxpZGF0ZU5hbWUgfSA9IGl0O1xuICAgIGl0LmV2YWx1YXRlZCA9IGdlbi5jb25zdChcImV2YWx1YXRlZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXZhbHVhdGVkYCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljUHJvcHNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5wcm9wc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LmR5bmFtaWNJdGVtc2AsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9Lml0ZW1zYCwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCkpO1xufVxuZnVuY3Rpb24gZnVuY1NvdXJjZVVybChzY2hlbWEsIG9wdHMpIHtcbiAgICBjb25zdCBzY2hJZCA9IHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWFbb3B0cy5zY2hlbWFJZF07XG4gICAgcmV0dXJuIHNjaElkICYmIChvcHRzLmNvZGUuc291cmNlIHx8IG9wdHMuY29kZS5wcm9jZXNzKSA/ICgwLCBjb2RlZ2VuXzEuXykgYC8qIyBzb3VyY2VVUkw9JHtzY2hJZH0gKi9gIDogY29kZWdlbl8xLm5pbDtcbn1cbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSB0byBnZW5lcmF0ZSBjb2RlIGZvciBzdWItc2NoZW1hc1xuZnVuY3Rpb24gc3Vic2NoZW1hQ29kZShpdCwgdmFsaWQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICBzdWJTY2hlbWFPYmpDb2RlKGl0LCB2YWxpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgKDAsIGJvb2xTY2hlbWFfMS5ib29sT3JFbXB0eVNjaGVtYSkoaXQsIHZhbGlkKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUN4dEhhc1J1bGVzKHsgc2NoZW1hLCBzZWxmIH0pIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAoc2VsZi5SVUxFUy5hbGxba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzU2NoZW1hT2JqKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdC5zY2hlbWEgIT0gXCJib29sZWFuXCI7XG59XG5mdW5jdGlvbiBzdWJTY2hlbWFPYmpDb2RlKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBnZW4sIG9wdHMgfSA9IGl0O1xuICAgIGlmIChvcHRzLiRjb21tZW50ICYmIHNjaGVtYS4kY29tbWVudClcbiAgICAgICAgY29tbWVudEtleXdvcmQoaXQpO1xuICAgIHVwZGF0ZUNvbnRleHQoaXQpO1xuICAgIGNoZWNrQXN5bmNTY2hlbWEoaXQpO1xuICAgIGNvbnN0IGVycnNDb3VudCA9IGdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgIHR5cGVBbmRLZXl3b3JkcyhpdCwgZXJyc0NvdW50KTtcbiAgICAvLyBUT0RPIHZhclxuICAgIGdlbi52YXIodmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xufVxuZnVuY3Rpb24gY2hlY2tLZXl3b3JkcyhpdCkge1xuICAgICgwLCB1dGlsXzEuY2hlY2tVbmtub3duUnVsZXMpKGl0KTtcbiAgICBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCk7XG59XG5mdW5jdGlvbiB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCkge1xuICAgIGlmIChpdC5vcHRzLmp0ZClcbiAgICAgICAgcmV0dXJuIHNjaGVtYUtleXdvcmRzKGl0LCBbXSwgZmFsc2UsIGVycnNDb3VudCk7XG4gICAgY29uc3QgdHlwZXMgPSAoMCwgZGF0YVR5cGVfMS5nZXRTY2hlbWFUeXBlcykoaXQuc2NoZW1hKTtcbiAgICBjb25zdCBjaGVja2VkVHlwZXMgPSAoMCwgZGF0YVR5cGVfMS5jb2VyY2VBbmRDaGVja0RhdGFUeXBlKShpdCwgdHlwZXMpO1xuICAgIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgIWNoZWNrZWRUeXBlcywgZXJyc0NvdW50KTtcbn1cbmZ1bmN0aW9uIGNoZWNrUmVmc0FuZEtleXdvcmRzKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiBvcHRzLmlnbm9yZUtleXdvcmRzV2l0aFJlZiAmJiAoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIHNlbGYuUlVMRVMpKSB7XG4gICAgICAgIHNlbGYubG9nZ2VyLndhcm4oYCRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja05vRGVmYXVsdChpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLmRlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnVzZURlZmF1bHRzICYmIG9wdHMuc3RyaWN0U2NoZW1hKSB7XG4gICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgXCJkZWZhdWx0IGlzIGlnbm9yZWQgaW4gdGhlIHNjaGVtYSByb290XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoaXQpIHtcbiAgICBjb25zdCBzY2hJZCA9IGl0LnNjaGVtYVtpdC5vcHRzLnNjaGVtYUlkXTtcbiAgICBpZiAoc2NoSWQpXG4gICAgICAgIGl0LmJhc2VJZCA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkoaXQub3B0cy51cmlSZXNvbHZlciwgaXQuYmFzZUlkLCBzY2hJZCk7XG59XG5mdW5jdGlvbiBjaGVja0FzeW5jU2NoZW1hKGl0KSB7XG4gICAgaWYgKGl0LnNjaGVtYS4kYXN5bmMgJiYgIWl0LnNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSBpbiBzeW5jIHNjaGVtYVwiKTtcbn1cbmZ1bmN0aW9uIGNvbW1lbnRLZXl3b3JkKHsgZ2VuLCBzY2hlbWFFbnYsIHNjaGVtYSwgZXJyU2NoZW1hUGF0aCwgb3B0cyB9KSB7XG4gICAgY29uc3QgbXNnID0gc2NoZW1hLiRjb21tZW50O1xuICAgIGlmIChvcHRzLiRjb21tZW50ID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9LmxvZ2dlci5sb2coJHttc2d9KWApO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy4kY29tbWVudCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJTY2hlbWFQYXRofS8kY29tbWVudGA7XG4gICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiBzY2hlbWFFbnYucm9vdCB9KTtcbiAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn0ub3B0cy4kY29tbWVudCgke21zZ30sICR7c2NoZW1hUGF0aH0sICR7cm9vdE5hbWV9LnNjaGVtYSlgKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXR1cm5SZXN1bHRzKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYUVudiwgdmFsaWRhdGVOYW1lLCBWYWxpZGF0aW9uRXJyb3IsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIC8vIFRPRE8gYXNzaWduIHVuZXZhbHVhdGVkXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCwgKCkgPT4gZ2VuLnJldHVybihuYW1lc18xLmRlZmF1bHQuZGF0YSksICgpID0+IGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtWYWxpZGF0aW9uRXJyb3J9KCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9KWApKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzKTtcbiAgICAgICAgaWYgKG9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICBhc3NpZ25FdmFsdWF0ZWQoaXQpO1xuICAgICAgICBnZW4ucmV0dXJuKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09IDBgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhc3NpZ25FdmFsdWF0ZWQoeyBnZW4sIGV2YWx1YXRlZCwgcHJvcHMsIGl0ZW1zIH0pIHtcbiAgICBpZiAocHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSlcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2V2YWx1YXRlZH0ucHJvcHNgLCBwcm9wcyk7XG4gICAgaWYgKGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9Lml0ZW1zYCwgaXRlbXMpO1xufVxuZnVuY3Rpb24gc2NoZW1hS2V5d29yZHMoaXQsIHR5cGVzLCB0eXBlRXJyb3JzLCBlcnJzQ291bnQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBhbGxFcnJvcnMsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHNlbGY7XG4gICAgaWYgKHNjaGVtYS4kcmVmICYmIChvcHRzLmlnbm9yZUtleXdvcmRzV2l0aFJlZiB8fCAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBSVUxFUykpKSB7XG4gICAgICAgIGdlbi5ibG9jaygoKSA9PiBrZXl3b3JkQ29kZShpdCwgXCIkcmVmXCIsIFJVTEVTLmFsbC4kcmVmLmRlZmluaXRpb24pKTsgLy8gVE9ETyB0eXBlY2FzdFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghb3B0cy5qdGQpXG4gICAgICAgIGNoZWNrU3RyaWN0VHlwZXMoaXQsIHR5cGVzKTtcbiAgICBnZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIFJVTEVTLnJ1bGVzKVxuICAgICAgICAgICAgZ3JvdXBLZXl3b3Jkcyhncm91cCk7XG4gICAgICAgIGdyb3VwS2V5d29yZHMoUlVMRVMucG9zdCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZ3JvdXBLZXl3b3Jkcyhncm91cCkge1xuICAgICAgICBpZiAoISgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlR3JvdXApKHNjaGVtYSwgZ3JvdXApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZ3JvdXAudHlwZSkge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGUpKGdyb3VwLnR5cGUsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycykpO1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgICAgICBpZiAodHlwZXMubGVuZ3RoID09PSAxICYmIHR5cGVzWzBdID09PSBncm91cC50eXBlICYmIHR5cGVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgICAgICgwLCBkYXRhVHlwZV8yLnJlcG9ydFR5cGVFcnJvcikoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIG1ha2UgaXQgXCJva1wiIGNhbGw/XG4gICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09ICR7ZXJyc0NvdW50IHx8IDB9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIG9wdHM6IHsgdXNlRGVmYXVsdHMgfSwgfSA9IGl0O1xuICAgIGlmICh1c2VEZWZhdWx0cylcbiAgICAgICAgKDAsIGRlZmF1bHRzXzEuYXNzaWduRGVmYXVsdHMpKGl0LCBncm91cC50eXBlKTtcbiAgICBnZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZ3JvdXAucnVsZXMpIHtcbiAgICAgICAgICAgIGlmICgoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZVJ1bGUpKHNjaGVtYSwgcnVsZSkpIHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkQ29kZShpdCwgcnVsZS5rZXl3b3JkLCBydWxlLmRlZmluaXRpb24sIGdyb3VwLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcykge1xuICAgIGlmIChpdC5zY2hlbWFFbnYubWV0YSB8fCAhaXQub3B0cy5zdHJpY3RUeXBlcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNoZWNrQ29udGV4dFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgaWYgKCFpdC5vcHRzLmFsbG93VW5pb25UeXBlcylcbiAgICAgICAgY2hlY2tNdWx0aXBsZVR5cGVzKGl0LCB0eXBlcyk7XG4gICAgY2hlY2tLZXl3b3JkVHlwZXMoaXQsIGl0LmRhdGFUeXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoIXR5cGVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICghaXQuZGF0YVR5cGVzLmxlbmd0aCkge1xuICAgICAgICBpdC5kYXRhVHlwZXMgPSB0eXBlcztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0eXBlcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgIGlmICghaW5jbHVkZXNUeXBlKGl0LmRhdGFUeXBlcywgdCkpIHtcbiAgICAgICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIGB0eXBlIFwiJHt0fVwiIG5vdCBhbGxvd2VkIGJ5IGNvbnRleHQgXCIke2l0LmRhdGFUeXBlcy5qb2luKFwiLFwiKX1cImApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgbmFycm93U2NoZW1hVHlwZXMoaXQsIHR5cGVzKTtcbn1cbmZ1bmN0aW9uIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHMpIHtcbiAgICBpZiAodHMubGVuZ3RoID4gMSAmJiAhKHRzLmxlbmd0aCA9PT0gMiAmJiB0cy5pbmNsdWRlcyhcIm51bGxcIikpKSB7XG4gICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIFwidXNlIGFsbG93VW5pb25UeXBlcyB0byBhbGxvdyB1bmlvbiB0eXBlIGtleXdvcmRcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tLZXl3b3JkVHlwZXMoaXQsIHRzKSB7XG4gICAgY29uc3QgcnVsZXMgPSBpdC5zZWxmLlJVTEVTLmFsbDtcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgaW4gcnVsZXMpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2tleXdvcmRdO1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUgPT0gXCJvYmplY3RcIiAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZVJ1bGUpKGl0LnNjaGVtYSwgcnVsZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKHR5cGUubGVuZ3RoICYmICF0eXBlLnNvbWUoKHQpID0+IGhhc0FwcGxpY2FibGVUeXBlKHRzLCB0KSkpIHtcbiAgICAgICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgbWlzc2luZyB0eXBlIFwiJHt0eXBlLmpvaW4oXCIsXCIpfVwiIGZvciBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBoYXNBcHBsaWNhYmxlVHlwZShzY2hUcywga3dkVCkge1xuICAgIHJldHVybiBzY2hUcy5pbmNsdWRlcyhrd2RUKSB8fCAoa3dkVCA9PT0gXCJudW1iZXJcIiAmJiBzY2hUcy5pbmNsdWRlcyhcImludGVnZXJcIikpO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNUeXBlKHRzLCB0KSB7XG4gICAgcmV0dXJuIHRzLmluY2x1ZGVzKHQpIHx8ICh0ID09PSBcImludGVnZXJcIiAmJiB0cy5pbmNsdWRlcyhcIm51bWJlclwiKSk7XG59XG5mdW5jdGlvbiBuYXJyb3dTY2hlbWFUeXBlcyhpdCwgd2l0aFR5cGVzKSB7XG4gICAgY29uc3QgdHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgaXQuZGF0YVR5cGVzKSB7XG4gICAgICAgIGlmIChpbmNsdWRlc1R5cGUod2l0aFR5cGVzLCB0KSlcbiAgICAgICAgICAgIHRzLnB1c2godCk7XG4gICAgICAgIGVsc2UgaWYgKHdpdGhUeXBlcy5pbmNsdWRlcyhcImludGVnZXJcIikgJiYgdCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRzLnB1c2goXCJpbnRlZ2VyXCIpO1xuICAgIH1cbiAgICBpdC5kYXRhVHlwZXMgPSB0cztcbn1cbmZ1bmN0aW9uIHN0cmljdFR5cGVzRXJyb3IoaXQsIG1zZykge1xuICAgIGNvbnN0IHNjaGVtYVBhdGggPSBpdC5zY2hlbWFFbnYuYmFzZUlkICsgaXQuZXJyU2NoZW1hUGF0aDtcbiAgICBtc2cgKz0gYCBhdCBcIiR7c2NoZW1hUGF0aH1cIiAoc3RyaWN0VHlwZXMpYDtcbiAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgaXQub3B0cy5zdHJpY3RUeXBlcyk7XG59XG5jbGFzcyBLZXl3b3JkQ3h0IHtcbiAgICBjb25zdHJ1Y3RvcihpdCwgZGVmLCBrZXl3b3JkKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEudmFsaWRhdGVLZXl3b3JkVXNhZ2UpKGl0LCBkZWYsIGtleXdvcmQpO1xuICAgICAgICB0aGlzLmdlbiA9IGl0LmdlbjtcbiAgICAgICAgdGhpcy5hbGxFcnJvcnMgPSBpdC5hbGxFcnJvcnM7XG4gICAgICAgIHRoaXMua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IGl0LmRhdGE7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgICAgICB0aGlzLiRkYXRhID0gZGVmLiRkYXRhICYmIGl0Lm9wdHMuJGRhdGEgJiYgdGhpcy5zY2hlbWEgJiYgdGhpcy5zY2hlbWEuJGRhdGE7XG4gICAgICAgIHRoaXMuc2NoZW1hVmFsdWUgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgdGhpcy5zY2hlbWEsIGtleXdvcmQsIHRoaXMuJGRhdGEpO1xuICAgICAgICB0aGlzLnNjaGVtYVR5cGUgPSBkZWYuc2NoZW1hVHlwZTtcbiAgICAgICAgdGhpcy5wYXJlbnRTY2hlbWEgPSBpdC5zY2hlbWE7XG4gICAgICAgIHRoaXMucGFyYW1zID0ge307XG4gICAgICAgIHRoaXMuaXQgPSBpdDtcbiAgICAgICAgdGhpcy5kZWYgPSBkZWY7XG4gICAgICAgIGlmICh0aGlzLiRkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSBpdC5nZW4uY29uc3QoXCJ2U2NoZW1hXCIsIGdldERhdGEodGhpcy4kZGF0YSwgaXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ29kZSA9IHRoaXMuc2NoZW1hVmFsdWU7XG4gICAgICAgICAgICBpZiAoISgwLCBrZXl3b3JkXzEudmFsaWRTY2hlbWFUeXBlKSh0aGlzLnNjaGVtYSwgZGVmLnNjaGVtYVR5cGUsIGRlZi5hbGxvd1VuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5d29yZH0gdmFsdWUgbXVzdCBiZSAke0pTT04uc3RyaW5naWZ5KGRlZi5zY2hlbWFUeXBlKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJjb2RlXCIgaW4gZGVmID8gZGVmLnRyYWNrRXJyb3JzIDogZGVmLmVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyc0NvdW50ID0gaXQuZ2VuLmNvbnN0KFwiX2VycnNcIiwgbmFtZXNfMS5kZWZhdWx0LmVycm9ycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0KGNvbmRpdGlvbiwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmZhaWxSZXN1bHQoKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmRpdGlvbiksIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pO1xuICAgIH1cbiAgICBmYWlsUmVzdWx0KGNvbmRpdGlvbiwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmdlbi5pZihjb25kaXRpb24pO1xuICAgICAgICBpZiAoZmFpbEFjdGlvbilcbiAgICAgICAgICAgIGZhaWxBY3Rpb24oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICBpZiAoc3VjY2Vzc0FjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICAgICAgc3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFzcyhjb25kaXRpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCB1bmRlZmluZWQsIGZhaWxBY3Rpb24pO1xuICAgIH1cbiAgICBmYWlsKGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoY29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uaWYoZmFsc2UpOyAvLyB0aGlzIGJyYW5jaCB3aWxsIGJlIHJlbW92ZWQgYnkgZ2VuLm9wdGltaXplXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgfVxuICAgIGZhaWwkZGF0YShjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbChjb25kaXRpb24pO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUNvZGUgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuZmFpbCgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICE9PSB1bmRlZmluZWQgJiYgKCR7KDAsIGNvZGVnZW5fMS5vcikodGhpcy5pbnZhbGlkJGRhdGEoKSwgY29uZGl0aW9uKX0pYCk7XG4gICAgfVxuICAgIGVycm9yKGFwcGVuZCwgZXJyb3JQYXJhbXMsIGVycm9yUGF0aHMpIHtcbiAgICAgICAgaWYgKGVycm9yUGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtcyhlcnJvclBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoe30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocyk7XG4gICAgfVxuICAgIF9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpIHtcbiAgICAgICAgO1xuICAgICAgICAoYXBwZW5kID8gZXJyb3JzXzEucmVwb3J0RXh0cmFFcnJvciA6IGVycm9yc18xLnJlcG9ydEVycm9yKSh0aGlzLCB0aGlzLmRlZi5lcnJvciwgZXJyb3JQYXRocyk7XG4gICAgfVxuICAgICRkYXRhRXJyb3IoKSB7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuJGRhdGFFcnJvciB8fCBlcnJvcnNfMS5rZXl3b3JkJERhdGFFcnJvcik7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5lcnJzQ291bnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYWRkIFwidHJhY2tFcnJvcnNcIiB0byBrZXl3b3JkIGRlZmluaXRpb24nKTtcbiAgICAgICAgKDAsIGVycm9yc18xLnJlc2V0RXJyb3JzQ291bnQpKHRoaXMuZ2VuLCB0aGlzLmVycnNDb3VudCk7XG4gICAgfVxuICAgIG9rKGNvbmQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGNvbmQpO1xuICAgIH1cbiAgICBzZXRQYXJhbXMob2JqLCBhc3NpZ24pIHtcbiAgICAgICAgaWYgKGFzc2lnbilcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wYXJhbXMsIG9iaik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gb2JqO1xuICAgIH1cbiAgICBibG9jayRkYXRhKHZhbGlkLCBjb2RlQmxvY2ssICRkYXRhVmFsaWQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIHRoaXMuZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2skZGF0YSh2YWxpZCwgJGRhdGFWYWxpZCk7XG4gICAgICAgICAgICBjb2RlQmxvY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNoZWNrJGRhdGEodmFsaWQgPSBjb2RlZ2VuXzEubmlsLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICBpZiAoIXRoaXMuJGRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYgfSA9IHRoaXM7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm9yKSgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ID09PSB1bmRlZmluZWRgLCAkZGF0YVZhbGlkKSk7XG4gICAgICAgIGlmICh2YWxpZCAhPT0gY29kZWdlbl8xLm5pbClcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICBpZiAoc2NoZW1hVHlwZS5sZW5ndGggfHwgZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgICAgICBnZW4uZWxzZUlmKHRoaXMuaW52YWxpZCRkYXRhKCkpO1xuICAgICAgICAgICAgdGhpcy4kZGF0YUVycm9yKCk7XG4gICAgICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGdlbi5lbHNlKCk7XG4gICAgfVxuICAgIGludmFsaWQkZGF0YSgpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYUNvZGUsIHNjaGVtYVR5cGUsIGRlZiwgaXQgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm9yKSh3cm9uZyREYXRhVHlwZSgpLCBpbnZhbGlkJERhdGFTY2hlbWEoKSk7XG4gICAgICAgIGZ1bmN0aW9uIHdyb25nJERhdGFUeXBlKCkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKCEoc2NoZW1hQ29kZSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0ID0gQXJyYXkuaXNBcnJheShzY2hlbWFUeXBlKSA/IHNjaGVtYVR5cGUgOiBbc2NoZW1hVHlwZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGRhdGFUeXBlXzIuY2hlY2tEYXRhVHlwZXMpKHN0LCBzY2hlbWFDb2RlLCBpdC5vcHRzLnN0cmljdE51bWJlcnMsIGRhdGFUeXBlXzIuRGF0YVR5cGUuV3JvbmcpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpbnZhbGlkJERhdGFTY2hlbWEoKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVTY2hlbWFSZWYgPSBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlJGRhdGFcIiwgeyByZWY6IGRlZi52YWxpZGF0ZVNjaGVtYSB9KTsgLy8gVE9ETyB2YWx1ZS5jb2RlIGZvciBzdGFuZGFsb25lXG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCEke3ZhbGlkYXRlU2NoZW1hUmVmfSgke3NjaGVtYUNvZGV9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdWJzY2hlbWEoYXBwbCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NoZW1hID0gKDAsIHN1YnNjaGVtYV8xLmdldFN1YnNjaGVtYSkodGhpcy5pdCwgYXBwbCk7XG4gICAgICAgICgwLCBzdWJzY2hlbWFfMS5leHRlbmRTdWJzY2hlbWFEYXRhKShzdWJzY2hlbWEsIHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hTW9kZSkoc3Vic2NoZW1hLCBhcHBsKTtcbiAgICAgICAgY29uc3QgbmV4dENvbnRleHQgPSB7IC4uLnRoaXMuaXQsIC4uLnN1YnNjaGVtYSwgaXRlbXM6IHVuZGVmaW5lZCwgcHJvcHM6IHVuZGVmaW5lZCB9O1xuICAgICAgICBzdWJzY2hlbWFDb2RlKG5leHRDb250ZXh0LCB2YWxpZCk7XG4gICAgICAgIHJldHVybiBuZXh0Q29udGV4dDtcbiAgICB9XG4gICAgbWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCB0b05hbWUpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSAmJiBzY2hlbWFDeHQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hlbWFDeHQucHJvcHMsIGl0LnByb3BzLCB0b05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSAmJiBzY2hlbWFDeHQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hlbWFDeHQuaXRlbXMsIGl0Lml0ZW1zLCB0b05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoZW1hQ3h0LCB2YWxpZCkge1xuICAgICAgICBjb25zdCB7IGl0LCBnZW4gfSA9IHRoaXM7XG4gICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIChpdC5wcm9wcyAhPT0gdHJ1ZSB8fCBpdC5pdGVtcyAhPT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIGdlbi5pZih2YWxpZCwgKCkgPT4gdGhpcy5tZXJnZUV2YWx1YXRlZChzY2hlbWFDeHQsIGNvZGVnZW5fMS5OYW1lKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuS2V5d29yZEN4dCA9IEtleXdvcmRDeHQ7XG5mdW5jdGlvbiBrZXl3b3JkQ29kZShpdCwga2V5d29yZCwgZGVmLCBydWxlVHlwZSkge1xuICAgIGNvbnN0IGN4dCA9IG5ldyBLZXl3b3JkQ3h0KGl0LCBkZWYsIGtleXdvcmQpO1xuICAgIGlmIChcImNvZGVcIiBpbiBkZWYpIHtcbiAgICAgICAgZGVmLmNvZGUoY3h0LCBydWxlVHlwZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGN4dC4kZGF0YSAmJiBkZWYudmFsaWRhdGUpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5mdW5jS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoXCJtYWNyb1wiIGluIGRlZikge1xuICAgICAgICAoMCwga2V5d29yZF8xLm1hY3JvS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmLmNvbXBpbGUgfHwgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxufVxuY29uc3QgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbmNvbnN0IFJFTEFUSVZFX0pTT05fUE9JTlRFUiA9IC9eKFswLTldKykoI3xcXC8oPzpbXn5dfH4wfH4xKSopPyQvO1xuZnVuY3Rpb24gZ2V0RGF0YSgkZGF0YSwgeyBkYXRhTGV2ZWwsIGRhdGFOYW1lcywgZGF0YVBhdGhBcnIgfSkge1xuICAgIGxldCBqc29uUG9pbnRlcjtcbiAgICBsZXQgZGF0YTtcbiAgICBpZiAoJGRhdGEgPT09IFwiXCIpXG4gICAgICAgIHJldHVybiBuYW1lc18xLmRlZmF1bHQucm9vdERhdGE7XG4gICAgaWYgKCRkYXRhWzBdID09PSBcIi9cIikge1xuICAgICAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OLXBvaW50ZXI6ICR7JGRhdGF9YCk7XG4gICAgICAgIGpzb25Qb2ludGVyID0gJGRhdGE7XG4gICAgICAgIGRhdGEgPSBuYW1lc18xLmRlZmF1bHQucm9vdERhdGE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gUkVMQVRJVkVfSlNPTl9QT0lOVEVSLmV4ZWMoJGRhdGEpO1xuICAgICAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBjb25zdCB1cCA9ICttYXRjaGVzWzFdO1xuICAgICAgICBqc29uUG9pbnRlciA9IG1hdGNoZXNbMl07XG4gICAgICAgIGlmIChqc29uUG9pbnRlciA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIGlmICh1cCA+PSBkYXRhTGV2ZWwpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKFwicHJvcGVydHkvaW5kZXhcIiwgdXApKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUGF0aEFycltkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwID4gZGF0YUxldmVsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKFwiZGF0YVwiLCB1cCkpO1xuICAgICAgICBkYXRhID0gZGF0YU5hbWVzW2RhdGFMZXZlbCAtIHVwXTtcbiAgICAgICAgaWYgKCFqc29uUG9pbnRlcilcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBsZXQgZXhwciA9IGRhdGE7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIik7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgICBkYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoKDAsIHV0aWxfMS51bmVzY2FwZUpzb25Qb2ludGVyKShzZWdtZW50KSl9YDtcbiAgICAgICAgICAgIGV4cHIgPSAoMCwgY29kZWdlbl8xLl8pIGAke2V4cHJ9ICYmICR7ZGF0YX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHByO1xuICAgIGZ1bmN0aW9uIGVycm9yTXNnKHBvaW50ZXJUeXBlLCB1cCkge1xuICAgICAgICByZXR1cm4gYENhbm5vdCBhY2Nlc3MgJHtwb2ludGVyVHlwZX0gJHt1cH0gbGV2ZWxzIHVwLCBjdXJyZW50IGxldmVsIGlzICR7ZGF0YUxldmVsfWA7XG4gICAgfVxufVxuZXhwb3J0cy5nZXREYXRhID0gZ2V0RGF0YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JzKSB7XG4gICAgICAgIHN1cGVyKFwidmFsaWRhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gVmFsaWRhdGlvbkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdGlvbl9lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVwiKTtcbmNsYXNzIE1pc3NpbmdSZWZFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNvbHZlciwgYmFzZUlkLCByZWYsIG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgYGNhbid0IHJlc29sdmUgcmVmZXJlbmNlICR7cmVmfSBmcm9tIGlkICR7YmFzZUlkfWApO1xuICAgICAgICB0aGlzLm1pc3NpbmdSZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHJlc29sdmVyLCBiYXNlSWQsIHJlZik7XG4gICAgICAgIHRoaXMubWlzc2luZ1NjaGVtYSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKCgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHJlc29sdmVyLCB0aGlzLm1pc3NpbmdSZWYpKTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBNaXNzaW5nUmVmRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWZfZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVzb2x2ZVNjaGVtYSA9IGV4cG9ydHMuZ2V0Q29tcGlsaW5nU2NoZW1hID0gZXhwb3J0cy5yZXNvbHZlUmVmID0gZXhwb3J0cy5jb21waWxlU2NoZW1hID0gZXhwb3J0cy5TY2hlbWFFbnYgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4uL3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi9uYW1lc1wiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlXCIpO1xuY2xhc3MgU2NoZW1hRW52IHtcbiAgICBjb25zdHJ1Y3RvcihlbnYpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLnJlZnMgPSB7fTtcbiAgICAgICAgdGhpcy5keW5hbWljQW5jaG9ycyA9IHt9O1xuICAgICAgICBsZXQgc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIGVudi5zY2hlbWEgPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gZW52LnNjaGVtYTtcbiAgICAgICAgdGhpcy5zY2hlbWFJZCA9IGVudi5zY2hlbWFJZDtcbiAgICAgICAgdGhpcy5yb290ID0gZW52LnJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy5iYXNlSWQgPSAoX2EgPSBlbnYuYmFzZUlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShzY2hlbWEgPT09IG51bGwgfHwgc2NoZW1hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hlbWFbZW52LnNjaGVtYUlkIHx8IFwiJGlkXCJdKTtcbiAgICAgICAgdGhpcy5zY2hlbWFQYXRoID0gZW52LnNjaGVtYVBhdGg7XG4gICAgICAgIHRoaXMubG9jYWxSZWZzID0gZW52LmxvY2FsUmVmcztcbiAgICAgICAgdGhpcy5tZXRhID0gZW52Lm1ldGE7XG4gICAgICAgIHRoaXMuJGFzeW5jID0gc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hLiRhc3luYztcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgfVxufVxuZXhwb3J0cy5TY2hlbWFFbnYgPSBTY2hlbWFFbnY7XG4vLyBsZXQgY29kZVNpemUgPSAwXG4vLyBsZXQgbm9kZUNvdW50ID0gMFxuLy8gQ29tcGlsZXMgc2NoZW1hIGluIFNjaGVtYUVudlxuZnVuY3Rpb24gY29tcGlsZVNjaGVtYShzY2gpIHtcbiAgICAvLyBUT0RPIHJlZmFjdG9yIC0gcmVtb3ZlIGNvbXBpbGF0aW9uc1xuICAgIGNvbnN0IF9zY2ggPSBnZXRDb21waWxpbmdTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xuICAgIGlmIChfc2NoKVxuICAgICAgICByZXR1cm4gX3NjaDtcbiAgICBjb25zdCByb290SWQgPSAoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIHNjaC5yb290LmJhc2VJZCk7IC8vIFRPRE8gaWYgZ2V0RnVsbFBhdGggcmVtb3ZlZCAxIHRlc3RzIGZhaWxzXG4gICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICBjb25zdCB7IG93blByb3BlcnRpZXMgfSA9IHRoaXMub3B0cztcbiAgICBjb25zdCBnZW4gPSBuZXcgY29kZWdlbl8xLkNvZGVHZW4odGhpcy5zY29wZSwgeyBlczUsIGxpbmVzLCBvd25Qcm9wZXJ0aWVzIH0pO1xuICAgIGxldCBfVmFsaWRhdGlvbkVycm9yO1xuICAgIGlmIChzY2guJGFzeW5jKSB7XG4gICAgICAgIF9WYWxpZGF0aW9uRXJyb3IgPSBnZW4uc2NvcGVWYWx1ZShcIkVycm9yXCIsIHtcbiAgICAgICAgICAgIHJlZjogdmFsaWRhdGlvbl9lcnJvcl8xLmRlZmF1bHQsXG4gICAgICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGByZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpLmRlZmF1bHRgLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGVOYW1lID0gZ2VuLnNjb3BlTmFtZShcInZhbGlkYXRlXCIpO1xuICAgIHNjaC52YWxpZGF0ZU5hbWUgPSB2YWxpZGF0ZU5hbWU7XG4gICAgY29uc3Qgc2NoZW1hQ3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGFsbEVycm9yczogdGhpcy5vcHRzLmFsbEVycm9ycyxcbiAgICAgICAgZGF0YTogbmFtZXNfMS5kZWZhdWx0LmRhdGEsXG4gICAgICAgIHBhcmVudERhdGE6IG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLFxuICAgICAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksXG4gICAgICAgIGRhdGFOYW1lczogW25hbWVzXzEuZGVmYXVsdC5kYXRhXSxcbiAgICAgICAgZGF0YVBhdGhBcnI6IFtjb2RlZ2VuXzEubmlsXSxcbiAgICAgICAgZGF0YUxldmVsOiAwLFxuICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICBkZWZpbmVkUHJvcGVydGllczogbmV3IFNldCgpLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyB7IHJlZjogc2NoLnNjaGVtYSwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaC5zY2hlbWEpIH1cbiAgICAgICAgICAgIDogeyByZWY6IHNjaC5zY2hlbWEgfSksXG4gICAgICAgIHZhbGlkYXRlTmFtZSxcbiAgICAgICAgVmFsaWRhdGlvbkVycm9yOiBfVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBzY2hlbWE6IHNjaC5zY2hlbWEsXG4gICAgICAgIHNjaGVtYUVudjogc2NoLFxuICAgICAgICByb290SWQsXG4gICAgICAgIGJhc2VJZDogc2NoLmJhc2VJZCB8fCByb290SWQsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IHNjaC5zY2hlbWFQYXRoIHx8ICh0aGlzLm9wdHMuanRkID8gXCJcIiA6IFwiI1wiKSxcbiAgICAgICAgZXJyb3JQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCxcbiAgICAgICAgb3B0czogdGhpcy5vcHRzLFxuICAgICAgICBzZWxmOiB0aGlzLFxuICAgIH07XG4gICAgbGV0IHNvdXJjZUNvZGU7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zLmFkZChzY2gpO1xuICAgICAgICAoMCwgdmFsaWRhdGVfMS52YWxpZGF0ZUZ1bmN0aW9uQ29kZSkoc2NoZW1hQ3h0KTtcbiAgICAgICAgZ2VuLm9wdGltaXplKHRoaXMub3B0cy5jb2RlLm9wdGltaXplKTtcbiAgICAgICAgLy8gZ2VuLm9wdGltaXplKDEpXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlQ29kZSA9IGdlbi50b1N0cmluZygpO1xuICAgICAgICBzb3VyY2VDb2RlID0gYCR7Z2VuLnNjb3BlUmVmcyhuYW1lc18xLmRlZmF1bHQuc2NvcGUpfXJldHVybiAke3ZhbGlkYXRlQ29kZX1gO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygoY29kZVNpemUgKz0gc291cmNlQ29kZS5sZW5ndGgpLCAobm9kZUNvdW50ICs9IGdlbi5ub2RlQ291bnQpKVxuICAgICAgICBpZiAodGhpcy5vcHRzLmNvZGUucHJvY2VzcylcbiAgICAgICAgICAgIHNvdXJjZUNvZGUgPSB0aGlzLm9wdHMuY29kZS5wcm9jZXNzKHNvdXJjZUNvZGUsIHNjaCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuXFxuXFxuICoqKiBcXG5cIiwgc291cmNlQ29kZSlcbiAgICAgICAgY29uc3QgbWFrZVZhbGlkYXRlID0gbmV3IEZ1bmN0aW9uKGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfWAsIGAke25hbWVzXzEuZGVmYXVsdC5zY29wZX1gLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBtYWtlVmFsaWRhdGUodGhpcywgdGhpcy5zY29wZS5nZXQoKSk7XG4gICAgICAgIHRoaXMuc2NvcGUudmFsdWUodmFsaWRhdGVOYW1lLCB7IHJlZjogdmFsaWRhdGUgfSk7XG4gICAgICAgIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7XG4gICAgICAgIHZhbGlkYXRlLnNjaGVtYSA9IHNjaC5zY2hlbWE7XG4gICAgICAgIHZhbGlkYXRlLnNjaGVtYUVudiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaC4kYXN5bmMpXG4gICAgICAgICAgICB2YWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmNvZGUuc291cmNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZS5zb3VyY2UgPSB7IHZhbGlkYXRlTmFtZSwgdmFsaWRhdGVDb2RlLCBzY29wZVZhbHVlczogZ2VuLl92YWx1ZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRzLnVuZXZhbHVhdGVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHByb3BzLCBpdGVtcyB9ID0gc2NoZW1hQ3h0O1xuICAgICAgICAgICAgdmFsaWRhdGUuZXZhbHVhdGVkID0ge1xuICAgICAgICAgICAgICAgIHByb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogcHJvcHMsXG4gICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyB1bmRlZmluZWQgOiBpdGVtcyxcbiAgICAgICAgICAgICAgICBkeW5hbWljUHJvcHM6IHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUsXG4gICAgICAgICAgICAgICAgZHluYW1pY0l0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZS5zb3VyY2UpXG4gICAgICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlLmV2YWx1YXRlZCA9ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KSh2YWxpZGF0ZS5ldmFsdWF0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHNjaC52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkZWxldGUgc2NoLnZhbGlkYXRlO1xuICAgICAgICBkZWxldGUgc2NoLnZhbGlkYXRlTmFtZTtcbiAgICAgICAgaWYgKHNvdXJjZUNvZGUpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIkVycm9yIGNvbXBpbGluZyBzY2hlbWEsIGZ1bmN0aW9uIGNvZGU6XCIsIHNvdXJjZUNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUsIHRoaXMub3B0cylcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5kZWxldGUoc2NoKTtcbiAgICB9XG59XG5leHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBjb21waWxlU2NoZW1hO1xuZnVuY3Rpb24gcmVzb2x2ZVJlZihyb290LCBiYXNlSWQsIHJlZikge1xuICAgIHZhciBfYTtcbiAgICByZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgIGNvbnN0IHNjaE9yRnVuYyA9IHJvb3QucmVmc1tyZWZdO1xuICAgIGlmIChzY2hPckZ1bmMpXG4gICAgICAgIHJldHVybiBzY2hPckZ1bmM7XG4gICAgbGV0IF9zY2ggPSByZXNvbHZlLmNhbGwodGhpcywgcm9vdCwgcmVmKTtcbiAgICBpZiAoX3NjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IChfYSA9IHJvb3QubG9jYWxSZWZzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbcmVmXTsgLy8gVE9ETyBtYXliZSBsb2NhbFJlZnMgc2hvdWxkIGhvbGQgU2NoZW1hRW52XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHNjaGVtYSlcbiAgICAgICAgICAgIF9zY2ggPSBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIH1cbiAgICBpZiAoX3NjaCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgcmV0dXJuIChyb290LnJlZnNbcmVmXSA9IGlubGluZU9yQ29tcGlsZS5jYWxsKHRoaXMsIF9zY2gpKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVJlZiA9IHJlc29sdmVSZWY7XG5mdW5jdGlvbiBpbmxpbmVPckNvbXBpbGUoc2NoKSB7XG4gICAgaWYgKCgwLCByZXNvbHZlXzEuaW5saW5lUmVmKShzY2guc2NoZW1hLCB0aGlzLm9wdHMuaW5saW5lUmVmcykpXG4gICAgICAgIHJldHVybiBzY2guc2NoZW1hO1xuICAgIHJldHVybiBzY2gudmFsaWRhdGUgPyBzY2ggOiBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbn1cbi8vIEluZGV4IG9mIHNjaGVtYSBjb21waWxhdGlvbiBpbiB0aGUgY3VycmVudGx5IGNvbXBpbGVkIGxpc3RcbmZ1bmN0aW9uIGdldENvbXBpbGluZ1NjaGVtYShzY2hFbnYpIHtcbiAgICBmb3IgKGNvbnN0IHNjaCBvZiB0aGlzLl9jb21waWxhdGlvbnMpIHtcbiAgICAgICAgaWYgKHNhbWVTY2hlbWFFbnYoc2NoLCBzY2hFbnYpKVxuICAgICAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGdldENvbXBpbGluZ1NjaGVtYTtcbmZ1bmN0aW9uIHNhbWVTY2hlbWFFbnYoczEsIHMyKSB7XG4gICAgcmV0dXJuIHMxLnNjaGVtYSA9PT0gczIuc2NoZW1hICYmIHMxLnJvb3QgPT09IHMyLnJvb3QgJiYgczEuYmFzZUlkID09PSBzMi5iYXNlSWQ7XG59XG4vLyByZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKVxuLy8gVE9ETyByZXR1cm5zIEFueVNjaGVtYU9iamVjdCAoaWYgdGhlIHNjaGVtYSBjYW4gYmUgaW5saW5lZCkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvblxuZnVuY3Rpb24gcmVzb2x2ZShyb290LCAvLyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoZSBjdXJyZW50IHNjaGVtYVxucmVmIC8vIHJlZmVyZW5jZSB0byByZXNvbHZlXG4pIHtcbiAgICBsZXQgc2NoO1xuICAgIHdoaWxlICh0eXBlb2YgKHNjaCA9IHRoaXMucmVmc1tyZWZdKSA9PSBcInN0cmluZ1wiKVxuICAgICAgICByZWYgPSBzY2g7XG4gICAgcmV0dXJuIHNjaCB8fCB0aGlzLnNjaGVtYXNbcmVmXSB8fCByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgcmVmKTtcbn1cbi8vIFJlc29sdmUgc2NoZW1hLCBpdHMgcm9vdCBhbmQgYmFzZUlkXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIC8vIHJvb3Qgb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJlZnMgVE9ETyBiZWxvdyBTY2hlbWFFbnYgaXMgYXNzaWduZWQgdG8gaXRcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgY29uc3QgcCA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5wYXJzZShyZWYpO1xuICAgIGNvbnN0IHJlZlBhdGggPSAoMCwgcmVzb2x2ZV8xLl9nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBwKTtcbiAgICBsZXQgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCByb290LmJhc2VJZCwgdW5kZWZpbmVkKTtcbiAgICAvLyBUT0RPIGBPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID4gMGAgc2hvdWxkIG5vdCBiZSBuZWVkZWQgLSBidXQgcmVtb3ZpbmcgYnJlYWtzIDIgdGVzdHNcbiAgICBpZiAoT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDAgJiYgcmVmUGF0aCA9PT0gYmFzZUlkKSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHJvb3QpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZlBhdGgpO1xuICAgIGNvbnN0IHNjaE9yUmVmID0gdGhpcy5yZWZzW2lkXSB8fCB0aGlzLnNjaGVtYXNbaWRdO1xuICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBzY2ggPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgc2NoT3JSZWYpO1xuICAgICAgICBpZiAodHlwZW9mIChzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2guc2NoZW1hKSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAoc2NoT3JSZWYgPT09IG51bGwgfHwgc2NoT3JSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaE9yUmVmLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIXNjaE9yUmVmLnZhbGlkYXRlKVxuICAgICAgICBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoT3JSZWYpO1xuICAgIGlmIChpZCA9PT0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkocmVmKSkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gc2NoT3JSZWY7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgY29uc3Qgc2NoSWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICBpZiAoc2NoSWQpXG4gICAgICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hJZCk7XG4gICAgICAgIHJldHVybiBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBzY2hPclJlZik7XG59XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuY29uc3QgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSBuZXcgU2V0KFtcbiAgICBcInByb3BlcnRpZXNcIixcbiAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJlbnVtXCIsXG4gICAgXCJkZXBlbmRlbmNpZXNcIixcbiAgICBcImRlZmluaXRpb25zXCIsXG5dKTtcbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgeyBiYXNlSWQsIHNjaGVtYSwgcm9vdCB9KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICgoKF9hID0gcGFyc2VkUmVmLmZyYWdtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pICE9PSBcIi9cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJzZWRSZWYuZnJhZ21lbnQuc2xpY2UoMSkuc3BsaXQoXCIvXCIpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcGFydFNjaGVtYSA9IHNjaGVtYVsoMCwgdXRpbF8xLnVuZXNjYXBlRnJhZ21lbnQpKHBhcnQpXTtcbiAgICAgICAgaWYgKHBhcnRTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2NoZW1hID0gcGFydFNjaGVtYTtcbiAgICAgICAgLy8gVE9ETyBQUkVWRU5UX1NDT1BFX0NIQU5HRSBjb3VsZCBiZSBkZWZpbmVkIGluIGtleXdvcmQgZGVmP1xuICAgICAgICBjb25zdCBzY2hJZCA9IHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiYgc2NoZW1hW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgIGlmICghUFJFVkVOVF9TQ09QRV9DSEFOR0UuaGFzKHBhcnQpICYmIHNjaElkKSB7XG4gICAgICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVudjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIiAmJiBzY2hlbWEuJHJlZiAmJiAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCB0aGlzLlJVTEVTKSkge1xuICAgICAgICBjb25zdCAkcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICBlbnYgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgJHJlZik7XG4gICAgfVxuICAgIC8vIGV2ZW4gdGhvdWdoIHJlc29sdXRpb24gZmFpbGVkIHdlIG5lZWQgdG8gcmV0dXJuIFNjaGVtYUVudiB0byB0aHJvdyBleGNlcHRpb25cbiAgICAvLyBzbyB0aGF0IGNvbXBpbGVBc3luYyBsb2FkcyBtaXNzaW5nIHNjaGVtYS5cbiAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgZW52ID0gZW52IHx8IG5ldyBTY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCByb290LCBiYXNlSWQgfSk7XG4gICAgaWYgKGVudi5zY2hlbWEgIT09IGVudi5yb290LnNjaGVtYSlcbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKiogQGxpY2Vuc2UgVVJJLmpzIHY0LjQuMSAoYykgMjAxMSBHYXJ5IENvdXJ0LiBMaWNlbnNlOiBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvdXJpLWpzICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG5cdChmYWN0b3J5KChnbG9iYWwuVVJJID0gZ2xvYmFsLlVSSSB8fCB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNldHMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgc2V0c1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoc2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHNldHNbMF0gPSBzZXRzWzBdLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgdmFyIHhsID0gc2V0cy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgIHNldHNbeF0gPSBzZXRzW3hdLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRzW3hsXSA9IHNldHNbeGxdLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gc2V0cy5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2V0c1swXTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJleHAoc3RyKSB7XG4gICAgcmV0dXJuIFwiKD86XCIgKyBzdHIgKyBcIilcIjtcbn1cbmZ1bmN0aW9uIHR5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8gPT09IHVuZGVmaW5lZCA/IFwidW5kZWZpbmVkXCIgOiBvID09PSBudWxsID8gXCJudWxsXCIgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc3BsaXQoXCIgXCIpLnBvcCgpLnNwbGl0KFwiXVwiKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiB0b1VwcGVyQ2FzZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICAgIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyBvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6IHR5cGVvZiBvYmoubGVuZ3RoICE9PSBcIm51bWJlclwiIHx8IG9iai5zcGxpdCB8fCBvYmouc2V0SW50ZXJ2YWwgfHwgb2JqLmNhbGwgPyBbb2JqXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaikgOiBbXTtcbn1cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkge1xuICAgIHZhciBvYmogPSB0YXJnZXQ7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXhwcyhpc0lSSSkge1xuICAgIHZhciBBTFBIQSQkID0gXCJbQS1aYS16XVwiLFxuICAgICAgICBDUiQgPSBcIltcXFxceDBEXVwiLFxuICAgICAgICBESUdJVCQkID0gXCJbMC05XVwiLFxuICAgICAgICBEUVVPVEUkJCA9IFwiW1xcXFx4MjJdXCIsXG4gICAgICAgIEhFWERJRyQkID0gbWVyZ2UoRElHSVQkJCwgXCJbQS1GYS1mXVwiKSxcbiAgICAgICAgLy9jYXNlLWluc2Vuc2l0aXZlXG4gICAgTEYkJCA9IFwiW1xcXFx4MEFdXCIsXG4gICAgICAgIFNQJCQgPSBcIltcXFxceDIwXVwiLFxuICAgICAgICBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSksXG4gICAgICAgIC8vZXhwYW5kZWRcbiAgICBHRU5fREVMSU1TJCQgPSBcIltcXFxcOlxcXFwvXFxcXD9cXFxcI1xcXFxbXFxcXF1cXFxcQF1cIixcbiAgICAgICAgU1VCX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwmXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcPV1cIixcbiAgICAgICAgUkVTRVJWRUQkJCA9IG1lcmdlKEdFTl9ERUxJTVMkJCwgU1VCX0RFTElNUyQkKSxcbiAgICAgICAgVUNTQ0hBUiQkID0gaXNJUkkgPyBcIltcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZdXCIgOiBcIltdXCIsXG4gICAgICAgIC8vc3Vic2V0LCBleGNsdWRlcyBiaWRpIGNvbnRyb2wgY2hhcmFjdGVyc1xuICAgIElQUklWQVRFJCQgPSBpc0lSSSA/IFwiW1xcXFx1RTAwMC1cXFxcdUY4RkZdXCIgOiBcIltdXCIsXG4gICAgICAgIC8vc3Vic2V0XG4gICAgVU5SRVNFUlZFRCQkID0gbWVyZ2UoQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXC1cXFxcLlxcXFxfXFxcXH5dXCIsIFVDU0NIQVIkJCksXG4gICAgICAgIFNDSEVNRSQgPSBzdWJleHAoQUxQSEEkJCArIG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwrXFxcXC1cXFxcLl1cIikgKyBcIipcIiksXG4gICAgICAgIFVTRVJJTkZPJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpKSArIFwiKlwiKSxcbiAgICAgICAgREVDX09DVEVUJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIlsxLTldXCIgKyBESUdJVCQkKSArIFwifFwiICsgRElHSVQkJCksXG4gICAgICAgIERFQ19PQ1RFVF9SRUxBWEVEJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjA/WzEtOV1cIiArIERJR0lUJCQpICsgXCJ8MD8wP1wiICsgRElHSVQkJCksXG4gICAgICAgIC8vcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG4gICAgSVBWNEFERFJFU1MkID0gc3ViZXhwKERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCksXG4gICAgICAgIEgxNiQgPSBzdWJleHAoSEVYRElHJCQgKyBcInsxLDR9XCIpLFxuICAgICAgICBMUzMyJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIiArIEgxNiQpICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQpLFxuICAgICAgICBJUFY2QUREUkVTUzEkID0gc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezZ9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgNiggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTMiQgPSBzdWJleHAoXCJcXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns1fVwiICsgTFMzMiQpLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBcIjo6XCIgNSggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTMyQgPSBzdWJleHAoc3ViZXhwKEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7NH1cIiArIExTMzIkKSxcbiAgICAgICAgLy9bICAgICAgICAgICAgICAgaDE2IF0gXCI6OlwiIDQoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzQkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDF9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezN9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMSggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDMoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzUkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDJ9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezJ9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMiggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDIoIGgxNiBcIjpcIiApIGxzMzJcbiAgICBJUFY2QUREUkVTUzYkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDN9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIEgxNiQgKyBcIlxcXFw6XCIgKyBMUzMyJCksXG4gICAgICAgIC8vWyAqMyggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgIGgxNiBcIjpcIiAgIGxzMzJcbiAgICBJUFY2QUREUkVTUzckID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDR9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIExTMzIkKSxcbiAgICAgICAgLy9bICo0KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgICAgICAgICAgIGxzMzJcbiAgICBJUFY2QUREUkVTUzgkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDV9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIEgxNiQpLFxuICAgICAgICAvL1sgKjUoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgaDE2XG4gICAgSVBWNkFERFJFU1M5JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw2fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIpLFxuICAgICAgICAvL1sgKjYoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIlxuICAgIElQVjZBRERSRVNTJCA9IHN1YmV4cChbSVBWNkFERFJFU1MxJCwgSVBWNkFERFJFU1MyJCwgSVBWNkFERFJFU1MzJCwgSVBWNkFERFJFU1M0JCwgSVBWNkFERFJFU1M1JCwgSVBWNkFERFJFU1M2JCwgSVBWNkFERFJFU1M3JCwgSVBWNkFERFJFU1M4JCwgSVBWNkFERFJFU1M5JF0uam9pbihcInxcIikpLFxuICAgICAgICBaT05FSUQkID0gc3ViZXhwKHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCkgKyBcIitcIiksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBJUFY2QUREUlokID0gc3ViZXhwKElQVjZBRERSRVNTJCArIFwiXFxcXCUyNVwiICsgWk9ORUlEJCksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBJUFY2QUREUlpfUkVMQVhFRCQgPSBzdWJleHAoSVBWNkFERFJFU1MkICsgc3ViZXhwKFwiXFxcXCUyNXxcXFxcJSg/IVwiICsgSEVYRElHJCQgKyBcInsyfSlcIikgKyBaT05FSUQkKSxcbiAgICAgICAgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcbiAgICBJUFZGVVRVUkUkID0gc3ViZXhwKFwiW3ZWXVwiICsgSEVYRElHJCQgKyBcIitcXFxcLlwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSArIFwiK1wiKSxcbiAgICAgICAgSVBfTElURVJBTCQgPSBzdWJleHAoXCJcXFxcW1wiICsgc3ViZXhwKElQVjZBRERSWl9SRUxBWEVEJCArIFwifFwiICsgSVBWNkFERFJFU1MkICsgXCJ8XCIgKyBJUFZGVVRVUkUkKSArIFwiXFxcXF1cIiksXG4gICAgICAgIC8vUkZDIDY4NzRcbiAgICBSRUdfTkFNRSQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpKSArIFwiKlwiKSxcbiAgICAgICAgSE9TVCQgPSBzdWJleHAoSVBfTElURVJBTCQgKyBcInxcIiArIElQVjRBRERSRVNTJCArIFwiKD8hXCIgKyBSRUdfTkFNRSQgKyBcIilcIiArIFwifFwiICsgUkVHX05BTUUkKSxcbiAgICAgICAgUE9SVCQgPSBzdWJleHAoRElHSVQkJCArIFwiKlwiKSxcbiAgICAgICAgQVVUSE9SSVRZJCA9IHN1YmV4cChzdWJleHAoVVNFUklORk8kICsgXCJAXCIpICsgXCI/XCIgKyBIT1NUJCArIHN1YmV4cChcIlxcXFw6XCIgKyBQT1JUJCkgKyBcIj9cIiksXG4gICAgICAgIFBDSEFSJCA9IHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXVwiKSksXG4gICAgICAgIFNFR01FTlQkID0gc3ViZXhwKFBDSEFSJCArIFwiKlwiKSxcbiAgICAgICAgU0VHTUVOVF9OWiQgPSBzdWJleHAoUENIQVIkICsgXCIrXCIpLFxuICAgICAgICBTRUdNRU5UX05aX05DJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXEBdXCIpKSArIFwiK1wiKSxcbiAgICAgICAgUEFUSF9BQkVNUFRZJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1wiICsgU0VHTUVOVCQpICsgXCIqXCIpLFxuICAgICAgICBQQVRIX0FCU09MVVRFJCA9IHN1YmV4cChcIlxcXFwvXCIgKyBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSArIFwiP1wiKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9OT1NDSEVNRSQgPSBzdWJleHAoU0VHTUVOVF9OWl9OQyQgKyBQQVRIX0FCRU1QVFkkKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9ST09UTEVTUyQgPSBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSxcbiAgICAgICAgLy9zaW1wbGlmaWVkXG4gICAgUEFUSF9FTVBUWSQgPSBcIig/IVwiICsgUENIQVIkICsgXCIpXCIsXG4gICAgICAgIFBBVEgkID0gc3ViZXhwKFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgUVVFUlkkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxcIiArIG1lcmdlKFwiW1xcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpKSArIFwiKlwiKSxcbiAgICAgICAgRlJBR01FTlQkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxbXFxcXC9cXFxcP11cIikgKyBcIipcIiksXG4gICAgICAgIEhJRVJfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgVVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcbiAgICAgICAgUkVMQVRJVkVfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcbiAgICAgICAgUkVMQVRJVkUkID0gc3ViZXhwKFJFTEFUSVZFX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjXCIgKyBGUkFHTUVOVCQpICsgXCI/XCIpLFxuICAgICAgICBVUklfUkVGRVJFTkNFJCA9IHN1YmV4cChVUkkkICsgXCJ8XCIgKyBSRUxBVElWRSQpLFxuICAgICAgICBBQlNPTFVURV9VUkkkID0gc3ViZXhwKFNDSEVNRSQgKyBcIlxcXFw6XCIgKyBISUVSX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiksXG4gICAgICAgIEdFTkVSSUNfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcbiAgICAgICAgUkVMQVRJVkVfUkVGJCA9IFwiXigpezB9XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuICAgICAgICBBQlNPTFVURV9SRUYkID0gXCJeKFwiICsgU0NIRU1FJCArIFwiKVxcXFw6XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIFNBTUVET0NfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIEFVVEhPUklUWV9SRUYkID0gXCJeXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8kXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgTk9UX1NDSEVNRTogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpLCBcImdcIiksXG4gICAgICAgIE5PVF9VU0VSSU5GTzogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9IT1NUOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFxbXFxcXF1cXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9QQVRIOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXDpcXFxcQF1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9QQVRIX05PU0NIRU1FOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBOT1RfUVVFUlk6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9GUkFHTUVOVDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXFxcXC9cXFxcP11cIiksIFwiZ1wiKSxcbiAgICAgICAgRVNDQVBFOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuICAgICAgICBVTlJFU0VSVkVEOiBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpLFxuICAgICAgICBPVEhFUl9DSEFSUzogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgUkVTRVJWRUQkJCksIFwiZ1wiKSxcbiAgICAgICAgUENUX0VOQ09ERUQ6IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIiksXG4gICAgICAgIElQVjRBRERSRVNTOiBuZXcgUmVnRXhwKFwiXihcIiArIElQVjRBRERSRVNTJCArIFwiKSRcIiksXG4gICAgICAgIElQVjZBRERSRVNTOiBuZXcgUmVnRXhwKFwiXlxcXFxbPyhcIiArIElQVjZBRERSRVNTJCArIFwiKVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgXCIoXCIgKyBaT05FSUQkICsgXCIpXCIpICsgXCI/XFxcXF0/JFwiKSAvL1JGQyA2ODc0LCB3aXRoIHJlbGF4ZWQgcGFyc2luZyBydWxlc1xuICAgIH07XG59XG52YXIgVVJJX1BST1RPQ09MID0gYnVpbGRFeHBzKGZhbHNlKTtcblxudmFyIElSSV9QUk9UT0NPTCA9IGJ1aWxkRXhwcyh0cnVlKTtcblxudmFyIHNsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSB0cnVlO1xuICAgICAgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfYXJyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciB0b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnIpO1xuICB9XG59O1xuXG4vKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cbnZhciBtYXhJbnQgPSAyMTQ3NDgzNjQ3OyAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cbi8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cbnZhciBiYXNlID0gMzY7XG52YXIgdE1pbiA9IDE7XG52YXIgdE1heCA9IDI2O1xudmFyIHNrZXcgPSAzODtcbnZhciBkYW1wID0gNzAwO1xudmFyIGluaXRpYWxCaWFzID0gNzI7XG52YXIgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbnZhciBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cbnZhciByZWdleFB1bnljb2RlID0gL154bi0tLztcbnZhciByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxceDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xudmFyIHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuLyoqIEVycm9yIG1lc3NhZ2VzICovXG52YXIgZXJyb3JzID0ge1xuXHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xufTtcblxuLyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xudmFyIGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGVycm9yJDEodHlwZSkge1xuXHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcbiAqIGl0ZW0uXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0dmFyIHJlc3VsdCA9IFtdO1xuXHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRyZXN1bHRbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG4gKiBhZGRyZXNzZXMuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeVxuICogY2hhcmFjdGVyLlxuICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcbiAqIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHR2YXIgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0dmFyIHJlc3VsdCA9ICcnO1xuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHR9XG5cdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdHJldHVybiByZXN1bHQgKyBlbmNvZGVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcbiAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG4gKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcbiAqIG1hdGNoaW5nIFVURi0xNi5cbiAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZGVjb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBVbmljb2RlIGlucHV0IHN0cmluZyAoVUNTLTIpLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuICovXG5mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHR2YXIgb3V0cHV0ID0gW107XG5cdHZhciBjb3VudGVyID0gMDtcblx0dmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0dmFyIHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuXHRcdFx0dmFyIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkge1xuXHRcdFx0XHQvLyBMb3cgc3Vycm9nYXRlLlxuXHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcblx0XHRcdFx0Ly8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZW5jb2RlXG4gKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuICovXG52YXIgdWNzMmVuY29kZSA9IGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBiYXNpYyBjb2RlIHBvaW50IGludG8gYSBkaWdpdC9pbnRlZ2VyLlxuICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVQb2ludCBUaGUgYmFzaWMgbnVtZXJpYyBjb2RlIHBvaW50IHZhbHVlLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG4gKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG4gKiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS5cbiAqL1xudmFyIGJhc2ljVG9EaWdpdCA9IGZ1bmN0aW9uIGJhc2ljVG9EaWdpdChjb2RlUG9pbnQpIHtcblx0aWYgKGNvZGVQb2ludCAtIDB4MzAgPCAweDBBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4MTY7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NDEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NDE7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NjEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NjE7XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2VcbiAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcbiAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG4gKi9cbnZhciBkaWdpdFRvQmFzaWMgPSBmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICogQHByaXZhdGVcbiAqL1xudmFyIGFkYXB0ID0gZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdHZhciBrID0gMDtcblx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRmb3IgKDsgLyogbm8gaW5pdGlhbGl6YXRpb24gKi9kZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0fVxuXHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcbiAqIHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqL1xudmFyIGRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHQvLyBEb24ndCB1c2UgVUNTLTIuXG5cdHZhciBvdXRwdXQgPSBbXTtcblx0dmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHR2YXIgaSA9IDA7XG5cdHZhciBuID0gaW5pdGlhbE47XG5cdHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdHZhciBiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdGlmIChiYXNpYyA8IDApIHtcblx0XHRiYXNpYyA9IDA7XG5cdH1cblxuXHRmb3IgKHZhciBqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRlcnJvciQxKCdub3QtYmFzaWMnKTtcblx0XHR9XG5cdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdH1cblxuXHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0Zm9yICh2YXIgaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOykgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqL3tcblxuXHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0dmFyIG9sZGkgPSBpO1xuXHRcdGZvciAodmFyIHcgPSAxLCBrID0gYmFzZTs7IC8qIG5vIGNvbmRpdGlvbiAqL2sgKz0gYmFzZSkge1xuXG5cdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0ZXJyb3IkMSgnaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHR2YXIgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiBrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzO1xuXG5cdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRlcnJvciQxKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cdFx0fVxuXG5cdFx0dmFyIG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRpICU9IG91dDtcblxuXHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXQuXG5cdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXHR9XG5cblx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgb3V0cHV0KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHR2YXIgb3V0cHV0ID0gW107XG5cblx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cblx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHQvLyBDYWNoZSB0aGUgbGVuZ3RoLlxuXHR2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUuXG5cdHZhciBuID0gaW5pdGlhbE47XG5cdHZhciBkZWx0YSA9IDA7XG5cdHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50cy5cblx0dmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuXHR2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcblx0dmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG5cdHRyeSB7XG5cdFx0Zm9yICh2YXIgX2l0ZXJhdG9yID0gaW5wdXRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7XG5cdFx0XHR2YXIgX2N1cnJlbnRWYWx1ZTIgPSBfc3RlcC52YWx1ZTtcblxuXHRcdFx0aWYgKF9jdXJyZW50VmFsdWUyIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoX2N1cnJlbnRWYWx1ZTIpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcblx0XHRfaXRlcmF0b3JFcnJvciA9IGVycjtcblx0fSBmaW5hbGx5IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcblx0XHRcdFx0X2l0ZXJhdG9yLnJldHVybigpO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoX2RpZEl0ZXJhdG9yRXJyb3IpIHtcblx0XHRcdFx0dGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblx0dmFyIGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7XG5cblx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuXHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHR9XG5cblx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0dmFyIG0gPSBtYXhJbnQ7XG5cdFx0dmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcblx0XHR2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyID0gZmFsc2U7XG5cdFx0dmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblxuXHRcdHRyeSB7XG5cdFx0XHRmb3IgKHZhciBfaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDI7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSAoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWUpIHtcblx0XHRcdFx0dmFyIGN1cnJlbnRWYWx1ZSA9IF9zdGVwMi52YWx1ZTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuXG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRfZGlkSXRlcmF0b3JFcnJvcjIgPSB0cnVlO1xuXHRcdFx0X2l0ZXJhdG9yRXJyb3IyID0gZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRvcjIucmV0dXJuKSB7XG5cdFx0XHRcdFx0X2l0ZXJhdG9yMi5yZXR1cm4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKF9kaWRJdGVyYXRvckVycm9yMikge1xuXHRcdFx0XHRcdHRocm93IF9pdGVyYXRvckVycm9yMjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRuID0gbTtcblxuXHRcdHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG5cdFx0dmFyIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlO1xuXHRcdHZhciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0Zm9yICh2YXIgX2l0ZXJhdG9yMyA9IGlucHV0W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAzOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlKSB7XG5cdFx0XHRcdHZhciBfY3VycmVudFZhbHVlID0gX3N0ZXAzLnZhbHVlO1xuXG5cdFx0XHRcdGlmIChfY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoX2N1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuXG5cdFx0XHRcdFx0dmFyIHEgPSBkZWx0YTtcblx0XHRcdFx0XHRmb3IgKHZhciBrID0gYmFzZTs7IC8qIG5vIGNvbmRpdGlvbiAqL2sgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dmFyIHQgPSBrIDw9IGJpYXMgPyB0TWluIDogayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcztcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHR2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKSk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRfZGlkSXRlcmF0b3JFcnJvcjMgPSB0cnVlO1xuXHRcdFx0X2l0ZXJhdG9yRXJyb3IzID0gZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuKSB7XG5cdFx0XHRcdFx0X2l0ZXJhdG9yMy5yZXR1cm4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuXHRcdFx0XHRcdHRocm93IF9pdGVyYXRvckVycm9yMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCsrZGVsdGE7XG5cdFx0KytuO1xuXHR9XG5cdHJldHVybiBvdXRwdXQuam9pbignJyk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3NcbiAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cbiAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuICogY29udmVydGVkIHRvIFVuaWNvZGUuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cbiAqIGNvbnZlcnQgdG8gVW5pY29kZS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuICogc3RyaW5nLlxuICovXG52YXIgdG9Vbmljb2RlID0gZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uIChzdHJpbmcpIHtcblx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZykgPyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpIDogc3RyaW5nO1xuXHR9KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG4gKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcbiAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuICogQVNDSUkuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG4gKiBVbmljb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3JcbiAqIGVtYWlsIGFkZHJlc3MuXG4gKi9cbnZhciB0b0FTQ0lJID0gZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpID8gJ3huLS0nICsgZW5jb2RlKHN0cmluZykgOiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cbnZhciBwdW55Y29kZSA9IHtcblx0LyoqXG4gICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuICAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICAqIEB0eXBlIFN0cmluZ1xuICAqL1xuXHQndmVyc2lvbic6ICcyLjEuMCcsXG5cdC8qKlxuICAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG4gICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cbiAgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAgKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAgKiBAdHlwZSBPYmplY3RcbiAgKi9cblx0J3VjczInOiB7XG5cdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0fSxcblx0J2RlY29kZSc6IGRlY29kZSxcblx0J2VuY29kZSc6IGVuY29kZSxcblx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG59O1xuXG4vKipcbiAqIFVSSS5qc1xuICpcbiAqIEBmaWxlb3ZlcnZpZXcgQW4gUkZDIDM5ODYgY29tcGxpYW50LCBzY2hlbWUgZXh0ZW5kYWJsZSBVUkkgcGFyc2luZy92YWxpZGF0aW5nL3Jlc29sdmluZyBsaWJyYXJ5IGZvciBKYXZhU2NyaXB0LlxuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L3VyaS1qc1xuICovXG4vKipcbiAqIENvcHlyaWdodCAyMDExIEdhcnkgQ291cnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlXG4gKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZlxuICogICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0XG4gKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFsc1xuICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR0FSWSBDT1VSVCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHQVJZIENPVVJUIE9SXG4gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGXG4gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZVxuICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWRcbiAqIG9yIGltcGxpZWQsIG9mIEdhcnkgQ291cnQuXG4gKi9cbnZhciBTQ0hFTUVTID0ge307XG5mdW5jdGlvbiBwY3RFbmNDaGFyKGNocikge1xuICAgIHZhciBjID0gY2hyLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGUgPSB2b2lkIDA7XG4gICAgaWYgKGMgPCAxNikgZSA9IFwiJTBcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7ZWxzZSBpZiAoYyA8IDEyOCkgZSA9IFwiJVwiICsgYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtlbHNlIGlmIChjIDwgMjA0OCkgZSA9IFwiJVwiICsgKGMgPj4gNiB8IDE5MikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArIChjICYgNjMgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2Vsc2UgZSA9IFwiJVwiICsgKGMgPj4gMTIgfCAyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoYyA+PiA2ICYgNjMgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoYyAmIDYzIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIHBjdERlY0NoYXJzKHN0cikge1xuICAgIHZhciBuZXdTdHIgPSBcIlwiO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaWwgPSBzdHIubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgaWwpIHtcbiAgICAgICAgdmFyIGMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyAxLCAyKSwgMTYpO1xuICAgICAgICBpZiAoYyA8IDEyOCkge1xuICAgICAgICAgICAgbmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAxOTQgJiYgYyA8IDIyNCkge1xuICAgICAgICAgICAgaWYgKGlsIC0gaSA+PSA2KSB7XG4gICAgICAgICAgICAgICAgdmFyIGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDMxKSA8PCA2IHwgYzIgJiA2Myk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSA2O1xuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gMjI0KSB7XG4gICAgICAgICAgICBpZiAoaWwgLSBpID49IDkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2MgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xuICAgICAgICAgICAgICAgIHZhciBjMyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDcsIDIpLCAxNik7XG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAxNSkgPDwgMTIgfCAoX2MgJiA2MykgPDwgNiB8IGMzICYgNjMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gOTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDMpO1xuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdHI7XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpIHtcbiAgICBmdW5jdGlvbiBkZWNvZGVVbnJlc2VydmVkKHN0cikge1xuICAgICAgICB2YXIgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcbiAgICAgICAgcmV0dXJuICFkZWNTdHIubWF0Y2gocHJvdG9jb2wuVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHI7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLnNjaGVtZSkgY29tcG9uZW50cy5zY2hlbWUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfU0NIRU1FLCBcIlwiKTtcbiAgICBpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnVzZXJpbmZvID0gU3RyaW5nKGNvbXBvbmVudHMudXNlcmluZm8pLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1VTRVJJTkZPLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmhvc3QgPSBTdHJpbmcoY29tcG9uZW50cy5ob3N0KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0hPU1QsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICBpZiAoY29tcG9uZW50cy5wYXRoICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucGF0aCA9IFN0cmluZyhjb21wb25lbnRzLnBhdGgpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoY29tcG9uZW50cy5zY2hlbWUgPyBwcm90b2NvbC5OT1RfUEFUSCA6IHByb3RvY29sLk5PVF9QQVRIX05PU0NIRU1FLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5xdWVyeSA9IFN0cmluZyhjb21wb25lbnRzLnF1ZXJ5KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9RVUVSWSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuICAgIGlmIChjb21wb25lbnRzLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMuZnJhZ21lbnQgPSBTdHJpbmcoY29tcG9uZW50cy5mcmFnbWVudCkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfRlJBR01FTlQsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gX3N0cmlwTGVhZGluZ1plcm9zKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXjAqKC4qKS8sIFwiJDFcIikgfHwgXCIwXCI7XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplSVB2NChob3N0LCBwcm90b2NvbCkge1xuICAgIHZhciBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY0QUREUkVTUykgfHwgW107XG5cbiAgICB2YXIgX21hdGNoZXMgPSBzbGljZWRUb0FycmF5KG1hdGNoZXMsIDIpLFxuICAgICAgICBhZGRyZXNzID0gX21hdGNoZXNbMV07XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICByZXR1cm4gYWRkcmVzcy5zcGxpdChcIi5cIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykuam9pbihcIi5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhvc3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjYoaG9zdCwgcHJvdG9jb2wpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IGhvc3QubWF0Y2gocHJvdG9jb2wuSVBWNkFERFJFU1MpIHx8IFtdO1xuXG4gICAgdmFyIF9tYXRjaGVzMiA9IHNsaWNlZFRvQXJyYXkobWF0Y2hlcywgMyksXG4gICAgICAgIGFkZHJlc3MgPSBfbWF0Y2hlczJbMV0sXG4gICAgICAgIHpvbmUgPSBfbWF0Y2hlczJbMl07XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICB2YXIgX2FkZHJlc3MkdG9Mb3dlckNhc2UkID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNwbGl0KCc6OicpLnJldmVyc2UoKSxcbiAgICAgICAgICAgIF9hZGRyZXNzJHRvTG93ZXJDYXNlJDIgPSBzbGljZWRUb0FycmF5KF9hZGRyZXNzJHRvTG93ZXJDYXNlJCwgMiksXG4gICAgICAgICAgICBsYXN0ID0gX2FkZHJlc3MkdG9Mb3dlckNhc2UkMlswXSxcbiAgICAgICAgICAgIGZpcnN0ID0gX2FkZHJlc3MkdG9Mb3dlckNhc2UkMlsxXTtcblxuICAgICAgICB2YXIgZmlyc3RGaWVsZHMgPSBmaXJzdCA/IGZpcnN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKSA6IFtdO1xuICAgICAgICB2YXIgbGFzdEZpZWxkcyA9IGxhc3Quc3BsaXQoXCI6XCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpO1xuICAgICAgICB2YXIgaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA9IHByb3RvY29sLklQVjRBRERSRVNTLnRlc3QobGFzdEZpZWxkc1tsYXN0RmllbGRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgdmFyIGZpZWxkQ291bnQgPSBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID8gNyA6IDg7XG4gICAgICAgIHZhciBsYXN0RmllbGRzU3RhcnQgPSBsYXN0RmllbGRzLmxlbmd0aCAtIGZpZWxkQ291bnQ7XG4gICAgICAgIHZhciBmaWVsZHMgPSBBcnJheShmaWVsZENvdW50KTtcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBmaWVsZENvdW50OyArK3gpIHtcbiAgICAgICAgICAgIGZpZWxkc1t4XSA9IGZpcnN0RmllbGRzW3hdIHx8IGxhc3RGaWVsZHNbbGFzdEZpZWxkc1N0YXJ0ICsgeF0gfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MpIHtcbiAgICAgICAgICAgIGZpZWxkc1tmaWVsZENvdW50IC0gMV0gPSBfbm9ybWFsaXplSVB2NChmaWVsZHNbZmllbGRDb3VudCAtIDFdLCBwcm90b2NvbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsbFplcm9GaWVsZHMgPSBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGZpZWxkLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKCFmaWVsZCB8fCBmaWVsZCA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdExvbmdlc3QgPSBhY2NbYWNjLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0TG9uZ2VzdCAmJiBsYXN0TG9uZ2VzdC5pbmRleCArIGxhc3RMb25nZXN0Lmxlbmd0aCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdExvbmdlc3QubGVuZ3RoKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goeyBpbmRleDogaW5kZXgsIGxlbmd0aDogMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHZhciBsb25nZXN0WmVyb0ZpZWxkcyA9IGFsbFplcm9GaWVsZHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH0pWzBdO1xuICAgICAgICB2YXIgbmV3SG9zdCA9IHZvaWQgMDtcbiAgICAgICAgaWYgKGxvbmdlc3RaZXJvRmllbGRzICYmIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBuZXdGaXJzdCA9IGZpZWxkcy5zbGljZSgwLCBsb25nZXN0WmVyb0ZpZWxkcy5pbmRleCk7XG4gICAgICAgICAgICB2YXIgbmV3TGFzdCA9IGZpZWxkcy5zbGljZShsb25nZXN0WmVyb0ZpZWxkcy5pbmRleCArIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdIb3N0ID0gbmV3Rmlyc3Quam9pbihcIjpcIikgKyBcIjo6XCIgKyBuZXdMYXN0LmpvaW4oXCI6XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3SG9zdCA9IGZpZWxkcy5qb2luKFwiOlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoem9uZSkge1xuICAgICAgICAgICAgbmV3SG9zdCArPSBcIiVcIiArIHpvbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0hvc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhvc3Q7XG4gICAgfVxufVxudmFyIFVSSV9QQVJTRSA9IC9eKD86KFteOlxcLz8jXSspOik/KD86XFwvXFwvKCg/OihbXlxcLz8jQF0qKUApPyhcXFtbXlxcLz8jXFxdXStcXF18W15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbnxcXHIpKikpPy9pO1xudmFyIE5PX01BVENIX0lTX1VOREVGSU5FRCA9IFwiXCIubWF0Y2goLygpezB9LylbMV0gPT09IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHBhcnNlKHVyaVN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBjb21wb25lbnRzID0ge307XG4gICAgdmFyIHByb3RvY29sID0gb3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSA9PT0gXCJzdWZmaXhcIikgdXJpU3RyaW5nID0gKG9wdGlvbnMuc2NoZW1lID8gb3B0aW9ucy5zY2hlbWUgKyBcIjpcIiA6IFwiXCIpICsgXCIvL1wiICsgdXJpU3RyaW5nO1xuICAgIHZhciBtYXRjaGVzID0gdXJpU3RyaW5nLm1hdGNoKFVSSV9QQVJTRSk7XG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgaWYgKE5PX01BVENIX0lTX1VOREVGSU5FRCkge1xuICAgICAgICAgICAgLy9zdG9yZSBlYWNoIGNvbXBvbmVudFxuICAgICAgICAgICAgY29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdO1xuICAgICAgICAgICAgY29tcG9uZW50cy51c2VyaW5mbyA9IG1hdGNoZXNbM107XG4gICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSBtYXRjaGVzWzRdO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuICAgICAgICAgICAgY29tcG9uZW50cy5xdWVyeSA9IG1hdGNoZXNbN107XG4gICAgICAgICAgICBjb21wb25lbnRzLmZyYWdtZW50ID0gbWF0Y2hlc1s4XTtcbiAgICAgICAgICAgIC8vZml4IHBvcnQgbnVtYmVyXG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcG9uZW50cy5wb3J0KSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IG1hdGNoZXNbNV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL0lFIEZJWCBmb3IgaW1wcm9wZXIgUmVnRXhwIG1hdGNoaW5nXG4gICAgICAgICAgICAvL3N0b3JlIGVhY2ggY29tcG9uZW50XG4gICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV0gfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy51c2VyaW5mbyA9IHVyaVN0cmluZy5pbmRleE9mKFwiQFwiKSAhPT0gLTEgPyBtYXRjaGVzWzNdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gdXJpU3RyaW5nLmluZGV4T2YoXCIvL1wiKSAhPT0gLTEgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuICAgICAgICAgICAgY29tcG9uZW50cy5xdWVyeSA9IHVyaVN0cmluZy5pbmRleE9mKFwiP1wiKSAhPT0gLTEgPyBtYXRjaGVzWzddIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29tcG9uZW50cy5mcmFnbWVudCA9IHVyaVN0cmluZy5pbmRleE9mKFwiI1wiKSAhPT0gLTEgPyBtYXRjaGVzWzhdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy9maXggcG9ydCBudW1iZXJcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gdXJpU3RyaW5nLm1hdGNoKC9cXC9cXC8oPzoufFxcbikqXFw6KD86XFwvfFxcP3xcXCN8JCkvKSA/IG1hdGNoZXNbNF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudHMuaG9zdCkge1xuICAgICAgICAgICAgLy9ub3JtYWxpemUgSVAgaG9zdHNcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IF9ub3JtYWxpemVJUHY2KF9ub3JtYWxpemVJUHY0KGNvbXBvbmVudHMuaG9zdCwgcHJvdG9jb2wpLCBwcm90b2NvbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZXRlcm1pbmUgcmVmZXJlbmNlIHR5cGVcbiAgICAgICAgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy51c2VyaW5mbyA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMuaG9zdCA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMucG9ydCA9PT0gdW5kZWZpbmVkICYmICFjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5xdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwic2FtZS1kb2N1bWVudFwiO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcImFic29sdXRlXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwidXJpXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9jaGVjayBmb3IgcmVmZXJlbmNlIGVycm9yc1xuICAgICAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IGNvbXBvbmVudHMucmVmZXJlbmNlKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSSSBpcyBub3QgYSBcIiArIG9wdGlvbnMucmVmZXJlbmNlICsgXCIgcmVmZXJlbmNlLlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vZmluZCBzY2hlbWUgaGFuZGxlclxuICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAvL2NoZWNrIGlmIHNjaGVtZSBjYW4ndCBoYW5kbGUgSVJJc1xuICAgICAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgICAgICAgLy9pZiBob3N0IGNvbXBvbmVudCBpcyBhIGRvbWFpbiBuYW1lXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSB7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29udmVydCBJUkkgLT4gVVJJXG4gICAgICAgICAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgVVJJX1BST1RPQ09MKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vbm9ybWFsaXplIGVuY29kaW5nc1xuICAgICAgICAgICAgX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcbiAgICAgICAgfVxuICAgICAgICAvL3BlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHBhcnNpbmdcbiAgICAgICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShjb21wb25lbnRzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgdmFyIHByb3RvY29sID0gb3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIHZhciB1cmlUb2tlbnMgPSBbXTtcbiAgICBpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMudXNlcmluZm8pO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIkBcIik7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvL25vcm1hbGl6ZSBJUCBob3N0cywgYWRkIGJyYWNrZXRzIGFuZCBlc2NhcGUgem9uZSBzZXBhcmF0b3IgZm9yIElQdjZcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoU3RyaW5nKGNvbXBvbmVudHMuaG9zdCksIHByb3RvY29sKSwgcHJvdG9jb2wpLnJlcGxhY2UocHJvdG9jb2wuSVBWNkFERFJFU1MsIGZ1bmN0aW9uIChfLCAkMSwgJDIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIltcIiArICQxICsgKCQyID8gXCIlMjVcIiArICQyIDogXCJcIikgKyBcIl1cIjtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMucG9ydCA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goU3RyaW5nKGNvbXBvbmVudHMucG9ydCkpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpVG9rZW5zLmxlbmd0aCA/IHVyaVRva2Vucy5qb2luKFwiXCIpIDogdW5kZWZpbmVkO1xufVxuXG52YXIgUkRTMSA9IC9eXFwuXFwuP1xcLy87XG52YXIgUkRTMiA9IC9eXFwvXFwuKFxcL3wkKS87XG52YXIgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS87XG52YXIgUkRTNSA9IC9eXFwvPyg/Oi58XFxuKSo/KD89XFwvfCQpLztcbmZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzKGlucHV0KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHdoaWxlIChpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKFJEUzEpKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMSwgXCJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMikpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMyLCBcIi9cIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMykpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMzLCBcIi9cIik7XG4gICAgICAgICAgICBvdXRwdXQucG9wKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFwiLlwiIHx8IGlucHV0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgIGlucHV0ID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbSA9IGlucHV0Lm1hdGNoKFJEUzUpO1xuICAgICAgICAgICAgaWYgKGltKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSBpbVswXTtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkb3Qgc2VnbWVudCBjb25kaXRpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUoY29tcG9uZW50cykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBwcm90b2NvbCA9IG9wdGlvbnMuaXJpID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MO1xuICAgIHZhciB1cmlUb2tlbnMgPSBbXTtcbiAgICAvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcbiAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICAgIGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKSBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKTtcbiAgICBpZiAoY29tcG9uZW50cy5ob3N0KSB7XG4gICAgICAgIC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYW4gSVB2NiBhZGRyZXNzXG4gICAgICAgIGlmIChwcm90b2NvbC5JUFY2QUREUkVTUy50ZXN0KGNvbXBvbmVudHMuaG9zdCkpIHt9XG4gICAgICAgIC8vVE9ETzogbm9ybWFsaXplIElQdjYgYWRkcmVzcyBhcyBwZXIgUkZDIDU5NTJcblxuICAgICAgICAvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSB7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSAhb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy9ub3JtYWxpemUgZW5jb2RpbmdcbiAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIiAmJiBjb21wb25lbnRzLnNjaGVtZSkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnNjaGVtZSk7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcbiAgICB9XG4gICAgdmFyIGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XG4gICAgaWYgKGF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xuICAgICAgICAgICAgdXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcbiAgICAgICAgfVxuICAgICAgICB1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xuICAgICAgICBpZiAoY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiKSB7XG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIi9cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBzID0gY29tcG9uZW50cy5wYXRoO1xuICAgICAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICAgICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dGhvcml0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKC9eXFwvXFwvLywgXCIvJTJGXCIpOyAvL2Rvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICAgIH1cbiAgICAgICAgdXJpVG9rZW5zLnB1c2gocyk7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goXCI/XCIpO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnF1ZXJ5KTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIiNcIik7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuZnJhZ21lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpVG9rZW5zLmpvaW4oXCJcIik7IC8vbWVyZ2UgdG9rZW5zIGludG8gYSBzdHJpbmdcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudHMoYmFzZSwgcmVsYXRpdmUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIHNraXBOb3JtYWxpemF0aW9uID0gYXJndW1lbnRzWzNdO1xuXG4gICAgdmFyIHRhcmdldCA9IHt9O1xuICAgIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICAgICAgYmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7IC8vbm9ybWFsaXplIGJhc2UgY29tcG9uZW50c1xuICAgICAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAvL25vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRzXG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICAgICAgdGFyZ2V0LnNjaGVtZSA9IHJlbGF0aXZlLnNjaGVtZTtcbiAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcbiAgICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcbiAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlbGF0aXZlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuICAgICAgICAgICAgdGFyZ2V0LnVzZXJpbmZvID0gcmVsYXRpdmUudXNlcmluZm87XG4gICAgICAgICAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHJlbGF0aXZlLnBhdGggfHwgXCJcIik7XG4gICAgICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoO1xuICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZS5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRpdmUucGF0aC5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKDAsIGJhc2UucGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIHJlbGF0aXZlLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyh0YXJnZXQucGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy90YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvO1xuICAgICAgICAgICAgdGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB0YXJnZXQucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgfVxuICAgIHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmUoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgICB2YXIgc2NoZW1lbGVzc09wdGlvbnMgPSBhc3NpZ24oeyBzY2hlbWU6ICdudWxsJyB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVDb21wb25lbnRzKHBhcnNlKGJhc2VVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgcGFyc2UocmVsYXRpdmVVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgc2NoZW1lbGVzc09wdGlvbnMsIHRydWUpLCBzY2hlbWVsZXNzT3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmksIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVyaSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB1cmkgPSBzZXJpYWxpemUocGFyc2UodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB1cmkgPSBwYXJzZShzZXJpYWxpemUodXJpLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVyaUEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZShwYXJzZSh1cmlBLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdXJpQSA9IHNlcmlhbGl6ZSh1cmlBLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaUIgPSBzZXJpYWxpemUocGFyc2UodXJpQiwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZU9mKHVyaUIpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHVyaUIgPSBzZXJpYWxpemUodXJpQiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB1cmlBID09PSB1cmlCO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5FU0NBUEUgOiBJUklfUFJPVE9DT0wuRVNDQVBFLCBwY3RFbmNDaGFyKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCA6IElSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpO1xufVxuXG52YXIgaGFuZGxlciA9IHtcbiAgICBzY2hlbWU6IFwiaHR0cFwiLFxuICAgIGRvbWFpbkhvc3Q6IHRydWUsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9yZXBvcnQgbWlzc2luZyBob3N0XG4gICAgICAgIGlmICghY29tcG9uZW50cy5ob3N0KSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkhUVFAgVVJJcyBtdXN0IGhhdmUgYSBob3N0LlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VjdXJlID0gU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSBcImh0dHBzXCI7XG4gICAgICAgIC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgICAgICAgaWYgKGNvbXBvbmVudHMucG9ydCA9PT0gKHNlY3VyZSA/IDQ0MyA6IDgwKSB8fCBjb21wb25lbnRzLnBvcnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZW1wdHkgcGF0aFxuICAgICAgICBpZiAoIWNvbXBvbmVudHMucGF0aCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gXCIvXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gICAgICAgIC8vYXMgV1dXIEZvcm0gVXJsIEVuY29kZWQgcXVlcnkgc3RyaW5ncyBhcmUgcGFydCBvZiB0aGUgSFRNTDQrIHNwZWMsXG4gICAgICAgIC8vYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgaGFuZGxlciQxID0ge1xuICAgIHNjaGVtZTogXCJodHRwc1wiLFxuICAgIGRvbWFpbkhvc3Q6IGhhbmRsZXIuZG9tYWluSG9zdCxcbiAgICBwYXJzZTogaGFuZGxlci5wYXJzZSxcbiAgICBzZXJpYWxpemU6IGhhbmRsZXIuc2VyaWFsaXplXG59O1xuXG5mdW5jdGlvbiBpc1NlY3VyZSh3c0NvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJyA/IHdzQ29tcG9uZW50cy5zZWN1cmUgOiBTdHJpbmcod3NDb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ3c3NcIjtcbn1cbi8vUkZDIDY0NTVcbnZhciBoYW5kbGVyJDIgPSB7XG4gICAgc2NoZW1lOiBcIndzXCIsXG4gICAgZG9tYWluSG9zdDogdHJ1ZSxcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgd3NDb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgLy9pbmRpY2F0ZSBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0XG4gICAgICAgIHdzQ29tcG9uZW50cy5zZWN1cmUgPSBpc1NlY3VyZSh3c0NvbXBvbmVudHMpO1xuICAgICAgICAvL2NvbnN0cnVjdCByZXNvdWNlIG5hbWVcbiAgICAgICAgd3NDb21wb25lbnRzLnJlc291cmNlTmFtZSA9ICh3c0NvbXBvbmVudHMucGF0aCB8fCAnLycpICsgKHdzQ29tcG9uZW50cy5xdWVyeSA/ICc/JyArIHdzQ29tcG9uZW50cy5xdWVyeSA6ICcnKTtcbiAgICAgICAgd3NDb21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIHdzQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdzQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplKHdzQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICAvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gICAgICAgIGlmICh3c0NvbXBvbmVudHMucG9ydCA9PT0gKGlzU2VjdXJlKHdzQ29tcG9uZW50cykgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnRzLnBvcnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vZW5zdXJlIHNjaGVtZSBtYXRjaGVzIHNlY3VyZSBmbGFnXG4gICAgICAgIGlmICh0eXBlb2Ygd3NDb21wb25lbnRzLnNlY3VyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMuc2NoZW1lID0gd3NDb21wb25lbnRzLnNlY3VyZSA/ICd3c3MnIDogJ3dzJztcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5zZWN1cmUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuICAgICAgICBpZiAod3NDb21wb25lbnRzLnJlc291cmNlTmFtZSkge1xuICAgICAgICAgICAgdmFyIF93c0NvbXBvbmVudHMkcmVzb3VyYyA9IHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUuc3BsaXQoJz8nKSxcbiAgICAgICAgICAgICAgICBfd3NDb21wb25lbnRzJHJlc291cmMyID0gc2xpY2VkVG9BcnJheShfd3NDb21wb25lbnRzJHJlc291cmMsIDIpLFxuICAgICAgICAgICAgICAgIHBhdGggPSBfd3NDb21wb25lbnRzJHJlc291cmMyWzBdLFxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gX3dzQ29tcG9uZW50cyRyZXNvdXJjMlsxXTtcblxuICAgICAgICAgICAgd3NDb21wb25lbnRzLnBhdGggPSBwYXRoICYmIHBhdGggIT09ICcvJyA/IHBhdGggOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB3c0NvbXBvbmVudHMucXVlcnkgPSBxdWVyeTtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9mb3JiaWQgZnJhZ21lbnQgY29tcG9uZW50XG4gICAgICAgIHdzQ29tcG9uZW50cy5mcmFnbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHdzQ29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgaGFuZGxlciQzID0ge1xuICAgIHNjaGVtZTogXCJ3c3NcIixcbiAgICBkb21haW5Ib3N0OiBoYW5kbGVyJDIuZG9tYWluSG9zdCxcbiAgICBwYXJzZTogaGFuZGxlciQyLnBhcnNlLFxuICAgIHNlcmlhbGl6ZTogaGFuZGxlciQyLnNlcmlhbGl6ZVxufTtcblxudmFyIE8gPSB7fTtcbnZhciBpc0lSSSA9IHRydWU7XG4vL1JGQyAzOTg2XG52YXIgVU5SRVNFUlZFRCQkID0gXCJbQS1aYS16MC05XFxcXC1cXFxcLlxcXFxfXFxcXH5cIiArIChpc0lSSSA/IFwiXFxcXHhBMC1cXFxcdTIwMERcXFxcdTIwMTAtXFxcXHUyMDI5XFxcXHUyMDJGLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkVGXCIgOiBcIlwiKSArIFwiXVwiO1xudmFyIEhFWERJRyQkID0gXCJbMC05QS1GYS1mXVwiOyAvL2Nhc2UtaW5zZW5zaXRpdmVcbnZhciBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSk7IC8vZXhwYW5kZWRcbi8vUkZDIDUzMjIsIGV4Y2VwdCB0aGVzZSBzeW1ib2xzIGFzIHBlciBSRkMgNjA2ODogQCA6IC8gPyAjIFsgXSAmIDsgPVxuLy9jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcI1xcXFwkXFxcXCVcXFxcJlxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXC9cXFxcPVxcXFw/XFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RVEVYVCQkID0gXCJbXFxcXHgwMS1cXFxceDA4XFxcXHgwQlxcXFx4MENcXFxceDBFLVxcXFx4MUZcXFxceDdGXVwiOyAgLy8oJWQxLTggLyAlZDExLTEyIC8gJWQxNC0zMSAvICVkMTI3KVxuLy9jb25zdCBRVEVYVCQkID0gbWVyZ2UoXCJbXFxcXHgyMVxcXFx4MjMtXFxcXHg1QlxcXFx4NUQtXFxcXHg3RV1cIiwgT0JTX1FURVhUJCQpOyAgLy8lZDMzIC8gJWQzNS05MSAvICVkOTMtMTI2IC8gb2JzLXF0ZXh0XG4vL2NvbnN0IFZDSEFSJCQgPSBcIltcXFxceDIxLVxcXFx4N0VdXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RUCQgPSBzdWJleHAoXCJcXFxcXFxcXFwiICsgbWVyZ2UoXCJbXFxcXHgwMFxcXFx4MERcXFxceDBBXVwiLCBPQlNfUVRFWFQkJCkpOyAgLy8lZDAgLyBDUiAvIExGIC8gb2JzLXF0ZXh0XG4vL2NvbnN0IEZXUyQgPSBzdWJleHAoc3ViZXhwKFdTUCQkICsgXCIqXCIgKyBcIlxcXFx4MERcXFxceDBBXCIpICsgXCI/XCIgKyBXU1AkJCArIFwiK1wiKTtcbi8vY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKHN1YmV4cChcIlxcXFxcXFxcXCIgKyBzdWJleHAoVkNIQVIkJCArIFwifFwiICsgV1NQJCQpKSArIFwifFwiICsgT0JTX1FQJCk7XG4vL2NvbnN0IFFVT1RFRF9TVFJJTkckID0gc3ViZXhwKCdcXFxcXCInICsgc3ViZXhwKEZXUyQgKyBcIj9cIiArIFFDT05URU5UJCkgKyBcIipcIiArIEZXUyQgKyBcIj9cIiArICdcXFxcXCInKTtcbnZhciBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIjtcbnZhciBRVEVYVCQkID0gXCJbXFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXC1cXFxcLjAtOVxcXFw8XFxcXD5BLVpcXFxceDVFLVxcXFx4N0VdXCI7XG52YXIgVkNIQVIkJCA9IG1lcmdlKFFURVhUJCQsIFwiW1xcXFxcXFwiXFxcXFxcXFxdXCIpO1xudmFyIFNPTUVfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcOlxcXFxAXVwiO1xudmFyIFVOUkVTRVJWRUQgPSBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpO1xudmFyIFBDVF9FTkNPREVEID0gbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKTtcbnZhciBOT1RfTE9DQUxfUEFSVCA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQVRFWFQkJCwgXCJbXFxcXC5dXCIsICdbXFxcXFwiXScsIFZDSEFSJCQpLCBcImdcIik7XG52YXIgTk9UX0hGTkFNRSA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTT01FX0RFTElNUyQkKSwgXCJnXCIpO1xudmFyIE5PVF9IRlZBTFVFID0gTk9UX0hGTkFNRTtcbmZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gICAgdmFyIGRlY1N0ciA9IHBjdERlY0NoYXJzKHN0cik7XG4gICAgcmV0dXJuICFkZWNTdHIubWF0Y2goVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHI7XG59XG52YXIgaGFuZGxlciQ0ID0ge1xuICAgIHNjaGVtZTogXCJtYWlsdG9cIixcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UkJDEoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgbWFpbHRvQ29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gICAgICAgIHZhciB0byA9IG1haWx0b0NvbXBvbmVudHMudG8gPSBtYWlsdG9Db21wb25lbnRzLnBhdGggPyBtYWlsdG9Db21wb25lbnRzLnBhdGguc3BsaXQoXCIsXCIpIDogW107XG4gICAgICAgIG1haWx0b0NvbXBvbmVudHMucGF0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG1haWx0b0NvbXBvbmVudHMucXVlcnkpIHtcbiAgICAgICAgICAgIHZhciB1bmtub3duSGVhZGVycyA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHZhciBoZmllbGRzID0gbWFpbHRvQ29tcG9uZW50cy5xdWVyeS5zcGxpdChcIiZcIik7XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMCwgeGwgPSBoZmllbGRzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgICAgICB2YXIgaGZpZWxkID0gaGZpZWxkc1t4XS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChoZmllbGRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRvXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9BZGRycyA9IGhmaWVsZFsxXS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfeCA9IDAsIF94bCA9IHRvQWRkcnMubGVuZ3RoOyBfeCA8IF94bDsgKytfeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvLnB1c2godG9BZGRyc1tfeF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdWJqZWN0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYWlsdG9Db21wb25lbnRzLnN1YmplY3QgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib2R5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYWlsdG9Db21wb25lbnRzLmJvZHkgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duSGVhZGVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3VuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFswXSwgb3B0aW9ucyldID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1bmtub3duSGVhZGVycykgbWFpbHRvQ29tcG9uZW50cy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgfVxuICAgICAgICBtYWlsdG9Db21wb25lbnRzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKHZhciBfeDIgPSAwLCBfeGwyID0gdG8ubGVuZ3RoOyBfeDIgPCBfeGwyOyArK194Mikge1xuICAgICAgICAgICAgdmFyIGFkZHIgPSB0b1tfeDJdLnNwbGl0KFwiQFwiKTtcbiAgICAgICAgICAgIGFkZHJbMF0gPSB1bmVzY2FwZUNvbXBvbmVudChhZGRyWzBdKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhZGRyWzFdID0gcHVueWNvZGUudG9BU0NJSSh1bmVzY2FwZUNvbXBvbmVudChhZGRyWzFdLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1haWx0b0NvbXBvbmVudHMuZXJyb3IgPSBtYWlsdG9Db21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkclsxXSA9IHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b1tfeDJdID0gYWRkci5qb2luKFwiQFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFpbHRvQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplJCQxKG1haWx0b0NvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBtYWlsdG9Db21wb25lbnRzO1xuICAgICAgICB2YXIgdG8gPSB0b0FycmF5KG1haWx0b0NvbXBvbmVudHMudG8pO1xuICAgICAgICBpZiAodG8pIHtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IHRvLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9BZGRyID0gU3RyaW5nKHRvW3hdKTtcbiAgICAgICAgICAgICAgICB2YXIgYXRJZHggPSB0b0FkZHIubGFzdEluZGV4T2YoXCJAXCIpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhbFBhcnQgPSB0b0FkZHIuc2xpY2UoMCwgYXRJZHgpLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9MT0NBTF9QQVJULCBwY3RFbmNDaGFyKTtcbiAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gdG9BZGRyLnNsaWNlKGF0SWR4ICsgMSk7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkb21haW4gPSAhb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKHVuZXNjYXBlQ29tcG9uZW50KGRvbWFpbiwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoZG9tYWluKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b1t4XSA9IGxvY2FsUGFydCArIFwiQFwiICsgZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50cy5wYXRoID0gdG8uam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgfHwge307XG4gICAgICAgIGlmIChtYWlsdG9Db21wb25lbnRzLnN1YmplY3QpIGhlYWRlcnNbXCJzdWJqZWN0XCJdID0gbWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0O1xuICAgICAgICBpZiAobWFpbHRvQ29tcG9uZW50cy5ib2R5KSBoZWFkZXJzW1wiYm9keVwiXSA9IG1haWx0b0NvbXBvbmVudHMuYm9keTtcbiAgICAgICAgdmFyIGZpZWxkcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChoZWFkZXJzW25hbWVdICE9PSBPW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZmllbGRzLnB1c2gobmFtZS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZOQU1FLCBwY3RFbmNDaGFyKSArIFwiPVwiICsgaGVhZGVyc1tuYW1lXS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZWQUxVRSwgcGN0RW5jQ2hhcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnF1ZXJ5ID0gZmllbGRzLmpvaW4oXCImXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn07XG5cbnZhciBVUk5fUEFSU0UgPSAvXihbXlxcOl0rKVxcOiguKikvO1xuLy9SRkMgMjE0MVxudmFyIGhhbmRsZXIkNSA9IHtcbiAgICBzY2hlbWU6IFwidXJuXCIsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlJCQxKGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XG4gICAgICAgIHZhciB1cm5Db21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHZhciBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuICAgICAgICAgICAgdmFyIG5pZCA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhciBuc3MgPSBtYXRjaGVzWzJdO1xuICAgICAgICAgICAgdmFyIHVyblNjaGVtZSA9IHNjaGVtZSArIFwiOlwiICsgKG9wdGlvbnMubmlkIHx8IG5pZCk7XG4gICAgICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMubmlkID0gbmlkO1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5uc3MgPSBuc3M7XG4gICAgICAgICAgICB1cm5Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5lcnJvciA9IHVybkNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUk4gY2FuIG5vdCBiZSBwYXJzZWQuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybkNvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSQkMSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuICAgICAgICB2YXIgbmlkID0gdXJuQ29tcG9uZW50cy5uaWQ7XG4gICAgICAgIHZhciB1cm5TY2hlbWUgPSBzY2hlbWUgKyBcIjpcIiArIChvcHRpb25zLm5pZCB8fCBuaWQpO1xuICAgICAgICB2YXIgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcbiAgICAgICAgaWYgKHNjaGVtZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXJpQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHM7XG4gICAgICAgIHZhciBuc3MgPSB1cm5Db21wb25lbnRzLm5zcztcbiAgICAgICAgdXJpQ29tcG9uZW50cy5wYXRoID0gKG5pZCB8fCBvcHRpb25zLm5pZCkgKyBcIjpcIiArIG5zcztcbiAgICAgICAgcmV0dXJuIHVyaUNvbXBvbmVudHM7XG4gICAgfVxufTtcblxudmFyIFVVSUQgPSAvXlswLTlBLUZhLWZdezh9KD86XFwtWzAtOUEtRmEtZl17NH0pezN9XFwtWzAtOUEtRmEtZl17MTJ9JC87XG4vL1JGQyA0MTIyXG52YXIgaGFuZGxlciQ2ID0ge1xuICAgIHNjaGVtZTogXCJ1cm46dXVpZFwiLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB1dWlkQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHM7XG4gICAgICAgIHV1aWRDb21wb25lbnRzLnV1aWQgPSB1dWlkQ29tcG9uZW50cy5uc3M7XG4gICAgICAgIHV1aWRDb21wb25lbnRzLm5zcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudHMudXVpZCB8fCAhdXVpZENvbXBvbmVudHMudXVpZC5tYXRjaChVVUlEKSkpIHtcbiAgICAgICAgICAgIHV1aWRDb21wb25lbnRzLmVycm9yID0gdXVpZENvbXBvbmVudHMuZXJyb3IgfHwgXCJVVUlEIGlzIG5vdCB2YWxpZC5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXVpZENvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSh1dWlkQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgdXJuQ29tcG9uZW50cyA9IHV1aWRDb21wb25lbnRzO1xuICAgICAgICAvL25vcm1hbGl6ZSBVVUlEXG4gICAgICAgIHVybkNvbXBvbmVudHMubnNzID0gKHV1aWRDb21wb25lbnRzLnV1aWQgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHVybkNvbXBvbmVudHM7XG4gICAgfVxufTtcblxuU0NIRU1FU1toYW5kbGVyLnNjaGVtZV0gPSBoYW5kbGVyO1xuU0NIRU1FU1toYW5kbGVyJDEuc2NoZW1lXSA9IGhhbmRsZXIkMTtcblNDSEVNRVNbaGFuZGxlciQyLnNjaGVtZV0gPSBoYW5kbGVyJDI7XG5TQ0hFTUVTW2hhbmRsZXIkMy5zY2hlbWVdID0gaGFuZGxlciQzO1xuU0NIRU1FU1toYW5kbGVyJDQuc2NoZW1lXSA9IGhhbmRsZXIkNDtcblNDSEVNRVNbaGFuZGxlciQ1LnNjaGVtZV0gPSBoYW5kbGVyJDU7XG5TQ0hFTUVTW2hhbmRsZXIkNi5zY2hlbWVdID0gaGFuZGxlciQ2O1xuXG5leHBvcnRzLlNDSEVNRVMgPSBTQ0hFTUVTO1xuZXhwb3J0cy5wY3RFbmNDaGFyID0gcGN0RW5jQ2hhcjtcbmV4cG9ydHMucGN0RGVjQ2hhcnMgPSBwY3REZWNDaGFycztcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmV4cG9ydHMucmVtb3ZlRG90U2VnbWVudHMgPSByZW1vdmVEb3RTZWdtZW50cztcbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuZXhwb3J0cy5yZXNvbHZlQ29tcG9uZW50cyA9IHJlc29sdmVDb21wb25lbnRzO1xuZXhwb3J0cy5yZXNvbHZlID0gcmVzb2x2ZTtcbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuZXhwb3J0cy5lcXVhbCA9IGVxdWFsO1xuZXhwb3J0cy5lc2NhcGVDb21wb25lbnQgPSBlc2NhcGVDb21wb25lbnQ7XG5leHBvcnRzLnVuZXNjYXBlQ29tcG9uZW50ID0gdW5lc2NhcGVDb21wb25lbnQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuYWxsLmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHVyaSA9IHJlcXVpcmUoXCJ1cmktanNcIik7XG51cmkuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91cmlcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSB1cmk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIGRhdGEgLy8gdG8gYmUgdmFsaWRhdGVkXG4gICAgKSB7XG4gICAgICAgIGxldCB2O1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUtleVJlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5nZXRTY2hlbWEoc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghdilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCIke3NjaGVtYUtleVJlZn1cImApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdiA9IHRoaXMuY29tcGlsZShzY2hlbWFLZXlSZWYpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdihkYXRhKTtcbiAgICAgICAgaWYgKCEoXCIkYXN5bmNcIiBpbiB2KSlcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gdi5lcnJvcnM7XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhKTtcbiAgICAgICAgcmV0dXJuIChzY2gudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpKTtcbiAgICB9XG4gICAgY29tcGlsZUFzeW5jKHNjaGVtYSwgbWV0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5sb2FkU2NoZW1hICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucy5sb2FkU2NoZW1hIHNob3VsZCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgbG9hZFNjaGVtYSB9ID0gdGhpcy5vcHRzO1xuICAgICAgICByZXR1cm4gcnVuQ29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoZW1hLCBtZXRhKTtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gcnVuQ29tcGlsZUFzeW5jKF9zY2hlbWEsIF9tZXRhKSB7XG4gICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSB0aGlzLl9hZGRTY2hlbWEoX3NjaGVtYSwgX21ldGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBsb2FkTWV0YVNjaGVtYSgkcmVmKSB7XG4gICAgICAgICAgICBpZiAoJHJlZiAmJiAhdGhpcy5nZXRTY2hlbWEoJHJlZikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCB7ICRyZWYgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2NvbXBpbGVBc3luYyhzY2gpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIHJlZl9lcnJvcl8xLmRlZmF1bHQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1pc3NpbmdTY2hlbWEuY2FsbCh0aGlzLCBlLm1pc3NpbmdTY2hlbWEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfY29tcGlsZUFzeW5jLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCh7IG1pc3NpbmdTY2hlbWE6IHJlZiwgbWlzc2luZ1JlZiB9KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWZzW3JlZl0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFueVNjaGVtYSAke3JlZn0gaXMgbG9hZGVkIGJ1dCAke21pc3NpbmdSZWZ9IGNhbm5vdCBiZSByZXNvbHZlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgX3NjaGVtYSA9IGF3YWl0IF9sb2FkU2NoZW1hLmNhbGwodGhpcywgcmVmKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZWZzW3JlZl0pXG4gICAgICAgICAgICAgICAgYXdhaXQgbG9hZE1ldGFTY2hlbWEuY2FsbCh0aGlzLCBfc2NoZW1hLiRzY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShfc2NoZW1hLCByZWYsIG1ldGEpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIF9sb2FkU2NoZW1hKHJlZikge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuX2xvYWRpbmdbcmVmXTtcbiAgICAgICAgICAgIGlmIChwKVxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgKHRoaXMuX2xvYWRpbmdbcmVmXSA9IGxvYWRTY2hlbWEocmVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFkZHMgc2NoZW1hIHRvIHRoZSBpbnN0YW5jZVxuICAgIGFkZFNjaGVtYShzY2hlbWEsIC8vIElmIGFycmF5IGlzIHBhc3NlZCwgYGtleWAgd2lsbCBiZSBpZ25vcmVkXG4gICAga2V5LCAvLyBPcHRpb25hbCBzY2hlbWEga2V5LiBDYW4gYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgbWV0aG9kIGluc3RlYWQgb2Ygc2NoZW1hIG9iamVjdCBvciBpZC9yZWYuIE9uZSBzY2hlbWEgcGVyIGluc3RhbmNlIGNhbiBoYXZlIGVtcHR5IGBpZGAgYW5kIGBrZXlgLlxuICAgIF9tZXRhLCAvLyB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHksIGFkZE1ldGFTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbi4gVXNlZCBpbnRlcm5hbGx5LCBvcHRpb24gdmFsaWRhdGVTY2hlbWEgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICApIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY2ggb2Ygc2NoZW1hKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaCwgdW5kZWZpbmVkLCBfbWV0YSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBpZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgJHtzY2hlbWFJZH0gbXVzdCBiZSBzdHJpbmdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBrZXkgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShrZXkgfHwgaWQpO1xuICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShrZXkpO1xuICAgICAgICB0aGlzLnNjaGVtYXNba2V5XSA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEsIF9tZXRhLCBrZXksIF92YWxpZGF0ZVNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAgICAvLyBvcHRpb25zIGluIE1FVEFfSUdOT1JFX09QVElPTlMgYXJlIGFsd2F5IHNldCB0byBmYWxzZVxuICAgIGFkZE1ldGFTY2hlbWEoc2NoZW1hLCBrZXksIC8vIHNjaGVtYSBrZXlcbiAgICBfdmFsaWRhdGVTY2hlbWEgPSB0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgLy8gZmFsc2UgdG8gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbiwgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdmFsaWRhdGVTY2hlbWEgb3B0aW9uIGZvciBtZXRhLXNjaGVtYVxuICAgICkge1xuICAgICAgICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgdHJ1ZSwgX3ZhbGlkYXRlU2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vICBWYWxpZGF0ZSBzY2hlbWEgYWdhaW5zdCBpdHMgbWV0YS1zY2hlbWFcbiAgICB2YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRocm93T3JMb2dFcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBsZXQgJHNjaGVtYTtcbiAgICAgICAgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgICAgICBpZiAoJHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAkc2NoZW1hICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIiRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLm9wdHMuZGVmYXVsdE1ldGEgfHwgdGhpcy5kZWZhdWx0TWV0YSgpO1xuICAgICAgICBpZiAoISRzY2hlbWEpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlKCRzY2hlbWEsIHNjaGVtYSk7XG4gICAgICAgIGlmICghdmFsaWQgJiYgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJzY2hlbWEgaXMgaW52YWxpZDogXCIgKyB0aGlzLmVycm9yc1RleHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMudmFsaWRhdGVTY2hlbWEgPT09IFwibG9nXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgLy8gR2V0IGNvbXBpbGVkIHNjaGVtYSBieSBga2V5YCBvciBgcmVmYC5cbiAgICAvLyAoYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAtIGBzY2hlbWEuJGlkYCBvciByZXNvbHZlZCBpZClcbiAgICBnZXRTY2hlbWEoa2V5UmVmKSB7XG4gICAgICAgIGxldCBzY2g7XG4gICAgICAgIHdoaWxlICh0eXBlb2YgKHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIGtleVJlZikpID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBrZXlSZWYgPSBzY2g7XG4gICAgICAgIGlmIChzY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBjb21waWxlXzEuU2NoZW1hRW52KHsgc2NoZW1hOiB7fSwgc2NoZW1hSWQgfSk7XG4gICAgICAgICAgICBzY2ggPSBjb21waWxlXzEucmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIGtleVJlZik7XG4gICAgICAgICAgICBpZiAoIXNjaClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnJlZnNba2V5UmVmXSA9IHNjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgY2FjaGVkIHNjaGVtYShzKS5cbiAgICAvLyBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gSWYgUmVnRXhwIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyB3aXRoIGtleS9pZCBtYXRjaGluZyBwYXR0ZXJuIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAgLy8gRXZlbiBpZiBzY2hlbWEgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBzY2hlbWFzIGl0IHN0aWxsIGNhbiBiZSByZW1vdmVkIGFzIG90aGVyIHNjaGVtYXMgaGF2ZSBsb2NhbCByZWZlcmVuY2VzLlxuICAgIHJlbW92ZVNjaGVtYShzY2hlbWFLZXlSZWYpIHtcbiAgICAgICAgaWYgKHNjaGVtYUtleVJlZiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5zY2hlbWFzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMucmVmcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaCA9IGdldFNjaEVudi5jYWxsKHRoaXMsIHNjaGVtYUtleVJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjaGVtYXNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZWZzW3NjaGVtYUtleVJlZl07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IHNjaGVtYUtleVJlZjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IHNjaGVtYUtleVJlZlt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tpZF07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2LnJlbW92ZVNjaGVtYTogaW52YWxpZCBwYXJhbWV0ZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWRkIFwidm9jYWJ1bGFyeVwiIC0gYSBjb2xsZWN0aW9uIG9mIGtleXdvcmRzXG4gICAgYWRkVm9jYWJ1bGFyeShkZWZpbml0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGRlZiBvZiBkZWZpbml0aW9ucylcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkS2V5d29yZChrd2RPckRlZiwgZGVmIC8vIGRlcHJlY2F0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IGtleXdvcmQ7XG4gICAgICAgIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAga2V5d29yZCA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJ0aGVzZSBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkLCBzZWUgZG9jcyBmb3IgYWRkS2V5d29yZFwiKTtcbiAgICAgICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGt3ZE9yRGVmID09IFwib2JqZWN0XCIgJiYgZGVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlZiA9IGt3ZE9yRGVmO1xuICAgICAgICAgICAga2V5d29yZCA9IGRlZi5rZXl3b3JkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5d29yZCkgJiYgIWtleXdvcmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWRkS2V5d29yZHM6IGtleXdvcmQgbXVzdCBiZSBzdHJpbmcgb3Igbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBhZGRLZXl3b3JkcyBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrS2V5d29yZC5jYWxsKHRoaXMsIGtleXdvcmQsIGRlZik7XG4gICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCAoa3dkKSA9PiBhZGRSdWxlLmNhbGwodGhpcywga3dkKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBrZXl3b3JkTWV0YXNjaGVtYS5jYWxsKHRoaXMsIGRlZik7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgICB0eXBlOiAoMCwgZGF0YVR5cGVfMS5nZXRKU09OVHlwZXMpKGRlZi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnNjaGVtYVR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICAoMCwgdXRpbF8xLmVhY2hJdGVtKShrZXl3b3JkLCBkZWZpbml0aW9uLnR5cGUubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IChrKSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbilcbiAgICAgICAgICAgIDogKGspID0+IGRlZmluaXRpb24udHlwZS5mb3JFYWNoKCh0KSA9PiBhZGRSdWxlLmNhbGwodGhpcywgaywgZGVmaW5pdGlvbiwgdCkpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldEtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5SVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIHJldHVybiB0eXBlb2YgcnVsZSA9PSBcIm9iamVjdFwiID8gcnVsZS5kZWZpbml0aW9uIDogISFydWxlO1xuICAgIH1cbiAgICAvLyBSZW1vdmUga2V5d29yZFxuICAgIHJlbW92ZUtleXdvcmQoa2V5d29yZCkge1xuICAgICAgICAvLyBUT0RPIHJldHVybiB0eXBlIHNob3VsZCBiZSBBanZcbiAgICAgICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICAgICAgZGVsZXRlIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdO1xuICAgICAgICBkZWxldGUgUlVMRVMuYWxsW2tleXdvcmRdO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIFJVTEVTLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ3JvdXAucnVsZXMuZmluZEluZGV4KChydWxlKSA9PiBydWxlLmtleXdvcmQgPT09IGtleXdvcmQpO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICBncm91cC5ydWxlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBmb3JtYXRcbiAgICBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0ID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gICAgICAgIHRoaXMuZm9ybWF0c1tuYW1lXSA9IGZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGVycm9yc1RleHQoZXJyb3JzID0gdGhpcy5lcnJvcnMsIC8vIG9wdGlvbmFsIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgeyBzZXBhcmF0b3IgPSBcIiwgXCIsIGRhdGFWYXIgPSBcImRhdGFcIiB9ID0ge30gLy8gb3B0aW9uYWwgb3B0aW9ucyB3aXRoIHByb3BlcnRpZXMgYHNlcGFyYXRvcmAgYW5kIGBkYXRhVmFyYFxuICAgICkge1xuICAgICAgICBpZiAoIWVycm9ycyB8fCBlcnJvcnMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFwiTm8gZXJyb3JzXCI7XG4gICAgICAgIHJldHVybiBlcnJvcnNcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IGAke2RhdGFWYXJ9JHtlLmluc3RhbmNlUGF0aH0gJHtlLm1lc3NhZ2V9YClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHRleHQsIG1zZykgPT4gdGV4dCArIHNlcGFyYXRvciArIG1zZyk7XG4gICAgfVxuICAgICRkYXRhTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuUlVMRVMuYWxsO1xuICAgICAgICBtZXRhU2NoZW1hID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtZXRhU2NoZW1hKSk7XG4gICAgICAgIGZvciAoY29uc3QganNvblBvaW50ZXIgb2Yga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpLnNsaWNlKDEpOyAvLyBmaXJzdCBzZWdtZW50IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgbGV0IGtleXdvcmRzID0gbWV0YVNjaGVtYTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIHNlZ21lbnRzKVxuICAgICAgICAgICAgICAgIGtleXdvcmRzID0ga2V5d29yZHNbc2VnXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgJGRhdGEgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBrZXl3b3Jkc1trZXldO1xuICAgICAgICAgICAgICAgIGlmICgkZGF0YSAmJiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzW2tleV0gPSBzY2hlbWFPckRhdGEoc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0YVNjaGVtYTtcbiAgICB9XG4gICAgX3JlbW92ZUFsbFNjaGVtYXMoc2NoZW1hcywgcmVnZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXlSZWYgaW4gc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgaWYgKCFyZWdleCB8fCByZWdleC50ZXN0KGtleVJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaCAmJiAhc2NoLm1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHNjaC5zY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfYWRkU2NoZW1hKHNjaGVtYSwgbWV0YSwgYmFzZUlkLCB2YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSwgYWRkU2NoZW1hID0gdGhpcy5vcHRzLmFkZFVzZWRTY2hlbWEpIHtcbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuanRkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjaGVtYSBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0IG9yIGJvb2xlYW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNjaCA9IHRoaXMuX2NhY2hlLmdldChzY2hlbWEpO1xuICAgICAgICBpZiAoc2NoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gc2NoO1xuICAgICAgICBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShpZCB8fCBiYXNlSWQpO1xuICAgICAgICBjb25zdCBsb2NhbFJlZnMgPSByZXNvbHZlXzEuZ2V0U2NoZW1hUmVmcy5jYWxsKHRoaXMsIHNjaGVtYSwgYmFzZUlkKTtcbiAgICAgICAgc2NoID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCBtZXRhLCBiYXNlSWQsIGxvY2FsUmVmcyB9KTtcbiAgICAgICAgdGhpcy5fY2FjaGUuc2V0KHNjaC5zY2hlbWEsIHNjaCk7XG4gICAgICAgIGlmIChhZGRTY2hlbWEgJiYgIWJhc2VJZC5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICAgICAgLy8gVE9ETyBhdG0gaXQgaXMgYWxsb3dlZCB0byBvdmVyd3JpdGUgc2NoZW1hcyB3aXRob3V0IGlkIChpbnN0ZWFkIG9mIG5vdCBhZGRpbmcgdGhlbSlcbiAgICAgICAgICAgIGlmIChiYXNlSWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tVbmlxdWUoYmFzZUlkKTtcbiAgICAgICAgICAgIHRoaXMucmVmc1tiYXNlSWRdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0ZVNjaGVtYSlcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgX2NoZWNrVW5pcXVlKGlkKSB7XG4gICAgICAgIGlmICh0aGlzLnNjaGVtYXNbaWRdIHx8IHRoaXMucmVmc1tpZF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2NoZW1hIHdpdGgga2V5IG9yIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jb21waWxlU2NoZW1hRW52KHNjaCkge1xuICAgICAgICBpZiAoc2NoLm1ldGEpXG4gICAgICAgICAgICB0aGlzLl9jb21waWxlTWV0YVNjaGVtYShzY2gpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXNjaC52YWxpZGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuIHNjaC52YWxpZGF0ZTtcbiAgICB9XG4gICAgX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCkge1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0cyA9IHRoaXMub3B0cztcbiAgICAgICAgdGhpcy5vcHRzID0gdGhpcy5fbWV0YU9wdHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21waWxlXzEuY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMgPSBjdXJyZW50T3B0cztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbkFqdi5WYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDtcbkFqdi5NaXNzaW5nUmVmRXJyb3IgPSByZWZfZXJyb3JfMS5kZWZhdWx0O1xuZnVuY3Rpb24gY2hlY2tPcHRpb25zKGNoZWNrT3B0cywgb3B0aW9ucywgbXNnLCBsb2cgPSBcImVycm9yXCIpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGVja09wdHMpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0ga2V5O1xuICAgICAgICBpZiAob3B0IGluIG9wdGlvbnMpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlcltsb2ddKGAke21zZ306IG9wdGlvbiAke2tleX0uICR7Y2hlY2tPcHRzW29wdF19YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U2NoRW52KGtleVJlZikge1xuICAgIGtleVJlZiA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleVJlZik7IC8vIFRPRE8gdGVzdHMgZmFpbCB3aXRob3V0IHRoaXMgbGluZVxuICAgIHJldHVybiB0aGlzLnNjaGVtYXNba2V5UmVmXSB8fCB0aGlzLnJlZnNba2V5UmVmXTtcbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKCkge1xuICAgIGNvbnN0IG9wdHNTY2hlbWFzID0gdGhpcy5vcHRzLnNjaGVtYXM7XG4gICAgaWYgKCFvcHRzU2NoZW1hcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSlcbiAgICAgICAgdGhpcy5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICAgIGVsc2VcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3B0c1NjaGVtYXMpXG4gICAgICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hc1trZXldLCBrZXkpO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbEZvcm1hdHMoKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMub3B0cy5mb3JtYXRzKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMub3B0cy5mb3JtYXRzW25hbWVdO1xuICAgICAgICBpZiAoZm9ybWF0KVxuICAgICAgICAgICAgdGhpcy5hZGRGb3JtYXQobmFtZSwgZm9ybWF0KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsS2V5d29yZHMoZGVmcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZnMpKSB7XG4gICAgICAgIHRoaXMuYWRkVm9jYWJ1bGFyeShkZWZzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci53YXJuKFwia2V5d29yZHMgb3B0aW9uIGFzIG1hcCBpcyBkZXByZWNhdGVkLCBwYXNzIGFycmF5XCIpO1xuICAgIGZvciAoY29uc3Qga2V5d29yZCBpbiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IGRlZnNba2V5d29yZF07XG4gICAgICAgIGlmICghZGVmLmtleXdvcmQpXG4gICAgICAgICAgICBkZWYua2V5d29yZCA9IGtleXdvcmQ7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChkZWYpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKCkge1xuICAgIGNvbnN0IG1ldGFPcHRzID0geyAuLi50aGlzLm9wdHMgfTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBNRVRBX0lHTk9SRV9PUFRJT05TKVxuICAgICAgICBkZWxldGUgbWV0YU9wdHNbb3B0XTtcbiAgICByZXR1cm4gbWV0YU9wdHM7XG59XG5jb25zdCBub0xvZ3MgPSB7IGxvZygpIHsgfSwgd2FybigpIHsgfSwgZXJyb3IoKSB7IH0gfTtcbmZ1bmN0aW9uIGdldExvZ2dlcihsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG5vTG9ncztcbiAgICBpZiAobG9nZ2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBjb25zb2xlO1xuICAgIGlmIChsb2dnZXIubG9nICYmIGxvZ2dlci53YXJuICYmIGxvZ2dlci5lcnJvcilcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzXCIpO1xufVxuY29uc3QgS0VZV09SRF9OQU1FID0gL15bYS16XyRdW2EtejAtOV8kOi1dKiQvaTtcbmZ1bmN0aW9uIGNoZWNrS2V5d29yZChrZXl3b3JkLCBkZWYpIHtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IHtcbiAgICAgICAgaWYgKFJVTEVTLmtleXdvcmRzW2t3ZF0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGlzIGFscmVhZHkgZGVmaW5lZGApO1xuICAgICAgICBpZiAoIUtFWVdPUkRfTkFNRS50ZXN0KGt3ZCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleXdvcmQgJHtrd2R9IGhhcyBpbnZhbGlkIG5hbWVgKTtcbiAgICB9KTtcbiAgICBpZiAoIWRlZilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgIShcImNvZGVcIiBpbiBkZWYgfHwgXCJ2YWxpZGF0ZVwiIGluIGRlZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCckZGF0YSBrZXl3b3JkIG11c3QgaGF2ZSBcImNvZGVcIiBvciBcInZhbGlkYXRlXCIgZnVuY3Rpb24nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRSdWxlKGtleXdvcmQsIGRlZmluaXRpb24sIGRhdGFUeXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBvc3QgPSBkZWZpbml0aW9uID09PSBudWxsIHx8IGRlZmluaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlZmluaXRpb24ucG9zdDtcbiAgICBpZiAoZGF0YVR5cGUgJiYgcG9zdClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXl3b3JkIHdpdGggXCJwb3N0XCIgZmxhZyBjYW5ub3QgaGF2ZSBcInR5cGVcIicpO1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgbGV0IHJ1bGVHcm91cCA9IHBvc3QgPyBSVUxFUy5wb3N0IDogUlVMRVMucnVsZXMuZmluZCgoeyB0eXBlOiB0IH0pID0+IHQgPT09IGRhdGFUeXBlKTtcbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgICBydWxlR3JvdXAgPSB7IHR5cGU6IGRhdGFUeXBlLCBydWxlczogW10gfTtcbiAgICAgICAgUlVMRVMucnVsZXMucHVzaChydWxlR3JvdXApO1xuICAgIH1cbiAgICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IHRydWU7XG4gICAgaWYgKCFkZWZpbml0aW9uKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAga2V5d29yZCxcbiAgICAgICAgZGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgLi4uZGVmaW5pdGlvbixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi50eXBlKSxcbiAgICAgICAgICAgIHNjaGVtYVR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmaW5pdGlvbi5zY2hlbWFUeXBlKSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChkZWZpbml0aW9uLmJlZm9yZSlcbiAgICAgICAgYWRkQmVmb3JlUnVsZS5jYWxsKHRoaXMsIHJ1bGVHcm91cCwgcnVsZSwgZGVmaW5pdGlvbi5iZWZvcmUpO1xuICAgIGVsc2VcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgUlVMRVMuYWxsW2tleXdvcmRdID0gcnVsZTtcbiAgICAoX2EgPSBkZWZpbml0aW9uLmltcGxlbWVudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKChrd2QpID0+IHRoaXMuYWRkS2V5d29yZChrd2QpKTtcbn1cbmZ1bmN0aW9uIGFkZEJlZm9yZVJ1bGUocnVsZUdyb3VwLCBydWxlLCBiZWZvcmUpIHtcbiAgICBjb25zdCBpID0gcnVsZUdyb3VwLnJ1bGVzLmZpbmRJbmRleCgoX3J1bGUpID0+IF9ydWxlLmtleXdvcmQgPT09IGJlZm9yZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMuc3BsaWNlKGksIDAsIHJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYHJ1bGUgJHtiZWZvcmV9IGlzIG5vdCBkZWZpbmVkYCk7XG4gICAgfVxufVxuZnVuY3Rpb24ga2V5d29yZE1ldGFzY2hlbWEoZGVmKSB7XG4gICAgbGV0IHsgbWV0YVNjaGVtYSB9ID0gZGVmO1xuICAgIGlmIChtZXRhU2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVmLiRkYXRhICYmIHRoaXMub3B0cy4kZGF0YSlcbiAgICAgICAgbWV0YVNjaGVtYSA9IHNjaGVtYU9yRGF0YShtZXRhU2NoZW1hKTtcbiAgICBkZWYudmFsaWRhdGVTY2hlbWEgPSB0aGlzLmNvbXBpbGUobWV0YVNjaGVtYSwgdHJ1ZSk7XG59XG5jb25zdCAkZGF0YVJlZiA9IHtcbiAgICAkcmVmOiBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uI1wiLFxufTtcbmZ1bmN0aW9uIHNjaGVtYU9yRGF0YShzY2hlbWEpIHtcbiAgICByZXR1cm4geyBhbnlPZjogW3NjaGVtYSwgJGRhdGFSZWZdIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3JlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZFwiLFxuICAgIGNvZGUoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTk9UIFNVUFBPUlRFRDoga2V5d29yZCBcImlkXCIsIHVzZSBcIiRpZFwiIGZvciBzY2hlbWEgSUQnKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbGxSZWYgPSBleHBvcnRzLmdldFZhbGlkYXRlID0gdm9pZCAwO1xuY29uc3QgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCIkcmVmXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hOiAkcmVmLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGJhc2VJZCwgc2NoZW1hRW52OiBlbnYsIHZhbGlkYXRlTmFtZSwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHsgcm9vdCB9ID0gZW52O1xuICAgICAgICBpZiAoKCRyZWYgPT09IFwiI1wiIHx8ICRyZWYgPT09IFwiIy9cIikgJiYgYmFzZUlkID09PSByb290LmJhc2VJZClcbiAgICAgICAgICAgIHJldHVybiBjYWxsUm9vdFJlZigpO1xuICAgICAgICBjb25zdCBzY2hPckVudiA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoc2VsZiwgcm9vdCwgYmFzZUlkLCAkcmVmKTtcbiAgICAgICAgaWYgKHNjaE9yRW52ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgcmVmX2Vycm9yXzEuZGVmYXVsdChpdC5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxWYWxpZGF0ZShzY2hPckVudik7XG4gICAgICAgIHJldHVybiBpbmxpbmVSZWZTY2hlbWEoc2NoT3JFbnYpO1xuICAgICAgICBmdW5jdGlvbiBjYWxsUm9vdFJlZigpIHtcbiAgICAgICAgICAgIGlmIChlbnYgPT09IHJvb3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCB2YWxpZGF0ZU5hbWUsIGVudiwgZW52LiRhc3luYyk7XG4gICAgICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogcm9vdCB9KTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsUmVmKGN4dCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtyb290TmFtZX0udmFsaWRhdGVgLCByb290LCByb290LiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FsbFZhbGlkYXRlKHNjaCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IGdldFZhbGlkYXRlKGN4dCwgc2NoKTtcbiAgICAgICAgICAgIGNhbGxSZWYoY3h0LCB2LCBzY2gsIHNjaC4kYXN5bmMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlubGluZVJlZlNjaGVtYShzY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCBvcHRzLmNvZGUuc291cmNlID09PSB0cnVlID8geyByZWY6IHNjaCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHNjaCkgfSA6IHsgcmVmOiBzY2ggfSk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgICAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hOYW1lLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6ICRyZWYsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldFZhbGlkYXRlKGN4dCwgc2NoKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlXG4gICAgICAgID8gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZVwiLCB7IHJlZjogc2NoLnZhbGlkYXRlIH0pXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtnZW4uc2NvcGVWYWx1ZShcIndyYXBwZXJcIiwgeyByZWY6IHNjaCB9KX0udmFsaWRhdGVgO1xufVxuZXhwb3J0cy5nZXRWYWxpZGF0ZSA9IGdldFZhbGlkYXRlO1xuZnVuY3Rpb24gY2FsbFJlZihjeHQsIHYsIHNjaCwgJGFzeW5jKSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBhbGxFcnJvcnMsIHNjaGVtYUVudjogZW52LCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBwYXNzQ3h0ID0gb3B0cy5wYXNzQ29udGV4dCA/IG5hbWVzXzEuZGVmYXVsdC50aGlzIDogY29kZWdlbl8xLm5pbDtcbiAgICBpZiAoJGFzeW5jKVxuICAgICAgICBjYWxsQXN5bmNSZWYoKTtcbiAgICBlbHNlXG4gICAgICAgIGNhbGxTeW5jUmVmKCk7XG4gICAgZnVuY3Rpb24gY2FsbEFzeW5jUmVmKCkge1xuICAgICAgICBpZiAoIWVudi4kYXN5bmMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgIGdlbi50cnkoKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCl9YCk7XG4gICAgICAgICAgICBhZGRFdmFsdWF0ZWRGcm9tKHYpOyAvLyBUT0RPIHdpbGwgbm90IHdvcmsgd2l0aCBhc3luYywgaXQgaGFzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIHJlc3VsdFxuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgISgke2V9IGluc3RhbmNlb2YgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KWAsICgpID0+IGdlbi50aHJvdyhlKSk7XG4gICAgICAgICAgICBhZGRFcnJvcnNGcm9tKGUpO1xuICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFN5bmNSZWYoKSB7XG4gICAgICAgIGN4dC5yZXN1bHQoKDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHYsIHBhc3NDeHQpLCAoKSA9PiBhZGRFdmFsdWF0ZWRGcm9tKHYpLCAoKSA9PiBhZGRFcnJvcnNGcm9tKHYpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXJyb3JzRnJvbShzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgZXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5lcnJvcnNgO1xuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKTsgLy8gVE9ETyB0YWdnZWRcbiAgICAgICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRXZhbHVhdGVkRnJvbShzb3VyY2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaEV2YWx1YXRlZCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC52YWxpZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2YWx1YXRlZDtcbiAgICAgICAgLy8gVE9ETyByZWZhY3RvclxuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBzY2hFdmFsdWF0ZWQucHJvcHMsIGl0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLnByb3BzYCk7XG4gICAgICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCBwcm9wcywgaXQucHJvcHMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQgJiYgIXNjaEV2YWx1YXRlZC5keW5hbWljSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkLml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hFdmFsdWF0ZWQuaXRlbXMsIGl0Lml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGdlbi52YXIoXCJpdGVtc1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXZhbHVhdGVkLml0ZW1zYCk7XG4gICAgICAgICAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBpdGVtcywgaXQuaXRlbXMsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2FsbFJlZiA9IGNhbGxSZWY7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGlkXzEgPSByZXF1aXJlKFwiLi9pZFwiKTtcbmNvbnN0IHJlZl8xID0gcmVxdWlyZShcIi4vcmVmXCIpO1xuY29uc3QgY29yZSA9IFtcbiAgICBcIiRzY2hlbWFcIixcbiAgICBcIiRpZFwiLFxuICAgIFwiJGRlZnNcIixcbiAgICBcIiR2b2NhYnVsYXJ5XCIsXG4gICAgeyBrZXl3b3JkOiBcIiRjb21tZW50XCIgfSxcbiAgICBcImRlZmluaXRpb25zXCIsXG4gICAgaWRfMS5kZWZhdWx0LFxuICAgIHJlZl8xLmRlZmF1bHQsXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gY29yZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3Qgb3BzID0gY29kZWdlbl8xLm9wZXJhdG9ycztcbmNvbnN0IEtXRHMgPSB7XG4gICAgbWF4aW11bTogeyBva1N0cjogXCI8PVwiLCBvazogb3BzLkxURSwgZmFpbDogb3BzLkdUIH0sXG4gICAgbWluaW11bTogeyBva1N0cjogXCI+PVwiLCBvazogb3BzLkdURSwgZmFpbDogb3BzLkxUIH0sXG4gICAgZXhjbHVzaXZlTWF4aW11bTogeyBva1N0cjogXCI8XCIsIG9rOiBvcHMuTFQsIGZhaWw6IG9wcy5HVEUgfSxcbiAgICBleGNsdXNpdmVNaW5pbXVtOiB7IG9rU3RyOiBcIj5cIiwgb2s6IG9wcy5HVCwgZmFpbDogb3BzLkxURSB9LFxufTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlICR7S1dEc1trZXl3b3JkXS5va1N0cn0gJHtzY2hlbWFDb2RlfWAsXG4gICAgcGFyYW1zOiAoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtjb21wYXJpc29uOiAke0tXRHNba2V5d29yZF0ub2tTdHJ9LCBsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBPYmplY3Qua2V5cyhLV0RzKSxcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0tXRHNba2V5d29yZF0uZmFpbH0gJHtzY2hlbWFDb2RlfSB8fCBpc05hTigke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXROdW1iZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBiZSBtdWx0aXBsZSBvZiAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge211bHRpcGxlT2Y6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBjb25zdCBiZHQgPSBiYWQkRGF0YVR5cGUoc2NoZW1hQ29kZSwgPHN0cmluZz5kZWYuc2NoZW1hVHlwZSwgJGRhdGEpXG4gICAgICAgIGNvbnN0IHByZWMgPSBpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb247XG4gICAgICAgIGNvbnN0IHJlcyA9IGdlbi5sZXQoXCJyZXNcIik7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBwcmVjXG4gICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYE1hdGguYWJzKE1hdGgucm91bmQoJHtyZXN9KSAtICR7cmVzfSkgPiAxZS0ke3ByZWN9YFxuICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke3Jlc30gIT09IHBhcnNlSW50KCR7cmVzfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCgke3NjaGVtYUNvZGV9ID09PSAwIHx8ICgke3Jlc30gPSAke2RhdGF9LyR7c2NoZW1hQ29kZX0sICR7aW52YWxpZH0pKWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlwbGVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5mdW5jdGlvbiB1Y3MybGVuZ3RoKHN0cikge1xuICAgIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGg7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgbGV0IHZhbHVlO1xuICAgIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICAgICAgbGVuZ3RoKys7XG4gICAgICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZiAmJiBwb3MgPCBsZW4pIHtcbiAgICAgICAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuICAgICAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIDB4ZmMwMCkgPT09IDB4ZGMwMClcbiAgICAgICAgICAgICAgICBwb3MrKzsgLy8gbG93IHN1cnJvZ2F0ZVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB1Y3MybGVuZ3RoO1xudWNzMmxlbmd0aC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGhcIikuZGVmYXVsdCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11Y3MybGVuZ3RoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHVjczJsZW5ndGhfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL3VjczJsZW5ndGhcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heExlbmd0aFwiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gY2hhcmFjdGVyc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heExlbmd0aFwiLCBcIm1pbkxlbmd0aFwiXSxcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY29uc3QgbGVuID0gaXQub3B0cy51bmljb2RlID09PSBmYWxzZSA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIHV0aWxfMS51c2VGdW5jKShjeHQuZ2VuLCB1Y3MybGVuZ3RoXzEuZGVmYXVsdCl9KCR7ZGF0YX0pYDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRMZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBUT0RPIHJlZ2V4cCBzaG91bGQgYmUgd3JhcHBlZCBpbiB0cnkvY2F0Y2hzXG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9ICRkYXRhID8gKDAsIGNvZGVnZW5fMS5fKSBgKG5ldyBSZWdFeHAoJHtzY2hlbWFDb2RlfSwgJHt1fSkpYCA6ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCEke3JlZ0V4cH0udGVzdCgke2RhdGF9KWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gcHJvcGVydGllc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heFByb3BlcnRpZXNcIiwgXCJtaW5Qcm9wZXJ0aWVzXCJdLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5rZXlzKCR7ZGF0YX0pLmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJyR7bWlzc2luZ1Byb3BlcnR5fSdgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHttaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInJlcXVpcmVkXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgc2NoZW1hQ29kZSwgZGF0YSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gb3B0cy5sb29wUmVxdWlyZWQ7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICBhbGxFcnJvcnNNb2RlKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGV4aXRPbkVycm9yTW9kZSgpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RSZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBjeHQucGFyZW50U2NoZW1hLnByb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCB7IGRlZmluZWRQcm9wZXJ0aWVzIH0gPSBjeHQuaXQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVpcmVkS2V5IG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmICgocHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzW3JlcXVpcmVkS2V5XSkgPT09IHVuZGVmaW5lZCAmJiAhZGVmaW5lZFByb3BlcnRpZXMuaGFzKHJlcXVpcmVkS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7cmVxdWlyZWRLZXl9XCIgaXMgbm90IGRlZmluZWQgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFJlcXVpcmVkKWA7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxsRXJyb3JzTW9kZSgpIHtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEoY29kZWdlbl8xLm5pbCwgbG9vcEFsbFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGl0T25FcnJvck1vZGUoKSB7XG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgICAgICAgICBpZiAodXNlTG9vcCB8fCAkZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCAoKSA9PiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSk7XG4gICAgICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgc2NoZW1hLCBtaXNzaW5nKSk7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BBbGxSZXF1aXJlZCgpIHtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInByb3BcIiwgc2NoZW1hQ29kZSwgKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBwcm9wIH0pO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZV8xLm5vUHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcFVudGlsTWlzc2luZyhtaXNzaW5nLCB2YWxpZCkge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9KTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihtaXNzaW5nLCBzY2hlbWFDb2RlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBtaXNzaW5nLCBvcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWlyZWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBpdGVtc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heEl0ZW1zXCIsIFwibWluSXRlbXNcIl0sXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhJdGVtc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy84ODlcbmNvbnN0IGVxdWFsID0gcmVxdWlyZShcImZhc3QtZGVlcC1lcXVhbFwiKTtcbmVxdWFsLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvZXF1YWxcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSBlcXVhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVxdWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgJHtqfSBhbmQgJHtpfSBhcmUgaWRlbnRpY2FsKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtpOiAke2l9LCBqOiAke2p9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiAhc2NoZW1hKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGVzID0gcGFyZW50U2NoZW1hLml0ZW1zID8gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKHBhcmVudFNjaGVtYS5pdGVtcykgOiBbXTtcbiAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlVW5pcXVlSXRlbXMsICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IGZhbHNlYCk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlVW5pcXVlSXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ2VuLmxldChcImlcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnZW4ubGV0KFwialwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpLCBqIH0pO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpfSA+IDFgLCAoKSA9PiAoY2FuT3B0aW1pemUoKSA/IGxvb3BOIDogbG9vcE4yKShpLCBqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVR5cGVzLmxlbmd0aCA+IDAgJiYgIWl0ZW1UeXBlcy5zb21lKCh0KSA9PiB0ID09PSBcIm9iamVjdFwiIHx8IHQgPT09IFwiYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4oaSwgaikge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdlbi5uYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdyb25nVHlwZSA9ICgwLCBkYXRhVHlwZV8xLmNoZWNrRGF0YVR5cGVzKShpdGVtVHlwZXMsIGl0ZW0sIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMS5EYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZ2VuLmNvbnN0KFwiaW5kaWNlc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgICAgICAgICAgZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4ubGV0KGl0ZW0sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBjb250aW51ZWApO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2l0ZW19ID09IFwic3RyaW5nXCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0ZW19ICs9IFwiX1wiYCk7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpbmRpY2VzfVske2l0ZW19XSA9PSBcIm51bWJlclwiYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGosICgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV0gPSAke2l9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTjIoaSwgaikge1xuICAgICAgICAgICAgY29uc3QgZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCk7XG4gICAgICAgICAgICBjb25zdCBvdXRlciA9IGdlbi5uYW1lKFwib3V0ZXJcIik7XG4gICAgICAgICAgICBnZW4ubGFiZWwob3V0ZXIpLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgJHtqfSA9ICR7aX07ICR7an0tLTtgLCAoKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcWx9KCR7ZGF0YX1bJHtpfV0sICR7ZGF0YX1bJHtqfV0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhayhvdXRlcik7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gY29uc3RhbnRcIixcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FsbG93ZWRWYWx1ZTogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnN0XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWFDb2RlLCBzY2hlbWEgfSA9IGN4dDtcbiAgICAgICAgaWYgKCRkYXRhIHx8IChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KX0oJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfSAhPT0gJHtkYXRhfWApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcXVhbF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvZXF1YWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1wiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlczogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImVudW1cIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICghJGRhdGEgJiYgc2NoZW1hLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVudW0gbXVzdCBoYXZlIG5vbi1lbXB0eSBhcnJheVwiKTtcbiAgICAgICAgY29uc3QgdXNlTG9vcCA9IHNjaGVtYS5sZW5ndGggPj0gaXQub3B0cy5sb29wRW51bTtcbiAgICAgICAgbGV0IGVxbDtcbiAgICAgICAgY29uc3QgZ2V0RXFsID0gKCkgPT4gKGVxbCAhPT0gbnVsbCAmJiBlcWwgIT09IHZvaWQgMCA/IGVxbCA6IChlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KSkpO1xuICAgICAgICBsZXQgdmFsaWQ7XG4gICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCBsb29wRW51bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IHZTY2hlbWEgPSBnZW4uY29uc3QoXCJ2U2NoZW1hXCIsIHNjaGVtYUNvZGUpO1xuICAgICAgICAgICAgdmFsaWQgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5zY2hlbWEubWFwKChfeCwgaSkgPT4gZXF1YWxDb2RlKHZTY2hlbWEsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiBsb29wRW51bSgpIHtcbiAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIGdlbi5mb3JPZihcInZcIiwgc2NoZW1hQ29kZSwgKHYpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3Z9KWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlcXVhbENvZGUodlNjaGVtYSwgaSkge1xuICAgICAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2ldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzY2ggPT09IFwib2JqZWN0XCIgJiYgc2NoICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGAke2dldEVxbCgpfSgke2RhdGF9LCAke3ZTY2hlbWF9WyR7aX1dKWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09ICR7c2NofWA7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGxpbWl0TnVtYmVyXzEgPSByZXF1aXJlKFwiLi9saW1pdE51bWJlclwiKTtcbmNvbnN0IG11bHRpcGxlT2ZfMSA9IHJlcXVpcmUoXCIuL211bHRpcGxlT2ZcIik7XG5jb25zdCBsaW1pdExlbmd0aF8xID0gcmVxdWlyZShcIi4vbGltaXRMZW5ndGhcIik7XG5jb25zdCBwYXR0ZXJuXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuXCIpO1xuY29uc3QgbGltaXRQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9saW1pdFByb3BlcnRpZXNcIik7XG5jb25zdCByZXF1aXJlZF8xID0gcmVxdWlyZShcIi4vcmVxdWlyZWRcIik7XG5jb25zdCBsaW1pdEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9saW1pdEl0ZW1zXCIpO1xuY29uc3QgdW5pcXVlSXRlbXNfMSA9IHJlcXVpcmUoXCIuL3VuaXF1ZUl0ZW1zXCIpO1xuY29uc3QgY29uc3RfMSA9IHJlcXVpcmUoXCIuL2NvbnN0XCIpO1xuY29uc3QgZW51bV8xID0gcmVxdWlyZShcIi4vZW51bVwiKTtcbmNvbnN0IHZhbGlkYXRpb24gPSBbXG4gICAgLy8gbnVtYmVyXG4gICAgbGltaXROdW1iZXJfMS5kZWZhdWx0LFxuICAgIG11bHRpcGxlT2ZfMS5kZWZhdWx0LFxuICAgIC8vIHN0cmluZ1xuICAgIGxpbWl0TGVuZ3RoXzEuZGVmYXVsdCxcbiAgICBwYXR0ZXJuXzEuZGVmYXVsdCxcbiAgICAvLyBvYmplY3RcbiAgICBsaW1pdFByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgIHJlcXVpcmVkXzEuZGVmYXVsdCxcbiAgICAvLyBhcnJheVxuICAgIGxpbWl0SXRlbXNfMS5kZWZhdWx0LFxuICAgIHVuaXF1ZUl0ZW1zXzEuZGVmYXVsdCxcbiAgICAvLyBhbnlcbiAgICB7IGtleXdvcmQ6IFwidHlwZVwiLCBzY2hlbWFUeXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiXSB9LFxuICAgIHsga2V5d29yZDogXCJudWxsYWJsZVwiLCBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIiB9LFxuICAgIGNvbnN0XzEuZGVmYXVsdCxcbiAgICBlbnVtXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgbW9yZSB0aGFuICR7bGVufSBpdGVtc2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke2xlbn19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWQgd2hlbiBcIml0ZW1zXCIgaXMgbm90IGFuIGFycmF5IG9mIHNjaGVtYXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyhjeHQsIGl0ZW1zKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbGVuOiBpdGVtcy5sZW5ndGggfSk7XG4gICAgICAgIGN4dC5wYXNzKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi52YXIoXCJ2YWxpZFwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPD0gJHtpdGVtcy5sZW5ndGh9YCk7IC8vIFRPRE8gdmFyXG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB2YWxpZGF0ZUl0ZW1zKHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXModmFsaWQpIHtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBpdGVtcy5sZW5ndGgsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBkYXRhUHJvcDogaSwgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0gfSwgdmFsaWQpO1xuICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYXJyYXlcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVHVwbGUoY3h0LCBcImFkZGl0aW9uYWxJdGVtc1wiLCBzY2hlbWEpO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiB2YWxpZGF0ZVR1cGxlKGN4dCwgZXh0cmFJdGVtcywgc2NoQXJyID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tTdHJpY3RUdXBsZShwYXJlbnRTY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHNjaEFyci5sZW5ndGggJiYgaXQuaXRlbXMgIT09IHRydWUpIHtcbiAgICAgICAgaXQuaXRlbXMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQuaXRlbXMoZ2VuLCBzY2hBcnIubGVuZ3RoLCBpdC5pdGVtcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+ICR7aX1gLCAoKSA9PiBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgIH0sIHZhbGlkKSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY2hlY2tTdHJpY3RUdXBsZShzY2gpIHtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBlcnJTY2hlbWFQYXRoIH0gPSBpdDtcbiAgICAgICAgY29uc3QgbCA9IHNjaEFyci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGxUdXBsZSA9IGwgPT09IHNjaC5taW5JdGVtcyAmJiAobCA9PT0gc2NoLm1heEl0ZW1zIHx8IHNjaFtleHRyYUl0ZW1zXSA9PT0gZmFsc2UpO1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RUdXBsZXMgJiYgIWZ1bGxUdXBsZSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYFwiJHtrZXl3b3JkfVwiIGlzICR7bH0tdHVwbGUsIGJ1dCBtaW5JdGVtcyBvciBtYXhJdGVtcy8ke2V4dHJhSXRlbXN9IGFyZSBub3Qgc3BlY2lmaWVkIG9yIGRpZmZlcmVudCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBvcHRzLnN0cmljdFR1cGxlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlVHVwbGUgPSB2YWxpZGF0ZVR1cGxlO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByZWZpeEl0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcImFycmF5XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGNvZGU6IChjeHQpID0+ICgwLCBpdGVtc18xLnZhbGlkYXRlVHVwbGUpKGN4dCwgXCJpdGVtc1wiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVmaXhJdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gdmFsaWQgaXRlbShzKWBcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbn0gYW5kIG5vIG1vcmUgdGhhbiAke21heH0gdmFsaWQgaXRlbShzKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZCA/ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufSwgbWF4Q29udGFpbnM6ICR7bWF4fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBsZXQgbWluO1xuICAgICAgICBsZXQgbWF4O1xuICAgICAgICBjb25zdCB7IG1pbkNvbnRhaW5zLCBtYXhDb250YWlucyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoaXQub3B0cy5uZXh0KSB7XG4gICAgICAgICAgICBtaW4gPSBtaW5Db250YWlucyA9PT0gdW5kZWZpbmVkID8gMSA6IG1pbkNvbnRhaW5zO1xuICAgICAgICAgICAgbWF4ID0gbWF4Q29udGFpbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaW4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWluLCBtYXggfSk7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDApIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA9PSAwIHdpdGhvdXQgXCJtYXhDb250YWluc1wiOiBcImNvbnRhaW5zXCIga2V5d29yZCBpZ25vcmVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1pbiA+IG1heCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID4gXCJtYXhDb250YWluc1wiIGlzIGFsd2F5cyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgbGV0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPj0gJHttaW59YDtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2xlbn0gPD0gJHttYXh9YDtcbiAgICAgICAgICAgIGN4dC5wYXNzKGNvbmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAxKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHZhbGlkLCAoKSA9PiBnZW4uaWYodmFsaWQsICgpID0+IGdlbi5icmVhaygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGggPiAwYCwgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4ubGV0KHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VuLmxldChcImNvdW50XCIsIDApO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyhzY2hWYWxpZCwgKCkgPT4gZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiBjaGVja0xpbWl0cyhjb3VudCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKF92YWxpZCwgYmxvY2spIHtcbiAgICAgICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgICAgIGJsb2NrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0xpbWl0cyhjb3VudCkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0rK2ApO1xuICAgICAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpLmJyZWFrKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID4gJHttYXh9YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9ID49ICR7bWlufWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGFpbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IGV4cG9ydHMuZXJyb3IgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuZXhwb3J0cy5lcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlfaWVzID0gZGVwc0NvdW50ID09PSAxID8gXCJwcm9wZXJ0eVwiIDogXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSAke3Byb3BlcnR5X2llc30gJHtkZXBzfSB3aGVuIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIHByZXNlbnRgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgcHJvcGVydHksIGRlcHNDb3VudCwgZGVwcywgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Byb3BlcnR5OiAke3Byb3BlcnR5fSxcbiAgICBtaXNzaW5nUHJvcGVydHk6ICR7bWlzc2luZ1Byb3BlcnR5fSxcbiAgICBkZXBzQ291bnQ6ICR7ZGVwc0NvdW50fSxcbiAgICBkZXBzOiAke2RlcHN9fWAsIC8vIFRPRE8gY2hhbmdlIHRvIHJlZmVyZW5jZVxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRlcGVuZGVuY2llc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcjogZXhwb3J0cy5lcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaERlcHNdID0gc3BsaXREZXBlbmRlbmNpZXMoY3h0KTtcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wRGVwcyk7XG4gICAgICAgIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaERlcHMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gc3BsaXREZXBlbmRlbmNpZXMoeyBzY2hlbWEgfSkge1xuICAgIGNvbnN0IHByb3BlcnR5RGVwcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYURlcHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBkZXBzID0gQXJyYXkuaXNBcnJheShzY2hlbWFba2V5XSkgPyBwcm9wZXJ0eURlcHMgOiBzY2hlbWFEZXBzO1xuICAgICAgICBkZXBzW2tleV0gPSBzY2hlbWFba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm9wZXJ0eURlcHMsIHNjaGVtYURlcHNdO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlcHMoY3h0LCBwcm9wZXJ0eURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnR5RGVwcykubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbWlzc2luZyA9IGdlbi5sZXQoXCJtaXNzaW5nXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wZXJ0eURlcHMpIHtcbiAgICAgICAgY29uc3QgZGVwcyA9IHByb3BlcnR5RGVwc1twcm9wXTtcbiAgICAgICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGhhc1Byb3BlcnR5ID0gKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgZGVwc0NvdW50OiBkZXBzLmxlbmd0aCxcbiAgICAgICAgICAgIGRlcHM6IGRlcHMuam9pbihcIiwgXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgZ2VuLmlmKGhhc1Byb3BlcnR5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBQcm9wIG9mIGRlcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5jaGVja1JlcG9ydE1pc3NpbmdQcm9wKShjeHQsIGRlcFByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcGVydHl9ICYmICgkeygwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBkZXBzLCBtaXNzaW5nKX0pYCk7XG4gICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSB2YWxpZGF0ZVByb3BlcnR5RGVwcztcbmZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hRGVwcyhjeHQsIHNjaGVtYURlcHMgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY2hlbWFEZXBzKSB7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hRGVwc1twcm9wXSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIHNjaGVtYVByb3A6IHByb3AgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCB2YWxpZCk7XG4gICAgICAgIH0sICgpID0+IGdlbi52YXIodmFsaWQsIHRydWUpIC8vIFRPRE8gdmFyXG4gICAgICAgICk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSB2YWxpZGF0ZVNjaGVtYURlcHM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBlbmRlbmNpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJwcm9wZXJ0eSBuYW1lIG11c3QgYmUgdmFsaWRcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHlOYW1lOiAke3BhcmFtcy5wcm9wZXJ0eU5hbWV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBwcm9wZXJ0eU5hbWU6IGtleSB9KTtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwicHJvcGVydHlOYW1lc1wiLFxuICAgICAgICAgICAgICAgIGRhdGE6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXM6IFtcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdC5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydHlOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXNcIixcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWRkaXRpb25hbFByb3BlcnR5OiAke3BhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBbXCJvYmplY3RcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICBhbGxvd1VuZGVmaW5lZDogdHJ1ZSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGVycnNDb3VudCwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghZXJyc0NvdW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB7IGFsbEVycm9ycywgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGl0LnByb3BzID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAhPT0gXCJhbGxcIiAmJiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcGF0UHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHBhcmVudFNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7XG4gICAgICAgIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKTtcbiAgICAgICAgY3h0Lm9rKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyc0NvdW50fSA9PT0gJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfWApO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BzLmxlbmd0aCAmJiAhcGF0UHJvcHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoaXNBZGRpdGlvbmFsKGtleSksICgpID0+IGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0FkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBsZXQgZGVmaW5lZFByb3A7XG4gICAgICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gOCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbWF5YmUgYW4gb3B0aW9uIGluc3RlYWQgb2YgaGFyZC1jb2RlZCA4P1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzU2NoZW1hID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzLCBcInByb3BlcnRpZXNcIik7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZV8xLmlzT3duUHJvcGVydHkpKGdlbiwgcHJvcHNTY2hlbWEsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl9ID09PSAke3B9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdFByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoZGVmaW5lZFByb3AsIC4uLnBhdFByb3BzLm1hcCgocCkgPT4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcCl9LnRlc3QoJHtrZXl9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm5vdCkoZGVmaW5lZFByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBkZWxldGUgJHtkYXRhfVske2tleX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgfHwgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCAmJiBzY2hlbWEgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBhZGRpdGlvbmFsUHJvcGVydHk6IGtleSB9KTtcbiAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJmYWlsaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5TdHIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN1YnNjaGVtYSwge1xuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYShzdWJzY2hlbWEsIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkaXRpb25hbFByb3BlcnRpZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsUHJvcGVydGllc1wiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiICYmIHBhcmVudFNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQuY29kZShuZXcgdmFsaWRhdGVfMS5LZXl3b3JkQ3h0KGl0LCBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsbFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgICAgICAgIGl0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBhbGxQcm9wcy5sZW5ndGggJiYgaXQucHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgKDAsIHV0aWxfMS50b0hhc2gpKGFsbFByb3BzKSwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhbGxQcm9wcy5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGhhc0RlZmF1bHQocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmVsc2UoKS52YXIodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3h0Lml0LmRlZmluZWRQcm9wZXJ0aWVzLmFkZChwcm9wKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzRGVmYXVsdChwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZSAmJiBzY2hlbWFbcHJvcF0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCkge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcHJvcCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogcHJvcCxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIGN4dC5mYWlsUmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgIH0sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IE5PVCBiZSB2YWxpZFwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFueU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGNvZGU6IGNvZGVfMS52YWxpZGF0ZVVuaW9uLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6IFwibXVzdCBtYXRjaCBhIHNjaGVtYSBpbiBhbnlPZlwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW55T2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXNzaW5nU2NoZW1hczogJHtwYXJhbXMucGFzc2luZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMuZGlzY3JpbWluYXRvciAmJiBwYXJlbnRTY2hlbWEuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoQXJyID0gc2NoZW1hO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBhc3NpbmcgPSBnZW4ubGV0KFwicGFzc2luZ1wiLCBudWxsKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IHBhc3NpbmcgfSk7XG4gICAgICAgIC8vIFRPRE8gcG9zc2libHkgZmFpbCBzdHJhaWdodCBhd2F5ICh3aXRoIHdhcm5pbmcgb3IgZXhjZXB0aW9uKSBpZiB0aGVyZSBhcmUgdHdvIGVtcHR5IGFsd2F5cyB2YWxpZCBzY2hlbWFzXG4gICAgICAgIGdlbi5ibG9jayh2YWxpZGF0ZU9uZU9mKTtcbiAgICAgICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlT25lT2YoKSB7XG4gICAgICAgICAgICBzY2hBcnIuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaEN4dDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLnZhcihzY2hWYWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwib25lT2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGAke3NjaFZhbGlkfSAmJiAke3ZhbGlkfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNzaWduKHZhbGlkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24ocGFzc2luZywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7cGFzc2luZ30sICR7aX1dYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbHNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihwYXNzaW5nLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaEN4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbmVPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFsbE9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBzY2hlbWEuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwiYWxsT2ZcIiwgc2NoZW1hUHJvcDogaSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsT2YuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBcIiR7cGFyYW1zLmlmQ2xhdXNlfVwiIHNjaGVtYWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2ZhaWxpbmdLZXl3b3JkOiAke3BhcmFtcy5pZkNsYXVzZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZlwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS50aGVuID09PSB1bmRlZmluZWQgJiYgcGFyZW50U2NoZW1hLmVsc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCAnXCJpZlwiIHdpdGhvdXQgXCJ0aGVuXCIgYW5kIFwiZWxzZVwiIGlzIGlnbm9yZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNUaGVuID0gaGFzU2NoZW1hKGl0LCBcInRoZW5cIik7XG4gICAgICAgIGNvbnN0IGhhc0Vsc2UgPSBoYXNTY2hlbWEoaXQsIFwiZWxzZVwiKTtcbiAgICAgICAgaWYgKCFoYXNUaGVuICYmICFoYXNFbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICAgICAgdmFsaWRhdGVJZigpO1xuICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgaWYgKGhhc1RoZW4gJiYgaGFzRWxzZSkge1xuICAgICAgICAgICAgY29uc3QgaWZDbGF1c2UgPSBnZW4ubGV0KFwiaWZDbGF1c2VcIik7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgaWZDbGF1c2UgfSk7XG4gICAgICAgICAgICBnZW4uaWYoc2NoVmFsaWQsIHZhbGlkYXRlQ2xhdXNlKFwidGhlblwiLCBpZkNsYXVzZSksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiLCBpZkNsYXVzZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1RoZW4pIHtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoc2NoVmFsaWQpLCB2YWxpZGF0ZUNsYXVzZShcImVsc2VcIikpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUlmKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJpZlwiLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVDbGF1c2Uoa2V5d29yZCwgaWZDbGF1c2UpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQgfSwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWZDbGF1c2UpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaWZDbGF1c2UsICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5d29yZH1gKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZToga2V5d29yZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmZ1bmN0aW9uIGhhc1NjaGVtYShpdCwga2V5d29yZCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICByZXR1cm4gc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBhZGRpdGlvbmFsSXRlbXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxJdGVtc1wiKTtcbmNvbnN0IHByZWZpeEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9wcmVmaXhJdGVtc1wiKTtcbmNvbnN0IGl0ZW1zXzEgPSByZXF1aXJlKFwiLi9pdGVtc1wiKTtcbmNvbnN0IGl0ZW1zMjAyMF8xID0gcmVxdWlyZShcIi4vaXRlbXMyMDIwXCIpO1xuY29uc3QgY29udGFpbnNfMSA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zXCIpO1xuY29uc3QgZGVwZW5kZW5jaWVzXzEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNcIik7XG5jb25zdCBwcm9wZXJ0eU5hbWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0eU5hbWVzXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgcHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vcHJvcGVydGllc1wiKTtcbmNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuUHJvcGVydGllc1wiKTtcbmNvbnN0IG5vdF8xID0gcmVxdWlyZShcIi4vbm90XCIpO1xuY29uc3QgYW55T2ZfMSA9IHJlcXVpcmUoXCIuL2FueU9mXCIpO1xuY29uc3Qgb25lT2ZfMSA9IHJlcXVpcmUoXCIuL29uZU9mXCIpO1xuY29uc3QgYWxsT2ZfMSA9IHJlcXVpcmUoXCIuL2FsbE9mXCIpO1xuY29uc3QgaWZfMSA9IHJlcXVpcmUoXCIuL2lmXCIpO1xuY29uc3QgdGhlbkVsc2VfMSA9IHJlcXVpcmUoXCIuL3RoZW5FbHNlXCIpO1xuZnVuY3Rpb24gZ2V0QXBwbGljYXRvcihkcmFmdDIwMjAgPSBmYWxzZSkge1xuICAgIGNvbnN0IGFwcGxpY2F0b3IgPSBbXG4gICAgICAgIC8vIGFueVxuICAgICAgICBub3RfMS5kZWZhdWx0LFxuICAgICAgICBhbnlPZl8xLmRlZmF1bHQsXG4gICAgICAgIG9uZU9mXzEuZGVmYXVsdCxcbiAgICAgICAgYWxsT2ZfMS5kZWZhdWx0LFxuICAgICAgICBpZl8xLmRlZmF1bHQsXG4gICAgICAgIHRoZW5FbHNlXzEuZGVmYXVsdCxcbiAgICAgICAgLy8gb2JqZWN0XG4gICAgICAgIHByb3BlcnR5TmFtZXNfMS5kZWZhdWx0LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIGRlcGVuZGVuY2llc18xLmRlZmF1bHQsXG4gICAgICAgIHByb3BlcnRpZXNfMS5kZWZhdWx0LFxuICAgICAgICBwYXR0ZXJuUHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgXTtcbiAgICAvLyBhcnJheVxuICAgIGlmIChkcmFmdDIwMjApXG4gICAgICAgIGFwcGxpY2F0b3IucHVzaChwcmVmaXhJdGVtc18xLmRlZmF1bHQsIGl0ZW1zMjAyMF8xLmRlZmF1bHQpO1xuICAgIGVsc2VcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKGFkZGl0aW9uYWxJdGVtc18xLmRlZmF1bHQsIGl0ZW1zXzEuZGVmYXVsdCk7XG4gICAgYXBwbGljYXRvci5wdXNoKGNvbnRhaW5zXzEuZGVmYXVsdCk7XG4gICAgcmV0dXJuIGFwcGxpY2F0b3I7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBnZXRBcHBsaWNhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBtYXRjaCBmb3JtYXQgXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7Zm9ybWF0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZm9ybWF0XCIsXG4gICAgdHlwZTogW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQsIHJ1bGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGgsIHNjaGVtYUVudiwgc2VsZiB9ID0gaXQ7XG4gICAgICAgIGlmICghb3B0cy52YWxpZGF0ZUZvcm1hdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICgkZGF0YSlcbiAgICAgICAgICAgIHZhbGlkYXRlJERhdGFGb3JtYXQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXQoKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGUkRGF0YUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZtdHMgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogc2VsZi5mb3JtYXRzLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmRGVmID0gZ2VuLmNvbnN0KFwiZkRlZlwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdHN9WyR7c2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjb25zdCBmVHlwZSA9IGdlbi5sZXQoXCJmVHlwZVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGdlbi5sZXQoXCJmb3JtYXRcIik7XG4gICAgICAgICAgICAvLyBUT0RPIHNpbXBsaWZ5XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZkRlZn0gPT0gXCJvYmplY3RcIiAmJiAhKCR7ZkRlZn0gaW5zdGFuY2VvZiBSZWdFeHApYCwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmRGVmfS50eXBlIHx8IFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnZhbGlkYXRlYCksICgpID0+IGdlbi5hc3NpZ24oZlR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYFwic3RyaW5nXCJgKS5hc3NpZ24oZm9ybWF0LCBmRGVmKSk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEub3IpKHVua25vd25GbXQoKSwgaW52YWxpZEZtdCgpKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm10KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9ICYmICEke2Zvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaW52YWxpZEZtdCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsRm9ybWF0ID0gc2NoZW1hRW52LiRhc3luY1xuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCgke2ZEZWZ9LmFzeW5jID8gYXdhaXQgJHtmb3JtYXR9KCR7ZGF0YX0pIDogJHtmb3JtYXR9KCR7ZGF0YX0pKWBcbiAgICAgICAgICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0oJHtkYXRhfSlgO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCh0eXBlb2YgJHtmb3JtYXR9ID09IFwiZnVuY3Rpb25cIiA/ICR7Y2FsbEZvcm1hdH0gOiAke2Zvcm1hdH0udGVzdCgke2RhdGF9KSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2Zvcm1hdH0gJiYgJHtmb3JtYXR9ICE9PSB0cnVlICYmICR7ZlR5cGV9ID09PSAke3J1bGVUeXBlfSAmJiAhJHt2YWxpZERhdGF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdERlZiA9IHNlbGYuZm9ybWF0c1tzY2hlbWFdO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXREZWYpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duRm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBbZm10VHlwZSwgZm9ybWF0LCBmbXRSZWZdID0gZ2V0Rm9ybWF0KGZvcm1hdERlZik7XG4gICAgICAgICAgICBpZiAoZm10VHlwZSA9PT0gcnVsZVR5cGUpXG4gICAgICAgICAgICAgICAgY3h0LnBhc3ModmFsaWRDb25kaXRpb24oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1bmtub3duRm9ybWF0KCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnN0cmljdFNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmtub3duTXNnKCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Nc2coKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgdW5rbm93biBmb3JtYXQgXCIke3NjaGVtYX1cIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRGb3JtYXQoZm10RGVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGZtdERlZiBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEucmVnZXhwQ29kZSkoZm10RGVmKVxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMuY29kZS5mb3JtYXRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWEpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7IGtleTogc2NoZW1hLCByZWY6IGZtdERlZiwgY29kZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2ZtdERlZi50eXBlIHx8IFwic3RyaW5nXCIsIGZtdERlZi52YWxpZGF0ZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXR9LnZhbGlkYXRlYF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJzdHJpbmdcIiwgZm10RGVmLCBmbXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRDb25kaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXREZWYgPT0gXCJvYmplY3RcIiAmJiAhKGZvcm1hdERlZiBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgZm9ybWF0RGVmLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7Zm10UmVmfSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZm9ybWF0ID09IFwiZnVuY3Rpb25cIiA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfSgke2RhdGF9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdFJlZn0udGVzdCgke2RhdGF9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IGV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gdm9pZCAwO1xuZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSBbXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcInJlYWRPbmx5XCIsXG4gICAgXCJ3cml0ZU9ubHlcIixcbiAgICBcImV4YW1wbGVzXCIsXG5dO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IFtcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFwcGxpY2F0b3JfMSA9IHJlcXVpcmUoXCIuL2FwcGxpY2F0b3JcIik7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGRyYWZ0N1ZvY2FidWxhcmllcyA9IFtcbiAgICBjb3JlXzEuZGVmYXVsdCxcbiAgICB2YWxpZGF0aW9uXzEuZGVmYXVsdCxcbiAgICAoMCwgYXBwbGljYXRvcl8xLmRlZmF1bHQpKCksXG4gICAgZm9ybWF0XzEuZGVmYXVsdCxcbiAgICBtZXRhZGF0YV8xLm1ldGFkYXRhVm9jYWJ1bGFyeSxcbiAgICBtZXRhZGF0YV8xLmNvbnRlbnRWb2NhYnVsYXJ5LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRyYWZ0N1ZvY2FidWxhcmllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRyYWZ0Ny5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaXNjckVycm9yID0gdm9pZCAwO1xudmFyIERpc2NyRXJyb3I7XG4oZnVuY3Rpb24gKERpc2NyRXJyb3IpIHtcbiAgICBEaXNjckVycm9yW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICBEaXNjckVycm9yW1wiTWFwcGluZ1wiXSA9IFwibWFwcGluZ1wiO1xufSkoRGlzY3JFcnJvciA9IGV4cG9ydHMuRGlzY3JFcnJvciB8fCAoZXhwb3J0cy5EaXNjckVycm9yID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi9kaXNjcmltaW5hdG9yL3R5cGVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZ05hbWUgfSB9KSA9PiBkaXNjckVycm9yID09PSB0eXBlc18xLkRpc2NyRXJyb3IuVGFnXG4gICAgICAgID8gYHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHN0cmluZ2BcbiAgICAgICAgOiBgdmFsdWUgb2YgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgaW4gb25lT2ZgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGRpc2NyRXJyb3IsIHRhZywgdGFnTmFtZSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtlcnJvcjogJHtkaXNjckVycm9yfSwgdGFnOiAke3RhZ05hbWV9LCB0YWdWYWx1ZTogJHt0YWd9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGlzY3JpbWluYXRvclwiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb25lT2YgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLmRpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIGRpc2NyaW1pbmF0b3Igb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBzY2hlbWEucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAodHlwZW9mIHRhZ05hbWUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIHByb3BlcnR5TmFtZVwiKTtcbiAgICAgICAgaWYgKHNjaGVtYS5tYXBwaW5nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogbWFwcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICBpZiAoIW9uZU9mKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgb25lT2Yga2V5d29yZFwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgICAgICBjb25zdCB0YWcgPSBnZW4uY29uc3QoXCJ0YWdcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkodGFnTmFtZSl9YCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHt0YWd9ID09IFwic3RyaW5nXCJgLCAoKSA9PiB2YWxpZGF0ZU1hcHBpbmcoKSwgKCkgPT4gY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5UYWcsIHRhZywgdGFnTmFtZSB9KSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlTWFwcGluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBnZXRNYXBwaW5nKCk7XG4gICAgICAgICAgICBnZW4uaWYoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBpbiBtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke3RhZ30gPT09ICR7dGFnVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgYXBwbHlUYWdTY2hlbWEobWFwcGluZ1t0YWdWYWx1ZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLk1hcHBpbmcsIHRhZywgdGFnTmFtZSB9KTtcbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5VGFnU2NoZW1hKHNjaGVtYVByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJvbmVPZlwiLCBzY2hlbWFQcm9wIH0sIF92YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0LCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gX3ZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE1hcHBpbmcoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvbmVPZk1hcHBpbmcgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFJlcXVpcmVkID0gaGFzUmVxdWlyZWQocGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIGxldCB0YWdSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZU9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaCA9IG9uZU9mW2ldO1xuICAgICAgICAgICAgICAgIGlmICgoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2gsIGl0LnNlbGYuUlVMRVMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoaXQuc2VsZiwgaXQuc2NoZW1hRW52LnJvb3QsIGl0LmJhc2VJZCwgc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLiRyZWYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoIGluc3RhbmNlb2YgY29tcGlsZV8xLlNjaGVtYUVudilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaCA9IHNjaC5zY2hlbWE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BTY2ggPSAoX2EgPSBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2gucHJvcGVydGllcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3RhZ05hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcFNjaCAhPSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogb25lT2Ygc3Vic2NoZW1hcyAob3IgcmVmZXJlbmNlZCBzY2hlbWFzKSBtdXN0IGhhdmUgXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWdSZXF1aXJlZCA9IHRhZ1JlcXVpcmVkICYmICh0b3BSZXF1aXJlZCB8fCBoYXNSZXF1aXJlZChzY2gpKTtcbiAgICAgICAgICAgICAgICBhZGRNYXBwaW5ncyhwcm9wU2NoLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFnUmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICByZXR1cm4gb25lT2ZNYXBwaW5nO1xuICAgICAgICAgICAgZnVuY3Rpb24gaGFzUmVxdWlyZWQoeyByZXF1aXJlZCB9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVxdWlyZWQpICYmIHJlcXVpcmVkLmluY2x1ZGVzKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZ3Moc2NoLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5jb25zdCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHNjaC5jb25zdCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgb2Ygc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCIgbXVzdCBoYXZlIFwiY29uc3RcIiBvciBcImVudW1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhZ1ZhbHVlICE9IFwic3RyaW5nXCIgfHwgdGFnVmFsdWUgaW4gb25lT2ZNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgdmFsdWVzIG11c3QgYmUgdW5pcXVlIHN0cmluZ3NgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25lT2ZNYXBwaW5nW3RhZ1ZhbHVlXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1pc3NpbmdSZWZFcnJvciA9IGV4cG9ydHMuVmFsaWRhdGlvbkVycm9yID0gZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IGRyYWZ0N18xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2RyYWZ0N1wiKTtcbmNvbnN0IGRpc2NyaW1pbmF0b3JfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yXCIpO1xuY29uc3QgZHJhZnQ3TWV0YVNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvblwiKTtcbmNvbnN0IE1FVEFfU1VQUE9SVF9EQVRBID0gW1wiL3Byb3BlcnRpZXNcIl07XG5jb25zdCBNRVRBX1NDSEVNQV9JRCA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWFcIjtcbmNsYXNzIEFqdiBleHRlbmRzIGNvcmVfMS5kZWZhdWx0IHtcbiAgICBfYWRkVm9jYWJ1bGFyaWVzKCkge1xuICAgICAgICBzdXBlci5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIGRyYWZ0N18xLmRlZmF1bHQuZm9yRWFjaCgodikgPT4gdGhpcy5hZGRWb2NhYnVsYXJ5KHYpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRpc2NyaW1pbmF0b3JfMS5kZWZhdWx0KTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBzdXBlci5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubWV0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWV0YVNjaGVtYSA9IHRoaXMub3B0cy4kZGF0YVxuICAgICAgICAgICAgPyB0aGlzLiRkYXRhTWV0YVNjaGVtYShkcmFmdDdNZXRhU2NoZW1hLCBNRVRBX1NVUFBPUlRfREFUQSlcbiAgICAgICAgICAgIDogZHJhZnQ3TWV0YVNjaGVtYTtcbiAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCBmYWxzZSk7XG4gICAgICAgIHRoaXMucmVmc1tcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hXCJdID0gTUVUQV9TQ0hFTUFfSUQ7XG4gICAgfVxuICAgIGRlZmF1bHRNZXRhKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9XG4gICAgICAgICAgICBzdXBlci5kZWZhdWx0TWV0YSgpIHx8ICh0aGlzLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRCkgPyBNRVRBX1NDSEVNQV9JRCA6IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IEFqdjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG52YXIgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbnZhciByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWlzc2luZ1JlZkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZfZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWp2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFqdl8xID0gcmVxdWlyZShcImFqdlwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCJhanYvZGlzdC9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBmb3JtYXRNYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBmb3JtYXRNaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBmb3JtYXRFeGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGZvcm1hdEV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiBjb2RlZ2VuXzEuc3RyIGBzaG91bGQgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gY29kZWdlbl8xLl8gYHtjb21wYXJpc29uOiAke0tXRHNba2V5d29yZF0ub2tTdHJ9LCBsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmV4cG9ydHMuZm9ybWF0TGltaXREZWZpbml0aW9uID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hQ29kZSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlRm9ybWF0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZkN4dCA9IG5ldyBhanZfMS5LZXl3b3JkQ3h0KGl0LCBzZWxmLlJVTEVTLmFsbC5mb3JtYXQuZGVmaW5pdGlvbiwgXCJmb3JtYXRcIik7XG4gICAgICAgIGlmIChmQ3h0LiRkYXRhKVxuICAgICAgICAgICAgdmFsaWRhdGUkRGF0YUZvcm1hdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1hdCgpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSREYXRhRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm10cyA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBzZWxmLmZvcm1hdHMsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZtdCA9IGdlbi5jb25zdChcImZtdFwiLCBjb2RlZ2VuXzEuXyBgJHtmbXRzfVske2ZDeHQuc2NoZW1hQ29kZX1dYCk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKGNvZGVnZW5fMS5vcihjb2RlZ2VuXzEuXyBgdHlwZW9mICR7Zm10fSAhPSBcIm9iamVjdFwiYCwgY29kZWdlbl8xLl8gYCR7Zm10fSBpbnN0YW5jZW9mIFJlZ0V4cGAsIGNvZGVnZW5fMS5fIGB0eXBlb2YgJHtmbXR9LmNvbXBhcmUgIT0gXCJmdW5jdGlvblwiYCwgY29tcGFyZUNvZGUoZm10KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZkN4dC5zY2hlbWE7XG4gICAgICAgICAgICBjb25zdCBmbXREZWYgPSBzZWxmLmZvcm1hdHNbZm9ybWF0XTtcbiAgICAgICAgICAgIGlmICghZm10RGVmIHx8IGZtdERlZiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZtdERlZiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAgICAgICAgICAgZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGZtdERlZi5jb21wYXJlICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke2tleXdvcmR9XCI6IGZvcm1hdCBcIiR7Zm9ybWF0fVwiIGRvZXMgbm90IGRlZmluZSBcImNvbXBhcmVcIiBmdW5jdGlvbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGZvcm1hdCxcbiAgICAgICAgICAgICAgICByZWY6IGZtdERlZixcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyA/IGNvZGVnZW5fMS5fIGAke29wdHMuY29kZS5mb3JtYXRzfSR7Y29kZWdlbl8xLmdldFByb3BlcnR5KGZvcm1hdCl9YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YShjb21wYXJlQ29kZShmbXQpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjb21wYXJlQ29kZShmbXQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEuXyBgJHtmbXR9LmNvbXBhcmUoJHtkYXRhfSwgJHtzY2hlbWFDb2RlfSkgJHtLV0RzW2tleXdvcmRdLmZhaWx9IDBgO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcImZvcm1hdFwiXSxcbn07XG5jb25zdCBmb3JtYXRMaW1pdFBsdWdpbiA9IChhanYpID0+IHtcbiAgICBhanYuYWRkS2V5d29yZChleHBvcnRzLmZvcm1hdExpbWl0RGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGFqdjtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRMaW1pdFBsdWdpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmb3JtYXRzXzEgPSByZXF1aXJlKFwiLi9mb3JtYXRzXCIpO1xuY29uc3QgbGltaXRfMSA9IHJlcXVpcmUoXCIuL2xpbWl0XCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcImFqdi9kaXN0L2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGZ1bGxOYW1lID0gbmV3IGNvZGVnZW5fMS5OYW1lKFwiZnVsbEZvcm1hdHNcIik7XG5jb25zdCBmYXN0TmFtZSA9IG5ldyBjb2RlZ2VuXzEuTmFtZShcImZhc3RGb3JtYXRzXCIpO1xuY29uc3QgZm9ybWF0c1BsdWdpbiA9IChhanYsIG9wdHMgPSB7IGtleXdvcmRzOiB0cnVlIH0pID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgICBhZGRGb3JtYXRzKGFqdiwgb3B0cywgZm9ybWF0c18xLmZ1bGxGb3JtYXRzLCBmdWxsTmFtZSk7XG4gICAgICAgIHJldHVybiBhanY7XG4gICAgfVxuICAgIGNvbnN0IFtmb3JtYXRzLCBleHBvcnROYW1lXSA9IG9wdHMubW9kZSA9PT0gXCJmYXN0XCIgPyBbZm9ybWF0c18xLmZhc3RGb3JtYXRzLCBmYXN0TmFtZV0gOiBbZm9ybWF0c18xLmZ1bGxGb3JtYXRzLCBmdWxsTmFtZV07XG4gICAgY29uc3QgbGlzdCA9IG9wdHMuZm9ybWF0cyB8fCBmb3JtYXRzXzEuZm9ybWF0TmFtZXM7XG4gICAgYWRkRm9ybWF0cyhhanYsIGxpc3QsIGZvcm1hdHMsIGV4cG9ydE5hbWUpO1xuICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICBsaW1pdF8xLmRlZmF1bHQoYWp2KTtcbiAgICByZXR1cm4gYWp2O1xufTtcbmZvcm1hdHNQbHVnaW4uZ2V0ID0gKG5hbWUsIG1vZGUgPSBcImZ1bGxcIikgPT4ge1xuICAgIGNvbnN0IGZvcm1hdHMgPSBtb2RlID09PSBcImZhc3RcIiA/IGZvcm1hdHNfMS5mYXN0Rm9ybWF0cyA6IGZvcm1hdHNfMS5mdWxsRm9ybWF0cztcbiAgICBjb25zdCBmID0gZm9ybWF0c1tuYW1lXTtcbiAgICBpZiAoIWYpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmb3JtYXQgXCIke25hbWV9XCJgKTtcbiAgICByZXR1cm4gZjtcbn07XG5mdW5jdGlvbiBhZGRGb3JtYXRzKGFqdiwgbGlzdCwgZnMsIGV4cG9ydE5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIF9iO1xuICAgIChfYSA9IChfYiA9IGFqdi5vcHRzLmNvZGUpLmZvcm1hdHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYi5mb3JtYXRzID0gY29kZWdlbl8xLl8gYHJlcXVpcmUoXCJhanYtZm9ybWF0cy9kaXN0L2Zvcm1hdHNcIikuJHtleHBvcnROYW1lfWApO1xuICAgIGZvciAoY29uc3QgZiBvZiBsaXN0KVxuICAgICAgICBhanYuYWRkRm9ybWF0KGYsIGZzW2ZdKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZvcm1hdHNQbHVnaW47XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRzUGx1Z2luO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290Lm5lYXJsZXkgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcblxuICAgIGZ1bmN0aW9uIFJ1bGUobmFtZSwgc3ltYm9scywgcG9zdHByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5pZCA9ICsrUnVsZS5oaWdoZXN0SWQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHN5bWJvbHM7ICAgICAgICAvLyBhIGxpc3Qgb2YgbGl0ZXJhbCB8IHJlZ2V4IGNsYXNzIHwgbm9udGVybWluYWxcbiAgICAgICAgdGhpcy5wb3N0cHJvY2VzcyA9IHBvc3Rwcm9jZXNzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgUnVsZS5oaWdoZXN0SWQgPSAwO1xuXG4gICAgUnVsZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbih3aXRoQ3Vyc29yQXQpIHtcbiAgICAgICAgdmFyIHN5bWJvbFNlcXVlbmNlID0gKHR5cGVvZiB3aXRoQ3Vyc29yQXQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zeW1ib2xzLm1hcChnZXRTeW1ib2xTaG9ydERpc3BsYXkpLmpvaW4oJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggICB0aGlzLnN5bWJvbHMuc2xpY2UoMCwgd2l0aEN1cnNvckF0KS5tYXAoZ2V0U3ltYm9sU2hvcnREaXNwbGF5KS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgXCIg4pePIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuc3ltYm9scy5zbGljZSh3aXRoQ3Vyc29yQXQpLm1hcChnZXRTeW1ib2xTaG9ydERpc3BsYXkpLmpvaW4oJyAnKSAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArIFwiIOKGkiBcIiArIHN5bWJvbFNlcXVlbmNlO1xuICAgIH1cblxuXG4gICAgLy8gYSBTdGF0ZSBpcyBhIHJ1bGUgYXQgYSBwb3NpdGlvbiBmcm9tIGEgZ2l2ZW4gc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGlucHV0IHN0cmVhbSAocmVmZXJlbmNlKVxuICAgIGZ1bmN0aW9uIFN0YXRlKHJ1bGUsIGRvdCwgcmVmZXJlbmNlLCB3YW50ZWRCeSkge1xuICAgICAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICAgICAgICB0aGlzLmRvdCA9IGRvdDtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLndhbnRlZEJ5ID0gd2FudGVkQnk7XG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZSA9IHRoaXMuZG90ID09PSBydWxlLnN5bWJvbHMubGVuZ3RoO1xuICAgIH1cblxuICAgIFN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGUudG9TdHJpbmcodGhpcy5kb3QpICsgXCJ9LCBmcm9tOiBcIiArICh0aGlzLnJlZmVyZW5jZSB8fCAwKTtcbiAgICB9O1xuXG4gICAgU3RhdGUucHJvdG90eXBlLm5leHRTdGF0ZSA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZSh0aGlzLnJ1bGUsIHRoaXMuZG90ICsgMSwgdGhpcy5yZWZlcmVuY2UsIHRoaXMud2FudGVkQnkpO1xuICAgICAgICBzdGF0ZS5sZWZ0ID0gdGhpcztcbiAgICAgICAgc3RhdGUucmlnaHQgPSBjaGlsZDtcbiAgICAgICAgaWYgKHN0YXRlLmlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgIHN0YXRlLmRhdGEgPSBzdGF0ZS5idWlsZCgpO1xuICAgICAgICAgICAgLy8gSGF2aW5nIHJpZ2h0IHNldCBoZXJlIHdpbGwgcHJldmVudCB0aGUgcmlnaHQgc3RhdGUgYW5kIGl0cyBjaGlsZHJlblxuICAgICAgICAgICAgLy8gZm9ybSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuICAgICAgICAgICAgc3RhdGUucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH07XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAgIHZhciBub2RlID0gdGhpcztcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChub2RlLnJpZ2h0LmRhdGEpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgfSB3aGlsZSAobm9kZS5sZWZ0KTtcbiAgICAgICAgY2hpbGRyZW4ucmV2ZXJzZSgpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfTtcblxuICAgIFN0YXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucnVsZS5wb3N0cHJvY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5ydWxlLnBvc3Rwcm9jZXNzKHRoaXMuZGF0YSwgdGhpcy5yZWZlcmVuY2UsIFBhcnNlci5mYWlsKTtcbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIENvbHVtbihncmFtbWFyLCBpbmRleCkge1xuICAgICAgICB0aGlzLmdyYW1tYXIgPSBncmFtbWFyO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgICAgIHRoaXMud2FudHMgPSB7fTsgLy8gc3RhdGVzIGluZGV4ZWQgYnkgdGhlIG5vbi10ZXJtaW5hbCB0aGV5IGV4cGVjdFxuICAgICAgICB0aGlzLnNjYW5uYWJsZSA9IFtdOyAvLyBsaXN0IG9mIHN0YXRlcyB0aGF0IGV4cGVjdCBhIHRva2VuXG4gICAgICAgIHRoaXMuY29tcGxldGVkID0ge307IC8vIHN0YXRlcyB0aGF0IGFyZSBudWxsYWJsZVxuICAgIH1cblxuXG4gICAgQ29sdW1uLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24obmV4dENvbHVtbikge1xuICAgICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICAgIHZhciB3YW50cyA9IHRoaXMud2FudHM7XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSB0aGlzLmNvbXBsZXRlZDtcblxuICAgICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IHN0YXRlcy5sZW5ndGg7IHcrKykgeyAvLyBuYi4gd2UgcHVzaCgpIGR1cmluZyBpdGVyYXRpb25cbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1t3XTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlLmlzQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5maW5pc2goKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGF0YSAhPT0gUGFyc2VyLmZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdhbnRlZEJ5ID0gc3RhdGUud2FudGVkQnk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB3YW50ZWRCeS5sZW5ndGg7IGktLTsgKSB7IC8vIHRoaXMgbGluZSBpcyBob3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gd2FudGVkQnlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGxlZnQsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwtY2FzZSBudWxsYWJsZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlZmVyZW5jZSA9PT0gdGhpcy5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGZ1dHVyZSBwcmVkaWN0b3JzIG9mIHRoaXMgcnVsZSBnZXQgY29tcGxldGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cCA9IHN0YXRlLnJ1bGUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbXBsZXRlZFtleHBdID0gdGhpcy5jb21wbGV0ZWRbZXhwXSB8fCBbXSkucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcXVldWUgc2Nhbm5hYmxlIHN0YXRlc1xuICAgICAgICAgICAgICAgIHZhciBleHAgPSBzdGF0ZS5ydWxlLnN5bWJvbHNbc3RhdGUuZG90XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV4cCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FubmFibGUucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHByZWRpY3RcbiAgICAgICAgICAgICAgICBpZiAod2FudHNbZXhwXSkge1xuICAgICAgICAgICAgICAgICAgICB3YW50c1tleHBdLnB1c2goc3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQuaGFzT3duUHJvcGVydHkoZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bGxzID0gY29tcGxldGVkW2V4cF07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gbnVsbHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZShzdGF0ZSwgcmlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd2FudHNbZXhwXSA9IFtzdGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZGljdChleHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIENvbHVtbi5wcm90b3R5cGUucHJlZGljdCA9IGZ1bmN0aW9uKGV4cCkge1xuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLmdyYW1tYXIuYnlOYW1lW2V4cF0gfHwgW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHIgPSBydWxlc1tpXTtcbiAgICAgICAgICAgIHZhciB3YW50ZWRCeSA9IHRoaXMud2FudHNbZXhwXTtcbiAgICAgICAgICAgIHZhciBzID0gbmV3IFN0YXRlKHIsIDAsIHRoaXMuaW5kZXgsIHdhbnRlZEJ5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnB1c2gocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBDb2x1bW4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgICAgdmFyIGNvcHkgPSBsZWZ0Lm5leHRTdGF0ZShyaWdodCk7XG4gICAgICAgIHRoaXMuc3RhdGVzLnB1c2goY29weSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBHcmFtbWFyKHJ1bGVzLCBzdGFydCkge1xuICAgICAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCB0aGlzLnJ1bGVzWzBdLm5hbWU7XG4gICAgICAgIHZhciBieU5hbWUgPSB0aGlzLmJ5TmFtZSA9IHt9O1xuICAgICAgICB0aGlzLnJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVsZSkge1xuICAgICAgICAgICAgaWYgKCFieU5hbWUuaGFzT3duUHJvcGVydHkocnVsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgIGJ5TmFtZVtydWxlLm5hbWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBieU5hbWVbcnVsZS5uYW1lXS5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTbyB3ZSBjYW4gYWxsb3cgcGFzc2luZyAocnVsZXMsIHN0YXJ0KSBkaXJlY3RseSB0byBQYXJzZXIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgR3JhbW1hci5mcm9tQ29tcGlsZWQgPSBmdW5jdGlvbihydWxlcywgc3RhcnQpIHtcbiAgICAgICAgdmFyIGxleGVyID0gcnVsZXMuTGV4ZXI7XG4gICAgICAgIGlmIChydWxlcy5QYXJzZXJTdGFydCkge1xuICAgICAgICAgIHN0YXJ0ID0gcnVsZXMuUGFyc2VyU3RhcnQ7XG4gICAgICAgICAgcnVsZXMgPSBydWxlcy5QYXJzZXJSdWxlcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSBydWxlcy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIChuZXcgUnVsZShyLm5hbWUsIHIuc3ltYm9scywgci5wb3N0cHJvY2VzcykpOyB9KTtcbiAgICAgICAgdmFyIGcgPSBuZXcgR3JhbW1hcihydWxlcywgc3RhcnQpO1xuICAgICAgICBnLmxleGVyID0gbGV4ZXI7IC8vIG5iLiBzdG9yaW5nIGxleGVyIG9uIEdyYW1tYXIgaXMgaWZmeSwgYnV0IHVuYXZvaWRhYmxlXG4gICAgICAgIHJldHVybiBnO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gU3RyZWFtTGV4ZXIoKSB7XG4gICAgICB0aGlzLnJlc2V0KFwiXCIpO1xuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEsIHN0YXRlKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMubGluZSA9IHN0YXRlID8gc3RhdGUubGluZSA6IDE7XG4gICAgICAgIHRoaXMubGFzdExpbmVCcmVhayA9IHN0YXRlID8gLXN0YXRlLmNvbCA6IDA7XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPCB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgrK107XG4gICAgICAgICAgICBpZiAoY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZSArPSAxO1xuICAgICAgICAgICAgICB0aGlzLmxhc3RMaW5lQnJlYWsgPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogY2h9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IHRoaXMubGluZSxcbiAgICAgICAgY29sOiB0aGlzLmluZGV4IC0gdGhpcy5sYXN0TGluZUJyZWFrLFxuICAgICAgfVxuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5mb3JtYXRFcnJvciA9IGZ1bmN0aW9uKHRva2VuLCBtZXNzYWdlKSB7XG4gICAgICAgIC8vIG5iLiB0aGlzIGdldHMgY2FsbGVkIGFmdGVyIGNvbnN1bWluZyB0aGUgb2ZmZW5kaW5nIHRva2VuLFxuICAgICAgICAvLyBzbyB0aGUgY3VscHJpdCBpcyBpbmRleC0xXG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBidWZmZXJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgICAgICAuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDAsIHRoaXMubGluZSAtIDUpLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdmFyIG5leHRMaW5lQnJlYWsgPSBidWZmZXIuaW5kZXhPZignXFxuJywgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICBpZiAobmV4dExpbmVCcmVhayA9PT0gLTEpIG5leHRMaW5lQnJlYWsgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGNvbCA9IHRoaXMuaW5kZXggLSB0aGlzLmxhc3RMaW5lQnJlYWs7XG4gICAgICAgICAgICB2YXIgbGFzdExpbmVEaWdpdHMgPSBTdHJpbmcodGhpcy5saW5lKS5sZW5ndGg7XG4gICAgICAgICAgICBtZXNzYWdlICs9IFwiIGF0IGxpbmUgXCIgKyB0aGlzLmxpbmUgKyBcIiBjb2wgXCIgKyBjb2wgKyBcIjpcXG5cXG5cIjtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gbGluZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKGxpbmUsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZCh0aGlzLmxpbmUgLSBsaW5lcy5sZW5ndGggKyBpICsgMSwgbGFzdExpbmVEaWdpdHMpICsgXCIgXCIgKyBsaW5lO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBtZXNzYWdlICs9IFwiXFxuXCIgKyBwYWQoXCJcIiwgbGFzdExpbmVEaWdpdHMgKyBjb2wpICsgXCJeXFxuXCI7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlICsgXCIgYXQgaW5kZXggXCIgKyAodGhpcy5pbmRleCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFkKG4sIGxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIHMgPSBTdHJpbmcobik7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkobGVuZ3RoIC0gcy5sZW5ndGggKyAxKS5qb2luKFwiIFwiKSArIHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBQYXJzZXIocnVsZXMsIHN0YXJ0LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChydWxlcyBpbnN0YW5jZW9mIEdyYW1tYXIpIHtcbiAgICAgICAgICAgIHZhciBncmFtbWFyID0gcnVsZXM7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHN0YXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGdyYW1tYXIgPSBHcmFtbWFyLmZyb21Db21waWxlZChydWxlcywgc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhbW1hciA9IGdyYW1tYXI7XG5cbiAgICAgICAgLy8gUmVhZCBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtlZXBIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgIGxleGVyOiBncmFtbWFyLmxleGVyIHx8IG5ldyBTdHJlYW1MZXhlcixcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIChvcHRpb25zIHx8IHt9KSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXR1cCBsZXhlclxuICAgICAgICB0aGlzLmxleGVyID0gdGhpcy5vcHRpb25zLmxleGVyO1xuICAgICAgICB0aGlzLmxleGVyU3RhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gU2V0dXAgYSB0YWJsZVxuICAgICAgICB2YXIgY29sdW1uID0gbmV3IENvbHVtbihncmFtbWFyLCAwKTtcbiAgICAgICAgdmFyIHRhYmxlID0gdGhpcy50YWJsZSA9IFtjb2x1bW5dO1xuXG4gICAgICAgIC8vIEkgY291bGQgYmUgZXhwZWN0aW5nIGFueXRoaW5nLlxuICAgICAgICBjb2x1bW4ud2FudHNbZ3JhbW1hci5zdGFydF0gPSBbXTtcbiAgICAgICAgY29sdW1uLnByZWRpY3QoZ3JhbW1hci5zdGFydCk7XG4gICAgICAgIC8vIFRPRE8gd2hhdCBpZiBzdGFydCBydWxlIGlzIG51bGxhYmxlP1xuICAgICAgICBjb2x1bW4ucHJvY2VzcygpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSAwOyAvLyB0b2tlbiBpbmRleFxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhIHJlc2VydmVkIHRva2VuIGZvciBpbmRpY2F0aW5nIGEgcGFyc2UgZmFpbFxuICAgIFBhcnNlci5mYWlsID0ge307XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmZlZWQgPSBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICB2YXIgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgICAgICBsZXhlci5yZXNldChjaHVuaywgdGhpcy5sZXhlclN0YXRlKTtcblxuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRva2VuID0gbGV4ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgbmV4dCBjb2x1bW4gc28gdGhhdCB0aGUgZXJyb3IgcmVwb3J0ZXJcbiAgICAgICAgICAgICAgICAvLyBjYW4gZGlzcGxheSB0aGUgY29ycmVjdGx5IHByZWRpY3RlZCBzdGF0ZXMuXG4gICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSBuZXcgQ29sdW1uKHRoaXMuZ3JhbW1hciwgdGhpcy5jdXJyZW50ICsgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5wdXNoKG5leHRDb2x1bW4pO1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IodGhpcy5yZXBvcnRMZXhlckVycm9yKGUpKTtcbiAgICAgICAgICAgICAgICBlcnIub2Zmc2V0ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgIGVyci50b2tlbiA9IGUudG9rZW47XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgYWRkIG5ldyBzdGF0ZXMgdG8gdGFibGVbY3VycmVudCsxXVxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMudGFibGVbdGhpcy5jdXJyZW50XTtcblxuICAgICAgICAgICAgLy8gR0MgdW51c2VkIHN0YXRlc1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50YWJsZVt0aGlzLmN1cnJlbnQgLSAxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG4gPSB0aGlzLmN1cnJlbnQgKyAxO1xuICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSBuZXcgQ29sdW1uKHRoaXMuZ3JhbW1hciwgbik7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnB1c2gobmV4dENvbHVtbik7XG5cbiAgICAgICAgICAgIC8vIEFkdmFuY2UgYWxsIHRva2VucyB0aGF0IGV4cGVjdCB0aGUgc3ltYm9sXG4gICAgICAgICAgICB2YXIgbGl0ZXJhbCA9IHRva2VuLnRleHQgIT09IHVuZGVmaW5lZCA/IHRva2VuLnRleHQgOiB0b2tlbi52YWx1ZTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxleGVyLmNvbnN0cnVjdG9yID09PSBTdHJlYW1MZXhlciA/IHRva2VuLnZhbHVlIDogdG9rZW47XG4gICAgICAgICAgICB2YXIgc2Nhbm5hYmxlID0gY29sdW1uLnNjYW5uYWJsZTtcbiAgICAgICAgICAgIGZvciAodmFyIHcgPSBzY2FubmFibGUubGVuZ3RoOyB3LS07ICkge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHNjYW5uYWJsZVt3XTtcbiAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGNvbnN1bWUgdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgLy8gZWl0aGVyIHJlZ2V4IG9yIGxpdGVyYWxcbiAgICAgICAgICAgICAgICBpZiAoZXhwZWN0LnRlc3QgPyBleHBlY3QudGVzdCh2YWx1ZSkgOlxuICAgICAgICAgICAgICAgICAgICBleHBlY3QudHlwZSA/IGV4cGVjdC50eXBlID09PSB0b2tlbi50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZXhwZWN0LmxpdGVyYWwgPT09IGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGl0XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gc3RhdGUubmV4dFN0YXRlKHtkYXRhOiB2YWx1ZSwgdG9rZW46IHRva2VuLCBpc1Rva2VuOiB0cnVlLCByZWZlcmVuY2U6IG4gLSAxfSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4uc3RhdGVzLnB1c2gobmV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOZXh0LCBmb3IgZWFjaCBvZiB0aGUgcnVsZXMsIHdlIGVpdGhlclxuICAgICAgICAgICAgLy8gKGEpIGNvbXBsZXRlIGl0LCBhbmQgdHJ5IHRvIHNlZSBpZiB0aGUgcmVmZXJlbmNlIHJvdyBleHBlY3RlZCB0aGF0XG4gICAgICAgICAgICAvLyAgICAgcnVsZVxuICAgICAgICAgICAgLy8gKGIpIHByZWRpY3QgdGhlIG5leHQgbm9udGVybWluYWwgaXQgZXhwZWN0cyBieSBhZGRpbmcgdGhhdFxuICAgICAgICAgICAgLy8gICAgIG5vbnRlcm1pbmFsJ3Mgc3RhcnQgc3RhdGVcbiAgICAgICAgICAgIC8vIFRvIHByZXZlbnQgZHVwbGljYXRpb24sIHdlIGFsc28ga2VlcCB0cmFjayBvZiBydWxlcyB3ZSBoYXZlIGFscmVhZHlcbiAgICAgICAgICAgIC8vIGFkZGVkXG5cbiAgICAgICAgICAgIG5leHRDb2x1bW4ucHJvY2VzcygpO1xuXG4gICAgICAgICAgICAvLyBJZiBuZWVkZWQsIHRocm93IGFuIGVycm9yOlxuICAgICAgICAgICAgaWYgKG5leHRDb2x1bW4uc3RhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIE5vIHN0YXRlcyBhdCBhbGwhIFRoaXMgaXMgbm90IGdvb2QuXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcih0aGlzLnJlcG9ydEVycm9yKHRva2VuKSk7XG4gICAgICAgICAgICAgICAgZXJyLm9mZnNldCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICBlcnIudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1heWJlIHNhdmUgbGV4ZXIgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgICAgY29sdW1uLmxleGVyU3RhdGUgPSBsZXhlci5zYXZlKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIHRoaXMubGV4ZXJTdGF0ZSA9IGxleGVyLnNhdmUoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jcmVtZW50YWxseSBrZWVwIHRyYWNrIG9mIHJlc3VsdHNcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5maW5pc2goKTtcblxuICAgICAgICAvLyBBbGxvdyBjaGFpbmluZywgZm9yIHdoYXRldmVyIGl0J3Mgd29ydGhcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVwb3J0TGV4ZXJFcnJvciA9IGZ1bmN0aW9uKGxleGVyRXJyb3IpIHtcbiAgICAgICAgdmFyIHRva2VuRGlzcGxheSwgbGV4ZXJNZXNzYWdlO1xuICAgICAgICAvLyBQbGFubmluZyB0byBhZGQgYSB0b2tlbiBwcm9wZXJ0eSB0byBtb28ncyB0aHJvd24gZXJyb3JcbiAgICAgICAgLy8gZXZlbiBvbiBlcnJvcmluZyB0b2tlbnMgdG8gYmUgdXNlZCBpbiBlcnJvciBkaXNwbGF5IGJlbG93XG4gICAgICAgIHZhciB0b2tlbiA9IGxleGVyRXJyb3IudG9rZW47XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgdG9rZW5EaXNwbGF5ID0gXCJpbnB1dCBcIiArIEpTT04uc3RyaW5naWZ5KHRva2VuLnRleHRbMF0pICsgXCIgKGxleGVyIGVycm9yKVwiO1xuICAgICAgICAgICAgbGV4ZXJNZXNzYWdlID0gdGhpcy5sZXhlci5mb3JtYXRFcnJvcih0b2tlbiwgXCJTeW50YXggZXJyb3JcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbkRpc3BsYXkgPSBcImlucHV0IChsZXhlciBlcnJvcilcIjtcbiAgICAgICAgICAgIGxleGVyTWVzc2FnZSA9IGxleGVyRXJyb3IubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvcnRFcnJvckNvbW1vbihsZXhlck1lc3NhZ2UsIHRva2VuRGlzcGxheSk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICB2YXIgdG9rZW5EaXNwbGF5ID0gKHRva2VuLnR5cGUgPyB0b2tlbi50eXBlICsgXCIgdG9rZW46IFwiIDogXCJcIikgKyBKU09OLnN0cmluZ2lmeSh0b2tlbi52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdG9rZW4udmFsdWUgOiB0b2tlbik7XG4gICAgICAgIHZhciBsZXhlck1lc3NhZ2UgPSB0aGlzLmxleGVyLmZvcm1hdEVycm9yKHRva2VuLCBcIlN5bnRheCBlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0RXJyb3JDb21tb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlcG9ydEVycm9yQ29tbW9uID0gZnVuY3Rpb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpIHtcbiAgICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICAgIGxpbmVzLnB1c2gobGV4ZXJNZXNzYWdlKTtcbiAgICAgICAgdmFyIGxhc3RDb2x1bW5JbmRleCA9IHRoaXMudGFibGUubGVuZ3RoIC0gMjtcbiAgICAgICAgdmFyIGxhc3RDb2x1bW4gPSB0aGlzLnRhYmxlW2xhc3RDb2x1bW5JbmRleF07XG4gICAgICAgIHZhciBleHBlY3RhbnRTdGF0ZXMgPSBsYXN0Q29sdW1uLnN0YXRlc1xuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U3ltYm9sID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRTeW1ib2wgJiYgdHlwZW9mIG5leHRTeW1ib2wgIT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXhwZWN0YW50U3RhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnVW5leHBlY3RlZCAnICsgdG9rZW5EaXNwbGF5ICsgJy4gSSBkaWQgbm90IGV4cGVjdCBhbnkgbW9yZSBpbnB1dC4gSGVyZSBpcyB0aGUgc3RhdGUgb2YgbXkgcGFyc2UgdGFibGU6XFxuJyk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlTdGF0ZVN0YWNrKGxhc3RDb2x1bW4uc3RhdGVzLCBsaW5lcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKCdVbmV4cGVjdGVkICcgKyB0b2tlbkRpc3BsYXkgKyAnLiBJbnN0ZWFkLCBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxcbicpO1xuICAgICAgICAgICAgLy8gRGlzcGxheSBhIFwic3RhdGUgc3RhY2tcIiBmb3IgZWFjaCBleHBlY3RhbnQgc3RhdGVcbiAgICAgICAgICAgIC8vIC0gd2hpY2ggc2hvd3MgeW91IGhvdyB0aGlzIHN0YXRlIGNhbWUgdG8gYmUsIHN0ZXAgYnkgc3RlcC5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZGVyaXZhdGlvbiwgd2Ugb25seSBkaXNwbGF5IHRoZSBmaXJzdCBvbmUuXG4gICAgICAgICAgICB2YXIgc3RhdGVTdGFja3MgPSBleHBlY3RhbnRTdGF0ZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkRmlyc3RTdGF0ZVN0YWNrKHN0YXRlLCBbXSkgfHwgW3N0YXRlXTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIC8vIERpc3BsYXkgZWFjaCBzdGF0ZSB0aGF0IGlzIGV4cGVjdGluZyBhIHRlcm1pbmFsIHN5bWJvbCBuZXh0LlxuICAgICAgICAgICAgc3RhdGVTdGFja3MuZm9yRWFjaChmdW5jdGlvbihzdGF0ZVN0YWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVTdGFja1swXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFN5bWJvbCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIHZhciBzeW1ib2xEaXNwbGF5ID0gdGhpcy5nZXRTeW1ib2xEaXNwbGF5KG5leHRTeW1ib2wpO1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJ0EgJyArIHN5bWJvbERpc3BsYXkgKyAnIGJhc2VkIG9uOicpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVN0YXRlU3RhY2soc3RhdGVTdGFjaywgbGluZXMpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMucHVzaChcIlwiKTtcbiAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIFxuICAgIFBhcnNlci5wcm90b3R5cGUuZGlzcGxheVN0YXRlU3RhY2sgPSBmdW5jdGlvbihzdGF0ZVN0YWNrLCBsaW5lcykge1xuICAgICAgICB2YXIgbGFzdERpc3BsYXk7XG4gICAgICAgIHZhciBzYW1lRGlzcGxheUNvdW50ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdGF0ZVN0YWNrLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZVN0YWNrW2pdO1xuICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBzdGF0ZS5ydWxlLnRvU3RyaW5nKHN0YXRlLmRvdCk7XG4gICAgICAgICAgICBpZiAoZGlzcGxheSA9PT0gbGFzdERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICBzYW1lRGlzcGxheUNvdW50Kys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzYW1lRGlzcGxheUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcgICAgXiAnICsgc2FtZURpc3BsYXlDb3VudCArICcgbW9yZSBsaW5lcyBpZGVudGljYWwgdG8gdGhpcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzYW1lRGlzcGxheUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcgICAgJyArIGRpc3BsYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdERpc3BsYXkgPSBkaXNwbGF5O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuZ2V0U3ltYm9sRGlzcGxheSA9IGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgICAgICByZXR1cm4gZ2V0U3ltYm9sTG9uZ0Rpc3BsYXkoc3ltYm9sKTtcbiAgICB9O1xuXG4gICAgLypcbiAgICBCdWlsZHMgYSB0aGUgZmlyc3Qgc3RhdGUgc3RhY2suIFlvdSBjYW4gdGhpbmsgb2YgYSBzdGF0ZSBzdGFjayBhcyB0aGUgY2FsbCBzdGFja1xuICAgIG9mIHRoZSByZWN1cnNpdmUtZGVzY2VudCBwYXJzZXIgd2hpY2ggdGhlIE5lYXJsZXkgcGFyc2UgYWxnb3JpdGhtIHNpbXVsYXRlcy5cbiAgICBBIHN0YXRlIHN0YWNrIGlzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIHN0YXRlIG9iamVjdHMuIFdpdGhpbiBhXG4gICAgc3RhdGUgc3RhY2ssIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBhcnJheSB3aWxsIGJlIHRoZSBzdGFydGluZ1xuICAgIHN0YXRlLCB3aXRoIGVhY2ggc3VjY2Vzc2l2ZSBpdGVtIGluIHRoZSBhcnJheSBnb2luZyBmdXJ0aGVyIGJhY2sgaW50byBoaXN0b3J5LlxuXG4gICAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBnaXZlbiBhIHN0YXJ0aW5nIHN0YXRlIGFuZCBhbiBlbXB0eSBhcnJheSByZXByZXNlbnRpbmdcbiAgICB0aGUgdmlzaXRlZCBzdGF0ZXMsIGFuZCBpdCByZXR1cm5zIGFuIHNpbmdsZSBzdGF0ZSBzdGFjay5cblxuICAgICovXG4gICAgUGFyc2VyLnByb3RvdHlwZS5idWlsZEZpcnN0U3RhdGVTdGFjayA9IGZ1bmN0aW9uKHN0YXRlLCB2aXNpdGVkKSB7XG4gICAgICAgIGlmICh2aXNpdGVkLmluZGV4T2Yoc3RhdGUpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gRm91bmQgY3ljbGUsIHJldHVybiBudWxsXG4gICAgICAgICAgICAvLyB0byBlbGltaW5hdGUgdGhpcyBwYXRoIGZyb20gdGhlIHJlc3VsdHMsIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGtub3cgaG93IHRvIGRpc3BsYXkgaXQgbWVhbmluZ2Z1bGx5XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUud2FudGVkQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3N0YXRlXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldlN0YXRlID0gc3RhdGUud2FudGVkQnlbMF07XG4gICAgICAgIHZhciBjaGlsZFZpc2l0ZWQgPSBbc3RhdGVdLmNvbmNhdCh2aXNpdGVkKTtcbiAgICAgICAgdmFyIGNoaWxkUmVzdWx0ID0gdGhpcy5idWlsZEZpcnN0U3RhdGVTdGFjayhwcmV2U3RhdGUsIGNoaWxkVmlzaXRlZCk7XG4gICAgICAgIGlmIChjaGlsZFJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtzdGF0ZV0uY29uY2F0KGNoaWxkUmVzdWx0KTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhYmxlW3RoaXMuY3VycmVudF07XG4gICAgICAgIGNvbHVtbi5sZXhlclN0YXRlID0gdGhpcy5sZXhlclN0YXRlO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbihjb2x1bW4pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY29sdW1uLmluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBpbmRleDtcbiAgICAgICAgdGhpcy50YWJsZVtpbmRleF0gPSBjb2x1bW47XG4gICAgICAgIHRoaXMudGFibGUuc3BsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMubGV4ZXJTdGF0ZSA9IGNvbHVtbi5sZXhlclN0YXRlO1xuXG4gICAgICAgIC8vIEluY3JlbWVudGFsbHkga2VlcCB0cmFjayBvZiByZXN1bHRzXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZmluaXNoKCk7XG4gICAgfTtcblxuICAgIC8vIG5iLiBkZXByZWNhdGVkOiB1c2Ugc2F2ZS9yZXN0b3JlIGluc3RlYWQhXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXdpbmQgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5rZWVwSGlzdG9yeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXQgb3B0aW9uIGBrZWVwSGlzdG9yeWAgdG8gZW5hYmxlIHJld2luZGluZycpXG4gICAgICAgIH1cbiAgICAgICAgLy8gbmIuIHJlY2FsbCBjb2x1bW4gKHRhYmxlKSBpbmRpY2llcyBmYWxsIGJldHdlZW4gdG9rZW4gaW5kaWNpZXMuXG4gICAgICAgIC8vICAgICAgICBjb2wgMCAgIC0tICAgdG9rZW4gMCAgIC0tICAgY29sIDFcbiAgICAgICAgdGhpcy5yZXN0b3JlKHRoaXMudGFibGVbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwb3NzaWJsZSBwYXJzaW5nc1xuICAgICAgICB2YXIgY29uc2lkZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5ncmFtbWFyLnN0YXJ0O1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy50YWJsZVt0aGlzLnRhYmxlLmxlbmd0aCAtIDFdXG4gICAgICAgIGNvbHVtbi5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgaWYgKHQucnVsZS5uYW1lID09PSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAmJiB0LmRvdCA9PT0gdC5ydWxlLnN5bWJvbHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICYmIHQucmVmZXJlbmNlID09PSAwXG4gICAgICAgICAgICAgICAgICAgICYmIHQuZGF0YSAhPT0gUGFyc2VyLmZhaWwpIHtcbiAgICAgICAgICAgICAgICBjb25zaWRlcmF0aW9ucy5wdXNoKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnNpZGVyYXRpb25zLm1hcChmdW5jdGlvbihjKSB7cmV0dXJuIGMuZGF0YTsgfSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFN5bWJvbExvbmdEaXNwbGF5KHN5bWJvbCkge1xuICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBzeW1ib2w7XG4gICAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChzeW1ib2wubGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzeW1ib2wubGl0ZXJhbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnY2hhcmFjdGVyIG1hdGNoaW5nICcgKyBzeW1ib2w7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbC50eXBlICsgJyB0b2tlbic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2tlbiBtYXRjaGluZyAnICsgU3RyaW5nKHN5bWJvbC50ZXN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHN5bWJvbCB0eXBlOiAnICsgc3ltYm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN5bWJvbFNob3J0RGlzcGxheShzeW1ib2wpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygc3ltYm9sO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sLmxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3ltYm9sLmxpdGVyYWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICclJyArIHN5bWJvbC50eXBlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudGVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnPCcgKyBTdHJpbmcoc3ltYm9sLnRlc3QpICsgJz4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc3ltYm9sIHR5cGU6ICcgKyBzeW1ib2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgUGFyc2VyOiBQYXJzZXIsXG4gICAgICAgIEdyYW1tYXI6IEdyYW1tYXIsXG4gICAgICAgIFJ1bGU6IFJ1bGUsXG4gICAgfTtcblxufSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG5lYXJsZXksIHZlcnNpb24gMi4yMC4xXG4vLyBodHRwOi8vZ2l0aHViLmNvbS9IYXJkbWF0aDEyMy9uZWFybGV5XG4vLyBCeXBhc3NlcyBUUzYxMzMuIEFsbG93IGRlY2xhcmVkIGJ1dCB1bnVzZWQgZnVuY3Rpb25zLlxuLy8gQHRzLWlnbm9yZVxuZnVuY3Rpb24gaWQoZCkgeyByZXR1cm4gZFswXTsgfVxuY29uc3QgZGVlcEZsYXR0ZW4gPSAoYXJyKSA9PiBbXS5jb25jYXQoLi4uYXJyLm1hcCgodikgPT4gKEFycmF5LmlzQXJyYXkodikgPyBkZWVwRmxhdHRlbih2KSA6IHYpKSk7XG5mdW5jdGlvbiBmbGF0X3N0cmluZyhkKSB7XG4gICAgaWYgKGQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZCkpXG4gICAgICAgICAgICByZXR1cm4gZGVlcEZsYXR0ZW4oZCkuam9pbihcIlwiKTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuO1xuO1xuO1xuO1xuY29uc3QgZ3JhbW1hciA9IHtcbiAgICBMZXhlcjogdW5kZWZpbmVkLFxuICAgIFBhcnNlclJ1bGVzOiBbXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUmV2ZXJzZV9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUmV2ZXJzZV9wYXRoJHN0cmluZyQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGQuam9pbignJykgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJSZXZlcnNlX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIlJldmVyc2VfcGF0aCRzdHJpbmckMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgL1twUF0vLCAvW29PXS8sIC9bc1NdLywgL1t0VF0vLCAvW21NXS8sIC9bYUFdLywgL1tzU10vLCAvW3RUXS8sIC9bZUVdLywgL1tyUl0vLCB7IFwibGl0ZXJhbFwiOiBcIkBcIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5qb2luKFwiXCIpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMSRzdWJleHByZXNzaW9uJDFcIiwgXCJEb21haW5cIiwgeyBcImxpdGVyYWxcIjogXCI+XCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI8XCIgfSwgL1twUF0vLCAvW29PXS8sIC9bc1NdLywgL1t0VF0vLCAvW21NXS8sIC9bYUFdLywgL1tzU10vLCAvW3RUXS8sIC9bZUVdLywgL1tyUl0vLCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5qb2luKFwiXCIpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUGF0aCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJBX2RfbFwiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGgkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJQYXRoJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJQYXRoJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGhcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjxcIiB9LCBcIlBhdGgkZWJuZiQxXCIsIFwiTWFpbGJveFwiLCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFfZF9sJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIsXCIgfSwgXCJBdF9kb21haW5cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkFfZF9sJGVibmYkMVwiLCBcIkFfZF9sJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBX2RfbFwiLCBcInN5bWJvbHNcIjogW1wiQXRfZG9tYWluXCIsIFwiQV9kX2wkZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRfZG9tYWluXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCJAXCIgfSwgXCJEb21haW5cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb21haW4kZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvbWFpbiRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIuXCIgfSwgXCJzdWJfZG9tYWluXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiRG9tYWluJGVibmYkMVwiLCBcIkRvbWFpbiRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluXCIsIFwic3ltYm9sc1wiOiBbXCJzdWJfZG9tYWluXCIsIFwiRG9tYWluJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInN1Yl9kb21haW5cIiwgXCJzeW1ib2xzXCI6IFtcIlVfbGFiZWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMZXRfZGlnXCIsIFwic3ltYm9sc1wiOiBbXCJBTFBIQV9ESUdJVFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJMZGhfc3RyJGVibmYkMVwiLCBcIkFMUEhBX0RJR19EQVNIXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTGRoX3N0clwiLCBcInN5bWJvbHNcIjogW1wiTGRoX3N0ciRlYm5mJDFcIiwgXCJMZXRfZGlnXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZXRfZGlnXCIsIFwic3ltYm9sc1wiOiBbXCJBTFBIQV9ESUdJVF9VXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZGhfc3RyJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwiQUxQSEFfRElHX0RBU0hfVVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfTGRoX3N0clwiLCBcInN5bWJvbHNcIjogW1wiVV9MZGhfc3RyJGVibmYkMVwiLCBcIlVfTGV0X2RpZ1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWwkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiVV9MZGhfc3RyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIlVfbGFiZWwkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfbGFiZWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbFwiLCBcInN5bWJvbHNcIjogW1wiVV9MZXRfZGlnXCIsIFwiVV9sYWJlbCRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWxcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIltcIiB9LCBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgeyBcImxpdGVyYWxcIjogXCJdXCIgfV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJub25fbG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiRG9tYWluXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgRG9tYWluTmFtZTogZmxhdF9zdHJpbmcoZFswXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJub25fbG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiYWRkcmVzc19saXRlcmFsXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgQWRkcmVzc0xpdGVyYWw6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTWFpbGJveFwiLCBcInN5bWJvbHNcIjogW1wiTG9jYWxfcGFydFwiLCB7IFwibGl0ZXJhbFwiOiBcIkBcIiB9LCBcIm5vbl9sb2NhbF9wYXJ0XCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbG9jYWxQYXJ0OiBmbGF0X3N0cmluZyhkWzBdKSwgZG9tYWluUGFydDogZmxhdF9zdHJpbmcoZFsyXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMb2NhbF9wYXJ0XCIsIFwic3ltYm9sc1wiOiBbXCJEb3Rfc3RyaW5nXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgRG90U3RyaW5nOiBmbGF0X3N0cmluZyhkWzBdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxvY2FsX3BhcnRcIiwgXCJzeW1ib2xzXCI6IFtcIlF1b3RlZF9zdHJpbmdcIl0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBRdW90ZWRTdHJpbmc6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIuXCIgfSwgXCJBdG9tXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZyRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkRvdF9zdHJpbmckZWJuZiQxXCIsIFwiRG90X3N0cmluZyRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG90X3N0cmluZ1wiLCBcInN5bWJvbHNcIjogW1wiQXRvbVwiLCBcIkRvdF9zdHJpbmckZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRvbSRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtWmEteiEjJCUmJyorXFwtLz0/Xl9ge3x9flxcdTAwODAtXFx1RkZGRi9dL10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBdG9tJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiQXRvbSRlYm5mJDFcIiwgL1swLTlBLVphLXohIyQlJicqK1xcLS89P15fYHt8fX5cXHUwMDgwLVxcdUZGRkYvXS9dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQXRvbVwiLCBcInN5bWJvbHNcIjogW1wiQXRvbSRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiUXVvdGVkX3N0cmluZyRlYm5mJDFcIiwgXCJRY29udGVudFNNVFBcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRdW90ZWRfc3RyaW5nXCIsIFwic3ltYm9sc1wiOiBbXCJEUVVPVEVcIiwgXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcIkRRVU9URVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlFjb250ZW50U01UUFwiLCBcInN5bWJvbHNcIjogW1wicXRleHRTTVRQXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUWNvbnRlbnRTTVRQXCIsIFwic3ltYm9sc1wiOiBbXCJxdW90ZWRfcGFpclNNVFBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJxdW90ZWRfcGFpclNNVFBcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIlxcXFxcIiB9LCAvW1xceDIwLVxceDdlXS9dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwicXRleHRTTVRQXCIsIFwic3ltYm9sc1wiOiBbL1tcXHgyMC1cXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2VcXHUwMDgwLVxcdUZGRkZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiLlwiIH0sIFwiU251bVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiLCBcInN5bWJvbHNcIjogW1wiU251bVwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbL1tpSV0vLCAvW3BQXS8sIC9bdlZdLywgeyBcImxpdGVyYWxcIjogXCI2XCIgfSwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQuam9pbihcIlwiKTsgfSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2FkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJJUHY2X2FkZHJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcImRjb250ZW50XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIiwgXCJkY29udGVudFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbXCJTdGFuZGFyZGl6ZWRfdGFnXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWwkZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU3RhbmRhcmRpemVkX3RhZ1wiLCBcInN5bWJvbHNcIjogW1wiTGRoX3N0clwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImRjb250ZW50XCIsIFwic3ltYm9sc1wiOiBbL1tcXHgyMS1cXHg1YVxceDVlLVxceDdlXS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogWy9bMS05XS8sIFwiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIxXCIgfSwgXCJESUdJVFwiLCBcIkRJR0lUXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bVwiLCBcInN5bWJvbHNcIjogW1wiU251bSRzdWJleHByZXNzaW9uJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtJHN1YmV4cHJlc3Npb24kM1wiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiMlwiIH0sIC9bMC00XS8sIFwiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kM1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQ0XCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIyXCIgfSwgeyBcImxpdGVyYWxcIjogXCI1XCIgfSwgL1swLTVdL10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kNFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkclwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9mdWxsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9mdWxsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJIRVhESUdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDJcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDNcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiLCBcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4XCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleCRzdWJleHByZXNzaW9uJDNcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2Z1bGxcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2Nl9mdWxsJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRzdHJpbmckMVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkLmpvaW4oJycpIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wJGVibmYkMVwiLCBcIklQdjZfY29tcCRzdHJpbmckMVwiLCBcIklQdjZfY29tcCRlYm5mJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9mdWxsXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQxXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJHN0cmluZyQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGQuam9pbignJykgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiLCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcCRlYm5mJDFcIiwgXCJJUHY2djRfY29tcCRzdHJpbmckMVwiLCBcIklQdjZ2NF9jb21wJGVibmYkMlwiLCBcIklQdjRfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRElHSVRcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOV0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR0lUX1VcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtWmEtelxcdTAwODAtXFx1RkZGRl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR0lUXCIsIFwic3ltYm9sc1wiOiBbL1swLTlBLVphLXpdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBTFBIQV9ESUdfREFTSFwiLCBcInN5bWJvbHNcIjogWy9bLTAtOUEtWmEtel0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR19EQVNIX1VcIiwgXCJzeW1ib2xzXCI6IFsvWy0wLTlBLVphLXpcXHUwMDgwLVxcdUZGRkZdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJIRVhESUdcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtRmEtZl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRRVU9URVwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiXFxcIlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH1cbiAgICBdLFxuICAgIFBhcnNlclN0YXJ0OiBcIlJldmVyc2VfcGF0aFwiLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdyYW1tYXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncmFtbWFyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbm9uaWNhbGl6ZSA9IGV4cG9ydHMuY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmcgPSBleHBvcnRzLm5vcm1hbGl6ZSA9IGV4cG9ydHMubm9ybWFsaXplX2RvdF9zdHJpbmcgPSBleHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuLy8gY29uc3QgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuY29uc3QgbmVhcmxleSA9IHJlcXVpcmUoXCJuZWFybGV5XCIpO1xuY29uc3QgZ3JhbW1hcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2dyYW1tYXJcIikpO1xuZ3JhbW1hcl8xLmRlZmF1bHQuUGFyc2VyU3RhcnQgPSBcIk1haWxib3hcIjtcbmNvbnN0IGdyYW1tYXIgPSBuZWFybGV5LkdyYW1tYXIuZnJvbUNvbXBpbGVkKGdyYW1tYXJfMS5kZWZhdWx0KTtcbi8vIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTMyMSNzZWN0aW9uLTQuMS4yPlxuZnVuY3Rpb24gcGFyc2UoYWRkcmVzcykge1xuICAgIC8vIEFuIGluc2FuZSBsZW5ndGgsIHRvIHByb3RlY3QgdGhlIHBhcnNpbmcgY29kZSBmcm9tIGh1Z2UgaW5wdXQuIFNNVFAgbGluZSBsaW1pdCwgbWludXMgY29tbWFuZCBzaXplLlxuICAgIGNvbnN0IGluc2FuZV9sZW5ndGggPSAxMDAwIC0gXCJNQUlMIEZST006PD5cXHJcXG5cIi5sZW5ndGg7XG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoID4gaW5zYW5lX2xlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRyZXNzIHRvbyBsb25nXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgbmVhcmxleS5QYXJzZXIoZ3JhbW1hcik7XG4gICAgcGFyc2VyLmZlZWQoYWRkcmVzcyk7XG4gICAgaWYgKHBhcnNlci5yZXN1bHRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRyZXNzIHBhcnNpbmcgZmFpbGVkOiBhbWJpZ3VvdXMgZ3JhbW1hclwiKTtcbiAgICB9XG4gICAgLy8gRG9tYWluIGNoZWNrc1xuICAgIGNvbnN0IGF0X2lkeCA9IGFkZHJlc3MubGFzdEluZGV4T2YoJ0AnKTsgLy8gbXVzdCBiZSBmb3VuZCwgc2luY2UgcGFyc2Ugd2FzIHN1Y2Nlc3NmdWxcbiAgICBjb25zdCBkb21haW4gPSBhZGRyZXNzLnN1YnN0cmluZyhhdF9pZHggKyAxKTtcbiAgICBpZiAoZG9tYWluWzBdICE9PSAnWycpIHsgLy8gTm90IGFuIGFkZHJlc3MgbGl0ZXJhbFxuICAgICAgICBpZiAoZG9tYWluLmxlbmd0aCA+IDI1Mykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIHRvbyBsb25nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGRvbWFpbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIG5vdCBmdWxseSBxdWFsaWZpZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhYmVsc1tsYWJlbHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9wIGxldmVsIGRvbWFpbiBsYWJlbCB0b28gc2hvcnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWxzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxhYmVsc1swXS5sZW5ndGggPiA2Mykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9tYWluIGxhYmVsIHRvbyBsb25nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZXIucmVzdWx0c1swXTtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8qKiBTdHJpcCArc29tZXRoaW5nLCBzdHJpcCAnLidzLCBhbmQgbWFwIHRvIGxvd2VyIGNhc2UuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZV9kb3Rfc3RyaW5nKGRvdF9zdHJpbmcpIHtcbiAgICBjb25zdCB0YWdsZXNzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGx1c19sb2MgPSBkb3Rfc3RyaW5nLmluZGV4T2YoXCIrXCIpO1xuICAgICAgICBpZiAocGx1c19sb2MgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZG90X3N0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG90X3N0cmluZy5zdWJzdHIoMCwgcGx1c19sb2MpO1xuICAgIH0pKCk7XG4gICAgY29uc3QgZG90bGVzcyA9IHRhZ2xlc3MucmVwbGFjZSgvXFwuL2csIFwiXCIpO1xuICAgIHJldHVybiBkb3RsZXNzLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnRzLm5vcm1hbGl6ZV9kb3Rfc3RyaW5nID0gbm9ybWFsaXplX2RvdF9zdHJpbmc7XG4vKiogVGhlIEcgc3R5bGUgYWRkcmVzcyBub3JtYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYWRkcmVzcykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgYSA9IHBhcnNlKGFkZHJlc3MpO1xuICAgIGNvbnN0IGRvbWFpbiA9IChfYSA9IGEuZG9tYWluUGFydC5BZGRyZXNzTGl0ZXJhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYS5kb21haW5QYXJ0LkRvbWFpbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBsb2NhbCA9IChfYiA9IGEubG9jYWxQYXJ0LlF1b3RlZFN0cmluZykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbm9ybWFsaXplX2RvdF9zdHJpbmcoYS5sb2NhbFBhcnQuRG90U3RyaW5nKTtcbiAgICByZXR1cm4gYCR7bG9jYWx9QCR7ZG9tYWlufWA7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nKHF1b3RlZF9zdHJpbmcpIHtcbiAgICBjb25zdCB1bnF1b3RlZCA9IHF1b3RlZF9zdHJpbmcuc3Vic3RyKDEpLnN1YnN0cigwLCBxdW90ZWRfc3RyaW5nLmxlbmd0aCAtIDIpO1xuICAgIGNvbnN0IHVuZXNjYXBlZCA9IHVucXVvdGVkLnJlcGxhY2UoLyg/OlxcXFwoLikpL2csIFwiJDFcIik7XG4gICAgY29uc3QgcmVlc2NhcGVkID0gdW5lc2NhcGVkLnJlcGxhY2UoLyg/OihbXCJcXFxcXSkpL2csIFwiXFxcXCQxXCIpO1xuICAgIHJldHVybiBgXCIke3JlZXNjYXBlZH1cImA7IC8vIHJlLXF1b3RlXG59XG5leHBvcnRzLmNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nID0gY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmc7XG4vKipcbiAqIEFwcGx5IGEgY2Fub25pY2FsaXphdGlvbiBjb25zaXN0ZW50IHdpdGggc3RhbmRhcmRzIHRvIHN1cHBvcnRcbiAqIGNvbXBhcmlzb24gYXMgYSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShhZGRyZXNzKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGEgPSBwYXJzZShhZGRyZXNzKTtcbiAgICBjb25zdCBkb21haW4gPSAoX2EgPSBhLmRvbWFpblBhcnQuQWRkcmVzc0xpdGVyYWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGEuZG9tYWluUGFydC5Eb21haW5OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbG9jYWwgPSBhLmxvY2FsUGFydC5RdW90ZWRTdHJpbmdcbiAgICAgICAgPyBjYW5vbmljYWxpemVfcXVvdGVkX3N0cmluZyhhLmxvY2FsUGFydC5RdW90ZWRTdHJpbmcpXG4gICAgICAgIDogYS5sb2NhbFBhcnQuRG90U3RyaW5nO1xuICAgIHJldHVybiBgJHtsb2NhbH1AJHtkb21haW59YDtcbn1cbmV4cG9ydHMuY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycikge1xuXHRpZiAodHlwZW9mIEFycmF5LmlzQXJyYXkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpO1xuXHR9XG5cblx0cmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcblx0aWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHZhciBoYXNPd25Db25zdHJ1Y3RvciA9IGhhc093bi5jYWxsKG9iaiwgJ2NvbnN0cnVjdG9yJyk7XG5cdHZhciBoYXNJc1Byb3RvdHlwZU9mID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKTtcblx0Ly8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdFxuXHRpZiAob2JqLmNvbnN0cnVjdG9yICYmICFoYXNPd25Db25zdHJ1Y3RvciAmJiAhaGFzSXNQcm90b3R5cGVPZikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLFxuXHQvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi5cblx0dmFyIGtleTtcblx0Zm9yIChrZXkgaW4gb2JqKSB7IC8qKi8gfVxuXG5cdHJldHVybiB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJyB8fCBoYXNPd24uY2FsbChvYmosIGtleSk7XG59O1xuXG4vLyBJZiBuYW1lIGlzICdfX3Byb3RvX18nLCBhbmQgT2JqZWN0LmRlZmluZVByb3BlcnR5IGlzIGF2YWlsYWJsZSwgZGVmaW5lIF9fcHJvdG9fXyBhcyBhbiBvd24gcHJvcGVydHkgb24gdGFyZ2V0XG52YXIgc2V0UHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMpIHtcblx0aWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG5cdH1cbn07XG5cbi8vIFJldHVybiB1bmRlZmluZWQgaW5zdGVhZCBvZiBfX3Byb3RvX18gaWYgJ19fcHJvdG9fXycgaXMgbm90IGFuIG93biBwcm9wZXJ0eVxudmFyIGdldFByb3BlcnR5ID0gZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqLCBuYW1lKSB7XG5cdGlmIChuYW1lID09PSAnX19wcm90b19fJykge1xuXHRcdGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkge1xuXHRcdFx0cmV0dXJuIHZvaWQgMDtcblx0XHR9IGVsc2UgaWYgKGdPUEQpIHtcblx0XHRcdC8vIEluIGVhcmx5IHZlcnNpb25zIG9mIG5vZGUsIG9ialsnX19wcm90b19fJ10gaXMgYnVnZ3kgd2hlbiBvYmogaGFzXG5cdFx0XHQvLyBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5LiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgd29ya3MuXG5cdFx0XHRyZXR1cm4gZ09QRChvYmosIG5hbWUpLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvYmpbbmFtZV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZCgpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lO1xuXHR2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzBdO1xuXHR2YXIgaSA9IDE7XG5cdHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHR2YXIgZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdib29sZWFuJykge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuXHRcdC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHRpID0gMjtcblx0fVxuXHRpZiAodGFyZ2V0ID09IG51bGwgfHwgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHRmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1tpXTtcblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yIChuYW1lIGluIG9wdGlvbnMpIHtcblx0XHRcdFx0c3JjID0gZ2V0UHJvcGVydHkodGFyZ2V0LCBuYW1lKTtcblx0XHRcdFx0Y29weSA9IGdldFByb3BlcnR5KG9wdGlvbnMsIG5hbWUpO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKHRhcmdldCAhPT0gY29weSkge1xuXHRcdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gaXNBcnJheShjb3B5KSkpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNBcnJheShzcmMpID8gc3JjIDogW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGV4dGVuZChkZWVwLCBjbG9uZSwgY29weSkgfSk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY29weSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdHNldFByb3BlcnR5KHRhcmdldCwgeyBuYW1lOiBuYW1lLCBuZXdWYWx1ZTogY29weSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXh0ZW5kID0gcmVxdWlyZSgnZXh0ZW5kJyk7XG5cbnZhciBkYXRhID0ge1xuICBwZXJtYW5lbnQ6IHJlcXVpcmUoJy4vbGliL2lhbmEtcGVybWFuZW50Lmpzb24nKSxcbiAgcHJvdm9zaW9uYWw6IHJlcXVpcmUoJy4vbGliL2lhbmEtcHJvdmlzaW9uYWwuanNvbicpLFxuICBoaXN0b3JpY2FsOiByZXF1aXJlKCcuL2xpYi9pYW5hLWhpc3RvcmljYWwuanNvbicpXG59O1xuXG52YXIgYWxsQnlOYW1lID0ge307XG5cbk9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgZGF0YVt0eXBlXS5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWVPYmopIHtcbiAgICBhbGxCeU5hbWVbc2NoZW1lT2JqLnNjaGVtZV0gPSBleHRlbmQoc2NoZW1lT2JqLCB7IHR5cGU6IHR5cGUgfSk7XG4gIH0pO1xufSk7XG5cbmRhdGEudW5vZmZpY2lhbCA9IHJlcXVpcmUoJy4vbGliL3Vub2ZmaWNpYWwuanNvbicpLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICByZXR1cm4gIWFsbEJ5TmFtZVtpdGVtLnNjaGVtZV07XG59KTtcblxuZGF0YS51bm9mZmljaWFsLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZU9iaikge1xuICBhbGxCeU5hbWVbc2NoZW1lT2JqLnNjaGVtZV0gPSBleHRlbmQoc2NoZW1lT2JqLCB7IHR5cGU6ICd1bm9mZmljaWFsJyB9KTtcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kKGRhdGEsIHsgYWxsQnlOYW1lOiBhbGxCeU5hbWUgfSk7XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuY29uc3QgeyBhZGRyZXNzUGFyc2VyIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5jb25zdCBzY2hlbWVzID0gcmVxdWlyZSgnc2NoZW1lcycpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShhZGRyZXNzKSB7XG4gIHRyeSB7XG4gICAgYWRkcmVzc1BhcnNlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGlyaSA9IHBhcnNlKHZhbHVlKTtcbiAgaWYgKGlyaS5zY2hlbWUgPT09ICdtYWlsdG8nICYmIGlyaS50by5ldmVyeSh2YWxpZGF0ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXJpLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyAmJiBzY2hlbWVzLmFsbEJ5TmFtZVtpcmkuc2NoZW1lXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLAogICAgIi8vIFJlZ2V4IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzIwNDQ4NDYvcmVnZXgtZm9yLWlzby04NjAxLWR1cmF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPVxuICAvXlAoPyEkKShcXGQrKD86XFwuXFxkKyk/WSk/KFxcZCsoPzpcXC5cXGQrKT9NKT8oXFxkKyg/OlxcLlxcZCspP1cpPyhcXGQrKD86XFwuXFxkKyk/RCk/KFQoPz1cXGQpKFxcZCsoPzpcXC5cXGQrKT9IKT8oXFxkKyg/OlxcLlxcZCspP00pPyhcXGQrKD86XFwuXFxkKyk/Uyk/KT8kLztcbiIsCiAgICAiY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgnc210cC1hZGRyZXNzLXBhcnNlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh2YWx1ZSkgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlKHZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwKICAgICJ2YXIgX19jcmVhdGU9T2JqZWN0LmNyZWF0ZTt2YXJ7Z2V0UHJvdG90eXBlT2Y6X19nZXRQcm90b09mLGRlZmluZVByb3BlcnR5Ol9fZGVmUHJvcCxnZXRPd25Qcm9wZXJ0eU5hbWVzOl9fZ2V0T3duUHJvcE5hbWVzfT1PYmplY3Q7dmFyIF9faGFzT3duUHJvcD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIF9fYWNjZXNzUHJvcChrZXkpe3JldHVybiB0aGlzW2tleV19dmFyIF9fcmVFeHBvcnQ9KHRhcmdldCxtb2Qsc2Vjb25kVGFyZ2V0KT0+e3ZhciBrZXlzPV9fZ2V0T3duUHJvcE5hbWVzKG1vZCk7Zm9yKGxldCBrZXkgb2Yga2V5cylpZighX19oYXNPd25Qcm9wLmNhbGwodGFyZ2V0LGtleSkmJmtleSE9PVwiZGVmYXVsdFwiKV9fZGVmUHJvcCh0YXJnZXQsa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO2lmKHNlY29uZFRhcmdldCl7Zm9yKGxldCBrZXkgb2Yga2V5cylpZighX19oYXNPd25Qcm9wLmNhbGwoc2Vjb25kVGFyZ2V0LGtleSkmJmtleSE9PVwiZGVmYXVsdFwiKV9fZGVmUHJvcChzZWNvbmRUYXJnZXQsa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO3JldHVybiBzZWNvbmRUYXJnZXR9fSxfX3RvRVNNQ2FjaGVfbm9kZSxfX3RvRVNNQ2FjaGVfZXNtLF9fdG9FU009KG1vZCxpc05vZGVNb2RlLHRhcmdldCk9Pnt2YXIgY2FuQ2FjaGU9bW9kIT1udWxsJiZ0eXBlb2YgbW9kPT09XCJvYmplY3RcIjtpZihjYW5DYWNoZSl7dmFyIGNhY2hlPWlzTm9kZU1vZGU/X190b0VTTUNhY2hlX25vZGU/Pz1uZXcgV2Vha01hcDpfX3RvRVNNQ2FjaGVfZXNtPz89bmV3IFdlYWtNYXAsY2FjaGVkPWNhY2hlLmdldChtb2QpO2lmKGNhY2hlZClyZXR1cm4gY2FjaGVkfXRhcmdldD1tb2QhPW51bGw/X19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpOnt9O2xldCB0bz1pc05vZGVNb2RlfHwhbW9kfHwhbW9kLl9fZXNNb2R1bGU/X19kZWZQcm9wKHRhcmdldCxcImRlZmF1bHRcIix7dmFsdWU6bW9kLGVudW1lcmFibGU6ITB9KTp0YXJnZXQ7Zm9yKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMobW9kKSlpZighX19oYXNPd25Qcm9wLmNhbGwodG8sa2V5KSlfX2RlZlByb3AodG8sa2V5LHtnZXQ6X19hY2Nlc3NQcm9wLmJpbmQobW9kLGtleSksZW51bWVyYWJsZTohMH0pO2lmKGNhbkNhY2hlKWNhY2hlLnNldChtb2QsdG8pO3JldHVybiB0b307dmFyIF9fY29tbW9uSlM9KGNiLG1vZCk9PigpPT4obW9kfHxjYigobW9kPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxtb2QpLG1vZC5leHBvcnRzKTt2YXIgX19yZXR1cm5WYWx1ZT0odik9PnY7ZnVuY3Rpb24gX19leHBvcnRTZXR0ZXIobmFtZSxuZXdWYWx1ZSl7dGhpc1tuYW1lXT1fX3JldHVyblZhbHVlLmJpbmQobnVsbCxuZXdWYWx1ZSl9dmFyIF9fZXhwb3J0PSh0YXJnZXQsYWxsKT0+e2Zvcih2YXIgbmFtZSBpbiBhbGwpX19kZWZQcm9wKHRhcmdldCxuYW1lLHtnZXQ6YWxsW25hbWVdLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHNldDpfX2V4cG9ydFNldHRlci5iaW5kKGFsbCxuYW1lKX0pfTt2YXIgcmVxdWlyZV9wdW55Y29kZT1fX2NvbW1vbkpTKChleHBvcnRzLG1vZHVsZSk9Pnt2YXIgcmVnZXhQdW55Y29kZT0vXnhuLS0vLHJlZ2V4Tm9uQVNDSUk9L1teXFwwLVxceDdGXS8scmVnZXhTZXBhcmF0b3JzPS9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csZXJyb3JzPXtvdmVyZmxvdzpcIk92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzXCIsXCJub3QtYmFzaWNcIjpcIklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludClcIixcImludmFsaWQtaW5wdXRcIjpcIkludmFsaWQgaW5wdXRcIn0sZmxvb3I9TWF0aC5mbG9vcixzdHJpbmdGcm9tQ2hhckNvZGU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlcnJvcih0eXBlKXt0aHJvdyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSl9ZnVuY3Rpb24gbWFwKGFycmF5LGNhbGxiYWNrKXtsZXQgcmVzdWx0PVtdLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pcmVzdWx0W2xlbmd0aF09Y2FsbGJhY2soYXJyYXlbbGVuZ3RoXSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBtYXBEb21haW4oZG9tYWluLGNhbGxiYWNrKXtsZXQgcGFydHM9ZG9tYWluLnNwbGl0KFwiQFwiKSxyZXN1bHQ9XCJcIjtpZihwYXJ0cy5sZW5ndGg+MSlyZXN1bHQ9cGFydHNbMF0rXCJAXCIsZG9tYWluPXBhcnRzWzFdO2RvbWFpbj1kb21haW4ucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsXCIuXCIpO2xldCBsYWJlbHM9ZG9tYWluLnNwbGl0KFwiLlwiKSxlbmNvZGVkPW1hcChsYWJlbHMsY2FsbGJhY2spLmpvaW4oXCIuXCIpO3JldHVybiByZXN1bHQrZW5jb2RlZH1mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZyl7bGV0IG91dHB1dD1bXSxjb3VudGVyPTAsbGVuZ3RoPXN0cmluZy5sZW5ndGg7d2hpbGUoY291bnRlcjxsZW5ndGgpe2xldCB2YWx1ZT1zdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO2lmKHZhbHVlPj01NTI5NiYmdmFsdWU8PTU2MzE5JiZjb3VudGVyPGxlbmd0aCl7bGV0IGV4dHJhPXN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7aWYoKGV4dHJhJjY0NTEyKT09NTYzMjApb3V0cHV0LnB1c2goKCh2YWx1ZSYxMDIzKTw8MTApKyhleHRyYSYxMDIzKSs2NTUzNik7ZWxzZSBvdXRwdXQucHVzaCh2YWx1ZSksY291bnRlci0tfWVsc2Ugb3V0cHV0LnB1c2godmFsdWUpfXJldHVybiBvdXRwdXR9dmFyIHVjczJlbmNvZGU9KGNvZGVQb2ludHMpPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKSxiYXNpY1RvRGlnaXQ9ZnVuY3Rpb24oY29kZVBvaW50KXtpZihjb2RlUG9pbnQ+PTQ4JiZjb2RlUG9pbnQ8NTgpcmV0dXJuIDI2Kyhjb2RlUG9pbnQtNDgpO2lmKGNvZGVQb2ludD49NjUmJmNvZGVQb2ludDw5MSlyZXR1cm4gY29kZVBvaW50LTY1O2lmKGNvZGVQb2ludD49OTcmJmNvZGVQb2ludDwxMjMpcmV0dXJuIGNvZGVQb2ludC05NztyZXR1cm4gMzZ9LGRpZ2l0VG9CYXNpYz1mdW5jdGlvbihkaWdpdCxmbGFnKXtyZXR1cm4gZGlnaXQrMjIrNzUqKGRpZ2l0PDI2KS0oKGZsYWchPTApPDw1KX0sYWRhcHQ9ZnVuY3Rpb24oZGVsdGEsbnVtUG9pbnRzLGZpcnN0VGltZSl7bGV0IGs9MDtkZWx0YT1maXJzdFRpbWU/Zmxvb3IoZGVsdGEvNzAwKTpkZWx0YT4+MSxkZWx0YSs9Zmxvb3IoZGVsdGEvbnVtUG9pbnRzKTtmb3IoO2RlbHRhPjQ1NTtrKz0zNilkZWx0YT1mbG9vcihkZWx0YS8zNSk7cmV0dXJuIGZsb29yKGsrMzYqZGVsdGEvKGRlbHRhKzM4KSl9LGRlY29kZT1mdW5jdGlvbihpbnB1dCl7bGV0IG91dHB1dD1bXSxpbnB1dExlbmd0aD1pbnB1dC5sZW5ndGgsaT0wLG49MTI4LGJpYXM9NzIsYmFzaWM9aW5wdXQubGFzdEluZGV4T2YoXCItXCIpO2lmKGJhc2ljPDApYmFzaWM9MDtmb3IobGV0IGo9MDtqPGJhc2ljOysrail7aWYoaW5wdXQuY2hhckNvZGVBdChqKT49MTI4KWVycm9yKFwibm90LWJhc2ljXCIpO291dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpfWZvcihsZXQgaW5kZXg9YmFzaWM+MD9iYXNpYysxOjA7aW5kZXg8aW5wdXRMZW5ndGg7KXtsZXQgb2xkaT1pO2ZvcihsZXQgdz0xLGs9MzY7O2srPTM2KXtpZihpbmRleD49aW5wdXRMZW5ndGgpZXJyb3IoXCJpbnZhbGlkLWlucHV0XCIpO2xldCBkaWdpdD1iYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7aWYoZGlnaXQ+PTM2KWVycm9yKFwiaW52YWxpZC1pbnB1dFwiKTtpZihkaWdpdD5mbG9vcigoMjE0NzQ4MzY0Ny1pKS93KSllcnJvcihcIm92ZXJmbG93XCIpO2krPWRpZ2l0Knc7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKGRpZ2l0PHQpYnJlYWs7bGV0IGJhc2VNaW51c1Q9MzYtdDtpZih3PmZsb29yKDIxNDc0ODM2NDcvYmFzZU1pbnVzVCkpZXJyb3IoXCJvdmVyZmxvd1wiKTt3Kj1iYXNlTWludXNUfWxldCBvdXQ9b3V0cHV0Lmxlbmd0aCsxO2lmKGJpYXM9YWRhcHQoaS1vbGRpLG91dCxvbGRpPT0wKSxmbG9vcihpL291dCk+MjE0NzQ4MzY0Ny1uKWVycm9yKFwib3ZlcmZsb3dcIik7bis9Zmxvb3IoaS9vdXQpLGklPW91dCxvdXRwdXQuc3BsaWNlKGkrKywwLG4pfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdXRwdXQpfSxlbmNvZGU9ZnVuY3Rpb24oaW5wdXQpe2xldCBvdXRwdXQ9W107aW5wdXQ9dWNzMmRlY29kZShpbnB1dCk7bGV0IGlucHV0TGVuZ3RoPWlucHV0Lmxlbmd0aCxuPTEyOCxkZWx0YT0wLGJpYXM9NzI7Zm9yKGxldCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpaWYoY3VycmVudFZhbHVlPDEyOClvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7bGV0IGJhc2ljTGVuZ3RoPW91dHB1dC5sZW5ndGgsaGFuZGxlZENQQ291bnQ9YmFzaWNMZW5ndGg7aWYoYmFzaWNMZW5ndGgpb3V0cHV0LnB1c2goXCItXCIpO3doaWxlKGhhbmRsZWRDUENvdW50PGlucHV0TGVuZ3RoKXtsZXQgbT0yMTQ3NDgzNjQ3O2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KWlmKGN1cnJlbnRWYWx1ZT49biYmY3VycmVudFZhbHVlPG0pbT1jdXJyZW50VmFsdWU7bGV0IGhhbmRsZWRDUENvdW50UGx1c09uZT1oYW5kbGVkQ1BDb3VudCsxO2lmKG0tbj5mbG9vcigoMjE0NzQ4MzY0Ny1kZWx0YSkvaGFuZGxlZENQQ291bnRQbHVzT25lKSllcnJvcihcIm92ZXJmbG93XCIpO2RlbHRhKz0obS1uKSpoYW5kbGVkQ1BDb3VudFBsdXNPbmUsbj1tO2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KXtpZihjdXJyZW50VmFsdWU8biYmKytkZWx0YT4yMTQ3NDgzNjQ3KWVycm9yKFwib3ZlcmZsb3dcIik7aWYoY3VycmVudFZhbHVlPT09bil7bGV0IHE9ZGVsdGE7Zm9yKGxldCBrPTM2OztrKz0zNil7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKHE8dClicmVhaztsZXQgcU1pbnVzVD1xLXQsYmFzZU1pbnVzVD0zNi10O291dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCtxTWludXNUJWJhc2VNaW51c1QsMCkpKSxxPWZsb29yKHFNaW51c1QvYmFzZU1pbnVzVCl9b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLDApKSksYmlhcz1hZGFwdChkZWx0YSxoYW5kbGVkQ1BDb3VudFBsdXNPbmUsaGFuZGxlZENQQ291bnQ9PT1iYXNpY0xlbmd0aCksZGVsdGE9MCwrK2hhbmRsZWRDUENvdW50fX0rK2RlbHRhLCsrbn1yZXR1cm4gb3V0cHV0LmpvaW4oXCJcIil9LHRvVW5pY29kZT1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIG1hcERvbWFpbihpbnB1dCxmdW5jdGlvbihzdHJpbmcpe3JldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKT9kZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnN0cmluZ30pfSx0b0FTQ0lJPWZ1bmN0aW9uKGlucHV0KXtyZXR1cm4gbWFwRG9tYWluKGlucHV0LGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpP1wieG4tLVwiK2VuY29kZShzdHJpbmcpOnN0cmluZ30pfSxwdW55Y29kZT17dmVyc2lvbjpcIjIuMy4xXCIsdWNzMjp7ZGVjb2RlOnVjczJkZWNvZGUsZW5jb2RlOnVjczJlbmNvZGV9LGRlY29kZSxlbmNvZGUsdG9BU0NJSSx0b1VuaWNvZGV9O21vZHVsZS5leHBvcnRzPXB1bnljb2RlfSk7dmFyIGV4cG9ydHNfcHVueWNvZGU9e307X19leHBvcnQoZXhwb3J0c19wdW55Y29kZSx7ZGVmYXVsdDooKT0+aW1wb3J0X3B1bnljb2RlLmRlZmF1bHR9KTtfX3JlRXhwb3J0KGV4cG9ydHNfcHVueWNvZGUsX190b0VTTShyZXF1aXJlX3B1bnljb2RlKCksMSkpO3ZhciBpbXBvcnRfcHVueWNvZGU9X190b0VTTShyZXF1aXJlX3B1bnljb2RlKCksMSk7dmFyIGV4cG9ydF9kZWZhdWx0PWltcG9ydF9wdW55Y29kZS5kZWZhdWx0O2V4cG9ydHtleHBvcnRfZGVmYXVsdCBhcyBkZWZhdWx0fTsiLAogICAgImNvbnN0IHsgdG9BU0NJSSB9ID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuY29uc3QgaG9zdG5hbWVSZWdleCA9XG4gIC9eKD89LnsxLDI1M31cXC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlxcLj8kL2k7XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGhvc3RuYW1lID0gdG9BU0NJSSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgaG9zdG5hbWUucmVwbGFjZSgvXFwuJC8sICcnKS5sZW5ndGggPD0gMjUzICYmIGhvc3RuYW1lUmVnZXgudGVzdChob3N0bmFtZSlcbiAgKTtcbn07XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuY29uc3QgeyBhZGRyZXNzUGFyc2VyIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5jb25zdCBzY2hlbWVzID0gcmVxdWlyZSgnc2NoZW1lcycpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShhZGRyZXNzKSB7XG4gIHRyeSB7XG4gICAgYWRkcmVzc1BhcnNlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGlyaSA9IHBhcnNlKHZhbHVlKTtcbiAgLy8gQWxsIHZhbGlkIElSSXMgYXJlIHZhbGlkIElSSS1yZWZlcmVuY2VzXG4gIGlmIChpcmkuc2NoZW1lID09PSAnbWFpbHRvJyAmJiBpcmkudG8uZXZlcnkodmFsaWRhdGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgaXJpLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyAmJlxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICBzY2hlbWVzLmFsbEJ5TmFtZVtpcmkuc2NoZW1lXVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB2YWxpZCBJUkktcmVmZXJlbmNlXG5cbiAgLy8gSWYgdGhlcmUgaXMgYSBzY2hlbWUsIGl0IG11c3QgYmUgdmFsaWRcbiAgaWYgKGlyaS5zY2hlbWUgJiYgIXNjaGVtZXMuYWxsQnlOYW1lW2lyaS5zY2hlbWVdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlcmUncyBhIHBhdGggYW5kIGZvciBhIHByb3BlciB0eXBlIG9mIHJlZmVyZW5jZVxuICByZXR1cm4gKFxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICAoaXJpLnJlZmVyZW5jZSA9PT0gJ3JlbGF0aXZlJyB8fFxuICAgICAgaXJpLnJlZmVyZW5jZSA9PT0gJ3NhbWUtZG9jdW1lbnQnIHx8XG4gICAgICBpcmkucmVmZXJlbmNlID09PSAndXJpJylcbiAgKTtcbn07XG4iLAogICAgIm1vZHVsZS5leHBvcnRzLmlyaSA9IHJlcXVpcmUoJy4vaXJpJyk7XG5tb2R1bGUuZXhwb3J0cy5kdXJhdGlvbiA9IHJlcXVpcmUoJy4vZHVyYXRpb24nKTtcbm1vZHVsZS5leHBvcnRzWydpZG4tZW1haWwnXSA9IHJlcXVpcmUoJy4vaWRuLWVtYWlsJyk7XG5tb2R1bGUuZXhwb3J0c1snaWRuLWhvc3RuYW1lJ10gPSByZXF1aXJlKCcuL2lkbi1ob3N0bmFtZScpO1xubW9kdWxlLmV4cG9ydHNbJ2lyaS1yZWZlcmVuY2UnXSA9IHJlcXVpcmUoJy4vaXJpLXJlZmVyZW5jZScpO1xuIiwKICAgICJjb25zdCBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKGFqdiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGFsbEZvcm1hdHMgPSBPYmplY3Qua2V5cyhmb3JtYXRzKTtcbiAgbGV0IGZvcm1hdHNUb0luc3RhbGwgPSBhbGxGb3JtYXRzO1xuXG4gIGlmIChvcHRpb25zLmZvcm1hdHMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5mb3JtYXRzKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5mb3JtYXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICBmb3JtYXRzVG9JbnN0YWxsID0gb3B0aW9ucy5mb3JtYXRzO1xuICB9XG5cbiAgYWxsRm9ybWF0c1xuICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4gZm9ybWF0c1RvSW5zdGFsbC5pbmNsdWRlcyhmb3JtYXQpKVxuICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGFqdi5hZGRGb3JtYXQoa2V5LCBmb3JtYXRzW2tleV0pO1xuICAgIH0pO1xuXG4gIHJldHVybiBhanY7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQWN0aXZpdHlTdHJlYW0sIEpzb25MZENvbnRleHQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vKipcbiAqIENhbm9uaWNhbCBBUzIgYmFzZSB2b2NhYnVsYXJ5IFVSTC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTMl9CQVNFX0NPTlRFWFRfVVJMID0gXCJodHRwczovL3d3dy53My5vcmcvbnMvYWN0aXZpdHlzdHJlYW1zXCI7XG5cbi8qKlxuICogU29ja2V0aHViIGJhc2Ugdm9jYWJ1bGFyeSBVUkwgZm9yIHNoYXJlZCBwbGF0Zm9ybSB0ZXJtcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMID1cbiAgICBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9ucy9jb250ZXh0L3YxLmpzb25sZFwiO1xuXG4vKipcbiAqIFVSTCBwcmVmaXggZm9yIHBlci1wbGF0Zm9ybSBjb250ZXh0IFVSTHMuXG4gKi9cbmV4cG9ydCBjb25zdCBQTEFURk9STV9DT05URVhUX1BSRUZJWCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9cIjtcblxuLyoqXG4gKiBCdWlsdC1pbiBwc2V1ZG8tcGxhdGZvcm0gdXNlZCBmb3Igc2VydmVyLXNpZGUgZXJyb3IgcGF5bG9hZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFUlJPUl9QTEFURk9STV9JRCA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9lcnJvci92MS5qc29ubGRcIjtcblxuLyoqXG4gKiBCdWlsdC1pbiBwc2V1ZG8tcGxhdGZvcm0gdXNlZCBmb3IgaW50ZXJuYWwgY29udHJvbCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1BMQVRGT1JNX0lEID0gXCJzb2NrZXRodWI6aW50ZXJuYWxcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9QTEFURk9STV9DT05URVhUX1VSTCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9zb2NrZXRodWI6aW50ZXJuYWwvdjEuanNvbmxkXCI7XG5cbmNvbnN0IHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5jb25zdCBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbmNvbnN0IHBsYXRmb3JtQ29udGV4dFRvQ3JlZGVudGlhbHNTY2hlbWFJZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbi8qKlxuICogQnVpbGQgdGhlIGNhbm9uaWNhbCBTb2NrZXRodWIgQGNvbnRleHQgYXJyYXkgZnJvbSBhIHBsYXRmb3JtIGlkIG9yIGZ1bGwgY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENhbm9uaWNhbENvbnRleHQocGxhdGZvcm06IHN0cmluZyk6IEpzb25MZENvbnRleHQge1xuICAgIGNvbnN0IHBsYXRmb3JtVXJsID0gcGxhdGZvcm0uc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpXG4gICAgICAgID8gcGxhdGZvcm1cbiAgICAgICAgOiBgJHtQTEFURk9STV9DT05URVhUX1BSRUZJWH0ke3BsYXRmb3JtfS92MS5qc29ubGRgO1xuICAgIHJldHVybiBbQVMyX0JBU0VfQ09OVEVYVF9VUkwsIFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLCBwbGF0Zm9ybVVybF07XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcGxhdGZvcm0gSUQgZnJvbSBhIGNhbm9uaWNhbCBAY29udGV4dCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYXRmb3JtSWRGcm9tQ29udGV4dChcbiAgICBjb250ZXh0OiBzdHJpbmdbXSB8IHVua25vd24sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBlbnRyeS5zdGFydHNXaXRoKFBMQVRGT1JNX0NPTlRFWFRfUFJFRklYKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBlbnRyeS5zbGljZShQTEFURk9STV9DT05URVhUX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3Qgc2xhc2hJZHggPSByZXN0LmluZGV4T2YoXCIvXCIpO1xuICAgICAgICAgICAgaWYgKHNsYXNoSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN0LnNsaWNlKDAsIHNsYXNoSWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB1bmtub3duIEBjb250ZXh0IGlucHV0IGludG8gYSBzdHJpbmctb25seSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29udGV4dEFycmF5KHZhbHVlOiB1bmtub3duKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgc3RyaW5nID0+IHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIik7XG59XG5cbi8qKlxuICogR2V0IGEgbm9ybWFsaXplZCBAY29udGV4dCBhcnJheSBmcm9tIGFuIGFjdGl2aXR5IHN0cmVhbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRBcnJheShtc2c6IEFjdGl2aXR5U3RyZWFtKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvbnRleHRBcnJheShtc2dbXCJAY29udGV4dFwiXSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwbGF0Zm9ybSBjb250ZXh0IFVSTCBhbmQgaXRzIHNjaGVtYSBJRHMgZm9yIHJ1bnRpbWUgcmVzb2x1dGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbiAgICBzY2hlbWFJZDogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzU2NoZW1hSWQ6IHN0cmluZyxcbikge1xuICAgIHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZC5zZXQocGxhdGZvcm1Db250ZXh0VXJsLCBwbGF0Zm9ybUlkKTtcbiAgICBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkLnNldChwbGF0Zm9ybUNvbnRleHRVcmwsIHNjaGVtYUlkKTtcbiAgICBwbGF0Zm9ybUNvbnRleHRUb0NyZWRlbnRpYWxzU2NoZW1hSWQuc2V0KFxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRVcmwsXG4gICAgICAgIGNyZWRlbnRpYWxzU2NoZW1hSWQsXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBzaW5nbGUgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBjb250ZXh0IFVSTCBmcm9tIGEgbWVzc2FnZS5cbiAqIFJldHVybnMgbnVsbCB3aGVuIHRoZXJlIGFyZSB6ZXJvIG9yIG11bHRpcGxlIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZzogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IGdldENvbnRleHRBcnJheShtc2cpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZXh0cy5maWx0ZXIoKGNvbnRleHRVcmwpID0+XG4gICAgICAgIHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZC5oYXMoY29udGV4dFVybCksXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzWzBdO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwbGF0Zm9ybSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBtZXNzYWdlIHNjaGVtYSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybChcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dFRvU2NoZW1hSWQuZ2V0KHBsYXRmb3JtQ29udGV4dFVybCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNyZWRlbnRpYWxzIHNjaGVtYSBJRCBmcm9tIGEgcGxhdGZvcm0gY29udGV4dCBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVkZW50aWFsc1NjaGVtYUlkQnlDb250ZXh0VXJsKFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9DcmVkZW50aWFsc1NjaGVtYUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuIiwKICAgICJpbXBvcnQgQWp2LCB7IHR5cGUgVmFsaWRhdGVGdW5jdGlvbiB9IGZyb20gXCJhanZcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBFeGFtcGxlc0NvbmZpZyxcbiAgICBFeGFtcGxlc0NvbmZpZ1NjaGVtYSxcbn0gZnJvbSBcIi4vc2NoZW1hcy9leGFtcGxlcy1jb25maWcuanNcIjtcblxuY29uc3QgYWp2ID0gbmV3IEFqdih7IHN0cmljdFR5cGVzOiBmYWxzZSwgYWxsRXJyb3JzOiB0cnVlIH0pO1xubGV0IHZhbGlkYXRvcjogVmFsaWRhdGVGdW5jdGlvbjxFeGFtcGxlc0NvbmZpZz4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV4YW1wbGVzQ29uZmlnKFxuICAgIGNvbmZpZzogdW5rbm93bixcbik6IGNvbmZpZyBpcyBFeGFtcGxlc0NvbmZpZyB7XG4gICAgdmFsaWRhdG9yID8/PSBhanYuY29tcGlsZTxFeGFtcGxlc0NvbmZpZz4oRXhhbXBsZXNDb25maWdTY2hlbWEpO1xuICAgIHJldHVybiB2YWxpZGF0b3IoY29uZmlnKTtcbn1cblxuZXhwb3J0IHsgRXhhbXBsZXNDb25maWdTY2hlbWEgfTtcbmV4cG9ydCB0eXBlIHsgRXhhbXBsZXNDb25maWcgfTtcbiIsCiAgICAiLy8gVGhlIHNoYXJlZCBhY3Rvci90YXJnZXQgZW50aXR5IHZvY2FidWxhcnkuIENvbnRlbnQgb2JqZWN0IHR5cGVzIChtZXNzYWdlLFxuLy8gcHJlc2VuY2UsIGF0dGVuZGFuY2UsIHJvb20taW5mbywgdG9waWMsIOKApikgYXJlIG93bmVkIGJ5IGVhY2ggcGxhdGZvcm0nc1xuLy8gYG1lc3NhZ2VzYCAoaW5ib3VuZCkgYW5kIGByZXNwb25zZXNgIChvdXRib3VuZCkgc2NoZW1hczsgdGhlIGJhc2UgZW52ZWxvcGUgbm9cbi8vIGxvbmdlciBlbnVtZXJhdGVzIGEgZ2xvYmFsIG9iamVjdCB2b2NhYnVsYXJ5LlxuZXhwb3J0IGNvbnN0IE9iamVjdFR5cGVzU2NoZW1hID0ge1xuICAgIGZlZWQ6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJmZWVkXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXJpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dGhvcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmF2aWNvbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBwZXJzb246IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wicGVyc29uXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgcm9vbToge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJyb29tXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgc2VydmljZToge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJzZXJ2aWNlXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgcGxhdGZvcm06IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wicGxhdGZvcm1cIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICB3ZWJzaXRlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImlyaVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJ3ZWJzaXRlXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYWRkcmVzczoge1xuICAgICAgICByZXF1aXJlZDogW1widHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wiYWRkcmVzc1wiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImlyaVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJjYWxlbmRhclwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGVudW06IFtcImV2ZW50XCIsIFwidGFza1wiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYWRkcmVzc0Jvb2s6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImlyaVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJhZGRyZXNzQm9va1wiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbi8vIEludGVybmFsIEFTIG9iamVjdCB0eXBlcyByZXNlcnZlZCBmb3IgU29ja2V0aHViIElQQy9ob3VzZWtlZXBpbmcuXG5leHBvcnQgY29uc3QgSW50ZXJuYWxPYmplY3RUeXBlc0xpc3QgPSBbXCJwbGF0Zm9ybVwiLCBcImhlYXJ0YmVhdFwiXTtcbmV4cG9ydCBjb25zdCBPYmplY3RUeXBlc0xpc3QgPSBPYmplY3Qua2V5cyhPYmplY3RUeXBlc1NjaGVtYSk7XG5leHBvcnQgY29uc3QgQWN0b3JUeXBlc0xpc3QgPSBbXG4gICAgXCJwZXJzb25cIixcbiAgICBcInJvb21cIixcbiAgICBcInNlcnZpY2VcIixcbiAgICBcImZlZWRcIixcbiAgICBcIndlYnNpdGVcIixcbiAgICBcInBsYXRmb3JtXCIsXG5dO1xuZXhwb3J0IGNvbnN0IFRhcmdldFR5cGVzTGlzdCA9IFtcbiAgICBcInBlcnNvblwiLFxuICAgIFwicm9vbVwiLFxuICAgIFwic2VydmljZVwiLFxuICAgIFwiZmVlZFwiLFxuICAgIFwid2Vic2l0ZVwiLFxuICAgIFwicGxhdGZvcm1cIixcbiAgICBcImFkZHJlc3NcIixcbiAgICBcImNhbGVuZGFyXCIsXG4gICAgXCJhZGRyZXNzQm9va1wiLFxuXTtcbmV4cG9ydCBjb25zdCB2YWxpZEFjdG9yUmVmcyA9IEFjdG9yVHlwZXNMaXN0Lm1hcCgodHlwZSkgPT4gKHtcbiAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy90eXBlLyR7dHlwZX1gLFxufSkpO1xuZXhwb3J0IGNvbnN0IHZhbGlkVGFyZ2V0UmVmcyA9IFRhcmdldFR5cGVzTGlzdC5tYXAoKHR5cGUpID0+ICh7XG4gICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvdHlwZS8ke3R5cGV9YCxcbn0pKTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgICBBUzJfQkFTRV9DT05URVhUX1VSTCxcbiAgICBTT0NLRVRIVUJfQkFTRV9DT05URVhUX1VSTCxcbn0gZnJvbSBcIi4uL2NvbnRleHQuanNcIjtcbmltcG9ydCB7XG4gICAgT2JqZWN0VHlwZXNTY2hlbWEsXG4gICAgdmFsaWRBY3RvclJlZnMsXG4gICAgdmFsaWRUYXJnZXRSZWZzLFxufSBmcm9tIFwiLi4vaGVscGVycy9vYmplY3RzLmpzXCI7XG5cbmNvbnN0IGNvbnRleHRTY2hlbWEgPSB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1pbkl0ZW1zOiAzLFxuICAgIG1heEl0ZW1zOiAzLFxuICAgIGl0ZW1zOiB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBhbGxPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluczoge1xuICAgICAgICAgICAgICAgIGNvbnN0OiBBUzJfQkFTRV9DT05URVhUX1VSTCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5zOiB7XG4gICAgICAgICAgICAgICAgY29uc3Q6IFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdLFxufTtcbmNvbnN0IHR5cGVTY2hlbWEgPSB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbn07XG5cbmV4cG9ydCBjb25zdCBBY3Rpdml0eVN0cmVhbVNjaGVtYSA9IHtcbiAgICAkaWQ6IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdi9hY3Rpdml0eS1zdHJlYW0uanNvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNjaGVtYSBmb3IgU29ja2V0aHViIEFjdGl2aXR5IFN0cmVhbXNcIixcblxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgcmVxdWlyZWQ6IFtcIkBjb250ZXh0XCIsIFwidHlwZVwiLCBcImFjdG9yXCJdLFxuICAgIC8vIFJlamVjdCB1bmtub3duIHRvcC1sZXZlbCBtZXNzYWdlIHByb3BlcnRpZXMuIEluYm91bmQgbWVzc2FnZXMgY2Fycnkgb25seVxuICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGJlbG93OyBgZXJyb3JgL2BzZXNzaW9uU2VjcmV0YCBhcmUgYWRkZWQgc2VydmVyLXNpZGUgYWZ0ZXJcbiAgICAvLyB2YWxpZGF0aW9uLCBzbyB0aGV5IG5ldmVyIHJlYWNoIHRoaXMgc2NoZW1hLlxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFwiQGNvbnRleHRcIjogY29udGV4dFNjaGVtYSxcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHR5cGVTY2hlbWEsXG4gICAgICAgIGFjdG9yOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgb25lT2Y6IHZhbGlkQWN0b3JSZWZzLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBvbmVPZjogdmFsaWRUYXJnZXRSZWZzLFxuICAgICAgICB9LFxuICAgICAgICAvLyBPYmplY3Qgc2hhcGUgaXMgdmFsaWRhdGVkIHBlci1wbGF0Zm9ybSBieSBlYWNoIHBsYXRmb3JtJ3MgYG1lc3NhZ2VzYFxuICAgICAgICAvLyAoaW5ib3VuZCkgYW5kIGByZXNwb25zZXNgIChvdXRib3VuZCkgc2NoZW1hcywgd2hpY2ggb3duIHRoZWlyIG9iamVjdFxuICAgICAgICAvLyB2b2NhYnVsYXJ5LiBUaGUgYmFzZSBlbnZlbG9wZSBvbmx5IHJlcXVpcmVzIGl0IHRvIGJlIGFuIG9iamVjdC5cbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9LFxuICAgICAgICBwdWJsaXNoZWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGF0ZS10aW1lXCIsXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGRlZmluaXRpb25zOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdFR5cGVzU2NoZW1hLFxuICAgIH0sXG59O1xuIiwKICAgICIvKipcbiAqIFN1YnN0aXR1dGUgdGhlIGAvdi9gIHBsYWNlaG9sZGVyIHNlZ21lbnQgaW4gYSBjYW5vbmljYWwgc2NoZW1hIGAkaWRgIHdpdGggYVxuICogY29uY3JldGUgcGFja2FnZSB2ZXJzaW9uLCBlLmcuXG4gKiBgaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdi9zb2NrZXRodWItY29uZmlnLmpzb25gIOKGklxuICogYGh0dHBzOi8vc29ja2V0aHViLm9yZy9zY2hlbWFzLzMuMC4wL3NvY2tldGh1Yi1jb25maWcuanNvbmAuXG4gKlxuICogU2hhcmVkIGJ5IHRoZSBidWlsZCdzIEpTT04tc2NoZW1hIGV4cG9ydCAod2hpY2ggc3RhbXBzIHRoZSB2ZXJzaW9uIGludG8gdGhlXG4gKiBwdWJsaXNoZWQgYXJ0aWZhY3RzKSBhbmQgYnkgYFNvY2tldGh1YkNvbmZpZ1NjaGVtYUlkYCwgc28gdGhlIHR3byBuZXZlclxuICogZHJpZnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uZWRTY2hlbWFJZChpZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBpZC5yZXBsYWNlKFwiL3YvXCIsIGAvJHt2ZXJzaW9ufS9gKTtcbn1cbiIsCiAgICAiaW1wb3J0IHBhY2thZ2VKc29uIGZyb20gXCIuLi8uLi9wYWNrYWdlLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCB7IHZlcnNpb25lZFNjaGVtYUlkIH0gZnJvbSBcIi4uL3NjaGVtYS1pZC5qc1wiO1xuXG5leHBvcnQgY29uc3QgU29ja2V0aHViQ29uZmlnU2NoZW1hID0ge1xuICAgICRpZDogXCJodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy92L3NvY2tldGh1Yi1jb25maWcuanNvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNvY2tldGh1YiBDb25maWcgU2NoZW1hXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICByZXF1aXJlZDogW1wicGxhdGZvcm1zXCJdLFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICRzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICBcIkVuYWJsZSB0aGUgZXhhbXBsZXMgcGFnZXMgc2VydmVkIGF0IFtob3N0XTpbcG9ydF0vZXhhbXBsZXNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaW5mbzoge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc3BsYXkgU29ja2V0aHViIHJ1bnRpbWUgaW5mb3JtYXRpb25cIixcbiAgICAgICAgfSxcbiAgICAgICAgbG9nZ2luZzoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBsZXZlbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJlcnJvclwiLCBcIndhcm5cIiwgXCJpbmZvXCIsIFwiZGVidWdcIl0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiaW5mb1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsZUxldmVsOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGVudW06IFtcImVycm9yXCIsIFwid2FyblwiLCBcImluZm9cIiwgXCJkZWJ1Z1wiXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJkZWJ1Z1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcInNvY2tldGh1Yi5sb2dcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdGZvcm1zOiB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUGxhdGZvcm0gcGFja2FnZXMgdG8gbG9hZFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogW1xuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1jYXJkZGF2XCIsXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLWNhbGRhdlwiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1kdW1teVwiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1mZWVkc1wiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1pcmNcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tbWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0teG1wcFwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGVyLXBsYXRmb3JtIGNvbmZpZywga2V5ZWQgYnkgcGFja2FnZSBuYW1lLiBFYWNoIHBsYXRmb3JtJ3MgZW50cnkgaXNcbiAgICAgICAgLy8gdmFsaWRhdGVkIGFnYWluc3QgaXRzIGRlY2xhcmVkIGtleXM7IGVudHJpZXMgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFcbiAgICAgICAgLy8gZGVjbGFyZWQgc2hhcGUgaGVyZSBhcmUgcGFzc2VkIHRocm91Z2ggdW52YWxpZGF0ZWQuXG4gICAgICAgIHBhY2thZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgIFwiUGVyLXBsYXRmb3JtIGNvbmZpZyBrZXllZCBieSBwYWNrYWdlIG5hbWUsIHZhbGlkYXRlZCBhZ2FpbnN0IFwiICtcbiAgICAgICAgICAgICAgICBcImVhY2ggcGxhdGZvcm0ncyBjb25maWcgc2NoZW1hIGFuZCBmb3J3YXJkZWQgdG8gaXRzIGNoaWxkIHByb2Nlc3NcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tY2FyZGRhdlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdFRpbWVvdXRNczogeyB0eXBlOiBcImludGVnZXJcIiwgbWluaW11bTogMSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dQcml2YXRlQWRkcmVzc2VzOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0luc2VjdXJlSHR0cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3k6IHsgdHlwZTogXCJpbnRlZ2VyXCIsIG1pbmltdW06IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1jYWxkYXZcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHsgdHlwZTogXCJpbnRlZ2VyXCIsIG1pbmltdW06IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93UHJpdmF0ZUFkZHJlc3NlczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dJbnNlY3VyZUh0dHA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tZHVtbXlcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyZWV0aW5nOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHQ6IFwiSGVsbG9cIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLWZlZWRzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0VGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93UHJpdmF0ZUFkZHJlc3NlczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3k6IHsgdHlwZTogXCJpbnRlZ2VyXCIsIG1pbmltdW06IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1pcmNcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLXhtcHBcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0TXM6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLW1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ByaXZhdGVBZGRyZXNzZXM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB7IHR5cGU6IFwiaW50ZWdlclwiLCBtaW5pbXVtOiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHR0bE1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDYwNDgwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlNsaWRpbmcgVFRMIGluIG1pbGxpc2Vjb25kcyBmb3IgcGVyLXNlc3Npb24gZW5jcnlwdGVkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGVudGlhbCBrZXlzIGluIFJlZGlzLCByZWZyZXNoZWQgb24gZXZlcnkgc2F2ZSBhbmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWFkLiBBIGJhY2tzdG9wIGFnYWluc3Qga2V5cyBvcnBoYW5lZCBieSBjcmFzaGVzOyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlc3Npb25zIG5vcm1hbGx5IGRlbGV0ZSB0aGVpciBrZXkgb24gZGlzY29ubmVjdC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTaXplIGdlbmVyb3VzbHkg4oCUIGlkbGUgc2Vzc2lvbnMgZG8gbm90IHJlZnJlc2ggaXQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMCBkaXNhYmxlcyBleHBpcnkuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWRlbnRpYWxDaGVjazoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICByZWNvbm5lY3RJcFNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJzb2NrZXRcIiwgXCJwcm94eVwiXSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJzb2NrZXRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByb3h5SGVhZGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwieC1mb3J3YXJkZWQtZm9yXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHB1YmxpYzoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcImh0dHBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhvc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJsb2NhbGhvc3RcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTA1NTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiL1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByYXRlTGltaXRlcjoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB3aW5kb3dNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4UmVxdWVzdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tEdXJhdGlvbk1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDUwMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhDb25uZWN0aW9uc1BlcklwOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTWF4aW11bSBjb25jdXJyZW50IHNvY2tldCBjb25uZWN0aW9ucyBwZXIgY2xpZW50IElQLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBwZXItZXZlbnQgcmF0ZSBsaW1pdGVyIGlzIGtleWVkIGJ5IHNvY2tldCBpZCwgc28gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aXRob3V0IGEgY29ubmVjdGlvbiBjYXAgYSBjbGllbnQgY2FuIGJ5cGFzcyBpdCBieSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9wZW5pbmcgbW9yZSBzb2NrZXRzLiAwIGRpc2FibGVzIHRoZSBjYXAuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBtYXhQbGF0Zm9ybUluc3RhbmNlczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJVcHBlciBib3VuZCBvbiBjb25jdXJyZW50bHkgcnVubmluZyBwbGF0Zm9ybSBpbnN0YW5jZXMgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIoY2hpbGQgcHJvY2Vzc2VzKS4gRWFjaCBwZXJzaXN0ZW50LXBsYXRmb3JtIGFjdG9yIGZvcmtzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXRzIG93biBwcm9jZXNzLCBzbyBhbiB1bmJvdW5kZWQgY291bnQgaXMgYSByZXNvdXJjZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4aGF1c3Rpb24gcmlzayBvbiBwdWJsaWMgaW5zdGFuY2VzLiAwIGRpc2FibGVzIHRoZSBjYXAuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlZGlzOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHVybDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcInJlZGlzOi8vMTI3LjAuMC4xOjYzNzlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEwMDAwLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25uZWN0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNjb25uZWN0VGltZW91dDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiA1MDAwLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJEaXNjb25uZWN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhSZXRyaWVzUGVyUmVxdWVzdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJudW1iZXJcIiwgXCJudWxsXCJdLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsIGFzIG51bWJlciB8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIHBlciByZXF1ZXN0IChudWxsIGZvciBCdWxsTVEgZGVmYXVsdClcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VudHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIGRzbjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJwcm9kdWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWxlYXNlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmFibGVMb2dzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvZ0xldmVsczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bTogW1wiZGVidWdcIiwgXCJpbmZvXCIsIFwid2FyblwiLCBcImVycm9yXCJdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXCJ3YXJuXCIsIFwiZXJyb3JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmFibGVNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJhY2VzU2FtcGxlUmF0ZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiAxLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwLjEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwcm9maWxlU2Vzc2lvblNhbXBsZVJhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbmREZWZhdWx0UGlpOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc29ja2V0aHViOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHBvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTA1NTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBob3N0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwibG9jYWxob3N0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiL3NvY2tldGh1YlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF4UGF5bG9hZEJ5dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAyNjIxNDQsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJNYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgYSBzaW5nbGUgU29ja2V0LklPIG1lc3NhZ2UuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cnVzdFByb3h5OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRXhwcmVzcyAndHJ1c3QgcHJveHknIHNldHRpbmcsIGRlY2lkaW5nIHdoZXRoZXIgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIneC1mb3J3YXJkZWQtZm9yJyBpcyBiZWxpZXZlZCB3aGVuIGRldGVybWluaW5nIGEgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGllbnQncyBJUCBmb3IgSFRUUCByYXRlIGxpbWl0aW5nLiBmYWxzZSB0cnVzdHMgbm8gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm94eTsgYSBudW1iZXIgdHJ1c3RzIHRoYXQgbWFueSBob3BzOyBhIHN0cmluZyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRha2VzIGFuIGFkZHJlc3MsIHN1Ym5ldCBvciBwcmVzZXQgKCdsb29wYmFjaycpLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9ubHkgZW5hYmxlIGJlaGluZCBhIHJldmVyc2UgcHJveHkgdGhhdCBvdmVyd3JpdGVzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGhlIGhlYWRlci4gV2hlbiBsZWZ0IGZhbHNlIHdoaWxlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGVudGlhbENoZWNrLnJlY29ubmVjdElwU291cmNlIGlzICdwcm94eScgYW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGVudGlhbENoZWNrLnByb3h5SGVhZGVyIGlzICd4LWZvcndhcmRlZC1mb3InLCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9uZSBob3AgaXMgdHJ1c3RlZCBzbyBib3RoIHBhdGhzIGFncmVlOyBhIGN1c3RvbSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInByb3h5SGVhZGVyIHJlcXVpcmVzIHNldHRpbmcgdGhpcyBleHBsaWNpdGx5LlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29yczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCIqXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQWxsb3dlZCBDT1JTIG9yaWdpbihzKSBmb3Igc29ja2V0LmlvIGNvbm5lY3Rpb25zIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhbmQgdGhlIEhUVFAgYWN0aW9ucyBlbmRwb2ludC4gJyonIGFsbG93cyBhbnkgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndlYnNpdGUgdG8gY29ubmVjdCB2aXNpdG9ycycgYnJvd3NlcnMgdG8gdGhpcyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5zdGFuY2U7IHB1YmxpYyBkZXBsb3ltZW50cyBzaG91bGQgc2V0IGFuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBsaWNpdCBvcmlnaW4gb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbnMuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBodHRwQWN0aW9uczoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRW5hYmxlIHRoZSBIVFRQIGFjdGlvbnMgZW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCIvc29ja2V0aHViLWh0dHBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhNZXNzYWdlc1BlclJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMjAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhQYXlsb2FkQnl0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMjYyMTQ0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaWRlbXBvdGVuY3lUdGxNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAzMDAwMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0VGltZW91dE1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDMwMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaWRsZVRpbWVvdXRNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAwLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxNTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdGZvcm1IZWFydGJlYXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgaW50ZXJ2YWxNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiA1MDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGltZW91dE1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDE1MDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uZWQgY2Fub25pY2FsIFVSTCBvZiB0aGlzIHNjaGVtYSwgbWF0Y2hpbmcgdGhlIGAkaWRgIHdyaXR0ZW4gaW50b1xuICogdGhlIHB1Ymxpc2hlZCBKU09OIGFydGlmYWN0IChgZGlzdC9zY2hlbWFzL2pzb24vc29ja2V0aHViLWNvbmZpZy5qc29uYCkgYnlcbiAqIHRoZSBidWlsZCdzIHZlcnNpb24gc3Vic3RpdHV0aW9uLiBTdWl0YWJsZSBhcyB0aGUgYCRzY2hlbWFgIHZhbHVlIGluXG4gKiBnZW5lcmF0ZWQgY29uZmlnIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3QgU29ja2V0aHViQ29uZmlnU2NoZW1hSWQgPSB2ZXJzaW9uZWRTY2hlbWFJZChcbiAgICBTb2NrZXRodWJDb25maWdTY2hlbWEuJGlkLFxuICAgIHBhY2thZ2VKc29uLnZlcnNpb24sXG4pO1xuIiwKICAgICJpbXBvcnQgQWp2LCB7IHR5cGUgU2NoZW1hIH0gZnJvbSBcImFqdlwiO1xuaW1wb3J0IGFkZEZvcm1hdHMgZnJvbSBcImFqdi1mb3JtYXRzXCI7XG5pbXBvcnQgYWRkaXRpb25zRm9ybWF0czIwMTkgZnJvbSBcImFqdi1mb3JtYXRzLWRyYWZ0MjAxOVwiO1xuaW1wb3J0IHtcbiAgICBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCxcbiAgICBFUlJPUl9QTEFURk9STV9JRCxcbiAgICBnZXRDcmVkZW50aWFsc1NjaGVtYUlkQnlDb250ZXh0VXJsLFxuICAgIGdldFBsYXRmb3JtSWRCeUNvbnRleHRVcmwsXG4gICAgZ2V0U2NoZW1hSWRCeUNvbnRleHRVcmwsXG4gICAgSU5URVJOQUxfUExBVEZPUk1fQ09OVEVYVF9VUkwsXG4gICAgSU5URVJOQUxfUExBVEZPUk1fSUQsXG4gICAgcmVnaXN0ZXJQbGF0Zm9ybUNvbnRleHQsXG4gICAgcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybCxcbn0gZnJvbSBcIi4vY29udGV4dC5qc1wiO1xuaW1wb3J0IGdldEVycm9yTWVzc2FnZSwge1xuICAgIHR5cGUgVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbn0gZnJvbSBcIi4vaGVscGVycy9lcnJvci1wYXJzZXIuanNcIjtcbmltcG9ydCB7IEFjdG9yVHlwZXNMaXN0LCBUYXJnZXRUeXBlc0xpc3QgfSBmcm9tIFwiLi9oZWxwZXJzL29iamVjdHMuanNcIjtcbmltcG9ydCB7IEFjdGl2aXR5U3RyZWFtU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9hY3Rpdml0eS1zdHJlYW0uanNcIjtcbmltcG9ydCB7IFBsYXRmb3JtU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9wbGF0Zm9ybS5qc1wiO1xuaW1wb3J0IHsgU29ja2V0aHViQ29uZmlnU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hcy9zb2NrZXRodWItY29uZmlnLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5U3RyZWFtIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuY29uc3QgYWp2ID0gbmV3IEFqdih7IHN0cmljdFR5cGVzOiBmYWxzZSwgYWxsRXJyb3JzOiB0cnVlIH0pO1xuYWRkRm9ybWF0cyhhanYgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRGb3JtYXRzPlswXSk7XG5hZGRpdGlvbnNGb3JtYXRzMjAxOShhanYgYXMgdW5rbm93biBhcyBBanYpO1xuXG50eXBlIFNjaGVtYXNEaWN0ID0gUmVjb3JkPHN0cmluZywgU2NoZW1hPjtcblxuY29uc3Qgc2NoZW1hVVJMID0gXCJodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy92MFwiO1xuY29uc3Qgc2NoZW1hczogU2NoZW1hc0RpY3QgPSB7fTtcbmxldCB2YWxpZGF0aW9uRXJyb3JPcHRpb25zOiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zID0ge307XG5sZXQgc3lzdGVtQ29udGV4dHNSZWdpc3RlcmVkID0gZmFsc2U7XG5cbnNjaGVtYXNbYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1zdHJlYW1gXSA9IEFjdGl2aXR5U3RyZWFtU2NoZW1hO1xuXG5mb3IgKGNvbnN0IHVyaSBpbiBzY2hlbWFzKSB7XG4gICAgYWp2LmFkZFNjaGVtYShzY2hlbWFzW3VyaV0sIHVyaSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU3lzdGVtQ29udGV4dChwbGF0Zm9ybUlkOiBzdHJpbmcsIGNvbnRleHRVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICBjb250ZXh0VXJsLFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9tZXNzYWdlc2AsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L2NyZWRlbnRpYWxzYCxcbiAgICApO1xuXG4gICAgY29uc3QgbWVzc2FnZVNjaGVtYVJlZiA9IGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L21lc3NhZ2VzYDtcbiAgICBpZiAoIWFqdi5nZXRTY2hlbWEobWVzc2FnZVNjaGVtYVJlZikpIHtcbiAgICAgICAgYWp2LmFkZFNjaGVtYSh7fSwgbWVzc2FnZVNjaGVtYVJlZik7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlZGVudGlhbHNTY2hlbWFSZWYgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9jcmVkZW50aWFsc2A7XG4gICAgaWYgKCFhanYuZ2V0U2NoZW1hKGNyZWRlbnRpYWxzU2NoZW1hUmVmKSkge1xuICAgICAgICBhanYuYWRkU2NoZW1hKHt9LCBjcmVkZW50aWFsc1NjaGVtYVJlZik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTeXN0ZW1QbGF0Zm9ybUNvbnRleHRzKCk6IHZvaWQge1xuICAgIGlmIChzeXN0ZW1Db250ZXh0c1JlZ2lzdGVyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZWdpc3RlclN5c3RlbUNvbnRleHQoRVJST1JfUExBVEZPUk1fSUQsIEVSUk9SX1BMQVRGT1JNX0NPTlRFWFRfVVJMKTtcbiAgICByZWdpc3RlclN5c3RlbUNvbnRleHQoSU5URVJOQUxfUExBVEZPUk1fSUQsIElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMKTtcbiAgICBzeXN0ZW1Db250ZXh0c1JlZ2lzdGVyZWQgPSB0cnVlO1xufVxuXG5yZWdpc3RlclN5c3RlbVBsYXRmb3JtQ29udGV4dHMoKTtcblxuZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGlvbihzY2hlbWFSZWY6IHN0cmluZywgbXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gYWp2LmdldFNjaGVtYShzY2hlbWFSZWYpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICAgIHJldHVybiBgc2NoZW1hICR7c2NoZW1hUmVmfSBub3QgZm91bmRgO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IobXNnKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgbXNnLFxuICAgICAgICAgICAgdmFsaWRhdG9yLmVycm9ycyxcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KChtc2cgYXMgQWN0aXZpdHlTdHJlYW0pW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgICAgICBjb25zdCBwbGF0Zm9ybUNvbnRleHRVcmwgPSByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKFxuICAgICAgICAgICAgICAgIG1zZyBhcyBBY3Rpdml0eVN0cmVhbSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhdGZvcm1JZCA9XG4gICAgICAgICAgICAgICAgICAgIGdldFBsYXRmb3JtSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKTtcbiAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm1JZCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgWyR7cGxhdGZvcm1JZH1dICR7ZXJyb3JNZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsaWRhdGlvbkVycm9yT3B0aW9ucyhcbiAgICBvcHRpb25zOiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogdm9pZCB7XG4gICAgdmFsaWRhdGlvbkVycm9yT3B0aW9ucyA9IHsgLi4udmFsaWRhdGlvbkVycm9yT3B0aW9ucywgLi4ub3B0aW9ucyB9O1xufVxuXG5sZXQgc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBhanYuY29tcGlsZT4gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogVmFsaWRhdGUgYSAoZnVsbHktbWF0ZXJpYWxpemVkKSBTb2NrZXRodWIgc2VydmVyIGNvbmZpZyBvYmplY3QgYWdhaW5zdCB0aGVcbiAqIGNhbm9uaWNhbCBjb25maWcgc2NoZW1hLiBSZXR1cm5zIFwiXCIgd2hlbiB2YWxpZCwgb3RoZXJ3aXNlIGEgaHVtYW4tcmVhZGFibGVcbiAqIGVycm9yIHN0cmluZy4gVXNlZCBieSB0aGUgc2VydmVyIGF0IHN0YXJ0dXAgc28gYSBtaXMtdHlwZWQgb3IgdW5rbm93biBjb25maWdcbiAqIHZhbHVlIOKAlCBpbmNsdWRpbmcgaW5zaWRlIGEgcGxhdGZvcm0ncyBgcGFja2FnZUNvbmZpZ2AgZW50cnkg4oCUIGZhaWxzIGxvdWRseVxuICogcmF0aGVyIHRoYW4gcmVhY2hpbmcgYSBwbGF0Zm9ybSB3cm9uZy10eXBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU29ja2V0aHViQ29uZmlnKGNvbmZpZzogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKCFzb2NrZXRodWJDb25maWdWYWxpZGF0b3IpIHtcbiAgICAgICAgc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yID0gYWp2LmNvbXBpbGUoU29ja2V0aHViQ29uZmlnU2NoZW1hKTtcbiAgICB9XG4gICAgaWYgKHNvY2tldGh1YkNvbmZpZ1ZhbGlkYXRvcihjb25maWcpKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gYWp2LmVycm9yc1RleHQoc29ja2V0aHViQ29uZmlnVmFsaWRhdG9yLmVycm9ycywge1xuICAgICAgICBkYXRhVmFyOiBcImNvbmZpZ1wiLFxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBY3Rpdml0eVN0cmVhbShtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW1WYWxpZGF0aW9uRXJyb3IgPSBoYW5kbGVWYWxpZGF0aW9uKFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2FjdGl2aXR5LXN0cmVhbWAsXG4gICAgICAgIG1zZyxcbiAgICApO1xuICAgIGlmIChzdHJlYW1WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbVZhbGlkYXRpb25FcnJvcjtcbiAgICB9XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBcImFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgaW4gQGNvbnRleHRcIjtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1hSWQgPSBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpO1xuICAgIGlmICghc2NoZW1hSWQpIHtcbiAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBjb250ZXh0IFVSTCAke3BsYXRmb3JtQ29udGV4dFVybH0gZG9lcyBub3QgaGF2ZSBhIHJlZ2lzdGVyZWQgbWVzc2FnZSBzY2hlbWFgO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlVmFsaWRhdGlvbihzY2hlbWFJZCwgbXNnKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBvdXRib3VuZCBwbGF0Zm9ybSByZXNwb25zZSBhZ2FpbnN0IHRoYXQgcGxhdGZvcm0ncyBgcmVzcG9uc2VzYFxuICogc2NoZW1hLiBSZXR1cm5zIFwiXCIgd2hlbiB0aGUgcGxhdGZvcm0gaGFzIG5vIHJlc3BvbnNlcyBzY2hlbWEgcmVnaXN0ZXJlZCAoeWV0KSxcbiAqIHNvIG91dGJvdW5kIHZhbGlkYXRpb24gY2FuIGJlIGFkb3B0ZWQgcGxhdGZvcm0tYnktcGxhdGZvcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFjdGl2aXR5U3RyZWFtUmVzcG9uc2UobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybUlkID0gZ2V0UGxhdGZvcm1JZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpO1xuICAgIGlmICghcGxhdGZvcm1JZCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VzU2NoZW1hSWQgPSBgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybUlkfS9yZXNwb25zZXNgO1xuICAgIGlmICghYWp2LmdldFNjaGVtYShyZXNwb25zZXNTY2hlbWFJZCkpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVWYWxpZGF0aW9uKHJlc3BvbnNlc1NjaGVtYUlkLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDcmVkZW50aWFscyhtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobXNnW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgIHJldHVybiBcImNyZWRlbnRpYWwgYWN0aXZpdHkgc3RyZWFtcyBtdXN0IGhhdmUgYW4gQGNvbnRleHQgc2V0XCI7XG4gICAgfVxuICAgIGlmIChtc2cudHlwZSAhPT0gXCJjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgIHJldHVybiBcImNyZWRlbnRpYWwgYWN0aXZpdHkgc3RyZWFtcyBtdXN0IGhhdmUgY3JlZGVudGlhbHMgc2V0IGFzIHR5cGVcIjtcbiAgICB9XG4gICAgY29uc3Qgc3RyZWFtVmFsaWRhdGlvbkVycm9yID0gaGFuZGxlVmFsaWRhdGlvbihcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1zdHJlYW1gLFxuICAgICAgICBtc2csXG4gICAgKTtcbiAgICBpZiAoc3RyZWFtVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1WYWxpZGF0aW9uRXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtQ29udGV4dFVybCA9IHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwobXNnKTtcbiAgICBpZiAoIXBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICByZXR1cm4gXCJjcmVkZW50aWFsIGFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgaW4gQGNvbnRleHRcIjtcbiAgICB9XG4gICAgY29uc3QgY3JlZGVudGlhbHNTY2hlbWFJZCA9XG4gICAgICAgIGdldENyZWRlbnRpYWxzU2NoZW1hSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKTtcbiAgICBpZiAoIWNyZWRlbnRpYWxzU2NoZW1hSWQpIHtcbiAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBjb250ZXh0IFVSTCAke3BsYXRmb3JtQ29udGV4dFVybH0gZG9lcyBub3QgaGF2ZSBhIHJlZ2lzdGVyZWQgY3JlZGVudGlhbHMgc2NoZW1hYDtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZVZhbGlkYXRpb24oY3JlZGVudGlhbHNTY2hlbWFJZCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGxhdGZvcm1TY2hlbWEoc2NoZW1hOiBTY2hlbWEpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbGlkYXRlID0gYWp2LmNvbXBpbGUoUGxhdGZvcm1TY2hlbWEpO1xuICAgIC8vIHZhbGlkYXRlIHNjaGVtYSBwcm9wZXJ0eVxuICAgIGNvbnN0IGVyciA9IHZhbGlkYXRlKHNjaGVtYSk7XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGUuZXJyb3JzWzBdO1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGAke3ZhbGlkYXRpb25FcnJvci5pbnN0YW5jZVBhdGh9ICR7dmFsaWRhdGlvbkVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvci5rZXl3b3JkID09PSBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYDogJHt2YWxpZGF0aW9uRXJyb3IucGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgcGxhdGZvcm0gc2NoZW1hIGZhaWxlZCB0byB2YWxpZGF0ZTogJHttZXNzYWdlfWA7XG4gICAgfVxuICAgIGNvbnN0IHBsYXRmb3JtID0gc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGxhdGZvcm0ubWVzc2FnZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IG1lc3NhZ2VzPy5wcm9wZXJ0aWVzIGFzXG4gICAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGVjbGFyZWRUeXBlcyA9IChyb290OiB1bmtub3duKTogU2V0PHN0cmluZz4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgdmlzaXQgPSAodmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5jb25zdCA9PT0gXCJzdHJpbmdcIikgcmVzdWx0LmFkZChub2RlLmNvbnN0KTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUuZW51bSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygbm9kZS5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikgcmVzdWx0LmFkZChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub2RlUHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcyBhc1xuICAgICAgICAgICAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZpc2l0KG5vZGVQcm9wZXJ0aWVzPy50eXBlKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5d29yZCBvZiBbXCJhbGxPZlwiLCBcImFueU9mXCIsIFwib25lT2ZcIl0gYXMgY29uc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmFuY2hlcyA9IG5vZGVba2V5d29yZF07XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnJhbmNoZXMpKSBicmFuY2hlcy5mb3JFYWNoKHZpc2l0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmlzaXQocm9vdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgYWxsb3dlZF0gb2YgW1xuICAgICAgICBbXCJhY3RvclwiLCBBY3RvclR5cGVzTGlzdF0sXG4gICAgICAgIFtcInRhcmdldFwiLCBUYXJnZXRUeXBlc0xpc3RdLFxuICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBbLi4uZGVjbGFyZWRUeXBlcyhwcm9wZXJ0aWVzPy5bcHJvcGVydHldKV0uZmlsdGVyKFxuICAgICAgICAgICAgKHR5cGUpID0+ICFhbGxvd2VkLmluY2x1ZGVzKHR5cGUpLFxuICAgICAgICApO1xuICAgICAgICBpZiAodW5zdXBwb3J0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBzY2hlbWEgJHtwcm9wZXJ0eX0gdHlwZXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIHRoZSBzaGFyZWQgQWN0aXZpdHlTdHJlYW1zIGVudmVsb3BlOiAke3Vuc3VwcG9ydGVkLmpvaW4oXCIsIFwiKX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGxhdGZvcm1TY2hlbWEoc2NoZW1hOiBTY2hlbWEsIHBsYXRmb3JtX3R5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtX3R5cGV9YDtcbiAgICBpZiAoIWFqdi5nZXRTY2hlbWEoc2NoZW1hUmVmKSkge1xuICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgc2NoZW1hUmVmKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybVNjaGVtYShwbGF0Zm9ybV90eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYWp2LmdldFNjaGVtYShgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybV90eXBlfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGxhdGZvcm1Db250ZXh0KFxuICAgIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbikge1xuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRVcmwsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L21lc3NhZ2VzYCxcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vY3JlZGVudGlhbHNgLFxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGxhdGZvcm1JZChtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0UGxhdGZvcm1JZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpID8/IG51bGw7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRXJyb3JPYmplY3QgfSBmcm9tIFwiYWp2XCI7XG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWN0b3JUeXBlc0xpc3QsIE9iamVjdFR5cGVzTGlzdCwgVGFyZ2V0VHlwZXNMaXN0IH0gZnJvbSBcIi4vb2JqZWN0cy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvck9wdGlvbnMge1xuICAgIGV4Y2x1ZGVUeXBlcz86IEFycmF5PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBUeXBlQnJlYWtkb3duIHtcbiAgICBhY3RvcjogQXJyYXk8c3RyaW5nPjtcbiAgICBvYmplY3Q6IEFycmF5PHN0cmluZz47XG4gICAgdGFyZ2V0OiBBcnJheTxzdHJpbmc+O1xufVxuXG5mdW5jdGlvbiBwYXJzZU1zZyhlcnJvcjogRXJyb3JPYmplY3QpOiBzdHJpbmcge1xuICAgIGxldCBlcnIgPSBgJHtcbiAgICAgICAgZXJyb3IuaW5zdGFuY2VQYXRoID8gZXJyb3IuaW5zdGFuY2VQYXRoIDogXCJhY3Rpdml0eSBzdHJlYW1cIlxuICAgIH06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgIGlmIChlcnJvci5rZXl3b3JkID09PSBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpIHtcbiAgICAgICAgZXJyICs9IGA6ICR7ZXJyb3IucGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX1gO1xuICAgIH0gZWxzZSBpZiAoZXJyb3Iua2V5d29yZCA9PT0gXCJlbnVtXCIpIHtcbiAgICAgICAgZXJyICs9IGA6ICR7ZXJyb3IucGFyYW1zLmFsbG93ZWRWYWx1ZXMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuICAgIHJldHVybiBlcnI7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVMaXN0KG1zZzogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHR5cGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgaWYgKG1zZz8udHlwZSkge1xuICAgICAgICB0eXBlcy5wdXNoKG1zZy50eXBlKTtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkID0gbXNnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiByZWNvcmQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbcHJvcF07XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJ0eXBlXCIgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHR5cGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4uZ2V0VHlwZUxpc3QodmFsdWUgYXMgQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1hVHlwZShlcnJvcjogRXJyb3JPYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjaGVtYVR5cGVSZXMgPSBlcnJvci5zY2hlbWFQYXRoLm1hdGNoKC8jXFwvXFx3K1xcL1xcdytcXC8oW1xcdy1dKylcXC8vKTtcbiAgICByZXR1cm4gc2NoZW1hVHlwZVJlcyA/IHNjaGVtYVR5cGVSZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEVyclR5cGUoZXJyb3I6IEVycm9yT2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcnJUeXBlUmVzID0gZXJyb3IuaW5zdGFuY2VQYXRoLm1hdGNoKC9cXC8oXFx3KykvKTtcbiAgICByZXR1cm4gZXJyVHlwZVJlcyA/IGVyclR5cGVSZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnRzQ291bnQoZXJyb3I6IEVycm9yT2JqZWN0LCB0eXBlczogVHlwZUJyZWFrZG93bik6IG51bWJlciB7XG4gICAgY29uc3Qgc2NoZW1hVHlwZSA9IGdldFNjaGVtYVR5cGUoZXJyb3IpO1xuICAgIGNvbnN0IGVyclR5cGUgPSBnZXRFcnJUeXBlKGVycm9yKTtcbiAgICBpZiAoIWVyclR5cGUpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCB0eXBlTGlzdCA9ICh0eXBlcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+KVtcbiAgICAgICAgZXJyVHlwZVxuICAgIF07XG4gICAgaWYgKCF0eXBlTGlzdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICghc2NoZW1hVHlwZSB8fCAhdHlwZUxpc3QuaW5jbHVkZXMoc2NoZW1hVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IGVycm9yLmluc3RhbmNlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgcmV0dXJuIHBhcnRzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZXMobXNnOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0KTogVHlwZUJyZWFrZG93biB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KChtc2cgYXMgQWN0aXZpdHlTdHJlYW0pW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3RvcjogW10sXG4gICAgICAgICAgICB0YXJnZXQ6IFtdLFxuICAgICAgICAgICAgb2JqZWN0OiBnZXRUeXBlTGlzdChtc2cpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmVhbSA9IG1zZyBhcyBBY3Rpdml0eVN0cmVhbTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhY3RvcjogZ2V0VHlwZUxpc3Qoc3RyZWFtLmFjdG9yKSxcbiAgICAgICAgdGFyZ2V0OiBnZXRUeXBlTGlzdChzdHJlYW0udGFyZ2V0KSxcbiAgICAgICAgb2JqZWN0OiBzdHJlYW0ub2JqZWN0ID8gZ2V0VHlwZUxpc3Qoc3RyZWFtLm9iamVjdCkgOiBbXSxcbiAgICB9O1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyB0aGUgZXJyb3JzIGFycmF5IGZyb20gYWp2LCBhbmQgbWFrZXMgYSBzZXJpZXMgb2YgZmlsdGVyaW5nIGRlY2lzaW9ucyB0b1xuICogdHJ5IHRvIGFycml2ZSBhdCB0aGUgbW9zdCB1c2VmdWwgZXJyb3IuXG4gKiBAcGFyYW0gbXNnXG4gKiBAcGFyYW0gZXJyb3JzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoXG4gICAgbXNnOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0LFxuICAgIGVycm9yczogQXJyYXk8RXJyb3JPYmplY3Q+LFxuICAgIG9wdGlvbnM/OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlcyA9IGdldFR5cGVzKG1zZyk7XG4gICAgbGV0IGRlZXBlc3RfZW50cnkgPSAwO1xuICAgIGxldCBoaWdoZXN0X2RlcHRoID0gLTE7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJ0c0NvdW50ID0gZ2V0UGFydHNDb3VudChlcnJvcnNbaV0sIHR5cGVzKTtcbiAgICAgICAgaWYgKHBhcnRzQ291bnQgPiBoaWdoZXN0X2RlcHRoKSB7XG4gICAgICAgICAgICBoaWdoZXN0X2RlcHRoID0gcGFydHNDb3VudDtcbiAgICAgICAgICAgIGRlZXBlc3RfZW50cnkgPSBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpZ2hlc3RfZGVwdGggPj0gMFxuICAgICAgICA/IHBhcnNlTXNnKGVycm9yc1tkZWVwZXN0X2VudHJ5XSlcbiAgICAgICAgOiBjb21wb3NlRmluYWxFcnJvcihlcnJvcnNbZXJyb3JzLmxlbmd0aCAtIDFdLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyVHlwZUxpc3QoXG4gICAgdHlwZXM6IEFycmF5PHN0cmluZz4sXG4gICAgb3B0aW9ucz86IFZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIW9wdGlvbnM/LmV4Y2x1ZGVUeXBlcyB8fCBvcHRpb25zLmV4Y2x1ZGVUeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cbiAgICBjb25zdCBleGNsdWRlID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVUeXBlcyk7XG4gICAgcmV0dXJuIHR5cGVzLmZpbHRlcigodHlwZSkgPT4gIWV4Y2x1ZGUuaGFzKHR5cGUpKTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZUZpbmFsRXJyb3IoXG4gICAgZXJyb3I6IEVycm9yT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgICAvLyBpZiB3ZSBoYXZlIHlldCB0byBidWlsZCBhbiBlcnJvciBtZXNzYWdlLCBhc3N1bWUgdGhpcyBpcyBhbiBpbnZhbGlkIHR5cGUgdmFsdWUgKG9uZU9mKSxcbiAgICAvLyB0cnkgdG8gYnVpbGQgYSBsaXN0IG9mIHZhbGlkIHR5cGVzXG4gICAgbGV0IG1zZzogc3RyaW5nO1xuICAgIGlmIChlcnJvci5rZXl3b3JkID09PSBcIm9uZU9mXCIpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VSb290ID0gZXJyb3IuaW5zdGFuY2VQYXRoLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgY29uc3QgcGF0aFNjb3BlZFR5cGVzID1cbiAgICAgICAgICAgIGluc3RhbmNlUm9vdCA9PT0gXCJhY3RvclwiXG4gICAgICAgICAgICAgICAgPyBBY3RvclR5cGVzTGlzdFxuICAgICAgICAgICAgICAgIDogaW5zdGFuY2VSb290ID09PSBcInRhcmdldFwiXG4gICAgICAgICAgICAgICAgICA/IFRhcmdldFR5cGVzTGlzdFxuICAgICAgICAgICAgICAgICAgOiBPYmplY3RUeXBlc0xpc3Q7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkVHlwZXMgPSBmaWx0ZXJUeXBlTGlzdChwYXRoU2NvcGVkVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0eXBlc0xpc3QgPVxuICAgICAgICAgICAgZmlsdGVyZWRUeXBlcy5sZW5ndGggPiAwID8gZmlsdGVyZWRUeXBlcyA6IHBhdGhTY29wZWRUeXBlcztcbiAgICAgICAgbXNnID1cbiAgICAgICAgICAgIGAke2Vycm9yLmluc3RhbmNlUGF0aH06ICR7ZXJyb3IubWVzc2FnZX06IGAgK1xuICAgICAgICAgICAgYCR7dHlwZXNMaXN0LmpvaW4oXCIsIFwiKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyA9IGAke1xuICAgICAgICAgICAgZXJyb3IuaW5zdGFuY2VQYXRoID8gZXJyb3IuaW5zdGFuY2VQYXRoIDogXCJhY3Rpdml0eSBzdHJlYW1cIlxuICAgICAgICB9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICB9XG4gICAgaWYgKFwiYWRkaXRpb25hbFByb3BlcnR5XCIgaW4gZXJyb3IucGFyYW1zKSB7XG4gICAgICAgIG1zZyArPSBgOiAke2Vycm9yLnBhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9YDtcbiAgICB9XG4gICAgcmV0dXJuIG1zZztcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmNvbnN0IHN0cmluZ1JlZktleXMgPSB7XG4gICAgYWN0b3I6IFwiaWRcIixcbiAgICB0YXJnZXQ6IFwiaWRcIixcbiAgICBvYmplY3Q6IFwiY29udGVudFwiLFxufSBhcyBjb25zdDtcblxudHlwZSBTdHJlYW1QYXJ0S2V5ID0ga2V5b2YgdHlwZW9mIHN0cmluZ1JlZktleXM7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ1JlZih2YWx1ZTogdW5rbm93biwgcHJpbWFyeUtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4geyBbcHJpbWFyeUtleV06IHZhbHVlIH07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkOiBlbnRyeSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBzdHJpbmcgYWN0b3IvdGFyZ2V0L29iamVjdCByZWZzIGludG8gbWluaW1hbCBBY3Rpdml0eU9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBY3Rpdml0eVN0cmVhbShtZXRhOiBBY3Rpdml0eVN0cmVhbSk6IEFjdGl2aXR5U3RyZWFtIHtcbiAgICBjb25zdCBzdHJlYW06IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAuLi4obWV0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0cmluZ1JlZktleXMpIGFzIFN0cmVhbVBhcnRLZXlbXSkge1xuICAgICAgICBpZiAoa2V5IGluIHN0cmVhbSkge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBub3JtYWxpemVTdHJpbmdSZWYoc3RyZWFtW2tleV0sIHN0cmluZ1JlZktleXNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbSBhcyBBY3Rpdml0eVN0cmVhbTtcbn1cbiIsCiAgICAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL2luZGV4LmpzJ1xuXG5leHBvcnQgeyBFdmVudEVtaXR0ZXIgfVxuZXhwb3J0IGRlZmF1bHQgRXZlbnRFbWl0dGVyXG4iLAogICAgImltcG9ydCB0eXBlIHsgQWN0aXZpdHlTdHJlYW0gfSBmcm9tIFwiQHNvY2tldGh1Yi9zY2hlbWFzXCI7XG5pbXBvcnQge1xuICAgIGFkZFBsYXRmb3JtQ29udGV4dCxcbiAgICBhZGRQbGF0Zm9ybVNjaGVtYSxcbiAgICBub3JtYWxpemVBY3Rpdml0eVN0cmVhbSxcbiAgICByZXNvbHZlUGxhdGZvcm1JZCxcbiAgICB2YWxpZGF0ZUFjdGl2aXR5U3RyZWFtLFxuICAgIHZhbGlkYXRlQ3JlZGVudGlhbHMsXG59IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50ZW1pdHRlcjNcIjtcbmltcG9ydCB0eXBlIHsgU29ja2V0IH0gZnJvbSBcInNvY2tldC5pby1jbGllbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudE1hcHBpbmcge1xuICAgIGNyZWRlbnRpYWxzOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG4gICAgY29ubmVjdDogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0+O1xuICAgIGpvaW46IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbn1cblxudHlwZSBSZXBsYXlFdmVudE1hcCA9IHtcbiAgICBjcmVkZW50aWFsczogQWN0aXZpdHlTdHJlYW07XG4gICAgbWVzc2FnZTogQWN0aXZpdHlTdHJlYW07XG59O1xuXG50eXBlIEluaXRTdGF0ZSA9IFwiaWRsZVwiIHwgXCJpbml0aWFsaXppbmdcIiB8IFwicmVhZHlcIiB8IFwiaW5pdF9lcnJvclwiIHwgXCJjbG9zZWRcIjtcblxudHlwZSBSZWFkeVJlYXNvbiA9IFwiaW5pdGlhbC1jb25uZWN0XCIgfCBcInJlY29ubmVjdFwiIHwgXCJzY2hlbWFzLXVwZGF0ZVwiO1xuXG50eXBlIEluaXRFcnJvclBoYXNlID0gXCJzY2hlbWFzLXJlcXVlc3RcIiB8IFwic2NoZW1hcy1hcHBseVwiIHwgXCJ0aW1lb3V0XCI7XG5cbmludGVyZmFjZSBQZW5kaW5nUmVhZHlXYWl0ZXIge1xuICAgIHJlc29sdmU6IChpbmZvOiBDbGllbnRSZWFkeUluZm8pID0+IHZvaWQ7XG4gICAgcmVqZWN0OiAoZXJyOiBFcnJvcikgPT4gdm9pZDtcbiAgICB0aW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xufVxuXG5pbnRlcmZhY2UgUXVldWVkT3V0Ym91bmRFdmVudCB7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBjb250ZW50OiB1bmtub3duO1xuICAgIGNhbGxiYWNrPzogdW5rbm93bjtcbiAgICBlbnF1ZXVlZEF0OiBudW1iZXI7XG4gICAgc2VxdWVuY2U6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEluaXRpYWxpemF0aW9uQ3ljbGUge1xuICAgIHRva2VuOiBudW1iZXI7XG4gICAgcmVhc29uOiBSZWFkeVJlYXNvbjtcbiAgICBzdGFydGVkQXQ6IG51bWJlcjtcbiAgICByZXBsYXlPblJlYWR5OiBib29sZWFuO1xuICAgIHRpbWVkT3V0OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvY2tldGh1YkNsaWVudE9wdGlvbnMge1xuICAgIGluaXRUaW1lb3V0TXM/OiBudW1iZXI7XG4gICAgbWF4UXVldWVkT3V0Ym91bmQ/OiBudW1iZXI7XG4gICAgbWF4UXVldWVkQWdlTXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDdXN0b21FbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBfZW1pdChzOiBzdHJpbmcsIG86IHVua25vd24sIGM/OiB1bmtub3duKTogdm9pZDtcbiAgICBjb25uZWN0KCk6IHZvaWQ7XG4gICAgZGlzY29ubmVjdCgpOiB2b2lkO1xuICAgIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGxhdGZvcm1SZWdpc3RyeVNjaGVtYXMge1xuICAgIGNyZWRlbnRpYWxzPzogb2JqZWN0O1xuICAgIG1lc3NhZ2VzPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFNlcnZlci1kZWNsYXJlZCBwbGF0Zm9ybSBtZXRhZGF0YSB1c2VkIGJ5IHRoZSBjbGllbnQgZm9yIGNvbnRleHQgZ2VuZXJhdGlvblxuICogYW5kIHJ1bnRpbWUgdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGNvbnRleHRVcmw6IHN0cmluZztcbiAgICBjb250ZXh0VmVyc2lvbjogc3RyaW5nO1xuICAgIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgICB0eXBlczogQXJyYXk8c3RyaW5nPjtcbiAgICBzY2hlbWFzOiBQbGF0Zm9ybVJlZ2lzdHJ5U2NoZW1hcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCB7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICAvLyBTZXJ2ZXItY29tcHV0ZWQgY29udGVudCBmaW5nZXJwcmludCBvZiB0aGUgcmVnaXN0cnkuIFRoZSBjbGllbnQgZWNob2VzXG4gICAgLy8gdGhpcyBvbiByZS1yZXF1ZXN0IHNvIHRoZSBzZXJ2ZXIgY2FuIHJlcGx5IFwidW5jaGFuZ2VkXCIgaW5zdGVhZCBvZlxuICAgIC8vIHJlLXNlbmRpbmcgdGhlIGZ1bGwgc2NoZW1hIHNldCAoIzExMTcpLlxuICAgIGZpbmdlcnByaW50Pzogc3RyaW5nO1xuICAgIC8vIFNldCBieSB0aGUgc2VydmVyIHdoZW4gdGhlIGVjaG9lZCBmaW5nZXJwcmludCBtYXRjaGVzOiB0aGUgcmVnaXN0cnkgaXNcbiAgICAvLyBpZGVudGljYWwgdG8gd2hhdCB0aGUgY2xpZW50IGFscmVhZHkgaG9sZHMsIHNvIG5vIHBsYXRmb3JtcyBhcmUgaW5jbHVkZWQuXG4gICAgdW5jaGFuZ2VkPzogYm9vbGVhbjtcbiAgICBjb250ZXh0cz86IHtcbiAgICAgICAgYXM/OiBzdHJpbmc7XG4gICAgICAgIHNvY2tldGh1Yj86IHN0cmluZztcbiAgICB9O1xuICAgIHBsYXRmb3Jtcz86IEFycmF5PFBsYXRmb3JtUmVnaXN0cnlFbnRyeT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50UmVhZHlJbmZvIHtcbiAgICBzdGF0ZTogXCJyZWFkeVwiO1xuICAgIHJlYXNvbjogUmVhZHlSZWFzb247XG4gICAgc29ja2V0aHViVmVyc2lvbjogc3RyaW5nO1xuICAgIGNvbnRleHRzOiB7XG4gICAgICAgIGFzOiBzdHJpbmc7XG4gICAgICAgIHNvY2tldGh1Yjogc3RyaW5nO1xuICAgIH07XG4gICAgcGxhdGZvcm1zOiBBcnJheTx7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb246IHN0cmluZztcbiAgICAgICAgY29udGV4dFVybDogc3RyaW5nO1xuICAgICAgICBjb250ZXh0VmVyc2lvbjogc3RyaW5nO1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBzdHJpbmc7XG4gICAgICAgIHR5cGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudEluaXRFcnJvciB7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBwaGFzZTogSW5pdEVycm9yUGhhc2U7XG4gICAgcmV0cnlpbmc6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU29ja2V0aHViQ2xpZW50IC0gQ2xpZW50IGxpYnJhcnkgZm9yIFNvY2tldGh1YiBwcm90b2NvbCBnYXRld2F5XG4gKlxuICogQSBKYXZhU2NyaXB0IGNsaWVudCBmb3IgY29ubmVjdGluZyB0byBTb2NrZXRodWIgc2VydmVycy4gUHJvdmlkZXMgYSBoaWdoLWxldmVsXG4gKiBBUEkgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBBY3Rpdml0eVN0cmVhbXMgbWVzc2FnZXMgb3ZlciBTb2NrZXQuSU8sIHdpdGhcbiAqIGF1dG9tYXRpYyBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWNvbm5lY3Rpb24gaGFuZGxpbmcuXG4gKlxuICogU29ja2V0aHViIGFjdHMgYXMgYSBwcm90b2NvbCBnYXRld2F5LCB0cmFuc2xhdGluZyBBY3Rpdml0eVN0cmVhbXMgbWVzc2FnZXMgaW50b1xuICogdmFyaW91cyBwcm90b2NvbHMgKFhNUFAsIElSQywgUlNTLCBldGMuKS4gVGhpcyBjbGllbnQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvblxuICogd2l0aCB0aGUgU29ja2V0aHViIHNlcnZlciwgaW5jbHVkaW5nIGNyZWRlbnRpYWwgbWFuYWdlbWVudCwgY29ubmVjdGlvbiBzdGF0ZSxcbiAqIGFuZCBhdXRvbWF0aWMgcmVjb25uZWN0aW9uLlxuICpcbiAqICMjIEF1dG9tYXRpYyBSZWNvbm5lY3Rpb24gJiBTdGF0ZSBSZXBsYXlcbiAqXG4gKiBUaGlzIGNsaWVudCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdHJhbnNpZW50IG5ldHdvcmsgZGlzY29ubmVjdGlvbnMgYnkgc3RvcmluZ1xuICogY29ubmVjdGlvbiBzdGF0ZSBpbiBtZW1vcnkgYW5kIHJlcGxheWluZyBpdCB3aGVuIHRoZSBzb2NrZXQgcmVjb25uZWN0cy5cbiAqXG4gKiAjIyMgU2VjdXJpdHkgTW9kZWxcbiAqXG4gKiAqKlN0b3JhZ2UgTG9jYXRpb246KipcbiAqIC0gQWxsIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBhcmUgc3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBtZW1vcnkgKGhlYXApXG4gKiAtIE5vdGhpbmcgaXMgcGVyc2lzdGVkIHRvIGxvY2FsU3RvcmFnZSwgc2Vzc2lvblN0b3JhZ2UsIGNvb2tpZXMsIG9yIGRpc2tcbiAqIC0gTWVtb3J5IGlzIGNsZWFyZWQgd2hlbiB0aGUgYnJvd3NlciB0YWIgY2xvc2VzIG9yIHBhZ2UgcmVmcmVzaGVzXG4gKlxuICogKipSZXBsYXkgVHJpZ2dlcnM6KipcbiAqIC0gQXV0b21hdGljIHJlcGxheSBvY2N1cnMgb24gU29ja2V0LklPIHJlY29ubmVjdGlvbiBldmVudHNcbiAqIC0gVHlwaWNhbGx5IHRyaWdnZXJlZCBieSBicmllZiBuZXR3b3JrIGludGVycnVwdGlvbnMgKFdpRmkgc3dpdGNoaW5nLCBtb2JpbGUgbmV0d29yayBibGlwcylcbiAqIC0gRG9lcyBOT1Qgb2NjdXIgb24gcGFnZSByZWZyZXNoIChuZXcgU29ja2V0aHViQ2xpZW50IGluc3RhbmNlID0gZW1wdHkgc3RhdGUpXG4gKlxuICogKipTZXJ2ZXIgUmVzdGFydCBCZWhhdmlvcjoqKlxuICogLSBJZiBzZXJ2ZXIgcmVzdGFydHMsIGNsaWVudCBzb2NrZXQgd2lsbCByZWNvbm5lY3QgYW5kIHJlcGxheSBjcmVkZW50aWFsc1xuICogLSBTZXJ2ZXIgbXVzdCBoYW5kbGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgYXBwcm9wcmlhdGVseSAodmFsaWRhdGUsIHJlamVjdCBzdGFsZSBzZXNzaW9ucywgZXRjLilcbiAqIC0gQXBwbGljYXRpb25zIHNob3VsZCBpbXBsZW1lbnQgcHJvcGVyIHNlc3Npb24gdmFsaWRhdGlvbiBzZXJ2ZXItc2lkZVxuICpcbiAqICoqTGlmZXRpbWU6KipcbiAqIC0gQ3JlZGVudGlhbHMgZXhpc3Qgb25seSBkdXJpbmcgdGhlIGJyb3dzZXIgdGFiJ3MgbGlmZXRpbWVcbiAqIC0gQ2xlYXJlZCBvbiBwYWdlIHJlbG9hZCwgdGFiIGNsb3NlLCBvciBtYW51YWwgZGlzY29ubmVjdFxuICogLSBOb3QgYWNjZXNzaWJsZSBhY3Jvc3MgdGFicyBvciBhZnRlciBicm93c2VyIHJlc3RhcnRcbiAqXG4gKiAqKldoYXQgR2V0cyBSZXBsYXllZDoqKlxuICogLSBDcmVkZW50aWFscyAodXNlcm5hbWUvcGFzc3dvcmQvdG9rZW5zIHNlbnQgdmlhIGNyZWRlbnRpYWxzIGV2ZW50KVxuICogLSBBY3Rpdml0eSBPYmplY3RzIChhY3RvciBkZWZpbml0aW9ucylcbiAqIC0gQ29ubmVjdCBjb21tYW5kcyAocGxhdGZvcm0gY29ubmVjdGlvbnMpXG4gKiAtIEpvaW4gY29tbWFuZHMgKHJvb20vY2hhbm5lbCBqb2lucylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGNsaWVudFxuICogY29uc3Qgc29ja2V0ID0gaW8oJ2h0dHA6Ly9sb2NhbGhvc3Q6MTA1NTAnKTtcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBTb2NrZXRodWJDbGllbnQoc29ja2V0KTtcbiAqXG4gKiAvLyBXYWl0IGZvciBzY2hlbWEgcmVnaXN0cnkgYmVmb3JlIHNlbmRpbmcgbWVzc2FnZXNcbiAqIGF3YWl0IGNsaWVudC5yZWFkeSgpO1xuICpcbiAqIC8vIEJ1aWxkIGNhbm9uaWNhbCBAY29udGV4dCBmb3IgYSBwbGF0Zm9ybVxuICogY29uc3QgY3R4ID0gY2xpZW50LmNvbnRleHRGb3IoJ2lyYycpO1xuICpcbiAqIC8vIFNlbmQgY3JlZGVudGlhbHMgLSB0aGVzZSB3aWxsIGJlIHJlcGxheWVkIG9uIHJlY29ubmVjdGlvblxuICogY2xpZW50LnNvY2tldC5lbWl0KCdjcmVkZW50aWFscycsIHtcbiAqICAgJ0Bjb250ZXh0JzogY3R4LFxuICogICB0eXBlOiAnY3JlZGVudGlhbHMnLFxuICogICBhY3RvcjogeyBpZDogJ3VzZXJAZXhhbXBsZS5jb20nLCB0eXBlOiAncGVyc29uJyB9LFxuICogICBvYmplY3Q6IHsgdHlwZTogJ2NyZWRlbnRpYWxzJywgdXNlcm5hbWU6ICd1c2VyJywgcGFzc3dvcmQ6ICdwYXNzJyB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb2NrZXRodWJDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEluLW1lbW9yeSBzdG9yYWdlIGZvciBjbGllbnQgc3RhdGUgdGhhdCBzaG91bGQgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogU2VjdXJpdHk6IFN0b3JlZCBPTkxZIGluIEphdmFTY3JpcHQgaGVhcCBtZW1vcnkuIE5ldmVyIHBlcnNpc3RlZCB0byBkaXNrLFxuICAgICAqIGxvY2FsU3RvcmFnZSwgb3IgYW55IHBlcm1hbmVudCBzdG9yYWdlLiBDbGVhcmVkIG9uIHBhZ2UgcmVsb2FkLlxuICAgICAqL1xuICAgIHByaXZhdGUgZXZlbnRzOiBFdmVudE1hcHBpbmcgPSB7XG4gICAgICAgIGNyZWRlbnRpYWxzOiBuZXcgTWFwKCksXG4gICAgICAgIGNvbm5lY3Q6IG5ldyBNYXAoKSxcbiAgICAgICAgam9pbjogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgcHJpdmF0ZSBfc29ja2V0OiBTb2NrZXQ7XG4gICAgcHVibGljIHNvY2tldCE6IEN1c3RvbUVtaXR0ZXI7XG4gICAgcHVibGljIGRlYnVnID0gdHJ1ZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPFNvY2tldGh1YkNsaWVudE9wdGlvbnM+O1xuICAgIHByaXZhdGUgcGxhdGZvcm1SZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnk+KCk7XG4gICAgcHJpdmF0ZSBhc0NvbnRleHRVcmw/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzb2NrZXRodWJDb250ZXh0VXJsPzogc3RyaW5nO1xuICAgIHByaXZhdGUgc29ja2V0aHViVmVyc2lvbj86IHN0cmluZztcbiAgICBwcml2YXRlIGluaXRTdGF0ZTogSW5pdFN0YXRlID0gXCJpZGxlXCI7XG4gICAgcHJpdmF0ZSBoYXNSZWFkeU9uY2UgPSBmYWxzZTtcbiAgICBwcml2YXRlIGluaXRDeWNsZT86IEluaXRpYWxpemF0aW9uQ3ljbGU7XG4gICAgcHJpdmF0ZSBpbml0VG9rZW5Db3VudGVyID0gMDtcbiAgICBwcml2YXRlIGluaXRUaW1lb3V0VGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICBwcml2YXRlIHdhaXRpbmdXYXJuaW5nVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gICAgcHJpdmF0ZSB3YWl0aW5nV2FybmluZ0ludGVydmFsTXMgPSAxMDAwMDtcbiAgICBwcml2YXRlIHJlYWR5V2FpdGVyczogQXJyYXk8UGVuZGluZ1JlYWR5V2FpdGVyPiA9IFtdO1xuICAgIHByaXZhdGUgb3V0Ym91bmRRdWV1ZTogQXJyYXk8UXVldWVkT3V0Ym91bmRFdmVudD4gPSBbXTtcbiAgICBwcml2YXRlIG91dGJvdW5kU2VxdWVuY2UgPSAwO1xuICAgIHByaXZhdGUgcmVnaXN0cnlGaW5nZXJwcmludD86IHN0cmluZztcbiAgICBwcml2YXRlIGxhdGVzdFJlYWR5SW5mbz86IENsaWVudFJlYWR5SW5mbztcblxuICAgIGNvbnN0cnVjdG9yKHNvY2tldDogU29ja2V0LCBvcHRpb25zOiBTb2NrZXRodWJDbGllbnRPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvY2tldGh1YkNsaWVudCByZXF1aXJlcyBhIHNvY2tldC5pbyBpbnN0YW5jZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGluaXRUaW1lb3V0TXM6IG9wdGlvbnMuaW5pdFRpbWVvdXRNcyA/PyA1MDAwLFxuICAgICAgICAgICAgbWF4UXVldWVkT3V0Ym91bmQ6IG9wdGlvbnMubWF4UXVldWVkT3V0Ym91bmQgPz8gMTAwMCxcbiAgICAgICAgICAgIG1heFF1ZXVlZEFnZU1zOiBvcHRpb25zLm1heFF1ZXVlZEFnZU1zID8/IDMwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc29ja2V0ID0gdGhpcy5jcmVhdGVQdWJsaWNFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTb2NrZXRJT0hhbmRsZXJzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvY2tldC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAodGhpcy5zb2NrZXQgYXMgdW5rbm93biBhcyB7IGlkPzogc3RyaW5nIH0pLmlkID0gdGhpcy5fc29ja2V0LmlkO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjb25uZWN0XCIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEluaXRpYWxpemF0aW9uKFwiaW5pdGlhbC1jb25uZWN0XCIsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgc3RvcmVkIGNyZWRlbnRpYWxzIHRvIHByZXZlbnQgYXV0b21hdGljIHJlcGxheSBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCBzdG9yZWQgY3JlZGVudGlhbHMgZnJvbSBtZW1vcnkuIFVzZWZ1bCBmb3JcbiAgICAgKiBzZWN1cml0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBwcmV2ZW50IGF1dG9tYXRpYyBjcmVkZW50aWFsXG4gICAgICogcmVwbGF5IHdoZW4gdGhlIHNvY2tldCByZWNvbm5lY3RzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gQ2xlYXIgY3JlZGVudGlhbHMgb24gZGlzY29ubmVjdFxuICAgICAqIHNjLnNvY2tldC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgKiAgIHNjLmNsZWFyQ3JlZGVudGlhbHMoKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJDcmVkZW50aWFscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5IGRpc2NvdmVyZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSZWdpc3RlcmVkUGxhdGZvcm1zKCk6IEFycmF5PFBsYXRmb3JtUmVnaXN0cnlFbnRyeT4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBsYXRmb3JtUmVnaXN0cnkudmFsdWVzKCkpLm1hcCgocGxhdGZvcm0pID0+ICh7XG4gICAgICAgICAgICAuLi5wbGF0Zm9ybSxcbiAgICAgICAgICAgIHR5cGVzOiBbLi4ucGxhdGZvcm0udHlwZXNdLFxuICAgICAgICAgICAgc2NoZW1hczogeyAuLi5wbGF0Zm9ybS5zY2hlbWFzIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBzZXJ2ZXItcHJvdmlkZWQgc2NoZW1hL2NvbnRleHQgcmVnaXN0cnkgZGF0YSBpcyBsb2FkZWQuXG4gICAgICovXG4gICAgcHVibGljIGlzU2NoZW1hc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCBoYXMgY29tcGxldGVkIHNjaGVtYSBpbml0aWFsaXphdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFN0YXRlID09PSBcInJlYWR5XCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBjbGllbnQgaW5pdGlhbGl6YXRpb24gc3RhdGUuXG4gICAgICovXG4gICAgcHVibGljIGdldEluaXRTdGF0ZSgpOiBJbml0U3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0U3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjYW5vbmljYWwgYmFzZSBjb250ZXh0cyBsZWFybmVkIGZyb20gdGhlIHNlcnZlciByZWdpc3RyeS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UmVnaXN0ZXJlZEJhc2VDb250ZXh0cygpOiB7IGFzOiBzdHJpbmc7IHNvY2tldGh1Yjogc3RyaW5nIH0ge1xuICAgICAgICBpZiAoIXRoaXMuYXNDb250ZXh0VXJsIHx8ICF0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlNjaGVtYSByZWdpc3RyeSBub3QgbG9hZGVkIHlldC4gV2FpdCBmb3IgY2xpZW50IHJlYWR5IHN0YXRlIGFmdGVyIGNvbm5lY3QuXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhczogdGhpcy5hc0NvbnRleHRVcmwsXG4gICAgICAgICAgICBzb2NrZXRodWI6IHRoaXMuc29ja2V0aHViQ29udGV4dFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGxhdGZvcm1TY2hlbWEoXG4gICAgICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgICAgIHNjaGVtYVR5cGU6IFwibWVzc2FnZXNcIiB8IFwiY3JlZGVudGlhbHNcIiA9IFwibWVzc2FnZXNcIixcbiAgICApOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGxhdGZvcm0gPSBwbGF0Zm9ybT8udHJpbSgpO1xuICAgICAgICBpZiAoIW5vcm1hbGl6ZWRQbGF0Zm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmdldChub3JtYWxpemVkUGxhdGZvcm0pPy5zY2hlbWFzPy5bXG4gICAgICAgICAgICBzY2hlbWFUeXBlXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2FpdCBmb3Igc2NoZW1hIHJlZ2lzdHJ5IGRhdGEgZnJvbSB0aGUgc2VydmVyIGFuZCByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcGF5bG9hZC5cbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgcmVhZHkodGltZW91dE1zPykgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgd2FpdEZvclNjaGVtYXMoXG4gICAgICAgIHRpbWVvdXRNcyA9IDIwMDAsXG4gICAgKTogUHJvbWlzZTxQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlYWR5KHRpbWVvdXRNcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYWl0IHVudGlsIHRoZSBjbGllbnQgcmVhY2hlcyBhIHJlYWR5IHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkeShcbiAgICAgICAgdGltZW91dE1zID0gdGhpcy5vcHRpb25zLmluaXRUaW1lb3V0TXMsXG4gICAgKTogUHJvbWlzZTxDbGllbnRSZWFkeUluZm8+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpICYmIHRoaXMubGF0ZXN0UmVhZHlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMubGF0ZXN0UmVhZHlJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2FpdGVyOiBQZW5kaW5nUmVhZHlXYWl0ZXIgPSB7IHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICAgICAgICAgICAgICB3YWl0ZXIudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeVdhaXRlcnMgPSB0aGlzLnJlYWR5V2FpdGVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZW50cnkpID0+IGVudHJ5ICE9PSB3YWl0ZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHJlYWR5KCkgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVhZHlXYWl0ZXJzLnB1c2god2FpdGVyKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvY2tldC5jb25uZWN0ZWQgJiYgdGhpcy5pbml0U3RhdGUgPT09IFwiaWRsZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEluaXRpYWxpemF0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JlYWR5T25jZSA/IFwicmVjb25uZWN0XCIgOiBcImluaXRpYWwtY29ubmVjdFwiLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGFuIGFjdGl2aXR5IHN0cmVhbSBhZ2FpbnN0IGN1cnJlbnRseSByZWdpc3RlcmVkIHBsYXRmb3JtIHNjaGVtYXMuXG4gICAgICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB2YWxpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHlTdHJlYW0pOiBzdHJpbmcge1xuICAgICAgICBpZiAoYWN0aXZpdHkudHlwZSA9PT0gXCJjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVDcmVkZW50aWFscyhhY3Rpdml0eSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlQWN0aXZpdHlTdHJlYW0oYWN0aXZpdHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkIGNhbm9uaWNhbCBTb2NrZXRodWIgY29udGV4dHMgZm9yIGEgcGxhdGZvcm0gdXNpbmcgc2VydmVyLXByb3ZpZGVkIHNjaGVtYSBtZXRhZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGV4dEZvcihwbGF0Zm9ybTogc3RyaW5nKTogQWN0aXZpdHlTdHJlYW1bXCJAY29udGV4dFwiXSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGxhdGZvcm0gIT09IFwic3RyaW5nXCIgfHwgcGxhdGZvcm0udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiU29ja2V0aHViQ2xpZW50LmNvbnRleHRGb3IocGxhdGZvcm0pIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHBsYXRmb3JtIHN0cmluZ1wiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hc0NvbnRleHRVcmwgfHwgIXRoaXMuc29ja2V0aHViQ29udGV4dFVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiU2NoZW1hIHJlZ2lzdHJ5IG5vdCBsb2FkZWQgeWV0LiBXYWl0IGZvciBjbGllbnQgcmVhZHkgc3RhdGUgYWZ0ZXIgY29ubmVjdC5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3JtYWxpemVkUGxhdGZvcm0gPSBwbGF0Zm9ybS50cmltKCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmdldChub3JtYWxpemVkUGxhdGZvcm0pO1xuICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IEFycmF5LmZyb20odGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmtleXMoKSkuc29ydCgpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGB1bmtub3duIHBsYXRmb3JtICcke25vcm1hbGl6ZWRQbGF0Zm9ybX0nLiBSZWdpc3RlcmVkIHBsYXRmb3JtczogJHtuYW1lcy5qb2luKFwiLCBcIil9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0aGlzLmFzQ29udGV4dFVybCwgdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsLCBlbnRyeS5jb250ZXh0VXJsXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVB1YmxpY0VtaXR0ZXIoKTogQ3VzdG9tRW1pdHRlciB7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBFdmVudEVtaXR0ZXIoKSBhcyBDdXN0b21FbWl0dGVyO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgc29ja2V0Ll9lbWl0ID0gc29ja2V0LmVtaXQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBzb2NrZXQuZW1pdCA9IChldmVudCwgY29udGVudCwgY2FsbGJhY2spOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHVibGljRW1pdChldmVudCBhcyBzdHJpbmcsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICAgICAgc29ja2V0LmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICBzb2NrZXQuZGlzY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5kaXNjb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5jb25uZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmNvbm5lY3QoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNvY2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc2sgc2VydmVyIGZvciB0aGUgbGF0ZXN0IHBsYXRmb3JtL2NvbnRleHQgcmVnaXN0cnkgdmlhIGFjayBjYWxsYmFjay5cbiAgICAgKiBUaGlzIGtlZXBzIGNsaWVudCBjb250ZXh0IGNvbXBvc2l0aW9uIGFsaWduZWQgd2l0aCBzZXJ2ZXIgc2NoZW1hIHN0YXRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVxdWVzdFNjaGVtYVJlZ2lzdHJ5KCkge1xuICAgICAgICBjb25zdCBzb2NrZXRMaWtlID0gdGhpcy5fc29ja2V0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGlmICghKFwiaW9cIiBpbiBzb2NrZXRMaWtlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVjaG8gdGhlIGZpbmdlcnByaW50IHdlIGxhc3QgYXBwbGllZCBzbyB0aGUgc2VydmVyIGNhbiBzaG9ydC1jaXJjdWl0XG4gICAgICAgIC8vIHdpdGggYW4gXCJ1bmNoYW5nZWRcIiByZXBseSBvbiByZWNvbm5lY3QvcmUtcmVxdWVzdCAoIzExMTcpLlxuICAgICAgICB0aGlzLl9zb2NrZXQuZW1pdChcbiAgICAgICAgICAgIFwic2NoZW1hc1wiLFxuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeUZpbmdlcnByaW50LFxuICAgICAgICAgICAgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNjaGVtYXNQYXlsb2FkKHBheWxvYWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBzZXJ2ZXItcHJvdmlkZWQgcmVnaXN0cnkgbWV0YWRhdGEgdG8gbG9jYWwgcnVudGltZSBzdGF0ZS5cbiAgICAgKiBBbHNvIHJlZ2lzdGVycyBwbGF0Zm9ybSBjb250ZXh0cy9zY2hlbWFzIHdpdGggQHNvY2tldGh1Yi9zY2hlbWFzIHZhbGlkYXRvcnNcbiAgICAgKiBzbyBsb2NhbCB2YWxpZGF0aW9uIHVzZXMgdGhlIHNhbWUgY2Fub25pY2FsIHNvdXJjZXMgYXMgdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5UGxhdGZvcm1SZWdpc3RyeShcbiAgICAgICAgcGF5bG9hZDogdW5rbm93bixcbiAgICApOiBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghcGF5bG9hZCB8fCB0eXBlb2YgcGF5bG9hZCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IHBheWxvYWQgYXMgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQ7XG4gICAgICAgIGNvbnN0IGFzQ29udGV4dFVybCA9IHJlZ2lzdHJ5LmNvbnRleHRzPy5hcztcbiAgICAgICAgY29uc3Qgc29ja2V0aHViQ29udGV4dFVybCA9IHJlZ2lzdHJ5LmNvbnRleHRzPy5zb2NrZXRodWI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBhc0NvbnRleHRVcmwgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBzb2NrZXRodWJDb250ZXh0VXJsICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShyZWdpc3RyeS5wbGF0Zm9ybXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNvY2tldGh1YlZlcnNpb24gPVxuICAgICAgICAgICAgdHlwZW9mIHJlZ2lzdHJ5LnZlcnNpb24gPT09IFwic3RyaW5nXCIgPyByZWdpc3RyeS52ZXJzaW9uIDogXCJ1bmtub3duXCI7XG4gICAgICAgIHRoaXMuYXNDb250ZXh0VXJsID0gYXNDb250ZXh0VXJsO1xuICAgICAgICB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwgPSBzb2NrZXRodWJDb250ZXh0VXJsO1xuXG4gICAgICAgIHRoaXMucGxhdGZvcm1SZWdpc3RyeS5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXRmb3JtIG9mIHJlZ2lzdHJ5LnBsYXRmb3Jtcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFwbGF0Zm9ybSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybSAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybS5pZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBwbGF0Zm9ybS52ZXJzaW9uICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLmNvbnRleHRVcmwgIT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LnNldChwbGF0Zm9ybS5pZCwge1xuICAgICAgICAgICAgICAgIC4uLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHBsYXRmb3JtLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgdHlwZXM6IEFycmF5LmlzQXJyYXkocGxhdGZvcm0udHlwZXMpID8gcGxhdGZvcm0udHlwZXMgOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFzOiBwbGF0Zm9ybS5zY2hlbWFzIHx8IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhZGRQbGF0Zm9ybUNvbnRleHQocGxhdGZvcm0uaWQsIHBsYXRmb3JtLmNvbnRleHRVcmwpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVkU2NoZW1hID0gcGxhdGZvcm0uc2NoZW1hcz8uY3JlZGVudGlhbHM7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjcmVkU2NoZW1hICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjcmVkU2NoZW1hID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGNyZWRTY2hlbWEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFBsYXRmb3JtU2NoZW1hKGNyZWRTY2hlbWEsIGAke3BsYXRmb3JtLmlkfS9jcmVkZW50aWFsc2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtc2dTY2hlbWEgPSBwbGF0Zm9ybS5zY2hlbWFzPy5tZXNzYWdlcztcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1zZ1NjaGVtYSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbXNnU2NoZW1hID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KG1zZ1NjaGVtYSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGxhdGZvcm1TY2hlbWEobXNnU2NoZW1hLCBgJHtwbGF0Zm9ybS5pZH0vbWVzc2FnZXNgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdIEZhaWxlZCB0byByZWdpc3RlciBzY2hlbWFzIGZvciBwbGF0Zm9ybSAke3BsYXRmb3JtLmlkfTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF5bG9hZCA9IHRoaXMuYnVpbGRQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCgpO1xuICAgICAgICAvLyBEZWR1cCBvbmx5IG9uIHRoZSBzZXJ2ZXIncyBmaW5nZXJwcmludCwgd2hpY2ggaXMgY29tcHV0ZWQgb3ZlciB0aGVcbiAgICAgICAgLy8gZnVsbCBwYXlsb2FkIChpbmNsdWRpbmcgc2NoZW1hIGJvZGllcyBhbmQgdHlwZXMpLiBXaXRob3V0IG9uZSB3ZSBsZWF2ZVxuICAgICAgICAvLyB0aGUgZmluZ2VycHJpbnQgdW5zZXQgc28gaGFuZGxlU2NoZW1hc1BheWxvYWQgbmV2ZXIgc2hvcnQtY2lyY3VpdHMgYW5kXG4gICAgICAgIC8vIGEgc2NoZW1hIGNoYW5nZSBjYW4ndCBiZSBzaWxlbnRseSBtaXNzZWQgKCMxMTE3IHJldmlldykuXG4gICAgICAgIHRoaXMucmVnaXN0cnlGaW5nZXJwcmludCA9XG4gICAgICAgICAgICB0eXBlb2YgcmVnaXN0cnkuZmluZ2VycHJpbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IHJlZ2lzdHJ5LmZpbmdlcnByaW50XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIEVtaXQgbm9ybWFsaXplZCByZWdpc3RyeSBwYXlsb2FkIHNvIGFwcCBjb2RlIHJlY2VpdmVzIGEgc3RhYmxlIHNoYXBlLlxuICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcInNjaGVtYXNcIiwgbm9ybWFsaXplZFBheWxvYWQpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBheWxvYWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudENyZWRlbnRpYWxzKGNvbnRlbnQ6IEFjdGl2aXR5U3RyZWFtKSB7XG4gICAgICAgIGlmIChjb250ZW50Lm9iamVjdCAmJiBjb250ZW50Lm9iamVjdC50eXBlID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLnNldChcbiAgICAgICAgICAgICAgICBTb2NrZXRodWJDbGllbnQuZ2V0S2V5KGNvbnRlbnQpLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudE1lc3NhZ2UoY29udGVudDogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWl0aGVyIHN0b3JlcyBvciBkZWxldGUgdGhlIHNwZWNpZmllZCBjb250ZW50IG9udG8gdGhlIHN0b3JlZEpvaW5zIG1hcCxcbiAgICAgICAgLy8gZm9yIHJlcGx5IG9uY2Ugd2UncmUgYmFjayBvbmxpbmUuXG4gICAgICAgIGNvbnN0IGtleSA9IFNvY2tldGh1YkNsaWVudC5nZXRLZXkoY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09IFwiam9pblwiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2NvbnRlbnQudHlwZV0uc2V0KGtleSwgY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImxlYXZlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmpvaW4uZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImRpc2Nvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtleSBmb3IgdGhlIHJlcGxheSBtYXBzLiBTY29wZWQgYnkgcGxhdGZvcm06IHRoZSBzYW1lIHZpc2libGUgYWN0b3IgaWRcbiAgICAgKiBjYW4gZXhpc3Qgb24gbW9yZSB0aGFuIG9uZSBwbGF0Zm9ybSAoYW4gYGFsaWNlQGV4YW1wbGUub3JnYCB0aGF0IGlzIGJvdGhcbiAgICAgKiBhbiBJUkMgbmljayBhbmQgYW4gWE1QUCBKSUQpLCBhbmQga2V5ZWQgYnkgYWN0b3IgYWxvbmUgb25lIHBsYXRmb3JtJ3NcbiAgICAgKiBzdG9yZWQgY3JlZGVudGlhbHMvY29ubmVjdC9qb2luIHdvdWxkIHJlcGxhY2UgdGhlIG90aGVyJ3Mgb24gcmVjb25uZWN0LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldEtleShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSkge1xuICAgICAgICBjb25zdCBhY3RvciA9IGNvbnRlbnQuYWN0b3I/LmlkIHx8IGNvbnRlbnQuYWN0b3I7XG4gICAgICAgIGlmICghYWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgYWN0b3IgcHJvcGVydHkgbm90IHByZXNlbnQgZm9yIG1lc3NhZ2UgdHlwZTogJHtjb250ZW50Py50eXBlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA/IGNvbnRlbnQudGFyZ2V0LmlkIHx8IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gcmVzb2x2ZVBsYXRmb3JtSWQoY29udGVudCkgPz8gXCJcIjtcbiAgICAgICAgcmV0dXJuIGAke3BsYXRmb3JtfToke2FjdG9yfS0ke3RhcmdldH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCgpOiBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnNvY2tldGh1YlZlcnNpb24sXG4gICAgICAgICAgICBjb250ZXh0czpcbiAgICAgICAgICAgICAgICB0aGlzLmFzQ29udGV4dFVybCAmJiB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmxcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFzOiB0aGlzLmFzQ29udGV4dFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0aHViOiB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHBsYXRmb3JtczogdGhpcy5nZXRSZWdpc3RlcmVkUGxhdGZvcm1zKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFJlYWR5SW5mbyhyZWFzb246IFJlYWR5UmVhc29uKTogQ2xpZW50UmVhZHlJbmZvIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuc29ja2V0aHViVmVyc2lvbiB8fFxuICAgICAgICAgICAgIXRoaXMuYXNDb250ZXh0VXJsIHx8XG4gICAgICAgICAgICAhdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdGU6IFwicmVhZHlcIixcbiAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgIHNvY2tldGh1YlZlcnNpb246IHRoaXMuc29ja2V0aHViVmVyc2lvbixcbiAgICAgICAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgICAgICAgICAgYXM6IHRoaXMuYXNDb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgIHNvY2tldGh1YjogdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsYXRmb3JtczogdGhpcy5nZXRSZWdpc3RlcmVkUGxhdGZvcm1zKCkubWFwKChwbGF0Zm9ybSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogcGxhdGZvcm0uaWQsXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcGxhdGZvcm0udmVyc2lvbixcbiAgICAgICAgICAgICAgICBjb250ZXh0VXJsOiBwbGF0Zm9ybS5jb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgIGNvbnRleHRWZXJzaW9uOiBwbGF0Zm9ybS5jb250ZXh0VmVyc2lvbixcbiAgICAgICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBwbGF0Zm9ybS5zY2hlbWFWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHR5cGVzOiBbLi4ucGxhdGZvcm0udHlwZXNdLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVJlYWR5V2FpdGVycyhpbmZvOiBDbGllbnRSZWFkeUluZm8pIHtcbiAgICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMucmVhZHlXYWl0ZXJzO1xuICAgICAgICB0aGlzLnJlYWR5V2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHdhaXRlciBvZiB3YWl0ZXJzKSB7XG4gICAgICAgICAgICBpZiAod2FpdGVyLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdhaXRlci50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0ZXIucmVzb2x2ZShpbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVqZWN0UmVhZHlXYWl0ZXJzKGVycjogRXJyb3IpIHtcbiAgICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMucmVhZHlXYWl0ZXJzO1xuICAgICAgICB0aGlzLnJlYWR5V2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHdhaXRlciBvZiB3YWl0ZXJzKSB7XG4gICAgICAgICAgICBpZiAod2FpdGVyLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdhaXRlci50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0ZXIucmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRJbml0RXJyb3IoXG4gICAgICAgIGVycm9yOiBzdHJpbmcsXG4gICAgICAgIHBoYXNlOiBJbml0RXJyb3JQaGFzZSxcbiAgICAgICAgcmV0cnlpbmc6IGJvb2xlYW4sXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiaW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgcmV0cnlpbmcsXG4gICAgICAgIH0gc2F0aXNmaWVzIENsaWVudEluaXRFcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2xpZW50RXJyb3IoXG4gICAgICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiB1bmtub3duLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgICApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjbGllbnRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFySW5pdFRpbWVycygpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdFRpbWVvdXRUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5pdFRpbWVvdXRUaW1lcik7XG4gICAgICAgICAgICB0aGlzLmluaXRUaW1lb3V0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLndhaXRpbmdXYXJuaW5nVGltZXIpO1xuICAgICAgICAgICAgdGhpcy53YWl0aW5nV2FybmluZ1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFdhaXRpbmdXYXJuaW5ncygpIHtcbiAgICAgICAgaWYgKHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZHkoKSB8fCB0aGlzLmluaXRTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJbml0VGltZXJzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcXVldWVTaXplID0gdGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMub3V0Ym91bmRRdWV1ZVswXTtcbiAgICAgICAgICAgIGNvbnN0IG9sZGVzdEFnZVNlY29uZHMgPSBvbGRlc3RcbiAgICAgICAgICAgICAgICA/ICgoRGF0ZS5ub3coKSAtIG9sZGVzdC5lbnF1ZXVlZEF0KSAvIDEwMDApLnRvRml4ZWQoMSlcbiAgICAgICAgICAgICAgICA6IFwiMC4wXCI7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdIFN0aWxsIHdhaXRpbmcgZm9yIHNjaGVtYXM7IHF1ZXVlZCBvdXRib3VuZCBtZXNzYWdlczogJHtxdWV1ZVNpemV9OyBvbGRlc3QgcXVldWVkIGFnZTogJHtvbGRlc3RBZ2VTZWNvbmRzfXMuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sIHRoaXMud2FpdGluZ1dhcm5pbmdJbnRlcnZhbE1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0SW5pdGlhbGl6YXRpb24ocmVhc29uOiBSZWFkeVJlYXNvbiwgcmVwbGF5T25SZWFkeTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0LmNvbm5lY3RlZCB8fCB0aGlzLmluaXRTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSArK3RoaXMuaW5pdFRva2VuQ291bnRlcjtcbiAgICAgICAgdGhpcy5pbml0Q3ljbGUgPSB7XG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgIHN0YXJ0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHJlcGxheU9uUmVhZHksXG4gICAgICAgICAgICB0aW1lZE91dDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0aWFsaXppbmdcIjtcbiAgICAgICAgdGhpcy5jbGVhckluaXRUaW1lcnMoKTtcblxuICAgICAgICB0aGlzLmluaXRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0Q3ljbGUgfHwgdGhpcy5pbml0Q3ljbGUudG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0Q3ljbGUudGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRNc2cgPSBgSW5pdGlhbGl6YXRpb24gdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmluaXRUaW1lb3V0TXN9bXMgd2FpdGluZyBmb3Igc2NoZW1hc2A7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtTb2NrZXRodWJDbGllbnRdICR7dGltZW91dE1zZ307IHF1ZXVlZCBvdXRib3VuZCBtZXNzYWdlczogJHt0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RofS4gV2FpdGluZyBmb3Igc2NoZW1hcyBldmVudCBmcm9tIHNlcnZlci5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdEluaXRFcnJvcih0aW1lb3V0TXNnLCBcInRpbWVvdXRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICB9LCB0aGlzLm9wdGlvbnMuaW5pdFRpbWVvdXRNcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFB1bGwgdGhlIGxhdGVzdCByZWdpc3RyeSBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoaXMgaW5pdCBjeWNsZS5cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFNjaGVtYVJlZ2lzdHJ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRfZXJyb3JcIjtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IobWVzc2FnZSwgXCJzY2hlbWFzLXJlcXVlc3RcIiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXJrUmVhZHkocmVhc29uOiBSZWFkeVJlYXNvbikge1xuICAgICAgICBjb25zdCBjeWNsZSA9IHRoaXMuaW5pdEN5Y2xlO1xuICAgICAgICBjb25zdCByZXBsYXlPblJlYWR5ID0gQm9vbGVhbihjeWNsZT8ucmVwbGF5T25SZWFkeSk7XG4gICAgICAgIHRoaXMuaW5pdEN5Y2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwicmVhZHlcIjtcbiAgICAgICAgdGhpcy5oYXNSZWFkeU9uY2UgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmJ1aWxkUmVhZHlJbmZvKHJlYXNvbik7XG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGJ1aWxkIHJlYWR5IHBheWxvYWRcIik7XG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdF9lcnJvclwiO1xuICAgICAgICAgICAgdGhpcy5lbWl0SW5pdEVycm9yKGVyci5tZXNzYWdlLCBcInNjaGVtYXMtYXBwbHlcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlamVjdFJlYWR5V2FpdGVycyhlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwicmVhZHlcIiwgaW5mbyk7XG4gICAgICAgIHRoaXMubGF0ZXN0UmVhZHlJbmZvID0gaW5mbztcbiAgICAgICAgdGhpcy5yZXNvbHZlUmVhZHlXYWl0ZXJzKGluZm8pO1xuXG4gICAgICAgIGlmIChyZXBsYXlPblJlYWR5KSB7XG4gICAgICAgICAgICAvLyBSZXBsYXkgcHJldmlvdXNseSBzZW50IHN0YXRlIGJlZm9yZSBmbHVzaGluZyBuZXdseSBxdWV1ZWQgb3V0Ym91bmQgZXZlbnRzLlxuICAgICAgICAgICAgdGhpcy5yZXBsYXkoXCJjcmVkZW50aWFsc1wiLCB0aGlzLmV2ZW50cy5jcmVkZW50aWFscyk7XG4gICAgICAgICAgICB0aGlzLnJlcGxheShcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudHMuY29ubmVjdCk7XG4gICAgICAgICAgICB0aGlzLnJlcGxheShcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudHMuam9pbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZsdXNoT3V0Ym91bmRRdWV1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU2NoZW1hc1BheWxvYWQocGF5bG9hZDogdW5rbm93bikge1xuICAgICAgICBpZiAoIXBheWxvYWQgfHwgdHlwZW9mIHBheWxvYWQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXJ2ZXIgc2hvcnQtY2lyY3VpdDogdGhlIHJlZ2lzdHJ5IG1hdGNoZXMgdGhlIGZpbmdlcnByaW50IHdlIGVjaG9lZCxcbiAgICAgICAgLy8gc28gbm90aGluZyB3YXMgcmUtc2VudCAoIzExMTcpLiBPbmx5IGhvbm9yIHRoaXMgd2hlbiB3ZSBhY3R1YWxseSBob2xkXG4gICAgICAgIC8vIGEgY2FjaGVkIHJlZ2lzdHJ5IHRvIHJldXNlIOKAlCBhIG1hbGZvcm1lZCBvciBlbXB0eSBcInVuY2hhbmdlZFwiIHJlcGx5XG4gICAgICAgIC8vIG11c3Qgbm90IGZhc3QtcGF0aCBpbml0IHRvIHJlYWR5IHdpdGggbm8gdmFsaWRhdG9ycyByZWdpc3RlcmVkLlxuICAgICAgICBpZiAoKHBheWxvYWQgYXMgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQpLnVuY2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgaGF2ZUNhY2hlZFJlZ2lzdHJ5ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5yZWdpc3RyeUZpbmdlcnByaW50ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LnNpemUgPiAwO1xuICAgICAgICAgICAgaWYgKGhhdmVDYWNoZWRSZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRDeWNsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtSZWFkeSh0aGlzLmluaXRDeWNsZS5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbml0U3RhdGUgIT09IFwicmVhZHlcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtSZWFkeShcInNjaGVtYXMtdXBkYXRlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb3RoaW5nIGNhY2hlZCB0byByZXVzZTogZmFsbCB0aHJvdWdoIHNvIGFwcGx5UGxhdGZvcm1SZWdpc3RyeVxuICAgICAgICAgICAgLy8gcmVqZWN0cyB0aGUgY29udGVudGxlc3MgcGF5bG9hZCBhbmQgc3VyZmFjZXMgYW4gaW5pdCBlcnJvci5cbiAgICAgICAgfVxuICAgICAgICAvLyBEZWR1cCBvbmx5IGFnYWluc3QgdGhlIHNlcnZlci1zdXBwbGllZCBmaW5nZXJwcmludCAod2hpY2ggaXMgd2hhdCB3ZVxuICAgICAgICAvLyBzdG9yZWQgaW4gYXBwbHlQbGF0Zm9ybVJlZ2lzdHJ5KTsgYWJzZW50IG9uZSwgYWx3YXlzIHJlLWFwcGx5LlxuICAgICAgICBjb25zdCBpbmNvbWluZ0ZpbmdlcnByaW50ID0gKHBheWxvYWQgYXMgUGxhdGZvcm1SZWdpc3RyeVBheWxvYWQpXG4gICAgICAgICAgICAuZmluZ2VycHJpbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID09PSBcInJlYWR5XCIgJiZcbiAgICAgICAgICAgICF0aGlzLmluaXRDeWNsZSAmJlxuICAgICAgICAgICAgaW5jb21pbmdGaW5nZXJwcmludCAmJlxuICAgICAgICAgICAgaW5jb21pbmdGaW5nZXJwcmludCA9PT0gdGhpcy5yZWdpc3RyeUZpbmdlcnByaW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdFN0YXRlID09PSBcInJlYWR5XCIgJiYgIXRoaXMuaW5pdEN5Y2xlKSB7XG4gICAgICAgICAgICAvLyBBIHNlcnZlci1zaWRlIHNjaGVtYSB1cGRhdGUgYXJyaXZlZCB3aGlsZSBhbHJlYWR5IHJ1bm5pbmcuXG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdGlhbGl6aW5nXCI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF5bG9hZCA9IHRoaXMuYXBwbHlQbGF0Zm9ybVJlZ2lzdHJ5KHBheWxvYWQpO1xuICAgICAgICBpZiAoIW5vcm1hbGl6ZWRQYXlsb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdF9lcnJvclwiO1xuICAgICAgICAgICAgdGhpcy5lbWl0SW5pdEVycm9yKFxuICAgICAgICAgICAgICAgIFwiUmVjZWl2ZWQgaW52YWxpZCBzY2hlbWFzIHBheWxvYWQgZnJvbSBzZXJ2ZXJcIixcbiAgICAgICAgICAgICAgICBcInNjaGVtYXMtYXBwbHlcIixcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXYWl0aW5nV2FybmluZ3MoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluaXRDeWNsZSkge1xuICAgICAgICAgICAgdGhpcy5tYXJrUmVhZHkodGhpcy5pbml0Q3ljbGUucmVhc29uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hcmtSZWFkeShcInNjaGVtYXMtdXBkYXRlXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUHVibGljRW1pdChcbiAgICAgICAgZXZlbnQ6IHN0cmluZyxcbiAgICAgICAgY29udGVudDogdW5rbm93bixcbiAgICAgICAgY2FsbGJhY2s/OiB1bmtub3duLFxuICAgICkge1xuICAgICAgICBjb25zdCBxdWV1ZWRFdmVudDogUXVldWVkT3V0Ym91bmRFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgZW5xdWV1ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHNlcXVlbmNlOiB0aGlzLm91dGJvdW5kU2VxdWVuY2UrKyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICAvLyBIb2xkIG91dGJvdW5kIHVudGlsIHNjaGVtYXMvY29udGV4dCBtZXRhZGF0YSBpcyBsb2FkZWQuXG4gICAgICAgICAgICB0aGlzLmVucXVldWVPdXRib3VuZChxdWV1ZWRFdmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZW5kT3V0Ym91bmQocXVldWVkRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5xdWV1ZU91dGJvdW5kKHF1ZXVlZEV2ZW50OiBRdWV1ZWRPdXRib3VuZEV2ZW50KSB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRRdWV1ZS5wdXNoKHF1ZXVlZEV2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMub3V0Ym91bmRRdWV1ZS5sZW5ndGggPD0gdGhpcy5vcHRpb25zLm1heFF1ZXVlZE91dGJvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHJvcHBlZCA9IHRoaXMub3V0Ym91bmRRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoIWRyb3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgICAgIGRyb3BwZWQuZXZlbnQsXG4gICAgICAgICAgICBkcm9wcGVkLmNhbGxiYWNrLFxuICAgICAgICAgICAgXCJTb2NrZXRodWJDbGllbnQgcXVldWUgb3ZlcmZsb3cgYmVmb3JlIHJlYWR5XCIsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbHVzaE91dGJvdW5kUXVldWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkgfHwgdGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHF1ZXVlZCA9IHRoaXMub3V0Ym91bmRRdWV1ZS5zb3J0KFxuICAgICAgICAgICAgKGEsIGIpID0+IGEuc2VxdWVuY2UgLSBiLnNlcXVlbmNlLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm91dGJvdW5kUXVldWUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBxdWV1ZWQpIHtcbiAgICAgICAgICAgIGlmIChub3cgLSBlbnRyeS5lbnF1ZXVlZEF0ID4gdGhpcy5vcHRpb25zLm1heFF1ZXVlZEFnZU1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2xpZW50RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5jYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgYFNvY2tldGh1YkNsaWVudCBxdWV1ZWQgbWVzc2FnZSBleHBpcmVkIGFmdGVyICR7dGhpcy5vcHRpb25zLm1heFF1ZXVlZEFnZU1zfW1zIGJlZm9yZSBpbml0aWFsaXphdGlvbmAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VuZE91dGJvdW5kKGVudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VuZE91dGJvdW5kKGVudHJ5OiBRdWV1ZWRPdXRib3VuZEV2ZW50KSB7XG4gICAgICAgIGxldCBvdXRnb2luZyA9IGVudHJ5LmNvbnRlbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuZXZlbnQgPT09IFwiY3JlZGVudGlhbHNcIiB8fCBlbnRyeS5ldmVudCA9PT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBSdW4gY2Fub25pY2FsIGV4cGFuc2lvbi9ub3JtYWxpemF0aW9uIGF0IHNlbmQgdGltZSBzbyBxdWV1ZWQgYW5kXG4gICAgICAgICAgICAgICAgLy8gaW1tZWRpYXRlIHNlbmRzIGZvbGxvdyB0aGUgZXhhY3Qgc2FtZSBwYXRoLlxuICAgICAgICAgICAgICAgIG91dGdvaW5nID0gbm9ybWFsaXplQWN0aXZpdHlTdHJlYW0oXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvbnRlbnQgYXMgQWN0aXZpdHlTdHJlYW0sXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAob3V0Z29pbmcgJiYgdHlwZW9mIG91dGdvaW5nID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gb3V0Z29pbmcgYXMgQWN0aXZpdHlTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5ldmVudCA9PT0gXCJjcmVkZW50aWFsc1wiICYmICFhY3Rpdml0eS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS50eXBlID0gXCJjcmVkZW50aWFsc1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LmFjdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgYWN0aXZpdHkuYWN0b3IgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFhY3Rpdml0eS5hY3Rvci50eXBlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkuYWN0b3IudHlwZSA9IFwicGVyc29uXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1SZWdpc3RyeS5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB0aGlzLnZhbGlkYXRlQWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRnb2luZyBhcyBBY3Rpdml0eVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2xpZW50RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNvY2tldGh1YkNsaWVudCB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uRXJyb3J9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW50cnkuZXZlbnQgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDcmVkZW50aWFscyhvdXRnb2luZyBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRNZXNzYWdlKG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KGVudHJ5LmV2ZW50LCBvdXRnb2luZywgZW50cnkuY2FsbGJhY2spO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihlbnRyeS5ldmVudCwgZW50cnkuY2FsbGJhY2ssIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2cobXNnOiBzdHJpbmcsIG9iaj86IHVua25vd24pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZywgb2JqKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJTb2NrZXRJT0hhbmRsZXJzKCkge1xuICAgICAgICAvLyByZWdpc3RlciBmb3IgZXZlbnRzIHRoYXQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiBjb25uZWN0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmlkID0gdGhpcy5fc29ja2V0LmlkO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiY29ubmVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbml0aWFsaXphdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1JlYWR5T25jZSA/IFwicmVjb25uZWN0XCIgOiBcImluaXRpYWwtY29ubmVjdFwiLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdF9lcnJvclwiLCAob2JqPzogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJjb25uZWN0X2Vycm9yXCIsIG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJkaXNjb25uZWN0XCIsIChvYmo/OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZSAhPT0gXCJjbG9zZWRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpZGxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJkaXNjb25uZWN0XCIsIG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJzY2hlbWFzXCIsIChwYXlsb2FkOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNjaGVtYXNQYXlsb2FkKHBheWxvYWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB1c2UgYXMgbWlkZGxld2FyZSB0byByZWNlaXZlIGluY29taW5nIFNvY2tldGh1YiBtZXNzYWdlcyBhbmQgdW5wYWNrIHRoZW1cbiAgICAgICAgLy8gTm9ybWFsaXplIGFuZCBsaW50IGJlZm9yZSBwYXNzaW5nIHRoZW0gYWxvbmcgdG8gdGhlIGFwcC5cbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwibWVzc2FnZVwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcIm1lc3NhZ2VcIiwgbm9ybWFsaXplQWN0aXZpdHlTdHJlYW0ob2JqKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEFjdGl2aXR5U3RyZWFtIHdpdGggYSB2YWxpZCBhY3Rvci5pZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhc0FjdG9ySWQob2JqOiBBY3Rpdml0eVN0cmVhbSk6IG9iaiBpcyBBY3Rpdml0eVN0cmVhbSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImFjdG9yXCIgaW4gb2JqICYmXG4gICAgICAgICAgICBvYmouYWN0b3IgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBvYmouYWN0b3IgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIFwiaWRcIiBpbiBvYmouYWN0b3IgJiZcbiAgICAgICAgICAgIHR5cGVvZiBvYmouYWN0b3IuaWQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYXlzIHByZXZpb3VzbHkgc2VudCBldmVudHMgdG8gdGhlIHNlcnZlciBhZnRlciByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBTb2NrZXQuSU8gY29ubmVjdGlvbiBpc1xuICAgICAqIHJlLWVzdGFibGlzaGVkIGFmdGVyIGEgdHJhbnNpZW50IG5ldHdvcmsgaW50ZXJydXB0aW9uLiBJdCByZXNlbmRzXG4gICAgICogY3JlZGVudGlhbHMgYW5kIGNvbm5lY3Rpb24gc3RhdGUgc28gdGhlIHVzZXIgZG9lc24ndCBuZWVkIHRvIG1hbnVhbGx5XG4gICAgICogcmUtYXV0aGVudGljYXRlIG9yIHJlam9pbiBjaGFubmVscy5cbiAgICAgKlxuICAgICAqIFNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOlxuICAgICAqIC0gT25seSByZXBsYXlzIGV2ZW50cyBzdG9yZWQgaW4gbWVtb3J5IGR1cmluZyB0aGlzIHNlc3Npb25cbiAgICAgKiAtIERvZXMgbm90IHJlcGxheSBhZnRlciBwYWdlIHJlZnJlc2ggKG1lbW9yeSBjbGVhcmVkKVxuICAgICAqIC0gU2VydmVyIHNob3VsZCB2YWxpZGF0ZSByZXBsYXllZCBjcmVkZW50aWFscyAobWF5IGJlIHN0YWxlL3Jldm9rZWQpXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIEV2ZW50IG5hbWUgdG8gZW1pdCAoXCJjcmVkZW50aWFsc1wiLCBcIm1lc3NhZ2VcIilcbiAgICAgKiBAcGFyYW0gYXNNYXAgLSBNYXAgb2YgZXZlbnRzIHRvIHJlcGxheVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVwbGF5PEsgZXh0ZW5kcyBrZXlvZiBSZXBsYXlFdmVudE1hcD4oXG4gICAgICAgIG5hbWU6IEssXG4gICAgICAgIGFzTWFwOiBNYXA8c3RyaW5nLCBSZXBsYXlFdmVudE1hcFtLXT4sXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3Qgb2JqIG9mIGFzTWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZE9iaiA9IG5vcm1hbGl6ZUFjdGl2aXR5U3RyZWFtKG9iaiBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgICAgICBsZXQgaWQgPSBleHBhbmRlZE9iaj8uaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNBY3RvcklkKGV4cGFuZGVkT2JqKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdG9yID0gKGV4cGFuZGVkT2JqIGFzIEFjdGl2aXR5U3RyZWFtKS5hY3RvcjtcbiAgICAgICAgICAgICAgICAvLyBhY3RvciBjYW4gYmUgYSBzdHJpbmcgKEpJRCkgb3IgYW4gb2JqZWN0IHdpdGggYW4gaWQgZmllbGRcbiAgICAgICAgICAgICAgICBpZCA9IHR5cGVvZiBhY3RvciA9PT0gXCJzdHJpbmdcIiA/IGFjdG9yIDogYWN0b3IuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvZyhgcmVwbGF5aW5nICR7bmFtZX0gZm9yICR7aWR9YCk7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuZW1pdChuYW1lLCBleHBhbmRlZE9iaik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbigoZ2xvYmFsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgIGdsb2JhbC5Tb2NrZXRodWJDbGllbnQgPSBTb2NrZXRodWJDbGllbnQ7XG59KShcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IChnbG9iYWxUaGlzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICA6IHt9LFxuKTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI2a0NBQ0EsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQzVELEdBQVEsV0FBYSxHQUFRLGlCQUFtQixHQUFRLFlBQWMsR0FBUSxjQUFnQixHQUFRLFVBQVksR0FBUSxVQUFZLEdBQVEsV0FBYSxHQUFRLElBQU0sR0FBUSxFQUFJLEdBQVEsSUFBTSxHQUFRLE1BQVEsR0FBUSxLQUFPLEdBQVEsV0FBYSxHQUFRLFlBQW1CLE9BRWxSLE1BQU0sRUFBWSxDQUNsQixDQUNBLEdBQVEsWUFBYyxHQUN0QixHQUFRLFdBQWEsd0JBQ3JCLE1BQU0sV0FBYSxFQUFZLENBQzNCLFdBQVcsQ0FBQyxFQUFHLENBQ1gsTUFBTSxFQUNOLEdBQUksQ0FBQyxHQUFRLFdBQVcsS0FBSyxDQUFDLEVBQzFCLE1BQVUsTUFBTSwwQ0FBMEMsRUFDOUQsS0FBSyxJQUFNLEVBRWYsUUFBUSxFQUFHLENBQ1AsT0FBTyxLQUFLLElBRWhCLFFBQVEsRUFBRyxDQUNQLE1BQU8sTUFFUCxNQUFLLEVBQUcsQ0FDUixNQUFPLEVBQUcsS0FBSyxLQUFNLENBQUUsRUFFL0IsQ0FDQSxHQUFRLEtBQU8sR0FDZixNQUFNLFdBQWMsRUFBWSxDQUM1QixXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sRUFDTixLQUFLLE9BQVMsT0FBTyxJQUFTLFNBQVcsQ0FBQyxDQUFJLEVBQUksRUFFdEQsUUFBUSxFQUFHLENBQ1AsT0FBTyxLQUFLLElBRWhCLFFBQVEsRUFBRyxDQUNQLEdBQUksS0FBSyxPQUFPLE9BQVMsRUFDckIsTUFBTyxHQUNYLElBQU0sRUFBTyxLQUFLLE9BQU8sR0FDekIsT0FBTyxJQUFTLElBQU0sSUFBUyxRQUUvQixJQUFHLEVBQUcsQ0FDTixJQUFJLEVBQ0osT0FBUyxFQUFLLEtBQUssUUFBVSxNQUFRLElBQVksT0FBSSxFQUFNLEtBQUss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R0FBSyxFQUFRLElBQU0sRUFBUSxJQUFNLEVBQVEsUUFBVSxFQUFRLFVBQVksRUFBUSxTQUFXLEVBQVEsZUFBaUIsRUFBUSxXQUFhLEVBQVEsTUFBUSxFQUFRLEtBQU8sRUFBUSxXQUFhLEVBQVEsVUFBWSxFQUFRLFlBQWMsRUFBUSxJQUFNLEVBQVEsVUFBWSxFQUFRLElBQU0sRUFBUSxFQUFTLE9BQy9TLElBQU0sT0FDQSxRQUNGLFFBQ0osT0FBTyxlQUFlLEVBQVMsSUFBSyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxFQUFLLENBQUMsRUFDL0YsT0FBTyxlQUFlLEVBQVMsTUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxJQUFPLENBQUMsRUFDbkcsT0FBTyxlQUFlLEVBQVMsWUFBYSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxVQUFhLENBQUMsRUFDL0csT0FBTyxlQUFlLEVBQVMsTUFBTyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxJQUFPLENBQUMsRUFDbkcsT0FBTyxlQUFlLEVBQVMsY0FBZSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxZQUFlLENBQUMsRUFDbkgsT0FBTyxlQUFlLEVBQVMsWUFBYSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxVQUFhLENBQUMsRUFDL0csT0FBTyxlQUFlLEVBQVMsYUFBYyxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxXQUFjLENBQUMsRUFDakgsT0FBTyxlQUFlLEVBQVMsT0FBUSxDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTyxLQUFRLENBQUMsRUFDckcsSUFBSSxRQUNKLE9BQU8sZUFBZSxFQUFTLFFBQVMsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcs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QU8sRUFBTyxRQUFRLEVBQWdCLEdBQUcsRUFBRSxJQUFJLEdBQU8sRUFBTyxNQUFNLEdBQUcsRUFBRSxFQUFRLEVBQUksR0FBTyxDQUFRLEVBQUUsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFPLEVBQVEsU0FBUyxDQUFVLENBQUMsRUFBTyxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBUSxFQUFFLEVBQU8sRUFBTyxPQUFPLE1BQU0sRUFBUSxFQUFPLENBQUMsSUFBSSxHQUFNLEVBQU8sV0FBVyxHQUFTLEVBQUUsR0FBRyxJQUFPLE9BQU8sSUFBTyxPQUFPLEVBQVEsRUFBTyxDQUFDLElBQUksRUFBTSxFQUFPLFdBQVcsR0FBUyxFQUFFLElBQUksRUFBTSxRQUFRLE1BQU0sRUFBTyxPQUFPLEdBQU0sT0FBTyxLQUFLLEVBQU0sTUFBTSxLQUFLLEVBQU8sT0FBTyxLQUFLLEVBQUssRUFBRSxJQUFlLE9BQU8sS0FBSyxFQUFLLEVBQUUsT0FBTyxFQUFPLElBQUksRUFBVyxDQUFDLElBQWEsT0FBTyxjQUFjLEdBQUcsQ0FBVSxFQUFFLEVBQWEsUUFBUSxDQUFDLEVBQVUsQ0FBQyxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsTUFBTyxLQUFJLEVBQVUsSUFBSSxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsT0FBTyxFQUFVLEdBQUcsR0FBRyxHQUFXLElBQUksRUFBVSxJQUFJLE9BQU8sRUFBVSxHQUFHLE1BQU8sS0FBSSxFQUFhLFFBQVEsQ0FBQyxFQUFNLEVBQUssQ0FBQyxPQUFPLEVBQU0sR0FBRyxJQUFJLEVBQU0sTUFBTSxHQUFNLElBQUksSUFBSSxFQUFNLFFBQVEsQ0FBQyxFQUFNLEVBQVUsRUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQU0sRUFBVSxFQUFNLEVBQU0sR0FBRyxFQUFFLEdBQU8sRUFBRSxHQUFPLEVBQU0sRUFBTSxDQUFTLEVBQUUsS0FBSyxFQUFNLElBQUksR0FBRyxHQUFHLEVBQU0sRUFBTSxFQUFNLEVBQUUsRUFBRSxPQUFPLEVBQU0sRUFBRSxHQUFHLEdBQU8sRUFBTSxHQUFHLEdBQUcsRUFBTyxRQUFRLENBQUMsRUFBTSxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBWSxFQUFNLE9BQU8sRUFBRSxFQUFFLEdBQUUsSUFBSSxFQUFLLEdBQUcsR0FBTSxFQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBTSxFQUFFLEdBQU0sRUFBRSxRQUFRLEdBQUUsRUFBRSxHQUFFLEdBQU0sRUFBRSxHQUFFLENBQUMsR0FBRyxFQUFNLFdBQVcsRUFBQyxHQUFHLElBQUksRUFBTSxXQUFXLEVBQUUsRUFBTyxLQUFLLEVBQU0sV0FBVyxFQUFDLENBQUMsRUFBRSxRQUFRLEdBQU0sR0FBTSxFQUFFLEdBQU0sRUFBRSxFQUFFLEdBQU0sR0FBYSxDQUFDLElBQUksR0FBSyxFQUFFLFFBQVEsR0FBRSxFQUFFLEdBQUUsSUFBSSxJQUFHLEdBQUcsQ0FBQyxHQUFHLElBQU8sRUFBWSxFQUFNLGVBQWUsRUFBRSxJQUFJLEdBQU0sRUFBYSxFQUFNLFdBQVcsSUFBTyxDQUFDLEVBQUUsR0FBRyxJQUFPLEdBQUcsRUFBTSxlQUFlLEVBQUUsR0FBRyxHQUFNLEdBQU8sV0FBVyxHQUFHLEVBQUMsRUFBRSxFQUFNLFVBQVUsRUFBRSxHQUFHLEdBQU0sR0FBRSxJQUFJLEdBQUUsSUFBRyxFQUFLLEVBQUUsSUFBRyxFQUFLLEdBQUcsR0FBRyxHQUFFLEVBQUssR0FBRyxHQUFNLEdBQUUsTUFBTSxJQUFJLEdBQVcsR0FBRyxHQUFFLEdBQUcsR0FBRSxFQUFNLFdBQVcsRUFBVSxFQUFFLEVBQU0sVUFBVSxFQUFFLElBQUcsR0FBVyxJQUFJLEdBQUksRUFBTyxPQUFPLEVBQUUsR0FBRyxFQUFLLEVBQU0sRUFBRSxHQUFLLEdBQUksSUFBTSxDQUFDLEVBQUUsRUFBTSxFQUFFLEVBQUcsRUFBRSxXQUFXLEdBQUUsRUFBTSxVQUFVLEVBQUUsSUFBRyxFQUFNLEVBQUUsRUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFPLE9BQU8sSUFBSSxFQUFFLEVBQUMsRUFBRSxPQUFPLE9BQU8sY0FBYyxHQUFHLENBQU0sR0FBRyxFQUFPLFFBQVEsQ0FBQyxFQUFNLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFNLEVBQVcsQ0FBSyxFQUFFLElBQUksRUFBWSxFQUFNLE9BQU8sRUFBRSxJQUFJLEdBQU0sRUFBRSxFQUFLLEdBQUcsUUFBUSxNQUFnQixFQUFNLEdBQUcsR0FBYSxJQUFJLEVBQU8sS0FBSyxFQUFtQixFQUFZLENBQUMsRUFBRSxJQUFJLEdBQVksRUFBTyxPQUFPLEdBQWUsR0FBWSxHQUFHLEdBQVksRUFBTyxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQWUsRUFBWSxDQUFDLElBQUksR0FBRSxXQUFXLFFBQVEsTUFBZ0IsRUFBTSxHQUFHLElBQWMsR0FBRyxHQUFhLEdBQUUsR0FBRSxHQUFhLElBQUksR0FBc0IsR0FBZSxFQUFFLEdBQUcsR0FBRSxFQUFFLEdBQU8sV0FBVyxJQUFPLEVBQXFCLEVBQUUsRUFBTSxVQUFVLEVBQUUsS0FBUSxHQUFFLEdBQUcsR0FBc0IsRUFBRSxHQUFFLFFBQVEsTUFBZ0IsRUFBTSxDQUFDLEdBQUcsR0FBYSxHQUFHLEVBQUUsR0FBTSxXQUFXLEVBQU0sVUFBVSxFQUFFLEdBQUcsS0FBZSxFQUFFLENBQUMsSUFBSSxHQUFFLEdBQU0sUUFBUSxHQUFFLElBQUksSUFBRyxHQUFHLENBQUMsSUFBSSxHQUFFLElBQUcsRUFBSyxFQUFFLElBQUcsRUFBSyxHQUFHLEdBQUcsR0FBRSxFQUFLLEdBQUcsR0FBRSxHQUFFLE1BQU0sSUFBSSxHQUFRLEdBQUUsR0FBRSxHQUFXLEdBQUcsR0FBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLEdBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBTSxHQUFRLEVBQVUsRUFBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSyxFQUFNLEdBQU0sR0FBc0IsS0FBaUIsRUFBVyxFQUFFLEdBQU0sRUFBRSxFQUFFLElBQWdCLEVBQUUsR0FBTSxFQUFFLEVBQUUsT0FBTyxFQUFPLEtBQUssRUFBRSxHQUFH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
|