Files
llm_wiki/.obsidian/plugins/obsidian-pkmer/main.js
T

35 lines
1.7 MiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";const ot=require("obsidian");/**
* @vue/shared v3.5.24
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/function Ss(t){const e=Object.create(null);for(const n of t.split(","))e[n]=1;return n=>n in e}const It={},Re=[],ie=()=>{},Er=()=>!1,jn=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),Es=t=>t.startsWith("onUpdate:"),jt=Object.assign,Is=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},Bi=Object.prototype.hasOwnProperty,Tt=(t,e)=>Bi.call(t,e),ht=Array.isArray,Fe=t=>hn(t)==="[object Map]",Nn=t=>hn(t)==="[object Set]",qs=t=>hn(t)==="[object Date]",gt=t=>typeof t=="function",$t=t=>typeof t=="string",ce=t=>typeof t=="symbol",Pt=t=>t!==null&&typeof t=="object",Ir=t=>(Pt(t)||gt(t))&&gt(t.then)&&gt(t.catch),Ar=Object.prototype.toString,hn=t=>Ar.call(t),Li=t=>hn(t).slice(8,-1),Pr=t=>hn(t)==="[object Object]",As=t=>$t(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,tn=Ss(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Hn=t=>{const e=Object.create(null);return n=>e[n]||(e[n]=t(n))},Mi=/-\w/g,Se=Hn(t=>t.replace(Mi,e=>e.slice(1).toUpperCase())),$i=/\B([A-Z])/g,Le=Hn(t=>t.replace($i,"-$1").toLowerCase()),Or=Hn(t=>t.charAt(0).toUpperCase()+t.slice(1)),Qn=Hn(t=>t?`on${Or(t)}`:""),Te=(t,e)=>!Object.is(t,e),Cn=(t,...e)=>{for(let n=0;n<t.length;n++)t[n](...e)},Dr=(t,e,n,r=!1)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:r,value:n})},Wn=t=>{const e=parseFloat(t);return isNaN(e)?t:e},Ui=t=>{const e=$t(t)?Number(t):NaN;return isNaN(e)?t:e};let Js;const Vn=()=>Js||(Js=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function pn(t){if(ht(t)){const e={};for(let n=0;n<t.length;n++){const r=t[n],s=$t(r)?Ni(r):pn(r);if(s)for(const i in s)e[i]=s[i]}return e}else if($t(t)||Pt(t))return t}const Ri=/;(?![^(]*\))/g,Fi=/:([^]+)/,ji=/\/\*[^]*?\*\//g;function Ni(t){const e={};return t.replace(ji,"").split(Ri).forEach(n=>{if(n){const r=n.split(Fi);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function zt(t){let e="";if($t(t))e=t;else if(ht(t))for(let n=0;n<t.length;n++){const r=zt(t[n]);r&&(e+=r+" ")}else if(Pt(t))for(const n in t)t[n]&&(e+=n+" ");return e.trim()}const Hi="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Wi=Ss(Hi);function zr(t){return!!t||t===""}function Vi(t,e){if(t.length!==e.length)return!1;let n=!0;for(let r=0;n&&r<t.length;r++)n=Zn(t[r],e[r]);return n}function Zn(t,e){if(t===e)return!0;let n=qs(t),r=qs(e);if(n||r)return n&&r?t.getTime()===e.getTime():!1;if(n=ce(t),r=ce(e),n||r)return t===e;if(n=ht(t),r=ht(e),n||r)return n&&r?Vi(t,e):!1;if(n=Pt(t),r=Pt(e),n||r){if(!n||!r)return!1;const s=Object.keys(t).length,i=Object.keys(e).length;if(s!==i)return!1;for(const l in t){const a=t.hasOwnProperty(l),u=e.hasOwnProperty(l);if(a&&!u||!a&&u||!Zn(t[l],e[l]))return!1}}return String(t)===String(e)}function Zi(t,e){return t.findIndex(n=>Zn(n,e))}const Br=t=>!!(t&&t.__v_isRef===!0),bt=t=>$t(t)?t:t==null?"":ht(t)||Pt(t)&&(t.toString===Ar||!gt(t.toString))?Br(t)?bt(t.value):JSON.stringify(t,Lr,2):String(t),Lr=(t,e)=>Br(e)?Lr(t,e.value):Fe(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((n,[r,s],i)=>(n[ts(r,i)+" =>"]=s,n),{})}:Nn(e)?{[`Set(${e.size})`]:[...e.values()].map(n=>ts(n))}:ce(e)?ts(e):Pt(e)&&!ht(e)&&!Pr(e)?String(e):e,ts=(t,e="")=>{var n;return ce(t)?`Symbol(${(n=t.description)!=null?n:e})`:t};/**
* @vue/reactivity v3.5.24
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/let Xt;class Ki{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Xt,!e&&Xt&&(this.index=(Xt.scopes||(Xt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,n;if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].pause();for(e=0,n=this.effects.length;e<n;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let e,n;if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].resume();for(e=0,n=this.effects.length;e<n;e++)this.effects[e].resume()}}run(e){if(this._active){const n=Xt;try{return Xt=this,e()}finally{Xt=n}}}on(){++this._on===1&&(this.prevScope=Xt,Xt=this)}off(){this._on>0&&--this._on===0&&(Xt=this.prevScope,this.prevScope=void 0)}stop(e){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n<r;n++)this.effects[n].stop();for(this.effects.length=0,n=0,r=this.cleanups.length;n<r;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,r=this.scopes.length;n<r;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){const s=this.parent.scopes.pop();s&&s!==this&&(this.parent.scopes[this.index]=s,s.index=this.index)}this.parent=void 0}}}function Gi(){return Xt}let At;const es=new WeakSet;class Mr{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Xt&&Xt.active&&Xt.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,es.has(this)&&(es.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Ur(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Ys(this),Rr(this);const e=At,n=oe;At=this,oe=!0;try{return this.fn()}finally{Fr(this),At=e,oe=n,this.flags&=-3}}stop(){if(this.flags&1){for(let e=this.deps;e;e=e.nextDep)Ds(e);this.deps=this.depsTail=void 0,Ys(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?es.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){us(this)&&this.run()}get dirty(){return us(this)}}let $r=0,en,nn;function Ur(t,e=!1){if(t.flags|=8,e){t.next=nn,nn=t;return}t.next=en,en=t}function Ps(){$r++}function Os(){if(--$r>0)return;if(nn){let e=nn;for(nn=void 0;e;){const n=e.next;e.next=void 0,e.flags&=-9,e=n}}let t;for(;en;){let e=en;for(en=void 0;e;){const n=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(r){t||(t=r)}e=n}}if(t)throw t}function Rr(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function Fr(t){let e,n=t.depsTail,r=n;for(;r;){const s=r.prevDep;r.version===-1?(r===n&&(n=s),Ds(r),qi(r)):e=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}t.deps=e,t.depsTail=n}function us(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(jr(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function jr(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===ln)||(t.globalVersion=ln,!t.isSSR&&t.flags&128&&(!t.deps&&!t._dirty||!us(t))))return;t.flags|=2;const e=t.dep,n=At,r=oe;At=t,oe=!0;try{Rr(t);const s=t.fn(t._value);(e.version===0||Te(s,t._value))&&(t.flags|=128,t._value=s,e.version++)}catch(s){throw e.version++,s}finally{At=n,oe=r,Fr(t),t.flags&=-3}}function Ds(t,e=!1){const{dep:n,prevSub:r,nextSub:s}=t;if(r&&(r.nextSub=s,t.prevSub=void 0),s&&(s.prevSub=r,t.nextSub=void 0),n.subs===t&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ds(i,!0)}!e&&!--n.sc&&n.map&&n.map.delete(n.key)}function qi(t){const{prevDep:e,nextDep:n}=t;e&&(e.nextDep=n,t.prevDep=void 0),n&&(n.prevDep=e,t.nextDep=void 0)}let oe=!0;const Nr=[];function ve(){Nr.push(oe),oe=!1}function we(){const t=Nr.pop();oe=t===void 0?!0:t}function Ys(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const n=At;At=void 0;try{e()}finally{At=n}}}let ln=0;class Ji{constructor(e,n){this.sub=e,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class zs{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!At||!oe||At===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==At)n=this.activeLink=new Ji(At,this),At.deps?(n.prevDep=At.depsTail,At.depsTail.nextDep=n,At.depsTail=n):At.deps=At.depsTail=n,Hr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=At.depsTail,n.nextDep=void 0,At.depsTail.nextDep=n,At.depsTail=n,At.deps===n&&(At.deps=r)}return n}trigger(e){this.version++,ln++,this.notify(e)}notify(e){Ps();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Os()}}}function Hr(t){if(t.dep.sc++,t.sub.flags&4){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let r=e.deps;r;r=r.nextDep)Hr(r)}const n=t.dep.subs;n!==t&&(t.prevSub=n,n&&(n.nextSub=t)),t.dep.subs=t}}const cs=new WeakMap,ze=Symbol(""),ds=Symbol(""),un=Symbol("");function Vt(t,e,n){if(oe&&At){let r=cs.get(t);r||cs.set(t,r=new Map);let s=r.get(n);s||(r.set(n,s=new zs),s.map=r,s.key=n),s.track()}}function me(t,e,n,r,s,i){const l=cs.get(t);if(!l){ln++;return}const a=u=>{u&&u.trigger()};if(Ps(),e==="clear")l.forEach(a);else{const u=ht(t),m=u&&As(n);if(u&&n==="length"){const h=Number(r);l.forEach((f,y)=>{(y==="length"||y===un||!ce(y)&&y>=h)&&a(f)})}else switch((n!==void 0||l.has(void 0))&&a(l.get(n)),m&&a(l.get(un)),e){case"add":u?m&&a(l.get("length")):(a(l.get(ze)),Fe(t)&&a(l.get(ds)));break;case"delete":u||(a(l.get(ze)),Fe(t)&&a(l.get(ds)));break;case"set":Fe(t)&&a(l.get(ze));break}}Os()}function $e(t){const e=Ct(t);return e===t?e:(Vt(e,"iterate",un),ne(t)?e:e.map(Ht))}function Kn(t){return Vt(t=Ct(t),"iterate",un),t}const Yi={__proto__:null,[Symbol.iterator](){return ns(this,Symbol.iterator,Ht)},concat(...t){return $e(this).concat(...t.map(e=>ht(e)?$e(e):e))},entries(){return ns(this,"entries",t=>(t[1]=Ht(t[1]),t))},every(t,e){return he(this,"every",t,e,void 0,arguments)},filter(t,e){return he(this,"filter",t,e,n=>n.map(Ht),arguments)},find(t,e){return he(this,"find",t,e,Ht,arguments)},findIndex(t,e){return he(this,"findIndex",t,e,void 0,arguments)},findLast(t,e){return he(this,"findLast",t,e,Ht,arguments)},findLastIndex(t,e){return he(this,"findLastIndex",t,e,void 0,arguments)},forEach(t,e){return he(this,"forEach",t,e,void 0,arguments)},includes(...t){return ss(this,"includes",t)},indexOf(...t){return ss(this,"indexOf",t)},join(t){return $e(this).join(t)},lastIndexOf(...t){return ss(this,"lastIndexOf",t)},map(t,e){return he(this,"map",t,e,void 0,arguments)},pop(){return Ye(this,"pop")},push(...t){return Ye(this,"push",t)},reduce(t,...e){return Xs(this,"reduce",t,e)},reduceRight(t,...e){return Xs(this,"reduceRight",t,e)},shift(){return Ye(this,"shift")},some(t,e){return he(this,"some",t,e,void 0,arguments)},splice(...t){return Ye(this,"splice",t)},toReversed(){return $e(this).toReversed()},toSorted(t){return $e(this).toSorted(t)},toSpliced(...t){return $e(this).toSpliced(...t)},unshift(...t){return Ye(this,"unshift",t)},values(){return ns(this,"values",Ht)}};function ns(t,e,n){const r=Kn(t),s=r[e]();return r!==t&&!ne(t)&&(s._next=s.next,s.next=()=>{const i=s._next();return i.done||(i.value=n(i.value)),i}),s}const Xi=Array.prototype;function he(t,e,n,r,s,i){const l=Kn(t),a=l!==t&&!ne(t),u=l[e];if(u!==Xi[e]){const f=u.apply(t,i);return a?Ht(f):f}let m=n;l!==t&&(a?m=function(f,y){return n.call(this,Ht(f),y,t)}:n.length>2&&(m=function(f,y){return n.call(this,f,y,t)}));const h=u.call(l,m,r);return a&&s?s(h):h}function Xs(t,e,n,r){const s=Kn(t);let i=n;return s!==t&&(ne(t)?n.length>3&&(i=function(l,a,u){return n.call(this,l,a,u,t)}):i=function(l,a,u){return n.call(this,l,Ht(a),u,t)}),s[e](i,...r)}function ss(t,e,n){const r=Ct(t);Vt(r,"iterate",un);const s=r[e](...n);return(s===-1||s===!1)&&$s(n[0])?(n[0]=Ct(n[0]),r[e](...n)):s}function Ye(t,e,n=[]){ve(),Ps();const r=Ct(t)[e].apply(t,n);return Os(),we(),r}const Qi=Ss("__proto__,__v_isRef,__isVue"),Wr=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(ce));function to(t){ce(t)||(t=String(t));const e=Ct(this);return Vt(e,"has",t),e.hasOwnProperty(t)}class Vr{constructor(e=!1,n=!1){this._isReadonly=e,this._isShallow=n}get(e,n,r){if(n==="__v_skip")return e.__v_skip;const s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?co:qr:i?Gr:Kr).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(r)?e:void 0;const l=ht(e);if(!s){let u;if(l&&(u=Yi[n]))return u;if(n==="hasOwnProperty")return to}const a=Reflect.get(e,n,Zt(e)?e:r);if((ce(n)?Wr.has(n):Qi(n))||(s||Vt(e,"get",n),i))return a;if(Zt(a)){const u=l&&As(n)?a:a.value;return s&&Pt(u)?hs(u):u}return Pt(a)?s?hs(a):Ls(a):a}}class Zr extends Vr{constructor(e=!1){super(!1,e)}set(e,n,r,s){let i=e[n];if(!this._isShallow){const u=Ee(i);if(!ne(r)&&!Ee(r)&&(i=Ct(i),r=Ct(r)),!ht(e)&&Zt(i)&&!Zt(r))return u||(i.value=r),!0}const l=ht(e)&&As(n)?Number(n)<e.length:Tt(e,n),a=Reflect.set(e,n,r,Zt(e)?e:s);return e===Ct(s)&&(l?Te(r,i)&&me(e,"set",n,r):me(e,"add",n,r)),a}deleteProperty(e,n){const r=Tt(e,n);e[n];const s=Reflect.deleteProperty(e,n);return s&&r&&me(e,"delete",n,void 0),s}has(e,n){const r=Reflect.has(e,n);return(!ce(n)||!Wr.has(n))&&Vt(e,"has",n),r}ownKeys(e){return Vt(e,"iterate",ht(e)?"length":ze),Reflect.ownKeys(e)}}class eo extends Vr{constructor(e=!1){super(!0,e)}set(e,n){return!0}deleteProperty(e,n){return!0}}const no=new Zr,so=new eo,ro=new Zr(!0);const fs=t=>t,yn=t=>Reflect.getPrototypeOf(t);function io(t,e,n){return function(...r){const s=this.__v_raw,i=Ct(s),l=Fe(i),a=t==="entries"||t===Symbol.iterator&&l,u=t==="keys"&&l,m=s[t](...r),h=n?fs:e?An:Ht;return!e&&Vt(i,"iterate",u?ds:ze),{next(){const{value:f,done:y}=m.next();return y?{value:f,done:y}:{value:a?[h(f[0]),h(f[1])]:h(f),done:y}},[Symbol.iterator](){return this}}}}function bn(t){return function(...e){return t==="delete"?!1:t==="clear"?void 0:this}}function oo(t,e){const n={get(s){const i=this.__v_raw,l=Ct(i),a=Ct(s);t||(Te(s,a)&&Vt(l,"get",s),Vt(l,"get",a));const{has:u}=yn(l),m=e?fs:t?An:Ht;if(u.call(l,s))return m(i.get(s));if(u.call(l,a))return m(i.get(a));i!==l&&i.get(s)},get size(){const s=this.__v_raw;return!t&&Vt(Ct(s),"iterate",ze),s.size},has(s){const i=this.__v_raw,l=Ct(i),a=Ct(s);return t||(Te(s,a)&&Vt(l,"has",s),Vt(l,"has",a)),s===a?i.has(s):i.has(s)||i.has(a)},forEach(s,i){const l=this,a=l.__v_raw,u=Ct(a),m=e?fs:t?An:Ht;return!t&&Vt(u,"iterate",ze),a.forEach((h,f)=>s.call(i,m(h),m(f),l))}};return jt(n,t?{add:bn("add"),set:bn("set"),delete:bn("delete"),clear:bn("clear")}:{add(s){!e&&!ne(s)&&!Ee(s)&&(s=Ct(s));const i=Ct(this);return yn(i).has.call(i,s)||(i.add(s),me(i,"add",s,s)),this},set(s,i){!e&&!ne(i)&&!Ee(i)&&(i=Ct(i));const l=Ct(this),{has:a,get:u}=yn(l);let m=a.call(l,s);m||(s=Ct(s),m=a.call(l,s));const h=u.call(l,s);return l.set(s,i),m?Te(i,h)&&me(l,"set",s,i):me(l,"add",s,i),this},delete(s){const i=Ct(this),{has:l,get:a}=yn(i);let u=l.call(i,s);u||(s=Ct(s),u=l.call(i,s)),a&&a.call(i,s);const m=i.delete(s);return u&&me(i,"delete",s,void 0),m},clear(){const s=Ct(this),i=s.size!==0,l=s.clear();return i&&me(s,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=io(s,t,e)}),n}function Bs(t,e){const n=oo(t,e);return(r,s,i)=>s==="__v_isReactive"?!t:s==="__v_isReadonly"?t:s==="__v_raw"?r:Reflect.get(Tt(n,s)&&s in r?n:r,s,i)}const ao={get:Bs(!1,!1)},lo={get:Bs(!1,!0)},uo={get:Bs(!0,!1)};const Kr=new WeakMap,Gr=new WeakMap,qr=new WeakMap,co=new WeakMap;function fo(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ho(t){return t.__v_skip||!Object.isExtensible(t)?0:fo(Li(t))}function Ls(t){return Ee(t)?t:Ms(t,!1,no,ao,Kr)}function po(t){return Ms(t,!1,ro,lo,Gr)}function hs(t){return Ms(t,!0,so,uo,qr)}function Ms(t,e,n,r,s){if(!Pt(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const i=ho(t);if(i===0)return t;const l=s.get(t);if(l)return l;const a=new Proxy(t,i===2?r:n);return s.set(t,a),a}function je(t){return Ee(t)?je(t.__v_raw):!!(t&&t.__v_isReactive)}function Ee(t){return!!(t&&t.__v_isReadonly)}function ne(t){return!!(t&&t.__v_isShallow)}function $s(t){return t?!!t.__v_raw:!1}function Ct(t){const e=t&&t.__v_raw;return e?Ct(e):t}function mo(t){return!Tt(t,"__v_skip")&&Object.isExtensible(t)&&Dr(t,"__v_skip",!0),t}const Ht=t=>Pt(t)?Ls(t):t,An=t=>Pt(t)?hs(t):t;function Zt(t){return t?t.__v_isRef===!0:!1}function ut(t){return go(t,!1)}function go(t,e){return Zt(t)?t:new vo(t,e)}class vo{constructor(e,n){this.dep=new zs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?e:Ct(e),this._value=n?e:Ht(e),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(e){const n=this._rawValue,r=this.__v_isShallow||ne(e)||Ee(e);e=r?e:Ct(e),Te(e,n)&&(this._rawValue=e,this._value=r?e:Ht(e),this.dep.trigger())}}function Jt(t){return Zt(t)?t.value:t}const wo={get:(t,e,n)=>e==="__v_raw"?t:Jt(Reflect.get(t,e,n)),set:(t,e,n,r)=>{const s=t[e];return Zt(s)&&!Zt(n)?(s.value=n,!0):Reflect.set(t,e,n,r)}};function Jr(t){return je(t)?t:new Proxy(t,wo)}class yo{constructor(e,n,r){this.fn=e,this.setter=n,this._value=void 0,this.dep=new zs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ln-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&At!==this)return Ur(this,!0),!0}get value(){const e=this.dep.track();return jr(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function bo(t,e,n=!1){let r,s;return gt(t)?r=t:(r=t.get,s=t.set),new yo(r,s,n)}const _n={},Pn=new WeakMap;let Oe;function _o(t,e=!1,n=Oe){if(n){let r=Pn.get(n);r||Pn.set(n,r=[]),r.push(t)}}function xo(t,e,n=It){const{immediate:r,deep:s,once:i,scheduler:l,augmentJob:a,call:u}=n,m=D=>s?D:ne(D)||s===!1||s===0?ge(D,1):ge(D);let h,f,y,c,k=!1,v=!1;if(Zt(t)?(f=()=>t.value,k=ne(t)):je(t)?(f=()=>m(t),k=!0):ht(t)?(v=!0,k=t.some(D=>je(D)||ne(D)),f=()=>t.map(D=>{if(Zt(D))return D.value;if(je(D))return m(D);if(gt(D))return u?u(D,2):D()})):gt(t)?e?f=u?()=>u(t,2):t:f=()=>{if(y){ve();try{y()}finally{we()}}const D=Oe;Oe=h;try{return u?u(t,3,[c]):t(c)}finally{Oe=D}}:f=ie,e&&s){const D=f,A=s===!0?1/0:s;f=()=>ge(D(),A)}const x=Gi(),g=()=>{h.stop(),x&&x.active&&Is(x.effects,h)};if(i&&e){const D=e;e=(...A)=>{D(...A),g()}}let T=v?new Array(t.length).fill(_n):_n;const O=D=>{if(!(!(h.flags&1)||!h.dirty&&!D))if(e){const A=h.run();if(s||k||(v?A.some((L,$)=>Te(L,T[$])):Te(A,T))){y&&y();const L=Oe;Oe=h;try{const $=[A,T===_n?void 0:v&&T[0]===_n?[]:T,c];T=A,u?u(e,3,$):e(...$)}finally{Oe=L}}}else h.run()};return a&&a(O),h=new Mr(f),h.scheduler=l?()=>l(O,!1):O,c=D=>_o(D,!1,h),y=h.onStop=()=>{const D=Pn.get(h);if(D){if(u)u(D,4);else for(const A of D)A();Pn.delete(h)}},e?r?O(!0):T=h.run():l?l(O.bind(null,!0),!0):h.run(),g.pause=h.pause.bind(h),g.resume=h.resume.bind(h),g.stop=g,g}function ge(t,e=1/0,n){if(e<=0||!Pt(t)||t.__v_skip||(n=n||new Map,(n.get(t)||0)>=e))return t;if(n.set(t,e),e--,Zt(t))ge(t.value,e,n);else if(ht(t))for(let r=0;r<t.length;r++)ge(t[r],e,n);else if(Nn(t)||Fe(t))t.forEach(r=>{ge(r,e,n)});else if(Pr(t)){for(const r in t)ge(t[r],e,n);for(const r of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,r)&&ge(t[r],e,n)}return t}/**
* @vue/runtime-core v3.5.24
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/function mn(t,e,n,r){try{return r?t(...r):t()}catch(s){gn(s,e,n)}}function de(t,e,n,r){if(gt(t)){const s=mn(t,e,n,r);return s&&Ir(s)&&s.catch(i=>{gn(i,e,n)}),s}if(ht(t)){const s=[];for(let i=0;i<t.length;i++)s.push(de(t[i],e,n,r));return s}}function gn(t,e,n,r=!0){const s=e?e.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:l}=e&&e.appContext.config||It;if(e){let a=e.parent;const u=e.proxy,m=`https://vuejs.org/error-reference/#runtime-${n}`;for(;a;){const h=a.ec;if(h){for(let f=0;f<h.length;f++)if(h[f](t,u,m)===!1)return}a=a.parent}if(i){ve(),mn(i,null,10,[t,u,m]),we();return}}ko(t,n,s,r,l)}function ko(t,e,n,r=!0,s=!1){if(s)throw t;console.error(t)}const qt=[];let le=-1;const Ne=[];let xe=null,Ue=0;const Yr=Promise.resolve();let On=null;function Xr(t){const e=On||Yr;return t?e.then(this?t.bind(this):t):e}function Co(t){let e=le+1,n=qt.length;for(;e<n;){const r=e+n>>>1,s=qt[r],i=cn(s);i<t||i===t&&s.flags&2?e=r+1:n=r}return e}function Us(t){if(!(t.flags&1)){const e=cn(t),n=qt[qt.length-1];!n||!(t.flags&2)&&e>=cn(n)?qt.push(t):qt.splice(Co(e),0,t),t.flags|=1,Qr()}}function Qr(){On||(On=Yr.then(ei))}function ps(t){ht(t)?Ne.push(...t):xe&&t.id===-1?xe.splice(Ue+1,0,t):t.flags&1||(Ne.push(t),t.flags|=1),Qr()}function Qs(t,e,n=le+1){for(;n<qt.length;n++){const r=qt[n];if(r&&r.flags&2){if(t&&r.id!==t.uid)continue;qt.splice(n,1),n--,r.flags&4&&(r.flags&=-2),r(),r.flags&4||(r.flags&=-2)}}}function ti(t){if(Ne.length){const e=[...new Set(Ne)].sort((n,r)=>cn(n)-cn(r));if(Ne.length=0,xe){xe.push(...e);return}for(xe=e,Ue=0;Ue<xe.length;Ue++){const n=xe[Ue];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}xe=null,Ue=0}}const cn=t=>t.id==null?t.flags&2?-1:1/0:t.id;function ei(t){const e=ie;try{for(le=0;le<qt.length;le++){const n=qt[le];n&&!(n.flags&8)&&(n.flags&4&&(n.flags&=-2),mn(n,n.i,n.i?15:14),n.flags&4||(n.flags&=-2))}}finally{for(;le<qt.length;le++){const n=qt[le];n&&(n.flags&=-2)}le=-1,qt.length=0,ti(),On=null,(qt.length||Ne.length)&&ei()}}let ee=null,ni=null;function Dn(t){const e=ee;return ee=t,ni=t&&t.type.__scopeId||null,e}function ms(t,e=ee,n){if(!e||t._n)return t;const r=(...s)=>{r._d&&ur(-1);const i=Dn(e);let l;try{l=t(...s)}finally{Dn(i),r._d&&ur(1)}return l};return r._n=!0,r._c=!0,r._d=!0,r}function Et(t,e){if(ee===null)return t;const n=Xn(ee),r=t.dirs||(t.dirs=[]);for(let s=0;s<e.length;s++){let[i,l,a,u=It]=e[s];i&&(gt(i)&&(i={mounted:i,updated:i}),i.deep&&ge(l),r.push({dir:i,instance:n,value:l,oldValue:void 0,arg:a,modifiers:u}))}return t}function Ae(t,e,n,r){const s=t.dirs,i=e&&e.dirs;for(let l=0;l<s.length;l++){const a=s[l];i&&(a.oldValue=i[l].value);let u=a.dir[r];u&&(ve(),de(u,n,8,[t.el,a,t,e]),we())}}const To=Symbol("_vte"),So=t=>t.__isTeleport,Eo=Symbol("_leaveCb");function Rs(t,e){t.shapeFlag&6&&t.component?(t.transition=e,Rs(t.component.subTree,e)):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Ie(t,e){return gt(t)?(()=>jt({name:t.name},e,{setup:t}))():t}function si(t){t.ids=[t.ids[0]+t.ids[2]+++"-",0,0]}const zn=new WeakMap;function sn(t,e,n,r,s=!1){if(ht(t)){t.forEach((k,v)=>sn(k,e&&(ht(e)?e[v]:e),n,r,s));return}if(rn(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&sn(t,e,n,r.component.subTree);return}const i=r.shapeFlag&4?Xn(r.component):r.el,l=s?null:i,{i:a,r:u}=t,m=e&&e.r,h=a.refs===It?a.refs={}:a.refs,f=a.setupState,y=Ct(f),c=f===It?Er:k=>Tt(y,k);if(m!=null&&m!==u){if(tr(e),$t(m))h[m]=null,c(m)&&(f[m]=null);else if(Zt(m)){m.value=null;const k=e;k.k&&(h[k.k]=null)}}if(gt(u))mn(u,a,12,[l,h]);else{const k=$t(u),v=Zt(u);if(k||v){const x=()=>{if(t.f){const g=k?c(u)?f[u]:h[u]:u.value;if(s)ht(g)&&Is(g,i);else if(ht(g))g.includes(i)||g.push(i);else if(k)h[u]=[i],c(u)&&(f[u]=h[u]);else{const T=[i];u.value=T,t.k&&(h[t.k]=T)}}else k?(h[u]=l,c(u)&&(f[u]=l)):v&&(u.value=l,t.k&&(h[t.k]=l))};if(l){const g=()=>{x(),zn.delete(t)};g.id=-1,zn.set(t,g),te(g,n)}else tr(t),x()}}}function tr(t){const e=zn.get(t);e&&(e.flags|=8,zn.delete(t))}Vn().requestIdleCallback;Vn().cancelIdleCallback;const rn=t=>!!t.type.__asyncLoader,ri=t=>t.type.__isKeepAlive;function Io(t,e){ii(t,"a",e)}function Ao(t,e){ii(t,"da",e)}function ii(t,e,n=Yt){const r=t.__wdc||(t.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return t()});if(Gn(e,r,n),n){let s=n.parent;for(;s&&s.parent;)ri(s.parent.vnode)&&Po(r,e,n,s),s=s.parent}}function Po(t,e,n,r){const s=Gn(e,t,r,!0);vn(()=>{Is(r[e],s)},n)}function Gn(t,e,n=Yt,r=!1){if(n){const s=n[t]||(n[t]=[]),i=e.__weh||(e.__weh=(...l)=>{ve();const a=wn(n),u=de(e,n,t,l);return a(),we(),u});return r?s.unshift(i):s.push(i),i}}const ye=t=>(e,n=Yt)=>{(!fn||t==="sp")&&Gn(t,(...r)=>e(...r),n)},Oo=ye("bm"),qn=ye("m"),Do=ye("bu"),zo=ye("u"),Bo=ye("bum"),vn=ye("um"),Lo=ye("sp"),Mo=ye("rtg"),$o=ye("rtc");function Uo(t,e=Yt){Gn("ec",t,e)}const Ro=Symbol.for("v-ndc");function Ke(t,e,n,r){let s;const i=n&&n[r],l=ht(t);if(l||$t(t)){const a=l&&je(t);let u=!1,m=!1;a&&(u=!ne(t),m=Ee(t),t=Kn(t)),s=new Array(t.length);for(let h=0,f=t.length;h<f;h++)s[h]=e(u?m?An(Ht(t[h])):Ht(t[h]):t[h],h,void 0,i&&i[h])}else if(typeof t=="number"){s=new Array(t);for(let a=0;a<t;a++)s[a]=e(a+1,a,void 0,i&&i[a])}else if(Pt(t))if(t[Symbol.iterator])s=Array.from(t,(a,u)=>e(a,u,void 0,i&&i[u]));else{const a=Object.keys(t);s=new Array(a.length);for(let u=0,m=a.length;u<m;u++){const h=a[u];s[u]=e(t[h],h,u,i&&i[u])}}else s=[];return n&&(n[r]=s),s}const gs=t=>t?Si(t)?Xn(t):gs(t.parent):null,on=jt(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>gs(t.parent),$root:t=>gs(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>Fs(t),$forceUpdate:t=>t.f||(t.f=()=>{Us(t.update)}),$nextTick:t=>t.n||(t.n=Xr.bind(t.proxy)),$watch:t=>aa.bind(t)}),rs=(t,e)=>t!==It&&!t.__isScriptSetup&&Tt(t,e),Fo={get({_:t},e){if(e==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:i,accessCache:l,type:a,appContext:u}=t;let m;if(e[0]!=="$"){const c=l[e];if(c!==void 0)switch(c){case 1:return r[e];case 2:return s[e];case 4:return n[e];case 3:return i[e]}else{if(rs(r,e))return l[e]=1,r[e];if(s!==It&&Tt(s,e))return l[e]=2,s[e];if((m=t.propsOptions[0])&&Tt(m,e))return l[e]=3,i[e];if(n!==It&&Tt(n,e))return l[e]=4,n[e];vs&&(l[e]=0)}}const h=on[e];let f,y;if(h)return e==="$attrs"&&Vt(t.attrs,"get",""),h(t);if((f=a.__cssModules)&&(f=f[e]))return f;if(n!==It&&Tt(n,e))return l[e]=4,n[e];if(y=u.config.globalProperties,Tt(y,e))return y[e]},set({_:t},e,n){const{data:r,setupState:s,ctx:i}=t;return rs(s,e)?(s[e]=n,!0):r!==It&&Tt(r,e)?(r[e]=n,!0):Tt(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(i[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:r,appContext:s,propsOptions:i,type:l}},a){let u,m;return!!(n[a]||t!==It&&a[0]!=="$"&&Tt(t,a)||rs(e,a)||(u=i[0])&&Tt(u,a)||Tt(r,a)||Tt(on,a)||Tt(s.config.globalProperties,a)||(m=l.__cssModules)&&m[a])},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:Tt(n,"value")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}};function er(t){return ht(t)?t.reduce((e,n)=>(e[n]=null,e),{}):t}let vs=!0;function jo(t){const e=Fs(t),n=t.proxy,r=t.ctx;vs=!1,e.beforeCreate&&nr(e.beforeCreate,t,"bc");const{data:s,computed:i,methods:l,watch:a,provide:u,inject:m,created:h,beforeMount:f,mounted:y,beforeUpdate:c,updated:k,activated:v,deactivated:x,beforeDestroy:g,beforeUnmount:T,destroyed:O,unmounted:D,render:A,renderTracked:L,renderTriggered:$,errorCaptured:G,serverPrefetch:R,expose:q,inheritAttrs:st,components:P,directives:W,filters:d}=e;if(m&&No(m,r,null),l)for(const V in l){const Q=l[V];gt(Q)&&(r[V]=Q.bind(n))}if(s){const V=s.call(n,n);Pt(V)&&(t.data=Ls(V))}if(vs=!0,i)for(const V in i){const Q=i[V],J=gt(Q)?Q.bind(n,n):gt(Q.get)?Q.get.bind(n,n):ie,rt=!gt(Q)&&gt(Q.set)?Q.set.bind(n):ie,U=Nt({get:J,set:rt});Object.defineProperty(r,V,{enumerable:!0,configurable:!0,get:()=>U.value,set:M=>U.value=M})}if(a)for(const V in a)oi(a[V],r,n,V);if(u){const V=gt(u)?u.call(n):u;Reflect.ownKeys(V).forEach(Q=>{Go(Q,V[Q])})}h&&nr(h,t,"c");function tt(V,Q){ht(Q)?Q.forEach(J=>V(J.bind(n))):Q&&V(Q.bind(n))}if(tt(Oo,f),tt(qn,y),tt(Do,c),tt(zo,k),tt(Io,v),tt(Ao,x),tt(Uo,G),tt($o,L),tt(Mo,$),tt(Bo,T),tt(vn,D),tt(Lo,R),ht(q))if(q.length){const V=t.exposed||(t.exposed={});q.forEach(Q=>{Object.defineProperty(V,Q,{get:()=>n[Q],set:J=>n[Q]=J,enumerable:!0})})}else t.exposed||(t.exposed={});A&&t.render===ie&&(t.render=A),st!=null&&(t.inheritAttrs=st),P&&(t.components=P),W&&(t.directives=W),R&&si(t)}function No(t,e,n=ie){ht(t)&&(t=ws(t));for(const r in t){const s=t[r];let i;Pt(s)?"default"in s?i=Tn(s.from||r,s.default,!0):i=Tn(s.from||r):i=Tn(s),Zt(i)?Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):e[r]=i}}function nr(t,e,n){de(ht(t)?t.map(r=>r.bind(e.proxy)):t.bind(e.proxy),e,n)}function oi(t,e,n,r){let s=r.includes(".")?yi(n,r):()=>n[r];if($t(t)){const i=e[t];gt(i)&&We(s,i)}else if(gt(t))We(s,t.bind(n));else if(Pt(t))if(ht(t))t.forEach(i=>oi(i,e,n,r));else{const i=gt(t.handler)?t.handler.bind(n):e[t.handler];gt(i)&&We(s,i,t)}}function Fs(t){const e=t.type,{mixins:n,extends:r}=e,{mixins:s,optionsCache:i,config:{optionMergeStrategies:l}}=t.appContext,a=i.get(e);let u;return a?u=a:!s.length&&!n&&!r?u=e:(u={},s.length&&s.forEach(m=>Bn(u,m,l,!0)),Bn(u,e,l)),Pt(e)&&i.set(e,u),u}function Bn(t,e,n,r=!1){const{mixins:s,extends:i}=e;i&&Bn(t,i,n,!0),s&&s.forEach(l=>Bn(t,l,n,!0));for(const l in e)if(!(r&&l==="expose")){const a=Ho[l]||n&&n[l];t[l]=a?a(t[l],e[l]):e[l]}return t}const Ho={data:sr,props:rr,emits:rr,methods:Qe,computed:Qe,beforeCreate:Gt,created:Gt,beforeMount:Gt,mounted:Gt,beforeUpdate:Gt,updated:Gt,beforeDestroy:Gt,beforeUnmount:Gt,destroyed:Gt,unmounted:Gt,activated:Gt,deactivated:Gt,errorCaptured:Gt,serverPrefetch:Gt,components:Qe,directives:Qe,watch:Vo,provide:sr,inject:Wo};function sr(t,e){return e?t?function(){return jt(gt(t)?t.call(this,this):t,gt(e)?e.call(this,this):e)}:e:t}function Wo(t,e){return Qe(ws(t),ws(e))}function ws(t){if(ht(t)){const e={};for(let n=0;n<t.length;n++)e[t[n]]=t[n];return e}return t}function Gt(t,e){return t?[...new Set([].concat(t,e))]:e}function Qe(t,e){return t?jt(Object.create(null),t,e):e}function rr(t,e){return t?ht(t)&&ht(e)?[...new Set([...t,...e])]:jt(Object.create(null),er(t),er(e??{})):e}function Vo(t,e){if(!t)return e;if(!e)return t;const n=jt(Object.create(null),t);for(const r in e)n[r]=Gt(t[r],e[r]);return n}function ai(){return{app:null,config:{isNativeTag:Er,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Zo=0;function Ko(t,e){return function(r,s=null){gt(r)||(r=jt({},r)),s!=null&&!Pt(s)&&(s=null);const i=ai(),l=new WeakSet,a=[];let u=!1;const m=i.app={_uid:Zo++,_component:r,_props:s,_container:null,_context:i,_instance:null,version:La,get config(){return i.config},set config(h){},use(h,...f){return l.has(h)||(h&&gt(h.install)?(l.add(h),h.install(m,...f)):gt(h)&&(l.add(h),h(m,...f))),m},mixin(h){return i.mixins.includes(h)||i.mixins.push(h),m},component(h,f){return f?(i.components[h]=f,m):i.components[h]},directive(h,f){return f?(i.directives[h]=f,m):i.directives[h]},mount(h,f,y){if(!u){const c=m._ceVNode||Ft(r,s);return c.appContext=i,y===!0?y="svg":y===!1&&(y=void 0),f&&e?e(c,h):t(c,h,y),u=!0,m._container=h,h.__vue_app__=m,Xn(c.component)}},onUnmount(h){a.push(h)},unmount(){u&&(de(a,m._instance,16),t(null,m._container),delete m._container.__vue_app__)},provide(h,f){return i.provides[h]=f,m},runWithContext(h){const f=He;He=m;try{return h()}finally{He=f}}};return m}}let He=null;function Go(t,e){if(Yt){let n=Yt.provides;const r=Yt.parent&&Yt.parent.provides;r===n&&(n=Yt.provides=Object.create(r)),n[t]=e}}function Tn(t,e,n=!1){const r=Aa();if(r||He){let s=He?He._context.provides:r?r.parent==null||r.ce?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:void 0;if(s&&t in s)return s[t];if(arguments.length>1)return n&&gt(e)?e.call(r&&r.proxy):e}}const li={},ui=()=>Object.create(li),ci=t=>Object.getPrototypeOf(t)===li;function qo(t,e,n,r=!1){const s={},i=ui();t.propsDefaults=Object.create(null),di(t,e,s,i);for(const l in t.propsOptions[0])l in s||(s[l]=void 0);n?t.props=r?s:po(s):t.type.props?t.props=s:t.props=i,t.attrs=i}function Jo(t,e,n,r){const{props:s,attrs:i,vnode:{patchFlag:l}}=t,a=Ct(s),[u]=t.propsOptions;let m=!1;if((r||l>0)&&!(l&16)){if(l&8){const h=t.vnode.dynamicProps;for(let f=0;f<h.length;f++){let y=h[f];if(Jn(t.emitsOptions,y))continue;const c=e[y];if(u)if(Tt(i,y))c!==i[y]&&(i[y]=c,m=!0);else{const k=Se(y);s[k]=ys(u,a,k,c,t,!1)}else c!==i[y]&&(i[y]=c,m=!0)}}}else{di(t,e,s,i)&&(m=!0);let h;for(const f in a)(!e||!Tt(e,f)&&((h=Le(f))===f||!Tt(e,h)))&&(u?n&&(n[f]!==void 0||n[h]!==void 0)&&(s[f]=ys(u,a,f,void 0,t,!0)):delete s[f]);if(i!==a)for(const f in i)(!e||!Tt(e,f))&&(delete i[f],m=!0)}m&&me(t.attrs,"set","")}function di(t,e,n,r){const[s,i]=t.propsOptions;let l=!1,a;if(e)for(let u in e){if(tn(u))continue;const m=e[u];let h;s&&Tt(s,h=Se(u))?!i||!i.includes(h)?n[h]=m:(a||(a={}))[h]=m:Jn(t.emitsOptions,u)||(!(u in r)||m!==r[u])&&(r[u]=m,l=!0)}if(i){const u=Ct(n),m=a||It;for(let h=0;h<i.length;h++){const f=i[h];n[f]=ys(s,u,f,m[f],t,!Tt(m,f))}}return l}function ys(t,e,n,r,s,i){const l=t[n];if(l!=null){const a=Tt(l,"default");if(a&&r===void 0){const u=l.default;if(l.type!==Function&&!l.skipFactory&&gt(u)){const{propsDefaults:m}=s;if(n in m)r=m[n];else{const h=wn(s);r=m[n]=u.call(null,e),h()}}else r=u;s.ce&&s.ce._setProp(n,r)}l[0]&&(i&&!a?r=!1:l[1]&&(r===""||r===Le(n))&&(r=!0))}return r}const Yo=new WeakMap;function fi(t,e,n=!1){const r=n?Yo:e.propsCache,s=r.get(t);if(s)return s;const i=t.props,l={},a=[];let u=!1;if(!gt(t)){const h=f=>{u=!0;const[y,c]=fi(f,e,!0);jt(l,y),c&&a.push(...c)};!n&&e.mixins.length&&e.mixins.forEach(h),t.extends&&h(t.extends),t.mixins&&t.mixins.forEach(h)}if(!i&&!u)return Pt(t)&&r.set(t,Re),Re;if(ht(i))for(let h=0;h<i.length;h++){const f=Se(i[h]);ir(f)&&(l[f]=It)}else if(i)for(const h in i){const f=Se(h);if(ir(f)){const y=i[h],c=l[f]=ht(y)||gt(y)?{type:y}:jt({},y),k=c.type;let v=!1,x=!0;if(ht(k))for(let g=0;g<k.length;++g){const T=k[g],O=gt(T)&&T.name;if(O==="Boolean"){v=!0;break}else O==="String"&&(x=!1)}else v=gt(k)&&k.name==="Boolean";c[0]=v,c[1]=x,(v||Tt(c,"default"))&&a.push(f)}}const m=[l,a];return Pt(t)&&r.set(t,m),m}function ir(t){return t[0]!=="$"&&!tn(t)}const js=t=>t==="_"||t==="_ctx"||t==="$stable",Ns=t=>ht(t)?t.map(re):[re(t)],Xo=(t,e,n)=>{if(e._n)return e;const r=ms((...s)=>Ns(e(...s)),n);return r._c=!1,r},hi=(t,e,n)=>{const r=t._ctx;for(const s in t){if(js(s))continue;const i=t[s];if(gt(i))e[s]=Xo(s,i,r);else if(i!=null){const l=Ns(i);e[s]=()=>l}}},pi=(t,e)=>{const n=Ns(e);t.slots.default=()=>n},mi=(t,e,n)=>{for(const r in e)(n||!js(r))&&(t[r]=e[r])},Qo=(t,e,n)=>{const r=t.slots=ui();if(t.vnode.shapeFlag&32){const s=e._;s?(mi(r,e,n),n&&Dr(r,"_",s,!0)):hi(e,r)}else e&&pi(t,e)},ta=(t,e,n)=>{const{vnode:r,slots:s}=t;let i=!0,l=It;if(r.shapeFlag&32){const a=e._;a?n&&a===1?i=!1:mi(s,e,n):(i=!e.$stable,hi(e,s)),l=e}else e&&(pi(t,e),l={default:1});if(i)for(const a in s)!js(a)&&l[a]==null&&delete s[a]},te=_a;function ea(t){return na(t)}function na(t,e){const n=Vn();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:l,createText:a,createComment:u,setText:m,setElementText:h,parentNode:f,nextSibling:y,setScopeId:c=ie,insertStaticContent:k}=t,v=(_,o,C,I=null,w=null,p=null,S=void 0,z=null,B=!!o.dynamicChildren)=>{if(_===o)return;_&&!Ce(_,o)&&(I=xt(_),M(_,w,p,!0),_=null),o.patchFlag===-2&&(B=!1,o.dynamicChildren=null);const{type:E,ref:N,shapeFlag:j}=o;switch(E){case Yn:x(_,o,C,I);break;case fe:g(_,o,C,I);break;case Sn:_==null&&T(o,C,I,S);break;case Mt:P(_,o,C,I,w,p,S,z,B);break;default:j&1?A(_,o,C,I,w,p,S,z,B):j&6?W(_,o,C,I,w,p,S,z,B):(j&64||j&128)&&E.process(_,o,C,I,w,p,S,z,B,yt)}N!=null&&w?sn(N,_&&_.ref,p,o||_,!o):N==null&&_&&_.ref!=null&&sn(_.ref,null,p,_,!0)},x=(_,o,C,I)=>{if(_==null)r(o.el=a(o.children),C,I);else{const w=o.el=_.el;o.children!==_.children&&m(w,o.children)}},g=(_,o,C,I)=>{_==null?r(o.el=u(o.children||""),C,I):o.el=_.el},T=(_,o,C,I)=>{[_.el,_.anchor]=k(_.children,o,C,I,_.el,_.anchor)},O=({el:_,anchor:o},C,I)=>{let w;for(;_&&_!==o;)w=y(_),r(_,C,I),_=w;r(o,C,I)},D=({el:_,anchor:o})=>{let C;for(;_&&_!==o;)C=y(_),s(_),_=C;s(o)},A=(_,o,C,I,w,p,S,z,B)=>{if(o.type==="svg"?S="svg":o.type==="math"&&(S="mathml"),_==null)L(o,C,I,w,p,S,z,B);else{const E=_.el&&_.el._isVueCE?_.el:null;try{E&&E._beginPatch(),R(_,o,w,p,S,z,B)}finally{E&&E._endPatch()}}},L=(_,o,C,I,w,p,S,z)=>{let B,E;const{props:N,shapeFlag:j,transition:H,dirs:Y}=_;if(B=_.el=l(_.type,p,N&&N.is,N),j&8?h(B,_.children):j&16&&G(_.children,B,null,I,w,is(_,p),S,z),Y&&Ae(_,null,I,"created"),$(B,_,_.scopeId,S,I),N){for(const it in N)it!=="value"&&!tn(it)&&i(B,it,null,N[it],p,I);"value"in N&&i(B,"value",null,N.value,p),(E=N.onVnodeBeforeMount)&&ae(E,I,_)}Y&&Ae(_,null,I,"beforeMount");const at=sa(w,H);at&&H.beforeEnter(B),r(B,o,C),((E=N&&N.onVnodeMounted)||at||Y)&&te(()=>{E&&ae(E,I,_),at&&H.enter(B),Y&&Ae(_,null,I,"mounted")},w)},$=(_,o,C,I,w)=>{if(C&&c(_,C),I)for(let p=0;p<I.length;p++)c(_,I[p]);if(w){let p=w.subTree;if(o===p||_i(p.type)&&(p.ssContent===o||p.ssFallback===o)){const S=w.vnode;$(_,S,S.scopeId,S.slotScopeIds,w.parent)}}},G=(_,o,C,I,w,p,S,z,B=0)=>{for(let E=B;E<_.length;E++){const N=_[E]=z?ke(_[E]):re(_[E]);v(null,N,o,C,I,w,p,S,z)}},R=(_,o,C,I,w,p,S)=>{const z=o.el=_.el;let{patchFlag:B,dynamicChildren:E,dirs:N}=o;B|=_.patchFlag&16;const j=_.props||It,H=o.props||It;let Y;if(C&&Pe(C,!1),(Y=H.onVnodeBeforeUpdate)&&ae(Y,C,o,_),N&&Ae(o,_,C,"beforeUpdate"),C&&Pe(C,!0),(j.innerHTML&&H.innerHTML==null||j.textContent&&H.textContent==null)&&h(z,""),E?q(_.dynamicChildren,E,z,C,I,is(o,w),p):S||Q(_,o,z,null,C,I,is(o,w),p,!1),B>0){if(B&16)st(z,j,H,C,w);else if(B&2&&j.class!==H.class&&i(z,"class",null,H.class,w),B&4&&i(z,"style",j.style,H.style,w),B&8){const at=o.dynamicProps;for(let it=0;it<at.length;it++){const mt=at[it],Bt=j[mt],St=H[mt];(St!==Bt||mt==="value")&&i(z,mt,Bt,St,w,C)}}B&1&&_.children!==o.children&&h(z,o.children)}else!S&&E==null&&st(z,j,H,C,w);((Y=H.onVnodeUpdated)||N)&&te(()=>{Y&&ae(Y,C,o,_),N&&Ae(o,_,C,"updated")},I)},q=(_,o,C,I,w,p,S)=>{for(let z=0;z<o.length;z++){const B=_[z],E=o[z],N=B.el&&(B.type===Mt||!Ce(B,E)||B.shapeFlag&198)?f(B.el):C;v(B,E,N,null,I,w,p,S,!0)}},st=(_,o,C,I,w)=>{if(o!==C){if(o!==It)for(const p in o)!tn(p)&&!(p in C)&&i(_,p,o[p],null,w,I);for(const p in C){if(tn(p))continue;const S=C[p],z=o[p];S!==z&&p!=="value"&&i(_,p,z,S,w,I)}"value"in C&&i(_,"value",o.value,C.value,w)}},P=(_,o,C,I,w,p,S,z,B)=>{const E=o.el=_?_.el:a(""),N=o.anchor=_?_.anchor:a("");let{patchFlag:j,dynamicChildren:H,slotScopeIds:Y}=o;Y&&(z=z?z.concat(Y):Y),_==null?(r(E,C,I),r(N,C,I),G(o.children||[],C,N,w,p,S,z,B)):j>0&&j&64&&H&&_.dynamicChildren?(q(_.dynamicChildren,H,C,w,p,S,z),(o.key!=null||w&&o===w.subTree)&&gi(_,o,!0)):Q(_,o,C,N,w,p,S,z,B)},W=(_,o,C,I,w,p,S,z,B)=>{o.slotScopeIds=z,_==null?o.shapeFlag&512?w.ctx.activate(o,C,I,S,B):d(o,C,I,w,p,S,B):K(_,o,B)},d=(_,o,C,I,w,p,S)=>{const z=_.component=Ia(_,I,w);if(ri(_)&&(z.ctx.renderer=yt),Pa(z,!1,S),z.asyncDep){if(w&&w.registerDep(z,tt,S),!_.el){const B=z.subTree=Ft(fe);g(null,B,o,C),_.placeholder=B.el}}else tt(z,_,o,C,w,p,S)},K=(_,o,C)=>{const I=o.component=_.component;if(pa(_,o,C))if(I.asyncDep&&!I.asyncResolved){V(I,o,C);return}else I.next=o,I.update();else o.el=_.el,I.vnode=o},tt=(_,o,C,I,w,p,S)=>{const z=()=>{if(_.isMounted){let{next:j,bu:H,u:Y,parent:at,vnode:it}=_;{const Z=vi(_);if(Z){j&&(j.el=it.el,V(_,j,S)),Z.asyncDep.then(()=>{_.isUnmounted||z()});return}}let mt=j,Bt;Pe(_,!1),j?(j.el=it.el,V(_,j,S)):j=it,H&&Cn(H),(Bt=j.props&&j.props.onVnodeBeforeUpdate)&&ae(Bt,at,j,it),Pe(_,!0);const St=os(_),Rt=_.subTree;_.subTree=St,v(Rt,St,f(Rt.el),xt(Rt),_,w,p),j.el=St.el,mt===null&&Hs(_,St.el),Y&&te(Y,w),(Bt=j.props&&j.props.onVnodeUpdated)&&te(()=>ae(Bt,at,j,it),w)}else{let j;const{el:H,props:Y}=o,{bm:at,m:it,parent:mt,root:Bt,type:St}=_,Rt=rn(o);if(Pe(_,!1),at&&Cn(at),!Rt&&(j=Y&&Y.onVnodeBeforeMount)&&ae(j,mt,o),Pe(_,!0),H&&Ut){const Z=()=>{_.subTree=os(_),Ut(H,_.subTree,_,w,null)};Rt&&St.__asyncHydrate?St.__asyncHydrate(H,_,Z):Z()}else{Bt.ce&&Bt.ce._def.shadowRoot!==!1&&Bt.ce._injectChildStyle(St);const Z=_.subTree=os(_);v(null,Z,C,I,_,w,p),o.el=Z.el}if(it&&te(it,w),!Rt&&(j=Y&&Y.onVnodeMounted)){const Z=o;te(()=>ae(j,mt,Z),w)}(o.shapeFlag&256||mt&&rn(mt.vnode)&&mt.vnode.shapeFlag&256)&&_.a&&te(_.a,w),_.isMounted=!0,o=C=I=null}};_.scope.on();const B=_.effect=new Mr(z);_.scope.off();const E=_.update=B.run.bind(B),N=_.job=B.runIfDirty.bind(B);N.i=_,N.id=_.uid,B.scheduler=()=>Us(N),Pe(_,!0),E()},V=(_,o,C)=>{o.component=_;const I=_.vnode.props;_.vnode=o,_.next=null,Jo(_,o.props,I,C),ta(_,o.children,C),ve(),Qs(_),we()},Q=(_,o,C,I,w,p,S,z,B=!1)=>{const E=_&&_.children,N=_?_.shapeFlag:0,j=o.children,{patchFlag:H,shapeFlag:Y}=o;if(H>0){if(H&128){rt(E,j,C,I,w,p,S,z,B);return}else if(H&256){J(E,j,C,I,w,p,S,z,B);return}}Y&8?(N&16&&_t(E,w,p),j!==E&&h(C,j)):N&16?Y&16?rt(E,j,C,I,w,p,S,z,B):_t(E,w,p,!0):(N&8&&h(C,""),Y&16&&G(j,C,I,w,p,S,z,B))},J=(_,o,C,I,w,p,S,z,B)=>{_=_||Re,o=o||Re;const E=_.length,N=o.length,j=Math.min(E,N);let H;for(H=0;H<j;H++){const Y=o[H]=B?ke(o[H]):re(o[H]);v(_[H],Y,C,null,w,p,S,z,B)}E>N?_t(_,w,p,!0,!1,j):G(o,C,I,w,p,S,z,B,j)},rt=(_,o,C,I,w,p,S,z,B)=>{let E=0;const N=o.length;let j=_.length-1,H=N-1;for(;E<=j&&E<=H;){const Y=_[E],at=o[E]=B?ke(o[E]):re(o[E]);if(Ce(Y,at))v(Y,at,C,null,w,p,S,z,B);else break;E++}for(;E<=j&&E<=H;){const Y=_[j],at=o[H]=B?ke(o[H]):re(o[H]);if(Ce(Y,at))v(Y,at,C,null,w,p,S,z,B);else break;j--,H--}if(E>j){if(E<=H){const Y=H+1,at=Y<N?o[Y].el:I;for(;E<=H;)v(null,o[E]=B?ke(o[E]):re(o[E]),C,at,w,p,S,z,B),E++}}else if(E>H)for(;E<=j;)M(_[E],w,p,!0),E++;else{const Y=E,at=E,it=new Map;for(E=at;E<=H;E++){const ct=o[E]=B?ke(o[E]):re(o[E]);ct.key!=null&&it.set(ct.key,E)}let mt,Bt=0;const St=H-at+1;let Rt=!1,Z=0;const F=new Array(St);for(E=0;E<St;E++)F[E]=0;for(E=Y;E<=j;E++){const ct=_[E];if(Bt>=St){M(ct,w,p,!0);continue}let ft;if(ct.key!=null)ft=it.get(ct.key);else for(mt=at;mt<=H;mt++)if(F[mt-at]===0&&Ce(ct,o[mt])){ft=mt;break}ft===void 0?M(ct,w,p,!0):(F[ft-at]=E+1,ft>=Z?Z=ft:Rt=!0,v(ct,o[ft],C,null,w,p,S,z,B),Bt++)}const lt=Rt?ra(F):Re;for(mt=lt.length-1,E=St-1;E>=0;E--){const ct=at+E,ft=o[ct],Dt=o[ct+1],Lt=ct+1<N?Dt.el||Dt.placeholder:I;F[E]===0?v(null,ft,C,Lt,w,p,S,z,B):Rt&&(mt<0||E!==lt[mt]?U(ft,C,Lt,2):mt--)}}},U=(_,o,C,I,w=null)=>{const{el:p,type:S,transition:z,children:B,shapeFlag:E}=_;if(E&6){U(_.component.subTree,o,C,I);return}if(E&128){_.suspense.move(o,C,I);return}if(E&64){S.move(_,o,C,yt);return}if(S===Mt){r(p,o,C);for(let j=0;j<B.length;j++)U(B[j],o,C,I);r(_.anchor,o,C);return}if(S===Sn){O(_,o,C);return}if(I!==2&&E&1&&z)if(I===0)z.beforeEnter(p),r(p,o,C),te(()=>z.enter(p),w);else{const{leave:j,delayLeave:H,afterLeave:Y}=z,at=()=>{_.ctx.isUnmounted?s(p):r(p,o,C)},it=()=>{p._isLeaving&&p[Eo](!0),j(p,()=>{at(),Y&&Y()})};H?H(p,at,it):it()}else r(p,o,C)},M=(_,o,C,I=!1,w=!1)=>{const{type:p,props:S,ref:z,children:B,dynamicChildren:E,shapeFlag:N,patchFlag:j,dirs:H,cacheIndex:Y}=_;if(j===-2&&(w=!1),z!=null&&(ve(),sn(z,null,C,_,!0),we()),Y!=null&&(o.renderCache[Y]=void 0),N&256){o.ctx.deactivate(_);return}const at=N&1&&H,it=!rn(_);let mt;if(it&&(mt=S&&S.onVnodeBeforeUnmount)&&ae(mt,o,_),N&6)X(_.component,C,I);else{if(N&128){_.suspense.unmount(C,I);return}at&&Ae(_,null,o,"beforeUnmount"),N&64?_.type.remove(_,o,C,yt,I):E&&!E.hasOnce&&(p!==Mt||j>0&&j&64)?_t(E,o,C,!1,!0):(p===Mt&&j&384||!w&&N&16)&&_t(B,o,C),I&&et(_)}(it&&(mt=S&&S.onVnodeUnmounted)||at)&&te(()=>{mt&&ae(mt,o,_),at&&Ae(_,null,o,"unmounted")},C)},et=_=>{const{type:o,el:C,anchor:I,transition:w}=_;if(o===Mt){nt(C,I);return}if(o===Sn){D(_);return}const p=()=>{s(C),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(_.shapeFlag&1&&w&&!w.persisted){const{leave:S,delayLeave:z}=w,B=()=>S(C,p);z?z(_.el,p,B):B()}else p()},nt=(_,o)=>{let C;for(;_!==o;)C=y(_),s(_),_=C;s(o)},X=(_,o,C)=>{const{bum:I,scope:w,job:p,subTree:S,um:z,m:B,a:E}=_;or(B),or(E),I&&Cn(I),w.stop(),p&&(p.flags|=8,M(S,_,o,C)),z&&te(z,o),te(()=>{_.isUnmounted=!0},o)},_t=(_,o,C,I=!1,w=!1,p=0)=>{for(let S=p;S<_.length;S++)M(_[S],o,C,I,w)},xt=_=>{if(_.shapeFlag&6)return xt(_.component.subTree);if(_.shapeFlag&128)return _.suspense.next();const o=y(_.anchor||_.el),C=o&&o[To];return C?y(C):o};let vt=!1;const wt=(_,o,C)=>{_==null?o._vnode&&M(o._vnode,null,null,!0):v(o._vnode||null,_,o,null,null,null,C),o._vnode=_,vt||(vt=!0,Qs(),ti(),vt=!1)},yt={p:v,um:M,m:U,r:et,mt:d,mc:G,pc:Q,pbc:q,n:xt,o:t};let kt,Ut;return e&&([kt,Ut]=e(yt)),{render:wt,hydrate:kt,createApp:Ko(wt,kt)}}function is({type:t,props:e},n){return n==="svg"&&t==="foreignObject"||n==="mathml"&&t==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:n}function Pe({effect:t,job:e},n){n?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function sa(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function gi(t,e,n=!1){const r=t.children,s=e.children;if(ht(r)&&ht(s))for(let i=0;i<r.length;i++){const l=r[i];let a=s[i];a.shapeFlag&1&&!a.dynamicChildren&&((a.patchFlag<=0||a.patchFlag===32)&&(a=s[i]=ke(s[i]),a.el=l.el),!n&&a.patchFlag!==-2&&gi(l,a)),a.type===Yn&&a.patchFlag!==-1&&(a.el=l.el),a.type===fe&&!a.el&&(a.el=l.el)}}function ra(t){const e=t.slice(),n=[0];let r,s,i,l,a;const u=t.length;for(r=0;r<u;r++){const m=t[r];if(m!==0){if(s=n[n.length-1],t[s]<m){e[r]=s,n.push(r);continue}for(i=0,l=n.length-1;i<l;)a=i+l>>1,t[n[a]]<m?i=a+1:l=a;m<t[n[i]]&&(i>0&&(e[r]=n[i-1]),n[i]=r)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=e[l];return n}function vi(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:vi(e)}function or(t){if(t)for(let e=0;e<t.length;e++)t[e].flags|=8}const ia=Symbol.for("v-scx"),oa=()=>Tn(ia);function We(t,e,n){return wi(t,e,n)}function wi(t,e,n=It){const{immediate:r,deep:s,flush:i,once:l}=n,a=jt({},n),u=e&&r||!e&&i!=="post";let m;if(fn){if(i==="sync"){const c=oa();m=c.__watcherHandles||(c.__watcherHandles=[])}else if(!u){const c=()=>{};return c.stop=ie,c.resume=ie,c.pause=ie,c}}const h=Yt;a.call=(c,k,v)=>de(c,h,k,v);let f=!1;i==="post"?a.scheduler=c=>{te(c,h&&h.suspense)}:i!=="sync"&&(f=!0,a.scheduler=(c,k)=>{k?c():Us(c)}),a.augmentJob=c=>{e&&(c.flags|=4),f&&(c.flags|=2,h&&(c.id=h.uid,c.i=h))};const y=xo(t,e,a);return fn&&(m?m.push(y):u&&y()),y}function aa(t,e,n){const r=this.proxy,s=$t(t)?t.includes(".")?yi(r,t):()=>r[t]:t.bind(r,r);let i;gt(e)?i=e:(i=e.handler,n=e);const l=wn(this),a=wi(s,i.bind(r),n);return l(),a}function yi(t,e){const n=e.split(".");return()=>{let r=t;for(let s=0;s<n.length&&r;s++)r=r[n[s]];return r}}const la=(t,e)=>e==="modelValue"||e==="model-value"?t.modelModifiers:t[`${e}Modifiers`]||t[`${Se(e)}Modifiers`]||t[`${Le(e)}Modifiers`];function ua(t,e,...n){if(t.isUnmounted)return;const r=t.vnode.props||It;let s=n;const i=e.startsWith("update:"),l=i&&la(r,e.slice(7));l&&(l.trim&&(s=n.map(h=>$t(h)?h.trim():h)),l.number&&(s=n.map(Wn)));let a,u=r[a=Qn(e)]||r[a=Qn(Se(e))];!u&&i&&(u=r[a=Qn(Le(e))]),u&&de(u,t,6,s);const m=r[a+"Once"];if(m){if(!t.emitted)t.emitted={};else if(t.emitted[a])return;t.emitted[a]=!0,de(m,t,6,s)}}const ca=new WeakMap;function bi(t,e,n=!1){const r=n?ca:e.emitsCache,s=r.get(t);if(s!==void 0)return s;const i=t.emits;let l={},a=!1;if(!gt(t)){const u=m=>{const h=bi(m,e,!0);h&&(a=!0,jt(l,h))};!n&&e.mixins.length&&e.mixins.forEach(u),t.extends&&u(t.extends),t.mixins&&t.mixins.forEach(u)}return!i&&!a?(Pt(t)&&r.set(t,null),null):(ht(i)?i.forEach(u=>l[u]=null):jt(l,i),Pt(t)&&r.set(t,l),l)}function Jn(t,e){return!t||!jn(e)?!1:(e=e.slice(2).replace(/Once$/,""),Tt(t,e[0].toLowerCase()+e.slice(1))||Tt(t,Le(e))||Tt(t,e))}function os(t){const{type:e,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:l,attrs:a,emit:u,render:m,renderCache:h,props:f,data:y,setupState:c,ctx:k,inheritAttrs:v}=t,x=Dn(t);let g,T;try{if(n.shapeFlag&4){const D=s||r,A=D;g=re(m.call(A,D,h,f,c,y,k)),T=a}else{const D=e;g=re(D.length>1?D(f,{attrs:a,slots:l,emit:u}):D(f,null)),T=e.props?a:fa(a)}}catch(D){an.length=0,gn(D,t,1),g=Ft(fe)}let O=g;if(T&&v!==!1){const D=Object.keys(T),{shapeFlag:A}=O;D.length&&A&7&&(i&&D.some(Es)&&(T=ha(T,i)),O=qe(O,T,!1,!0))}return n.dirs&&(O=qe(O,null,!1,!0),O.dirs=O.dirs?O.dirs.concat(n.dirs):n.dirs),n.transition&&Rs(O,n.transition),g=O,Dn(x),g}function da(t,e=!0){let n;for(let r=0;r<t.length;r++){const s=t[r];if(Ws(s)){if(s.type!==fe||s.children==="v-if"){if(n)return;n=s}}else return}return n}const fa=t=>{let e;for(const n in t)(n==="class"||n==="style"||jn(n))&&((e||(e={}))[n]=t[n]);return e},ha=(t,e)=>{const n={};for(const r in t)(!Es(r)||!(r.slice(9)in e))&&(n[r]=t[r]);return n};function pa(t,e,n){const{props:r,children:s,component:i}=t,{props:l,children:a,patchFlag:u}=e,m=i.emitsOptions;if(e.dirs||e.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return r?ar(r,l,m):!!l;if(u&8){const h=e.dynamicProps;for(let f=0;f<h.length;f++){const y=h[f];if(l[y]!==r[y]&&!Jn(m,y))return!0}}}else return(s||a)&&(!a||!a.$stable)?!0:r===l?!1:r?l?ar(r,l,m):!0:!!l;return!1}function ar(t,e,n){const r=Object.keys(e);if(r.length!==Object.keys(t).length)return!0;for(let s=0;s<r.length;s++){const i=r[s];if(e[i]!==t[i]&&!Jn(n,i))return!0}return!1}function Hs({vnode:t,parent:e},n){for(;e;){const r=e.subTree;if(r.suspense&&r.suspense.activeBranch===t&&(r.el=t.el),r===t)(t=e.vnode).el=n,e=e.parent;else break}}const _i=t=>t.__isSuspense;let bs=0;const ma={name:"Suspense",__isSuspense:!0,process(t,e,n,r,s,i,l,a,u,m){if(t==null)va(e,n,r,s,i,l,a,u,m);else{if(i&&i.deps>0&&!t.suspense.isInFallback){e.suspense=t.suspense,e.suspense.vnode=e,e.el=t.el;return}wa(t,e,n,r,s,l,a,u,m)}},hydrate:ya,normalize:ba},ga=ma;function dn(t,e){const n=t.props&&t.props[e];gt(n)&&n()}function va(t,e,n,r,s,i,l,a,u){const{p:m,o:{createElement:h}}=u,f=h("div"),y=t.suspense=xi(t,s,r,e,f,n,i,l,a,u);m(null,y.pendingBranch=t.ssContent,f,null,r,y,i,l),y.deps>0?(dn(t,"onPending"),dn(t,"onFallback"),m(null,t.ssFallback,e,n,r,null,i,l),Ve(y,t.ssFallback)):y.resolve(!1,!0)}function wa(t,e,n,r,s,i,l,a,{p:u,um:m,o:{createElement:h}}){const f=e.suspense=t.suspense;f.vnode=e,e.el=t.el;const y=e.ssContent,c=e.ssFallback,{activeBranch:k,pendingBranch:v,isInFallback:x,isHydrating:g}=f;if(v)f.pendingBranch=y,Ce(v,y)?(u(v,y,f.hiddenContainer,null,s,f,i,l,a),f.deps<=0?f.resolve():x&&(g||(u(k,c,n,r,s,null,i,l,a),Ve(f,c)))):(f.pendingId=bs++,g?(f.isHydrating=!1,f.activeBranch=v):m(v,s,f),f.deps=0,f.effects.length=0,f.hiddenContainer=h("div"),x?(u(null,y,f.hiddenContainer,null,s,f,i,l,a),f.deps<=0?f.resolve():(u(k,c,n,r,s,null,i,l,a),Ve(f,c))):k&&Ce(k,y)?(u(k,y,n,r,s,f,i,l,a),f.resolve(!0)):(u(null,y,f.hiddenContainer,null,s,f,i,l,a),f.deps<=0&&f.resolve()));else if(k&&Ce(k,y))u(k,y,n,r,s,f,i,l,a),Ve(f,y);else if(dn(e,"onPending"),f.pendingBranch=y,y.shapeFlag&512?f.pendingId=y.component.suspenseId:f.pendingId=bs++,u(null,y,f.hiddenContainer,null,s,f,i,l,a),f.deps<=0)f.resolve();else{const{timeout:T,pendingId:O}=f;T>0?setTimeout(()=>{f.pendingId===O&&f.fallback(c)},T):T===0&&f.fallback(c)}}function xi(t,e,n,r,s,i,l,a,u,m,h=!1){const{p:f,m:y,um:c,n:k,o:{parentNode:v,remove:x}}=m;let g;const T=xa(t);T&&e&&e.pendingBranch&&(g=e.pendingId,e.deps++);const O=t.props?Ui(t.props.timeout):void 0,D=i,A={vnode:t,parent:e,parentComponent:n,namespace:l,container:r,hiddenContainer:s,deps:0,pendingId:bs++,timeout:typeof O=="number"?O:-1,activeBranch:null,pendingBranch:null,isInFallback:!h,isHydrating:h,isUnmounted:!1,effects:[],resolve(L=!1,$=!1){const{vnode:G,activeBranch:R,pendingBranch:q,pendingId:st,effects:P,parentComponent:W,container:d,isInFallback:K}=A;let tt=!1;A.isHydrating?A.isHydrating=!1:L||(tt=R&&q.transition&&q.transition.mode==="out-in",tt&&(R.transition.afterLeave=()=>{st===A.pendingId&&(y(q,d,i===D?k(R):i,0),ps(P),K&&G.ssFallback&&(G.ssFallback.el=null))}),R&&(v(R.el)===d&&(i=k(R)),c(R,W,A,!0),!tt&&K&&G.ssFallback&&(G.ssFallback.el=null)),tt||y(q,d,i,0)),Ve(A,q),A.pendingBranch=null,A.isInFallback=!1;let V=A.parent,Q=!1;for(;V;){if(V.pendingBranch){V.effects.push(...P),Q=!0;break}V=V.parent}!Q&&!tt&&ps(P),A.effects=[],T&&e&&e.pendingBranch&&g===e.pendingId&&(e.deps--,e.deps===0&&!$&&e.resolve()),dn(G,"onResolve")},fallback(L){if(!A.pendingBranch)return;const{vnode:$,activeBranch:G,parentComponent:R,container:q,namespace:st}=A;dn($,"onFallback");const P=k(G),W=()=>{A.isInFallback&&(f(null,L,q,P,R,null,st,a,u),Ve(A,L))},d=L.transition&&L.transition.mode==="out-in";d&&(G.transition.afterLeave=W),A.isInFallback=!0,c(G,R,null,!0),d||W()},move(L,$,G){A.activeBranch&&y(A.activeBranch,L,$,G),A.container=L},next(){return A.activeBranch&&k(A.activeBranch)},registerDep(L,$,G){const R=!!A.pendingBranch;R&&A.deps++;const q=L.vnode.el;L.asyncDep.catch(st=>{gn(st,L,0)}).then(st=>{if(L.isUnmounted||A.isUnmounted||A.pendingId!==L.suspenseId)return;L.asyncResolved=!0;const{vnode:P}=L;xs(L,st,!1),q&&(P.el=q);const W=!q&&L.subTree.el;$(L,P,v(q||L.subTree.el),q?null:k(L.subTree),A,l,G),W&&(P.placeholder=null,x(W)),Hs(L,P.el),R&&--A.deps===0&&A.resolve()})},unmount(L,$){A.isUnmounted=!0,A.activeBranch&&c(A.activeBranch,n,L,$),A.pendingBranch&&c(A.pendingBranch,n,L,$)}};return A}function ya(t,e,n,r,s,i,l,a,u){const m=e.suspense=xi(e,r,n,t.parentNode,document.createElement("div"),null,s,i,l,a,!0),h=u(t,m.pendingBranch=e.ssContent,n,m,i,l);return m.deps===0&&m.resolve(!1,!0),h}function ba(t){const{shapeFlag:e,children:n}=t,r=e&32;t.ssContent=lr(r?n.default:n),t.ssFallback=r?lr(n.fallback):Ft(fe)}function lr(t){let e;if(gt(t)){const n=Ge&&t._c;n&&(t._d=!1,dt()),t=t(),n&&(t._d=!0,e=Qt,ki())}return ht(t)&&(t=da(t)),t=re(t),e&&!t.dynamicChildren&&(t.dynamicChildren=e.filter(n=>n!==t)),t}function _a(t,e){e&&e.pendingBranch?ht(t)?e.effects.push(...t):e.effects.push(t):ps(t)}function Ve(t,e){t.activeBranch=e;const{vnode:n,parentComponent:r}=t;let s=e.el;for(;!s&&e.component;)e=e.component.subTree,s=e.el;n.el=s,r&&r.subTree===n&&(r.vnode.el=s,Hs(r,s))}function xa(t){const e=t.props&&t.props.suspensible;return e!=null&&e!==!1}const Mt=Symbol.for("v-fgt"),Yn=Symbol.for("v-txt"),fe=Symbol.for("v-cmt"),Sn=Symbol.for("v-stc"),an=[];let Qt=null;function dt(t=!1){an.push(Qt=t?null:[])}function ki(){an.pop(),Qt=an[an.length-1]||null}let Ge=1;function ur(t,e=!1){Ge+=t,t<0&&Qt&&e&&(Qt.hasOnce=!0)}function Ci(t){return t.dynamicChildren=Ge>0?Qt||Re:null,ki(),Ge>0&&Qt&&Qt.push(t),t}function pt(t,e,n,r,s,i){return Ci(b(t,e,n,r,s,i,!0))}function Ln(t,e,n,r,s){return Ci(Ft(t,e,n,r,s,!0))}function Ws(t){return t?t.__v_isVNode===!0:!1}function Ce(t,e){return t.type===e.type&&t.key===e.key}const Ti=({key:t})=>t??null,En=({ref:t,ref_key:e,ref_for:n})=>(typeof t=="number"&&(t=""+t),t!=null?$t(t)||Zt(t)||gt(t)?{i:ee,r:t,k:e,f:!!n}:t:null);function b(t,e=null,n=null,r=0,s=null,i=t===Mt?0:1,l=!1,a=!1){const u={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&Ti(e),ref:e&&En(e),scopeId:ni,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ee};return a?(Zs(u,n),i&128&&t.normalize(u)):n&&(u.shapeFlag|=$t(n)?8:16),Ge>0&&!l&&Qt&&(u.patchFlag>0||i&6)&&u.patchFlag!==32&&Qt.push(u),u}const Ft=ka;function ka(t,e=null,n=null,r=0,s=null,i=!1){if((!t||t===Ro)&&(t=fe),Ws(t)){const a=qe(t,e,!0);return n&&Zs(a,n),Ge>0&&!i&&Qt&&(a.shapeFlag&6?Qt[Qt.indexOf(t)]=a:Qt.push(a)),a.patchFlag=-2,a}if(Ba(t)&&(t=t.__vccOpts),e){e=Ca(e);let{class:a,style:u}=e;a&&!$t(a)&&(e.class=zt(a)),Pt(u)&&($s(u)&&!ht(u)&&(u=jt({},u)),e.style=pn(u))}const l=$t(t)?1:_i(t)?128:So(t)?64:Pt(t)?4:gt(t)?2:0;return b(t,e,n,r,s,l,i,!0)}function Ca(t){return t?$s(t)||ci(t)?jt({},t):t:null}function qe(t,e,n=!1,r=!1){const{props:s,ref:i,patchFlag:l,children:a,transition:u}=t,m=e?Ta(s||{},e):s,h={__v_isVNode:!0,__v_skip:!0,type:t.type,props:m,key:m&&Ti(m),ref:e&&e.ref?n&&i?ht(i)?i.concat(En(e)):[i,En(e)]:En(e):i,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:a,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==Mt?l===-1?16:l|16:l,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:u,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&qe(t.ssContent),ssFallback:t.ssFallback&&qe(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return u&&r&&Rs(h,u.clone(h)),h}function Wt(t=" ",e=0){return Ft(Yn,null,t,e)}function Vs(t,e){const n=Ft(Sn,null,t);return n.staticCount=e,n}function ue(t="",e=!1){return e?(dt(),Ln(fe,null,t)):Ft(fe,null,t)}function re(t){return t==null||typeof t=="boolean"?Ft(fe):ht(t)?Ft(Mt,null,t.slice()):Ws(t)?ke(t):Ft(Yn,null,String(t))}function ke(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:qe(t)}function Zs(t,e){let n=0;const{shapeFlag:r}=t;if(e==null)e=null;else if(ht(e))n=16;else if(typeof e=="object")if(r&65){const s=e.default;s&&(s._c&&(s._d=!1),Zs(t,s()),s._c&&(s._d=!0));return}else{n=32;const s=e._;!s&&!ci(e)?e._ctx=ee:s===3&&ee&&(ee.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else gt(e)?(e={default:e,_ctx:ee},n=32):(e=String(e),r&64?(n=16,e=[Wt(e)]):n=8);t.children=e,t.shapeFlag|=n}function Ta(...t){const e={};for(let n=0;n<t.length;n++){const r=t[n];for(const s in r)if(s==="class")e.class!==r.class&&(e.class=zt([e.class,r.class]));else if(s==="style")e.style=pn([e.style,r.style]);else if(jn(s)){const i=e[s],l=r[s];l&&i!==l&&!(ht(i)&&i.includes(l))&&(e[s]=i?[].concat(i,l):l)}else s!==""&&(e[s]=r[s])}return e}function ae(t,e,n,r=null){de(t,e,7,[n,r])}const Sa=ai();let Ea=0;function Ia(t,e,n){const r=t.type,s=(e?e.appContext:t.appContext)||Sa,i={uid:Ea++,vnode:t,type:r,parent:e,appContext:s,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Ki(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(s.provides),ids:e?e.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:fi(r,s),emitsOptions:bi(r,s),emit:null,emitted:null,propsDefaults:It,inheritAttrs:r.inheritAttrs,ctx:It,data:It,props:It,attrs:It,slots:It,refs:It,setupState:It,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=e?e.root:i,i.emit=ua.bind(null,i),t.ce&&t.ce(i),i}let Yt=null;const Aa=()=>Yt||ee;let Mn,_s;{const t=Vn(),e=(n,r)=>{let s;return(s=t[n])||(s=t[n]=[]),s.push(r),i=>{s.length>1?s.forEach(l=>l(i)):s[0](i)}};Mn=e("__VUE_INSTANCE_SETTERS__",n=>Yt=n),_s=e("__VUE_SSR_SETTERS__",n=>fn=n)}const wn=t=>{const e=Yt;return Mn(t),t.scope.on(),()=>{t.scope.off(),Mn(e)}},cr=()=>{Yt&&Yt.scope.off(),Mn(null)};function Si(t){return t.vnode.shapeFlag&4}let fn=!1;function Pa(t,e=!1,n=!1){e&&_s(e);const{props:r,children:s}=t.vnode,i=Si(t);qo(t,r,i,e),Qo(t,s,n||e);const l=i?Oa(t,e):void 0;return e&&_s(!1),l}function Oa(t,e){const n=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,Fo);const{setup:r}=n;if(r){ve();const s=t.setupContext=r.length>1?za(t):null,i=wn(t),l=mn(r,t,0,[t.props,s]),a=Ir(l);if(we(),i(),(a||t.sp)&&!rn(t)&&si(t),a){if(l.then(cr,cr),e)return l.then(u=>{xs(t,u,e)}).catch(u=>{gn(u,t,0)});t.asyncDep=l}else xs(t,l,e)}else Ei(t,e)}function xs(t,e,n){gt(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:Pt(e)&&(t.setupState=Jr(e)),Ei(t,n)}let dr;function Ei(t,e,n){const r=t.type;if(!t.render){if(!e&&dr&&!r.render){const s=r.template||Fs(t).template;if(s){const{isCustomElement:i,compilerOptions:l}=t.appContext.config,{delimiters:a,compilerOptions:u}=r,m=jt(jt({isCustomElement:i,delimiters:a},l),u);r.render=dr(s,m)}}t.render=r.render||ie}{const s=wn(t);ve();try{jo(t)}finally{we(),s()}}}const Da={get(t,e){return Vt(t,"get",""),t[e]}};function za(t){const e=n=>{t.exposed=n||{}};return{attrs:new Proxy(t.attrs,Da),slots:t.slots,emit:t.emit,expose:e}}function Xn(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(Jr(mo(t.exposed)),{get(e,n){if(n in e)return e[n];if(n in on)return on[n](t)},has(e,n){return n in e||n in on}})):t.proxy}function Ba(t){return gt(t)&&"__vccOpts"in t}const Nt=(t,e)=>bo(t,e,fn),La="3.5.24";/**
* @vue/runtime-dom v3.5.24
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/let ks;const fr=typeof window<"u"&&window.trustedTypes;if(fr)try{ks=fr.createPolicy("vue",{createHTML:t=>t})}catch{}const Ii=ks?t=>ks.createHTML(t):t=>t,Ma="http://www.w3.org/2000/svg",$a="http://www.w3.org/1998/Math/MathML",pe=typeof document<"u"?document:null,hr=pe&&pe.createElement("template"),Ua={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,r)=>{const s=e==="svg"?pe.createElementNS(Ma,t):e==="mathml"?pe.createElementNS($a,t):n?pe.createElement(t,{is:n}):pe.createElement(t);return t==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:t=>pe.createTextNode(t),createComment:t=>pe.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>pe.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,r,s,i){const l=n?n.previousSibling:e.lastChild;if(s&&(s===i||s.nextSibling))for(;e.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{hr.innerHTML=Ii(r==="svg"?`<svg>${t}</svg>`:r==="mathml"?`<math>${t}</math>`:t);const a=hr.content;if(r==="svg"||r==="mathml"){const u=a.firstChild;for(;u.firstChild;)a.appendChild(u.firstChild);a.removeChild(u)}e.insertBefore(a,n)}return[l?l.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},Ra=Symbol("_vtc");function Fa(t,e,n){const r=t[Ra];r&&(e=(e?[e,...r]:[...r]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}const $n=Symbol("_vod"),Ai=Symbol("_vsh"),Ot={name:"show",beforeMount(t,{value:e},{transition:n}){t[$n]=t.style.display==="none"?"":t.style.display,n&&e?n.beforeEnter(t):Xe(t,e)},mounted(t,{value:e},{transition:n}){n&&e&&n.enter(t)},updated(t,{value:e,oldValue:n},{transition:r}){!e!=!n&&(r?e?(r.beforeEnter(t),Xe(t,!0),r.enter(t)):r.leave(t,()=>{Xe(t,!1)}):Xe(t,e))},beforeUnmount(t,{value:e}){Xe(t,e)}};function Xe(t,e){t.style.display=e?t[$n]:"none",t[Ai]=!e}const ja=Symbol(""),Na=/(?:^|;)\s*display\s*:/;function Ha(t,e,n){const r=t.style,s=$t(n);let i=!1;if(n&&!s){if(e)if($t(e))for(const l of e.split(";")){const a=l.slice(0,l.indexOf(":")).trim();n[a]==null&&In(r,a,"")}else for(const l in e)n[l]==null&&In(r,l,"");for(const l in n)l==="display"&&(i=!0),In(r,l,n[l])}else if(s){if(e!==n){const l=r[ja];l&&(n+=";"+l),r.cssText=n,i=Na.test(n)}}else e&&t.removeAttribute("style");$n in t&&(t[$n]=i?r.display:"",t[Ai]&&(r.display="none"))}const pr=/\s*!important$/;function In(t,e,n){if(ht(n))n.forEach(r=>In(t,e,r));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const r=Wa(t,e);pr.test(n)?t.setProperty(Le(r),n.replace(pr,""),"important"):t[r]=n}}const mr=["Webkit","Moz","ms"],as={};function Wa(t,e){const n=as[e];if(n)return n;let r=Se(e);if(r!=="filter"&&r in t)return as[e]=r;r=Or(r);for(let s=0;s<mr.length;s++){const i=mr[s]+r;if(i in t)return as[e]=i}return e}const gr="http://www.w3.org/1999/xlink";function vr(t,e,n,r,s,i=Wi(e)){r&&e.startsWith("xlink:")?n==null?t.removeAttributeNS(gr,e.slice(6,e.length)):t.setAttributeNS(gr,e,n):n==null||i&&!zr(n)?t.removeAttribute(e):t.setAttribute(e,i?"":ce(n)?String(n):n)}function wr(t,e,n,r,s){if(e==="innerHTML"||e==="textContent"){n!=null&&(t[e]=e==="innerHTML"?Ii(n):n);return}const i=t.tagName;if(e==="value"&&i!=="PROGRESS"&&!i.includes("-")){const a=i==="OPTION"?t.getAttribute("value")||"":t.value,u=n==null?t.type==="checkbox"?"on":"":String(n);(a!==u||!("_value"in t))&&(t.value=u),n==null&&t.removeAttribute(e),t._value=n;return}let l=!1;if(n===""||n==null){const a=typeof t[e];a==="boolean"?n=zr(n):n==null&&a==="string"?(n="",l=!0):a==="number"&&(n=0,l=!0)}try{t[e]=n}catch{}l&&t.removeAttribute(s||e)}function De(t,e,n,r){t.addEventListener(e,n,r)}function Va(t,e,n,r){t.removeEventListener(e,n,r)}const yr=Symbol("_vei");function Za(t,e,n,r,s=null){const i=t[yr]||(t[yr]={}),l=i[e];if(r&&l)l.value=r;else{const[a,u]=Ka(e);if(r){const m=i[e]=Ja(r,s);De(t,a,m,u)}else l&&(Va(t,a,l,u),i[e]=void 0)}}const br=/(?:Once|Passive|Capture)$/;function Ka(t){let e;if(br.test(t)){e={};let r;for(;r=t.match(br);)t=t.slice(0,t.length-r[0].length),e[r[0].toLowerCase()]=!0}return[t[2]===":"?t.slice(3):Le(t.slice(2)),e]}let ls=0;const Ga=Promise.resolve(),qa=()=>ls||(Ga.then(()=>ls=0),ls=Date.now());function Ja(t,e){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;de(Ya(r,n.value),e,5,[r])};return n.value=t,n.attached=qa(),n}function Ya(t,e){if(ht(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(r=>s=>!s._stopped&&r&&r(s))}else return e}const _r=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,Xa=(t,e,n,r,s,i)=>{const l=s==="svg";e==="class"?Fa(t,r,l):e==="style"?Ha(t,n,r):jn(e)?Es(e)||Za(t,e,n,r,i):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):Qa(t,e,r,l))?(wr(t,e,r),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&vr(t,e,r,l,i,e!=="value")):t._isVueCE&&(/[A-Z]/.test(e)||!$t(r))?wr(t,Se(e),r,i,e):(e==="true-value"?t._trueValue=r:e==="false-value"&&(t._falseValue=r),vr(t,e,r,l))};function Qa(t,e,n,r){if(r)return!!(e==="innerHTML"||e==="textContent"||e in t&&_r(e)&&gt(n));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const s=t.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return _r(e)&&$t(n)?!1:e in t}const Un=t=>{const e=t.props["onUpdate:modelValue"]||!1;return ht(e)?n=>Cn(e,n):e};function tl(t){t.target.composing=!0}function xr(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const Ze=Symbol("_assign");function kr(t,e,n){return e&&(t=t.trim()),n&&(t=Wn(t)),t}const el={created(t,{modifiers:{lazy:e,trim:n,number:r}},s){t[Ze]=Un(s);const i=r||s.props&&s.props.type==="number";De(t,e?"change":"input",l=>{l.target.composing||t[Ze](kr(t.value,n,i))}),(n||i)&&De(t,"change",()=>{t.value=kr(t.value,n,i)}),e||(De(t,"compositionstart",tl),De(t,"compositionend",xr),De(t,"change",xr))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,oldValue:n,modifiers:{lazy:r,trim:s,number:i}},l){if(t[Ze]=Un(l),t.composing)return;const a=(i||t.type==="number")&&!/^0\d/.test(t.value)?Wn(t.value):t.value,u=e??"";a!==u&&(document.activeElement===t&&t.type!=="range"&&(r&&e===n||s&&t.value.trim()===u)||(t.value=u))}},Cs={deep:!0,created(t,{value:e,modifiers:{number:n}},r){const s=Nn(e);De(t,"change",()=>{const i=Array.prototype.filter.call(t.options,l=>l.selected).map(l=>n?Wn(Rn(l)):Rn(l));t[Ze](t.multiple?s?new Set(i):i:i[0]),t._assigning=!0,Xr(()=>{t._assigning=!1})}),t[Ze]=Un(r)},mounted(t,{value:e}){Cr(t,e)},beforeUpdate(t,e,n){t[Ze]=Un(n)},updated(t,{value:e}){t._assigning||Cr(t,e)}};function Cr(t,e){const n=t.multiple,r=ht(e);if(!(n&&!r&&!Nn(e))){for(let s=0,i=t.options.length;s<i;s++){const l=t.options[s],a=Rn(l);if(n)if(r){const u=typeof a;u==="string"||u==="number"?l.selected=e.some(m=>String(m)===String(a)):l.selected=Zi(e,a)>-1}else l.selected=e.has(a);else if(Zn(Rn(l),e)){t.selectedIndex!==s&&(t.selectedIndex=s);return}}!n&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function Rn(t){return"_value"in t?t._value:t.value}const nl=["ctrl","shift","alt","meta"],sl={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>nl.some(n=>t[`${n}Key`]&&!e.includes(n))},Be=(t,e)=>{const n=t._withMods||(t._withMods={}),r=e.join(".");return n[r]||(n[r]=(s,...i)=>{for(let l=0;l<e.length;l++){const a=sl[e[l]];if(a&&a(s,e))return}return t(s,...i)})},rl=jt({patchProp:Xa},Ua);let Tr;function il(){return Tr||(Tr=ea(rl))}const ol=(...t)=>{const e=il().createApp(...t),{mount:n}=e;return e.mount=r=>{const s=ll(r);if(!s)return;const i=e._component;!gt(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const l=n(s,!1,al(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),l},e};function al(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function ll(t){return $t(t)?document.querySelector(t):t}const ul={class:"relative flex flex-wrap justify-center w-full gap-2"},cl={class:"relative flex flex-wrap justify-center w-full gap-2"},dl=["onClick"],fl=Ie({__name:"Toolbar",props:{pluginList:{},pluginTags:{},activeCategory:{}},emits:["update-active-category"],setup(t){const e=t,n=ut(!1),r=()=>{n.value=!n.value};return(s,i)=>(dt(),pt("div",ul,[b("button",{class:zt(["inline-flex items-center border-2 shadow-md justify-center px-4 py-2 font-sans text-sm transition-colors duration-300 rounded-lg bg-muted-200 dark:bg-muted-800 text-muted-500 hover:bg-muted-300 dark:hover:bg-muted-700 dark:hover:text-muted-200 tw-accessibility",t.activeCategory==="all"?"border-primary-500 bg-muted-50 dark:bg-muted-700":"border-transparent "]),onClick:i[0]||(i[0]=l=>s.$emit("update-active-category","all"))}," All ",2),b("button",{class:"inline-flex w-full items-center shadow-md justify-center px-4 py-2 font-sans text-sm transition-colors duration-300 rounded-lg bg-muted-200 dark:bg-muted-800 text-muted-500 hover:bg-muted-300 dark:hover:bg-muted-700 dark:hover:text-muted-200 tw-accessibility",onClick:r}," 按分类筛选 ⇣ "),Et(b("div",cl,[(dt(!0),pt(Mt,null,Ke(e.pluginTags,l=>(dt(),pt("div",{class:"plugin-item",key:l},[b("button",{class:zt(["h-6 inline-flex items-center border-2 shadow-md justify-center flex-1 px-4 py-2 font-sans text-sm transition-colors duration-300 rounded-lg bg-muted-200 dark:bg-muted-800 text-muted-500 hover:bg-muted-300 dark:hover:bg-muted-700 dark:hover:text-muted-200 tw-accessibility",t.activeCategory===l?"border-primary-500 bg-muted-50 dark:bg-muted-700":"border-transparent"]),onClick:()=>{s.$emit("update-active-category",l)}},bt(l),11,dl)]))),128))],512),[[Ot,n.value]])]))}}),hl={class:"relative"},pl={class:"flex flex-col items-start h-full gap-4 p-6"},ml={class:"relative w-full space-y-2"},gl={class:"relative"},vl={class:"absolute z-1 top-3 left-3 inline-block font-sans text-xs py-1.5 px-3 m-1 rounded-lg bg-primary-500 text-white shadow-xl shadow-primary-500/20"},wl={tooltip:"官方商城插件",class:"text-white absolute right-2 top-2 z-10"},yl={tooltip:"社区专供插件",class:"absolute right-2 top-2 z-10"},bl=["data-name"],_l=["data-name","alt","src"],xl=["src"],kl={class:"relative flex items-center h-10 overflow-hidden plugin_name"},Cl={"data-pagefind-meta":"title",class:"flex items-center text-lg font-medium leading-6 plugin_name font-heading text-muted-800 dark:text-white"},Tl=["href"],Sl={class:"-mt-2 ml-2 px-2 rounded text-muted-100 bg-green-600 text-xs"},El={class:"-mt-2 text-orange-500 ml-2 text-lg font-serif font-bold italic"},Il={class:"flex flex-wrap items-center leading-6 text-muted-600 dark:text-muted-400"},Al=["src"],Pl=["src"],Ol=["href"],Dl=["href"],zl={class:"plugin_desc text-base mt-auto min-h-[3rem] text-muted-600 dark:text-muted-400 leading-6"},Bl={class:"w-full mt-auto space-y-6"},Ll={class:"relative flex items-center justify-start w-full"},Ml=["src","onerror"],$l=["href"],Ul={class:"pl-2"},Rl=["tooltip"],Fl={class:"font-sans text-sm text-muted-400"},jl={class:"block ml-auto font-sans text-sm text-muted-400"},Nl=["tooltip"],Hl={xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},Wl=["fill"],Vl=Ie({__name:"PluginCard",props:{app:{},pluginInfo:{},isLogin:{type:Boolean}},emits:["download-update-plugin"],setup(t){const e=t,n=e.isLogin,r=ut(!1),s=ut(""),i=ut("rgba(255, 51, 68, 0.8)");function l(){return e.pluginInfo.authorAvatar&&e.pluginInfo.authorAvatar.length>0?e.pluginInfo.authorAvatar:c(e.pluginInfo.author)}let a=[];e.pluginInfo.tags&&e.pluginInfo.tags.length>0&&(a=e.pluginInfo.tags.split(","));function u(x){return x>=1e6?(x/1e6).toFixed(0)+"M":x>=1e3?(x/1e3).toFixed(0)+"K":x.toString()}function m(x){if(x){const g=new Date(x),T=new Date,O=24*60*60*1e3,D=Math.round(Math.abs((T.getTime()-g.getTime())/O)),A=Math.round(D/30),L=Math.round(D/365);return D<=30?`${D}天前`:A<=12?`${A}月前`:`${L}年前`}else return"未知"}const h=()=>s.value=="未启用"?"当前插件未启用,点击启用":s.value=="已启用"?"当前插件已启动,点击禁用":"未成功启用。请查看控制台错误信息。",f=async x=>{s.value=="已启用"?(await e.app.plugins.disablePluginAndSave(x),s.value="未启用",i.value="rgba(255, 51, 68, 0.8)"):await e.app.plugins.enablePluginAndSave(x)?(s.value="已启用",i.value="#2aa330"):s.value="未成功"};Array.from(e.app.plugins.enabledPlugins).indexOf(e.pluginInfo.id)!=-1&&e.pluginInfo.isInstalled&&(s.value="已启用",i.value="#2aa330"),Array.from(e.app.plugins.enabledPlugins).indexOf(e.pluginInfo.id)==-1&&e.pluginInfo.isInstalled&&(s.value="未启用",i.value="rgba(255, 51, 68, 0.8)");function y(x){return(x.match(/\b\w/g)||[]).join("").toUpperCase()}function c(x){let g="";if(x){const T=y(x);/^[a-zA-Z]+$/.test(T)?g=`https://dummyimage.com/100x100/555/fff&text=${T.toUpperCase()}`:g=`https://dummyimage.com/100x100/555/ffff&text=${encodeURIComponent(T)}`}else g="https://cdn.pkmer.cn/covers/logo.png!nomark";return g}const k=()=>`background-image:url(${`https://pkmer.cn/img/cover/${Math.floor(Math.random()*11)}.jpg`});`,v=()=>{e.app.setting.open(),e.app.setting.openTabById("pkmer")};return(x,g)=>(dt(),pt("div",hl,[b("div",pl,[b("div",ml,[b("div",gl,[b("span",vl,bt(Jt(a)[0]),1),Et(b("view",wl,[...g[6]||(g[6]=[b("svg",{class:"fill-current w-5 h-5",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 48 48","data-v-fc8a1590":"","data-icon":"arcticons:obsidian"},[b("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round",d:"M17.133 40.912c3.155-6.394 3.071-10.982 1.722-14.24c-1.229-3.014-3.527-4.913-5.333-6.095a2.3 2.3 0 0 1-.167.503L9.11 30.526c-.44.975-.237 2.12.512 2.885l6.784 6.98c.214.213.466.39.726.52Zm8.581-12.973c.847.083 1.675.27 2.494.567c2.587.968 4.942 3.146 6.887 7.343c.14-.242.279-.474.428-.698a114 114 0 0 0 3.415-5.388a1.3 1.3 0 0 0-.093-1.461a28.2 28.2 0 0 1-3.322-5.445c-.894-2.14-1.024-5.481-1.033-7.1c0-.615-.196-1.22-.577-1.704l-6.747-8.561l-.112-.14c.493 1.629.465 2.931.158 4.113c-.28 1.099-.8 2.094-1.35 3.146c-.185.354-.372.717-.548 1.089a13 13 0 0 0-1.47 5.398c-.094 2.252.362 5.072 1.86 8.84z"}),b("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round",d:"M25.704 27.939c-1.498-3.77-1.954-6.59-1.86-8.841c.092-2.234.744-3.91 1.47-5.398l.558-1.09c.54-1.05 1.052-2.047 1.34-3.145a7.3 7.3 0 0 0-.158-4.113a2.606 2.606 0 0 0-3.667-.186l-8.022 7.212c-.45.403-.746.949-.838 1.545L13.55 20.4c0 .065-.019.121-.028.186c1.806 1.173 4.095 3.072 5.333 6.078c.242.595.447 1.219.595 1.898a18.6 18.6 0 0 1 6.254-.633z"}),b("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round",d:"M29.91 43.406c1.732.475 3.472-.912 3.714-2.699c.198-1.695.7-3.34 1.48-4.858c-1.954-4.197-4.309-6.375-6.887-7.343c-2.745-1.023-5.733-.68-8.767.056c.68 3.08.28 7.11-2.308 12.35c.289.149.615.232.94.26l4.086.307c2.215.159 5.519 1.303 7.743 1.927Z"})],-1)])],512),[[Ot,t.pluginInfo.source=="official"]]),Et(b("view",yl,[...g[7]||(g[7]=[b("svg",{class:"fill-current w-5 h-5",xmlns:"http://www.w3.org/2000/svg",version:"1.1","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:svgjs":"http://svgjs.com/svgjs",viewBox:"0 0 512 512","xml:space":"preserve"},[b("g",null,[b("path",{d:"M395.631 98.837C358.783 45.867 309.195 16.696 256 16.696S153.217 45.867 116.369 98.837c-35.565 51.124-55.151 118.797-55.151 190.554 0 113.54 87.379 205.913 194.783 205.913s194.783-92.373 194.783-205.913c-.001-71.756-19.588-139.43-55.153-190.554z",style:{},fill:"#ffc170",class:""}),b("path",{d:"M256 495.304c107.403 0 194.783-92.373 194.783-205.913 0-71.757-19.586-139.43-55.151-190.554C358.783 45.867 309.195 16.696 256 16.696",style:{},fill:"#e1a05a","data-original":"#ffd6a0",class:""}),b("path",{d:"M0 128h55.652v33.391H0z",style:{},fill:"#a0bdd4",class:""}),b("path",{d:"M13.053 51.94h55.65v33.391h-55.65z",style:{},transform:"rotate(-160.527 40.878 68.636)",fill:"#a0bdd4",class:""}),b("path",{d:"M456.348 128H512v33.391h-55.652z",style:{},fill:"#a0bdd4",class:""}),b("path",{d:"M454.411 40.807h33.391v55.65h-33.391z",style:{},transform:"rotate(-109.469 471.111 68.636)",fill:"#a0bdd4",class:""}),b("path",{d:"m187.719 277.315 14.949-29.896-47.598-21.154-93.659 51.085c-.124 4-.194 8.013-.194 12.041 0 8.564.505 17.005 1.471 25.298l93.892-51.214 31.139 13.84zM450.63 278.997l-105.587-52.794-89.463 44.731-22.369-9.942-14.948 29.896 38.155 16.958 88.625-44.31 104.166 52.083a218.592 218.592 0 0 0 1.573-26.228c.001-3.476-.059-6.938-.152-10.394z",style:{},fill:"#f8f8f8",class:""}),b("path",{d:"m450.63 278.997-105.587-52.794-89.463 44.731.839 36.913 88.624-44.31 104.166 52.083a218.592 218.592 0 0 0 1.573-26.228 382.07 382.07 0 0 0-.152-10.395z",style:{},fill:"#fef5ea",class:""})])],-1)])],512),[[Ot,t.pluginInfo.source=="community"]]),b("span",{"data-name":t.pluginInfo.banner?"":t.pluginInfo.name,class:"noimg h-40 md:h-52",style:pn(k())},[b("img",{"data-name":t.pluginInfo.name,alt:t.pluginInfo.name,class:"border-0 absolute rounded-lg w-[200px] md:w-[300px] max-h-[148px] object-contain cursor-pointer",width:"348",height:"208",src:t.pluginInfo.banner?t.pluginInfo.banner.replace("!pkmer","!nomark"):"",loading:"lazy",decoding:"async",onClick:g[0]||(g[0]=T=>r.value=!0)},null,8,_l)],12,bl),r.value?(dt(),pt("div",{key:0,class:"overlay",onClick:g[2]||(g[2]=T=>r.value=!1)},[b("img",{src:t.pluginInfo.banner?.replace("!nomark","!pkmer").replace("gif!pkmer","gif"),alt:"原图",onClick:g[1]||(g[1]=Be(()=>{},["stop"]))},null,8,xl)])):ue("",!0)]),b("div",kl,[b("h3",Cl,[b("a",{href:t.pluginInfo.contentUrl?t.pluginInfo.contentUrl:t.pluginInfo.readme_zh?t.pluginInfo.readme_zh:"#"},bt(t.pluginInfo.name),9,Tl),b("span",Sl,bt(t.pluginInfo.version),1),b("span",El,bt(u(t.pluginInfo.pkmerDownloadCount)),1),g[8]||(g[8]=b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-v-35974737":"","data-icon":"mdi:temperature-celsius",class:"-mt-2 text-orange-500 iconify w-4 h-4 iconify--mdi"},[b("path",{fill:"currentColor",d:"M16.5 5c1.55 0 3 .47 4.19 1.28l-1.16 2.89A4.47 4.47 0 0 0 16.5 8C14 8 12 10 12 12.5s2 4.5 4.5 4.5c1.03 0 1.97-.34 2.73-.92l1.14 2.85A7.47 7.47 0 0 1 16.5 20A7.5 7.5 0 0 1 9 12.5A7.5 7.5 0 0 1 16.5 5M6 3a3 3 0 0 1 3 3a3 3 0 0 1-3 3a3 3 0 0 1-3-3a3 3 0 0 1 3-3m0 2a1 1 0 0 0-1 1a1 1 0 0 0 1 1a1 1 0 0 0 1-1a1 1 0 0 0-1-1Z"})],-1))])]),b("p",Il,[b("img",{class:"h-full",alt:"GitHub stars",src:`https://img.shields.io/github/stars/${t.pluginInfo.repo}?style=plastic&color=4F46E5&label=关注量`},null,8,Al),b("img",{class:"h-full ml-2",alt:"下载数量",src:`https://img.shields.io/badge/下载总数-${u(t.pluginInfo.downloadCount)}-yellow`},null,8,Pl),Et(b("a",{class:"ml-2",href:t.pluginInfo.contentUrl?t.pluginInfo.contentUrl:"javascript:void(0)"},[...g[9]||(g[9]=[b("span",{class:"text-white font-sans text-xs py-1 px-3 m-1 rounded-lg bg-yellow-500"}," 教程 ",-1)])],8,Ol),[[Ot,t.pluginInfo.contentUrl]]),Et(b("a",{class:"ml-2",href:t.pluginInfo.readme_zh?t.pluginInfo.readme_zh:"javascript:void(0)",tooltip:"Readme文档"},[...g[10]||(g[10]=[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 32 32","data-v-5df2a037":"","data-icon":"la:readme",class:"text-green-500 block mx-auto iconify w-6 h-6 iconify--la"},[b("path",{fill:"currentColor",d:"M5 6C3.346 6 2 7.346 2 9v12c0 1.654 1.346 3 3 3l6.184-.02c.99 0 1.949.31 2.773.86L16 26.2l2.043-1.361a4.988 4.988 0 0 1 2.773-.84H27c1.654 0 3-1.346 3-3V9c0-1.654-1.346-3-3-3h-6.184c-1.386 0-2.73.408-3.882 1.176L16 7.799l-.934-.623A6.978 6.978 0 0 0 11.184 6H5zm0 2h6.184c.99 0 1.949.29 2.773.84L16 10.2l2.043-1.361A4.988 4.988 0 0 1 20.816 8H27c.552 0 1 .449 1 1v12c0 .551-.448 1-1 1h-6.184c-1.386 0-2.73.408-3.882 1.176l-.934.623l-.934-.623A6.978 6.978 0 0 0 11.184 22H5c-.552 0-1-.449-1-1V9c0-.551.448-1 1-1zm1 4v2h8v-2H6zm12 0v2h8v-2h-8zM6 16v2h8v-2H6zm12 0v2h8v-2h-8z"})],-1)])],8,Dl),[[Ot,t.pluginInfo.readme_zh]])]),b("p",zl,bt(t.pluginInfo.chineseDescription?.replace("【机翻】","")||t.pluginInfo.description),1)]),b("div",Bl,[b("div",Ll,[b("img",{class:"w-12 mask mask-blob",src:l(),onerror:`javascript:this.src='${c(t.pluginInfo.author)}'`,alt:"avatar"},null,8,Ml),b("a",{href:"https://github.com/"+t.pluginInfo.repo},[b("div",Ul,[b("h3",{class:"whitespace-nowrap text-ellipsis overflow-hidden max-w-[140px] font-heading font-medium text-muted-800 dark:text-muted-50",tooltip:t.pluginInfo.author},bt(t.pluginInfo.author),9,Rl),b("p",Fl,bt(m(t.pluginInfo.pluginUpdatedTime)),1)])],8,$l),b("div",jl,[Et(b("button",{onClick:v,class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility"}," 请登录 ",512),[[Ot,!Jt(n)]]),Et(b("div",null,[t.pluginInfo.isInstalled?t.pluginInfo.isInstalled&&t.pluginInfo.isOutdated?(dt(),pt("button",{key:1,class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility",onClick:g[4]||(g[4]=T=>x.$emit("download-update-plugin","update",t.pluginInfo.id,t.pluginInfo.version,t.pluginInfo.source))},[...g[12]||(g[12]=[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 20 20","data-v-5ade68da":"","data-icon":"dashicons:update",class:"block w-4 h-4 mx-auto iconify iconify--dashicons"},[b("path",{fill:"currentColor",d:"M10.2 3.28c3.53 0 6.43 2.61 6.92 6h2.08l-3.5 4l-3.5-4h2.32a4.439 4.439 0 0 0-4.32-3.45c-1.45 0-2.73.71-3.54 1.78L4.95 5.66a6.965 6.965 0 0 1 5.25-2.38zm-.4 13.44c-3.52 0-6.43-2.61-6.92-6H.8l3.5-4c1.17 1.33 2.33 2.67 3.5 4H5.48a4.439 4.439 0 0 0 4.32 3.45c1.45 0 2.73-.71 3.54-1.78l1.71 1.95a6.95 6.95 0 0 1-5.25 2.38z"})],-1),Wt(" 更新 ",-1)])])):(dt(),pt("button",{key:2,onClick:g[5]||(g[5]=T=>f(t.pluginInfo.id)),tooltip:h(),class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility"},[(dt(),pt("svg",Hl,[b("path",{fill:i.value,d:"M8 4c.367 0 .721.048 1.063.145a3.943 3.943 0 0 1 1.762 1.031a3.944 3.944 0 0 1 1.03 1.762c.097.34.145.695.145 1.062c0 .367-.048.721-.145 1.063a3.94 3.94 0 0 1-1.03 1.765a4.017 4.017 0 0 1-1.762 1.031C8.72 11.953 8.367 12 8 12s-.721-.047-1.063-.14a4.056 4.056 0 0 1-1.765-1.032A4.055 4.055 0 0 1 4.14 9.062A3.992 3.992 0 0 1 4 8c0-.367.047-.721.14-1.063a4.02 4.02 0 0 1 .407-.953A4.089 4.089 0 0 1 5.98 4.546a3.94 3.94 0 0 1 .957-.401A3.89 3.89 0 0 1 8 4z"},null,8,Wl)])),g[13]||(g[13]=Wt(" 已安装 ",-1))],8,Nl)):Et((dt(),pt("button",{key:0,class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility",onClick:g[3]||(g[3]=T=>x.$emit("download-update-plugin","download",t.pluginInfo.id,t.pluginInfo.version,t.pluginInfo.source))},[...g[11]||(g[11]=[b("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"svg-icon lucide-download"},[b("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),b("polyline",{points:"7 10 12 15 17 10"}),b("line",{x1:"12",y1:"15",x2:"12",y2:"3"})],-1),Wt(" 下载 ",-1)])],512)),[[Ot,Jt(n)]])],512),[[Ot,Jt(n)]])])])])])]))}});const Pi=(t,e)=>{const n=t.__vccOpts||t;for(const[r,s]of e)n[r]=s;return n},Zl=Pi(Vl,[["__scopeId","data-v-a7022a9b"]]),Kl={class:"relative"},Gl={class:"h-full flex flex-col items-start gap-4 p-6"},ql={class:"relative w-full space-y-2"},Jl={class:"relative"},Yl={class:"mark"},Xl=["data-name"],Ql=["src","alt"],tu=["src"],eu={class:"plugin_name relative flex items-center h-10 overflow-hidden"},nu={"data-pagefind-meta":"title",class:"flex items-center font-heading text-lg font-medium text-muted-800 dark:text-white leading-6"},su=["src"],ru={class:"-mt-2 text-orange-500 ml-2 text-lg font-serif font-bold italic"},iu={class:"flex items-center flex-wrap leading-6 text-muted-600 dark:text-muted-400"},ou=["src"],au=["src"],lu=["href"],uu={class:"w-full mt-auto space-y-6"},cu={class:"flex items-center justify-start w-full relative"},du=["src","onerror"],fu=["href"],hu={class:"pl-2"},pu=["tooltip"],mu={class:"block ml-auto font-sans text-sm text-muted-400"},gu=Ie({__name:"ThemeCard",props:{app:{},themeInfo:{},isLogin:{type:Boolean}},emits:["download-update-theme"],setup(t){const e=t,n=e.isLogin;function r(){return e.themeInfo.authorAvatar&&e.themeInfo.authorAvatar.length>0?e.themeInfo.authorAvatar:u(e.themeInfo.author)}const s=ut(!1);let i=[];e.themeInfo.tags&&e.themeInfo.tags.length>0&&(i=e.themeInfo.tags.split(","));function l(y){return y>=1e6?(y/1e6).toFixed(0)+"M":y>=1e3?(y/1e3).toFixed(0)+"K":y.toString()}function a(y){return(y.match(/\b\w/g)||[]).join("").toUpperCase()}function u(y){let c="";if(y){const k=a(y);/^[a-zA-Z]+$/.test(k)?c=`https://dummyimage.com/100x100/555/fff&text=${k.toUpperCase()}`:c=`https://dummyimage.com/100x100/555/ffff&text=${encodeURIComponent(k)}`}else c="https://cdn.pkmer.cn/covers/logo.png!nomark";return c}const m=async y=>{await e.app.customCss.setTheme(y)},h=()=>`background-image:url(${`https://pkmer.cn/img/cover/${Math.floor(Math.random()*11)}.jpg`});`,f=()=>{e.app.setting.open(),e.app.setting.openTabById("pkmer")};return(y,c)=>(dt(),pt("div",Kl,[b("div",Gl,[b("div",ql,[b("div",Jl,[Et(b("span",{class:"absolute top-3 left-3 inline-block font-sans text-xs py-1.5 px-3 m-1 rounded-lg bg-primary-500 text-white shadow-xl shadow-primary-500/20"},bt(Jt(i)[0]),513),[[Ot,Jt(i)[0]]]),Et(b("view",Yl,[...c[6]||(c[6]=[b("span",{class:"learn"},"Tips ",-1)])],512),[[Ot,t.themeInfo.contentUrl]]),Et(b("div",{class:"noimg h-40 md:h-52","data-name":t.themeInfo.name,style:pn(h())},null,12,Xl),[[Ot,!t.themeInfo.banner]]),Et(b("img",{class:"w-full h-52 object-contain aspect-video rounded-xl cursor-pointer",src:t.themeInfo.banner?.replace("gif!pkmer","gif").replace("!pkmer","!nomark"),alt:t.themeInfo.name,width:"348",height:"208",onerror:"javascript:this.src='https://cdn.pkmer.cn/covers/pkmer2.png!nomark';this.οnerrοr=null;",onClick:c[0]||(c[0]=k=>s.value=!0)},null,8,Ql),[[Ot,t.themeInfo.banner]]),s.value?(dt(),pt("div",{key:0,class:"overlay",onClick:c[2]||(c[2]=k=>s.value=!1)},[b("img",{src:t.themeInfo.banner?.replace("!nomark","!pkmer"),alt:"原图",onClick:c[1]||(c[1]=Be(()=>{},["stop"]))},null,8,tu)])):ue("",!0)]),b("div",eu,[b("h3",nu,[Wt(bt(t.themeInfo.name)+" ",1),b("img",{class:"-mt-2 ml-2",alt:"version",src:`https://img.shields.io/badge/${t.themeInfo.version}-brightgreen`},null,8,su),b("span",ru,bt(l(t.themeInfo.pkmerDownloadCount)),1),c[7]||(c[7]=b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-v-35974737":"","data-icon":"mdi:temperature-celsius",class:"-mt-2 text-orange-500 iconify w-4 h-4 iconify--mdi"},[b("path",{fill:"currentColor",d:"M16.5 5c1.55 0 3 .47 4.19 1.28l-1.16 2.89A4.47 4.47 0 0 0 16.5 8C14 8 12 10 12 12.5s2 4.5 4.5 4.5c1.03 0 1.97-.34 2.73-.92l1.14 2.85A7.47 7.47 0 0 1 16.5 20A7.5 7.5 0 0 1 9 12.5A7.5 7.5 0 0 1 16.5 5M6 3a3 3 0 0 1 3 3a3 3 0 0 1-3 3a3 3 0 0 1-3-3a3 3 0 0 1 3-3m0 2a1 1 0 0 0-1 1a1 1 0 0 0 1 1a1 1 0 0 0 1-1a1 1 0 0 0-1-1Z"})],-1))])]),b("p",iu,[b("img",{class:"h-ful",alt:"GitHub stars",src:`https://img.shields.io/github/stars/${t.themeInfo.repo}?style=plastic&color=4F46E5&label=关注量`},null,8,ou),b("img",{class:"h-ful ml-2",alt:"下载数量",src:`https://img.shields.io/badge/下载总数-${l(t.themeInfo.downloadCount)}-yellow`},null,8,au),b("a",{class:zt(["ml-2",{visible:t.themeInfo.contentUrl,invisible:!t.themeInfo.contentUrl}]),href:t.themeInfo.contentUrl?t.themeInfo.contentUrl:"javascript:void(0)"},[...c[8]||(c[8]=[b("span",{class:"text-white font-sans text-xs py-1 px-3 m-1 rounded-lg bg-yellow-500"}," 教程 ",-1)])],10,lu)]),Et(b("p",{class:"plugin_desc text-base mt-auto min-h-[3rem] text-muted-600 dark:text-muted-400 leading-6"},bt(t.themeInfo.chineseDescription?.replace("【机翻】","")||t.themeInfo.description),513),[[Ot,t.themeInfo.description]])]),b("div",uu,[b("div",cu,[b("img",{class:"w-12 mask mask-blob",src:r(),onerror:`javascript:this.src='${u(t.themeInfo.author)}'`,alt:"avatar"},null,8,du),b("a",{href:"https://github.com/"+t.themeInfo.repo},[b("div",hu,[b("h3",{class:"whitespace-nowrap text-ellipsis overflow-hidden max-w-[140px] font-heading font-medium text-muted-800 dark:text-muted-50",tooltip:t.themeInfo.author},bt(t.themeInfo.author),9,pu)])],8,fu),b("div",mu,[Et(b("button",{onClick:f,class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility"}," 请登录 ",512),[[Ot,!Jt(n)]]),Et(b("div",null,[t.themeInfo.isInstalled?t.themeInfo.isInstalled&&t.themeInfo.isOutdated?(dt(),pt("button",{key:1,class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility",onClick:c[4]||(c[4]=k=>y.$emit("download-update-theme","update",t.themeInfo.name,t.themeInfo.version))},[...c[10]||(c[10]=[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 20 20","data-v-5ade68da":"","data-icon":"dashicons:update",class:"block w-4 h-4 mx-auto iconify iconify--dashicons"},[b("path",{fill:"currentColor",d:"M10.2 3.28c3.53 0 6.43 2.61 6.92 6h2.08l-3.5 4l-3.5-4h2.32a4.439 4.439 0 0 0-4.32-3.45c-1.45 0-2.73.71-3.54 1.78L4.95 5.66a6.965 6.965 0 0 1 5.25-2.38zm-.4 13.44c-3.52 0-6.43-2.61-6.92-6H.8l3.5-4c1.17 1.33 2.33 2.67 3.5 4H5.48a4.439 4.439 0 0 0 4.32 3.45c1.45 0 2.73-.71 3.54-1.78l1.71 1.95a6.95 6.95 0 0 1-5.25 2.38z"})],-1),Wt(" 更新 ",-1)])])):(dt(),pt("button",{key:2,onClick:c[5]||(c[5]=k=>m(t.themeInfo.name)),tooltip:"主题已安装,应用当前主题",flow:"down",class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility"},[...c[11]||(c[11]=[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 48 48","data-v-5ade68da":"","data-icon":"icon-park-outline:link-cloud-sucess",class:"block w-4 h-4 mx-auto iconify iconify--icon-park-outline"},[b("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"4"},[b("path",{d:"M12 33c-3.333 0-8-1.5-8-7.5c0-7 7-8.5 9-8.5c1-3.5 3-9 11-9c7 0 10 4 11 7.5c0 0 9 1 9 9.5c0 6-4 8-8 8"}),b("path",{d:"m18 33l6 5l8-10"})])],-1),Wt(" 应用 ",-1)])])):Et((dt(),pt("button",{key:0,class:"inline-flex items-center h-8 px-2 py-1 text-white transition-colors duration-300 border-0 rounded shadow-xl whitespace-nowrap bg-primary-500 hover:bg-primary-600 shadow-primary-500/20 tw-accessibility",onClick:c[3]||(c[3]=k=>y.$emit("download-update-theme","download",t.themeInfo.name,t.themeInfo.version))},[...c[9]||(c[9]=[b("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"svg-icon lucide-download"},[b("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),b("polyline",{points:"7 10 12 15 17 10"}),b("line",{x1:"12",y1:"15",x2:"12",y2:"3"})],-1),Wt(" 下载 ",-1)])],512)),[[Ot,Jt(n)]])],512),[[Ot,Jt(n)]])])])])])]))}});const Oi=Pi(gu,[["__scopeId","data-v-1a6e40f1"]]),Kt="https://api.pkmer.cn/api/v1/download/obsidian";class Me{token;constructor(e){this.token=e}fetchWithToken(e,n){return fetch(e,{...n,headers:{Authorization:"Bearer "+this.token}})}isTokenExpired(e){return Math.floor(Date.now()/1e3)>e.exp}async isUserLogin(){const e=this.token;if(!e)return!1;try{const n=e.split(".");if(n.length<2||!n[1])return console.error("Pkmer Token is malformed: does not contain enough parts."),!1;const s=n[1].replace(/-/g,"+").replace(/_/g,"/"),i=window.atob(s);if(!i)return console.error("Pkmer Token is malformed: payload could not be base64 decoded."),!1;const l=JSON.parse(decodeURIComponent(escape(i)));return this.isTokenExpired(l)?(console.log("Pkmer Token has expired. Please log in again to get a new token."),!1):!0}catch(n){return console.error("Error processing Pkmer Token (likely malformed or corrupted):",n),!1}}async getPkmerDocs(){const e=await ot.requestUrl("https://pkmer.cn/getPost.json");return JSON.parse(e.text).map(r=>({slug:r.slug.split("/").pop(),uid:r.uid,authorAvatar:r.authorAvatar,description:r.description,tags:Array.isArray(r.tags)?r.tags.join(", "):r.tags}))}async getDownloadUrl(e,n){return e=="obsidian-pkmer"?`https://pkmer.cn/_release/obsidian-pkmer.zip?v=${n}`:await(await this.fetchWithToken(Kt+"/getPluginDownloadUrl/"+e+"/"+n,{method:"GET"})).text()}async getDownloadUrlByVersion(e,n){if(e=="obsidian-pkmer")return`https://pkmer.cn/_release/obsidian-pkmer.zip?v=${n}`;try{return(await this.fetchWithToken(Kt+`/getPluginDownloadUrl/${e}/${n}?useVersion=true`)).text()}catch(r){throw console.error(`Failed to fetch download URL for plugin ${e} version ${n}:`,r),r}}async getPluginVersions(e){try{const n=await this.fetchWithToken(`https://api.pkmer.cn/api/v1/download/${e}/versions`);if(!n.ok)throw new Error(`HTTP error! Status: ${n.status}`);const r=await n.json();return(r.data||r).map(l=>l.replace(`https://download.pkmer.cn/obsidian-plugins/${e}-`,"").replace(".zip","")).filter(l=>l!=="")}catch(n){throw console.error(`Failed to fetch versions for plugin ${e}:`,n),n}}async getThemeDownloadUrlByVersion(e,n){try{return(await this.fetchWithToken(Kt+`/getThemeDownloadUrl/${e}/${n}?useVersion=true`)).text()}catch(r){throw console.error(`Failed to fetch download URL for theme ${e} version ${n}:`,r),r}}async getThemeVersions(e){try{const r=await(await this.fetchWithToken(`https://api.pkmer.cn/api/v1/download/${e}/themeversions`)).json();return(r.data||r).map(l=>l.replace(`https://download.pkmer.cn/obsidian-themes/${e}-`,"").replace(".zip","")).filter(l=>l!=="")}catch(n){throw console.error(`Failed to fetch versions for theme ${e}:`,n),n}}async getDownloadCount(){const e=await this.fetchWithToken(Kt+"/getPluginDownloadCount");return parseInt(await e.text())+1}async getTop20Plugins(){const e=localStorage.getItem("top20Plugins"),n=localStorage.getItem("top20PluginsExpiry"),r=new Date().getTime();if(e&&n&&r<+n)return JSON.parse(e);{const i=await(await this.fetchWithToken(Kt+"/getTop20Plugins")).json();return localStorage.setItem("top20Plugins",JSON.stringify(i)),localStorage.setItem("top20PluginsExpiry",String(r+8*60*60*1e3)),i}}async searchPlugins(e){return await(await this.fetchWithToken(Kt+"/searchPlugins?keyword="+e+"&limit=10",{method:"GET"})).json()}async getPluginListPaginated(e=1,n=24,r="downloadCount",s="DESC"){try{const l=await(await this.fetchWithToken(`${Kt}/getPluginsPaginated?page=${e}&limit=${n}&sortBy=${r}&sortOrder=${s}`,{method:"GET"})).json();return{plugins:l.data,total:l.meta.total,totalPages:l.meta.totalPages}}catch(i){throw console.error("Error fetching paginated plugin list:",i),i}}async searchPluginsPaginated(e,n=1,r=24,s="downloadCount",i="DESC"){try{const a=await(await this.fetchWithToken(`${Kt}/searchPluginsPaginated?searchText=${encodeURIComponent(e)}&page=${n}&limit=${r}&sortBy=${s}&sortOrder=${i}`,{method:"GET"})).json();return{plugins:a.data,total:a.meta.total,totalPages:a.meta.totalPages}}catch(l){throw console.error("Error searching plugins with pagination:",l),l}}async getTop20Themes(){const e=localStorage.getItem("top20Themes"),n=localStorage.getItem("top20ThemesExpiry"),r=new Date().getTime();if(e&&n&&r<+n)return JSON.parse(e);{const i=await(await this.fetchWithToken(Kt+"/getTop20Themes")).json();return localStorage.setItem("top20Themes",JSON.stringify(i)),localStorage.setItem("top20ThemesExpiry",String(r+8*60*60*1e3)),i}}async getThemeList(e=1*60*60*1e3){const n=localStorage.getItem("themeList"),r=localStorage.getItem("themeListExpiry"),s=new Date().getTime();if(n&&r&&s<+r)return JSON.parse(n);try{const l=await(await this.fetchWithToken(Kt+"/getAllThemes",{method:"GET"})).json();return localStorage.setItem("themeList",JSON.stringify(l)),localStorage.setItem("themeListExpiry",String(s+e)),l}catch(i){throw console.error("Error fetching theme list:",i),i}}async getThemeListPaginated(e=1,n=24,r="downloadCount",s="DESC"){try{const l=await(await this.fetchWithToken(`${Kt}/getThemesPaginated?page=${e}&limit=${n}&sortBy=${r}&sortOrder=${s}`,{method:"GET"})).json();return{themes:l.data,total:l.meta.total,totalPages:l.meta.totalPages}}catch(i){throw console.error("Error fetching paginated theme list:",i),i}}async searchThemesPaginated(e,n=1,r=24,s="downloadCount",i="DESC"){try{const a=await(await this.fetchWithToken(`${Kt}/searchThemesPaginated?searchText=${encodeURIComponent(e)}&page=${n}&limit=${r}&sortBy=${s}&sortOrder=${i}`,{method:"GET"})).json();return{themes:a.data,total:a.meta.total,totalPages:a.meta.totalPages}}catch(l){throw console.error("Error searching themes with pagination:",l),l}}async getThemeDownloadUrl(e,n){return await(await this.fetchWithToken(Kt+"/getThemeDownloadUrl/"+e+"/"+n,{method:"GET"})).text()}async getPkmerVersion(){const e=Math.random(),n=await ot.requestUrl(`https://pkmer.cn/_release/manifest.json?_=${e}`);return JSON.parse(n.text).version}async getPluginTags(){try{return await(await this.fetchWithToken(`${Kt}/getPluginTags`,{method:"GET"})).json()}catch(e){return console.error("Error fetching plugin tags:",e),[]}}async getInstalledPluginsPaginated(e,n=1,r=24,s="downloadCount",i="DESC"){if(!e?.length)throw new Error("插件ID列表不能为空");try{const l=await this.fetchWithToken(`${Kt}/getInstalledPluginsPaginated?page=${n}&pageSize=${r}&sortBy=${s}&sortOrder=${i}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pluginIds:e})}),a=await l.json();if(!l.ok)throw new Error(a.message||"请求失败");return{plugins:a?.data,total:a.meta?.total||0,totalPages:a.meta?.totalPages||1}}catch(l){throw console.error("Error fetching installed plugins:",l),l}}}var xn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function kn(t){throw new Error('Could not dynamically require "'+t+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Di={exports:{}};/*!
JSZip v3.10.1 - A JavaScript class for generating and reading zip files
<http://stuartk.com/jszip>
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
JSZip uses the library pako released under the MIT license :
https://github.com/nodeca/pako/blob/main/LICENSE
*/(function(t,e){(function(n){t.exports=n()})(function(){return function n(r,s,i){function l(m,h){if(!s[m]){if(!r[m]){var f=typeof kn=="function"&&kn;if(!h&&f)return f(m,!0);if(a)return a(m,!0);var y=new Error("Cannot find module '"+m+"'");throw y.code="MODULE_NOT_FOUND",y}var c=s[m]={exports:{}};r[m][0].call(c.exports,function(k){var v=r[m][1][k];return l(v||k)},c,c.exports,n,r,s,i)}return s[m].exports}for(var a=typeof kn=="function"&&kn,u=0;u<i.length;u++)l(i[u]);return l}({1:[function(n,r,s){var i=n("./utils"),l=n("./support"),a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";s.encode=function(u){for(var m,h,f,y,c,k,v,x=[],g=0,T=u.length,O=T,D=i.getTypeOf(u)!=="string";g<u.length;)O=T-g,f=D?(m=u[g++],h=g<T?u[g++]:0,g<T?u[g++]:0):(m=u.charCodeAt(g++),h=g<T?u.charCodeAt(g++):0,g<T?u.charCodeAt(g++):0),y=m>>2,c=(3&m)<<4|h>>4,k=1<O?(15&h)<<2|f>>6:64,v=2<O?63&f:64,x.push(a.charAt(y)+a.charAt(c)+a.charAt(k)+a.charAt(v));return x.join("")},s.decode=function(u){var m,h,f,y,c,k,v=0,x=0,g="data:";if(u.substr(0,g.length)===g)throw new Error("Invalid base64 input, it looks like a data url.");var T,O=3*(u=u.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(u.charAt(u.length-1)===a.charAt(64)&&O--,u.charAt(u.length-2)===a.charAt(64)&&O--,O%1!=0)throw new Error("Invalid base64 input, bad content length.");for(T=l.uint8array?new Uint8Array(0|O):new Array(0|O);v<u.length;)m=a.indexOf(u.charAt(v++))<<2|(y=a.indexOf(u.charAt(v++)))>>4,h=(15&y)<<4|(c=a.indexOf(u.charAt(v++)))>>2,f=(3&c)<<6|(k=a.indexOf(u.charAt(v++))),T[x++]=m,c!==64&&(T[x++]=h),k!==64&&(T[x++]=f);return T}},{"./support":30,"./utils":32}],2:[function(n,r,s){var i=n("./external"),l=n("./stream/DataWorker"),a=n("./stream/Crc32Probe"),u=n("./stream/DataLengthProbe");function m(h,f,y,c,k){this.compressedSize=h,this.uncompressedSize=f,this.crc32=y,this.compression=c,this.compressedContent=k}m.prototype={getContentWorker:function(){var h=new l(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new u("data_length")),f=this;return h.on("end",function(){if(this.streamInfo.data_length!==f.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),h},getCompressedWorker:function(){return new l(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},m.createWorkerFrom=function(h,f,y){return h.pipe(new a).pipe(new u("uncompressedSize")).pipe(f.compressWorker(y)).pipe(new u("compressedSize")).withStreamInfo("compression",f)},r.exports=m},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(n,r,s){var i=n("./stream/GenericWorker");s.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},s.DEFLATE=n("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(n,r,s){var i=n("./utils"),l=function(){for(var a,u=[],m=0;m<256;m++){a=m;for(var h=0;h<8;h++)a=1&a?3988292384^a>>>1:a>>>1;u[m]=a}return u}();r.exports=function(a,u){return a!==void 0&&a.length?i.getTypeOf(a)!=="string"?function(m,h,f,y){var c=l,k=y+f;m^=-1;for(var v=y;v<k;v++)m=m>>>8^c[255&(m^h[v])];return-1^m}(0|u,a,a.length,0):function(m,h,f,y){var c=l,k=y+f;m^=-1;for(var v=y;v<k;v++)m=m>>>8^c[255&(m^h.charCodeAt(v))];return-1^m}(0|u,a,a.length,0):0}},{"./utils":32}],5:[function(n,r,s){s.base64=!1,s.binary=!1,s.dir=!1,s.createFolders=!0,s.date=null,s.compression=null,s.compressionOptions=null,s.comment=null,s.unixPermissions=null,s.dosPermissions=null},{}],6:[function(n,r,s){var i=null;i=typeof Promise<"u"?Promise:n("lie"),r.exports={Promise:i}},{lie:37}],7:[function(n,r,s){var i=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",l=n("pako"),a=n("./utils"),u=n("./stream/GenericWorker"),m=i?"uint8array":"array";function h(f,y){u.call(this,"FlateWorker/"+f),this._pako=null,this._pakoAction=f,this._pakoOptions=y,this.meta={}}s.magic="\b\0",a.inherits(h,u),h.prototype.processChunk=function(f){this.meta=f.meta,this._pako===null&&this._createPako(),this._pako.push(a.transformTo(m,f.data),!1)},h.prototype.flush=function(){u.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){u.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new l[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var f=this;this._pako.onData=function(y){f.push({data:y,meta:f.meta})}},s.compressWorker=function(f){return new h("Deflate",f)},s.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(n,r,s){function i(c,k){var v,x="";for(v=0;v<k;v++)x+=String.fromCharCode(255&c),c>>>=8;return x}function l(c,k,v,x,g,T){var O,D,A=c.file,L=c.compression,$=T!==m.utf8encode,G=a.transformTo("string",T(A.name)),R=a.transformTo("string",m.utf8encode(A.name)),q=A.comment,st=a.transformTo("string",T(q)),P=a.transformTo("string",m.utf8encode(q)),W=R.length!==A.name.length,d=P.length!==q.length,K="",tt="",V="",Q=A.dir,J=A.date,rt={crc32:0,compressedSize:0,uncompressedSize:0};k&&!v||(rt.crc32=c.crc32,rt.compressedSize=c.compressedSize,rt.uncompressedSize=c.uncompressedSize);var U=0;k&&(U|=8),$||!W&&!d||(U|=2048);var M=0,et=0;Q&&(M|=16),g==="UNIX"?(et=798,M|=function(X,_t){var xt=X;return X||(xt=_t?16893:33204),(65535&xt)<<16}(A.unixPermissions,Q)):(et=20,M|=function(X){return 63&(X||0)}(A.dosPermissions)),O=J.getUTCHours(),O<<=6,O|=J.getUTCMinutes(),O<<=5,O|=J.getUTCSeconds()/2,D=J.getUTCFullYear()-1980,D<<=4,D|=J.getUTCMonth()+1,D<<=5,D|=J.getUTCDate(),W&&(tt=i(1,1)+i(h(G),4)+R,K+="up"+i(tt.length,2)+tt),d&&(V=i(1,1)+i(h(st),4)+P,K+="uc"+i(V.length,2)+V);var nt="";return nt+=`
\0`,nt+=i(U,2),nt+=L.magic,nt+=i(O,2),nt+=i(D,2),nt+=i(rt.crc32,4),nt+=i(rt.compressedSize,4),nt+=i(rt.uncompressedSize,4),nt+=i(G.length,2),nt+=i(K.length,2),{fileRecord:f.LOCAL_FILE_HEADER+nt+G+K,dirRecord:f.CENTRAL_FILE_HEADER+i(et,2)+nt+i(st.length,2)+"\0\0\0\0"+i(M,4)+i(x,4)+G+K+st}}var a=n("../utils"),u=n("../stream/GenericWorker"),m=n("../utf8"),h=n("../crc32"),f=n("../signature");function y(c,k,v,x){u.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=k,this.zipPlatform=v,this.encodeFileName=x,this.streamFiles=c,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}a.inherits(y,u),y.prototype.push=function(c){var k=c.meta.percent||0,v=this.entriesCount,x=this._sources.length;this.accumulate?this.contentBuffer.push(c):(this.bytesWritten+=c.data.length,u.prototype.push.call(this,{data:c.data,meta:{currentFile:this.currentFile,percent:v?(k+100*(v-x-1))/v:100}}))},y.prototype.openedSource=function(c){this.currentSourceOffset=this.bytesWritten,this.currentFile=c.file.name;var k=this.streamFiles&&!c.file.dir;if(k){var v=l(c,k,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:v.fileRecord,meta:{percent:0}})}else this.accumulate=!0},y.prototype.closedSource=function(c){this.accumulate=!1;var k=this.streamFiles&&!c.file.dir,v=l(c,k,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(v.dirRecord),k)this.push({data:function(x){return f.DATA_DESCRIPTOR+i(x.crc32,4)+i(x.compressedSize,4)+i(x.uncompressedSize,4)}(c),meta:{percent:100}});else for(this.push({data:v.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},y.prototype.flush=function(){for(var c=this.bytesWritten,k=0;k<this.dirRecords.length;k++)this.push({data:this.dirRecords[k],meta:{percent:100}});var v=this.bytesWritten-c,x=function(g,T,O,D,A){var L=a.transformTo("string",A(D));return f.CENTRAL_DIRECTORY_END+"\0\0\0\0"+i(g,2)+i(g,2)+i(T,4)+i(O,4)+i(L.length,2)+L}(this.dirRecords.length,v,c,this.zipComment,this.encodeFileName);this.push({data:x,meta:{percent:100}})},y.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},y.prototype.registerPrevious=function(c){this._sources.push(c);var k=this;return c.on("data",function(v){k.processChunk(v)}),c.on("end",function(){k.closedSource(k.previous.streamInfo),k._sources.length?k.prepareNextSource():k.end()}),c.on("error",function(v){k.error(v)}),this},y.prototype.resume=function(){return!!u.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},y.prototype.error=function(c){var k=this._sources;if(!u.prototype.error.call(this,c))return!1;for(var v=0;v<k.length;v++)try{k[v].error(c)}catch{}return!0},y.prototype.lock=function(){u.prototype.lock.call(this);for(var c=this._sources,k=0;k<c.length;k++)c[k].lock()},r.exports=y},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(n,r,s){var i=n("../compressions"),l=n("./ZipFileWorker");s.generateWorker=function(a,u,m){var h=new l(u.streamFiles,m,u.platform,u.encodeFileName),f=0;try{a.forEach(function(y,c){f++;var k=function(T,O){var D=T||O,A=i[D];if(!A)throw new Error(D+" is not a valid compression method !");return A}(c.options.compression,u.compression),v=c.options.compressionOptions||u.compressionOptions||{},x=c.dir,g=c.date;c._compressWorker(k,v).withStreamInfo("file",{name:y,dir:x,date:g,comment:c.comment||"",unixPermissions:c.unixPermissions,dosPermissions:c.dosPermissions}).pipe(h)}),h.entriesCount=f}catch(y){h.error(y)}return h}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(n,r,s){function i(){if(!(this instanceof i))return new i;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var l=new i;for(var a in this)typeof this[a]!="function"&&(l[a]=this[a]);return l}}(i.prototype=n("./object")).loadAsync=n("./load"),i.support=n("./support"),i.defaults=n("./defaults"),i.version="3.10.1",i.loadAsync=function(l,a){return new i().loadAsync(l,a)},i.external=n("./external"),r.exports=i},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(n,r,s){var i=n("./utils"),l=n("./external"),a=n("./utf8"),u=n("./zipEntries"),m=n("./stream/Crc32Probe"),h=n("./nodejsUtils");function f(y){return new l.Promise(function(c,k){var v=y.decompressed.getContentWorker().pipe(new m);v.on("error",function(x){k(x)}).on("end",function(){v.streamInfo.crc32!==y.decompressed.crc32?k(new Error("Corrupted zip : CRC32 mismatch")):c()}).resume()})}r.exports=function(y,c){var k=this;return c=i.extend(c||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:a.utf8decode}),h.isNode&&h.isStream(y)?l.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):i.prepareContent("the loaded zip file",y,!0,c.optimizedBinaryString,c.base64).then(function(v){var x=new u(c);return x.load(v),x}).then(function(v){var x=[l.Promise.resolve(v)],g=v.files;if(c.checkCRC32)for(var T=0;T<g.length;T++)x.push(f(g[T]));return l.Promise.all(x)}).then(function(v){for(var x=v.shift(),g=x.files,T=0;T<g.length;T++){var O=g[T],D=O.fileNameStr,A=i.resolve(O.fileNameStr);k.file(A,O.decompressed,{binary:!0,optimizedBinaryString:!0,date:O.date,dir:O.dir,comment:O.fileCommentStr.length?O.fileCommentStr:null,unixPermissions:O.unixPermissions,dosPermissions:O.dosPermissions,createFolders:c.createFolders}),O.dir||(k.file(A).unsafeOriginalName=D)}return x.zipComment.length&&(k.comment=x.zipComment),k})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(n,r,s){var i=n("../utils"),l=n("../stream/GenericWorker");function a(u,m){l.call(this,"Nodejs stream input adapter for "+u),this._upstreamEnded=!1,this._bindStream(m)}i.inherits(a,l),a.prototype._bindStream=function(u){var m=this;(this._stream=u).pause(),u.on("data",function(h){m.push({data:h,meta:{percent:0}})}).on("error",function(h){m.isPaused?this.generatedError=h:m.error(h)}).on("end",function(){m.isPaused?m._upstreamEnded=!0:m.end()})},a.prototype.pause=function(){return!!l.prototype.pause.call(this)&&(this._stream.pause(),!0)},a.prototype.resume=function(){return!!l.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},r.exports=a},{"../stream/GenericWorker":28,"../utils":32}],13:[function(n,r,s){var i=n("readable-stream").Readable;function l(a,u,m){i.call(this,u),this._helper=a;var h=this;a.on("data",function(f,y){h.push(f)||h._helper.pause(),m&&m(y)}).on("error",function(f){h.emit("error",f)}).on("end",function(){h.push(null)})}n("../utils").inherits(l,i),l.prototype._read=function(){this._helper.resume()},r.exports=l},{"../utils":32,"readable-stream":16}],14:[function(n,r,s){r.exports={isNode:typeof Buffer<"u",newBufferFrom:function(i,l){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(i,l);if(typeof i=="number")throw new Error('The "data" argument must not be a number');return new Buffer(i,l)},allocBuffer:function(i){if(Buffer.alloc)return Buffer.alloc(i);var l=new Buffer(i);return l.fill(0),l},isBuffer:function(i){return Buffer.isBuffer(i)},isStream:function(i){return i&&typeof i.on=="function"&&typeof i.pause=="function"&&typeof i.resume=="function"}}},{}],15:[function(n,r,s){function i(A,L,$){var G,R=a.getTypeOf(L),q=a.extend($||{},h);q.date=q.date||new Date,q.compression!==null&&(q.compression=q.compression.toUpperCase()),typeof q.unixPermissions=="string"&&(q.unixPermissions=parseInt(q.unixPermissions,8)),q.unixPermissions&&16384&q.unixPermissions&&(q.dir=!0),q.dosPermissions&&16&q.dosPermissions&&(q.dir=!0),q.dir&&(A=g(A)),q.createFolders&&(G=x(A))&&T.call(this,G,!0);var st=R==="string"&&q.binary===!1&&q.base64===!1;$&&$.binary!==void 0||(q.binary=!st),(L instanceof f&&L.uncompressedSize===0||q.dir||!L||L.length===0)&&(q.base64=!1,q.binary=!0,L="",q.compression="STORE",R="string");var P=null;P=L instanceof f||L instanceof u?L:k.isNode&&k.isStream(L)?new v(A,L):a.prepareContent(A,L,q.binary,q.optimizedBinaryString,q.base64);var W=new y(A,P,q);this.files[A]=W}var l=n("./utf8"),a=n("./utils"),u=n("./stream/GenericWorker"),m=n("./stream/StreamHelper"),h=n("./defaults"),f=n("./compressedObject"),y=n("./zipObject"),c=n("./generate"),k=n("./nodejsUtils"),v=n("./nodejs/NodejsStreamInputAdapter"),x=function(A){A.slice(-1)==="/"&&(A=A.substring(0,A.length-1));var L=A.lastIndexOf("/");return 0<L?A.substring(0,L):""},g=function(A){return A.slice(-1)!=="/"&&(A+="/"),A},T=function(A,L){return L=L!==void 0?L:h.createFolders,A=g(A),this.files[A]||i.call(this,A,null,{dir:!0,createFolders:L}),this.files[A]};function O(A){return Object.prototype.toString.call(A)==="[object RegExp]"}var D={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(A){var L,$,G;for(L in this.files)G=this.files[L],($=L.slice(this.root.length,L.length))&&L.slice(0,this.root.length)===this.root&&A($,G)},filter:function(A){var L=[];return this.forEach(function($,G){A($,G)&&L.push(G)}),L},file:function(A,L,$){if(arguments.length!==1)return A=this.root+A,i.call(this,A,L,$),this;if(O(A)){var G=A;return this.filter(function(q,st){return!st.dir&&G.test(q)})}var R=this.files[this.root+A];return R&&!R.dir?R:null},folder:function(A){if(!A)return this;if(O(A))return this.filter(function(R,q){return q.dir&&A.test(R)});var L=this.root+A,$=T.call(this,L),G=this.clone();return G.root=$.name,G},remove:function(A){A=this.root+A;var L=this.files[A];if(L||(A.slice(-1)!=="/"&&(A+="/"),L=this.files[A]),L&&!L.dir)delete this.files[A];else for(var $=this.filter(function(R,q){return q.name.slice(0,A.length)===A}),G=0;G<$.length;G++)delete this.files[$[G].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(A){var L,$={};try{if(($=a.extend(A||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:l.utf8encode})).type=$.type.toLowerCase(),$.compression=$.compression.toUpperCase(),$.type==="binarystring"&&($.type="string"),!$.type)throw new Error("No output type specified.");a.checkSupport($.type),$.platform!=="darwin"&&$.platform!=="freebsd"&&$.platform!=="linux"&&$.platform!=="sunos"||($.platform="UNIX"),$.platform==="win32"&&($.platform="DOS");var G=$.comment||this.comment||"";L=c.generateWorker(this,$,G)}catch(R){(L=new u("error")).error(R)}return new m(L,$.type||"string",$.mimeType)},generateAsync:function(A,L){return this.generateInternalStream(A).accumulate(L)},generateNodeStream:function(A,L){return(A=A||{}).type||(A.type="nodebuffer"),this.generateInternalStream(A).toNodejsStream(L)}};r.exports=D},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(n,r,s){r.exports=n("stream")},{stream:void 0}],17:[function(n,r,s){var i=n("./DataReader");function l(a){i.call(this,a);for(var u=0;u<this.data.length;u++)a[u]=255&a[u]}n("../utils").inherits(l,i),l.prototype.byteAt=function(a){return this.data[this.zero+a]},l.prototype.lastIndexOfSignature=function(a){for(var u=a.charCodeAt(0),m=a.charCodeAt(1),h=a.charCodeAt(2),f=a.charCodeAt(3),y=this.length-4;0<=y;--y)if(this.data[y]===u&&this.data[y+1]===m&&this.data[y+2]===h&&this.data[y+3]===f)return y-this.zero;return-1},l.prototype.readAndCheckSignature=function(a){var u=a.charCodeAt(0),m=a.charCodeAt(1),h=a.charCodeAt(2),f=a.charCodeAt(3),y=this.readData(4);return u===y[0]&&m===y[1]&&h===y[2]&&f===y[3]},l.prototype.readData=function(a){if(this.checkOffset(a),a===0)return[];var u=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,u},r.exports=l},{"../utils":32,"./DataReader":18}],18:[function(n,r,s){var i=n("../utils");function l(a){this.data=a,this.length=a.length,this.index=0,this.zero=0}l.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<this.zero+a||a<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var u,m=0;for(this.checkOffset(a),u=this.index+a-1;u>=this.index;u--)m=(m<<8)+this.byteAt(u);return this.index+=a,m},readString:function(a){return i.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date(Date.UTC(1980+(a>>25&127),(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1))}},r.exports=l},{"../utils":32}],19:[function(n,r,s){var i=n("./Uint8ArrayReader");function l(a){i.call(this,a)}n("../utils").inherits(l,i),l.prototype.readData=function(a){this.checkOffset(a);var u=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,u},r.exports=l},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(n,r,s){var i=n("./DataReader");function l(a){i.call(this,a)}n("../utils").inherits(l,i),l.prototype.byteAt=function(a){return this.data.charCodeAt(this.zero+a)},l.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)-this.zero},l.prototype.readAndCheckSignature=function(a){return a===this.readData(4)},l.prototype.readData=function(a){this.checkOffset(a);var u=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,u},r.exports=l},{"../utils":32,"./DataReader":18}],21:[function(n,r,s){var i=n("./ArrayReader");function l(a){i.call(this,a)}n("../utils").inherits(l,i),l.prototype.readData=function(a){if(this.checkOffset(a),a===0)return new Uint8Array(0);var u=this.data.subarray(this.zero+this.index,this.zero+this.index+a);return this.index+=a,u},r.exports=l},{"../utils":32,"./ArrayReader":17}],22:[function(n,r,s){var i=n("../utils"),l=n("../support"),a=n("./ArrayReader"),u=n("./StringReader"),m=n("./NodeBufferReader"),h=n("./Uint8ArrayReader");r.exports=function(f){var y=i.getTypeOf(f);return i.checkSupport(y),y!=="string"||l.uint8array?y==="nodebuffer"?new m(f):l.uint8array?new h(i.transformTo("uint8array",f)):new a(i.transformTo("array",f)):new u(f)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(n,r,s){s.LOCAL_FILE_HEADER="PK",s.CENTRAL_FILE_HEADER="PK",s.CENTRAL_DIRECTORY_END="PK",s.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",s.ZIP64_CENTRAL_DIRECTORY_END="PK",s.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(n,r,s){var i=n("./GenericWorker"),l=n("../utils");function a(u){i.call(this,"ConvertWorker to "+u),this.destType=u}l.inherits(a,i),a.prototype.processChunk=function(u){this.push({data:l.transformTo(this.destType,u.data),meta:u.meta})},r.exports=a},{"../utils":32,"./GenericWorker":28}],25:[function(n,r,s){var i=n("./GenericWorker"),l=n("../crc32");function a(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}n("../utils").inherits(a,i),a.prototype.processChunk=function(u){this.streamInfo.crc32=l(u.data,this.streamInfo.crc32||0),this.push(u)},r.exports=a},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(n,r,s){var i=n("../utils"),l=n("./GenericWorker");function a(u){l.call(this,"DataLengthProbe for "+u),this.propName=u,this.withStreamInfo(u,0)}i.inherits(a,l),a.prototype.processChunk=function(u){if(u){var m=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=m+u.data.length}l.prototype.processChunk.call(this,u)},r.exports=a},{"../utils":32,"./GenericWorker":28}],27:[function(n,r,s){var i=n("../utils"),l=n("./GenericWorker");function a(u){l.call(this,"DataWorker");var m=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,u.then(function(h){m.dataIsReady=!0,m.data=h,m.max=h&&h.length||0,m.type=i.getTypeOf(h),m.isPaused||m._tickAndRepeat()},function(h){m.error(h)})}i.inherits(a,l),a.prototype.cleanUp=function(){l.prototype.cleanUp.call(this),this.data=null},a.prototype.resume=function(){return!!l.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},a.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},a.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var u=null,m=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":u=this.data.substring(this.index,m);break;case"uint8array":u=this.data.subarray(this.index,m);break;case"array":case"nodebuffer":u=this.data.slice(this.index,m)}return this.index=m,this.push({data:u,meta:{percent:this.max?this.index/this.max*100:0}})},r.exports=a},{"../utils":32,"./GenericWorker":28}],28:[function(n,r,s){function i(l){this.name=l||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(l){this.emit("data",l)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(l){this.emit("error",l)}return!0},error:function(l){return!this.isFinished&&(this.isPaused?this.generatedError=l:(this.isFinished=!0,this.emit("error",l),this.previous&&this.previous.error(l),this.cleanUp()),!0)},on:function(l,a){return this._listeners[l].push(a),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(l,a){if(this._listeners[l])for(var u=0;u<this._listeners[l].length;u++)this._listeners[l][u].call(this,a)},pipe:function(l){return l.registerPrevious(this)},registerPrevious:function(l){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=l.streamInfo,this.mergeStreamInfo(),this.previous=l;var a=this;return l.on("data",function(u){a.processChunk(u)}),l.on("end",function(){a.end()}),l.on("error",function(u){a.error(u)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var l=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),l=!0),this.previous&&this.previous.resume(),!l},flush:function(){},processChunk:function(l){this.push(l)},withStreamInfo:function(l,a){return this.extraStreamInfo[l]=a,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var l in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,l)&&(this.streamInfo[l]=this.extraStreamInfo[l])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var l="Worker "+this.name;return this.previous?this.previous+" -> "+l:l}},r.exports=i},{}],29:[function(n,r,s){var i=n("../utils"),l=n("./ConvertWorker"),a=n("./GenericWorker"),u=n("../base64"),m=n("../support"),h=n("../external"),f=null;if(m.nodestream)try{f=n("../nodejs/NodejsStreamOutputAdapter")}catch{}function y(k,v){return new h.Promise(function(x,g){var T=[],O=k._internalType,D=k._outputType,A=k._mimeType;k.on("data",function(L,$){T.push(L),v&&v($)}).on("error",function(L){T=[],g(L)}).on("end",function(){try{var L=function($,G,R){switch($){case"blob":return i.newBlob(i.transformTo("arraybuffer",G),R);case"base64":return u.encode(G);default:return i.transformTo($,G)}}(D,function($,G){var R,q=0,st=null,P=0;for(R=0;R<G.length;R++)P+=G[R].length;switch($){case"string":return G.join("");case"array":return Array.prototype.concat.apply([],G);case"uint8array":for(st=new Uint8Array(P),R=0;R<G.length;R++)st.set(G[R],q),q+=G[R].length;return st;case"nodebuffer":return Buffer.concat(G);default:throw new Error("concat : unsupported type '"+$+"'")}}(O,T),A);x(L)}catch($){g($)}T=[]}).resume()})}function c(k,v,x){var g=v;switch(v){case"blob":case"arraybuffer":g="uint8array";break;case"base64":g="string"}try{this._internalType=g,this._outputType=v,this._mimeType=x,i.checkSupport(g),this._worker=k.pipe(new l(g)),k.lock()}catch(T){this._worker=new a("error"),this._worker.error(T)}}c.prototype={accumulate:function(k){return y(this,k)},on:function(k,v){var x=this;return k==="data"?this._worker.on(k,function(g){v.call(x,g.data,g.meta)}):this._worker.on(k,function(){i.delay(v,arguments,x)}),this},resume:function(){return i.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(k){if(i.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new f(this,{objectMode:this._outputType!=="nodebuffer"},k)}},r.exports=c},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(n,r,s){if(s.base64=!0,s.array=!0,s.string=!0,s.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",s.nodebuffer=typeof Buffer<"u",s.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")s.blob=!1;else{var i=new ArrayBuffer(0);try{s.blob=new Blob([i],{type:"application/zip"}).size===0}catch{try{var l=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);l.append(i),s.blob=l.getBlob("application/zip").size===0}catch{s.blob=!1}}}try{s.nodestream=!!n("readable-stream").Readable}catch{s.nodestream=!1}},{"readable-stream":16}],31:[function(n,r,s){for(var i=n("./utils"),l=n("./support"),a=n("./nodejsUtils"),u=n("./stream/GenericWorker"),m=new Array(256),h=0;h<256;h++)m[h]=252<=h?6:248<=h?5:240<=h?4:224<=h?3:192<=h?2:1;m[254]=m[254]=1;function f(){u.call(this,"utf-8 decode"),this.leftOver=null}function y(){u.call(this,"utf-8 encode")}s.utf8encode=function(c){return l.nodebuffer?a.newBufferFrom(c,"utf-8"):function(k){var v,x,g,T,O,D=k.length,A=0;for(T=0;T<D;T++)(64512&(x=k.charCodeAt(T)))==55296&&T+1<D&&(64512&(g=k.charCodeAt(T+1)))==56320&&(x=65536+(x-55296<<10)+(g-56320),T++),A+=x<128?1:x<2048?2:x<65536?3:4;for(v=l.uint8array?new Uint8Array(A):new Array(A),T=O=0;O<A;T++)(64512&(x=k.charCodeAt(T)))==55296&&T+1<D&&(64512&(g=k.charCodeAt(T+1)))==56320&&(x=65536+(x-55296<<10)+(g-56320),T++),x<128?v[O++]=x:(x<2048?v[O++]=192|x>>>6:(x<65536?v[O++]=224|x>>>12:(v[O++]=240|x>>>18,v[O++]=128|x>>>12&63),v[O++]=128|x>>>6&63),v[O++]=128|63&x);return v}(c)},s.utf8decode=function(c){return l.nodebuffer?i.transformTo("nodebuffer",c).toString("utf-8"):function(k){var v,x,g,T,O=k.length,D=new Array(2*O);for(v=x=0;v<O;)if((g=k[v++])<128)D[x++]=g;else if(4<(T=m[g]))D[x++]=65533,v+=T-1;else{for(g&=T===2?31:T===3?15:7;1<T&&v<O;)g=g<<6|63&k[v++],T--;1<T?D[x++]=65533:g<65536?D[x++]=g:(g-=65536,D[x++]=55296|g>>10&1023,D[x++]=56320|1023&g)}return D.length!==x&&(D.subarray?D=D.subarray(0,x):D.length=x),i.applyFromCharCode(D)}(c=i.transformTo(l.uint8array?"uint8array":"array",c))},i.inherits(f,u),f.prototype.processChunk=function(c){var k=i.transformTo(l.uint8array?"uint8array":"array",c.data);if(this.leftOver&&this.leftOver.length){if(l.uint8array){var v=k;(k=new Uint8Array(v.length+this.leftOver.length)).set(this.leftOver,0),k.set(v,this.leftOver.length)}else k=this.leftOver.concat(k);this.leftOver=null}var x=function(T,O){var D;for((O=O||T.length)>T.length&&(O=T.length),D=O-1;0<=D&&(192&T[D])==128;)D--;return D<0||D===0?O:D+m[T[D]]>O?D:O}(k),g=k;x!==k.length&&(l.uint8array?(g=k.subarray(0,x),this.leftOver=k.subarray(x,k.length)):(g=k.slice(0,x),this.leftOver=k.slice(x,k.length))),this.push({data:s.utf8decode(g),meta:c.meta})},f.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=f,i.inherits(y,u),y.prototype.processChunk=function(c){this.push({data:s.utf8encode(c.data),meta:c.meta})},s.Utf8EncodeWorker=y},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(n,r,s){var i=n("./support"),l=n("./base64"),a=n("./nodejsUtils"),u=n("./external");function m(v){return v}function h(v,x){for(var g=0;g<v.length;++g)x[g]=255&v.charCodeAt(g);return x}n("setimmediate"),s.newBlob=function(v,x){s.checkSupport("blob");try{return new Blob([v],{type:x})}catch{try{var g=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return g.append(v),g.getBlob(x)}catch{throw new Error("Bug : can't construct the Blob.")}}};var f={stringifyByChunk:function(v,x,g){var T=[],O=0,D=v.length;if(D<=g)return String.fromCharCode.apply(null,v);for(;O<D;)x==="array"||x==="nodebuffer"?T.push(String.fromCharCode.apply(null,v.slice(O,Math.min(O+g,D)))):T.push(String.fromCharCode.apply(null,v.subarray(O,Math.min(O+g,D)))),O+=g;return T.join("")},stringifyByChar:function(v){for(var x="",g=0;g<v.length;g++)x+=String.fromCharCode(v[g]);return x},applyCanBeUsed:{uint8array:function(){try{return i.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}}(),nodebuffer:function(){try{return i.nodebuffer&&String.fromCharCode.apply(null,a.allocBuffer(1)).length===1}catch{return!1}}()}};function y(v){var x=65536,g=s.getTypeOf(v),T=!0;if(g==="uint8array"?T=f.applyCanBeUsed.uint8array:g==="nodebuffer"&&(T=f.applyCanBeUsed.nodebuffer),T)for(;1<x;)try{return f.stringifyByChunk(v,g,x)}catch{x=Math.floor(x/2)}return f.stringifyByChar(v)}function c(v,x){for(var g=0;g<v.length;g++)x[g]=v[g];return x}s.applyFromCharCode=y;var k={};k.string={string:m,array:function(v){return h(v,new Array(v.length))},arraybuffer:function(v){return k.string.uint8array(v).buffer},uint8array:function(v){return h(v,new Uint8Array(v.length))},nodebuffer:function(v){return h(v,a.allocBuffer(v.length))}},k.array={string:y,array:m,arraybuffer:function(v){return new Uint8Array(v).buffer},uint8array:function(v){return new Uint8Array(v)},nodebuffer:function(v){return a.newBufferFrom(v)}},k.arraybuffer={string:function(v){return y(new Uint8Array(v))},array:function(v){return c(new Uint8Array(v),new Array(v.byteLength))},arraybuffer:m,uint8array:function(v){return new Uint8Array(v)},nodebuffer:function(v){return a.newBufferFrom(new Uint8Array(v))}},k.uint8array={string:y,array:function(v){return c(v,new Array(v.length))},arraybuffer:function(v){return v.buffer},uint8array:m,nodebuffer:function(v){return a.newBufferFrom(v)}},k.nodebuffer={string:y,array:function(v){return c(v,new Array(v.length))},arraybuffer:function(v){return k.nodebuffer.uint8array(v).buffer},uint8array:function(v){return c(v,new Uint8Array(v.length))},nodebuffer:m},s.transformTo=function(v,x){if(x=x||"",!v)return x;s.checkSupport(v);var g=s.getTypeOf(x);return k[g][v](x)},s.resolve=function(v){for(var x=v.split("/"),g=[],T=0;T<x.length;T++){var O=x[T];O==="."||O===""&&T!==0&&T!==x.length-1||(O===".."?g.pop():g.push(O))}return g.join("/")},s.getTypeOf=function(v){return typeof v=="string"?"string":Object.prototype.toString.call(v)==="[object Array]"?"array":i.nodebuffer&&a.isBuffer(v)?"nodebuffer":i.uint8array&&v instanceof Uint8Array?"uint8array":i.arraybuffer&&v instanceof ArrayBuffer?"arraybuffer":void 0},s.checkSupport=function(v){if(!i[v.toLowerCase()])throw new Error(v+" is not supported by this platform")},s.MAX_VALUE_16BITS=65535,s.MAX_VALUE_32BITS=-1,s.pretty=function(v){var x,g,T="";for(g=0;g<(v||"").length;g++)T+="\\x"+((x=v.charCodeAt(g))<16?"0":"")+x.toString(16).toUpperCase();return T},s.delay=function(v,x,g){setImmediate(function(){v.apply(g||null,x||[])})},s.inherits=function(v,x){function g(){}g.prototype=x.prototype,v.prototype=new g},s.extend=function(){var v,x,g={};for(v=0;v<arguments.length;v++)for(x in arguments[v])Object.prototype.hasOwnProperty.call(arguments[v],x)&&g[x]===void 0&&(g[x]=arguments[v][x]);return g},s.prepareContent=function(v,x,g,T,O){return u.Promise.resolve(x).then(function(D){return i.blob&&(D instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(D))!==-1)&&typeof FileReader<"u"?new u.Promise(function(A,L){var $=new FileReader;$.onload=function(G){A(G.target.result)},$.onerror=function(G){L(G.target.error)},$.readAsArrayBuffer(D)}):D}).then(function(D){var A=s.getTypeOf(D);return A?(A==="arraybuffer"?D=s.transformTo("uint8array",D):A==="string"&&(O?D=l.decode(D):g&&T!==!0&&(D=function(L){return h(L,i.uint8array?new Uint8Array(L.length):new Array(L.length))}(D))),D):u.Promise.reject(new Error("Can't read the data of '"+v+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(n,r,s){var i=n("./reader/readerFor"),l=n("./utils"),a=n("./signature"),u=n("./zipEntry"),m=n("./support");function h(f){this.files=[],this.loadOptions=f}h.prototype={checkSignature:function(f){if(!this.reader.readAndCheckSignature(f)){this.reader.index-=4;var y=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+l.pretty(y)+", expected "+l.pretty(f)+")")}},isSignature:function(f,y){var c=this.reader.index;this.reader.setIndex(f);var k=this.reader.readString(4)===y;return this.reader.setIndex(c),k},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var f=this.reader.readData(this.zipCommentLength),y=m.uint8array?"uint8array":"array",c=l.transformTo(y,f);this.zipComment=this.loadOptions.decodeFileName(c)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var f,y,c,k=this.zip64EndOfCentralSize-44;0<k;)f=this.reader.readInt(2),y=this.reader.readInt(4),c=this.reader.readData(y),this.zip64ExtensibleData[f]={id:f,length:y,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var f,y;for(f=0;f<this.files.length;f++)y=this.files[f],this.reader.setIndex(y.localHeaderOffset),this.checkSignature(a.LOCAL_FILE_HEADER),y.readLocalPart(this.reader),y.handleUTF8(),y.processAttributes()},readCentralDir:function(){var f;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(a.CENTRAL_FILE_HEADER);)(f=new u({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(f);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var f=this.reader.lastIndexOfSignature(a.CENTRAL_DIRECTORY_END);if(f<0)throw this.isSignature(0,a.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(f);var y=f;if(this.checkSignature(a.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===l.MAX_VALUE_16BITS||this.diskWithCentralDirStart===l.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===l.MAX_VALUE_16BITS||this.centralDirRecords===l.MAX_VALUE_16BITS||this.centralDirSize===l.MAX_VALUE_32BITS||this.centralDirOffset===l.MAX_VALUE_32BITS){if(this.zip64=!0,(f=this.reader.lastIndexOfSignature(a.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(f),this.checkSignature(a.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,a.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(a.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(a.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var c=this.centralDirOffset+this.centralDirSize;this.zip64&&(c+=20,c+=12+this.zip64EndOfCentralSize);var k=y-c;if(0<k)this.isSignature(y,a.CENTRAL_FILE_HEADER)||(this.reader.zero=k);else if(k<0)throw new Error("Corrupted zip: missing "+Math.abs(k)+" bytes.")},prepareReader:function(f){this.reader=i(f)},load:function(f){this.prepareReader(f),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},r.exports=h},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(n,r,s){var i=n("./reader/readerFor"),l=n("./utils"),a=n("./compressedObject"),u=n("./crc32"),m=n("./utf8"),h=n("./compressions"),f=n("./support");function y(c,k){this.options=c,this.loadOptions=k}y.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(c){var k,v;if(c.skip(22),this.fileNameLength=c.readInt(2),v=c.readInt(2),this.fileName=c.readData(this.fileNameLength),c.skip(v),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((k=function(x){for(var g in h)if(Object.prototype.hasOwnProperty.call(h,g)&&h[g].magic===x)return h[g];return null}(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+l.pretty(this.compressionMethod)+" unknown (inner file : "+l.transformTo("string",this.fileName)+")");this.decompressed=new a(this.compressedSize,this.uncompressedSize,this.crc32,k,c.readData(this.compressedSize))},readCentralPart:function(c){this.versionMadeBy=c.readInt(2),c.skip(2),this.bitFlag=c.readInt(2),this.compressionMethod=c.readString(2),this.date=c.readDate(),this.crc32=c.readInt(4),this.compressedSize=c.readInt(4),this.uncompressedSize=c.readInt(4);var k=c.readInt(2);if(this.extraFieldsLength=c.readInt(2),this.fileCommentLength=c.readInt(2),this.diskNumberStart=c.readInt(2),this.internalFileAttributes=c.readInt(2),this.externalFileAttributes=c.readInt(4),this.localHeaderOffset=c.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");c.skip(k),this.readExtraFields(c),this.parseZIP64ExtraField(c),this.fileComment=c.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var c=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),c==0&&(this.dosPermissions=63&this.externalFileAttributes),c==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var c=i(this.extraFields[1].value);this.uncompressedSize===l.MAX_VALUE_32BITS&&(this.uncompressedSize=c.readInt(8)),this.compressedSize===l.MAX_VALUE_32BITS&&(this.compressedSize=c.readInt(8)),this.localHeaderOffset===l.MAX_VALUE_32BITS&&(this.localHeaderOffset=c.readInt(8)),this.diskNumberStart===l.MAX_VALUE_32BITS&&(this.diskNumberStart=c.readInt(4))}},readExtraFields:function(c){var k,v,x,g=c.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});c.index+4<g;)k=c.readInt(2),v=c.readInt(2),x=c.readData(v),this.extraFields[k]={id:k,length:v,value:x};c.setIndex(g)},handleUTF8:function(){var c=f.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=m.utf8decode(this.fileName),this.fileCommentStr=m.utf8decode(this.fileComment);else{var k=this.findExtraFieldUnicodePath();if(k!==null)this.fileNameStr=k;else{var v=l.transformTo(c,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(v)}var x=this.findExtraFieldUnicodeComment();if(x!==null)this.fileCommentStr=x;else{var g=l.transformTo(c,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(g)}}},findExtraFieldUnicodePath:function(){var c=this.extraFields[28789];if(c){var k=i(c.value);return k.readInt(1)!==1||u(this.fileName)!==k.readInt(4)?null:m.utf8decode(k.readData(c.length-5))}return null},findExtraFieldUnicodeComment:function(){var c=this.extraFields[25461];if(c){var k=i(c.value);return k.readInt(1)!==1||u(this.fileComment)!==k.readInt(4)?null:m.utf8decode(k.readData(c.length-5))}return null}},r.exports=y},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(n,r,s){function i(k,v,x){this.name=k,this.dir=x.dir,this.date=x.date,this.comment=x.comment,this.unixPermissions=x.unixPermissions,this.dosPermissions=x.dosPermissions,this._data=v,this._dataBinary=x.binary,this.options={compression:x.compression,compressionOptions:x.compressionOptions}}var l=n("./stream/StreamHelper"),a=n("./stream/DataWorker"),u=n("./utf8"),m=n("./compressedObject"),h=n("./stream/GenericWorker");i.prototype={internalStream:function(k){var v=null,x="string";try{if(!k)throw new Error("No output type specified.");var g=(x=k.toLowerCase())==="string"||x==="text";x!=="binarystring"&&x!=="text"||(x="string"),v=this._decompressWorker();var T=!this._dataBinary;T&&!g&&(v=v.pipe(new u.Utf8EncodeWorker)),!T&&g&&(v=v.pipe(new u.Utf8DecodeWorker))}catch(O){(v=new h("error")).error(O)}return new l(v,x,"")},async:function(k,v){return this.internalStream(k).accumulate(v)},nodeStream:function(k,v){return this.internalStream(k||"nodebuffer").toNodejsStream(v)},_compressWorker:function(k,v){if(this._data instanceof m&&this._data.compression.magic===k.magic)return this._data.getCompressedWorker();var x=this._decompressWorker();return this._dataBinary||(x=x.pipe(new u.Utf8EncodeWorker)),m.createWorkerFrom(x,k,v)},_decompressWorker:function(){return this._data instanceof m?this._data.getContentWorker():this._data instanceof h?this._data:new a(this._data)}};for(var f=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],y=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},c=0;c<f.length;c++)i.prototype[f[c]]=y;r.exports=i},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(n,r,s){(function(i){var l,a,u=i.MutationObserver||i.WebKitMutationObserver;if(u){var m=0,h=new u(k),f=i.document.createTextNode("");h.observe(f,{characterData:!0}),l=function(){f.data=m=++m%2}}else if(i.setImmediate||i.MessageChannel===void 0)l="document"in i&&"onreadystatechange"in i.document.createElement("script")?function(){var v=i.document.createElement("script");v.onreadystatechange=function(){k(),v.onreadystatechange=null,v.parentNode.removeChild(v),v=null},i.document.documentElement.appendChild(v)}:function(){setTimeout(k,0)};else{var y=new i.MessageChannel;y.port1.onmessage=k,l=function(){y.port2.postMessage(0)}}var c=[];function k(){var v,x;a=!0;for(var g=c.length;g;){for(x=c,c=[],v=-1;++v<g;)x[v]();g=c.length}a=!1}r.exports=function(v){c.push(v)!==1||a||l()}}).call(this,typeof xn<"u"?xn:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(n,r,s){var i=n("immediate");function l(){}var a={},u=["REJECTED"],m=["FULFILLED"],h=["PENDING"];function f(g){if(typeof g!="function")throw new TypeError("resolver must be a function");this.state=h,this.queue=[],this.outcome=void 0,g!==l&&v(this,g)}function y(g,T,O){this.promise=g,typeof T=="function"&&(this.onFulfilled=T,this.callFulfilled=this.otherCallFulfilled),typeof O=="function"&&(this.onRejected=O,this.callRejected=this.otherCallRejected)}function c(g,T,O){i(function(){var D;try{D=T(O)}catch(A){return a.reject(g,A)}D===g?a.reject(g,new TypeError("Cannot resolve promise with itself")):a.resolve(g,D)})}function k(g){var T=g&&g.then;if(g&&(typeof g=="object"||typeof g=="function")&&typeof T=="function")return function(){T.apply(g,arguments)}}function v(g,T){var O=!1;function D($){O||(O=!0,a.reject(g,$))}function A($){O||(O=!0,a.resolve(g,$))}var L=x(function(){T(A,D)});L.status==="error"&&D(L.value)}function x(g,T){var O={};try{O.value=g(T),O.status="success"}catch(D){O.status="error",O.value=D}return O}(r.exports=f).prototype.finally=function(g){if(typeof g!="function")return this;var T=this.constructor;return this.then(function(O){return T.resolve(g()).then(function(){return O})},function(O){return T.resolve(g()).then(function(){throw O})})},f.prototype.catch=function(g){return this.then(null,g)},f.prototype.then=function(g,T){if(typeof g!="function"&&this.state===m||typeof T!="function"&&this.state===u)return this;var O=new this.constructor(l);return this.state!==h?c(O,this.state===m?g:T,this.outcome):this.queue.push(new y(O,g,T)),O},y.prototype.callFulfilled=function(g){a.resolve(this.promise,g)},y.prototype.otherCallFulfilled=function(g){c(this.promise,this.onFulfilled,g)},y.prototype.callRejected=function(g){a.reject(this.promise,g)},y.prototype.otherCallRejected=function(g){c(this.promise,this.onRejected,g)},a.resolve=function(g,T){var O=x(k,T);if(O.status==="error")return a.reject(g,O.value);var D=O.value;if(D)v(g,D);else{g.state=m,g.outcome=T;for(var A=-1,L=g.queue.length;++A<L;)g.queue[A].callFulfilled(T)}return g},a.reject=function(g,T){g.state=u,g.outcome=T;for(var O=-1,D=g.queue.length;++O<D;)g.queue[O].callRejected(T);return g},f.resolve=function(g){return g instanceof this?g:a.resolve(new this(l),g)},f.reject=function(g){var T=new this(l);return a.reject(T,g)},f.all=function(g){var T=this;if(Object.prototype.toString.call(g)!=="[object Array]")return this.reject(new TypeError("must be an array"));var O=g.length,D=!1;if(!O)return this.resolve([]);for(var A=new Array(O),L=0,$=-1,G=new this(l);++$<O;)R(g[$],$);return G;function R(q,st){T.resolve(q).then(function(P){A[st]=P,++L!==O||D||(D=!0,a.resolve(G,A))},function(P){D||(D=!0,a.reject(G,P))})}},f.race=function(g){var T=this;if(Object.prototype.toString.call(g)!=="[object Array]")return this.reject(new TypeError("must be an array"));var O=g.length,D=!1;if(!O)return this.resolve([]);for(var A=-1,L=new this(l);++A<O;)$=g[A],T.resolve($).then(function(G){D||(D=!0,a.resolve(L,G))},function(G){D||(D=!0,a.reject(L,G))});var $;return L}},{immediate:36}],38:[function(n,r,s){var i={};(0,n("./lib/utils/common").assign)(i,n("./lib/deflate"),n("./lib/inflate"),n("./lib/zlib/constants")),r.exports=i},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(n,r,s){var i=n("./zlib/deflate"),l=n("./utils/common"),a=n("./utils/strings"),u=n("./zlib/messages"),m=n("./zlib/zstream"),h=Object.prototype.toString,f=0,y=-1,c=0,k=8;function v(g){if(!(this instanceof v))return new v(g);this.options=l.assign({level:y,method:k,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:""},g||{});var T=this.options;T.raw&&0<T.windowBits?T.windowBits=-T.windowBits:T.gzip&&0<T.windowBits&&T.windowBits<16&&(T.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new m,this.strm.avail_out=0;var O=i.deflateInit2(this.strm,T.level,T.method,T.windowBits,T.memLevel,T.strategy);if(O!==f)throw new Error(u[O]);if(T.header&&i.deflateSetHeader(this.strm,T.header),T.dictionary){var D;if(D=typeof T.dictionary=="string"?a.string2buf(T.dictionary):h.call(T.dictionary)==="[object ArrayBuffer]"?new Uint8Array(T.dictionary):T.dictionary,(O=i.deflateSetDictionary(this.strm,D))!==f)throw new Error(u[O]);this._dict_set=!0}}function x(g,T){var O=new v(T);if(O.push(g,!0),O.err)throw O.msg||u[O.err];return O.result}v.prototype.push=function(g,T){var O,D,A=this.strm,L=this.options.chunkSize;if(this.ended)return!1;D=T===~~T?T:T===!0?4:0,typeof g=="string"?A.input=a.string2buf(g):h.call(g)==="[object ArrayBuffer]"?A.input=new Uint8Array(g):A.input=g,A.next_in=0,A.avail_in=A.input.length;do{if(A.avail_out===0&&(A.output=new l.Buf8(L),A.next_out=0,A.avail_out=L),(O=i.deflate(A,D))!==1&&O!==f)return this.onEnd(O),!(this.ended=!0);A.avail_out!==0&&(A.avail_in!==0||D!==4&&D!==2)||(this.options.to==="string"?this.onData(a.buf2binstring(l.shrinkBuf(A.output,A.next_out))):this.onData(l.shrinkBuf(A.output,A.next_out)))}while((0<A.avail_in||A.avail_out===0)&&O!==1);return D===4?(O=i.deflateEnd(this.strm),this.onEnd(O),this.ended=!0,O===f):D!==2||(this.onEnd(f),!(A.avail_out=0))},v.prototype.onData=function(g){this.chunks.push(g)},v.prototype.onEnd=function(g){g===f&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=g,this.msg=this.strm.msg},s.Deflate=v,s.deflate=x,s.deflateRaw=function(g,T){return(T=T||{}).raw=!0,x(g,T)},s.gzip=function(g,T){return(T=T||{}).gzip=!0,x(g,T)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(n,r,s){var i=n("./zlib/inflate"),l=n("./utils/common"),a=n("./utils/strings"),u=n("./zlib/constants"),m=n("./zlib/messages"),h=n("./zlib/zstream"),f=n("./zlib/gzheader"),y=Object.prototype.toString;function c(v){if(!(this instanceof c))return new c(v);this.options=l.assign({chunkSize:16384,windowBits:0,to:""},v||{});var x=this.options;x.raw&&0<=x.windowBits&&x.windowBits<16&&(x.windowBits=-x.windowBits,x.windowBits===0&&(x.windowBits=-15)),!(0<=x.windowBits&&x.windowBits<16)||v&&v.windowBits||(x.windowBits+=32),15<x.windowBits&&x.windowBits<48&&!(15&x.windowBits)&&(x.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var g=i.inflateInit2(this.strm,x.windowBits);if(g!==u.Z_OK)throw new Error(m[g]);this.header=new f,i.inflateGetHeader(this.strm,this.header)}function k(v,x){var g=new c(x);if(g.push(v,!0),g.err)throw g.msg||m[g.err];return g.result}c.prototype.push=function(v,x){var g,T,O,D,A,L,$=this.strm,G=this.options.chunkSize,R=this.options.dictionary,q=!1;if(this.ended)return!1;T=x===~~x?x:x===!0?u.Z_FINISH:u.Z_NO_FLUSH,typeof v=="string"?$.input=a.binstring2buf(v):y.call(v)==="[object ArrayBuffer]"?$.input=new Uint8Array(v):$.input=v,$.next_in=0,$.avail_in=$.input.length;do{if($.avail_out===0&&($.output=new l.Buf8(G),$.next_out=0,$.avail_out=G),(g=i.inflate($,u.Z_NO_FLUSH))===u.Z_NEED_DICT&&R&&(L=typeof R=="string"?a.string2buf(R):y.call(R)==="[object ArrayBuffer]"?new Uint8Array(R):R,g=i.inflateSetDictionary(this.strm,L)),g===u.Z_BUF_ERROR&&q===!0&&(g=u.Z_OK,q=!1),g!==u.Z_STREAM_END&&g!==u.Z_OK)return this.onEnd(g),!(this.ended=!0);$.next_out&&($.avail_out!==0&&g!==u.Z_STREAM_END&&($.avail_in!==0||T!==u.Z_FINISH&&T!==u.Z_SYNC_FLUSH)||(this.options.to==="string"?(O=a.utf8border($.output,$.next_out),D=$.next_out-O,A=a.buf2string($.output,O),$.next_out=D,$.avail_out=G-D,D&&l.arraySet($.output,$.output,O,D,0),this.onData(A)):this.onData(l.shrinkBuf($.output,$.next_out)))),$.avail_in===0&&$.avail_out===0&&(q=!0)}while((0<$.avail_in||$.avail_out===0)&&g!==u.Z_STREAM_END);return g===u.Z_STREAM_END&&(T=u.Z_FINISH),T===u.Z_FINISH?(g=i.inflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===u.Z_OK):T!==u.Z_SYNC_FLUSH||(this.onEnd(u.Z_OK),!($.avail_out=0))},c.prototype.onData=function(v){this.chunks.push(v)},c.prototype.onEnd=function(v){v===u.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=v,this.msg=this.strm.msg},s.Inflate=c,s.inflate=k,s.inflateRaw=function(v,x){return(x=x||{}).raw=!0,k(v,x)},s.ungzip=k},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(n,r,s){var i=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";s.assign=function(u){for(var m=Array.prototype.slice.call(arguments,1);m.length;){var h=m.shift();if(h){if(typeof h!="object")throw new TypeError(h+"must be non-object");for(var f in h)h.hasOwnProperty(f)&&(u[f]=h[f])}}return u},s.shrinkBuf=function(u,m){return u.length===m?u:u.subarray?u.subarray(0,m):(u.length=m,u)};var l={arraySet:function(u,m,h,f,y){if(m.subarray&&u.subarray)u.set(m.subarray(h,h+f),y);else for(var c=0;c<f;c++)u[y+c]=m[h+c]},flattenChunks:function(u){var m,h,f,y,c,k;for(m=f=0,h=u.length;m<h;m++)f+=u[m].length;for(k=new Uint8Array(f),m=y=0,h=u.length;m<h;m++)c=u[m],k.set(c,y),y+=c.length;return k}},a={arraySet:function(u,m,h,f,y){for(var c=0;c<f;c++)u[y+c]=m[h+c]},flattenChunks:function(u){return[].concat.apply([],u)}};s.setTyped=function(u){u?(s.Buf8=Uint8Array,s.Buf16=Uint16Array,s.Buf32=Int32Array,s.assign(s,l)):(s.Buf8=Array,s.Buf16=Array,s.Buf32=Array,s.assign(s,a))},s.setTyped(i)},{}],42:[function(n,r,s){var i=n("./common"),l=!0,a=!0;try{String.fromCharCode.apply(null,[0])}catch{l=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{a=!1}for(var u=new i.Buf8(256),m=0;m<256;m++)u[m]=252<=m?6:248<=m?5:240<=m?4:224<=m?3:192<=m?2:1;function h(f,y){if(y<65537&&(f.subarray&&a||!f.subarray&&l))return String.fromCharCode.apply(null,i.shrinkBuf(f,y));for(var c="",k=0;k<y;k++)c+=String.fromCharCode(f[k]);return c}u[254]=u[254]=1,s.string2buf=function(f){var y,c,k,v,x,g=f.length,T=0;for(v=0;v<g;v++)(64512&(c=f.charCodeAt(v)))==55296&&v+1<g&&(64512&(k=f.charCodeAt(v+1)))==56320&&(c=65536+(c-55296<<10)+(k-56320),v++),T+=c<128?1:c<2048?2:c<65536?3:4;for(y=new i.Buf8(T),v=x=0;x<T;v++)(64512&(c=f.charCodeAt(v)))==55296&&v+1<g&&(64512&(k=f.charCodeAt(v+1)))==56320&&(c=65536+(c-55296<<10)+(k-56320),v++),c<128?y[x++]=c:(c<2048?y[x++]=192|c>>>6:(c<65536?y[x++]=224|c>>>12:(y[x++]=240|c>>>18,y[x++]=128|c>>>12&63),y[x++]=128|c>>>6&63),y[x++]=128|63&c);return y},s.buf2binstring=function(f){return h(f,f.length)},s.binstring2buf=function(f){for(var y=new i.Buf8(f.length),c=0,k=y.length;c<k;c++)y[c]=f.charCodeAt(c);return y},s.buf2string=function(f,y){var c,k,v,x,g=y||f.length,T=new Array(2*g);for(c=k=0;c<g;)if((v=f[c++])<128)T[k++]=v;else if(4<(x=u[v]))T[k++]=65533,c+=x-1;else{for(v&=x===2?31:x===3?15:7;1<x&&c<g;)v=v<<6|63&f[c++],x--;1<x?T[k++]=65533:v<65536?T[k++]=v:(v-=65536,T[k++]=55296|v>>10&1023,T[k++]=56320|1023&v)}return h(T,k)},s.utf8border=function(f,y){var c;for((y=y||f.length)>f.length&&(y=f.length),c=y-1;0<=c&&(192&f[c])==128;)c--;return c<0||c===0?y:c+u[f[c]]>y?c:y}},{"./common":41}],43:[function(n,r,s){r.exports=function(i,l,a,u){for(var m=65535&i|0,h=i>>>16&65535|0,f=0;a!==0;){for(a-=f=2e3<a?2e3:a;h=h+(m=m+l[u++]|0)|0,--f;);m%=65521,h%=65521}return m|h<<16|0}},{}],44:[function(n,r,s){r.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(n,r,s){var i=function(){for(var l,a=[],u=0;u<256;u++){l=u;for(var m=0;m<8;m++)l=1&l?3988292384^l>>>1:l>>>1;a[u]=l}return a}();r.exports=function(l,a,u,m){var h=i,f=m+u;l^=-1;for(var y=m;y<f;y++)l=l>>>8^h[255&(l^a[y])];return-1^l}},{}],46:[function(n,r,s){var i,l=n("../utils/common"),a=n("./trees"),u=n("./adler32"),m=n("./crc32"),h=n("./messages"),f=0,y=4,c=0,k=-2,v=-1,x=4,g=2,T=8,O=9,D=286,A=30,L=19,$=2*D+1,G=15,R=3,q=258,st=q+R+1,P=42,W=113,d=1,K=2,tt=3,V=4;function Q(o,C){return o.msg=h[C],C}function J(o){return(o<<1)-(4<o?9:0)}function rt(o){for(var C=o.length;0<=--C;)o[C]=0}function U(o){var C=o.state,I=C.pending;I>o.avail_out&&(I=o.avail_out),I!==0&&(l.arraySet(o.output,C.pending_buf,C.pending_out,I,o.next_out),o.next_out+=I,C.pending_out+=I,o.total_out+=I,o.avail_out-=I,C.pending-=I,C.pending===0&&(C.pending_out=0))}function M(o,C){a._tr_flush_block(o,0<=o.block_start?o.block_start:-1,o.strstart-o.block_start,C),o.block_start=o.strstart,U(o.strm)}function et(o,C){o.pending_buf[o.pending++]=C}function nt(o,C){o.pending_buf[o.pending++]=C>>>8&255,o.pending_buf[o.pending++]=255&C}function X(o,C){var I,w,p=o.max_chain_length,S=o.strstart,z=o.prev_length,B=o.nice_match,E=o.strstart>o.w_size-st?o.strstart-(o.w_size-st):0,N=o.window,j=o.w_mask,H=o.prev,Y=o.strstart+q,at=N[S+z-1],it=N[S+z];o.prev_length>=o.good_match&&(p>>=2),B>o.lookahead&&(B=o.lookahead);do if(N[(I=C)+z]===it&&N[I+z-1]===at&&N[I]===N[S]&&N[++I]===N[S+1]){S+=2,I++;do;while(N[++S]===N[++I]&&N[++S]===N[++I]&&N[++S]===N[++I]&&N[++S]===N[++I]&&N[++S]===N[++I]&&N[++S]===N[++I]&&N[++S]===N[++I]&&N[++S]===N[++I]&&S<Y);if(w=q-(Y-S),S=Y-q,z<w){if(o.match_start=C,B<=(z=w))break;at=N[S+z-1],it=N[S+z]}}while((C=H[C&j])>E&&--p!=0);return z<=o.lookahead?z:o.lookahead}function _t(o){var C,I,w,p,S,z,B,E,N,j,H=o.w_size;do{if(p=o.window_size-o.lookahead-o.strstart,o.strstart>=H+(H-st)){for(l.arraySet(o.window,o.window,H,H,0),o.match_start-=H,o.strstart-=H,o.block_start-=H,C=I=o.hash_size;w=o.head[--C],o.head[C]=H<=w?w-H:0,--I;);for(C=I=H;w=o.prev[--C],o.prev[C]=H<=w?w-H:0,--I;);p+=H}if(o.strm.avail_in===0)break;if(z=o.strm,B=o.window,E=o.strstart+o.lookahead,N=p,j=void 0,j=z.avail_in,N<j&&(j=N),I=j===0?0:(z.avail_in-=j,l.arraySet(B,z.input,z.next_in,j,E),z.state.wrap===1?z.adler=u(z.adler,B,j,E):z.state.wrap===2&&(z.adler=m(z.adler,B,j,E)),z.next_in+=j,z.total_in+=j,j),o.lookahead+=I,o.lookahead+o.insert>=R)for(S=o.strstart-o.insert,o.ins_h=o.window[S],o.ins_h=(o.ins_h<<o.hash_shift^o.window[S+1])&o.hash_mask;o.insert&&(o.ins_h=(o.ins_h<<o.hash_shift^o.window[S+R-1])&o.hash_mask,o.prev[S&o.w_mask]=o.head[o.ins_h],o.head[o.ins_h]=S,S++,o.insert--,!(o.lookahead+o.insert<R)););}while(o.lookahead<st&&o.strm.avail_in!==0)}function xt(o,C){for(var I,w;;){if(o.lookahead<st){if(_t(o),o.lookahead<st&&C===f)return d;if(o.lookahead===0)break}if(I=0,o.lookahead>=R&&(o.ins_h=(o.ins_h<<o.hash_shift^o.window[o.strstart+R-1])&o.hash_mask,I=o.prev[o.strstart&o.w_mask]=o.head[o.ins_h],o.head[o.ins_h]=o.strstart),I!==0&&o.strstart-I<=o.w_size-st&&(o.match_length=X(o,I)),o.match_length>=R)if(w=a._tr_tally(o,o.strstart-o.match_start,o.match_length-R),o.lookahead-=o.match_length,o.match_length<=o.max_lazy_match&&o.lookahead>=R){for(o.match_length--;o.strstart++,o.ins_h=(o.ins_h<<o.hash_shift^o.window[o.strstart+R-1])&o.hash_mask,I=o.prev[o.strstart&o.w_mask]=o.head[o.ins_h],o.head[o.ins_h]=o.strstart,--o.match_length!=0;);o.strstart++}else o.strstart+=o.match_length,o.match_length=0,o.ins_h=o.window[o.strstart],o.ins_h=(o.ins_h<<o.hash_shift^o.window[o.strstart+1])&o.hash_mask;else w=a._tr_tally(o,0,o.window[o.strstart]),o.lookahead--,o.strstart++;if(w&&(M(o,!1),o.strm.avail_out===0))return d}return o.insert=o.strstart<R-1?o.strstart:R-1,C===y?(M(o,!0),o.strm.avail_out===0?tt:V):o.last_lit&&(M(o,!1),o.strm.avail_out===0)?d:K}function vt(o,C){for(var I,w,p;;){if(o.lookahead<st){if(_t(o),o.lookahead<st&&C===f)return d;if(o.lookahead===0)break}if(I=0,o.lookahead>=R&&(o.ins_h=(o.ins_h<<o.hash_shift^o.window[o.strstart+R-1])&o.hash_mask,I=o.prev[o.strstart&o.w_mask]=o.head[o.ins_h],o.head[o.ins_h]=o.strstart),o.prev_length=o.match_length,o.prev_match=o.match_start,o.match_length=R-1,I!==0&&o.prev_length<o.max_lazy_match&&o.strstart-I<=o.w_size-st&&(o.match_length=X(o,I),o.match_length<=5&&(o.strategy===1||o.match_length===R&&4096<o.strstart-o.match_start)&&(o.match_length=R-1)),o.prev_length>=R&&o.match_length<=o.prev_length){for(p=o.strstart+o.lookahead-R,w=a._tr_tally(o,o.strstart-1-o.prev_match,o.prev_length-R),o.lookahead-=o.prev_length-1,o.prev_length-=2;++o.strstart<=p&&(o.ins_h=(o.ins_h<<o.hash_shift^o.window[o.strstart+R-1])&o.hash_mask,I=o.prev[o.strstart&o.w_mask]=o.head[o.ins_h],o.head[o.ins_h]=o.strstart),--o.prev_length!=0;);if(o.match_available=0,o.match_length=R-1,o.strstart++,w&&(M(o,!1),o.strm.avail_out===0))return d}else if(o.match_available){if((w=a._tr_tally(o,0,o.window[o.strstart-1]))&&M(o,!1),o.strstart++,o.lookahead--,o.strm.avail_out===0)return d}else o.match_available=1,o.strstart++,o.lookahead--}return o.match_available&&(w=a._tr_tally(o,0,o.window[o.strstart-1]),o.match_available=0),o.insert=o.strstart<R-1?o.strstart:R-1,C===y?(M(o,!0),o.strm.avail_out===0?tt:V):o.last_lit&&(M(o,!1),o.strm.avail_out===0)?d:K}function wt(o,C,I,w,p){this.good_length=o,this.max_lazy=C,this.nice_length=I,this.max_chain=w,this.func=p}function yt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=T,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new l.Buf16(2*$),this.dyn_dtree=new l.Buf16(2*(2*A+1)),this.bl_tree=new l.Buf16(2*(2*L+1)),rt(this.dyn_ltree),rt(this.dyn_dtree),rt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new l.Buf16(G+1),this.heap=new l.Buf16(2*D+1),rt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new l.Buf16(2*D+1),rt(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function kt(o){var C;return o&&o.state?(o.total_in=o.total_out=0,o.data_type=g,(C=o.state).pending=0,C.pending_out=0,C.wrap<0&&(C.wrap=-C.wrap),C.status=C.wrap?P:W,o.adler=C.wrap===2?0:1,C.last_flush=f,a._tr_init(C),c):Q(o,k)}function Ut(o){var C=kt(o);return C===c&&function(I){I.window_size=2*I.w_size,rt(I.head),I.max_lazy_match=i[I.level].max_lazy,I.good_match=i[I.level].good_length,I.nice_match=i[I.level].nice_length,I.max_chain_length=i[I.level].max_chain,I.strstart=0,I.block_start=0,I.lookahead=0,I.insert=0,I.match_length=I.prev_length=R-1,I.match_available=0,I.ins_h=0}(o.state),C}function _(o,C,I,w,p,S){if(!o)return k;var z=1;if(C===v&&(C=6),w<0?(z=0,w=-w):15<w&&(z=2,w-=16),p<1||O<p||I!==T||w<8||15<w||C<0||9<C||S<0||x<S)return Q(o,k);w===8&&(w=9);var B=new yt;return(o.state=B).strm=o,B.wrap=z,B.gzhead=null,B.w_bits=w,B.w_size=1<<B.w_bits,B.w_mask=B.w_size-1,B.hash_bits=p+7,B.hash_size=1<<B.hash_bits,B.hash_mask=B.hash_size-1,B.hash_shift=~~((B.hash_bits+R-1)/R),B.window=new l.Buf8(2*B.w_size),B.head=new l.Buf16(B.hash_size),B.prev=new l.Buf16(B.w_size),B.lit_bufsize=1<<p+6,B.pending_buf_size=4*B.lit_bufsize,B.pending_buf=new l.Buf8(B.pending_buf_size),B.d_buf=1*B.lit_bufsize,B.l_buf=3*B.lit_bufsize,B.level=C,B.strategy=S,B.method=I,Ut(o)}i=[new wt(0,0,0,0,function(o,C){var I=65535;for(I>o.pending_buf_size-5&&(I=o.pending_buf_size-5);;){if(o.lookahead<=1){if(_t(o),o.lookahead===0&&C===f)return d;if(o.lookahead===0)break}o.strstart+=o.lookahead,o.lookahead=0;var w=o.block_start+I;if((o.strstart===0||o.strstart>=w)&&(o.lookahead=o.strstart-w,o.strstart=w,M(o,!1),o.strm.avail_out===0)||o.strstart-o.block_start>=o.w_size-st&&(M(o,!1),o.strm.avail_out===0))return d}return o.insert=0,C===y?(M(o,!0),o.strm.avail_out===0?tt:V):(o.strstart>o.block_start&&(M(o,!1),o.strm.avail_out),d)}),new wt(4,4,8,4,xt),new wt(4,5,16,8,xt),new wt(4,6,32,32,xt),new wt(4,4,16,16,vt),new wt(8,16,32,32,vt),new wt(8,16,128,128,vt),new wt(8,32,128,256,vt),new wt(32,128,258,1024,vt),new wt(32,258,258,4096,vt)],s.deflateInit=function(o,C){return _(o,C,T,15,8,0)},s.deflateInit2=_,s.deflateReset=Ut,s.deflateResetKeep=kt,s.deflateSetHeader=function(o,C){return o&&o.state?o.state.wrap!==2?k:(o.state.gzhead=C,c):k},s.deflate=function(o,C){var I,w,p,S;if(!o||!o.state||5<C||C<0)return o?Q(o,k):k;if(w=o.state,!o.output||!o.input&&o.avail_in!==0||w.status===666&&C!==y)return Q(o,o.avail_out===0?-5:k);if(w.strm=o,I=w.last_flush,w.last_flush=C,w.status===P)if(w.wrap===2)o.adler=0,et(w,31),et(w,139),et(w,8),w.gzhead?(et(w,(w.gzhead.text?1:0)+(w.gzhead.hcrc?2:0)+(w.gzhead.extra?4:0)+(w.gzhead.name?8:0)+(w.gzhead.comment?16:0)),et(w,255&w.gzhead.time),et(w,w.gzhead.time>>8&255),et(w,w.gzhead.time>>16&255),et(w,w.gzhead.time>>24&255),et(w,w.level===9?2:2<=w.strategy||w.level<2?4:0),et(w,255&w.gzhead.os),w.gzhead.extra&&w.gzhead.extra.length&&(et(w,255&w.gzhead.extra.length),et(w,w.gzhead.extra.length>>8&255)),w.gzhead.hcrc&&(o.adler=m(o.adler,w.pending_buf,w.pending,0)),w.gzindex=0,w.status=69):(et(w,0),et(w,0),et(w,0),et(w,0),et(w,0),et(w,w.level===9?2:2<=w.strategy||w.level<2?4:0),et(w,3),w.status=W);else{var z=T+(w.w_bits-8<<4)<<8;z|=(2<=w.strategy||w.level<2?0:w.level<6?1:w.level===6?2:3)<<6,w.strstart!==0&&(z|=32),z+=31-z%31,w.status=W,nt(w,z),w.strstart!==0&&(nt(w,o.adler>>>16),nt(w,65535&o.adler)),o.adler=1}if(w.status===69)if(w.gzhead.extra){for(p=w.pending;w.gzindex<(65535&w.gzhead.extra.length)&&(w.pending!==w.pending_buf_size||(w.gzhead.hcrc&&w.pending>p&&(o.adler=m(o.adler,w.pending_buf,w.pending-p,p)),U(o),p=w.pending,w.pending!==w.pending_buf_size));)et(w,255&w.gzhead.extra[w.gzindex]),w.gzindex++;w.gzhead.hcrc&&w.pending>p&&(o.adler=m(o.adler,w.pending_buf,w.pending-p,p)),w.gzindex===w.gzhead.extra.length&&(w.gzindex=0,w.status=73)}else w.status=73;if(w.status===73)if(w.gzhead.name){p=w.pending;do{if(w.pending===w.pending_buf_size&&(w.gzhead.hcrc&&w.pending>p&&(o.adler=m(o.adler,w.pending_buf,w.pending-p,p)),U(o),p=w.pending,w.pending===w.pending_buf_size)){S=1;break}S=w.gzindex<w.gzhead.name.length?255&w.gzhead.name.charCodeAt(w.gzindex++):0,et(w,S)}while(S!==0);w.gzhead.hcrc&&w.pending>p&&(o.adler=m(o.adler,w.pending_buf,w.pending-p,p)),S===0&&(w.gzindex=0,w.status=91)}else w.status=91;if(w.status===91)if(w.gzhead.comment){p=w.pending;do{if(w.pending===w.pending_buf_size&&(w.gzhead.hcrc&&w.pending>p&&(o.adler=m(o.adler,w.pending_buf,w.pending-p,p)),U(o),p=w.pending,w.pending===w.pending_buf_size)){S=1;break}S=w.gzindex<w.gzhead.comment.length?255&w.gzhead.comment.charCodeAt(w.gzindex++):0,et(w,S)}while(S!==0);w.gzhead.hcrc&&w.pending>p&&(o.adler=m(o.adler,w.pending_buf,w.pending-p,p)),S===0&&(w.status=103)}else w.status=103;if(w.status===103&&(w.gzhead.hcrc?(w.pending+2>w.pending_buf_size&&U(o),w.pending+2<=w.pending_buf_size&&(et(w,255&o.adler),et(w,o.adler>>8&255),o.adler=0,w.status=W)):w.status=W),w.pending!==0){if(U(o),o.avail_out===0)return w.last_flush=-1,c}else if(o.avail_in===0&&J(C)<=J(I)&&C!==y)return Q(o,-5);if(w.status===666&&o.avail_in!==0)return Q(o,-5);if(o.avail_in!==0||w.lookahead!==0||C!==f&&w.status!==666){var B=w.strategy===2?function(E,N){for(var j;;){if(E.lookahead===0&&(_t(E),E.lookahead===0)){if(N===f)return d;break}if(E.match_length=0,j=a._tr_tally(E,0,E.window[E.strstart]),E.lookahead--,E.strstart++,j&&(M(E,!1),E.strm.avail_out===0))return d}return E.insert=0,N===y?(M(E,!0),E.strm.avail_out===0?tt:V):E.last_lit&&(M(E,!1),E.strm.avail_out===0)?d:K}(w,C):w.strategy===3?function(E,N){for(var j,H,Y,at,it=E.window;;){if(E.lookahead<=q){if(_t(E),E.lookahead<=q&&N===f)return d;if(E.lookahead===0)break}if(E.match_length=0,E.lookahead>=R&&0<E.strstart&&(H=it[Y=E.strstart-1])===it[++Y]&&H===it[++Y]&&H===it[++Y]){at=E.strstart+q;do;while(H===it[++Y]&&H===it[++Y]&&H===it[++Y]&&H===it[++Y]&&H===it[++Y]&&H===it[++Y]&&H===it[++Y]&&H===it[++Y]&&Y<at);E.match_length=q-(at-Y),E.match_length>E.lookahead&&(E.match_length=E.lookahead)}if(E.match_length>=R?(j=a._tr_tally(E,1,E.match_length-R),E.lookahead-=E.match_length,E.strstart+=E.match_length,E.match_length=0):(j=a._tr_tally(E,0,E.window[E.strstart]),E.lookahead--,E.strstart++),j&&(M(E,!1),E.strm.avail_out===0))return d}return E.insert=0,N===y?(M(E,!0),E.strm.avail_out===0?tt:V):E.last_lit&&(M(E,!1),E.strm.avail_out===0)?d:K}(w,C):i[w.level].func(w,C);if(B!==tt&&B!==V||(w.status=666),B===d||B===tt)return o.avail_out===0&&(w.last_flush=-1),c;if(B===K&&(C===1?a._tr_align(w):C!==5&&(a._tr_stored_block(w,0,0,!1),C===3&&(rt(w.head),w.lookahead===0&&(w.strstart=0,w.block_start=0,w.insert=0))),U(o),o.avail_out===0))return w.last_flush=-1,c}return C!==y?c:w.wrap<=0?1:(w.wrap===2?(et(w,255&o.adler),et(w,o.adler>>8&255),et(w,o.adler>>16&255),et(w,o.adler>>24&255),et(w,255&o.total_in),et(w,o.total_in>>8&255),et(w,o.total_in>>16&255),et(w,o.total_in>>24&255)):(nt(w,o.adler>>>16),nt(w,65535&o.adler)),U(o),0<w.wrap&&(w.wrap=-w.wrap),w.pending!==0?c:1)},s.deflateEnd=function(o){var C;return o&&o.state?(C=o.state.status)!==P&&C!==69&&C!==73&&C!==91&&C!==103&&C!==W&&C!==666?Q(o,k):(o.state=null,C===W?Q(o,-3):c):k},s.deflateSetDictionary=function(o,C){var I,w,p,S,z,B,E,N,j=C.length;if(!o||!o.state||(S=(I=o.state).wrap)===2||S===1&&I.status!==P||I.lookahead)return k;for(S===1&&(o.adler=u(o.adler,C,j,0)),I.wrap=0,j>=I.w_size&&(S===0&&(rt(I.head),I.strstart=0,I.block_start=0,I.insert=0),N=new l.Buf8(I.w_size),l.arraySet(N,C,j-I.w_size,I.w_size,0),C=N,j=I.w_size),z=o.avail_in,B=o.next_in,E=o.input,o.avail_in=j,o.next_in=0,o.input=C,_t(I);I.lookahead>=R;){for(w=I.strstart,p=I.lookahead-(R-1);I.ins_h=(I.ins_h<<I.hash_shift^I.window[w+R-1])&I.hash_mask,I.prev[w&I.w_mask]=I.head[I.ins_h],I.head[I.ins_h]=w,w++,--p;);I.strstart=w,I.lookahead=R-1,_t(I)}return I.strstart+=I.lookahead,I.block_start=I.strstart,I.insert=I.lookahead,I.lookahead=0,I.match_length=I.prev_length=R-1,I.match_available=0,o.next_in=B,o.input=E,o.avail_in=z,I.wrap=S,c},s.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(n,r,s){r.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(n,r,s){r.exports=function(i,l){var a,u,m,h,f,y,c,k,v,x,g,T,O,D,A,L,$,G,R,q,st,P,W,d,K;a=i.state,u=i.next_in,d=i.input,m=u+(i.avail_in-5),h=i.next_out,K=i.output,f=h-(l-i.avail_out),y=h+(i.avail_out-257),c=a.dmax,k=a.wsize,v=a.whave,x=a.wnext,g=a.window,T=a.hold,O=a.bits,D=a.lencode,A=a.distcode,L=(1<<a.lenbits)-1,$=(1<<a.distbits)-1;t:do{O<15&&(T+=d[u++]<<O,O+=8,T+=d[u++]<<O,O+=8),G=D[T&L];e:for(;;){if(T>>>=R=G>>>24,O-=R,(R=G>>>16&255)===0)K[h++]=65535&G;else{if(!(16&R)){if(!(64&R)){G=D[(65535&G)+(T&(1<<R)-1)];continue e}if(32&R){a.mode=12;break t}i.msg="invalid literal/length code",a.mode=30;break t}q=65535&G,(R&=15)&&(O<R&&(T+=d[u++]<<O,O+=8),q+=T&(1<<R)-1,T>>>=R,O-=R),O<15&&(T+=d[u++]<<O,O+=8,T+=d[u++]<<O,O+=8),G=A[T&$];n:for(;;){if(T>>>=R=G>>>24,O-=R,!(16&(R=G>>>16&255))){if(!(64&R)){G=A[(65535&G)+(T&(1<<R)-1)];continue n}i.msg="invalid distance code",a.mode=30;break t}if(st=65535&G,O<(R&=15)&&(T+=d[u++]<<O,(O+=8)<R&&(T+=d[u++]<<O,O+=8)),c<(st+=T&(1<<R)-1)){i.msg="invalid distance too far back",a.mode=30;break t}if(T>>>=R,O-=R,(R=h-f)<st){if(v<(R=st-R)&&a.sane){i.msg="invalid distance too far back",a.mode=30;break t}if(W=g,(P=0)===x){if(P+=k-R,R<q){for(q-=R;K[h++]=g[P++],--R;);P=h-st,W=K}}else if(x<R){if(P+=k+x-R,(R-=x)<q){for(q-=R;K[h++]=g[P++],--R;);if(P=0,x<q){for(q-=R=x;K[h++]=g[P++],--R;);P=h-st,W=K}}}else if(P+=x-R,R<q){for(q-=R;K[h++]=g[P++],--R;);P=h-st,W=K}for(;2<q;)K[h++]=W[P++],K[h++]=W[P++],K[h++]=W[P++],q-=3;q&&(K[h++]=W[P++],1<q&&(K[h++]=W[P++]))}else{for(P=h-st;K[h++]=K[P++],K[h++]=K[P++],K[h++]=K[P++],2<(q-=3););q&&(K[h++]=K[P++],1<q&&(K[h++]=K[P++]))}break}}break}}while(u<m&&h<y);u-=q=O>>3,T&=(1<<(O-=q<<3))-1,i.next_in=u,i.next_out=h,i.avail_in=u<m?m-u+5:5-(u-m),i.avail_out=h<y?y-h+257:257-(h-y),a.hold=T,a.bits=O}},{}],49:[function(n,r,s){var i=n("../utils/common"),l=n("./adler32"),a=n("./crc32"),u=n("./inffast"),m=n("./inftrees"),h=1,f=2,y=0,c=-2,k=1,v=852,x=592;function g(P){return(P>>>24&255)+(P>>>8&65280)+((65280&P)<<8)+((255&P)<<24)}function T(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function O(P){var W;return P&&P.state?(W=P.state,P.total_in=P.total_out=W.total=0,P.msg="",W.wrap&&(P.adler=1&W.wrap),W.mode=k,W.last=0,W.havedict=0,W.dmax=32768,W.head=null,W.hold=0,W.bits=0,W.lencode=W.lendyn=new i.Buf32(v),W.distcode=W.distdyn=new i.Buf32(x),W.sane=1,W.back=-1,y):c}function D(P){var W;return P&&P.state?((W=P.state).wsize=0,W.whave=0,W.wnext=0,O(P)):c}function A(P,W){var d,K;return P&&P.state?(K=P.state,W<0?(d=0,W=-W):(d=1+(W>>4),W<48&&(W&=15)),W&&(W<8||15<W)?c:(K.window!==null&&K.wbits!==W&&(K.window=null),K.wrap=d,K.wbits=W,D(P))):c}function L(P,W){var d,K;return P?(K=new T,(P.state=K).window=null,(d=A(P,W))!==y&&(P.state=null),d):c}var $,G,R=!0;function q(P){if(R){var W;for($=new i.Buf32(512),G=new i.Buf32(32),W=0;W<144;)P.lens[W++]=8;for(;W<256;)P.lens[W++]=9;for(;W<280;)P.lens[W++]=7;for(;W<288;)P.lens[W++]=8;for(m(h,P.lens,0,288,$,0,P.work,{bits:9}),W=0;W<32;)P.lens[W++]=5;m(f,P.lens,0,32,G,0,P.work,{bits:5}),R=!1}P.lencode=$,P.lenbits=9,P.distcode=G,P.distbits=5}function st(P,W,d,K){var tt,V=P.state;return V.window===null&&(V.wsize=1<<V.wbits,V.wnext=0,V.whave=0,V.window=new i.Buf8(V.wsize)),K>=V.wsize?(i.arraySet(V.window,W,d-V.wsize,V.wsize,0),V.wnext=0,V.whave=V.wsize):(K<(tt=V.wsize-V.wnext)&&(tt=K),i.arraySet(V.window,W,d-K,tt,V.wnext),(K-=tt)?(i.arraySet(V.window,W,d-K,K,0),V.wnext=K,V.whave=V.wsize):(V.wnext+=tt,V.wnext===V.wsize&&(V.wnext=0),V.whave<V.wsize&&(V.whave+=tt))),0}s.inflateReset=D,s.inflateReset2=A,s.inflateResetKeep=O,s.inflateInit=function(P){return L(P,15)},s.inflateInit2=L,s.inflate=function(P,W){var d,K,tt,V,Q,J,rt,U,M,et,nt,X,_t,xt,vt,wt,yt,kt,Ut,_,o,C,I,w,p=0,S=new i.Buf8(4),z=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!P||!P.state||!P.output||!P.input&&P.avail_in!==0)return c;(d=P.state).mode===12&&(d.mode=13),Q=P.next_out,tt=P.output,rt=P.avail_out,V=P.next_in,K=P.input,J=P.avail_in,U=d.hold,M=d.bits,et=J,nt=rt,C=y;t:for(;;)switch(d.mode){case k:if(d.wrap===0){d.mode=13;break}for(;M<16;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(2&d.wrap&&U===35615){S[d.check=0]=255&U,S[1]=U>>>8&255,d.check=a(d.check,S,2,0),M=U=0,d.mode=2;break}if(d.flags=0,d.head&&(d.head.done=!1),!(1&d.wrap)||(((255&U)<<8)+(U>>8))%31){P.msg="incorrect header check",d.mode=30;break}if((15&U)!=8){P.msg="unknown compression method",d.mode=30;break}if(M-=4,o=8+(15&(U>>>=4)),d.wbits===0)d.wbits=o;else if(o>d.wbits){P.msg="invalid window size",d.mode=30;break}d.dmax=1<<o,P.adler=d.check=1,d.mode=512&U?10:12,M=U=0;break;case 2:for(;M<16;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(d.flags=U,(255&d.flags)!=8){P.msg="unknown compression method",d.mode=30;break}if(57344&d.flags){P.msg="unknown header flags set",d.mode=30;break}d.head&&(d.head.text=U>>8&1),512&d.flags&&(S[0]=255&U,S[1]=U>>>8&255,d.check=a(d.check,S,2,0)),M=U=0,d.mode=3;case 3:for(;M<32;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}d.head&&(d.head.time=U),512&d.flags&&(S[0]=255&U,S[1]=U>>>8&255,S[2]=U>>>16&255,S[3]=U>>>24&255,d.check=a(d.check,S,4,0)),M=U=0,d.mode=4;case 4:for(;M<16;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}d.head&&(d.head.xflags=255&U,d.head.os=U>>8),512&d.flags&&(S[0]=255&U,S[1]=U>>>8&255,d.check=a(d.check,S,2,0)),M=U=0,d.mode=5;case 5:if(1024&d.flags){for(;M<16;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}d.length=U,d.head&&(d.head.extra_len=U),512&d.flags&&(S[0]=255&U,S[1]=U>>>8&255,d.check=a(d.check,S,2,0)),M=U=0}else d.head&&(d.head.extra=null);d.mode=6;case 6:if(1024&d.flags&&(J<(X=d.length)&&(X=J),X&&(d.head&&(o=d.head.extra_len-d.length,d.head.extra||(d.head.extra=new Array(d.head.extra_len)),i.arraySet(d.head.extra,K,V,X,o)),512&d.flags&&(d.check=a(d.check,K,X,V)),J-=X,V+=X,d.length-=X),d.length))break t;d.length=0,d.mode=7;case 7:if(2048&d.flags){if(J===0)break t;for(X=0;o=K[V+X++],d.head&&o&&d.length<65536&&(d.head.name+=String.fromCharCode(o)),o&&X<J;);if(512&d.flags&&(d.check=a(d.check,K,X,V)),J-=X,V+=X,o)break t}else d.head&&(d.head.name=null);d.length=0,d.mode=8;case 8:if(4096&d.flags){if(J===0)break t;for(X=0;o=K[V+X++],d.head&&o&&d.length<65536&&(d.head.comment+=String.fromCharCode(o)),o&&X<J;);if(512&d.flags&&(d.check=a(d.check,K,X,V)),J-=X,V+=X,o)break t}else d.head&&(d.head.comment=null);d.mode=9;case 9:if(512&d.flags){for(;M<16;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(U!==(65535&d.check)){P.msg="header crc mismatch",d.mode=30;break}M=U=0}d.head&&(d.head.hcrc=d.flags>>9&1,d.head.done=!0),P.adler=d.check=0,d.mode=12;break;case 10:for(;M<32;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}P.adler=d.check=g(U),M=U=0,d.mode=11;case 11:if(d.havedict===0)return P.next_out=Q,P.avail_out=rt,P.next_in=V,P.avail_in=J,d.hold=U,d.bits=M,2;P.adler=d.check=1,d.mode=12;case 12:if(W===5||W===6)break t;case 13:if(d.last){U>>>=7&M,M-=7&M,d.mode=27;break}for(;M<3;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}switch(d.last=1&U,M-=1,3&(U>>>=1)){case 0:d.mode=14;break;case 1:if(q(d),d.mode=20,W!==6)break;U>>>=2,M-=2;break t;case 2:d.mode=17;break;case 3:P.msg="invalid block type",d.mode=30}U>>>=2,M-=2;break;case 14:for(U>>>=7&M,M-=7&M;M<32;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if((65535&U)!=(U>>>16^65535)){P.msg="invalid stored block lengths",d.mode=30;break}if(d.length=65535&U,M=U=0,d.mode=15,W===6)break t;case 15:d.mode=16;case 16:if(X=d.length){if(J<X&&(X=J),rt<X&&(X=rt),X===0)break t;i.arraySet(tt,K,V,X,Q),J-=X,V+=X,rt-=X,Q+=X,d.length-=X;break}d.mode=12;break;case 17:for(;M<14;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(d.nlen=257+(31&U),U>>>=5,M-=5,d.ndist=1+(31&U),U>>>=5,M-=5,d.ncode=4+(15&U),U>>>=4,M-=4,286<d.nlen||30<d.ndist){P.msg="too many length or distance symbols",d.mode=30;break}d.have=0,d.mode=18;case 18:for(;d.have<d.ncode;){for(;M<3;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}d.lens[z[d.have++]]=7&U,U>>>=3,M-=3}for(;d.have<19;)d.lens[z[d.have++]]=0;if(d.lencode=d.lendyn,d.lenbits=7,I={bits:d.lenbits},C=m(0,d.lens,0,19,d.lencode,0,d.work,I),d.lenbits=I.bits,C){P.msg="invalid code lengths set",d.mode=30;break}d.have=0,d.mode=19;case 19:for(;d.have<d.nlen+d.ndist;){for(;wt=(p=d.lencode[U&(1<<d.lenbits)-1])>>>16&255,yt=65535&p,!((vt=p>>>24)<=M);){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(yt<16)U>>>=vt,M-=vt,d.lens[d.have++]=yt;else{if(yt===16){for(w=vt+2;M<w;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(U>>>=vt,M-=vt,d.have===0){P.msg="invalid bit length repeat",d.mode=30;break}o=d.lens[d.have-1],X=3+(3&U),U>>>=2,M-=2}else if(yt===17){for(w=vt+3;M<w;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}M-=vt,o=0,X=3+(7&(U>>>=vt)),U>>>=3,M-=3}else{for(w=vt+7;M<w;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}M-=vt,o=0,X=11+(127&(U>>>=vt)),U>>>=7,M-=7}if(d.have+X>d.nlen+d.ndist){P.msg="invalid bit length repeat",d.mode=30;break}for(;X--;)d.lens[d.have++]=o}}if(d.mode===30)break;if(d.lens[256]===0){P.msg="invalid code -- missing end-of-block",d.mode=30;break}if(d.lenbits=9,I={bits:d.lenbits},C=m(h,d.lens,0,d.nlen,d.lencode,0,d.work,I),d.lenbits=I.bits,C){P.msg="invalid literal/lengths set",d.mode=30;break}if(d.distbits=6,d.distcode=d.distdyn,I={bits:d.distbits},C=m(f,d.lens,d.nlen,d.ndist,d.distcode,0,d.work,I),d.distbits=I.bits,C){P.msg="invalid distances set",d.mode=30;break}if(d.mode=20,W===6)break t;case 20:d.mode=21;case 21:if(6<=J&&258<=rt){P.next_out=Q,P.avail_out=rt,P.next_in=V,P.avail_in=J,d.hold=U,d.bits=M,u(P,nt),Q=P.next_out,tt=P.output,rt=P.avail_out,V=P.next_in,K=P.input,J=P.avail_in,U=d.hold,M=d.bits,d.mode===12&&(d.back=-1);break}for(d.back=0;wt=(p=d.lencode[U&(1<<d.lenbits)-1])>>>16&255,yt=65535&p,!((vt=p>>>24)<=M);){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(wt&&!(240&wt)){for(kt=vt,Ut=wt,_=yt;wt=(p=d.lencode[_+((U&(1<<kt+Ut)-1)>>kt)])>>>16&255,yt=65535&p,!(kt+(vt=p>>>24)<=M);){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}U>>>=kt,M-=kt,d.back+=kt}if(U>>>=vt,M-=vt,d.back+=vt,d.length=yt,wt===0){d.mode=26;break}if(32&wt){d.back=-1,d.mode=12;break}if(64&wt){P.msg="invalid literal/length code",d.mode=30;break}d.extra=15&wt,d.mode=22;case 22:if(d.extra){for(w=d.extra;M<w;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}d.length+=U&(1<<d.extra)-1,U>>>=d.extra,M-=d.extra,d.back+=d.extra}d.was=d.length,d.mode=23;case 23:for(;wt=(p=d.distcode[U&(1<<d.distbits)-1])>>>16&255,yt=65535&p,!((vt=p>>>24)<=M);){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(!(240&wt)){for(kt=vt,Ut=wt,_=yt;wt=(p=d.distcode[_+((U&(1<<kt+Ut)-1)>>kt)])>>>16&255,yt=65535&p,!(kt+(vt=p>>>24)<=M);){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}U>>>=kt,M-=kt,d.back+=kt}if(U>>>=vt,M-=vt,d.back+=vt,64&wt){P.msg="invalid distance code",d.mode=30;break}d.offset=yt,d.extra=15&wt,d.mode=24;case 24:if(d.extra){for(w=d.extra;M<w;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}d.offset+=U&(1<<d.extra)-1,U>>>=d.extra,M-=d.extra,d.back+=d.extra}if(d.offset>d.dmax){P.msg="invalid distance too far back",d.mode=30;break}d.mode=25;case 25:if(rt===0)break t;if(X=nt-rt,d.offset>X){if((X=d.offset-X)>d.whave&&d.sane){P.msg="invalid distance too far back",d.mode=30;break}_t=X>d.wnext?(X-=d.wnext,d.wsize-X):d.wnext-X,X>d.length&&(X=d.length),xt=d.window}else xt=tt,_t=Q-d.offset,X=d.length;for(rt<X&&(X=rt),rt-=X,d.length-=X;tt[Q++]=xt[_t++],--X;);d.length===0&&(d.mode=21);break;case 26:if(rt===0)break t;tt[Q++]=d.length,rt--,d.mode=21;break;case 27:if(d.wrap){for(;M<32;){if(J===0)break t;J--,U|=K[V++]<<M,M+=8}if(nt-=rt,P.total_out+=nt,d.total+=nt,nt&&(P.adler=d.check=d.flags?a(d.check,tt,nt,Q-nt):l(d.check,tt,nt,Q-nt)),nt=rt,(d.flags?U:g(U))!==d.check){P.msg="incorrect data check",d.mode=30;break}M=U=0}d.mode=28;case 28:if(d.wrap&&d.flags){for(;M<32;){if(J===0)break t;J--,U+=K[V++]<<M,M+=8}if(U!==(4294967295&d.total)){P.msg="incorrect length check",d.mode=30;break}M=U=0}d.mode=29;case 29:C=1;break t;case 30:C=-3;break t;case 31:return-4;case 32:default:return c}return P.next_out=Q,P.avail_out=rt,P.next_in=V,P.avail_in=J,d.hold=U,d.bits=M,(d.wsize||nt!==P.avail_out&&d.mode<30&&(d.mode<27||W!==4))&&st(P,P.output,P.next_out,nt-P.avail_out)?(d.mode=31,-4):(et-=P.avail_in,nt-=P.avail_out,P.total_in+=et,P.total_out+=nt,d.total+=nt,d.wrap&&nt&&(P.adler=d.check=d.flags?a(d.check,tt,nt,P.next_out-nt):l(d.check,tt,nt,P.next_out-nt)),P.data_type=d.bits+(d.last?64:0)+(d.mode===12?128:0)+(d.mode===20||d.mode===15?256:0),(et==0&&nt===0||W===4)&&C===y&&(C=-5),C)},s.inflateEnd=function(P){if(!P||!P.state)return c;var W=P.state;return W.window&&(W.window=null),P.state=null,y},s.inflateGetHeader=function(P,W){var d;return P&&P.state&&2&(d=P.state).wrap?((d.head=W).done=!1,y):c},s.inflateSetDictionary=function(P,W){var d,K=W.length;return P&&P.state?(d=P.state).wrap!==0&&d.mode!==11?c:d.mode===11&&l(1,W,K,0)!==d.check?-3:st(P,W,K,K)?(d.mode=31,-4):(d.havedict=1,y):c},s.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(n,r,s){var i=n("../utils/common"),l=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],a=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],u=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],m=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];r.exports=function(h,f,y,c,k,v,x,g){var T,O,D,A,L,$,G,R,q,st=g.bits,P=0,W=0,d=0,K=0,tt=0,V=0,Q=0,J=0,rt=0,U=0,M=null,et=0,nt=new i.Buf16(16),X=new i.Buf16(16),_t=null,xt=0;for(P=0;P<=15;P++)nt[P]=0;for(W=0;W<c;W++)nt[f[y+W]]++;for(tt=st,K=15;1<=K&&nt[K]===0;K--);if(K<tt&&(tt=K),K===0)return k[v++]=20971520,k[v++]=20971520,g.bits=1,0;for(d=1;d<K&&nt[d]===0;d++);for(tt<d&&(tt=d),P=J=1;P<=15;P++)if(J<<=1,(J-=nt[P])<0)return-1;if(0<J&&(h===0||K!==1))return-1;for(X[1]=0,P=1;P<15;P++)X[P+1]=X[P]+nt[P];for(W=0;W<c;W++)f[y+W]!==0&&(x[X[f[y+W]]++]=W);if($=h===0?(M=_t=x,19):h===1?(M=l,et-=257,_t=a,xt-=257,256):(M=u,_t=m,-1),P=d,L=v,Q=W=U=0,D=-1,A=(rt=1<<(V=tt))-1,h===1&&852<rt||h===2&&592<rt)return 1;for(;;){for(G=P-Q,q=x[W]<$?(R=0,x[W]):x[W]>$?(R=_t[xt+x[W]],M[et+x[W]]):(R=96,0),T=1<<P-Q,d=O=1<<V;k[L+(U>>Q)+(O-=T)]=G<<24|R<<16|q|0,O!==0;);for(T=1<<P-1;U&T;)T>>=1;if(T!==0?(U&=T-1,U+=T):U=0,W++,--nt[P]==0){if(P===K)break;P=f[y+x[W]]}if(tt<P&&(U&A)!==D){for(Q===0&&(Q=tt),L+=d,J=1<<(V=P-Q);V+Q<K&&!((J-=nt[V+Q])<=0);)V++,J<<=1;if(rt+=1<<V,h===1&&852<rt||h===2&&592<rt)return 1;k[D=U&A]=tt<<24|V<<16|L-v|0}}return U!==0&&(k[L+U]=P-Q<<24|64<<16|0),g.bits=tt,0}},{"../utils/common":41}],51:[function(n,r,s){r.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(n,r,s){var i=n("../utils/common"),l=0,a=1;function u(p){for(var S=p.length;0<=--S;)p[S]=0}var m=0,h=29,f=256,y=f+1+h,c=30,k=19,v=2*y+1,x=15,g=16,T=7,O=256,D=16,A=17,L=18,$=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],G=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],R=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],q=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],st=new Array(2*(y+2));u(st);var P=new Array(2*c);u(P);var W=new Array(512);u(W);var d=new Array(256);u(d);var K=new Array(h);u(K);var tt,V,Q,J=new Array(c);function rt(p,S,z,B,E){this.static_tree=p,this.extra_bits=S,this.extra_base=z,this.elems=B,this.max_length=E,this.has_stree=p&&p.length}function U(p,S){this.dyn_tree=p,this.max_code=0,this.stat_desc=S}function M(p){return p<256?W[p]:W[256+(p>>>7)]}function et(p,S){p.pending_buf[p.pending++]=255&S,p.pending_buf[p.pending++]=S>>>8&255}function nt(p,S,z){p.bi_valid>g-z?(p.bi_buf|=S<<p.bi_valid&65535,et(p,p.bi_buf),p.bi_buf=S>>g-p.bi_valid,p.bi_valid+=z-g):(p.bi_buf|=S<<p.bi_valid&65535,p.bi_valid+=z)}function X(p,S,z){nt(p,z[2*S],z[2*S+1])}function _t(p,S){for(var z=0;z|=1&p,p>>>=1,z<<=1,0<--S;);return z>>>1}function xt(p,S,z){var B,E,N=new Array(x+1),j=0;for(B=1;B<=x;B++)N[B]=j=j+z[B-1]<<1;for(E=0;E<=S;E++){var H=p[2*E+1];H!==0&&(p[2*E]=_t(N[H]++,H))}}function vt(p){var S;for(S=0;S<y;S++)p.dyn_ltree[2*S]=0;for(S=0;S<c;S++)p.dyn_dtree[2*S]=0;for(S=0;S<k;S++)p.bl_tree[2*S]=0;p.dyn_ltree[2*O]=1,p.opt_len=p.static_len=0,p.last_lit=p.matches=0}function wt(p){8<p.bi_valid?et(p,p.bi_buf):0<p.bi_valid&&(p.pending_buf[p.pending++]=p.bi_buf),p.bi_buf=0,p.bi_valid=0}function yt(p,S,z,B){var E=2*S,N=2*z;return p[E]<p[N]||p[E]===p[N]&&B[S]<=B[z]}function kt(p,S,z){for(var B=p.heap[z],E=z<<1;E<=p.heap_len&&(E<p.heap_len&&yt(S,p.heap[E+1],p.heap[E],p.depth)&&E++,!yt(S,B,p.heap[E],p.depth));)p.heap[z]=p.heap[E],z=E,E<<=1;p.heap[z]=B}function Ut(p,S,z){var B,E,N,j,H=0;if(p.last_lit!==0)for(;B=p.pending_buf[p.d_buf+2*H]<<8|p.pending_buf[p.d_buf+2*H+1],E=p.pending_buf[p.l_buf+H],H++,B===0?X(p,E,S):(X(p,(N=d[E])+f+1,S),(j=$[N])!==0&&nt(p,E-=K[N],j),X(p,N=M(--B),z),(j=G[N])!==0&&nt(p,B-=J[N],j)),H<p.last_lit;);X(p,O,S)}function _(p,S){var z,B,E,N=S.dyn_tree,j=S.stat_desc.static_tree,H=S.stat_desc.has_stree,Y=S.stat_desc.elems,at=-1;for(p.heap_len=0,p.heap_max=v,z=0;z<Y;z++)N[2*z]!==0?(p.heap[++p.heap_len]=at=z,p.depth[z]=0):N[2*z+1]=0;for(;p.heap_len<2;)N[2*(E=p.heap[++p.heap_len]=at<2?++at:0)]=1,p.depth[E]=0,p.opt_len--,H&&(p.static_len-=j[2*E+1]);for(S.max_code=at,z=p.heap_len>>1;1<=z;z--)kt(p,N,z);for(E=Y;z=p.heap[1],p.heap[1]=p.heap[p.heap_len--],kt(p,N,1),B=p.heap[1],p.heap[--p.heap_max]=z,p.heap[--p.heap_max]=B,N[2*E]=N[2*z]+N[2*B],p.depth[E]=(p.depth[z]>=p.depth[B]?p.depth[z]:p.depth[B])+1,N[2*z+1]=N[2*B+1]=E,p.heap[1]=E++,kt(p,N,1),2<=p.heap_len;);p.heap[--p.heap_max]=p.heap[1],function(it,mt){var Bt,St,Rt,Z,F,lt,ct=mt.dyn_tree,ft=mt.max_code,Dt=mt.stat_desc.static_tree,Lt=mt.stat_desc.has_stree,se=mt.stat_desc.extra_bits,Je=mt.stat_desc.extra_base,be=mt.stat_desc.max_length,_e=0;for(Z=0;Z<=x;Z++)it.bl_count[Z]=0;for(ct[2*it.heap[it.heap_max]+1]=0,Bt=it.heap_max+1;Bt<v;Bt++)be<(Z=ct[2*ct[2*(St=it.heap[Bt])+1]+1]+1)&&(Z=be,_e++),ct[2*St+1]=Z,ft<St||(it.bl_count[Z]++,F=0,Je<=St&&(F=se[St-Je]),lt=ct[2*St],it.opt_len+=lt*(Z+F),Lt&&(it.static_len+=lt*(Dt[2*St+1]+F)));if(_e!==0){do{for(Z=be-1;it.bl_count[Z]===0;)Z--;it.bl_count[Z]--,it.bl_count[Z+1]+=2,it.bl_count[be]--,_e-=2}while(0<_e);for(Z=be;Z!==0;Z--)for(St=it.bl_count[Z];St!==0;)ft<(Rt=it.heap[--Bt])||(ct[2*Rt+1]!==Z&&(it.opt_len+=(Z-ct[2*Rt+1])*ct[2*Rt],ct[2*Rt+1]=Z),St--)}}(p,S),xt(N,at,p.bl_count)}function o(p,S,z){var B,E,N=-1,j=S[1],H=0,Y=7,at=4;for(j===0&&(Y=138,at=3),S[2*(z+1)+1]=65535,B=0;B<=z;B++)E=j,j=S[2*(B+1)+1],++H<Y&&E===j||(H<at?p.bl_tree[2*E]+=H:E!==0?(E!==N&&p.bl_tree[2*E]++,p.bl_tree[2*D]++):H<=10?p.bl_tree[2*A]++:p.bl_tree[2*L]++,N=E,at=(H=0)===j?(Y=138,3):E===j?(Y=6,3):(Y=7,4))}function C(p,S,z){var B,E,N=-1,j=S[1],H=0,Y=7,at=4;for(j===0&&(Y=138,at=3),B=0;B<=z;B++)if(E=j,j=S[2*(B+1)+1],!(++H<Y&&E===j)){if(H<at)for(;X(p,E,p.bl_tree),--H!=0;);else E!==0?(E!==N&&(X(p,E,p.bl_tree),H--),X(p,D,p.bl_tree),nt(p,H-3,2)):H<=10?(X(p,A,p.bl_tree),nt(p,H-3,3)):(X(p,L,p.bl_tree),nt(p,H-11,7));N=E,at=(H=0)===j?(Y=138,3):E===j?(Y=6,3):(Y=7,4)}}u(J);var I=!1;function w(p,S,z,B){nt(p,(m<<1)+(B?1:0),3),function(E,N,j,H){wt(E),H&&(et(E,j),et(E,~j)),i.arraySet(E.pending_buf,E.window,N,j,E.pending),E.pending+=j}(p,S,z,!0)}s._tr_init=function(p){I||(function(){var S,z,B,E,N,j=new Array(x+1);for(E=B=0;E<h-1;E++)for(K[E]=B,S=0;S<1<<$[E];S++)d[B++]=E;for(d[B-1]=E,E=N=0;E<16;E++)for(J[E]=N,S=0;S<1<<G[E];S++)W[N++]=E;for(N>>=7;E<c;E++)for(J[E]=N<<7,S=0;S<1<<G[E]-7;S++)W[256+N++]=E;for(z=0;z<=x;z++)j[z]=0;for(S=0;S<=143;)st[2*S+1]=8,S++,j[8]++;for(;S<=255;)st[2*S+1]=9,S++,j[9]++;for(;S<=279;)st[2*S+1]=7,S++,j[7]++;for(;S<=287;)st[2*S+1]=8,S++,j[8]++;for(xt(st,y+1,j),S=0;S<c;S++)P[2*S+1]=5,P[2*S]=_t(S,5);tt=new rt(st,$,f+1,y,x),V=new rt(P,G,0,c,x),Q=new rt(new Array(0),R,0,k,T)}(),I=!0),p.l_desc=new U(p.dyn_ltree,tt),p.d_desc=new U(p.dyn_dtree,V),p.bl_desc=new U(p.bl_tree,Q),p.bi_buf=0,p.bi_valid=0,vt(p)},s._tr_stored_block=w,s._tr_flush_block=function(p,S,z,B){var E,N,j=0;0<p.level?(p.strm.data_type===2&&(p.strm.data_type=function(H){var Y,at=4093624447;for(Y=0;Y<=31;Y++,at>>>=1)if(1&at&&H.dyn_ltree[2*Y]!==0)return l;if(H.dyn_ltree[18]!==0||H.dyn_ltree[20]!==0||H.dyn_ltree[26]!==0)return a;for(Y=32;Y<f;Y++)if(H.dyn_ltree[2*Y]!==0)return a;return l}(p)),_(p,p.l_desc),_(p,p.d_desc),j=function(H){var Y;for(o(H,H.dyn_ltree,H.l_desc.max_code),o(H,H.dyn_dtree,H.d_desc.max_code),_(H,H.bl_desc),Y=k-1;3<=Y&&H.bl_tree[2*q[Y]+1]===0;Y--);return H.opt_len+=3*(Y+1)+5+5+4,Y}(p),E=p.opt_len+3+7>>>3,(N=p.static_len+3+7>>>3)<=E&&(E=N)):E=N=z+5,z+4<=E&&S!==-1?w(p,S,z,B):p.strategy===4||N===E?(nt(p,2+(B?1:0),3),Ut(p,st,P)):(nt(p,4+(B?1:0),3),function(H,Y,at,it){var mt;for(nt(H,Y-257,5),nt(H,at-1,5),nt(H,it-4,4),mt=0;mt<it;mt++)nt(H,H.bl_tree[2*q[mt]+1],3);C(H,H.dyn_ltree,Y-1),C(H,H.dyn_dtree,at-1)}(p,p.l_desc.max_code+1,p.d_desc.max_code+1,j+1),Ut(p,p.dyn_ltree,p.dyn_dtree)),vt(p),B&&wt(p)},s._tr_tally=function(p,S,z){return p.pending_buf[p.d_buf+2*p.last_lit]=S>>>8&255,p.pending_buf[p.d_buf+2*p.last_lit+1]=255&S,p.pending_buf[p.l_buf+p.last_lit]=255&z,p.last_lit++,S===0?p.dyn_ltree[2*z]++:(p.matches++,S--,p.dyn_ltree[2*(d[z]+f+1)]++,p.dyn_dtree[2*M(S)]++),p.last_lit===p.lit_bufsize-1},s._tr_align=function(p){nt(p,2,3),X(p,O,st),function(S){S.bi_valid===16?(et(S,S.bi_buf),S.bi_buf=0,S.bi_valid=0):8<=S.bi_valid&&(S.pending_buf[S.pending++]=255&S.bi_buf,S.bi_buf>>=8,S.bi_valid-=8)}(p)}},{"../utils/common":41}],53:[function(n,r,s){r.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(n,r,s){(function(i){(function(l,a){if(!l.setImmediate){var u,m,h,f,y=1,c={},k=!1,v=l.document,x=Object.getPrototypeOf&&Object.getPrototypeOf(l);x=x&&x.setTimeout?x:l,u={}.toString.call(l.process)==="[object process]"?function(D){process.nextTick(function(){T(D)})}:function(){if(l.postMessage&&!l.importScripts){var D=!0,A=l.onmessage;return l.onmessage=function(){D=!1},l.postMessage("","*"),l.onmessage=A,D}}()?(f="setImmediate$"+Math.random()+"$",l.addEventListener?l.addEventListener("message",O,!1):l.attachEvent("onmessage",O),function(D){l.postMessage(f+D,"*")}):l.MessageChannel?((h=new MessageChannel).port1.onmessage=function(D){T(D.data)},function(D){h.port2.postMessage(D)}):v&&"onreadystatechange"in v.createElement("script")?(m=v.documentElement,function(D){var A=v.createElement("script");A.onreadystatechange=function(){T(D),A.onreadystatechange=null,m.removeChild(A),A=null},m.appendChild(A)}):function(D){setTimeout(T,0,D)},x.setImmediate=function(D){typeof D!="function"&&(D=new Function(""+D));for(var A=new Array(arguments.length-1),L=0;L<A.length;L++)A[L]=arguments[L+1];var $={callback:D,args:A};return c[y]=$,u(y),y++},x.clearImmediate=g}function g(D){delete c[D]}function T(D){if(k)setTimeout(T,0,D);else{var A=c[D];if(A){k=!0;try{(function(L){var $=L.callback,G=L.args;switch(G.length){case 0:$();break;case 1:$(G[0]);break;case 2:$(G[0],G[1]);break;case 3:$(G[0],G[1],G[2]);break;default:$.apply(a,G)}})(A)}finally{g(D),k=!1}}}}function O(D){D.source===l&&typeof D.data=="string"&&D.data.indexOf(f)===0&&T(+D.data.slice(f.length))}})(typeof self>"u"?i===void 0?this:i:self)}).call(this,typeof xn<"u"?xn:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(Di);var Fn=Di.exports;class Ks{settings;app;api;constructor(e,n){this.app=e,this.settings=n,this.api=new Me(n.token)}async getPluginUrl(e,n){const r=Date.now(),s=localStorage.getItem("pluginUrl");if(console.log(s,"cachedPluginUrl"),s){const u=JSON.parse(s);if(u.name===e&&u.version===n&&r<u.expiryTime)return u.url}const i=await this.getPluginDownloadUrl(e,n),l=r+15*60*1e3,a={name:e,version:n,url:i,expiryTime:l};return localStorage.setItem("pluginUrl",JSON.stringify(a)),i}async getPluginDownloadUrl(e,n){const r=await this.api.getDownloadUrlByVersion(e,n);if(r.startsWith("http"))return r;throw new ot.Notice(`${JSON.parse(r).message}`),new Error(`${JSON.parse(r).message}`)}async downloadPluginToPluginFolder(e,n){const r=await this.getPluginUrl(e,n);if(!r)return new ot.Notice(`获取${e}插件下载地址失败!`),!1;if(app.plugins.manifests[e])return new ot.Notice(`插件${e}已经安装,无需重复安装!`),!1;try{const s=await ot.requestUrl({url:r,method:"GET"}),i=ot.normalizePath(this.app.vault.configDir+"/plugins/"+e)+"/",l=this.app.vault.adapter,a=await Fn.loadAsync(s.arrayBuffer);(await l.exists(i)===!1||!await l.exists(i+"manifest.json"))&&await l.mkdir(i);try{for(const[u,m]of Object.entries(a.files)){const h=i+u,f=h.substring(0,h.lastIndexOf("/"));if(await l.mkdir(f),!m.dir){const y=await m.async("string");await l.write(h,y)}}}catch{throw new ot.Notice(`插件${e}解压失败!请联系开发者处理!`,5e3),l.rmdir(i,!0),Error(`插件${e}解压失败!`)}return new ot.Notice(`插件${e}(${n})安装成功!
请在插件列表中启用`,5e3),await app.plugins.loadManifests(),setTimeout(()=>{dispatchEvent(new Event("reload-statusbar"))},100),!0}catch(s){return console.log(r,s),new ot.Notice(`插件${e}安装失败!${s}`,5e3),!1}}async updatePluginToExistPluginFolder(e,n){const r=await this.getPluginDownloadUrl(e,n);if(!r)throw new ot.Notice(`获取${e}插件下载地址失败!`),new Error(`获取${e}插件下载地址失败!`);if(e!="obsidian-pkmer"&&!app.plugins.manifests[e])return new ot.Notice(`插件${e}未安装!`),!1;try{let s=ot.normalizePath(this.app.vault.configDir+"/plugins/"+e)+"/";e=="obsidian-pkmer"&&(s=ot.normalizePath(this.app.vault.configDir+"/plugins/")+"/");const i=this.app.vault.adapter;if(await i.exists(s)===!1&&!await i.exists(s+"manifest.json"))throw new Error(`插件${e}未安装!`);const l=await ot.requestUrl({url:r,method:"GET"}),a=await Fn.loadAsync(l.arrayBuffer);try{for(const[u,m]of Object.entries(a.files)){const h=s+u,f=h.substring(0,h.lastIndexOf("/"));if(await i.mkdir(f),!m.dir){const y=await m.async("string");await i.write(h,y)}}}catch{throw new ot.Notice(`插件${e}解压失败!得手动清除残留文件!`),Error(`插件${e}解压失败!`)}return new ot.Notice(`插件${e}(${n})更新成功!
请在插件列表中重新启用`),await app.plugins.loadManifests(),setTimeout(()=>{dispatchEvent(new Event("reload-statusbar"))},100),!0}catch(s){return new ot.Notice(`插件${e}更新失败!${s}`),!1}}}const vu={class:"text-right pkmer-toolbar"},wu=["tooltip"],yu={class:"z-10 flex w-3/4 p-4 m-auto my-4 top-20 bg-yellow-200/50"},zi=Ie({__name:"Head",props:{isLogin:{type:Boolean},settings:{},app:{}},setup(t){const e=t,n=ut(0),r=ut(""),s=ut(),i=new Me(e.settings.token),l=new Ks(e.app,e.settings);We(()=>e.isLogin,async f=>{if(f)try{n.value=await i.getDownloadCount()}catch{n.value=0}else n.value=0},{immediate:!0}),(async()=>{try{s.value=await i.getPkmerVersion()}catch(f){console.error("Head.vue: Error fetching PKMer version:",f)}})(),r.value=e.app.plugins.manifests.pkmer.version;const a=Nt(()=>s.value&&r.value&&s.value!==r.value?"发现新版本:"+s.value+"(点我更新)":s.value&&r.value&&s.value===r.value?"Ver:"+r.value:"版本检查中..."),u=async()=>{!s.value||s.value===r.value||(new ot.Notice("正在更新插件,请稍后...",3e3),!await l.updatePluginToExistPluginFolder("obsidian-pkmer",s.value))||e.app.workspace.activeLeaf.rebuildView()},m=async()=>{e.isLogin&&(localStorage.removeItem("pluginList"),localStorage.removeItem("pluginListExpiry"),localStorage.removeItem("themeList"),localStorage.removeItem("themeListExpiry")),e.app.workspace.activeLeaf.rebuildView()},h=()=>{e.app.setting.open(),e.app.setting.openTabById("pkmer")};return(f,y)=>(dt(),pt(Mt,null,[b("div",vu,[b("span",{onClick:u,class:"inline-block font-sans text-xs py-1.5 px-3 m-1 rounded-lg bg-yellow-600 text-white shadow-xl shadow-primary-500/20"},bt(a.value),1),Et(b("span",{tooltip:n.value<=5?"请在Pkmer个人中心绑定微信后可获取更多次数":null,class:"inline-block font-sans text-xs py-1.5 px-3 m-1 rounded-lg bg-yellow-600 text-white shadow-xl shadow-primary-500/20"}," 剩余次数 "+bt(n.value),9,wu),[[Ot,e.isLogin]]),b("span",{onClick:m,class:"inline-block font-sans text-xs py-1.5 px-3 m-1 rounded-lg bg-green-500 text-white shadow-xl shadow-primary-500/20"}," 刷新 "),b("span",{class:"inline-block font-sans text-xs py-1.5 px-3 m-1 rounded-lg bg-primary-500 text-white shadow-xl shadow-primary-500/20",onClick:h}," 设置 ")]),Et(b("div",yu,[b("div",{class:"flex items-center"},[y[3]||(y[3]=b("div",{class:"mr-2"},"⚠️",-1)),b("div",null,[y[2]||(y[2]=b("span",{class:"font-bold"},"提示:",-1)),b("span",null,[y[0]||(y[0]=Wt("当前是未登录状态,仅展示下载前20的热门内容,请",-1)),b("button",{class:"bg-yellow-600 w-20 h-6 inline-block px-1 py-1 m-1 font-sans text-xs rounded-lg",onClick:h}," 点此登录"),y[1]||(y[1]=Wt("后获取全部内容。",-1))])])])],512),[[Ot,!e.isLogin]])],64))}});class Gs{settings;app;api;constructor(e,n){this.app=e,this.settings=n,this.api=new Me(n.token)}async getThemeUrl(e,n){const r=Date.now(),s=localStorage.getItem("themeUrl");if(s){const u=JSON.parse(s);if(u.name===e&&u.version===n&&r<u.expiryTime)return u.url}const i=await this.getThemeDownloadUrl(e,n),l=r+15*60*1e3,a={name:e,version:n,url:i,expiryTime:l};return localStorage.setItem("themeUrl",JSON.stringify(a)),i}async getThemeDownloadUrl(e,n){const r=await this.api.getThemeDownloadUrlByVersion(e,n);if(r.startsWith("http"))return r;throw new ot.Notice(`${JSON.parse(r).message}`),new Error(`${JSON.parse(r).message}`)}async downloadThemeToThemeFolder(e,n){const r=await this.getThemeUrl(e,n);if(!r)return new ot.Notice(`获取${e}主题下载地址失败!`),!1;if(app.customCss.themes[e])return new ot.Notice(`主题${e}已经安装,无需重复安装!`),!1;try{const s=await ot.requestUrl({url:r,method:"GET"}),i=ot.normalizePath(this.app.vault.configDir+"/themes/"+e)+"/",l=this.app.vault.adapter,a=await Fn.loadAsync(s.arrayBuffer);(await l.exists(i)===!1||!await l.exists(i+"manifest.json"))&&await l.mkdir(i);try{a.forEach(async(u,m)=>{const h=i+u,f=await m.async("string");await l.write(h,f)})}catch{throw new ot.Notice(`主题${e}解压失败!得手动清除残留文件!`,5e3),l.rmdir(i,!0),Error(`主题${e}解压失败!`)}return new ot.Notice(`主题${e}(${n})安装并启用成功!
`,5e3),await app.customCss.setTheme(e),setTimeout(()=>{dispatchEvent(new Event("reload-statusbar"))},100),!0}catch(s){return console.log(r,s),new ot.Notice(`主题${e}安装失败!${s}`,5e3),!1}}async updateThemeToExistThemeFolder(e,n){const r=await this.getThemeDownloadUrl(e,n);if(!r)throw new ot.Notice(`获取${e}主题下载地址失败!`),new Error(`获取${e}主题下载地址失败!`);if(!app.customCss.themes[e])return new ot.Notice(`主题${e}未安装!`),!1;try{const s=ot.normalizePath(this.app.vault.configDir+"/themes/"+e)+"/",i=this.app.vault.adapter;if(await i.exists(s)===!1&&!await i.exists(s+"manifest.json"))throw new Error(`主题${e}未安装!`);const l=await ot.requestUrl({url:r,method:"GET"}),a=await Fn.loadAsync(l.arrayBuffer);try{a.forEach(async(u,m)=>{const h=s+u,f=await m.async("string");await i.write(h,f)})}catch{throw new ot.Notice(`主题${e}解压失败!得手动清除残留文件!`),Error(`主题${e}解压失败!`)}return new ot.Notice(`主题${e}(${n})更新成功!
新主题已生效`),await app.customCss.setTheme(e),setTimeout(()=>{dispatchEvent(new Event("reload-statusbar"))},100),!0}catch(s){return new ot.Notice(`主题${e}更新失败!${s}`),!1}}}const bu={"data-pagefind-body":"",class:"w-full"},_u={class:"flex items-center justify-between w-full px-2 py-4 mx-auto font-sans search first-letter:"},xu={class:"flex flex-wrap items-center justify-center w-full first-letter:mx-auto"},ku={class:"w-full lg:max-w-[60vw] mx-auto py-3 md:px-6"},Cu={class:"flex-wrap relative top-0 z-30 flex items-center w-full overflow-x-auto divide-x rounded dark:bg-muted-800 border-muted-200 dark:border-muted-700 divide-muted-200 dark:divide-muted-700 dark:shadow-muted-900/30 md:overflow-x-visible"},Tu={class:"widget-item"},Su={class:"widget-item"},Eu={class:"widget-item"},Iu={class:"widget-item"},Au={class:"widget-item"},Pu={class:"num"},Ou=["tooltip"],Du={class:"relative w-full"},zu={class:"relative group"},Bu={class:"text-right"},Lu={class:"w-full bg-muted-100 dark:bg-muted-1000"},Mu={class:"w-full mx-auto max-w-7xl"},$u={class:"flex items-center w-full overflow-hidden"},Uu={class:"flex flex-col justify-between w-full h-full md:px-6 pt-4 pb-16"},Ru={class:"w-full max-w-[90vw] mx-auto space-y-4 text-center"},Fu={class:"flex flex-col gap-12 py-12"},ju={key:0,class:"flex justify-center items-center py-10"},Nu={key:0,class:"col-span-full flex flex-col items-center justify-center py-20"},Hu={class:"flex items-center justify-center w-full p-6 -m-3"},Wu={class:"flex items-center justify-center w-full mb-4"},Vu={class:"flex space-x-2"},Zu={class:"flex items-center px-3 py-1"},Ku={class:"fixed inset-0 z-30 flex items-center justify-center overflow-auto bg-black bg-opacity-50"},Gu={class:"flex items-center justify-between"},qu={class:"container px-5 py-4 mx-auto"},Ju={class:"mb-6 text-2xl font-medium text-center title-font"},Yu={class:"mb-2"},Xu={class:"bolder"},Qu={class:"mb-4"},tc=["value"],ec={class:"flex-wrap block -mx-4 -mt-4 space-y-6 md:flex sm:-m-4 md:-mb-10 md:space-y-0"},nc={class:"flex md:p-4 md:w-1/2"},sc={class:"flex-grow"},rc=Ie({__name:"PluginMarket",props:{settings:{},app:{},tab:{},currentTab:{}},setup(t){const e=t,n=ut([]),r=ut(""),s=ut(""),i=ut(""),l=ut(!1),a=ut();let u=ut(24),m=ut(1);const h=ut(!0),f=ut("default"),y=new Me(e.settings.token),c=new Ks(e.app,e.settings),k=ut(!1),v=ut(!1),x=ut(null),g=ut(0),T=ut(1),O=ut(!1),D=ut([]),A=ut(0),L=ut(0),$=ut(!0),G=Nt(()=>A.value),R=Nt(()=>L.value),q=(Z,F)=>{if(console.error(`${F}:`,Z),O.value=!1,Z.statusCode===401||Z.message==="Unauthorized"||Z.name==="UnauthorizedError"||Z.response&&Z.response.status===401)x.value="验证失败。您的令牌可能无效或过期。请重新在 PKMer 插件设置中更新您的令牌。",new ot.Notice(x.value,1e4),v.value=!1,a.value=[],D.value=[],g.value=0,T.value=1,L.value=0;else{let ct=Z.message||"An unknown error occurred.";Z.response&&Z.response.data&&typeof Z.response.data.message=="string"&&(ct=Z.response.data.message),x.value=`${F}. Please try again later. Details: ${ct}`,new ot.Notice(x.value,7e3)}},st=async()=>{$.value&&await P()},P=async()=>{O.value=!0,x.value=null,$.value=!1;try{const Z=await y.getPkmerDocs();if(v.value){const{plugins:F,total:lt,totalPages:ct}=await y.getPluginListPaginated(m.value,u.value,s.value||"downloadCount",i.value?.toUpperCase()||"DESC");a.value=F||[],g.value=lt||0,T.value=ct||1}else a.value=await y.getTop20Plugins()||[],g.value=a.value.length,T.value=Math.ceil(g.value/u.value)||1;Array.isArray(a.value)?a.value.forEach(F=>{const lt=Z.find(Dt=>Dt.slug==F.id);lt&&(F.contentUrl=`https://pkmer.cn/show/${lt.uid}`,F.tags=lt.tags,F.chineseDescription=lt.description,F.authorAvatar=lt.authorAvatar);const ct=Z.find(Dt=>Dt.slug.includes(F.id+"_readme"));ct&&(F.readme_zh=`https://pkmer.cn/show/${ct.uid}`);const ft=e.app.plugins.manifests;F.isInstalled=ft[F.id]!==void 0,F.isOutdated=F.isInstalled&&ft[F.id].version!==F.version}):a.value=[]}catch(Z){q(Z,"Error:"),a.value=[],g.value=0,T.value=1}finally{O.value=!1}},W=()=>{k.value=!0,C()},d=ut(""),K=ut("all"),tt=ut(""),V=ut(""),Q=ut(""),J=async()=>{x.value=null;const Z=Object.keys(e.app.plugins.manifests);if(A.value=Z.length,!v.value){L.value=0;return}try{if(Z.length>0){const{plugins:F}=await y.getInstalledPluginsPaginated(Z,1,1e4,"downloadCount","DESC"),lt=F.filter(ct=>{const ft=e.app.plugins.manifests[ct.id];return ft&&ft.version!==ct.version});L.value=lt.length}else L.value=0}catch(F){q(F,"Error loading plugin update status"),L.value=0}},rt=async()=>{l.value=!1,new ot.Notice("正在下载插件,请稍后...",3e3),await c.downloadPluginToPluginFolder(tt.value,V.value)&&(a.value=a.value.map(F=>(F.id==tt.value&&(F.isInstalled=!0),F)),await J())},U=async()=>{l.value=!1,new ot.Notice("正在更新插件,请稍后...",3e3),await c.updatePluginToExistPluginFolder(tt.value,V.value)&&(a.value=a.value.map(F=>(F.id==tt.value&&(F.isOutdated=!1),F)),await J())},M=()=>{l.value=!1},et=async Z=>{K.value=Z,m.value=1,await st(),d.value.trim()?await N():Z==="all"?await P():await P().then(()=>{a.value=a.value.filter(F=>F.tags?.includes(Z))})},nt=async Z=>{try{const F=await y.getPluginVersions(Z);n.value=F,(!V.value||!F.includes(V.value))&&F.length>0&&(V.value=F[0])}catch(F){console.error(`Failed to fetch versions for plugin ${Z}:`,F),n.value=[]}},X=(Z,F,lt,ct)=>{l.value=!0,tt.value=F,V.value=lt,r.value=lt,Q.value=ct,tt.value&&nt(tt.value),Z==="download"?h.value=!0:h.value=!1},_t=()=>{const Z=window.location.hash.slice(1);if(Z){const F=decodeURIComponent(Z);K.value=F}},xt=ut(),vt=async()=>{if(!v.value){D.value=[];return}try{x.value=null;const F=await y.getPluginTags()||[];if(!Array.isArray(F)){D.value=[];return}D.value=F.map(lt=>lt.tag)}catch(Z){q(Z,"Failed to load plugin tags"),D.value=[]}};qn(async()=>{x.value=null;try{if(v.value=await y.isUserLogin(),!v.value&&e.settings.token){const Z="PKMer 登录验证失败。您的令牌可能无效或过期。请重新登录获取";x.value=Z,new ot.Notice(Z,1e4)}else!v.value&&!e.settings.token&&new ot.Notice("未登录 PKMer,某些功能不可用,请在设置中设置您的Token,以便完全访问。",7e3)}catch(Z){console.error("Error during initial login check:",Z),v.value=!1,Z.status===401||Z.name==="UnauthorizedError"||Z.response&&Z.response.status===401?x.value="验证错误: 无法通过 PKMer 验证登录状态。您的令牌可能无效。":x.value="网络错误: 无法连接到 PKMer 以验证登录状态。",new ot.Notice(x.value,1e4)}if(k.value=!1,_t(),s.value="downloadCount",i.value="desc",e.currentTab&&(j.value=e.currentTab),e.app.workspace.on("resize",wt),xt.value=e.app.workspace.activeLeaf?.view?.leaf?.width||0,v.value?(vt().catch(Z=>{console.warn("加载插件标签失败:",Z)}),J().catch(Z=>{console.warn("加载状态栏信息失败:",Z)})):(D.value=[],A.value=Object.keys(e.app.plugins.manifests).length,L.value=0),e.tab){const Z=JSON.parse(e.tab);Z.type=="updated"&&(s.value="updateTime",$.value=!0),Z.type=="installed"&&($.value=!0)}});const wt=()=>{xt.value=e.app.workspace.activeLeaf.view.leaf.width};vn(()=>{localStorage.removeItem("pkmer-update-tab")});const yt=ot.debounce(()=>{N()},800);We(d,()=>{yt()});const kt=Nt(()=>f.value==="mobile"?a.value?.filter(Z=>!Z.isDesktopOnly)||[]:f.value==="desktop"?a.value?.filter(Z=>Z.isDesktopOnly)||[]:a.value||[]),Ut=Nt(()=>{if(K.value==="all")return T.value;{const Z=kt.value.filter(F=>F.tags?.includes(K.value));return Math.ceil(Z.length/u.value)}}),_=async()=>{await st(),d.value.trim()?await N():await P()};async function o(){s.value="pkmerDownloadCount",i.value=i.value==="desc"?"asc":"desc",m.value=1,await _()}async function C(){s.value="downloadCount",i.value=i.value==="desc"?"asc":"desc",m.value=1,await _()}async function I(){s.value="pluginUpdatedTime",i.value=i.value==="desc"?"asc":"desc",m.value=1,await _()}async function w(){s.value="name",i.value=i.value==="desc"?"asc":"desc",m.value=1,await _()}async function p(){s.value="installed",i.value="desc",m.value=1,K.value="all";try{const Z=Object.keys(e.app.plugins.manifests);if(Z.length===0){a.value=[],g.value=0,T.value=1,A.value=0,L.value=0;return}const{plugins:F,total:lt}=await y.getInstalledPluginsPaginated(Z,1,1e4,s.value,i.value?.toUpperCase());a.value=F,g.value=lt,T.value=Math.ceil(lt/u.value),A.value=lt;const ct=F.filter(ft=>{const Dt=e.app.plugins.manifests[ft.id];return Dt&&Dt.version!==ft.version});L.value=ct.length,Array.isArray(a.value)&&a.value.forEach(ft=>{const Dt=e.app.plugins.manifests;ft.isInstalled=Dt[ft.id]!==void 0,ft.isOutdated=ft.isInstalled&&Dt[ft.id].version!==ft.version})}catch(Z){console.error("Error fetching installed plugins:",Z),a.value=[],g.value=0,T.value=1,A.value=0,L.value=0}}async function S(){s.value="downloadCount",i.value="desc",m.value=1;try{const Z=Object.keys(e.app.plugins.manifests);if(Z.length===0){a.value=[],g.value=0,T.value=1;return}const{plugins:F}=await y.getInstalledPluginsPaginated(Z,1,1e4,s.value,i.value?.toUpperCase()),lt=F.filter(ct=>{const ft=e.app.plugins.manifests[ct.id];return ft&&ft.version!==ct.version});L.value=lt.length,a.value=lt,g.value=lt.length,T.value=Math.ceil(lt.length/u.value),Array.isArray(a.value)&&a.value.forEach(ct=>{const ft=e.app.plugins.manifests;ct.isInstalled=ft[ct.id]!==void 0,ct.isOutdated=ct.isInstalled&&ft[ct.id].version!==ct.version})}catch(Z){console.error("Error fetching outdated plugins:",Z),a.value=[],g.value=0,T.value=1}}const z=Nt(()=>K.value==="all"?kt.value:kt.value.filter(Z=>Z.tags?.includes(K.value))),B=Nt(()=>Array.isArray(a.value)?a.value:[]),E=async Z=>{m.value=Z,await st(),d.value.trim()?await N():await P()},N=async()=>{O.value=!0,m.value=1,K.value="all";try{if(d.value.trim()){const{plugins:Z,total:F,totalPages:lt}=await y.searchPluginsPaginated(d.value,m.value,u.value,s.value||"downloadCount",i.value?.toUpperCase()||"DESC");if(a.value=Z,g.value=F,T.value=lt,Array.isArray(a.value)){const ct=new Promise((Lt,se)=>{setTimeout(()=>se(new Error("请求超时")),1e4)}),ft=y.getPkmerDocs(),Dt=await Promise.race([ft,ct]);a.value.forEach(Lt=>{const se=Dt.find(_e=>_e.slug==Lt.id);se&&(Lt.contentUrl=`https://pkmer.cn/show/${se.uid}`,Lt.tags=se.tags,Lt.chineseDescription=se.description,Lt.authorAvatar=se.authorAvatar);const Je=Dt.find(_e=>_e.slug.includes(Lt.id+"_readme"));Je&&(Lt.readme_zh=`https://pkmer.cn/show/${Je.uid}`);const be=e.app.plugins.manifests;Lt.isInstalled=be[Lt.id]!==void 0,Lt.isOutdated=Lt.isInstalled&&be[Lt.id].version!==Lt.version})}}else await st(),await P()}catch(Z){console.error("Error searching plugins:",Z)}finally{O.value=!1}},j=ut("plugin"),H=async()=>{O.value=!0;const Z=await y.getPkmerDocs();if(v)try{const{themes:F,total:lt,totalPages:ct}=await y.getThemeListPaginated(m.value,u.value,s.value||"downloadCount",i.value?.toUpperCase()||"DESC");a.value=F,g.value=lt,T.value=ct,Array.isArray(a.value)?a.value.forEach(ft=>{const Dt=Z.find(se=>se.slug==ft.name.replace(/\s+/g,"-").toLowerCase());Dt&&(ft.contentUrl=`https://pkmer.cn/show/${Dt.uid}`,ft.tags=Dt.tags,ft.chineseDescription=Dt.description,ft.authorAvatar=Dt.authorAvatar);const Lt=e.app.customCss.themes;ft.isInstalled=Lt[ft.name]!==void 0,ft.isOutdated=ft.isInstalled&&Lt[ft.name].version!==ft.version}):a.value=[]}catch(F){console.error("Error loading themes:",F)}else a.value=await y.getTop20Themes(),Array.isArray(a.value)?a.value.forEach(F=>{const lt=Z.find(ft=>ft.slug==F.name.replace(/\s+/g,"-").toLowerCase());lt&&(F.contentUrl=`https://pkmer.cn/show/${lt.uid}`,F.tags=lt.tags,F.chineseDescription=lt.description,F.authorAvatar=lt.authorAvatar);const ct=e.app.customCss.themes;F.isInstalled=ct[F.name]!==void 0,F.isOutdated=F.isInstalled&&ct[F.name].version!==F.version}):a.value=[];O.value=!1};We(()=>e.currentTab,Z=>{Z&&(j.value=Z,Z==="theme"&&a.value?.length===0&&Y())},{immediate:!0});async function Y(){if(j.value==="theme"){O.value=!0;try{await H()}catch(Z){console.error("Error loading theme data:",Z)}finally{O.value=!1}}}const at=new Gs(e.app,e.settings),it=ut(""),mt=ut(""),Bt=(Z,F,lt)=>{l.value=!0,it.value=F,mt.value=lt,Z==="download"?h.value=!0:h.value=!1},St=async()=>{l.value=!1,new ot.Notice("正在下载主题,请稍后...",3e3),await at.downloadThemeToThemeFolder(it.value,mt.value)&&a.value.forEach(F=>{F.name===it.value&&(F.isInstalled=!0)})},Rt=async()=>{l.value=!1,new ot.Notice("正在更新主题,请稍后...",3e3),await at.updateThemeToExistThemeFolder(it.value,mt.value)&&a.value.forEach(F=>{F.name===it.value&&(F.isOutdated=!1)})};return(Z,F)=>(dt(),pt(Mt,null,[Ft(zi,{settings:e.settings,isLogin:v.value,app:e.app},null,8,["settings","isLogin","app"]),b("main",bu,[b("div",_u,[b("div",xu,[b("div",ku,[b("div",Cu,[b("div",Tu,[b("button",{class:zt([{active:s.value=="downloadCount"},"flex items-center px-2 font-sans transition-colors duration-300 group whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"按下载量",flow:"down",onClick:C},[...F[9]||(F[9]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"solar:round-sort-vertical-line-duotone",class:"w-6 h-6 iconify iconify--solar"},[b("g",{fill:"none",stroke:"currentColor","stroke-width":"1.5"},[b("circle",{cx:"12",cy:"12",r:"10",opacity:".5"}),b("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.5 8v8m0 0L7 13.25M9.5 16l2.5-2.75M14.5 16V8m0 0L12 10.75M14.5 8l2.5 2.75"})])])],-1)])],2)]),b("div",Su,[b("button",{class:zt([{active:s.value=="pluginUpdatedTime"},"items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"按更新时间",flow:"down",onClick:I},[...F[10]||(F[10]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"ic:sharp-update",class:"w-6 h-6 iconify iconify--ic"},[b("path",{fill:"currentColor",d:"M11 8v5l4.25 2.52l.77-1.28l-3.52-2.09V8H11zm10 2V3l-2.64 2.64A8.937 8.937 0 0 0 12 3a9 9 0 1 0 9 9h-2c0 3.86-3.14 7-7 7s-7-3.14-7-7s3.14-7 7-7c1.93 0 3.68.79 4.95 2.05L14 10h7z"})])],-1)])],2)]),b("div",Eu,[b("button",{class:zt([{active:s.value=="name"},"items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"按文件名排序",flow:"down",onClick:w},[...F[11]||(F[11]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"material-symbols:sort-by-alpha",class:"w-6 h-6 iconify iconify--material-symbols"},[b("path",{fill:"currentColor",d:"M2 17L5.75 7H7.9l3.75 10H9.6l-.85-2.4H4.9L4.1 17H2Zm3.5-4.1h2.6L6.9 9.15h-.15L5.5 12.9Zm8.2 4.1v-1.9l5.05-6.3H13.9V7h7.05v1.9l-5 6.3H21V17h-7.3ZM9 5l3-3l3 3H9Zm3 17l-3-3h6l-3 3Z"})])],-1)])],2)]),b("div",Iu,[b("button",{class:zt(["active items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700",{active:s.value=="pkmerDownloadCount"}]),tooltip:"按插件热度",flow:"down",onClick:o},[...F[12]||(F[12]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"material-symbols:whatshot",class:"iconify w-6 h-6 iconify--material-symbols"},[b("path",{fill:"currentColor",d:"M12 22q-2.5 0-4.588-1.1T3.95 17.95l4.1-4.1l3 2.5L16 11.4V14h2V8h-6v2h2.6l-3.65 3.65l-3-2.5L2.9 16.2q-.425-.95-.662-2.013T2 12q0-2.075.788-3.9t2.137-3.175q1.35-1.35 3.175-2.137T12 2q2.075 0 3.9.788t3.175 2.137q1.35 1.35 2.138 3.175T22 12q0 2.075-.788 3.9t-2.137 3.175q-1.35 1.35-3.175 2.138T12 22Z"})])],-1)])],2)]),b("div",Au,[b("button",{class:zt([{active:s.value=="installed"},"items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"筛选已安装插件",flow:"down",onClick:p},[F[13]||(F[13]=b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"material-symbols:sort-by-alpha",class:"w-5 h-5 iconify iconify--material-symbols"},[b("path",{fill:"currentColor",d:"M4.5 11a8.5 8.5 0 1 1 8.188 8.494a6.47 6.47 0 0 1-.68 1.457c.327.033.658.049.992.049c5.523 0 10-4.477 10-10S18.523 1 13 1S3 5.477 3 11c0 .334.016.665.048.991a6.51 6.51 0 0 1 1.458-.68A8.65 8.65 0 0 1 4.5 11Zm8.493-5.352a.75.75 0 0 0-1.493.102v6l.007.102a.75.75 0 0 0 .743.648h4l.102-.007A.75.75 0 0 0 16.25 11H13V5.75l-.007-.102ZM1 17.5a5.5 5.5 0 0 1 5-5.477v5.77l-1.646-1.647a.5.5 0 0 0-.708.708l2.5 2.5a.5.5 0 0 0 .708 0l2.5-2.5a.5.5 0 0 0-.708-.708L7 17.793v-5.77A5.5 5.5 0 1 1 1 17.5Zm8.5 3A.5.5 0 0 0 9 20H4a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5Z"})])],-1)),b("span",Pu,bt(G.value),1)],2)]),b("div",{class:"widget-item",tooltip:f.value=="mobile"?"支持移动端的插件":f.value=="desktop"?"仅支持桌面端的插件":"所有终端"},[Et(b("select",{"onUpdate:modelValue":F[0]||(F[0]=lt=>f.value=lt),class:"block border px-2 w-18 text-muted-800 dark:text-muted-100 bg-white dark:bg-muted-800 rounded-md shadow-sm focus:outline-none"},[...F[14]||(F[14]=[b("option",{class:"text-muted-800 dark:text-muted-100 bg-white dark:bg-muted-800",value:"default"}," 默认 ",-1),b("option",{class:"text-muted-800 dark:text-muted-100 bg-white dark:bg-muted-800",value:"mobile"}," 移动端 ",-1),b("option",{class:"text-muted-800 dark:text-muted-100 bg-white dark:bg-muted-800",value:"desktop"}," 仅桌面端 ",-1)])],512),[[Cs,f.value]])],8,Ou),b("div",Du,[b("div",zu,[Et(b("input",{type:"text",class:"w-full h-8 pl-2 md:pl-16 pr-5 font-sans text-base leading-5 transition-all duration-300 text-muted-600 focus:border-muted-300 focus:shadow-lg focus:shadow-muted-300/50 dark:focus:shadow-muted-800/50 placeholder:text-muted-300 dark:placeholder:text-muted-500 dark:bg-muted-800 dark:text-muted-200 dark:border-muted-700 dark:focus:border-muted-600 tw-accessibility",placeholder:"Search plugins...","onUpdate:modelValue":F[1]||(F[1]=lt=>d.value=lt)},null,512),[[el,d.value]]),F[15]||(F[15]=b("div",{class:"absolute top-0 left-0 hidden md:flex items-center justify-center w-16 h-8 transition-colors duration-300 text-muted-400 group-focus-within:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"lucide:search",class:"w-4 h-4 iconify iconify--lucide"},[b("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[b("circle",{cx:"11",cy:"11",r:"8"}),b("path",{d:"m21 21l-4.3-4.3"})])])],-1))])])])])])]),b("div",Bu,[Et(b("button",{onClick:S,class:"inline-block w-full font-sans text-xs px-3 m-1 rounded-lg bg-green-600 text-white shadow-xl shadow-primary-500/20"},[Wt(" 发现 "+bt(R.value)+" 个插件更新!【点我查看】 ",1),b("button",{onClick:Be(W,["stop"]),class:"ml-2 px-3 shadow-none"},[...F[16]||(F[16]=[b("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 32 32"},[b("path",{fill:"white",d:"M16 2C8.2 2 2 8.2 2 16s6.2 14 14 14s14-6.2 14-14S23.8 2 16 2m5.4 21L16 17.6L10.6 23L9 21.4l5.4-5.4L9 10.6L10.6 9l5.4 5.4L21.4 9l1.6 1.6l-5.4 5.4l5.4 5.4z"})],-1)])])],512),[[Ot,R.value&&!k.value]])]),b("section",Lu,[b("div",Mu,[b("div",$u,[b("div",Uu,[b("div",Ru,[Ft(fl,{"active-category":K.value,pluginList:B.value,pluginTags:D.value,onUpdateActiveCategory:et},null,8,["active-category","pluginList","pluginTags","onUpdateActiveCategory"])]),b("div",Fu,[O.value?(dt(),pt("div",ju,[...F[17]||(F[17]=[b("div",{class:"w-12 h-12 border-4 border-t-4 border-gray-200 rounded-full animate-spin dark:border-gray-700 dark:border-t-primary-500"},null,-1)])])):(dt(),pt("div",{key:1,class:zt(["grid gap-6 -m-3 ptablet:grid-cols-2 ltablet:grid-cols-3 lg:grid-cols-3",{"!grid-cols-1":xt.value<=768&&xt.value>0,"!grid-cols-2":xt.value>768&&xt.value<1024,"!grid-cols-3":xt.value>1024}])},[$.value&&(!z.value||z.value.length===0)?(dt(),pt("div",Nu,[F[19]||(F[19]=b("div",{class:"text-muted-400 dark:text-muted-500 mb-4 text-center"},[b("svg",{xmlns:"http://www.w3.org/2000/svg",width:"64",height:"64",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-package"},[b("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"})])],-1)),F[20]||(F[20]=b("p",{class:"text-muted-600 dark:text-muted-300 mb-4 text-center"},"插件市场尚未加载",-1)),b("button",{onClick:P,class:"inline-flex items-center justify-center gap-2 font-sans font-semibold bg-primary-500 text-white relative px-6 py-3 rounded-lg tw-accessibility hover:bg-primary-600 transition-all duration-300"},[...F[18]||(F[18]=[Vs('<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M3 21v-5h5"></path></svg><span>点击加载插件列表</span>',2)])])])):ue("",!0),(dt(!0),pt(Mt,null,Ke(z.value,lt=>(dt(),pt("div",{key:j.value==="theme"?lt.name:lt.id},[j.value==="plugin"?(dt(),Ln(Zl,{key:0,app:e.app,"plugin-info":lt,isLogin:v.value,onDownloadUpdatePlugin:X},null,8,["app","plugin-info","isLogin","onDownloadUpdatePlugin"])):j.value==="theme"?(dt(),Ln(Oi,{key:1,app:e.app,"theme-info":lt,isLogin:v.value,onDownloadUpdateTheme:Bt},null,8,["app","theme-info","isLogin"])):ue("",!0)]))),128))],2)),b("div",Hu,[b("div",Wu,[b("div",Vu,[Jt(m)>1?(dt(),pt("button",{key:0,onClick:F[2]||(F[2]=lt=>E(Jt(m)-1)),class:"px-3 py-1 border rounded hover:bg-gray-100 dark:hover:bg-muted-700"}," 上一页 ")):ue("",!0),b("span",Zu," 第 "+bt(Jt(m))+" 页 / 共 "+bt(Ut.value)+" 页 ",1),Jt(m)<Ut.value?(dt(),pt("button",{key:1,onClick:F[3]||(F[3]=lt=>E(Jt(m)+1)),class:"px-3 py-1 border rounded hover:bg-gray-100 dark:hover:bg-muted-700"}," 下一页 ")):ue("",!0)])])])])])])])])]),Et(b("div",Ku,[b("div",{class:"max-w-3xl px-6 py-4 mx-auto text-left bg-white rounded shadow-lg dark:bg-muted-700",onClick:F[8]||(F[8]=lt=>l.value=!1),"x-transition:enter":"motion-safe:ease-out duration-300","x-transition:enter-start":"opacity-0 scale-90","x-transition:enter-end":"opacity-100 scale-100"},[b("div",Gu,[F[22]||(F[22]=b("h5",{class:"mr-3 max-w-none"},null,-1)),b("button",{type:"button",class:"z-50 cursor-pointer",onClick:F[4]||(F[4]=lt=>l.value=!1)},[...F[21]||(F[21]=[b("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},[b("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])])]),b("section",{class:"body-font",onClick:F[7]||(F[7]=Be(()=>{},["stop"]))},[b("div",qu,[b("h3",Ju,[F[23]||(F[23]=b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"line-md:downloading-loop",class:"w-6 h-6 iconify iconify--line-md"},[b("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-width":"2"},[b("path",{"stroke-dasharray":"2 4","stroke-dashoffset":"6",d:"M12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21"},[b("animate",{attributeName:"stroke-dashoffset",dur:"0.6s",repeatCount:"indefinite",values:"6;0"})]),b("path",{"stroke-dasharray":"30","stroke-dashoffset":"30",d:"M12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3"},[b("animate",{fill:"freeze",attributeName:"stroke-dashoffset",begin:"0.1s",dur:"0.3s",values:"30;0"})]),b("path",{"stroke-dasharray":"10","stroke-dashoffset":"10",d:"M12 8v7.5"},[b("animate",{fill:"freeze",attributeName:"stroke-dashoffset",begin:"0.5s",dur:"0.2s",values:"10;0"})]),b("path",{"stroke-dasharray":"6","stroke-dashoffset":"6",d:"M12 15.5l3.5 -3.5M12 15.5l-3.5 -3.5"},[b("animate",{fill:"freeze",attributeName:"stroke-dashoffset",begin:"0.7s",dur:"0.2s",values:"6;0"})])])],-1)),Wt(" 即将安装...."+bt(tt.value.toUpperCase()),1)]),b("div",null,[b("p",Yu,[F[24]||(F[24]=Wt(" 插件来源: ",-1)),b("span",Xu,bt(Q.value==="official"?"Obsidian官方商城":"社区专供"),1)]),F[25]||(F[25]=b("p",{class:"mb-2 text-base leading-relaxed"}," 注意,安装和更新操作不可逆,请确认后再操作。 ",-1))]),b("div",Qu,[F[26]||(F[26]=b("label",{for:"version-select",class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mr-2"},"选择版本号(默认最新版本):",-1)),Et(b("select",{id:"version-select","onUpdate:modelValue":F[5]||(F[5]=lt=>V.value=lt),onClick:F[6]||(F[6]=Be(()=>{},["stop"])),class:"mt-1 block w-full px-3 border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 rounded-md shadow-sm focus:outline-none focus:ring-green-500 focus:border-green-500 sm:text-sm text-gray-900 dark:text-gray-100"},[(dt(!0),pt(Mt,null,Ke(n.value,lt=>(dt(),pt("option",{key:lt,value:lt},bt(lt)+" "+bt(lt===r.value?"(最新版本)":""),9,tc))),128))],512),[[Cs,V.value]])]),b("div",ec,[b("div",nc,[b("div",sc,[j.value==="plugin"?(dt(),pt(Mt,{key:0},[h.value?(dt(),pt("h2",{key:0,onClick:rt,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 确 认 ")):(dt(),pt("h2",{key:1,onClick:U,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 更 新 "))],64)):j.value==="theme"?(dt(),pt(Mt,{key:1},[h.value?(dt(),pt("h2",{key:0,onClick:St,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 确 认 ")):(dt(),pt("h2",{key:1,onClick:Rt,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 更 新 "))],64)):ue("",!0)])]),b("div",{class:"flex md:p-4 md:w-1/2"},[b("div",{class:"flex-grow"},[b("h2",{onClick:M,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 取 消 ")])])])])])])],512),[[Ot,l.value]])],64))}});const ic={class:"relative w-full flex justify-center gap-2 flex-wrap"},oc=["onClick"],ac=Ie({__name:"ThemeToolbar",props:{themeList:{},activeCategory:{}},emits:["update-active-category"],setup(t){const e=t;let n=[];const r=Nt(()=>{Array.isArray(e.themeList)&&e.themeList.forEach(l=>{if(l.tags&&typeof l.tags=="string"){let a=l.tags.split(",").map(u=>u.trim());a=a.filter(u=>u!==""),a.length>0&&n.push(a[0])}});let i=[];return Array.isArray(e.themeList)&&e.themeList.forEach(l=>{if(l.modes&&typeof l.modes=="string"){let a=l.modes.split(",").map(u=>u.trim());a=a.filter(u=>u!==""),a.length>0&&i.push(a[0])}}),n.concat(i)}),s=Nt(()=>Array.from(new Set(r.value)));return(i,l)=>(dt(),pt("div",ic,[b("button",{class:zt(["h-6 inline-flex justify-center items-center py-2 px-4 font-sans text-sm rounded-lg bg-muted-200 dark:bg-muted-800 text-muted-500 hover:bg-muted-300 dark:hover:bg-muted-700 dark:hover:text-muted-200 border-2 transition-colors duration-300 tw-accessibility",t.activeCategory==="all"?"border-primary-500 bg-muted-50 dark:bg-muted-700":"border-transparent "]),onClick:l[0]||(l[0]=a=>i.$emit("update-active-category","all"))}," All ",2),(dt(!0),pt(Mt,null,Ke(s.value,a=>(dt(),pt("div",{class:"plugin-item",key:a},[b("button",{class:zt(["flex-1 inline-flex justify-center items-center py-2 px-4 font-sans text-sm rounded-lg bg-muted-200 dark:bg-muted-800 text-muted-500 hover:bg-muted-300 dark:hover:bg-muted-700 dark:hover:text-muted-200 border-2 transition-colors duration-300 tw-accessibility",t.activeCategory===a?"border-primary-500 bg-muted-50 dark:bg-muted-700":"border-transparent"]),onClick:()=>{i.$emit("update-active-category",a)}},bt(a),11,oc)]))),128))]))}}),lc={"data-pagefind-body":"",class:"w-full"},uc={class:"flex items-center justify-between w-full px-2 py-4 mx-auto font-sans search first-letter:"},cc={class:"flex flex-wrap items-center justify-center w-full first-letter:mx-auto"},dc={class:"w-full lg:max-w-[60vw] mx-auto py-3 md:px-6"},fc={class:"flex-wrap relative top-0 z-30 flex items-center w-full overflow-x-auto divide-x rounded dark:bg-muted-800 border-muted-200 dark:border-muted-700 divide-muted-200 dark:divide-muted-700 dark:shadow-muted-900/30 md:overflow-x-visible"},hc={class:"widget-item"},pc={class:"widget-item"},mc={class:"widget-item"},gc={class:"widget-item"},vc={class:"widget-item"},wc={class:"num"},yc={class:"relative w-full"},bc={class:"relative group"},_c=["value"],xc={class:"text-right"},kc={class:"w-full bg-muted-100 dark:bg-muted-1000"},Cc={class:"w-full max-w-7xl mx-auto"},Tc={class:"w-full flex items-center overflow-hidden"},Sc={class:"w-full h-full flex flex-col justify-between md:px-6 pb-16 pt-4"},Ec={class:"w-full max-w-[90vw] mx-auto space-y-4 text-center"},Ic={class:"flex flex-col gap-12 py-12"},Ac={key:0,class:"w-full flex items-center justify-center p-12"},Pc={class:"w-full flex items-center justify-center p-6 -m-3"},Oc={class:"w-full max-w-[210px] pt-16"},Dc={class:"fixed inset-0 z-30 flex items-center justify-center overflow-auto bg-black bg-opacity-50"},zc={class:"body-font"},Bc={class:"container md:px-5 py-4 mx-auto"},Lc={class:"text-2xl font-medium title-font text-center mb-6"},Mc={class:"mb-4"},$c=["value"],Uc={class:"block md:flex flex-wrap sm:-m-4 -mx-4 md:-mb-10 md:-mt-4 md:space-y-0"},Rc={class:"md:p-4 md:w-1/2 flex"},Fc={class:"flex-grow"},jc=Ie({__name:"ThemeMarket",props:{settings:{},app:{},tab:{}},setup(t){const e=t,n=ut([]),r=ut(""),s=ut(""),i=ut(!1),l=ut([]);let a=ut(24),u=ut(1);const m=ut(!1),h=ut(!0),f=new Me(e.settings.token),y=new Gs(e.app,e.settings),c=ut(!1),k=ut(!0),v=()=>{m.value=!0,X()},x=async()=>{k.value&&await g()},g=async()=>{k.value=!1;const _=new Promise((I,w)=>{setTimeout(()=>w(new Error("请求超时")),1e4)}),o=f.getPkmerDocs(),C=await Promise.race([o,_]);if(c.value)try{l.value=await f.getThemeList(),l.value=l.value.sort((I,w)=>w.downloadCount-I.downloadCount),Array.isArray(l.value)?l.value.forEach(I=>{const w=C.find(S=>S.slug==I.name.replace(/\s+/g,"-").toLowerCase());w&&(I.contentUrl=`https://pkmer.cn/show/${w.uid}`);const p=e.app.customCss.themes;I.isInstalled=p[I.name]!==void 0,I.isOutdated=I.isInstalled&&p[I.name].version!==I.version}):l.value=[]}catch(I){console.error("Error loading themes:",I)}else l.value=await f.getTop20Themes(),Array.isArray(l.value)?l.value.forEach(I=>{const w=C.find(S=>S.slug==I.name.replace(/\s+/g,"-").toLowerCase());w&&(I.contentUrl=`https://pkmer.cn/show/${w.uid}`);const p=e.app.customCss.themes;I.isInstalled=p[I.name]!==void 0,I.isOutdated=I.isInstalled&&p[I.name].version!==I.version}):l.value=[]},T=Nt(()=>{if(l.value)return l.value.filter(C=>C.isInstalled===!0).length}),O=Nt(()=>l.value?l.value.filter(C=>C.isOutdated===!0).length:!1),D=ut(""),A=ut("all"),L=ut(""),$=ut(""),G=ut(0),R=_=>{ot.debounce(()=>{D.value=_.target.value},800)()},q=()=>{i.value=!1},st=async _=>{A.value=_,await x()},P=async _=>{try{const o=await f.getThemeVersions(_);n.value=o,(!$.value||!o.includes($.value))&&o.length>0&&($.value=o[0])}catch(o){console.error(`Failed to fetch versions for theme ${_}:`,o),n.value=[]}},W=(_,o,C)=>{i.value=!0,L.value=o,$.value=C,r.value=C,L.value&&P(L.value),_==="download"?h.value=!0:h.value=!1},d=async()=>{i.value=!1,new ot.Notice("正在更新主题,请稍后...",3e3),await y.updateThemeToExistThemeFolder(L.value,$.value)&&(l.value=l.value.map(o=>(o.name==L.value&&(o.isOutdated=!1),o)))},K=async()=>{i.value=!1,new ot.Notice("正在下载主题,请稍后...",3e3),await y.downloadThemeToThemeFolder(L.value,$.value)&&(l.value=l.value.map(o=>(o.name==L.value&&(o.isInstalled=!0),o)))},tt=()=>{i.value=!1},V=()=>{const _=window.location.hash.slice(1);if(_){const o=decodeURIComponent(_);A.value=o}},Q=ut();qn(async()=>{V(),s.value="pkmerDownloadCount",et.value="asc",e.app.workspace.on("resize",J),Q.value=e.app.workspace.activeLeaf.view.leaf.width;try{c.value=await f.isUserLogin(),c.value&&(G.value=await f.getDownloadCount().catch(()=>0))}catch(_){console.warn("检查登录状态失败:",_),c.value=!1}if(e.tab){const _=JSON.parse(e.tab);_.type=="tupdated"&&(k.value=!0),_.type=="tupdated"&&(k.value=!0)}});const J=()=>{Q.value=e.app.workspace.activeLeaf.view.leaf.width};vn(()=>{window.removeEventListener("resize",J)});const rt=Nt(()=>{const _=D.value.toLowerCase().trim();return _.length<1?l.value:l.value.filter(o=>o.name.toLowerCase().includes(_)||o.author.toLowerCase().includes(_)||o.chineseDescription?.toLowerCase().includes(_)||o.tags?.toLowerCase().includes(_))}),U=Nt(()=>Math.ceil(rt.value?.length/a.value)),M=Nt(()=>u.value<U.value),et=ut("");function nt(){s.value="pkmerDownloadCount",et.value=et.value==="asc"?"desc":"asc"}function X(){s.value="downloadCount",et.value=et.value==="asc"?"desc":"asc"}function _t(){s.value="updateTime",et.value=et.value==="asc"?"desc":"asc"}function xt(){s.value="fileName",et.value=et.value==="asc"?"desc":"asc"}function vt(){s.value="installed",et.value=et.value==="asc"?"desc":"asc"}function wt(){s.value="updated",et.value=et.value==="asc"?"desc":"asc"}const yt=Nt(()=>{let _=[];return A.value=="all"?s.value==="downloadCount"?et.value==="asc"?_=rt.value.sort((o,C)=>o.downloadCount-C.downloadCount):_=rt.value.sort((o,C)=>C.downloadCount-o.downloadCount):s.value==="updateTime"?et.value==="asc"?_=rt.value.sort((o,C)=>new Date(o.updatedTime).getTime()-new Date(C.updatedTime).getTime()):_=rt.value.sort((o,C)=>new Date(C.updatedTime).getTime()-new Date(o.updatedTime).getTime()):s.value==="fileName"?et.value==="asc"?_=rt.value.sort((o,C)=>o.name.localeCompare(C.name)):_=rt.value.sort((o,C)=>C.name.localeCompare(o.name)):s.value==="pkmerDownloadCount"?et.value==="asc"?_=rt.value.sort((o,C)=>C.pkmerDownloadCount-o.pkmerDownloadCount):_=rt.value.sort((o,C)=>o.pkmerDownloadCount-C.pkmerDownloadCount):s.value==="installed"?_=rt.value.filter(o=>o.isInstalled):s.value==="updated"?_=rt.value.filter(o=>o.isOutdated):_=rt.value?.slice(0,u.value*a.value):(_=rt.value.filter(o=>o.tags?.toLowerCase().includes(A.value)||o.modes?.toLowerCase().includes(A.value)),s.value==="downloadCount"?et.value==="asc"?_=_.sort((o,C)=>o.downloadCount-C.downloadCount):_=_.sort((o,C)=>C.downloadCount-o.downloadCount):s.value==="updateTime"?et.value==="asc"?_=_.sort((o,C)=>new Date(o.updatedTime).getTime()-new Date(C.updatedTime).getTime()):_=_.sort((o,C)=>new Date(C.updatedTime).getTime()-new Date(o.updatedTime).getTime()):s.value==="fileName"?et.value==="asc"?_=_.sort((o,C)=>o.name.localeCompare(C.name)):_=_.sort((o,C)=>C.name.localeCompare(o.name)):s.value==="pkmerDownloadCount"&&(et.value==="asc"?_=_.sort((o,C)=>o.pkmerDownloadCount-C.pkmerDownloadCount):_=_.sort((o,C)=>C.pkmerDownloadCount-o.pkmerDownloadCount))),_?.slice(0,u.value*a.value)}),kt=Nt(()=>Array.isArray(rt.value)?rt.value:[]),Ut=()=>{const _=u.value*a.value,o=_+a.value,C=yt.value?.slice(_,o);u.value++,l.value=[...l.value,...C]};return(_,o)=>(dt(),pt(Mt,null,[Ft(zi,{settings:e.settings,isLogin:c.value,app:e.app},null,8,["settings","isLogin","app"]),b("main",lc,[b("div",uc,[b("div",cc,[b("div",dc,[b("div",fc,[b("div",hc,[b("button",{class:zt([{active:s.value=="downloadCount"},"flex items-center px-2 font-sans transition-colors duration-300 group whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"按下载量",flow:"down",onClick:X},[...o[2]||(o[2]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"solar:round-sort-vertical-line-duotone",class:"w-6 h-6 iconify iconify--solar"},[b("g",{fill:"none",stroke:"currentColor","stroke-width":"1.5"},[b("circle",{cx:"12",cy:"12",r:"10",opacity:".5"}),b("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.5 8v8m0 0L7 13.25M9.5 16l2.5-2.75M14.5 16V8m0 0L12 10.75M14.5 8l2.5 2.75"})])])],-1)])],2)]),b("div",pc,[b("button",{class:zt([{active:s.value=="updateTime"},"items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"按更新时间",flow:"down",onClick:_t},[...o[3]||(o[3]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"ic:sharp-update",class:"w-6 h-6 iconify iconify--ic"},[b("path",{fill:"currentColor",d:"M11 8v5l4.25 2.52l.77-1.28l-3.52-2.09V8H11zm10 2V3l-2.64 2.64A8.937 8.937 0 0 0 12 3a9 9 0 1 0 9 9h-2c0 3.86-3.14 7-7 7s-7-3.14-7-7s3.14-7 7-7c1.93 0 3.68.79 4.95 2.05L14 10h7z"})])],-1)])],2)]),b("div",mc,[b("button",{class:zt([{active:s.value=="fileName"},"items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"按文件名排序",flow:"down",onClick:xt},[...o[4]||(o[4]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"material-symbols:sort-by-alpha",class:"w-6 h-6 iconify iconify--material-symbols"},[b("path",{fill:"currentColor",d:"M2 17L5.75 7H7.9l3.75 10H9.6l-.85-2.4H4.9L4.1 17H2Zm3.5-4.1h2.6L6.9 9.15h-.15L5.5 12.9Zm8.2 4.1v-1.9l5.05-6.3H13.9V7h7.05v1.9l-5 6.3H21V17h-7.3ZM9 5l3-3l3 3H9Zm3 17l-3-3h6l-3 3Z"})])],-1)])],2)]),b("div",gc,[b("button",{class:zt(["active items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700",{active:s.value=="pkmerDownloadCount"}]),tooltip:"按主题热度",flow:"down",onClick:nt},[...o[5]||(o[5]=[b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"material-symbols:whatshot",class:"iconify w-6 h-6 iconify--material-symbols"},[b("path",{fill:"currentColor",d:"M12 22q-2.5 0-4.588-1.1T3.95 17.95l4.1-4.1l3 2.5L16 11.4V14h2V8h-6v2h2.6l-3.65 3.65l-3-2.5L2.9 16.2q-.425-.95-.662-2.013T2 12q0-2.075.788-3.9t2.137-3.175q1.35-1.35 3.175-2.137T12 2q2.075 0 3.9.788t3.175 2.137q1.35 1.35 2.138 3.175T22 12q0 2.075-.788 3.9t-2.137 3.175q-1.35 1.35-3.175 2.138T12 22Z"})])],-1)])],2)]),b("div",vc,[b("button",{class:zt([{active:s.value=="installed"},"items-center flex-1 px-2 font-sans transition-colors duration-300 group md:flex-auto md:flex whitespace-nowrap text-muted-800 dark:text-muted-100 hover:bg-muted-50 dark:hover:bg-muted-700"]),tooltip:"筛选已安装主题",flow:"down",onClick:vt},[o[6]||(o[6]=b("span",{class:"items-center justify-center w-10 h-10 whitespace-pre-wrap flex text-muted-400 group-hover:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"material-symbols:sort-by-alpha",class:"w-5 h-5 iconify iconify--material-symbols"},[b("path",{fill:"currentColor",d:"M4.5 11a8.5 8.5 0 1 1 8.188 8.494a6.47 6.47 0 0 1-.68 1.457c.327.033.658.049.992.049c5.523 0 10-4.477 10-10S18.523 1 13 1S3 5.477 3 11c0 .334.016.665.048.991a6.51 6.51 0 0 1 1.458-.68A8.65 8.65 0 0 1 4.5 11Zm8.493-5.352a.75.75 0 0 0-1.493.102v6l.007.102a.75.75 0 0 0 .743.648h4l.102-.007A.75.75 0 0 0 16.25 11H13V5.75l-.007-.102ZM1 17.5a5.5 5.5 0 0 1 5-5.477v5.77l-1.646-1.647a.5.5 0 0 0-.708.708l2.5 2.5a.5.5 0 0 0 .708 0l2.5-2.5a.5.5 0 0 0-.708-.708L7 17.793v-5.77A5.5 5.5 0 1 1 1 17.5Zm8.5 3A.5.5 0 0 0 9 20H4a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5Z"})])],-1)),b("span",wc,bt(T.value),1)],2)]),b("div",yc,[b("div",bc,[b("input",{type:"text",class:"w-full h-8 pl-2 md:pl-16 pr-5 font-sans text-base leading-5 transition-all duration-300 text-muted-600 focus:border-muted-300 focus:shadow-lg focus:shadow-muted-300/50 dark:focus:shadow-muted-800/50 placeholder:text-muted-300 dark:placeholder:text-muted-500 dark:bg-muted-800 dark:text-muted-200 dark:border-muted-700 dark:focus:border-muted-600 tw-accessibility",placeholder:"Search themes...",onInput:R,value:D.value},null,40,_c),o[7]||(o[7]=b("div",{class:"absolute top-0 left-0 hidden md:flex items-center justify-center w-16 h-8 transition-colors duration-300 text-muted-400 group-focus-within:text-primary-500"},[b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"lucide:search",class:"w-4 h-4 iconify iconify--lucide"},[b("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[b("circle",{cx:"11",cy:"11",r:"8"}),b("path",{d:"m21 21l-4.3-4.3"})])])],-1))])])])])])]),b("div",xc,[Et(b("button",{onClick:wt,class:"inline-block w-full font-sans text-xs px-3 m-1 rounded-lg bg-green-600 text-white shadow-xl shadow-primary-500/20"},[Wt(" 发现 "+bt(O.value)+" 个主题更新!【点我查看】 ",1),b("button",{onClick:Be(v,["stop"]),class:"ml-2 px-3 shadow-none"},[...o[8]||(o[8]=[b("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 32 32"},[b("path",{fill:"white",d:"M16 2C8.2 2 2 8.2 2 16s6.2 14 14 14s14-6.2 14-14S23.8 2 16 2m5.4 21L16 17.6L10.6 23L9 21.4l5.4-5.4L9 10.6L10.6 9l5.4 5.4L21.4 9l1.6 1.6l-5.4 5.4l5.4 5.4z"})],-1)])])],512),[[Ot,O.value]])]),b("section",kc,[b("div",Cc,[b("div",Tc,[b("div",Sc,[b("div",Ec,[Ft(ac,{"active-category":A.value,themeList:kt.value,onUpdateActiveCategory:st},null,8,["active-category","themeList","onUpdateActiveCategory"])]),b("div",Ic,[b("div",{class:zt(["grid gap-6 -m-3 ptablet:grid-cols-2 ltablet:grid-cols-3 lg:grid-cols-3",{"!grid-cols-1":Q.value<=768&&Q.value>0,"!grid-cols-2":Q.value>768&&Q.value<1024,"!grid-cols-3":Q.value>1024}])},[k.value&&(!yt.value||yt.value.length===0)?(dt(),pt("div",Ac,[b("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 font-sans font-semibold bg-primary-500 text-white relative px-6 py-3 rounded-lg tw-accessibility hover:bg-primary-600 transition-all duration-300"},[...o[9]||(o[9]=[Vs('<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M3 21v-5h5"></path></svg><span>点击加载主题列表</span>',2)])])])):ue("",!0),(dt(!0),pt(Mt,null,Ke(yt.value,C=>(dt(),pt("div",{key:C.id},[Ft(Oi,{app:e.app,"theme-info":C,isLogin:c.value,onDownloadUpdateTheme:W},null,8,["app","theme-info","isLogin","onDownloadUpdateTheme"])]))),128))],2),b("div",Pc,[b("div",Oc,[M.value?(dt(),pt("button",{key:0,onClick:Ut,class:"w-full inline-flex items-center justify-center gap-2 font-sans font-semibold bg-white dark:bg-muted-700 text-muted-800 dark:text-white border border-muted-300 dark:border-muted-600 relative px-6 py-4 rounded-lg tw-accessibility hover:shadow-xl hover:shadow-muted-400/20 transition-all duration-300"},[...o[10]||(o[10]=[b("div",null,"Load More",-1)])])):ue("",!0)])])])])])])])]),Et(b("div",Dc,[b("div",{class:"max-w-3xl px-6 py-4 mx-auto text-left bg-white rounded shadow-lg dark:bg-muted-700",onClick:tt,"x-transition:enter":"motion-safe:ease-out duration-300","x-transition:enter-start":"opacity-0 scale-90","x-transition:enter-end":"opacity-100 scale-100"},[b("div",{class:"flex items-center justify-between"},[o[12]||(o[12]=b("h5",{class:"mr-3 max-w-none"},null,-1)),b("button",{type:"button",class:"z-50 cursor-pointer",onClick:tt},[...o[11]||(o[11]=[b("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},[b("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])])]),b("section",zc,[b("div",Bc,[b("h3",Lc,[o[13]||(o[13]=b("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",width:"1em",height:"1em",viewBox:"0 0 24 24","data-icon":"line-md:downloading-loop",class:"w-6 h-6 iconify iconify--line-md"},[b("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-width":"2"},[b("path",{"stroke-dasharray":"2 4","stroke-dashoffset":"6",d:"M12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21"},[b("animate",{attributeName:"stroke-dashoffset",dur:"0.6s",repeatCount:"indefinite",values:"6;0"})]),b("path",{"stroke-dasharray":"30","stroke-dashoffset":"30",d:"M12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3"},[b("animate",{fill:"freeze",attributeName:"stroke-dashoffset",begin:"0.1s",dur:"0.3s",values:"30;0"})]),b("path",{"stroke-dasharray":"10","stroke-dashoffset":"10",d:"M12 8v7.5"},[b("animate",{fill:"freeze",attributeName:"stroke-dashoffset",begin:"0.5s",dur:"0.2s",values:"10;0"})]),b("path",{"stroke-dasharray":"6","stroke-dashoffset":"6",d:"M12 15.5l3.5 -3.5M12 15.5l-3.5 -3.5"},[b("animate",{fill:"freeze",attributeName:"stroke-dashoffset",begin:"0.7s",dur:"0.2s",values:"6;0"})])])],-1)),Wt(" 即将安装...."+bt(L.value.toUpperCase()),1)]),o[15]||(o[15]=b("div",null,[b("p",{class:"mb-2 text-base leading-relaxed"}," 注意,安装和更新操作不可逆,请确认后再操作。 ")],-1)),b("div",Mc,[o[14]||(o[14]=b("label",{for:"version-select",class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mr-2"},"选择版本号(默认最新版本):",-1)),Et(b("select",{id:"version-select","onUpdate:modelValue":o[0]||(o[0]=C=>$.value=C),onClick:o[1]||(o[1]=Be(()=>{},["stop"])),class:"mt-1 block w-full px-3 border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 rounded-md shadow-sm focus:outline-none focus:ring-green-500 focus:border-green-500 sm:text-sm text-gray-900 dark:text-gray-100"},[(dt(!0),pt(Mt,null,Ke(n.value,C=>(dt(),pt("option",{key:C,value:C},bt(C)+" "+bt(C===r.value?"(最新版本)":""),9,$c))),128))],512),[[Cs,$.value]])]),b("div",Uc,[b("div",Rc,[b("div",Fc,[h.value?(dt(),pt("h2",{key:0,onClick:K,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 确 认 ")):(dt(),pt("h2",{key:1,onClick:d,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 更 新 "))])]),b("div",{class:"md:p-4 md:w-1/2 flex"},[b("div",{class:"flex-grow"},[b("h2",{onClick:q,class:"block py-4 my-1 font-sans text-base font-medium text-center text-green-500 transition-all duration-300 border rounded-lg cursor-pointer dark:hover:bg-green-300/20 hover:bg-green-100 border-green-700/25"}," 取 消 ")])])])])])])],512),[[Ot,i.value]])],64))}});const Nc={class:"w-full"},Hc={class:"flex flex-wrap md:content-center"},Wc={class:"flex items-center justify-between md:px-8 mx-auto font-sans logo scale-90 md:scale-125 max-w-7xl"},Vc={class:"flex flex-wrap items-center justify-center w-full mx-auto max-w-7xl"},Zc={class:"items-center w-auto gap-6 basis-0"},Kc={href:"https://pkmer.cn",class:"flex items-center gap-3 no-underline text-inherit"},Gc={class:"transition-all duration-300 text-primary-600"},qc={class:"pkmer-tab-container"},Jc={class:"mb-5 flex list-none flex-row flex-wrap border-b-0 pl-0"},Yc={class:"relative cursor-pointer my-2 block border-x-0 border-b-2 border-t-0 border-transparent px-7 pb-3.5 pt-4 font-bold uppercase leading-tight hover:isolate dark:hover:bg-slate-900/30 hover:bg-neutral-100 focus:isolate focus:border-transparent"},Xc={class:"relative cursor-pointer my-2 block border-x-0 border-b-2 border-t-0 border-transparent px-7 pb-3.5 pt-4 font-bold uppercase leading-tight hover:isolate dark:hover:bg-slate-900/30 hover:bg-neutral-100 focus:isolate focus:border-transparent"},Qc={class:"pkmer-tab-content"},td={key:0,class:"opacity-100 transition-opacity duration-150 ease-linear"},ed={key:1,class:"opacity-100 transition-opacity duration-150 ease-linear"},nd=Ie({__name:"PluginMarketView",props:{settings:{},app:{}},setup(t){const e=t,n=ut("plugin"),r=ut(),s=ut({type:"",count:0}),i=l=>{n.value=l};return qn(()=>{r.value=localStorage.getItem("pkmer-update-tab"),r.value!==null&&r.value!==""&&(s.value=JSON.parse(r.value),s.value.type=="tupdated"&&i("theme"))}),vn(()=>{localStorage.removeItem("pkmer-update-tab")}),(l,a)=>(dt(),pt(Mt,null,[b("div",Nc,[b("div",Hc,[b("div",Wc,[b("div",Vc,[b("div",Zc,[b("a",Kc,[b("div",Gc,[(dt(),pt("svg",{class:zt(["fill-current w-7 h-7","w-7 h-7"]),width:"1.75rem",xmlns:"http://www.w3.org/2000/svg",version:"1.1","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:svgjs":"http://svgjs.com/svgjs",viewBox:"0 0 512 512","xml:space":"preserve"},[...a[2]||(a[2]=[Vs('<g><path d="M395.631 98.837C358.783 45.867 309.195 16.696 256 16.696S153.217 45.867 116.369 98.837c-35.565 51.124-55.151 118.797-55.151 190.554 0 113.54 87.379 205.913 194.783 205.913s194.783-92.373 194.783-205.913c-.001-71.756-19.588-139.43-55.153-190.554z" style="" fill="#ffc170" class=""></path><path d="M256 495.304c107.403 0 194.783-92.373 194.783-205.913 0-71.757-19.586-139.43-55.151-190.554C358.783 45.867 309.195 16.696 256 16.696" style="" fill="#e1a05a" data-original="#ffd6a0" class=""></path><path d="M0 128h55.652v33.391H0z" style="" fill="#a0bdd4" class=""></path><path d="M13.053 51.94h55.65v33.391h-55.65z" style="" transform="rotate(-160.527 40.878 68.636)" fill="#a0bdd4" class=""></path><path d="M456.348 128H512v33.391h-55.652z" style="" fill="#a0bdd4" class=""></path><path d="M454.411 40.807h33.391v55.65h-33.391z" style="" transform="rotate(-109.469 471.111 68.636)" fill="#a0bdd4" class=""></path><path d="m187.719 277.315 14.949-29.896-47.598-21.154-93.659 51.085c-.124 4-.194 8.013-.194 12.041 0 8.564.505 17.005 1.471 25.298l93.892-51.214 31.139 13.84zM450.63 278.997l-105.587-52.794-89.463 44.731-22.369-9.942-14.948 29.896 38.155 16.958 88.625-44.31 104.166 52.083a218.592 218.592 0 0 0 1.573-26.228c.001-3.476-.059-6.938-.152-10.394z" style="" fill="#f8f8f8" class=""></path><path d="m450.63 278.997-105.587-52.794-89.463 44.731.839 36.913 88.624-44.31 104.166 52.083a218.592 218.592 0 0 0 1.573-26.228 382.07 382.07 0 0 0-.152-10.395z" style="" fill="#fef5ea" class=""></path></g>',1)])]))]),a[3]||(a[3]=b("span",{class:"font-sans text-lg font-extrabold tracking-widest uppercase whitespace-nowrap feat dark:text-muted-100"},"Obsidian PKMer Market",-1))])])])])])]),b("div",qc,[b("ul",Jc,[b("li",{class:zt(["flex-auto text-center",{active:n.value==="plugin"}]),onClick:a[0]||(a[0]=u=>i("plugin"))},[b("span",Yc,[a[4]||(a[4]=Wt(" 插件市场 ",-1)),Et(b("span",{class:"num bradge"},bt(s.value.count),513),[[Ot,s.value.type=="updated"&&s.value.count>0]])])],2),b("li",{class:zt(["flex-auto text-center relative",{active:n.value==="theme"}]),onClick:a[1]||(a[1]=u=>i("theme"))},[b("span",Xc,[a[5]||(a[5]=Wt(" 主题市场 ",-1)),Et(b("span",{class:"num bradge"},bt(s.value.count),513),[[Ot,s.value.type=="tupdated"&&s.value.count>0]])])],2)]),b("div",Qc,[(dt(),Ln(ga,null,{default:ms(()=>[n.value==="plugin"?(dt(),pt("div",td,[Ft(rc,{settings:e.settings,app:e.app,tab:r.value,"current-tab":n.value},null,8,["settings","app","tab","current-tab"])])):n.value==="theme"?(dt(),pt("div",ed,[Ft(jc,{settings:e.settings,app:e.app,tab:r.value,"current-tab":n.value},null,8,["settings","app","tab","current-tab"])])):ue("",!0)]),fallback:ms(()=>[...a[6]||(a[6]=[b("h1",null,"Loading...",-1),b("h2",null,"如果长时间加载,请确保网络通常,并关闭网络代理。",-1)])]),_:1}))])])],64))}});const Ts="pkmer-downloader";class sd extends ot.ItemView{plugin;settings;constructor(e,n){super(e),this.plugin=n,this.settings=n.settings}getIcon(){return"bookmark"}getDisplayText(){return"Pkmer Market"}getViewType(){return Ts}async onOpen(){const{contentEl:e}=this;console.log("welcome Pkmer Market"),ol(nd,{settings:this.settings,app:this.app}).mount(e)}}class Sr{modal;settingTab;constructor(e){this.settingTab=e;const{remote:n}=require("electron"),{BrowserWindow:r}=n;this.modal=new r({parent:n.getCurrentWindow(),width:630,height:840,show:!1}),this.modal.once("ready-to-show",()=>{this.modal.setTitle("登录Pkmer~"),this.modal.setMenu(null),this.modal.show()}),this.modal.webContents.on("will-navigate",()=>{this.modal.webContents.executeJavaScript("localStorage.getItem('pkmer-token')").then(s=>{s&&(this.settingTab.saveToken(s),this.settingTab.display(),this.modal.close(),this.settingTab.app.workspace.activeLeaf.rebuildView())})})}async doLogin(){try{await this.modal.loadURL("https://pkmer.cn/products/signIn/")}catch(e){console.log(e)}}async Loginout(){try{await this.modal.loadURL("https://pkmer.cn/products/UserProfile/"),this.modal.webContents.executeJavaScript("localStorage.removeItem('pkmer-token')").then(()=>{this.settingTab.saveToken(""),this.settingTab.display(),this.modal.close(),this.settingTab.app.workspace.activeLeaf.rebuildView()})}catch(e){console.log(e),new ot.Notice("你没登录咋退出?")}}onClose(){this.modal.close()}}class rd extends ot.PluginSettingTab{plugin;constructor(e,n){super(e,n),this.plugin=n}display(){const{containerEl:e}=this;e.empty(),e.createEl("h1",{text:"Obsidian PKMer Market"}),e.setAttribute("data-type","pkmer-downloader"),ot.Platform.isDesktopApp&&(this.plugin.settings.token?this.showLoginOut():this.showLogin()),new ot.Setting(e).setName("Token").setDesc("Default token for pkmer downloader").addText(r=>r.setPlaceholder("输入token").setValue(this.plugin.settings.token).setDisabled(!1).onChange(async s=>{this.plugin.settings.token=s,await this.plugin.saveSettings()})),ot.Platform.isDesktopApp&&new ot.Setting(e).setName("Tips").setDesc("如果登录后,仍然提示登录,请退出重新登录PKMER "),ot.Platform.isMobileApp&&new ot.Setting(e).setName("Tips").setDesc("移动端需要您手动在电脑端登录获取token后复制到输入框中 "),new ot.Setting(e).setName("🥚打开PKMer Market").setDesc("点击开始挑选心爱的插件和主题吧").addButton(r=>{r.setIcon("download").setButtonText("进入").setClass("px-5").setCta().onClick(()=>{this.app.setting.close(),setTimeout(()=>{this.plugin.openView("")},100)})}),e.createEl("hr",{cls:"mt-2"});const n=e.createEl("div",{cls:"mt-4"});n.createEl("a",{text:"🥚PKMer.cn",href:"https://pkmer.cn"}),n.createEl("span",{text:" | "}),n.createEl("a",{text:"👤个人中心",href:"https://pkmer.cn/products/UserProfile/"})}showLogin(){new ot.Setting(this.containerEl).setName("登录Pkmer").addButton(e=>e.setButtonText("登录").setCta().onClick(async()=>{e.setDisabled(!0),await new Sr(this).doLogin(),this.display()}))}showLoginOut(){new ot.Setting(this.containerEl).setName("退出登录").addButton(e=>e.setButtonText("退出").setCta().onClick(async()=>{e.setDisabled(!0),await new Sr(this).Loginout(),this.display()}))}saveToken(e){this.plugin.settings.token=e,this.plugin.saveSettings()}}let id=class{constructor(e,n){this.app=e,this.settings=n,this.api=new Me(this.settings.token),this.isUserLogin=!1}api;isUserLogin;async getPluginStatus(){try{if(this.isUserLogin=await this.api.isUserLogin(),!this.isUserLogin)return{installedCount:0,updatedCount:0};const e=Object.keys(this.app.plugins.manifests),n=e.length;if(n===0)return{installedCount:0,updatedCount:0};const{plugins:r}=await this.api.getInstalledPluginsPaginated(e,1,n,"downloadCount","DESC"),s=r.filter(i=>{const l=this.app.plugins.manifests[i.id];return l&&l.version!==i.version}).length;return{installedCount:n,updatedCount:s}}catch(e){return console.error("Error getting plugin status:",e),{installedCount:0,updatedCount:0}}}};class od{constructor(e,n){this.app=e,this.settings=n,this.api=new Me(this.settings.token),this.isUserLogin=!1,this.allThemeList=[],this.isLoaded=!1}api;isUserLogin;allThemeList;isLoaded;async loadAllThemes(){if(!this.isLoaded)try{if(this.isUserLogin=await this.api.isUserLogin(),this.isUserLogin){const e=await this.api.getThemeList();this.allThemeList=Array.isArray(e)?e:[],await this.updateThemeStatus(),this.isLoaded=!0}}catch(e){console.error("Error loading themes:",e)}}async updateThemeStatus(){const e=this.app.customCss.themes;this.allThemeList.forEach(n=>{n.isInstalled=e[n.name]!==void 0,n.isOutdated=n.isInstalled&&e[n.name].version!==n.version})}async getThemeStatus(){await this.loadAllThemes();const e=this.allThemeList.filter(r=>r.isInstalled).length,n=this.allThemeList.filter(r=>r.isOutdated).length;return{tinstalledCount:e,tupdatedCount:n}}}const ad={token:""};class ld extends ot.Plugin{settings;statusBarIconEl;async onload(){await this.loadSettings(),localStorage.removeItem("pkmer-update-tab"),this.registerCustomURI(),this.registerCustomCommands(),this.registerCustomRibbon(),this.addStatusBarIcon(),await this.reloadStatusBarHandler(),this.addSettingTab(new rd(this.app,this)),this.registerView(Ts,e=>new sd(e,this)),addEventListener("reload-statusbar",async()=>{this.reloadStatusBarHandler()})}reloadStatusBarHandler=async()=>{await this.updateStatusBar("")};onunload(){removeEventListener("reload-statusbar",this.reloadStatusBarHandler)}async loadSettings(){this.settings=Object.assign({},ad,await this.loadData())}async saveSettings(){await this.saveData(this.settings)}registerCustomURI(){this.registerObsidianProtocolHandler("pkmer-installer",async e=>{const n=e.pluginID,r=e.themeID,s=e.version;if(!this.settings.token){new ot.Notice("请先登录获取token",5e3),this.app.setting.open(),this.app.setting.openTabById("PKMer");return}if(n)try{new ot.Notice("正在下载插件,请稍后...",3e3),await new Ks(this.app,this.settings).downloadPluginToPluginFolder(n,s)}catch{new ot.Notice("下载失败,请检查网络")}if(r)try{new ot.Notice("正在安装主题,请稍后...",3e3),await new Gs(this.app,this.settings).downloadThemeToThemeFolder(r,s)}catch{new ot.Notice("下载失败,请检查网络")}})}registerCustomCommands(){this.addCommand({id:"open-pkmer-market-view",name:"Open Pkmer Market View",callback:()=>{this.openView("")}})}registerCustomRibbon(){this.addRibbonIcon("download","Open Pkmer Market",()=>{this.openView("")})}addStatusBarIcon(){this.statusBarIconEl=this.addStatusBarItem(),this.statusBarIconEl.addClass("pkmer-statusbar"),this.statusBarIconEl.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rocket"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/></svg>',this.statusBarIconEl.setAttribute("aria-label","PKMer插件市场"),this.registerDomEvent(this.statusBarIconEl,"click",()=>{this.updateStatusBar("statusbar")})}async updateStatusBar(e){const n=new id(this.app,this.settings),r=new od(this.app,this.settings),{installedCount:s,updatedCount:i}=await n.getPluginStatus(),{tinstalledCount:l,tupdatedCount:a}=await r.getThemeStatus();if(i>0||a>0){if(this.statusBarIconEl.setAttribute("aria-label-position","top"),this.statusBarIconEl.setAttribute("aria-label","Updated Info: Plugins: "+i+"/"+s+", Themes: "+a+"/"+l),this.statusBarIconEl.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rocket"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -12px;margin-left: -3px;" width="1em" height="1em" viewBox="0 0 15 15"><path fill="orange" d="M9.875 7.5a2.375 2.375 0 1 1-4.75 0a2.375 2.375 0 0 1 4.75 0"/></svg> `,e==="statusbar")if(i>0){const u={type:"updated",count:i};this.openView(JSON.stringify(u))}else{const u={type:"tupdated",count:a};this.openView(JSON.stringify(u))}}else this.statusBarIconEl.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rocket"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/></svg>',this.statusBarIconEl.setAttribute("aria-label","Updated Info: Plugins: "+i+"/"+s+", Themes: "+a+"/"+l),e==="statusbar"&&this.openView("")}openView(e){let n=!1;this.app.workspace.iterateAllLeaves(r=>{try{if(r.getViewState().type==="pkmer-downloader"){n=!0,localStorage.setItem("pkmer-update-tab",e),setTimeout(()=>{this.app.workspace.setActiveLeaf(r),this.app.workspace.activeLeaf.rebuildView()},300);return}}catch(s){console.error("Error occurred while processing leaf:",s)}}),n||(localStorage.setItem("pkmer-update-tab",e),setTimeout(()=>{this.app.workspace?.getLeaf()?.setViewState({active:!0,type:Ts})},300))}}module.exports=ld;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzLy5wbnBtL0B2dWUrc2hhcmVkQDMuNS4yNC9ub2RlX21vZHVsZXMvQHZ1ZS9zaGFyZWQvZGlzdC9zaGFyZWQuZXNtLWJ1bmRsZXIuanMiLCJub2RlX21vZHVsZXMvLnBucG0vQHZ1ZStyZWFjdGl2aXR5QDMuNS4yNC9ub2RlX21vZHVsZXMvQHZ1ZS9yZWFjdGl2aXR5L2Rpc3QvcmVhY3Rpdml0eS5lc20tYnVuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy8ucG5wbS9AdnVlK3J1bnRpbWUtY29yZUAzLjUuMjQvbm9kZV9tb2R1bGVzL0B2dWUvcnVudGltZS1jb3JlL2Rpc3QvcnVudGltZS1jb3JlLmVzbS1idW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzLy5wbnBtL0B2dWUrcnVudGltZS1kb21AMy41LjI0L25vZGVfbW9kdWxlcy9AdnVlL3J1bnRpbWUtZG9tL2Rpc3QvcnVudGltZS1kb20uZXNtLWJ1bmRsZXIuanMiLCJzcmMvY29tcG9uZW50cy9wbHVnaW4vVG9vbGJhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50cyIsInNyYy9jb21wb25lbnRzL3BsdWdpbi9QbHVnaW5DYXJkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzIiwic3JjL2NvbXBvbmVudHMvdGhlbWUvVGhlbWVDYXJkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzIiwic3JjL2FwaS9hcGkudHMiLCJub2RlX21vZHVsZXMvLnBucG0vanN6aXBAMy4xMC4xL25vZGVfbW9kdWxlcy9qc3ppcC9kaXN0L2pzemlwLm1pbi5qcyIsInNyYy91dGlscy9kb3dubG9hZGVyLnRzIiwic3JjL2NvbXBvbmVudHMvY29tbW9uL0hlYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHMiLCJzcmMvdXRpbHMvdGRvd25sb2FkZXIudHMiLCJzcmMvY29tcG9uZW50cy9wbHVnaW4vUGx1Z2luTWFya2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzIiwic3JjL2NvbXBvbmVudHMvdGhlbWUvVGhlbWVUb29sYmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzIiwic3JjL2NvbXBvbmVudHMvdGhlbWUvVGhlbWVNYXJrZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHMiLCJzcmMvdmlld3MvUGx1Z2luTWFya2V0Vmlldy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50cyIsInNyYy92aWV3cy9QbHVnaW5NYXJrZXQudHMiLCJzcmMvY29tcG9uZW50cy9sb2dpbi9Qa21lckxvZ2luTW9kYWwudHMiLCJzcmMvc2V0dGluZ3MudHMiLCJzcmMvdXRpbHMvcGx1Z2luc3RhdGlzdGljcy50cyIsInNyYy91dGlscy90aGVtZXN0YXRpc3RpY3MudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiogQHZ1ZS9zaGFyZWQgdjMuNS4yNFxuKiAoYykgMjAxOC1wcmVzZW50IFl1eGkgKEV2YW4pIFlvdSBhbmQgVnVlIGNvbnRyaWJ1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmZ1bmN0aW9uIG1ha2VNYXAoc3RyKSB7XG4gIGNvbnN0IG1hcCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBzdHIuc3BsaXQoXCIsXCIpKSBtYXBba2V5XSA9IDE7XG4gIHJldHVybiAodmFsKSA9PiB2YWwgaW4gbWFwO1xufVxuXG5jb25zdCBFTVBUWV9PQkogPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiB7fTtcbmNvbnN0IEVNUFRZX0FSUiA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBPYmplY3QuZnJlZXplKFtdKSA6IFtdO1xuY29uc3QgTk9PUCA9ICgpID0+IHtcbn07XG5jb25zdCBOTyA9ICgpID0+IGZhbHNlO1xuY29uc3QgaXNPbiA9IChrZXkpID0+IGtleS5jaGFyQ29kZUF0KDApID09PSAxMTEgJiYga2V5LmNoYXJDb2RlQXQoMSkgPT09IDExMCAmJiAvLyB1cHBlcmNhc2UgbGV0dGVyXG4oa2V5LmNoYXJDb2RlQXQoMikgPiAxMjIgfHwga2V5LmNoYXJDb2RlQXQoMikgPCA5Nyk7XG5jb25zdCBpc01vZGVsTGlzdGVuZXIgPSAoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aChcIm9uVXBkYXRlOlwiKTtcbmNvbnN0IGV4dGVuZCA9IE9iamVjdC5hc3NpZ247XG5jb25zdCByZW1vdmUgPSAoYXJyLCBlbCkgPT4ge1xuICBjb25zdCBpID0gYXJyLmluZGV4T2YoZWwpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgYXJyLnNwbGljZShpLCAxKTtcbiAgfVxufTtcbmNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmNvbnN0IGhhc093biA9ICh2YWwsIGtleSkgPT4gaGFzT3duUHJvcGVydHkuY2FsbCh2YWwsIGtleSk7XG5jb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmNvbnN0IGlzTWFwID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09IFwiW29iamVjdCBNYXBdXCI7XG5jb25zdCBpc1NldCA9ICh2YWwpID0+IHRvVHlwZVN0cmluZyh2YWwpID09PSBcIltvYmplY3QgU2V0XVwiO1xuY29uc3QgaXNEYXRlID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09IFwiW29iamVjdCBEYXRlXVwiO1xuY29uc3QgaXNSZWdFeHAgPSAodmFsKSA9PiB0b1R5cGVTdHJpbmcodmFsKSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbmNvbnN0IGlzRnVuY3Rpb24gPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCI7XG5jb25zdCBpc1N0cmluZyA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCI7XG5jb25zdCBpc1N5bWJvbCA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwic3ltYm9sXCI7XG5jb25zdCBpc09iamVjdCA9ICh2YWwpID0+IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiO1xuY29uc3QgaXNQcm9taXNlID0gKHZhbCkgPT4ge1xuICByZXR1cm4gKGlzT2JqZWN0KHZhbCkgfHwgaXNGdW5jdGlvbih2YWwpKSAmJiBpc0Z1bmN0aW9uKHZhbC50aGVuKSAmJiBpc0Z1bmN0aW9uKHZhbC5jYXRjaCk7XG59O1xuY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuY29uc3QgdG9UeXBlU3RyaW5nID0gKHZhbHVlKSA9PiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbmNvbnN0IHRvUmF3VHlwZSA9ICh2YWx1ZSkgPT4ge1xuICByZXR1cm4gdG9UeXBlU3RyaW5nKHZhbHVlKS5zbGljZSg4LCAtMSk7XG59O1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHRvVHlwZVN0cmluZyh2YWwpID09PSBcIltvYmplY3QgT2JqZWN0XVwiO1xuY29uc3QgaXNJbnRlZ2VyS2V5ID0gKGtleSkgPT4gaXNTdHJpbmcoa2V5KSAmJiBrZXkgIT09IFwiTmFOXCIgJiYga2V5WzBdICE9PSBcIi1cIiAmJiBcIlwiICsgcGFyc2VJbnQoa2V5LCAxMCkgPT09IGtleTtcbmNvbnN0IGlzUmVzZXJ2ZWRQcm9wID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXG4gIC8vIHRoZSBsZWFkaW5nIGNvbW1hIGlzIGludGVudGlvbmFsIHNvIGVtcHR5IHN0cmluZyBcIlwiIGlzIGFsc28gaW5jbHVkZWRcbiAgXCIsa2V5LHJlZixyZWZfZm9yLHJlZl9rZXksb25Wbm9kZUJlZm9yZU1vdW50LG9uVm5vZGVNb3VudGVkLG9uVm5vZGVCZWZvcmVVcGRhdGUsb25Wbm9kZVVwZGF0ZWQsb25Wbm9kZUJlZm9yZVVubW91bnQsb25Wbm9kZVVubW91bnRlZFwiXG4pO1xuY29uc3QgaXNCdWlsdEluRGlyZWN0aXZlID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXG4gIFwiYmluZCxjbG9hayxlbHNlLWlmLGVsc2UsZm9yLGh0bWwsaWYsbW9kZWwsb24sb25jZSxwcmUsc2hvdyxzbG90LHRleHQsbWVtb1wiXG4pO1xuY29uc3QgY2FjaGVTdHJpbmdGdW5jdGlvbiA9IChmbikgPT4ge1xuICBjb25zdCBjYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gKChzdHIpID0+IHtcbiAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdO1xuICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcbiAgfSk7XG59O1xuY29uc3QgY2FtZWxpemVSRSA9IC8tXFx3L2c7XG5jb25zdCBjYW1lbGl6ZSA9IGNhY2hlU3RyaW5nRnVuY3Rpb24oXG4gIChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgKGMpID0+IGMuc2xpY2UoMSkudG9VcHBlckNhc2UoKSk7XG4gIH1cbik7XG5jb25zdCBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG5jb25zdCBoeXBoZW5hdGUgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKFxuICAoc3RyKSA9PiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgXCItJDFcIikudG9Mb3dlckNhc2UoKVxuKTtcbmNvbnN0IGNhcGl0YWxpemUgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn0pO1xuY29uc3QgdG9IYW5kbGVyS2V5ID0gY2FjaGVTdHJpbmdGdW5jdGlvbihcbiAgKHN0cikgPT4ge1xuICAgIGNvbnN0IHMgPSBzdHIgPyBgb24ke2NhcGl0YWxpemUoc3RyKX1gIDogYGA7XG4gICAgcmV0dXJuIHM7XG4gIH1cbik7XG5jb25zdCBoYXNDaGFuZ2VkID0gKHZhbHVlLCBvbGRWYWx1ZSkgPT4gIU9iamVjdC5pcyh2YWx1ZSwgb2xkVmFsdWUpO1xuY29uc3QgaW52b2tlQXJyYXlGbnMgPSAoZm5zLCAuLi5hcmcpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICBmbnNbaV0oLi4uYXJnKTtcbiAgfVxufTtcbmNvbnN0IGRlZiA9IChvYmosIGtleSwgdmFsdWUsIHdyaXRhYmxlID0gZmFsc2UpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlLFxuICAgIHZhbHVlXG4gIH0pO1xufTtcbmNvbnN0IGxvb3NlVG9OdW1iZXIgPSAodmFsKSA9PiB7XG4gIGNvbnN0IG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XG59O1xuY29uc3QgdG9OdW1iZXIgPSAodmFsKSA9PiB7XG4gIGNvbnN0IG4gPSBpc1N0cmluZyh2YWwpID8gTnVtYmVyKHZhbCkgOiBOYU47XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XG59O1xubGV0IF9nbG9iYWxUaGlzO1xuY29uc3QgZ2V0R2xvYmFsVGhpcyA9ICgpID0+IHtcbiAgcmV0dXJuIF9nbG9iYWxUaGlzIHx8IChfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDoge30pO1xufTtcbmNvbnN0IGlkZW50UkUgPSAvXltfJGEtekEtWlxceEEwLVxcdUZGRkZdW18kYS16QS1aMC05XFx4QTAtXFx1RkZGRl0qJC87XG5mdW5jdGlvbiBnZW5Qcm9wc0FjY2Vzc0V4cChuYW1lKSB7XG4gIHJldHVybiBpZGVudFJFLnRlc3QobmFtZSkgPyBgX19wcm9wcy4ke25hbWV9YCA6IGBfX3Byb3BzWyR7SlNPTi5zdHJpbmdpZnkobmFtZSl9XWA7XG59XG5mdW5jdGlvbiBnZW5DYWNoZUtleShzb3VyY2UsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNvdXJjZSArIEpTT04uc3RyaW5naWZ5KFxuICAgIG9wdGlvbnMsXG4gICAgKF8sIHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gXCJmdW5jdGlvblwiID8gdmFsLnRvU3RyaW5nKCkgOiB2YWxcbiAgKTtcbn1cblxuY29uc3QgUGF0Y2hGbGFncyA9IHtcbiAgXCJURVhUXCI6IDEsXG4gIFwiMVwiOiBcIlRFWFRcIixcbiAgXCJDTEFTU1wiOiAyLFxuICBcIjJcIjogXCJDTEFTU1wiLFxuICBcIlNUWUxFXCI6IDQsXG4gIFwiNFwiOiBcIlNUWUxFXCIsXG4gIFwiUFJPUFNcIjogOCxcbiAgXCI4XCI6IFwiUFJPUFNcIixcbiAgXCJGVUxMX1BST1BTXCI6IDE2LFxuICBcIjE2XCI6IFwiRlVMTF9QUk9QU1wiLFxuICBcIk5FRURfSFlEUkFUSU9OXCI6IDMyLFxuICBcIjMyXCI6IFwiTkVFRF9IWURSQVRJT05cIixcbiAgXCJTVEFCTEVfRlJBR01FTlRcIjogNjQsXG4gIFwiNjRcIjogXCJTVEFCTEVfRlJBR01FTlRcIixcbiAgXCJLRVlFRF9GUkFHTUVOVFwiOiAxMjgsXG4gIFwiMTI4XCI6IFwiS0VZRURfRlJBR01FTlRcIixcbiAgXCJVTktFWUVEX0ZSQUdNRU5UXCI6IDI1NixcbiAgXCIyNTZcIjogXCJVTktFWUVEX0ZSQUdNRU5UXCIsXG4gIFwiTkVFRF9QQVRDSFwiOiA1MTIsXG4gIFwiNTEyXCI6IFwiTkVFRF9QQVRDSFwiLFxuICBcIkRZTkFNSUNfU0xPVFNcIjogMTAyNCxcbiAgXCIxMDI0XCI6IFwiRFlOQU1JQ19TTE9UU1wiLFxuICBcIkRFVl9ST09UX0ZSQUdNRU5UXCI6IDIwNDgsXG4gIFwiMjA0OFwiOiBcIkRFVl9ST09UX0ZSQUdNRU5UXCIsXG4gIFwiQ0FDSEVEXCI6IC0xLFxuICBcIi0xXCI6IFwiQ0FDSEVEXCIsXG4gIFwiQkFJTFwiOiAtMixcbiAgXCItMlwiOiBcIkJBSUxcIlxufTtcbmNvbnN0IFBhdGNoRmxhZ05hbWVzID0ge1xuICBbMV06IGBURVhUYCxcbiAgWzJdOiBgQ0xBU1NgLFxuICBbNF06IGBTVFlMRWAsXG4gIFs4XTogYFBST1BTYCxcbiAgWzE2XTogYEZVTExfUFJPUFNgLFxuICBbMzJdOiBgTkVFRF9IWURSQVRJT05gLFxuICBbNjRdOiBgU1RBQkxFX0ZSQUdNRU5UYCxcbiAgWzEyOF06IGBLRVlFRF9GUkFHTUVOVGAsXG4gIFsyNTZdOiBgVU5LRVlFRF9GUkFHTUVOVGAsXG4gIFs1MTJdOiBgTkVFRF9QQVRDSGAsXG4gIFsxMDI0XTogYERZTkFNSUNfU0xPVFNgLFxuICBbMjA0OF06IGBERVZfUk9PVF9GUkFHTUVOVGAsXG4gIFstMV06IGBDQUNIRURgLFxuICBbLTJdOiBgQkFJTGBcbn07XG5cbmNvbnN0IFNoYXBlRmxhZ3MgPSB7XG4gIFwiRUxFTUVOVFwiOiAxLFxuICBcIjFcIjogXCJFTEVNRU5UXCIsXG4gIFwiRlVOQ1RJT05BTF9DT01QT05FTlRcIjogMixcbiAgXCIyXCI6IFwiRlVOQ1RJT05BTF9DT01QT05FTlRcIixcbiAgXCJTVEFURUZVTF9DT01QT05FTlRcIjogNCxcbiAgXCI0XCI6IFwiU1RBVEVGVUxfQ09NUE9ORU5UXCIsXG4gIFwiVEVYVF9DSElMRFJFTlwiOiA4LFxuICBcIjhcIjogXCJURVhUX0NISUxEUkVOXCIsXG4gIFwiQVJSQVlfQ0hJTERSRU5cIjogMTYsXG4gIFwiMTZcIjogXCJBUlJBWV9DSElMRFJFTlwiLFxuICBcIlNMT1RTX0NISUxEUkVOXCI6IDMyLFxuICBcIjMyXCI6IFwiU0xPVFNfQ0hJTERSRU5cIixcbiAgXCJURUxFUE9SVFwiOiA2NCxcbiAgXCI2NFwiOiBcIlRFTEVQT1JUXCIsXG4gIFwiU1VTUEVOU0VcIjogMTI4LFxuICBcIjEyOFwiOiBcIlNVU1BFTlNFXCIsXG4gIFwiQ09NUE9ORU5UX1NIT1VMRF9LRUVQX0FMSVZFXCI6IDI1NixcbiAgXCIyNTZcIjogXCJDT01QT05FTlRfU0hPVUxEX0tFRVBfQUxJVkVcIixcbiAgXCJDT01QT05FTlRfS0VQVF9BTElWRVwiOiA1MTIsXG4gIFwiNTEyXCI6IFwiQ09NUE9ORU5UX0tFUFRfQUxJVkVcIixcbiAgXCJDT01QT05FTlRcIjogNixcbiAgXCI2XCI6IFwiQ09NUE9ORU5UXCJcbn07XG5cbmNvbnN0IFNsb3RGbGFncyA9IHtcbiAgXCJTVEFCTEVcIjogMSxcbiAgXCIxXCI6IFwiU1RBQkxFXCIsXG4gIFwiRFlOQU1JQ1wiOiAyLFxuICBcIjJcIjogXCJEWU5BTUlDXCIsXG4gIFwiRk9SV0FSREVEXCI6IDMsXG4gIFwiM1wiOiBcIkZPUldBUkRFRFwiXG59O1xuY29uc3Qgc2xvdEZsYWdzVGV4dCA9IHtcbiAgWzFdOiBcIlNUQUJMRVwiLFxuICBbMl06IFwiRFlOQU1JQ1wiLFxuICBbM106IFwiRk9SV0FSREVEXCJcbn07XG5cbmNvbnN0IEdMT0JBTFNfQUxMT1dFRCA9IFwiSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LGNvbnNvbGUsRXJyb3IsU3ltYm9sXCI7XG5jb25zdCBpc0dsb2JhbGx5QWxsb3dlZCA9IC8qIEBfX1BVUkVfXyAqLyBtYWtlTWFwKEdMT0JBTFNfQUxMT1dFRCk7XG5jb25zdCBpc0dsb2JhbGx5V2hpdGVsaXN0ZWQgPSBpc0dsb2JhbGx5QWxsb3dlZDtcblxuY29uc3QgcmFuZ2UgPSAyO1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2RlRnJhbWUoc291cmNlLCBzdGFydCA9IDAsIGVuZCA9IHNvdXJjZS5sZW5ndGgpIHtcbiAgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzdGFydCwgc291cmNlLmxlbmd0aCkpO1xuICBlbmQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlbmQsIHNvdXJjZS5sZW5ndGgpKTtcbiAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gXCJcIjtcbiAgbGV0IGxpbmVzID0gc291cmNlLnNwbGl0KC8oXFxyP1xcbikvKTtcbiAgY29uc3QgbmV3bGluZVNlcXVlbmNlcyA9IGxpbmVzLmZpbHRlcigoXywgaWR4KSA9PiBpZHggJSAyID09PSAxKTtcbiAgbGluZXMgPSBsaW5lcy5maWx0ZXIoKF8sIGlkeCkgPT4gaWR4ICUgMiA9PT0gMCk7XG4gIGxldCBjb3VudCA9IDA7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY291bnQgKz0gbGluZXNbaV0ubGVuZ3RoICsgKG5ld2xpbmVTZXF1ZW5jZXNbaV0gJiYgbmV3bGluZVNlcXVlbmNlc1tpXS5sZW5ndGggfHwgMCk7XG4gICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XG4gICAgICBmb3IgKGxldCBqID0gaSAtIHJhbmdlOyBqIDw9IGkgKyByYW5nZSB8fCBlbmQgPiBjb3VudDsgaisrKSB7XG4gICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBqICsgMTtcbiAgICAgICAgcmVzLnB1c2goXG4gICAgICAgICAgYCR7bGluZX0ke1wiIFwiLnJlcGVhdChNYXRoLm1heCgzIC0gU3RyaW5nKGxpbmUpLmxlbmd0aCwgMCkpfXwgICR7bGluZXNbal19YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0gbGluZXNbal0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBuZXdMaW5lU2VxTGVuZ3RoID0gbmV3bGluZVNlcXVlbmNlc1tqXSAmJiBuZXdsaW5lU2VxdWVuY2VzW2pdLmxlbmd0aCB8fCAwO1xuICAgICAgICBpZiAoaiA9PT0gaSkge1xuICAgICAgICAgIGNvbnN0IHBhZCA9IHN0YXJ0IC0gKGNvdW50IC0gKGxpbmVMZW5ndGggKyBuZXdMaW5lU2VxTGVuZ3RoKSk7XG4gICAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgZW5kID4gY291bnQgPyBsaW5lTGVuZ3RoIC0gcGFkIDogZW5kIC0gc3RhcnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlcy5wdXNoKGAgICB8ICBgICsgXCIgXCIucmVwZWF0KHBhZCkgKyBcIl5cIi5yZXBlYXQobGVuZ3RoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaiA+IGkpIHtcbiAgICAgICAgICBpZiAoZW5kID4gY291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KE1hdGgubWluKGVuZCAtIGNvdW50LCBsaW5lTGVuZ3RoKSwgMSk7XG4gICAgICAgICAgICByZXMucHVzaChgICAgfCAgYCArIFwiXlwiLnJlcGVhdChsZW5ndGgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY291bnQgKz0gbGluZUxlbmd0aCArIG5ld0xpbmVTZXFMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzLmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlKHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZVtpXTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBpc1N0cmluZyhpdGVtKSA/IHBhcnNlU3RyaW5nU3R5bGUoaXRlbSkgOiBub3JtYWxpemVTdHlsZShpdGVtKTtcbiAgICAgIGlmIChub3JtYWxpemVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgICByZXNba2V5XSA9IG5vcm1hbGl6ZWRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmNvbnN0IGxpc3REZWxpbWl0ZXJSRSA9IC87KD8hW14oXSpcXCkpL2c7XG5jb25zdCBwcm9wZXJ0eURlbGltaXRlclJFID0gLzooW15dKykvO1xuY29uc3Qgc3R5bGVDb21tZW50UkUgPSAvXFwvXFwqW15dKj9cXCpcXC8vZztcbmZ1bmN0aW9uIHBhcnNlU3RyaW5nU3R5bGUoY3NzVGV4dCkge1xuICBjb25zdCByZXQgPSB7fTtcbiAgY3NzVGV4dC5yZXBsYWNlKHN0eWxlQ29tbWVudFJFLCBcIlwiKS5zcGxpdChsaXN0RGVsaW1pdGVyUkUpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgY29uc3QgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlclJFKTtcbiAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXRbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5U3R5bGUoc3R5bGVzKSB7XG4gIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgaWYgKGlzU3RyaW5nKHN0eWxlcykpIHJldHVybiBzdHlsZXM7XG4gIGxldCByZXQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHN0eWxlc1trZXldO1xuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0ga2V5LnN0YXJ0c1dpdGgoYC0tYCkgPyBrZXkgOiBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIHJldCArPSBgJHtub3JtYWxpemVkS2V5fToke3ZhbHVlfTtgO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3ModmFsdWUpIHtcbiAgbGV0IHJlcyA9IFwiXCI7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXMgPSB2YWx1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVDbGFzcyh2YWx1ZVtpXSk7XG4gICAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgICByZXMgKz0gbm9ybWFsaXplZCArIFwiIFwiO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZVtuYW1lXSkge1xuICAgICAgICByZXMgKz0gbmFtZSArIFwiIFwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzLnRyaW0oKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzKHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHJldHVybiBudWxsO1xuICBsZXQgeyBjbGFzczoga2xhc3MsIHN0eWxlIH0gPSBwcm9wcztcbiAgaWYgKGtsYXNzICYmICFpc1N0cmluZyhrbGFzcykpIHtcbiAgICBwcm9wcy5jbGFzcyA9IG5vcm1hbGl6ZUNsYXNzKGtsYXNzKTtcbiAgfVxuICBpZiAoc3R5bGUpIHtcbiAgICBwcm9wcy5zdHlsZSA9IG5vcm1hbGl6ZVN0eWxlKHN0eWxlKTtcbiAgfVxuICByZXR1cm4gcHJvcHM7XG59XG5cbmNvbnN0IEhUTUxfVEFHUyA9IFwiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaGdyb3VwLGgxLGgyLGgzLGg0LGg1LGg2LG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LHN1bW1hcnksdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3RcIjtcbmNvbnN0IFNWR19UQUdTID0gXCJzdmcsYW5pbWF0ZSxhbmltYXRlTW90aW9uLGFuaW1hdGVUcmFuc2Zvcm0sY2lyY2xlLGNsaXBQYXRoLGNvbG9yLXByb2ZpbGUsZGVmcyxkZXNjLGRpc2NhcmQsZWxsaXBzZSxmZUJsZW5kLGZlQ29sb3JNYXRyaXgsZmVDb21wb25lbnRUcmFuc2ZlcixmZUNvbXBvc2l0ZSxmZUNvbnZvbHZlTWF0cml4LGZlRGlmZnVzZUxpZ2h0aW5nLGZlRGlzcGxhY2VtZW50TWFwLGZlRGlzdGFudExpZ2h0LGZlRHJvcFNoYWRvdyxmZUZsb29kLGZlRnVuY0EsZmVGdW5jQixmZUZ1bmNHLGZlRnVuY1IsZmVHYXVzc2lhbkJsdXIsZmVJbWFnZSxmZU1lcmdlLGZlTWVyZ2VOb2RlLGZlTW9ycGhvbG9neSxmZU9mZnNldCxmZVBvaW50TGlnaHQsZmVTcGVjdWxhckxpZ2h0aW5nLGZlU3BvdExpZ2h0LGZlVGlsZSxmZVR1cmJ1bGVuY2UsZmlsdGVyLGZvcmVpZ25PYmplY3QsZyxoYXRjaCxoYXRjaHBhdGgsaW1hZ2UsbGluZSxsaW5lYXJHcmFkaWVudCxtYXJrZXIsbWFzayxtZXNoLG1lc2hncmFkaWVudCxtZXNocGF0Y2gsbWVzaHJvdyxtZXRhZGF0YSxtcGF0aCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyYWRpYWxHcmFkaWVudCxyZWN0LHNldCxzb2xpZGNvbG9yLHN0b3Asc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRQYXRoLHRpdGxlLHRzcGFuLHVua25vd24sdXNlLHZpZXdcIjtcbmNvbnN0IE1BVEhfVEFHUyA9IFwiYW5ub3RhdGlvbixhbm5vdGF0aW9uLXhtbCxtYWN0aW9uLG1hbGlnbmdyb3VwLG1hbGlnbm1hcmssbWF0aCxtZW5jbG9zZSxtZXJyb3IsbWZlbmNlZCxtZnJhYyxtZnJhY3Rpb24sbWdseXBoLG1pLG1sYWJlbGVkdHIsbWxvbmdkaXYsbW11bHRpc2NyaXB0cyxtbixtbyxtb3ZlcixtcGFkZGVkLG1waGFudG9tLG1wcmVzY3JpcHRzLG1yb290LG1yb3csbXMsbXNjYXJyaWVzLG1zY2FycnksbXNncm91cCxtc2xpbmUsbXNwYWNlLG1zcXJ0LG1zcm93LG1zdGFjayxtc3R5bGUsbXN1Yixtc3Vic3VwLG1zdXAsbXRhYmxlLG10ZCxtdGV4dCxtdHIsbXVuZGVyLG11bmRlcm92ZXIsbm9uZSxzZW1hbnRpY3NcIjtcbmNvbnN0IFZPSURfVEFHUyA9IFwiYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxocixpbWcsaW5wdXQsbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnJcIjtcbmNvbnN0IGlzSFRNTFRhZyA9IC8qIEBfX1BVUkVfXyAqLyBtYWtlTWFwKEhUTUxfVEFHUyk7XG5jb25zdCBpc1NWR1RhZyA9IC8qIEBfX1BVUkVfXyAqLyBtYWtlTWFwKFNWR19UQUdTKTtcbmNvbnN0IGlzTWF0aE1MVGFnID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoTUFUSF9UQUdTKTtcbmNvbnN0IGlzVm9pZFRhZyA9IC8qIEBfX1BVUkVfXyAqLyBtYWtlTWFwKFZPSURfVEFHUyk7XG5cbmNvbnN0IHNwZWNpYWxCb29sZWFuQXR0cnMgPSBgaXRlbXNjb3BlLGFsbG93ZnVsbHNjcmVlbixmb3Jtbm92YWxpZGF0ZSxpc21hcCxub21vZHVsZSxub3ZhbGlkYXRlLHJlYWRvbmx5YDtcbmNvbnN0IGlzU3BlY2lhbEJvb2xlYW5BdHRyID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoc3BlY2lhbEJvb2xlYW5BdHRycyk7XG5jb25zdCBpc0Jvb2xlYW5BdHRyID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXG4gIHNwZWNpYWxCb29sZWFuQXR0cnMgKyBgLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjb250cm9scyxkZWZhdWx0LGRlZmVyLGRpc2FibGVkLGhpZGRlbixpbmVydCxsb29wLG9wZW4scmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLGNoZWNrZWQsbXV0ZWQsbXVsdGlwbGUsc2VsZWN0ZWRgXG4pO1xuZnVuY3Rpb24gaW5jbHVkZUJvb2xlYW5BdHRyKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlIHx8IHZhbHVlID09PSBcIlwiO1xufVxuY29uc3QgdW5zYWZlQXR0ckNoYXJSRSA9IC9bPi89XCInXFx1MDAwOVxcdTAwMGFcXHUwMDBjXFx1MDAyMF0vO1xuY29uc3QgYXR0clZhbGlkYXRpb25DYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNTU1JTYWZlQXR0ck5hbWUobmFtZSkge1xuICBpZiAoYXR0clZhbGlkYXRpb25DYWNoZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIHJldHVybiBhdHRyVmFsaWRhdGlvbkNhY2hlW25hbWVdO1xuICB9XG4gIGNvbnN0IGlzVW5zYWZlID0gdW5zYWZlQXR0ckNoYXJSRS50ZXN0KG5hbWUpO1xuICBpZiAoaXNVbnNhZmUpIHtcbiAgICBjb25zb2xlLmVycm9yKGB1bnNhZmUgYXR0cmlidXRlIG5hbWU6ICR7bmFtZX1gKTtcbiAgfVxuICByZXR1cm4gYXR0clZhbGlkYXRpb25DYWNoZVtuYW1lXSA9ICFpc1Vuc2FmZTtcbn1cbmNvbnN0IHByb3BzVG9BdHRyTWFwID0ge1xuICBhY2NlcHRDaGFyc2V0OiBcImFjY2VwdC1jaGFyc2V0XCIsXG4gIGNsYXNzTmFtZTogXCJjbGFzc1wiLFxuICBodG1sRm9yOiBcImZvclwiLFxuICBodHRwRXF1aXY6IFwiaHR0cC1lcXVpdlwiXG59O1xuY29uc3QgaXNLbm93bkh0bWxBdHRyID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXG4gIGBhY2NlcHQsYWNjZXB0LWNoYXJzZXQsYWNjZXNza2V5LGFjdGlvbixhbGlnbixhbGxvdyxhbHQsYXN5bmMsYXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLGF1dG9mb2N1cyxhdXRvcGxheSxiYWNrZ3JvdW5kLGJnY29sb3IsYm9yZGVyLGJ1ZmZlcmVkLGNhcHR1cmUsY2hhbGxlbmdlLGNoYXJzZXQsY2hlY2tlZCxjaXRlLGNsYXNzLGNvZGUsY29kZWJhc2UsY29sb3IsY29scyxjb2xzcGFuLGNvbnRlbnQsY29udGVudGVkaXRhYmxlLGNvbnRleHRtZW51LGNvbnRyb2xzLGNvb3Jkcyxjcm9zc29yaWdpbixjc3AsZGF0YSxkYXRldGltZSxkZWNvZGluZyxkZWZhdWx0LGRlZmVyLGRpcixkaXJuYW1lLGRpc2FibGVkLGRvd25sb2FkLGRyYWdnYWJsZSxkcm9wem9uZSxlbmN0eXBlLGVudGVya2V5aGludCxmb3IsZm9ybSxmb3JtYWN0aW9uLGZvcm1lbmN0eXBlLGZvcm1tZXRob2QsZm9ybW5vdmFsaWRhdGUsZm9ybXRhcmdldCxoZWFkZXJzLGhlaWdodCxoaWRkZW4saGlnaCxocmVmLGhyZWZsYW5nLGh0dHAtZXF1aXYsaWNvbixpZCxpbXBvcnRhbmNlLGluZXJ0LGludGVncml0eSxpc21hcCxpdGVtcHJvcCxrZXl0eXBlLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb2FkaW5nLGxpc3QsbG9vcCxsb3csbWFuaWZlc3QsbWF4LG1heGxlbmd0aCxtaW5sZW5ndGgsbWVkaWEsbWluLG11bHRpcGxlLG11dGVkLG5hbWUsbm92YWxpZGF0ZSxvcGVuLG9wdGltdW0scGF0dGVybixwaW5nLHBsYWNlaG9sZGVyLHBvc3RlcixwcmVsb2FkLHJhZGlvZ3JvdXAscmVhZG9ubHkscmVmZXJyZXJwb2xpY3kscmVsLHJlcXVpcmVkLHJldmVyc2VkLHJvd3Mscm93c3BhbixzYW5kYm94LHNjb3BlLHNjb3BlZCxzZWxlY3RlZCxzaGFwZSxzaXplLHNpemVzLHNsb3Qsc3BhbixzcGVsbGNoZWNrLHNyYyxzcmNkb2Msc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3RlcCxzdHlsZSxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsdWUsd2lkdGgsd3JhcGBcbik7XG5jb25zdCBpc0tub3duU3ZnQXR0ciA9IC8qIEBfX1BVUkVfXyAqLyBtYWtlTWFwKFxuICBgeG1sbnMsYWNjZW50LWhlaWdodCxhY2N1bXVsYXRlLGFkZGl0aXZlLGFsaWdubWVudC1iYXNlbGluZSxhbHBoYWJldGljLGFtcGxpdHVkZSxhcmFiaWMtZm9ybSxhc2NlbnQsYXR0cmlidXRlTmFtZSxhdHRyaWJ1dGVUeXBlLGF6aW11dGgsYmFzZUZyZXF1ZW5jeSxiYXNlbGluZS1zaGlmdCxiYXNlUHJvZmlsZSxiYm94LGJlZ2luLGJpYXMsYnksY2FsY01vZGUsY2FwLWhlaWdodCxjbGFzcyxjbGlwLGNsaXBQYXRoVW5pdHMsY2xpcC1wYXRoLGNsaXAtcnVsZSxjb2xvcixjb2xvci1pbnRlcnBvbGF0aW9uLGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyxjb2xvci1wcm9maWxlLGNvbG9yLXJlbmRlcmluZyxjb250ZW50U2NyaXB0VHlwZSxjb250ZW50U3R5bGVUeXBlLGNyb3Nzb3JpZ2luLGN1cnNvcixjeCxjeSxkLGRlY2VsZXJhdGUsZGVzY2VudCxkaWZmdXNlQ29uc3RhbnQsZGlyZWN0aW9uLGRpc3BsYXksZGl2aXNvcixkb21pbmFudC1iYXNlbGluZSxkdXIsZHgsZHksZWRnZU1vZGUsZWxldmF0aW9uLGVuYWJsZS1iYWNrZ3JvdW5kLGVuZCxleHBvbmVudCxmaWxsLGZpbGwtb3BhY2l0eSxmaWxsLXJ1bGUsZmlsdGVyLGZpbHRlclJlcyxmaWx0ZXJVbml0cyxmbG9vZC1jb2xvcixmbG9vZC1vcGFjaXR5LGZvbnQtZmFtaWx5LGZvbnQtc2l6ZSxmb250LXNpemUtYWRqdXN0LGZvbnQtc3RyZXRjaCxmb250LXN0eWxlLGZvbnQtdmFyaWFudCxmb250LXdlaWdodCxmb3JtYXQsZnJvbSxmcixmeCxmeSxnMSxnMixnbHlwaC1uYW1lLGdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwsZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwsZ2x5cGhSZWYsZ3JhZGllbnRUcmFuc2Zvcm0sZ3JhZGllbnRVbml0cyxoYW5naW5nLGhlaWdodCxocmVmLGhyZWZsYW5nLGhvcml6LWFkdi14LGhvcml6LW9yaWdpbi14LGlkLGlkZW9ncmFwaGljLGltYWdlLXJlbmRlcmluZyxpbixpbjIsaW50ZXJjZXB0LGssazEsazIsazMsazQsa2VybmVsTWF0cml4LGtlcm5lbFVuaXRMZW5ndGgsa2VybmluZyxrZXlQb2ludHMsa2V5U3BsaW5lcyxrZXlUaW1lcyxsYW5nLGxlbmd0aEFkanVzdCxsZXR0ZXItc3BhY2luZyxsaWdodGluZy1jb2xvcixsaW1pdGluZ0NvbmVBbmdsZSxsb2NhbCxtYXJrZXItZW5kLG1hcmtlci1taWQsbWFya2VyLXN0YXJ0LG1hcmtlckhlaWdodCxtYXJrZXJVbml0cyxtYXJrZXJXaWR0aCxtYXNrLG1hc2tDb250ZW50VW5pdHMsbWFza1VuaXRzLG1hdGhlbWF0aWNhbCxtYXgsbWVkaWEsbWV0aG9kLG1pbixtb2RlLG5hbWUsbnVtT2N0YXZlcyxvZmZzZXQsb3BhY2l0eSxvcGVyYXRvcixvcmRlcixvcmllbnQsb3JpZW50YXRpb24sb3JpZ2luLG92ZXJmbG93LG92ZXJsaW5lLXBvc2l0aW9uLG92ZXJsaW5lLXRoaWNrbmVzcyxwYW5vc2UtMSxwYWludC1vcmRlcixwYXRoLHBhdGhMZW5ndGgscGF0dGVybkNvbnRlbnRVbml0cyxwYXR0ZXJuVHJhbnNmb3JtLHBhdHRlcm5Vbml0cyxwaW5nLHBvaW50ZXItZXZlbnRzLHBvaW50cyxwb2ludHNBdFgscG9pbnRzQXRZLHBvaW50c0F0WixwcmVzZXJ2ZUFscGhhLHByZXNlcnZlQXNwZWN0UmF0aW8scHJpbWl0aXZlVW5pdHMscixyYWRpdXMscmVmZXJyZXJQb2xpY3kscmVmWCxyZWZZLHJlbCxyZW5kZXJpbmctaW50ZW50LHJlcGVhdENvdW50LHJlcGVhdER1cixyZXF1aXJlZEV4dGVuc2lvbnMscmVxdWlyZWRGZWF0dXJlcyxyZXN0YXJ0LHJlc3VsdCxyb3RhdGUscngscnksc2NhbGUsc2VlZCxzaGFwZS1yZW5kZXJpbmcsc2xvcGUsc3BhY2luZyxzcGVjdWxhckNvbnN0YW50LHNwZWN1bGFyRXhwb25lbnQsc3BlZWQsc3ByZWFkTWV0aG9kLHN0YXJ0T2Zmc2V0LHN0ZERldmlhdGlvbixzdGVtaCxzdGVtdixzdGl0Y2hUaWxlcyxzdG9wLWNvbG9yLHN0b3Atb3BhY2l0eSxzdHJpa2V0aHJvdWdoLXBvc2l0aW9uLHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzLHN0cmluZyxzdHJva2Usc3Ryb2tlLWRhc2hhcnJheSxzdHJva2UtZGFzaG9mZnNldCxzdHJva2UtbGluZWNhcCxzdHJva2UtbGluZWpvaW4sc3Ryb2tlLW1pdGVybGltaXQsc3Ryb2tlLW9wYWNpdHksc3Ryb2tlLXdpZHRoLHN0eWxlLHN1cmZhY2VTY2FsZSxzeXN0ZW1MYW5ndWFnZSx0YWJpbmRleCx0YWJsZVZhbHVlcyx0YXJnZXQsdGFyZ2V0WCx0YXJnZXRZLHRleHQtYW5jaG9yLHRleHQtZGVjb3JhdGlvbix0ZXh0LXJlbmRlcmluZyx0ZXh0TGVuZ3RoLHRvLHRyYW5zZm9ybSx0cmFuc2Zvcm0tb3JpZ2luLHR5cGUsdTEsdTIsdW5kZXJsaW5lLXBvc2l0aW9uLHVuZGVybGluZS10aGlja25lc3MsdW5pY29kZSx1bmljb2RlLWJpZGksdW5pY29kZS1yYW5nZSx1bml0cy1wZXItZW0sdi1hbHBoYWJldGljLHYtaGFuZ2luZyx2LWlkZW9ncmFwaGljLHYtbWF0aGVtYXRpY2FsLHZhbHVlcyx2ZWN0b3ItZWZmZWN0LHZlcnNpb24sdmVydC1hZHYteSx2ZXJ0LW9yaWdpbi14LHZlcnQtb3JpZ2luLXksdmlld0JveCx2aWV3VGFyZ2V0LHZpc2liaWxpdHksd2lkdGgsd2lkdGhzLHdvcmQtc3BhY2luZyx3cml0aW5nLW1vZGUseCx4LWhlaWdodCx4MSx4Mix4Q2hhbm5lbFNlbGVjdG9yLHhsaW5rOmFjdHVhdGUseGxpbms6YXJjcm9sZSx4bGluazpocmVmLHhsaW5rOnJvbGUseGxpbms6c2hvdyx4bGluazp0aXRsZSx4bGluazp0eXBlLHhtbG5zOnhsaW5rLHhtbDpiYXNlLHhtbDpsYW5nLHhtbDpzcGFjZSx5LHkxLHkyLHlDaGFubmVsU2VsZWN0b3Iseix6b29tQW5kUGFuYFxuKTtcbmNvbnN0IGlzS25vd25NYXRoTUxBdHRyID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXG4gIGBhY2NlbnQsYWNjZW50dW5kZXIsYWN0aW9udHlwZSxhbGlnbixhbGlnbm1lbnRzY29wZSxhbHRpbWcsYWx0aW1nLWhlaWdodCxhbHRpbWctdmFsaWduLGFsdGltZy13aWR0aCxhbHR0ZXh0LGJldmVsbGVkLGNsb3NlLGNvbHVtbnNhbGlnbixjb2x1bW5saW5lcyxjb2x1bW5zcGFuLGRlbm9tYWxpZ24sZGVwdGgsZGlyLGRpc3BsYXksZGlzcGxheXN0eWxlLGVuY29kaW5nLGVxdWFsY29sdW1ucyxlcXVhbHJvd3MsZmVuY2UsZm9udHN0eWxlLGZvbnR3ZWlnaHQsZm9ybSxmcmFtZSxmcmFtZXNwYWNpbmcsZ3JvdXBhbGlnbixoZWlnaHQsaHJlZixpZCxpbmRlbnRhbGlnbixpbmRlbnRhbGlnbmZpcnN0LGluZGVudGFsaWdubGFzdCxpbmRlbnRzaGlmdCxpbmRlbnRzaGlmdGZpcnN0LGluZGVudHNoaWZ0bGFzdCxpbmRleHR5cGUsanVzdGlmeSxsYXJnZXRvcCxsYXJnZW9wLGxxdW90ZSxsc3BhY2UsbWF0aGJhY2tncm91bmQsbWF0aGNvbG9yLG1hdGhzaXplLG1hdGh2YXJpYW50LG1heHNpemUsbWlubGFiZWxzcGFjaW5nLG1vZGUsb3RoZXIsb3ZlcmZsb3cscG9zaXRpb24scm93YWxpZ24scm93bGluZXMscm93c3BhbixycXVvdGUscnNwYWNlLHNjcmlwdGxldmVsLHNjcmlwdG1pbnNpemUsc2NyaXB0c2l6ZW11bHRpcGxpZXIsc2VsZWN0aW9uLHNlcGFyYXRvcixzZXBhcmF0b3JzLHNoaWZ0LHNpZGUsc3JjLHN0YWNrYWxpZ24sc3RyZXRjaHksc3Vic2NyaXB0c2hpZnQsc3VwZXJzY3JpcHRzaGlmdCxzeW1tZXRyaWMsdm9mZnNldCx3aWR0aCx3aWR0aHMseGxpbms6aHJlZix4bGluazpzaG93LHhsaW5rOnR5cGUseG1sbnNgXG4pO1xuZnVuY3Rpb24gaXNSZW5kZXJhYmxlQXR0clZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB0eXBlID09PSBcInN0cmluZ1wiIHx8IHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCI7XG59XG5cbmNvbnN0IGVzY2FwZVJFID0gL1tcIicmPD5dLztcbmZ1bmN0aW9uIGVzY2FwZUh0bWwoc3RyaW5nKSB7XG4gIGNvbnN0IHN0ciA9IFwiXCIgKyBzdHJpbmc7XG4gIGNvbnN0IG1hdGNoID0gZXNjYXBlUkUuZXhlYyhzdHIpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBsZXQgaHRtbCA9IFwiXCI7XG4gIGxldCBlc2NhcGVkO1xuICBsZXQgaW5kZXg7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBmb3IgKGluZGV4ID0gbWF0Y2guaW5kZXg7IGluZGV4IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaW5kZXgpKSB7XG4gICAgICBjYXNlIDM0OlxuICAgICAgICBlc2NhcGVkID0gXCImcXVvdDtcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBlc2NhcGVkID0gXCImYW1wO1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIGVzY2FwZWQgPSBcIiYjMzk7XCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA2MDpcbiAgICAgICAgZXNjYXBlZCA9IFwiJmx0O1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNjI6XG4gICAgICAgIGVzY2FwZWQgPSBcIiZndDtcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGxhc3RJbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIGh0bWwgKz0gc3RyLnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpO1xuICAgIH1cbiAgICBsYXN0SW5kZXggPSBpbmRleCArIDE7XG4gICAgaHRtbCArPSBlc2NhcGVkO1xuICB9XG4gIHJldHVybiBsYXN0SW5kZXggIT09IGluZGV4ID8gaHRtbCArIHN0ci5zbGljZShsYXN0SW5kZXgsIGluZGV4KSA6IGh0bWw7XG59XG5jb25zdCBjb21tZW50U3RyaXBSRSA9IC9eLT8+fDwhLS18LS0+fC0tIT58PCEtJC9nO1xuZnVuY3Rpb24gZXNjYXBlSHRtbENvbW1lbnQoc3JjKSB7XG4gIHJldHVybiBzcmMucmVwbGFjZShjb21tZW50U3RyaXBSRSwgXCJcIik7XG59XG5jb25zdCBjc3NWYXJOYW1lRXNjYXBlU3ltYm9sc1JFID0gL1sgIVwiIyQlJicoKSorLC4vOjs8PT4/QFtcXFxcXFxdXmB7fH1+XS9nO1xuZnVuY3Rpb24gZ2V0RXNjYXBlZENzc1Zhck5hbWUoa2V5LCBkb3VibGVFc2NhcGUpIHtcbiAgcmV0dXJuIGtleS5yZXBsYWNlKFxuICAgIGNzc1Zhck5hbWVFc2NhcGVTeW1ib2xzUkUsXG4gICAgKHMpID0+IGRvdWJsZUVzY2FwZSA/IHMgPT09ICdcIicgPyAnXFxcXFxcXFxcXFxcXCInIDogYFxcXFxcXFxcJHtzfWAgOiBgXFxcXCR7c31gXG4gICk7XG59XG5cbmZ1bmN0aW9uIGxvb3NlQ29tcGFyZUFycmF5cyhhLCBiKSB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgZm9yIChsZXQgaSA9IDA7IGVxdWFsICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgZXF1YWwgPSBsb29zZUVxdWFsKGFbaV0sIGJbaV0pO1xuICB9XG4gIHJldHVybiBlcXVhbDtcbn1cbmZ1bmN0aW9uIGxvb3NlRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGxldCBhVmFsaWRUeXBlID0gaXNEYXRlKGEpO1xuICBsZXQgYlZhbGlkVHlwZSA9IGlzRGF0ZShiKTtcbiAgaWYgKGFWYWxpZFR5cGUgfHwgYlZhbGlkVHlwZSkge1xuICAgIHJldHVybiBhVmFsaWRUeXBlICYmIGJWYWxpZFR5cGUgPyBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCkgOiBmYWxzZTtcbiAgfVxuICBhVmFsaWRUeXBlID0gaXNTeW1ib2woYSk7XG4gIGJWYWxpZFR5cGUgPSBpc1N5bWJvbChiKTtcbiAgaWYgKGFWYWxpZFR5cGUgfHwgYlZhbGlkVHlwZSkge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9XG4gIGFWYWxpZFR5cGUgPSBpc0FycmF5KGEpO1xuICBiVmFsaWRUeXBlID0gaXNBcnJheShiKTtcbiAgaWYgKGFWYWxpZFR5cGUgfHwgYlZhbGlkVHlwZSkge1xuICAgIHJldHVybiBhVmFsaWRUeXBlICYmIGJWYWxpZFR5cGUgPyBsb29zZUNvbXBhcmVBcnJheXMoYSwgYikgOiBmYWxzZTtcbiAgfVxuICBhVmFsaWRUeXBlID0gaXNPYmplY3QoYSk7XG4gIGJWYWxpZFR5cGUgPSBpc09iamVjdChiKTtcbiAgaWYgKGFWYWxpZFR5cGUgfHwgYlZhbGlkVHlwZSkge1xuICAgIGlmICghYVZhbGlkVHlwZSB8fCAhYlZhbGlkVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhS2V5c0NvdW50ID0gT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIGNvbnN0IGJLZXlzQ291bnQgPSBPYmplY3Qua2V5cyhiKS5sZW5ndGg7XG4gICAgaWYgKGFLZXlzQ291bnQgIT09IGJLZXlzQ291bnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYSkge1xuICAgICAgY29uc3QgYUhhc0tleSA9IGEuaGFzT3duUHJvcGVydHkoa2V5KTtcbiAgICAgIGNvbnN0IGJIYXNLZXkgPSBiLmhhc093blByb3BlcnR5KGtleSk7XG4gICAgICBpZiAoYUhhc0tleSAmJiAhYkhhc0tleSB8fCAhYUhhc0tleSAmJiBiSGFzS2V5IHx8ICFsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZihhcnIsIHZhbCkge1xuICByZXR1cm4gYXJyLmZpbmRJbmRleCgoaXRlbSkgPT4gbG9vc2VFcXVhbChpdGVtLCB2YWwpKTtcbn1cblxuY29uc3QgaXNSZWYgPSAodmFsKSA9PiB7XG4gIHJldHVybiAhISh2YWwgJiYgdmFsW1wiX192X2lzUmVmXCJdID09PSB0cnVlKTtcbn07XG5jb25zdCB0b0Rpc3BsYXlTdHJpbmcgPSAodmFsKSA9PiB7XG4gIHJldHVybiBpc1N0cmluZyh2YWwpID8gdmFsIDogdmFsID09IG51bGwgPyBcIlwiIDogaXNBcnJheSh2YWwpIHx8IGlzT2JqZWN0KHZhbCkgJiYgKHZhbC50b1N0cmluZyA9PT0gb2JqZWN0VG9TdHJpbmcgfHwgIWlzRnVuY3Rpb24odmFsLnRvU3RyaW5nKSkgPyBpc1JlZih2YWwpID8gdG9EaXNwbGF5U3RyaW5nKHZhbC52YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2YWwsIHJlcGxhY2VyLCAyKSA6IFN0cmluZyh2YWwpO1xufTtcbmNvbnN0IHJlcGxhY2VyID0gKF9rZXksIHZhbCkgPT4ge1xuICBpZiAoaXNSZWYodmFsKSkge1xuICAgIHJldHVybiByZXBsYWNlcihfa2V5LCB2YWwudmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW2BNYXAoJHt2YWwuc2l6ZX0pYF06IFsuLi52YWwuZW50cmllcygpXS5yZWR1Y2UoXG4gICAgICAgIChlbnRyaWVzLCBba2V5LCB2YWwyXSwgaSkgPT4ge1xuICAgICAgICAgIGVudHJpZXNbc3RyaW5naWZ5U3ltYm9sKGtleSwgaSkgKyBcIiA9PlwiXSA9IHZhbDI7XG4gICAgICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc1NldCh2YWwpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtgU2V0KCR7dmFsLnNpemV9KWBdOiBbLi4udmFsLnZhbHVlcygpXS5tYXAoKHYpID0+IHN0cmluZ2lmeVN5bWJvbCh2KSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzU3ltYm9sKHZhbCkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5U3ltYm9sKHZhbCk7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSAmJiAhaXNBcnJheSh2YWwpICYmICFpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn07XG5jb25zdCBzdHJpbmdpZnlTeW1ib2wgPSAodiwgaSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hO1xuICByZXR1cm4gKFxuICAgIC8vIFN5bWJvbC5kZXNjcmlwdGlvbiBpbiBlczIwMTkrIHNvIHdlIG5lZWQgdG8gY2FzdCBoZXJlIHRvIHBhc3NcbiAgICAvLyB0aGUgbGliOiBlczIwMTYgY2hlY2tcbiAgICBpc1N5bWJvbCh2KSA/IGBTeW1ib2woJHsoX2EgPSB2LmRlc2NyaXB0aW9uKSAhPSBudWxsID8gX2EgOiBpfSlgIDogdlxuICApO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ3NzVmFyVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gXCJpbml0aWFsXCI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gXCJcIiA/IFwiIFwiIDogdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW1Z1ZSB3YXJuXSBJbnZhbGlkIHZhbHVlIHVzZWQgZm9yIENTUyBiaW5kaW5nLiBFeHBlY3RlZCBhIHN0cmluZyBvciBhIGZpbml0ZSBudW1iZXIgYnV0IHJlY2VpdmVkOlwiLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCB7IEVNUFRZX0FSUiwgRU1QVFlfT0JKLCBOTywgTk9PUCwgUGF0Y2hGbGFnTmFtZXMsIFBhdGNoRmxhZ3MsIFNoYXBlRmxhZ3MsIFNsb3RGbGFncywgY2FtZWxpemUsIGNhcGl0YWxpemUsIGNzc1Zhck5hbWVFc2NhcGVTeW1ib2xzUkUsIGRlZiwgZXNjYXBlSHRtbCwgZXNjYXBlSHRtbENvbW1lbnQsIGV4dGVuZCwgZ2VuQ2FjaGVLZXksIGdlblByb3BzQWNjZXNzRXhwLCBnZW5lcmF0ZUNvZGVGcmFtZSwgZ2V0RXNjYXBlZENzc1Zhck5hbWUsIGdldEdsb2JhbFRoaXMsIGhhc0NoYW5nZWQsIGhhc093biwgaHlwaGVuYXRlLCBpbmNsdWRlQm9vbGVhbkF0dHIsIGludm9rZUFycmF5Rm5zLCBpc0FycmF5LCBpc0Jvb2xlYW5BdHRyLCBpc0J1aWx0SW5EaXJlY3RpdmUsIGlzRGF0ZSwgaXNGdW5jdGlvbiwgaXNHbG9iYWxseUFsbG93ZWQsIGlzR2xvYmFsbHlXaGl0ZWxpc3RlZCwgaXNIVE1MVGFnLCBpc0ludGVnZXJLZXksIGlzS25vd25IdG1sQXR0ciwgaXNLbm93bk1hdGhNTEF0dHIsIGlzS25vd25TdmdBdHRyLCBpc01hcCwgaXNNYXRoTUxUYWcsIGlzTW9kZWxMaXN0ZW5lciwgaXNPYmplY3QsIGlzT24sIGlzUGxhaW5PYmplY3QsIGlzUHJvbWlzZSwgaXNSZWdFeHAsIGlzUmVuZGVyYWJsZUF0dHJWYWx1ZSwgaXNSZXNlcnZlZFByb3AsIGlzU1NSU2FmZUF0dHJOYW1lLCBpc1NWR1RhZywgaXNTZXQsIGlzU3BlY2lhbEJvb2xlYW5BdHRyLCBpc1N0cmluZywgaXNTeW1ib2wsIGlzVm9pZFRhZywgbG9vc2VFcXVhbCwgbG9vc2VJbmRleE9mLCBsb29zZVRvTnVtYmVyLCBtYWtlTWFwLCBub3JtYWxpemVDbGFzcywgbm9ybWFsaXplQ3NzVmFyVmFsdWUsIG5vcm1hbGl6ZVByb3BzLCBub3JtYWxpemVTdHlsZSwgb2JqZWN0VG9TdHJpbmcsIHBhcnNlU3RyaW5nU3R5bGUsIHByb3BzVG9BdHRyTWFwLCByZW1vdmUsIHNsb3RGbGFnc1RleHQsIHN0cmluZ2lmeVN0eWxlLCB0b0Rpc3BsYXlTdHJpbmcsIHRvSGFuZGxlcktleSwgdG9OdW1iZXIsIHRvUmF3VHlwZSwgdG9UeXBlU3RyaW5nIH07XG4iLCIvKipcbiogQHZ1ZS9yZWFjdGl2aXR5IHYzLjUuMjRcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnNcbiogQGxpY2Vuc2UgTUlUXG4qKi9cbmltcG9ydCB7IGV4dGVuZCwgaGFzQ2hhbmdlZCwgaXNBcnJheSwgaXNJbnRlZ2VyS2V5LCBpc1N5bWJvbCwgaXNNYXAsIGhhc093biwgbWFrZU1hcCwgaXNPYmplY3QsIGNhcGl0YWxpemUsIHRvUmF3VHlwZSwgZGVmLCBpc0Z1bmN0aW9uLCBFTVBUWV9PQkosIGlzU2V0LCBpc1BsYWluT2JqZWN0LCByZW1vdmUsIE5PT1AgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmZ1bmN0aW9uIHdhcm4obXNnLCAuLi5hcmdzKSB7XG4gIGNvbnNvbGUud2FybihgW1Z1ZSB3YXJuXSAke21zZ31gLCAuLi5hcmdzKTtcbn1cblxubGV0IGFjdGl2ZUVmZmVjdFNjb3BlO1xuY2xhc3MgRWZmZWN0U2NvcGUge1xuICBjb25zdHJ1Y3RvcihkZXRhY2hlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5kZXRhY2hlZCA9IGRldGFjaGVkO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsIHRyYWNrIGBvbmAgY2FsbHMsIGFsbG93IGBvbmAgY2FsbCBtdWx0aXBsZSB0aW1lc1xuICAgICAqL1xuICAgIHRoaXMuX29uID0gMDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLmVmZmVjdHMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFudXBzID0gW107XG4gICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhcmVudCA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xuICAgIGlmICghZGV0YWNoZWQgJiYgYWN0aXZlRWZmZWN0U2NvcGUpIHtcbiAgICAgIHRoaXMuaW5kZXggPSAoYWN0aXZlRWZmZWN0U2NvcGUuc2NvcGVzIHx8IChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgPSBbXSkpLnB1c2goXG4gICAgICAgIHRoaXNcbiAgICAgICkgLSAxO1xuICAgIH1cbiAgfVxuICBnZXQgYWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlO1xuICAgICAgbGV0IGksIGw7XG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuc2NvcGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmVmZmVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZWZmZWN0c1tpXS5wYXVzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVzdW1lcyB0aGUgZWZmZWN0IHNjb3BlLCBpbmNsdWRpbmcgYWxsIGNoaWxkIHNjb3BlcyBhbmQgZWZmZWN0cy5cbiAgICovXG4gIHJlc3VtZSgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBpZiAodGhpcy5faXNQYXVzZWQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGksIGw7XG4gICAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLnJlc3VtZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5lZmZlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHRoaXMuZWZmZWN0c1tpXS5yZXN1bWUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBydW4oZm4pIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWZmZWN0U2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IGN1cnJlbnRFZmZlY3RTY29wZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHdhcm4oYGNhbm5vdCBydW4gYW4gaW5hY3RpdmUgZWZmZWN0IHNjb3BlLmApO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uKCkge1xuICAgIGlmICgrK3RoaXMuX29uID09PSAxKSB7XG4gICAgICB0aGlzLnByZXZTY29wZSA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xuICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9mZigpIHtcbiAgICBpZiAodGhpcy5fb24gPiAwICYmIC0tdGhpcy5fb24gPT09IDApIHtcbiAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gdGhpcy5wcmV2U2NvcGU7XG4gICAgICB0aGlzLnByZXZTY29wZSA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgc3RvcChmcm9tUGFyZW50KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICBsZXQgaSwgbDtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmVmZmVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZWZmZWN0c1tpXS5zdG9wKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVmZmVjdHMubGVuZ3RoID0gMDtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmNsZWFudXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB0aGlzLmNsZWFudXBzW2ldKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsZWFudXBzLmxlbmd0aCA9IDA7XG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuc2NvcGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLnN0b3AodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY29wZXMubGVuZ3RoID0gMDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5kZXRhY2hlZCAmJiB0aGlzLnBhcmVudCAmJiAhZnJvbVBhcmVudCkge1xuICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5wYXJlbnQuc2NvcGVzLnBvcCgpO1xuICAgICAgICBpZiAobGFzdCAmJiBsYXN0ICE9PSB0aGlzKSB7XG4gICAgICAgICAgdGhpcy5wYXJlbnQuc2NvcGVzW3RoaXMuaW5kZXhdID0gbGFzdDtcbiAgICAgICAgICBsYXN0LmluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wYXJlbnQgPSB2b2lkIDA7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlZmZlY3RTY29wZShkZXRhY2hlZCkge1xuICByZXR1cm4gbmV3IEVmZmVjdFNjb3BlKGRldGFjaGVkKTtcbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRTY29wZSgpIHtcbiAgcmV0dXJuIGFjdGl2ZUVmZmVjdFNjb3BlO1xufVxuZnVuY3Rpb24gb25TY29wZURpc3Bvc2UoZm4sIGZhaWxTaWxlbnRseSA9IGZhbHNlKSB7XG4gIGlmIChhY3RpdmVFZmZlY3RTY29wZSkge1xuICAgIGFjdGl2ZUVmZmVjdFNjb3BlLmNsZWFudXBzLnB1c2goZm4pO1xuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWZhaWxTaWxlbnRseSkge1xuICAgIHdhcm4oXG4gICAgICBgb25TY29wZURpc3Bvc2UoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgZWZmZWN0IHNjb3BlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC5gXG4gICAgKTtcbiAgfVxufVxuXG5sZXQgYWN0aXZlU3ViO1xuY29uc3QgRWZmZWN0RmxhZ3MgPSB7XG4gIFwiQUNUSVZFXCI6IDEsXG4gIFwiMVwiOiBcIkFDVElWRVwiLFxuICBcIlJVTk5JTkdcIjogMixcbiAgXCIyXCI6IFwiUlVOTklOR1wiLFxuICBcIlRSQUNLSU5HXCI6IDQsXG4gIFwiNFwiOiBcIlRSQUNLSU5HXCIsXG4gIFwiTk9USUZJRURcIjogOCxcbiAgXCI4XCI6IFwiTk9USUZJRURcIixcbiAgXCJESVJUWVwiOiAxNixcbiAgXCIxNlwiOiBcIkRJUlRZXCIsXG4gIFwiQUxMT1dfUkVDVVJTRVwiOiAzMixcbiAgXCIzMlwiOiBcIkFMTE9XX1JFQ1VSU0VcIixcbiAgXCJQQVVTRURcIjogNjQsXG4gIFwiNjRcIjogXCJQQVVTRURcIixcbiAgXCJFVkFMVUFURURcIjogMTI4LFxuICBcIjEyOFwiOiBcIkVWQUxVQVRFRFwiXG59O1xuY29uc3QgcGF1c2VkUXVldWVFZmZlY3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7XG5jbGFzcyBSZWFjdGl2ZUVmZmVjdCB7XG4gIGNvbnN0cnVjdG9yKGZuKSB7XG4gICAgdGhpcy5mbiA9IGZuO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuZGVwcyA9IHZvaWQgMDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLmRlcHNUYWlsID0gdm9pZCAwO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuZmxhZ3MgPSAxIHwgNDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB2b2lkIDA7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdGhpcy5jbGVhbnVwID0gdm9pZCAwO1xuICAgIHRoaXMuc2NoZWR1bGVyID0gdm9pZCAwO1xuICAgIGlmIChhY3RpdmVFZmZlY3RTY29wZSAmJiBhY3RpdmVFZmZlY3RTY29wZS5hY3RpdmUpIHtcbiAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlLmVmZmVjdHMucHVzaCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5mbGFncyB8PSA2NDtcbiAgfVxuICByZXN1bWUoKSB7XG4gICAgaWYgKHRoaXMuZmxhZ3MgJiA2NCkge1xuICAgICAgdGhpcy5mbGFncyAmPSAtNjU7XG4gICAgICBpZiAocGF1c2VkUXVldWVFZmZlY3RzLmhhcyh0aGlzKSkge1xuICAgICAgICBwYXVzZWRRdWV1ZUVmZmVjdHMuZGVsZXRlKHRoaXMpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbm90aWZ5KCkge1xuICAgIGlmICh0aGlzLmZsYWdzICYgMiAmJiAhKHRoaXMuZmxhZ3MgJiAzMikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCEodGhpcy5mbGFncyAmIDgpKSB7XG4gICAgICBiYXRjaCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcnVuKCkge1xuICAgIGlmICghKHRoaXMuZmxhZ3MgJiAxKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm4oKTtcbiAgICB9XG4gICAgdGhpcy5mbGFncyB8PSAyO1xuICAgIGNsZWFudXBFZmZlY3QodGhpcyk7XG4gICAgcHJlcGFyZURlcHModGhpcyk7XG4gICAgY29uc3QgcHJldkVmZmVjdCA9IGFjdGl2ZVN1YjtcbiAgICBjb25zdCBwcmV2U2hvdWxkVHJhY2sgPSBzaG91bGRUcmFjaztcbiAgICBhY3RpdmVTdWIgPSB0aGlzO1xuICAgIHNob3VsZFRyYWNrID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgYWN0aXZlU3ViICE9PSB0aGlzKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJBY3RpdmUgZWZmZWN0IHdhcyBub3QgcmVzdG9yZWQgY29ycmVjdGx5IC0gdGhpcyBpcyBsaWtlbHkgYSBWdWUgaW50ZXJuYWwgYnVnLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjbGVhbnVwRGVwcyh0aGlzKTtcbiAgICAgIGFjdGl2ZVN1YiA9IHByZXZFZmZlY3Q7XG4gICAgICBzaG91bGRUcmFjayA9IHByZXZTaG91bGRUcmFjaztcbiAgICAgIHRoaXMuZmxhZ3MgJj0gLTM7XG4gICAgfVxuICB9XG4gIHN0b3AoKSB7XG4gICAgaWYgKHRoaXMuZmxhZ3MgJiAxKSB7XG4gICAgICBmb3IgKGxldCBsaW5rID0gdGhpcy5kZXBzOyBsaW5rOyBsaW5rID0gbGluay5uZXh0RGVwKSB7XG4gICAgICAgIHJlbW92ZVN1YihsaW5rKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVwcyA9IHRoaXMuZGVwc1RhaWwgPSB2b2lkIDA7XG4gICAgICBjbGVhbnVwRWZmZWN0KHRoaXMpO1xuICAgICAgdGhpcy5vblN0b3AgJiYgdGhpcy5vblN0b3AoKTtcbiAgICAgIHRoaXMuZmxhZ3MgJj0gLTI7XG4gICAgfVxuICB9XG4gIHRyaWdnZXIoKSB7XG4gICAgaWYgKHRoaXMuZmxhZ3MgJiA2NCkge1xuICAgICAgcGF1c2VkUXVldWVFZmZlY3RzLmFkZCh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2NoZWR1bGVyKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1bklmRGlydHkoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcnVuSWZEaXJ0eSgpIHtcbiAgICBpZiAoaXNEaXJ0eSh0aGlzKSkge1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGRpcnR5KCkge1xuICAgIHJldHVybiBpc0RpcnR5KHRoaXMpO1xuICB9XG59XG5sZXQgYmF0Y2hEZXB0aCA9IDA7XG5sZXQgYmF0Y2hlZFN1YjtcbmxldCBiYXRjaGVkQ29tcHV0ZWQ7XG5mdW5jdGlvbiBiYXRjaChzdWIsIGlzQ29tcHV0ZWQgPSBmYWxzZSkge1xuICBzdWIuZmxhZ3MgfD0gODtcbiAgaWYgKGlzQ29tcHV0ZWQpIHtcbiAgICBzdWIubmV4dCA9IGJhdGNoZWRDb21wdXRlZDtcbiAgICBiYXRjaGVkQ29tcHV0ZWQgPSBzdWI7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN1Yi5uZXh0ID0gYmF0Y2hlZFN1YjtcbiAgYmF0Y2hlZFN1YiA9IHN1Yjtcbn1cbmZ1bmN0aW9uIHN0YXJ0QmF0Y2goKSB7XG4gIGJhdGNoRGVwdGgrKztcbn1cbmZ1bmN0aW9uIGVuZEJhdGNoKCkge1xuICBpZiAoLS1iYXRjaERlcHRoID4gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoYmF0Y2hlZENvbXB1dGVkKSB7XG4gICAgbGV0IGUgPSBiYXRjaGVkQ29tcHV0ZWQ7XG4gICAgYmF0Y2hlZENvbXB1dGVkID0gdm9pZCAwO1xuICAgIHdoaWxlIChlKSB7XG4gICAgICBjb25zdCBuZXh0ID0gZS5uZXh0O1xuICAgICAgZS5uZXh0ID0gdm9pZCAwO1xuICAgICAgZS5mbGFncyAmPSAtOTtcbiAgICAgIGUgPSBuZXh0O1xuICAgIH1cbiAgfVxuICBsZXQgZXJyb3I7XG4gIHdoaWxlIChiYXRjaGVkU3ViKSB7XG4gICAgbGV0IGUgPSBiYXRjaGVkU3ViO1xuICAgIGJhdGNoZWRTdWIgPSB2b2lkIDA7XG4gICAgd2hpbGUgKGUpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBlLm5leHQ7XG4gICAgICBlLm5leHQgPSB2b2lkIDA7XG4gICAgICBlLmZsYWdzICY9IC05O1xuICAgICAgaWYgKGUuZmxhZ3MgJiAxKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgO1xuICAgICAgICAgIGUudHJpZ2dlcigpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZSA9IG5leHQ7XG4gICAgfVxuICB9XG4gIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG59XG5mdW5jdGlvbiBwcmVwYXJlRGVwcyhzdWIpIHtcbiAgZm9yIChsZXQgbGluayA9IHN1Yi5kZXBzOyBsaW5rOyBsaW5rID0gbGluay5uZXh0RGVwKSB7XG4gICAgbGluay52ZXJzaW9uID0gLTE7XG4gICAgbGluay5wcmV2QWN0aXZlTGluayA9IGxpbmsuZGVwLmFjdGl2ZUxpbms7XG4gICAgbGluay5kZXAuYWN0aXZlTGluayA9IGxpbms7XG4gIH1cbn1cbmZ1bmN0aW9uIGNsZWFudXBEZXBzKHN1Yikge1xuICBsZXQgaGVhZDtcbiAgbGV0IHRhaWwgPSBzdWIuZGVwc1RhaWw7XG4gIGxldCBsaW5rID0gdGFpbDtcbiAgd2hpbGUgKGxpbmspIHtcbiAgICBjb25zdCBwcmV2ID0gbGluay5wcmV2RGVwO1xuICAgIGlmIChsaW5rLnZlcnNpb24gPT09IC0xKSB7XG4gICAgICBpZiAobGluayA9PT0gdGFpbCkgdGFpbCA9IHByZXY7XG4gICAgICByZW1vdmVTdWIobGluayk7XG4gICAgICByZW1vdmVEZXAobGluayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQgPSBsaW5rO1xuICAgIH1cbiAgICBsaW5rLmRlcC5hY3RpdmVMaW5rID0gbGluay5wcmV2QWN0aXZlTGluaztcbiAgICBsaW5rLnByZXZBY3RpdmVMaW5rID0gdm9pZCAwO1xuICAgIGxpbmsgPSBwcmV2O1xuICB9XG4gIHN1Yi5kZXBzID0gaGVhZDtcbiAgc3ViLmRlcHNUYWlsID0gdGFpbDtcbn1cbmZ1bmN0aW9uIGlzRGlydHkoc3ViKSB7XG4gIGZvciAobGV0IGxpbmsgPSBzdWIuZGVwczsgbGluazsgbGluayA9IGxpbmsubmV4dERlcCkge1xuICAgIGlmIChsaW5rLmRlcC52ZXJzaW9uICE9PSBsaW5rLnZlcnNpb24gfHwgbGluay5kZXAuY29tcHV0ZWQgJiYgKHJlZnJlc2hDb21wdXRlZChsaW5rLmRlcC5jb21wdXRlZCkgfHwgbGluay5kZXAudmVyc2lvbiAhPT0gbGluay52ZXJzaW9uKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChzdWIuX2RpcnR5KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcmVmcmVzaENvbXB1dGVkKGNvbXB1dGVkKSB7XG4gIGlmIChjb21wdXRlZC5mbGFncyAmIDQgJiYgIShjb21wdXRlZC5mbGFncyAmIDE2KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb21wdXRlZC5mbGFncyAmPSAtMTc7XG4gIGlmIChjb21wdXRlZC5nbG9iYWxWZXJzaW9uID09PSBnbG9iYWxWZXJzaW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbXB1dGVkLmdsb2JhbFZlcnNpb24gPSBnbG9iYWxWZXJzaW9uO1xuICBpZiAoIWNvbXB1dGVkLmlzU1NSICYmIGNvbXB1dGVkLmZsYWdzICYgMTI4ICYmICghY29tcHV0ZWQuZGVwcyAmJiAhY29tcHV0ZWQuX2RpcnR5IHx8ICFpc0RpcnR5KGNvbXB1dGVkKSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29tcHV0ZWQuZmxhZ3MgfD0gMjtcbiAgY29uc3QgZGVwID0gY29tcHV0ZWQuZGVwO1xuICBjb25zdCBwcmV2U3ViID0gYWN0aXZlU3ViO1xuICBjb25zdCBwcmV2U2hvdWxkVHJhY2sgPSBzaG91bGRUcmFjaztcbiAgYWN0aXZlU3ViID0gY29tcHV0ZWQ7XG4gIHNob3VsZFRyYWNrID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBwcmVwYXJlRGVwcyhjb21wdXRlZCk7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlZC5mbihjb21wdXRlZC5fdmFsdWUpO1xuICAgIGlmIChkZXAudmVyc2lvbiA9PT0gMCB8fCBoYXNDaGFuZ2VkKHZhbHVlLCBjb21wdXRlZC5fdmFsdWUpKSB7XG4gICAgICBjb21wdXRlZC5mbGFncyB8PSAxMjg7XG4gICAgICBjb21wdXRlZC5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIGRlcC52ZXJzaW9uKys7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBkZXAudmVyc2lvbisrO1xuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICBhY3RpdmVTdWIgPSBwcmV2U3ViO1xuICAgIHNob3VsZFRyYWNrID0gcHJldlNob3VsZFRyYWNrO1xuICAgIGNsZWFudXBEZXBzKGNvbXB1dGVkKTtcbiAgICBjb21wdXRlZC5mbGFncyAmPSAtMztcbiAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlU3ViKGxpbmssIHNvZnQgPSBmYWxzZSkge1xuICBjb25zdCB7IGRlcCwgcHJldlN1YiwgbmV4dFN1YiB9ID0gbGluaztcbiAgaWYgKHByZXZTdWIpIHtcbiAgICBwcmV2U3ViLm5leHRTdWIgPSBuZXh0U3ViO1xuICAgIGxpbmsucHJldlN1YiA9IHZvaWQgMDtcbiAgfVxuICBpZiAobmV4dFN1Yikge1xuICAgIG5leHRTdWIucHJldlN1YiA9IHByZXZTdWI7XG4gICAgbGluay5uZXh0U3ViID0gdm9pZCAwO1xuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGRlcC5zdWJzSGVhZCA9PT0gbGluaykge1xuICAgIGRlcC5zdWJzSGVhZCA9IG5leHRTdWI7XG4gIH1cbiAgaWYgKGRlcC5zdWJzID09PSBsaW5rKSB7XG4gICAgZGVwLnN1YnMgPSBwcmV2U3ViO1xuICAgIGlmICghcHJldlN1YiAmJiBkZXAuY29tcHV0ZWQpIHtcbiAgICAgIGRlcC5jb21wdXRlZC5mbGFncyAmPSAtNTtcbiAgICAgIGZvciAobGV0IGwgPSBkZXAuY29tcHV0ZWQuZGVwczsgbDsgbCA9IGwubmV4dERlcCkge1xuICAgICAgICByZW1vdmVTdWIobCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghc29mdCAmJiAhLS1kZXAuc2MgJiYgZGVwLm1hcCkge1xuICAgIGRlcC5tYXAuZGVsZXRlKGRlcC5rZXkpO1xuICB9XG59XG5mdW5jdGlvbiByZW1vdmVEZXAobGluaykge1xuICBjb25zdCB7IHByZXZEZXAsIG5leHREZXAgfSA9IGxpbms7XG4gIGlmIChwcmV2RGVwKSB7XG4gICAgcHJldkRlcC5uZXh0RGVwID0gbmV4dERlcDtcbiAgICBsaW5rLnByZXZEZXAgPSB2b2lkIDA7XG4gIH1cbiAgaWYgKG5leHREZXApIHtcbiAgICBuZXh0RGVwLnByZXZEZXAgPSBwcmV2RGVwO1xuICAgIGxpbmsubmV4dERlcCA9IHZvaWQgMDtcbiAgfVxufVxuZnVuY3Rpb24gZWZmZWN0KGZuLCBvcHRpb25zKSB7XG4gIGlmIChmbi5lZmZlY3QgaW5zdGFuY2VvZiBSZWFjdGl2ZUVmZmVjdCkge1xuICAgIGZuID0gZm4uZWZmZWN0LmZuO1xuICB9XG4gIGNvbnN0IGUgPSBuZXcgUmVhY3RpdmVFZmZlY3QoZm4pO1xuICBpZiAob3B0aW9ucykge1xuICAgIGV4dGVuZChlLCBvcHRpb25zKTtcbiAgfVxuICB0cnkge1xuICAgIGUucnVuKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGUuc3RvcCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICBjb25zdCBydW5uZXIgPSBlLnJ1bi5iaW5kKGUpO1xuICBydW5uZXIuZWZmZWN0ID0gZTtcbiAgcmV0dXJuIHJ1bm5lcjtcbn1cbmZ1bmN0aW9uIHN0b3AocnVubmVyKSB7XG4gIHJ1bm5lci5lZmZlY3Quc3RvcCgpO1xufVxubGV0IHNob3VsZFRyYWNrID0gdHJ1ZTtcbmNvbnN0IHRyYWNrU3RhY2sgPSBbXTtcbmZ1bmN0aW9uIHBhdXNlVHJhY2tpbmcoKSB7XG4gIHRyYWNrU3RhY2sucHVzaChzaG91bGRUcmFjayk7XG4gIHNob3VsZFRyYWNrID0gZmFsc2U7XG59XG5mdW5jdGlvbiBlbmFibGVUcmFja2luZygpIHtcbiAgdHJhY2tTdGFjay5wdXNoKHNob3VsZFRyYWNrKTtcbiAgc2hvdWxkVHJhY2sgPSB0cnVlO1xufVxuZnVuY3Rpb24gcmVzZXRUcmFja2luZygpIHtcbiAgY29uc3QgbGFzdCA9IHRyYWNrU3RhY2sucG9wKCk7XG4gIHNob3VsZFRyYWNrID0gbGFzdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IGxhc3Q7XG59XG5mdW5jdGlvbiBvbkVmZmVjdENsZWFudXAoZm4sIGZhaWxTaWxlbnRseSA9IGZhbHNlKSB7XG4gIGlmIChhY3RpdmVTdWIgaW5zdGFuY2VvZiBSZWFjdGl2ZUVmZmVjdCkge1xuICAgIGFjdGl2ZVN1Yi5jbGVhbnVwID0gZm47XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhZmFpbFNpbGVudGx5KSB7XG4gICAgd2FybihcbiAgICAgIGBvbkVmZmVjdENsZWFudXAoKSB3YXMgY2FsbGVkIHdoZW4gdGhlcmUgd2FzIG5vIGFjdGl2ZSBlZmZlY3QgdG8gYXNzb2NpYXRlIHdpdGguYFxuICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNsZWFudXBFZmZlY3QoZSkge1xuICBjb25zdCB7IGNsZWFudXAgfSA9IGU7XG4gIGUuY2xlYW51cCA9IHZvaWQgMDtcbiAgaWYgKGNsZWFudXApIHtcbiAgICBjb25zdCBwcmV2U3ViID0gYWN0aXZlU3ViO1xuICAgIGFjdGl2ZVN1YiA9IHZvaWQgMDtcbiAgICB0cnkge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdWIgPSBwcmV2U3ViO1xuICAgIH1cbiAgfVxufVxuXG5sZXQgZ2xvYmFsVmVyc2lvbiA9IDA7XG5jbGFzcyBMaW5rIHtcbiAgY29uc3RydWN0b3Ioc3ViLCBkZXApIHtcbiAgICB0aGlzLnN1YiA9IHN1YjtcbiAgICB0aGlzLmRlcCA9IGRlcDtcbiAgICB0aGlzLnZlcnNpb24gPSBkZXAudmVyc2lvbjtcbiAgICB0aGlzLm5leHREZXAgPSB0aGlzLnByZXZEZXAgPSB0aGlzLm5leHRTdWIgPSB0aGlzLnByZXZTdWIgPSB0aGlzLnByZXZBY3RpdmVMaW5rID0gdm9pZCAwO1xuICB9XG59XG5jbGFzcyBEZXAge1xuICAvLyBUT0RPIGlzb2xhdGVkRGVjbGFyYXRpb25zIFwiX192X3NraXBcIlxuICBjb25zdHJ1Y3Rvcihjb21wdXRlZCkge1xuICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgIC8qKlxuICAgICAqIExpbmsgYmV0d2VlbiB0aGlzIGRlcCBhbmQgdGhlIGN1cnJlbnQgYWN0aXZlIGVmZmVjdFxuICAgICAqL1xuICAgIHRoaXMuYWN0aXZlTGluayA9IHZvaWQgMDtcbiAgICAvKipcbiAgICAgKiBEb3VibHkgbGlua2VkIGxpc3QgcmVwcmVzZW50aW5nIHRoZSBzdWJzY3JpYmluZyBlZmZlY3RzICh0YWlsKVxuICAgICAqL1xuICAgIHRoaXMuc3VicyA9IHZvaWQgMDtcbiAgICAvKipcbiAgICAgKiBGb3Igb2JqZWN0IHByb3BlcnR5IGRlcHMgY2xlYW51cFxuICAgICAqL1xuICAgIHRoaXMubWFwID0gdm9pZCAwO1xuICAgIHRoaXMua2V5ID0gdm9pZCAwO1xuICAgIC8qKlxuICAgICAqIFN1YnNjcmliZXIgY291bnRlclxuICAgICAqL1xuICAgIHRoaXMuc2MgPSAwO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuX192X3NraXAgPSB0cnVlO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB0aGlzLnN1YnNIZWFkID0gdm9pZCAwO1xuICAgIH1cbiAgfVxuICB0cmFjayhkZWJ1Z0luZm8pIHtcbiAgICBpZiAoIWFjdGl2ZVN1YiB8fCAhc2hvdWxkVHJhY2sgfHwgYWN0aXZlU3ViID09PSB0aGlzLmNvbXB1dGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBsaW5rID0gdGhpcy5hY3RpdmVMaW5rO1xuICAgIGlmIChsaW5rID09PSB2b2lkIDAgfHwgbGluay5zdWIgIT09IGFjdGl2ZVN1Yikge1xuICAgICAgbGluayA9IHRoaXMuYWN0aXZlTGluayA9IG5ldyBMaW5rKGFjdGl2ZVN1YiwgdGhpcyk7XG4gICAgICBpZiAoIWFjdGl2ZVN1Yi5kZXBzKSB7XG4gICAgICAgIGFjdGl2ZVN1Yi5kZXBzID0gYWN0aXZlU3ViLmRlcHNUYWlsID0gbGluaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmsucHJldkRlcCA9IGFjdGl2ZVN1Yi5kZXBzVGFpbDtcbiAgICAgICAgYWN0aXZlU3ViLmRlcHNUYWlsLm5leHREZXAgPSBsaW5rO1xuICAgICAgICBhY3RpdmVTdWIuZGVwc1RhaWwgPSBsaW5rO1xuICAgICAgfVxuICAgICAgYWRkU3ViKGxpbmspO1xuICAgIH0gZWxzZSBpZiAobGluay52ZXJzaW9uID09PSAtMSkge1xuICAgICAgbGluay52ZXJzaW9uID0gdGhpcy52ZXJzaW9uO1xuICAgICAgaWYgKGxpbmsubmV4dERlcCkge1xuICAgICAgICBjb25zdCBuZXh0ID0gbGluay5uZXh0RGVwO1xuICAgICAgICBuZXh0LnByZXZEZXAgPSBsaW5rLnByZXZEZXA7XG4gICAgICAgIGlmIChsaW5rLnByZXZEZXApIHtcbiAgICAgICAgICBsaW5rLnByZXZEZXAubmV4dERlcCA9IG5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGluay5wcmV2RGVwID0gYWN0aXZlU3ViLmRlcHNUYWlsO1xuICAgICAgICBsaW5rLm5leHREZXAgPSB2b2lkIDA7XG4gICAgICAgIGFjdGl2ZVN1Yi5kZXBzVGFpbC5uZXh0RGVwID0gbGluaztcbiAgICAgICAgYWN0aXZlU3ViLmRlcHNUYWlsID0gbGluaztcbiAgICAgICAgaWYgKGFjdGl2ZVN1Yi5kZXBzID09PSBsaW5rKSB7XG4gICAgICAgICAgYWN0aXZlU3ViLmRlcHMgPSBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGFjdGl2ZVN1Yi5vblRyYWNrKSB7XG4gICAgICBhY3RpdmVTdWIub25UcmFjayhcbiAgICAgICAgZXh0ZW5kKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVmZmVjdDogYWN0aXZlU3ViXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWJ1Z0luZm9cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbms7XG4gIH1cbiAgdHJpZ2dlcihkZWJ1Z0luZm8pIHtcbiAgICB0aGlzLnZlcnNpb24rKztcbiAgICBnbG9iYWxWZXJzaW9uKys7XG4gICAgdGhpcy5ub3RpZnkoZGVidWdJbmZvKTtcbiAgfVxuICBub3RpZnkoZGVidWdJbmZvKSB7XG4gICAgc3RhcnRCYXRjaCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICBmb3IgKGxldCBoZWFkID0gdGhpcy5zdWJzSGVhZDsgaGVhZDsgaGVhZCA9IGhlYWQubmV4dFN1Yikge1xuICAgICAgICAgIGlmIChoZWFkLnN1Yi5vblRyaWdnZXIgJiYgIShoZWFkLnN1Yi5mbGFncyAmIDgpKSB7XG4gICAgICAgICAgICBoZWFkLnN1Yi5vblRyaWdnZXIoXG4gICAgICAgICAgICAgIGV4dGVuZChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlZmZlY3Q6IGhlYWQuc3ViXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWJ1Z0luZm9cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGxpbmsgPSB0aGlzLnN1YnM7IGxpbms7IGxpbmsgPSBsaW5rLnByZXZTdWIpIHtcbiAgICAgICAgaWYgKGxpbmsuc3ViLm5vdGlmeSgpKSB7XG4gICAgICAgICAgO1xuICAgICAgICAgIGxpbmsuc3ViLmRlcC5ub3RpZnkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBlbmRCYXRjaCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYWRkU3ViKGxpbmspIHtcbiAgbGluay5kZXAuc2MrKztcbiAgaWYgKGxpbmsuc3ViLmZsYWdzICYgNCkge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbGluay5kZXAuY29tcHV0ZWQ7XG4gICAgaWYgKGNvbXB1dGVkICYmICFsaW5rLmRlcC5zdWJzKSB7XG4gICAgICBjb21wdXRlZC5mbGFncyB8PSA0IHwgMTY7XG4gICAgICBmb3IgKGxldCBsID0gY29tcHV0ZWQuZGVwczsgbDsgbCA9IGwubmV4dERlcCkge1xuICAgICAgICBhZGRTdWIobCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRUYWlsID0gbGluay5kZXAuc3VicztcbiAgICBpZiAoY3VycmVudFRhaWwgIT09IGxpbmspIHtcbiAgICAgIGxpbmsucHJldlN1YiA9IGN1cnJlbnRUYWlsO1xuICAgICAgaWYgKGN1cnJlbnRUYWlsKSBjdXJyZW50VGFpbC5uZXh0U3ViID0gbGluaztcbiAgICB9XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgbGluay5kZXAuc3Vic0hlYWQgPT09IHZvaWQgMCkge1xuICAgICAgbGluay5kZXAuc3Vic0hlYWQgPSBsaW5rO1xuICAgIH1cbiAgICBsaW5rLmRlcC5zdWJzID0gbGluaztcbiAgfVxufVxuY29uc3QgdGFyZ2V0TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5jb25zdCBJVEVSQVRFX0tFWSA9IFN5bWJvbChcbiAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IFwiT2JqZWN0IGl0ZXJhdGVcIiA6IFwiXCJcbik7XG5jb25zdCBNQVBfS0VZX0lURVJBVEVfS0VZID0gU3ltYm9sKFxuICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gXCJNYXAga2V5cyBpdGVyYXRlXCIgOiBcIlwiXG4pO1xuY29uc3QgQVJSQVlfSVRFUkFURV9LRVkgPSBTeW1ib2woXG4gICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBcIkFycmF5IGl0ZXJhdGVcIiA6IFwiXCJcbik7XG5mdW5jdGlvbiB0cmFjayh0YXJnZXQsIHR5cGUsIGtleSkge1xuICBpZiAoc2hvdWxkVHJhY2sgJiYgYWN0aXZlU3ViKSB7XG4gICAgbGV0IGRlcHNNYXAgPSB0YXJnZXRNYXAuZ2V0KHRhcmdldCk7XG4gICAgaWYgKCFkZXBzTWFwKSB7XG4gICAgICB0YXJnZXRNYXAuc2V0KHRhcmdldCwgZGVwc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBsZXQgZGVwID0gZGVwc01hcC5nZXQoa2V5KTtcbiAgICBpZiAoIWRlcCkge1xuICAgICAgZGVwc01hcC5zZXQoa2V5LCBkZXAgPSBuZXcgRGVwKCkpO1xuICAgICAgZGVwLm1hcCA9IGRlcHNNYXA7XG4gICAgICBkZXAua2V5ID0ga2V5O1xuICAgIH1cbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgZGVwLnRyYWNrKHtcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB0eXBlLFxuICAgICAgICBrZXlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXAudHJhY2soKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHRyaWdnZXIodGFyZ2V0LCB0eXBlLCBrZXksIG5ld1ZhbHVlLCBvbGRWYWx1ZSwgb2xkVGFyZ2V0KSB7XG4gIGNvbnN0IGRlcHNNYXAgPSB0YXJnZXRNYXAuZ2V0KHRhcmdldCk7XG4gIGlmICghZGVwc01hcCkge1xuICAgIGdsb2JhbFZlcnNpb24rKztcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcnVuID0gKGRlcCkgPT4ge1xuICAgIGlmIChkZXApIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIGRlcC50cmlnZ2VyKHtcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgICAgb2xkVGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwLnRyaWdnZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHN0YXJ0QmF0Y2goKTtcbiAgaWYgKHR5cGUgPT09IFwiY2xlYXJcIikge1xuICAgIGRlcHNNYXAuZm9yRWFjaChydW4pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHRhcmdldElzQXJyYXkgPSBpc0FycmF5KHRhcmdldCk7XG4gICAgY29uc3QgaXNBcnJheUluZGV4ID0gdGFyZ2V0SXNBcnJheSAmJiBpc0ludGVnZXJLZXkoa2V5KTtcbiAgICBpZiAodGFyZ2V0SXNBcnJheSAmJiBrZXkgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgIGNvbnN0IG5ld0xlbmd0aCA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgICBkZXBzTWFwLmZvckVhY2goKGRlcCwga2V5MikgPT4ge1xuICAgICAgICBpZiAoa2V5MiA9PT0gXCJsZW5ndGhcIiB8fCBrZXkyID09PSBBUlJBWV9JVEVSQVRFX0tFWSB8fCAhaXNTeW1ib2woa2V5MikgJiYga2V5MiA+PSBuZXdMZW5ndGgpIHtcbiAgICAgICAgICBydW4oZGVwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrZXkgIT09IHZvaWQgMCB8fCBkZXBzTWFwLmhhcyh2b2lkIDApKSB7XG4gICAgICAgIHJ1bihkZXBzTWFwLmdldChrZXkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5SW5kZXgpIHtcbiAgICAgICAgcnVuKGRlcHNNYXAuZ2V0KEFSUkFZX0lURVJBVEVfS0VZKSk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgIGlmICghdGFyZ2V0SXNBcnJheSkge1xuICAgICAgICAgICAgcnVuKGRlcHNNYXAuZ2V0KElURVJBVEVfS0VZKSk7XG4gICAgICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSkge1xuICAgICAgICAgICAgICBydW4oZGVwc01hcC5nZXQoTUFQX0tFWV9JVEVSQVRFX0tFWSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheUluZGV4KSB7XG4gICAgICAgICAgICBydW4oZGVwc01hcC5nZXQoXCJsZW5ndGhcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRlbGV0ZVwiOlxuICAgICAgICAgIGlmICghdGFyZ2V0SXNBcnJheSkge1xuICAgICAgICAgICAgcnVuKGRlcHNNYXAuZ2V0KElURVJBVEVfS0VZKSk7XG4gICAgICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSkge1xuICAgICAgICAgICAgICBydW4oZGVwc01hcC5nZXQoTUFQX0tFWV9JVEVSQVRFX0tFWSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNldFwiOlxuICAgICAgICAgIGlmIChpc01hcCh0YXJnZXQpKSB7XG4gICAgICAgICAgICBydW4oZGVwc01hcC5nZXQoSVRFUkFURV9LRVkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVuZEJhdGNoKCk7XG59XG5mdW5jdGlvbiBnZXREZXBGcm9tUmVhY3RpdmUob2JqZWN0LCBrZXkpIHtcbiAgY29uc3QgZGVwTWFwID0gdGFyZ2V0TWFwLmdldChvYmplY3QpO1xuICByZXR1cm4gZGVwTWFwICYmIGRlcE1hcC5nZXQoa2V5KTtcbn1cblxuZnVuY3Rpb24gcmVhY3RpdmVSZWFkQXJyYXkoYXJyYXkpIHtcbiAgY29uc3QgcmF3ID0gdG9SYXcoYXJyYXkpO1xuICBpZiAocmF3ID09PSBhcnJheSkgcmV0dXJuIHJhdztcbiAgdHJhY2socmF3LCBcIml0ZXJhdGVcIiwgQVJSQVlfSVRFUkFURV9LRVkpO1xuICByZXR1cm4gaXNTaGFsbG93KGFycmF5KSA/IHJhdyA6IHJhdy5tYXAodG9SZWFjdGl2ZSk7XG59XG5mdW5jdGlvbiBzaGFsbG93UmVhZEFycmF5KGFycikge1xuICB0cmFjayhhcnIgPSB0b1JhdyhhcnIpLCBcIml0ZXJhdGVcIiwgQVJSQVlfSVRFUkFURV9LRVkpO1xuICByZXR1cm4gYXJyO1xufVxuY29uc3QgYXJyYXlJbnN0cnVtZW50YXRpb25zID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCBTeW1ib2wuaXRlcmF0b3IsIHRvUmVhY3RpdmUpO1xuICB9LFxuICBjb25jYXQoLi4uYXJncykge1xuICAgIHJldHVybiByZWFjdGl2ZVJlYWRBcnJheSh0aGlzKS5jb25jYXQoXG4gICAgICAuLi5hcmdzLm1hcCgoeCkgPT4gaXNBcnJheSh4KSA/IHJlYWN0aXZlUmVhZEFycmF5KHgpIDogeClcbiAgICApO1xuICB9LFxuICBlbnRyaWVzKCkge1xuICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCBcImVudHJpZXNcIiwgKHZhbHVlKSA9PiB7XG4gICAgICB2YWx1ZVsxXSA9IHRvUmVhY3RpdmUodmFsdWVbMV0pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICB9LFxuICBldmVyeShmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBhcHBseSh0aGlzLCBcImV2ZXJ5XCIsIGZuLCB0aGlzQXJnLCB2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGZpbHRlcihmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBhcHBseSh0aGlzLCBcImZpbHRlclwiLCBmbiwgdGhpc0FyZywgKHYpID0+IHYubWFwKHRvUmVhY3RpdmUpLCBhcmd1bWVudHMpO1xuICB9LFxuICBmaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGFwcGx5KHRoaXMsIFwiZmluZFwiLCBmbiwgdGhpc0FyZywgdG9SZWFjdGl2ZSwgYXJndW1lbnRzKTtcbiAgfSxcbiAgZmluZEluZGV4KGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGFwcGx5KHRoaXMsIFwiZmluZEluZGV4XCIsIGZuLCB0aGlzQXJnLCB2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGZpbmRMYXN0KGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGFwcGx5KHRoaXMsIFwiZmluZExhc3RcIiwgZm4sIHRoaXNBcmcsIHRvUmVhY3RpdmUsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGZpbmRMYXN0SW5kZXgoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gYXBwbHkodGhpcywgXCJmaW5kTGFzdEluZGV4XCIsIGZuLCB0aGlzQXJnLCB2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIC8vIGZsYXQsIGZsYXRNYXAgY291bGQgYmVuZWZpdCBmcm9tIEFSUkFZX0lURVJBVEUgYnV0IGFyZSBub3Qgc3RyYWlnaHQtZm9yd2FyZCB0byBpbXBsZW1lbnRcbiAgZm9yRWFjaChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBhcHBseSh0aGlzLCBcImZvckVhY2hcIiwgZm4sIHRoaXNBcmcsIHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfSxcbiAgaW5jbHVkZXMoLi4uYXJncykge1xuICAgIHJldHVybiBzZWFyY2hQcm94eSh0aGlzLCBcImluY2x1ZGVzXCIsIGFyZ3MpO1xuICB9LFxuICBpbmRleE9mKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gc2VhcmNoUHJveHkodGhpcywgXCJpbmRleE9mXCIsIGFyZ3MpO1xuICB9LFxuICBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiByZWFjdGl2ZVJlYWRBcnJheSh0aGlzKS5qb2luKHNlcGFyYXRvcik7XG4gIH0sXG4gIC8vIGtleXMoKSBpdGVyYXRvciBvbmx5IHJlYWRzIGBsZW5ndGhgLCBubyBvcHRpbWl6YXRpb24gcmVxdWlyZWRcbiAgbGFzdEluZGV4T2YoLi4uYXJncykge1xuICAgIHJldHVybiBzZWFyY2hQcm94eSh0aGlzLCBcImxhc3RJbmRleE9mXCIsIGFyZ3MpO1xuICB9LFxuICBtYXAoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gYXBwbHkodGhpcywgXCJtYXBcIiwgZm4sIHRoaXNBcmcsIHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfSxcbiAgcG9wKCkge1xuICAgIHJldHVybiBub1RyYWNraW5nKHRoaXMsIFwicG9wXCIpO1xuICB9LFxuICBwdXNoKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gbm9UcmFja2luZyh0aGlzLCBcInB1c2hcIiwgYXJncyk7XG4gIH0sXG4gIHJlZHVjZShmbiwgLi4uYXJncykge1xuICAgIHJldHVybiByZWR1Y2UodGhpcywgXCJyZWR1Y2VcIiwgZm4sIGFyZ3MpO1xuICB9LFxuICByZWR1Y2VSaWdodChmbiwgLi4uYXJncykge1xuICAgIHJldHVybiByZWR1Y2UodGhpcywgXCJyZWR1Y2VSaWdodFwiLCBmbiwgYXJncyk7XG4gIH0sXG4gIHNoaWZ0KCkge1xuICAgIHJldHVybiBub1RyYWNraW5nKHRoaXMsIFwic2hpZnRcIik7XG4gIH0sXG4gIC8vIHNsaWNlIGNvdWxkIHVzZSBBUlJBWV9JVEVSQVRFIGJ1dCBhbHNvIHNlZW1zIHRvIGJlZyBmb3IgcmFuZ2UgdHJhY2tpbmdcbiAgc29tZShmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBhcHBseSh0aGlzLCBcInNvbWVcIiwgZm4sIHRoaXNBcmcsIHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfSxcbiAgc3BsaWNlKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gbm9UcmFja2luZyh0aGlzLCBcInNwbGljZVwiLCBhcmdzKTtcbiAgfSxcbiAgdG9SZXZlcnNlZCgpIHtcbiAgICByZXR1cm4gcmVhY3RpdmVSZWFkQXJyYXkodGhpcykudG9SZXZlcnNlZCgpO1xuICB9LFxuICB0b1NvcnRlZChjb21wYXJlcikge1xuICAgIHJldHVybiByZWFjdGl2ZVJlYWRBcnJheSh0aGlzKS50b1NvcnRlZChjb21wYXJlcik7XG4gIH0sXG4gIHRvU3BsaWNlZCguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHJlYWN0aXZlUmVhZEFycmF5KHRoaXMpLnRvU3BsaWNlZCguLi5hcmdzKTtcbiAgfSxcbiAgdW5zaGlmdCguLi5hcmdzKSB7XG4gICAgcmV0dXJuIG5vVHJhY2tpbmcodGhpcywgXCJ1bnNoaWZ0XCIsIGFyZ3MpO1xuICB9LFxuICB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIFwidmFsdWVzXCIsIHRvUmVhY3RpdmUpO1xuICB9XG59O1xuZnVuY3Rpb24gaXRlcmF0b3Ioc2VsZiwgbWV0aG9kLCB3cmFwVmFsdWUpIHtcbiAgY29uc3QgYXJyID0gc2hhbGxvd1JlYWRBcnJheShzZWxmKTtcbiAgY29uc3QgaXRlciA9IGFyclttZXRob2RdKCk7XG4gIGlmIChhcnIgIT09IHNlbGYgJiYgIWlzU2hhbGxvdyhzZWxmKSkge1xuICAgIGl0ZXIuX25leHQgPSBpdGVyLm5leHQ7XG4gICAgaXRlci5uZXh0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXRlci5fbmV4dCgpO1xuICAgICAgaWYgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICByZXN1bHQudmFsdWUgPSB3cmFwVmFsdWUocmVzdWx0LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gaXRlcjtcbn1cbmNvbnN0IGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5mdW5jdGlvbiBhcHBseShzZWxmLCBtZXRob2QsIGZuLCB0aGlzQXJnLCB3cmFwcGVkUmV0Rm4sIGFyZ3MpIHtcbiAgY29uc3QgYXJyID0gc2hhbGxvd1JlYWRBcnJheShzZWxmKTtcbiAgY29uc3QgbmVlZHNXcmFwID0gYXJyICE9PSBzZWxmICYmICFpc1NoYWxsb3coc2VsZik7XG4gIGNvbnN0IG1ldGhvZEZuID0gYXJyW21ldGhvZF07XG4gIGlmIChtZXRob2RGbiAhPT0gYXJyYXlQcm90b1ttZXRob2RdKSB7XG4gICAgY29uc3QgcmVzdWx0MiA9IG1ldGhvZEZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIHJldHVybiBuZWVkc1dyYXAgPyB0b1JlYWN0aXZlKHJlc3VsdDIpIDogcmVzdWx0MjtcbiAgfVxuICBsZXQgd3JhcHBlZEZuID0gZm47XG4gIGlmIChhcnIgIT09IHNlbGYpIHtcbiAgICBpZiAobmVlZHNXcmFwKSB7XG4gICAgICB3cmFwcGVkRm4gPSBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB0b1JlYWN0aXZlKGl0ZW0pLCBpbmRleCwgc2VsZik7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZm4ubGVuZ3RoID4gMikge1xuICAgICAgd3JhcHBlZEZuID0gZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgaXRlbSwgaW5kZXgsIHNlbGYpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gbWV0aG9kRm4uY2FsbChhcnIsIHdyYXBwZWRGbiwgdGhpc0FyZyk7XG4gIHJldHVybiBuZWVkc1dyYXAgJiYgd3JhcHBlZFJldEZuID8gd3JhcHBlZFJldEZuKHJlc3VsdCkgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiByZWR1Y2Uoc2VsZiwgbWV0aG9kLCBmbiwgYXJncykge1xuICBjb25zdCBhcnIgPSBzaGFsbG93UmVhZEFycmF5KHNlbGYpO1xuICBsZXQgd3JhcHBlZEZuID0gZm47XG4gIGlmIChhcnIgIT09IHNlbGYpIHtcbiAgICBpZiAoIWlzU2hhbGxvdyhzZWxmKSkge1xuICAgICAgd3JhcHBlZEZuID0gZnVuY3Rpb24oYWNjLCBpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBhY2MsIHRvUmVhY3RpdmUoaXRlbSksIGluZGV4LCBzZWxmKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChmbi5sZW5ndGggPiAzKSB7XG4gICAgICB3cmFwcGVkRm4gPSBmdW5jdGlvbihhY2MsIGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGFjYywgaXRlbSwgaW5kZXgsIHNlbGYpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFyclttZXRob2RdKHdyYXBwZWRGbiwgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBzZWFyY2hQcm94eShzZWxmLCBtZXRob2QsIGFyZ3MpIHtcbiAgY29uc3QgYXJyID0gdG9SYXcoc2VsZik7XG4gIHRyYWNrKGFyciwgXCJpdGVyYXRlXCIsIEFSUkFZX0lURVJBVEVfS0VZKTtcbiAgY29uc3QgcmVzID0gYXJyW21ldGhvZF0oLi4uYXJncyk7XG4gIGlmICgocmVzID09PSAtMSB8fCByZXMgPT09IGZhbHNlKSAmJiBpc1Byb3h5KGFyZ3NbMF0pKSB7XG4gICAgYXJnc1swXSA9IHRvUmF3KGFyZ3NbMF0pO1xuICAgIHJldHVybiBhcnJbbWV0aG9kXSguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gbm9UcmFja2luZyhzZWxmLCBtZXRob2QsIGFyZ3MgPSBbXSkge1xuICBwYXVzZVRyYWNraW5nKCk7XG4gIHN0YXJ0QmF0Y2goKTtcbiAgY29uc3QgcmVzID0gdG9SYXcoc2VsZilbbWV0aG9kXS5hcHBseShzZWxmLCBhcmdzKTtcbiAgZW5kQmF0Y2goKTtcbiAgcmVzZXRUcmFja2luZygpO1xuICByZXR1cm4gcmVzO1xufVxuXG5jb25zdCBpc05vblRyYWNrYWJsZUtleXMgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChgX19wcm90b19fLF9fdl9pc1JlZixfX2lzVnVlYCk7XG5jb25zdCBidWlsdEluU3ltYm9scyA9IG5ldyBTZXQoXG4gIC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwiYXJndW1lbnRzXCIgJiYga2V5ICE9PSBcImNhbGxlclwiKS5tYXAoKGtleSkgPT4gU3ltYm9sW2tleV0pLmZpbHRlcihpc1N5bWJvbClcbik7XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShrZXkpIHtcbiAgaWYgKCFpc1N5bWJvbChrZXkpKSBrZXkgPSBTdHJpbmcoa2V5KTtcbiAgY29uc3Qgb2JqID0gdG9SYXcodGhpcyk7XG4gIHRyYWNrKG9iaiwgXCJoYXNcIiwga2V5KTtcbiAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpO1xufVxuY2xhc3MgQmFzZVJlYWN0aXZlSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKF9pc1JlYWRvbmx5ID0gZmFsc2UsIF9pc1NoYWxsb3cgPSBmYWxzZSkge1xuICAgIHRoaXMuX2lzUmVhZG9ubHkgPSBfaXNSZWFkb25seTtcbiAgICB0aGlzLl9pc1NoYWxsb3cgPSBfaXNTaGFsbG93O1xuICB9XG4gIGdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAoa2V5ID09PSBcIl9fdl9za2lwXCIpIHJldHVybiB0YXJnZXRbXCJfX3Zfc2tpcFwiXTtcbiAgICBjb25zdCBpc1JlYWRvbmx5MiA9IHRoaXMuX2lzUmVhZG9ubHksIGlzU2hhbGxvdzIgPSB0aGlzLl9pc1NoYWxsb3c7XG4gICAgaWYgKGtleSA9PT0gXCJfX3ZfaXNSZWFjdGl2ZVwiKSB7XG4gICAgICByZXR1cm4gIWlzUmVhZG9ubHkyO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIl9fdl9pc1JlYWRvbmx5XCIpIHtcbiAgICAgIHJldHVybiBpc1JlYWRvbmx5MjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfaXNTaGFsbG93XCIpIHtcbiAgICAgIHJldHVybiBpc1NoYWxsb3cyO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIl9fdl9yYXdcIikge1xuICAgICAgaWYgKHJlY2VpdmVyID09PSAoaXNSZWFkb25seTIgPyBpc1NoYWxsb3cyID8gc2hhbGxvd1JlYWRvbmx5TWFwIDogcmVhZG9ubHlNYXAgOiBpc1NoYWxsb3cyID8gc2hhbGxvd1JlYWN0aXZlTWFwIDogcmVhY3RpdmVNYXApLmdldCh0YXJnZXQpIHx8IC8vIHJlY2VpdmVyIGlzIG5vdCB0aGUgcmVhY3RpdmUgcHJveHksIGJ1dCBoYXMgdGhlIHNhbWUgcHJvdG90eXBlXG4gICAgICAvLyB0aGlzIG1lYW5zIHRoZSByZWNlaXZlciBpcyBhIHVzZXIgcHJveHkgb2YgdGhlIHJlYWN0aXZlIHByb3h5XG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHJlY2VpdmVyKSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXRJc0FycmF5ID0gaXNBcnJheSh0YXJnZXQpO1xuICAgIGlmICghaXNSZWFkb25seTIpIHtcbiAgICAgIGxldCBmbjtcbiAgICAgIGlmICh0YXJnZXRJc0FycmF5ICYmIChmbiA9IGFycmF5SW5zdHJ1bWVudGF0aW9uc1trZXldKSkge1xuICAgICAgICByZXR1cm4gZm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSBcImhhc093blByb3BlcnR5XCIpIHtcbiAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXMgPSBSZWZsZWN0LmdldChcbiAgICAgIHRhcmdldCxcbiAgICAgIGtleSxcbiAgICAgIC8vIGlmIHRoaXMgaXMgYSBwcm94eSB3cmFwcGluZyBhIHJlZiwgcmV0dXJuIG1ldGhvZHMgdXNpbmcgdGhlIHJhdyByZWZcbiAgICAgIC8vIGFzIHJlY2VpdmVyIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIGB0b1Jhd2Agb24gdGhlIHJlZiBpbiBhbGxcbiAgICAgIC8vIGl0cyBjbGFzcyBtZXRob2RzXG4gICAgICBpc1JlZih0YXJnZXQpID8gdGFyZ2V0IDogcmVjZWl2ZXJcbiAgICApO1xuICAgIGlmIChpc1N5bWJvbChrZXkpID8gYnVpbHRJblN5bWJvbHMuaGFzKGtleSkgOiBpc05vblRyYWNrYWJsZUtleXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgaWYgKCFpc1JlYWRvbmx5Mikge1xuICAgICAgdHJhY2sodGFyZ2V0LCBcImdldFwiLCBrZXkpO1xuICAgIH1cbiAgICBpZiAoaXNTaGFsbG93Mikge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgaWYgKGlzUmVmKHJlcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0SXNBcnJheSAmJiBpc0ludGVnZXJLZXkoa2V5KSA/IHJlcyA6IHJlcy52YWx1ZTtcbiAgICAgIHJldHVybiBpc1JlYWRvbmx5MiAmJiBpc09iamVjdCh2YWx1ZSkgPyByZWFkb25seSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHJlcykpIHtcbiAgICAgIHJldHVybiBpc1JlYWRvbmx5MiA/IHJlYWRvbmx5KHJlcykgOiByZWFjdGl2ZShyZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5jbGFzcyBNdXRhYmxlUmVhY3RpdmVIYW5kbGVyIGV4dGVuZHMgQmFzZVJlYWN0aXZlSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGlzU2hhbGxvdzIgPSBmYWxzZSkge1xuICAgIHN1cGVyKGZhbHNlLCBpc1NoYWxsb3cyKTtcbiAgfVxuICBzZXQodGFyZ2V0LCBrZXksIHZhbHVlLCByZWNlaXZlcikge1xuICAgIGxldCBvbGRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgIGlmICghdGhpcy5faXNTaGFsbG93KSB7XG4gICAgICBjb25zdCBpc09sZFZhbHVlUmVhZG9ubHkgPSBpc1JlYWRvbmx5KG9sZFZhbHVlKTtcbiAgICAgIGlmICghaXNTaGFsbG93KHZhbHVlKSAmJiAhaXNSZWFkb25seSh2YWx1ZSkpIHtcbiAgICAgICAgb2xkVmFsdWUgPSB0b1JhdyhvbGRWYWx1ZSk7XG4gICAgICAgIHZhbHVlID0gdG9SYXcodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5KHRhcmdldCkgJiYgaXNSZWYob2xkVmFsdWUpICYmICFpc1JlZih2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGlzT2xkVmFsdWVSZWFkb25seSkge1xuICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICBgU2V0IG9wZXJhdGlvbiBvbiBrZXkgXCIke1N0cmluZyhrZXkpfVwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LmAsXG4gICAgICAgICAgICAgIHRhcmdldFtrZXldXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbGRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGhhZEtleSA9IGlzQXJyYXkodGFyZ2V0KSAmJiBpc0ludGVnZXJLZXkoa2V5KSA/IE51bWJlcihrZXkpIDwgdGFyZ2V0Lmxlbmd0aCA6IGhhc093bih0YXJnZXQsIGtleSk7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5zZXQoXG4gICAgICB0YXJnZXQsXG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGlzUmVmKHRhcmdldCkgPyB0YXJnZXQgOiByZWNlaXZlclxuICAgICk7XG4gICAgaWYgKHRhcmdldCA9PT0gdG9SYXcocmVjZWl2ZXIpKSB7XG4gICAgICBpZiAoIWhhZEtleSkge1xuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJhZGRcIiwga2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGhhc0NoYW5nZWQodmFsdWUsIG9sZFZhbHVlKSkge1xuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJzZXRcIiwga2V5LCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwga2V5KSB7XG4gICAgY29uc3QgaGFkS2V5ID0gaGFzT3duKHRhcmdldCwga2V5KTtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBrZXkpO1xuICAgIGlmIChyZXN1bHQgJiYgaGFkS2V5KSB7XG4gICAgICB0cmlnZ2VyKHRhcmdldCwgXCJkZWxldGVcIiwga2V5LCB2b2lkIDAsIG9sZFZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBoYXModGFyZ2V0LCBrZXkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0Lmhhcyh0YXJnZXQsIGtleSk7XG4gICAgaWYgKCFpc1N5bWJvbChrZXkpIHx8ICFidWlsdEluU3ltYm9scy5oYXMoa2V5KSkge1xuICAgICAgdHJhY2sodGFyZ2V0LCBcImhhc1wiLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIG93bktleXModGFyZ2V0KSB7XG4gICAgdHJhY2soXG4gICAgICB0YXJnZXQsXG4gICAgICBcIml0ZXJhdGVcIixcbiAgICAgIGlzQXJyYXkodGFyZ2V0KSA/IFwibGVuZ3RoXCIgOiBJVEVSQVRFX0tFWVxuICAgICk7XG4gICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpO1xuICB9XG59XG5jbGFzcyBSZWFkb25seVJlYWN0aXZlSGFuZGxlciBleHRlbmRzIEJhc2VSZWFjdGl2ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihpc1NoYWxsb3cyID0gZmFsc2UpIHtcbiAgICBzdXBlcih0cnVlLCBpc1NoYWxsb3cyKTtcbiAgfVxuICBzZXQodGFyZ2V0LCBrZXkpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgd2FybihcbiAgICAgICAgYFNldCBvcGVyYXRpb24gb24ga2V5IFwiJHtTdHJpbmcoa2V5KX1cIiBmYWlsZWQ6IHRhcmdldCBpcyByZWFkb25seS5gLFxuICAgICAgICB0YXJnZXRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwga2V5KSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGBEZWxldGUgb3BlcmF0aW9uIG9uIGtleSBcIiR7U3RyaW5nKGtleSl9XCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuYCxcbiAgICAgICAgdGFyZ2V0XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuY29uc3QgbXV0YWJsZUhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNdXRhYmxlUmVhY3RpdmVIYW5kbGVyKCk7XG5jb25zdCByZWFkb25seUhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBSZWFkb25seVJlYWN0aXZlSGFuZGxlcigpO1xuY29uc3Qgc2hhbGxvd1JlYWN0aXZlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE11dGFibGVSZWFjdGl2ZUhhbmRsZXIodHJ1ZSk7XG5jb25zdCBzaGFsbG93UmVhZG9ubHlIYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgUmVhZG9ubHlSZWFjdGl2ZUhhbmRsZXIodHJ1ZSk7XG5cbmNvbnN0IHRvU2hhbGxvdyA9ICh2YWx1ZSkgPT4gdmFsdWU7XG5jb25zdCBnZXRQcm90byA9ICh2KSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHYpO1xuZnVuY3Rpb24gY3JlYXRlSXRlcmFibGVNZXRob2QobWV0aG9kLCBpc1JlYWRvbmx5MiwgaXNTaGFsbG93Mikge1xuICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXNbXCJfX3ZfcmF3XCJdO1xuICAgIGNvbnN0IHJhd1RhcmdldCA9IHRvUmF3KHRhcmdldCk7XG4gICAgY29uc3QgdGFyZ2V0SXNNYXAgPSBpc01hcChyYXdUYXJnZXQpO1xuICAgIGNvbnN0IGlzUGFpciA9IG1ldGhvZCA9PT0gXCJlbnRyaWVzXCIgfHwgbWV0aG9kID09PSBTeW1ib2wuaXRlcmF0b3IgJiYgdGFyZ2V0SXNNYXA7XG4gICAgY29uc3QgaXNLZXlPbmx5ID0gbWV0aG9kID09PSBcImtleXNcIiAmJiB0YXJnZXRJc01hcDtcbiAgICBjb25zdCBpbm5lckl0ZXJhdG9yID0gdGFyZ2V0W21ldGhvZF0oLi4uYXJncyk7XG4gICAgY29uc3Qgd3JhcCA9IGlzU2hhbGxvdzIgPyB0b1NoYWxsb3cgOiBpc1JlYWRvbmx5MiA/IHRvUmVhZG9ubHkgOiB0b1JlYWN0aXZlO1xuICAgICFpc1JlYWRvbmx5MiAmJiB0cmFjayhcbiAgICAgIHJhd1RhcmdldCxcbiAgICAgIFwiaXRlcmF0ZVwiLFxuICAgICAgaXNLZXlPbmx5ID8gTUFQX0tFWV9JVEVSQVRFX0tFWSA6IElURVJBVEVfS0VZXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gaXRlcmF0b3IgcHJvdG9jb2xcbiAgICAgIG5leHQoKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGlubmVySXRlcmF0b3IubmV4dCgpO1xuICAgICAgICByZXR1cm4gZG9uZSA/IHsgdmFsdWUsIGRvbmUgfSA6IHtcbiAgICAgICAgICB2YWx1ZTogaXNQYWlyID8gW3dyYXAodmFsdWVbMF0pLCB3cmFwKHZhbHVlWzFdKV0gOiB3cmFwKHZhbHVlKSxcbiAgICAgICAgICBkb25lXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLy8gaXRlcmFibGUgcHJvdG9jb2xcbiAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlUmVhZG9ubHlNZXRob2QodHlwZSkge1xuICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICBjb25zdCBrZXkgPSBhcmdzWzBdID8gYG9uIGtleSBcIiR7YXJnc1swXX1cIiBgIDogYGA7XG4gICAgICB3YXJuKFxuICAgICAgICBgJHtjYXBpdGFsaXplKHR5cGUpfSBvcGVyYXRpb24gJHtrZXl9ZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuYCxcbiAgICAgICAgdG9SYXcodGhpcylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlID09PSBcImRlbGV0ZVwiID8gZmFsc2UgOiB0eXBlID09PSBcImNsZWFyXCIgPyB2b2lkIDAgOiB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudGF0aW9ucyhyZWFkb25seSwgc2hhbGxvdykge1xuICBjb25zdCBpbnN0cnVtZW50YXRpb25zID0ge1xuICAgIGdldChrZXkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXNbXCJfX3ZfcmF3XCJdO1xuICAgICAgY29uc3QgcmF3VGFyZ2V0ID0gdG9SYXcodGFyZ2V0KTtcbiAgICAgIGNvbnN0IHJhd0tleSA9IHRvUmF3KGtleSk7XG4gICAgICBpZiAoIXJlYWRvbmx5KSB7XG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKGtleSwgcmF3S2V5KSkge1xuICAgICAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJnZXRcIiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFjayhyYXdUYXJnZXQsIFwiZ2V0XCIsIHJhd0tleSk7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGhhcyB9ID0gZ2V0UHJvdG8ocmF3VGFyZ2V0KTtcbiAgICAgIGNvbnN0IHdyYXAgPSBzaGFsbG93ID8gdG9TaGFsbG93IDogcmVhZG9ubHkgPyB0b1JlYWRvbmx5IDogdG9SZWFjdGl2ZTtcbiAgICAgIGlmIChoYXMuY2FsbChyYXdUYXJnZXQsIGtleSkpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAodGFyZ2V0LmdldChrZXkpKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFzLmNhbGwocmF3VGFyZ2V0LCByYXdLZXkpKSB7XG4gICAgICAgIHJldHVybiB3cmFwKHRhcmdldC5nZXQocmF3S2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldCAhPT0gcmF3VGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5nZXQoa2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldCBzaXplKCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpc1tcIl9fdl9yYXdcIl07XG4gICAgICAhcmVhZG9ubHkgJiYgdHJhY2sodG9SYXcodGFyZ2V0KSwgXCJpdGVyYXRlXCIsIElURVJBVEVfS0VZKTtcbiAgICAgIHJldHVybiB0YXJnZXQuc2l6ZTtcbiAgICB9LFxuICAgIGhhcyhrZXkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXNbXCJfX3ZfcmF3XCJdO1xuICAgICAgY29uc3QgcmF3VGFyZ2V0ID0gdG9SYXcodGFyZ2V0KTtcbiAgICAgIGNvbnN0IHJhd0tleSA9IHRvUmF3KGtleSk7XG4gICAgICBpZiAoIXJlYWRvbmx5KSB7XG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKGtleSwgcmF3S2V5KSkge1xuICAgICAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJoYXNcIiwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFjayhyYXdUYXJnZXQsIFwiaGFzXCIsIHJhd0tleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5ID09PSByYXdLZXkgPyB0YXJnZXQuaGFzKGtleSkgOiB0YXJnZXQuaGFzKGtleSkgfHwgdGFyZ2V0LmhhcyhyYXdLZXkpO1xuICAgIH0sXG4gICAgZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgY29uc3Qgb2JzZXJ2ZWQgPSB0aGlzO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gb2JzZXJ2ZWRbXCJfX3ZfcmF3XCJdO1xuICAgICAgY29uc3QgcmF3VGFyZ2V0ID0gdG9SYXcodGFyZ2V0KTtcbiAgICAgIGNvbnN0IHdyYXAgPSBzaGFsbG93ID8gdG9TaGFsbG93IDogcmVhZG9ubHkgPyB0b1JlYWRvbmx5IDogdG9SZWFjdGl2ZTtcbiAgICAgICFyZWFkb25seSAmJiB0cmFjayhyYXdUYXJnZXQsIFwiaXRlcmF0ZVwiLCBJVEVSQVRFX0tFWSk7XG4gICAgICByZXR1cm4gdGFyZ2V0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgd3JhcCh2YWx1ZSksIHdyYXAoa2V5KSwgb2JzZXJ2ZWQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBleHRlbmQoXG4gICAgaW5zdHJ1bWVudGF0aW9ucyxcbiAgICByZWFkb25seSA/IHtcbiAgICAgIGFkZDogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJhZGRcIiksXG4gICAgICBzZXQ6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwic2V0XCIpLFxuICAgICAgZGVsZXRlOiBjcmVhdGVSZWFkb25seU1ldGhvZChcImRlbGV0ZVwiKSxcbiAgICAgIGNsZWFyOiBjcmVhdGVSZWFkb25seU1ldGhvZChcImNsZWFyXCIpXG4gICAgfSA6IHtcbiAgICAgIGFkZCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXNoYWxsb3cgJiYgIWlzU2hhbGxvdyh2YWx1ZSkgJiYgIWlzUmVhZG9ubHkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB0b1Jhdyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdG9SYXcodGhpcyk7XG4gICAgICAgIGNvbnN0IHByb3RvID0gZ2V0UHJvdG8odGFyZ2V0KTtcbiAgICAgICAgY29uc3QgaGFkS2V5ID0gcHJvdG8uaGFzLmNhbGwodGFyZ2V0LCB2YWx1ZSk7XG4gICAgICAgIGlmICghaGFkS2V5KSB7XG4gICAgICAgICAgdGFyZ2V0LmFkZCh2YWx1ZSk7XG4gICAgICAgICAgdHJpZ2dlcih0YXJnZXQsIFwiYWRkXCIsIHZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFzaGFsbG93ICYmICFpc1NoYWxsb3codmFsdWUpICYmICFpc1JlYWRvbmx5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdG9SYXcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRvUmF3KHRoaXMpO1xuICAgICAgICBjb25zdCB7IGhhcywgZ2V0IH0gPSBnZXRQcm90byh0YXJnZXQpO1xuICAgICAgICBsZXQgaGFkS2V5ID0gaGFzLmNhbGwodGFyZ2V0LCBrZXkpO1xuICAgICAgICBpZiAoIWhhZEtleSkge1xuICAgICAgICAgIGtleSA9IHRvUmF3KGtleSk7XG4gICAgICAgICAgaGFkS2V5ID0gaGFzLmNhbGwodGFyZ2V0LCBrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBjaGVja0lkZW50aXR5S2V5cyh0YXJnZXQsIGhhcywga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGdldC5jYWxsKHRhcmdldCwga2V5KTtcbiAgICAgICAgdGFyZ2V0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKCFoYWRLZXkpIHtcbiAgICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJhZGRcIiwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzQ2hhbmdlZCh2YWx1ZSwgb2xkVmFsdWUpKSB7XG4gICAgICAgICAgdHJpZ2dlcih0YXJnZXQsIFwic2V0XCIsIGtleSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBkZWxldGUoa2V5KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRvUmF3KHRoaXMpO1xuICAgICAgICBjb25zdCB7IGhhcywgZ2V0IH0gPSBnZXRQcm90byh0YXJnZXQpO1xuICAgICAgICBsZXQgaGFkS2V5ID0gaGFzLmNhbGwodGFyZ2V0LCBrZXkpO1xuICAgICAgICBpZiAoIWhhZEtleSkge1xuICAgICAgICAgIGtleSA9IHRvUmF3KGtleSk7XG4gICAgICAgICAgaGFkS2V5ID0gaGFzLmNhbGwodGFyZ2V0LCBrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBjaGVja0lkZW50aXR5S2V5cyh0YXJnZXQsIGhhcywga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGdldCA/IGdldC5jYWxsKHRhcmdldCwga2V5KSA6IHZvaWQgMDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGFyZ2V0LmRlbGV0ZShrZXkpO1xuICAgICAgICBpZiAoaGFkS2V5KSB7XG4gICAgICAgICAgdHJpZ2dlcih0YXJnZXQsIFwiZGVsZXRlXCIsIGtleSwgdm9pZCAwLCBvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICBjbGVhcigpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdG9SYXcodGhpcyk7XG4gICAgICAgIGNvbnN0IGhhZEl0ZW1zID0gdGFyZ2V0LnNpemUgIT09IDA7XG4gICAgICAgIGNvbnN0IG9sZFRhcmdldCA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBpc01hcCh0YXJnZXQpID8gbmV3IE1hcCh0YXJnZXQpIDogbmV3IFNldCh0YXJnZXQpIDogdm9pZCAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0YXJnZXQuY2xlYXIoKTtcbiAgICAgICAgaWYgKGhhZEl0ZW1zKSB7XG4gICAgICAgICAgdHJpZ2dlcihcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIFwiY2xlYXJcIixcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIG9sZFRhcmdldFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGNvbnN0IGl0ZXJhdG9yTWV0aG9kcyA9IFtcbiAgICBcImtleXNcIixcbiAgICBcInZhbHVlc1wiLFxuICAgIFwiZW50cmllc1wiLFxuICAgIFN5bWJvbC5pdGVyYXRvclxuICBdO1xuICBpdGVyYXRvck1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgaW5zdHJ1bWVudGF0aW9uc1ttZXRob2RdID0gY3JlYXRlSXRlcmFibGVNZXRob2QobWV0aG9kLCByZWFkb25seSwgc2hhbGxvdyk7XG4gIH0pO1xuICByZXR1cm4gaW5zdHJ1bWVudGF0aW9ucztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcihpc1JlYWRvbmx5Miwgc2hhbGxvdykge1xuICBjb25zdCBpbnN0cnVtZW50YXRpb25zID0gY3JlYXRlSW5zdHJ1bWVudGF0aW9ucyhpc1JlYWRvbmx5Miwgc2hhbGxvdyk7XG4gIHJldHVybiAodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gXCJfX3ZfaXNSZWFjdGl2ZVwiKSB7XG4gICAgICByZXR1cm4gIWlzUmVhZG9ubHkyO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIl9fdl9pc1JlYWRvbmx5XCIpIHtcbiAgICAgIHJldHVybiBpc1JlYWRvbmx5MjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfcmF3XCIpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0LmdldChcbiAgICAgIGhhc093bihpbnN0cnVtZW50YXRpb25zLCBrZXkpICYmIGtleSBpbiB0YXJnZXQgPyBpbnN0cnVtZW50YXRpb25zIDogdGFyZ2V0LFxuICAgICAga2V5LFxuICAgICAgcmVjZWl2ZXJcbiAgICApO1xuICB9O1xufVxuY29uc3QgbXV0YWJsZUNvbGxlY3Rpb25IYW5kbGVycyA9IHtcbiAgZ2V0OiAvKiBAX19QVVJFX18gKi8gY3JlYXRlSW5zdHJ1bWVudGF0aW9uR2V0dGVyKGZhbHNlLCBmYWxzZSlcbn07XG5jb25zdCBzaGFsbG93Q29sbGVjdGlvbkhhbmRsZXJzID0ge1xuICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVJbnN0cnVtZW50YXRpb25HZXR0ZXIoZmFsc2UsIHRydWUpXG59O1xuY29uc3QgcmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcih0cnVlLCBmYWxzZSlcbn07XG5jb25zdCBzaGFsbG93UmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcih0cnVlLCB0cnVlKVxufTtcbmZ1bmN0aW9uIGNoZWNrSWRlbnRpdHlLZXlzKHRhcmdldCwgaGFzLCBrZXkpIHtcbiAgY29uc3QgcmF3S2V5ID0gdG9SYXcoa2V5KTtcbiAgaWYgKHJhd0tleSAhPT0ga2V5ICYmIGhhcy5jYWxsKHRhcmdldCwgcmF3S2V5KSkge1xuICAgIGNvbnN0IHR5cGUgPSB0b1Jhd1R5cGUodGFyZ2V0KTtcbiAgICB3YXJuKFxuICAgICAgYFJlYWN0aXZlICR7dHlwZX0gY29udGFpbnMgYm90aCB0aGUgcmF3IGFuZCByZWFjdGl2ZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBvYmplY3Qke3R5cGUgPT09IGBNYXBgID8gYCBhcyBrZXlzYCA6IGBgfSwgd2hpY2ggY2FuIGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzLiBBdm9pZCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgcmF3IGFuZCByZWFjdGl2ZSB2ZXJzaW9ucyBvZiBhbiBvYmplY3QgYW5kIG9ubHkgdXNlIHRoZSByZWFjdGl2ZSB2ZXJzaW9uIGlmIHBvc3NpYmxlLmBcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHJlYWN0aXZlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5jb25zdCBzaGFsbG93UmVhY3RpdmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHJlYWRvbmx5TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5jb25zdCBzaGFsbG93UmVhZG9ubHlNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIHRhcmdldFR5cGVNYXAocmF3VHlwZSkge1xuICBzd2l0Y2ggKHJhd1R5cGUpIHtcbiAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICByZXR1cm4gMSAvKiBDT01NT04gKi87XG4gICAgY2FzZSBcIk1hcFwiOlxuICAgIGNhc2UgXCJTZXRcIjpcbiAgICBjYXNlIFwiV2Vha01hcFwiOlxuICAgIGNhc2UgXCJXZWFrU2V0XCI6XG4gICAgICByZXR1cm4gMiAvKiBDT0xMRUNUSU9OICovO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMCAvKiBJTlZBTElEICovO1xuICB9XG59XG5mdW5jdGlvbiBnZXRUYXJnZXRUeXBlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZVtcIl9fdl9za2lwXCJdIHx8ICFPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSA/IDAgLyogSU5WQUxJRCAqLyA6IHRhcmdldFR5cGVNYXAodG9SYXdUeXBlKHZhbHVlKSk7XG59XG5mdW5jdGlvbiByZWFjdGl2ZSh0YXJnZXQpIHtcbiAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVJlYWN0aXZlT2JqZWN0KFxuICAgIHRhcmdldCxcbiAgICBmYWxzZSxcbiAgICBtdXRhYmxlSGFuZGxlcnMsXG4gICAgbXV0YWJsZUNvbGxlY3Rpb25IYW5kbGVycyxcbiAgICByZWFjdGl2ZU1hcFxuICApO1xufVxuZnVuY3Rpb24gc2hhbGxvd1JlYWN0aXZlKHRhcmdldCkge1xuICByZXR1cm4gY3JlYXRlUmVhY3RpdmVPYmplY3QoXG4gICAgdGFyZ2V0LFxuICAgIGZhbHNlLFxuICAgIHNoYWxsb3dSZWFjdGl2ZUhhbmRsZXJzLFxuICAgIHNoYWxsb3dDb2xsZWN0aW9uSGFuZGxlcnMsXG4gICAgc2hhbGxvd1JlYWN0aXZlTWFwXG4gICk7XG59XG5mdW5jdGlvbiByZWFkb25seSh0YXJnZXQpIHtcbiAgcmV0dXJuIGNyZWF0ZVJlYWN0aXZlT2JqZWN0KFxuICAgIHRhcmdldCxcbiAgICB0cnVlLFxuICAgIHJlYWRvbmx5SGFuZGxlcnMsXG4gICAgcmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMsXG4gICAgcmVhZG9ubHlNYXBcbiAgKTtcbn1cbmZ1bmN0aW9uIHNoYWxsb3dSZWFkb25seSh0YXJnZXQpIHtcbiAgcmV0dXJuIGNyZWF0ZVJlYWN0aXZlT2JqZWN0KFxuICAgIHRhcmdldCxcbiAgICB0cnVlLFxuICAgIHNoYWxsb3dSZWFkb25seUhhbmRsZXJzLFxuICAgIHNoYWxsb3dSZWFkb25seUNvbGxlY3Rpb25IYW5kbGVycyxcbiAgICBzaGFsbG93UmVhZG9ubHlNYXBcbiAgKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlT2JqZWN0KHRhcmdldCwgaXNSZWFkb25seTIsIGJhc2VIYW5kbGVycywgY29sbGVjdGlvbkhhbmRsZXJzLCBwcm94eU1hcCkge1xuICBpZiAoIWlzT2JqZWN0KHRhcmdldCkpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgd2FybihcbiAgICAgICAgYHZhbHVlIGNhbm5vdCBiZSBtYWRlICR7aXNSZWFkb25seTIgPyBcInJlYWRvbmx5XCIgOiBcInJlYWN0aXZlXCJ9OiAke1N0cmluZyhcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgKX1gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG4gIGlmICh0YXJnZXRbXCJfX3ZfcmF3XCJdICYmICEoaXNSZWFkb25seTIgJiYgdGFyZ2V0W1wiX192X2lzUmVhY3RpdmVcIl0pKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICBjb25zdCB0YXJnZXRUeXBlID0gZ2V0VGFyZ2V0VHlwZSh0YXJnZXQpO1xuICBpZiAodGFyZ2V0VHlwZSA9PT0gMCAvKiBJTlZBTElEICovKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICBjb25zdCBleGlzdGluZ1Byb3h5ID0gcHJveHlNYXAuZ2V0KHRhcmdldCk7XG4gIGlmIChleGlzdGluZ1Byb3h5KSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nUHJveHk7XG4gIH1cbiAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoXG4gICAgdGFyZ2V0LFxuICAgIHRhcmdldFR5cGUgPT09IDIgLyogQ09MTEVDVElPTiAqLyA/IGNvbGxlY3Rpb25IYW5kbGVycyA6IGJhc2VIYW5kbGVyc1xuICApO1xuICBwcm94eU1hcC5zZXQodGFyZ2V0LCBwcm94eSk7XG4gIHJldHVybiBwcm94eTtcbn1cbmZ1bmN0aW9uIGlzUmVhY3RpdmUodmFsdWUpIHtcbiAgaWYgKGlzUmVhZG9ubHkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWVbXCJfX3ZfcmF3XCJdKTtcbiAgfVxuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWVbXCJfX3ZfaXNSZWFjdGl2ZVwiXSk7XG59XG5mdW5jdGlvbiBpc1JlYWRvbmx5KHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZVtcIl9fdl9pc1JlYWRvbmx5XCJdKTtcbn1cbmZ1bmN0aW9uIGlzU2hhbGxvdyh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWVbXCJfX3ZfaXNTaGFsbG93XCJdKTtcbn1cbmZ1bmN0aW9uIGlzUHJveHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gISF2YWx1ZVtcIl9fdl9yYXdcIl0gOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHRvUmF3KG9ic2VydmVkKSB7XG4gIGNvbnN0IHJhdyA9IG9ic2VydmVkICYmIG9ic2VydmVkW1wiX192X3Jhd1wiXTtcbiAgcmV0dXJuIHJhdyA/IHRvUmF3KHJhdykgOiBvYnNlcnZlZDtcbn1cbmZ1bmN0aW9uIG1hcmtSYXcodmFsdWUpIHtcbiAgaWYgKCFoYXNPd24odmFsdWUsIFwiX192X3NraXBcIikgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkpIHtcbiAgICBkZWYodmFsdWUsIFwiX192X3NraXBcIiwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuY29uc3QgdG9SZWFjdGl2ZSA9ICh2YWx1ZSkgPT4gaXNPYmplY3QodmFsdWUpID8gcmVhY3RpdmUodmFsdWUpIDogdmFsdWU7XG5jb25zdCB0b1JlYWRvbmx5ID0gKHZhbHVlKSA9PiBpc09iamVjdCh2YWx1ZSkgPyByZWFkb25seSh2YWx1ZSkgOiB2YWx1ZTtcblxuZnVuY3Rpb24gaXNSZWYocikge1xuICByZXR1cm4gciA/IHJbXCJfX3ZfaXNSZWZcIl0gPT09IHRydWUgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHJlZih2YWx1ZSkge1xuICByZXR1cm4gY3JlYXRlUmVmKHZhbHVlLCBmYWxzZSk7XG59XG5mdW5jdGlvbiBzaGFsbG93UmVmKHZhbHVlKSB7XG4gIHJldHVybiBjcmVhdGVSZWYodmFsdWUsIHRydWUpO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVmKHJhd1ZhbHVlLCBzaGFsbG93KSB7XG4gIGlmIChpc1JlZihyYXdWYWx1ZSkpIHtcbiAgICByZXR1cm4gcmF3VmFsdWU7XG4gIH1cbiAgcmV0dXJuIG5ldyBSZWZJbXBsKHJhd1ZhbHVlLCBzaGFsbG93KTtcbn1cbmNsYXNzIFJlZkltcGwge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSwgaXNTaGFsbG93Mikge1xuICAgIHRoaXMuZGVwID0gbmV3IERlcCgpO1xuICAgIHRoaXNbXCJfX3ZfaXNSZWZcIl0gPSB0cnVlO1xuICAgIHRoaXNbXCJfX3ZfaXNTaGFsbG93XCJdID0gZmFsc2U7XG4gICAgdGhpcy5fcmF3VmFsdWUgPSBpc1NoYWxsb3cyID8gdmFsdWUgOiB0b1Jhdyh2YWx1ZSk7XG4gICAgdGhpcy5fdmFsdWUgPSBpc1NoYWxsb3cyID8gdmFsdWUgOiB0b1JlYWN0aXZlKHZhbHVlKTtcbiAgICB0aGlzW1wiX192X2lzU2hhbGxvd1wiXSA9IGlzU2hhbGxvdzI7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB0aGlzLmRlcC50cmFjayh7XG4gICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgdHlwZTogXCJnZXRcIixcbiAgICAgICAga2V5OiBcInZhbHVlXCJcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlcC50cmFjaygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9yYXdWYWx1ZTtcbiAgICBjb25zdCB1c2VEaXJlY3RWYWx1ZSA9IHRoaXNbXCJfX3ZfaXNTaGFsbG93XCJdIHx8IGlzU2hhbGxvdyhuZXdWYWx1ZSkgfHwgaXNSZWFkb25seShuZXdWYWx1ZSk7XG4gICAgbmV3VmFsdWUgPSB1c2VEaXJlY3RWYWx1ZSA/IG5ld1ZhbHVlIDogdG9SYXcobmV3VmFsdWUpO1xuICAgIGlmIChoYXNDaGFuZ2VkKG5ld1ZhbHVlLCBvbGRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuX3Jhd1ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLl92YWx1ZSA9IHVzZURpcmVjdFZhbHVlID8gbmV3VmFsdWUgOiB0b1JlYWN0aXZlKG5ld1ZhbHVlKTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIHRoaXMuZGVwLnRyaWdnZXIoe1xuICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICAgIGtleTogXCJ2YWx1ZVwiLFxuICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgIG9sZFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZXAudHJpZ2dlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdHJpZ2dlclJlZihyZWYyKSB7XG4gIGlmIChyZWYyLmRlcCkge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICByZWYyLmRlcC50cmlnZ2VyKHtcbiAgICAgICAgdGFyZ2V0OiByZWYyLFxuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICBrZXk6IFwidmFsdWVcIixcbiAgICAgICAgbmV3VmFsdWU6IHJlZjIuX3ZhbHVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmMi5kZXAudHJpZ2dlcigpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5yZWYocmVmMikge1xuICByZXR1cm4gaXNSZWYocmVmMikgPyByZWYyLnZhbHVlIDogcmVmMjtcbn1cbmZ1bmN0aW9uIHRvVmFsdWUoc291cmNlKSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSkgPyBzb3VyY2UoKSA6IHVucmVmKHNvdXJjZSk7XG59XG5jb25zdCBzaGFsbG93VW53cmFwSGFuZGxlcnMgPSB7XG4gIGdldDogKHRhcmdldCwga2V5LCByZWNlaXZlcikgPT4ga2V5ID09PSBcIl9fdl9yYXdcIiA/IHRhcmdldCA6IHVucmVmKFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcikpLFxuICBzZXQ6ICh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKSA9PiB7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICBpZiAoaXNSZWYob2xkVmFsdWUpICYmICFpc1JlZih2YWx1ZSkpIHtcbiAgICAgIG9sZFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgfVxufTtcbmZ1bmN0aW9uIHByb3h5UmVmcyhvYmplY3RXaXRoUmVmcykge1xuICByZXR1cm4gaXNSZWFjdGl2ZShvYmplY3RXaXRoUmVmcykgPyBvYmplY3RXaXRoUmVmcyA6IG5ldyBQcm94eShvYmplY3RXaXRoUmVmcywgc2hhbGxvd1Vud3JhcEhhbmRsZXJzKTtcbn1cbmNsYXNzIEN1c3RvbVJlZkltcGwge1xuICBjb25zdHJ1Y3RvcihmYWN0b3J5KSB7XG4gICAgdGhpc1tcIl9fdl9pc1JlZlwiXSA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSB2b2lkIDA7XG4gICAgY29uc3QgZGVwID0gdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gICAgY29uc3QgeyBnZXQsIHNldCB9ID0gZmFjdG9yeShkZXAudHJhY2suYmluZChkZXApLCBkZXAudHJpZ2dlci5iaW5kKGRlcCkpO1xuICAgIHRoaXMuX2dldCA9IGdldDtcbiAgICB0aGlzLl9zZXQgPSBzZXQ7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSA9IHRoaXMuX2dldCgpO1xuICB9XG4gIHNldCB2YWx1ZShuZXdWYWwpIHtcbiAgICB0aGlzLl9zZXQobmV3VmFsKTtcbiAgfVxufVxuZnVuY3Rpb24gY3VzdG9tUmVmKGZhY3RvcnkpIHtcbiAgcmV0dXJuIG5ldyBDdXN0b21SZWZJbXBsKGZhY3RvcnkpO1xufVxuZnVuY3Rpb24gdG9SZWZzKG9iamVjdCkge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaXNQcm94eShvYmplY3QpKSB7XG4gICAgd2FybihgdG9SZWZzKCkgZXhwZWN0cyBhIHJlYWN0aXZlIG9iamVjdCBidXQgcmVjZWl2ZWQgYSBwbGFpbiBvbmUuYCk7XG4gIH1cbiAgY29uc3QgcmV0ID0gaXNBcnJheShvYmplY3QpID8gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpIDoge307XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgIHJldFtrZXldID0gcHJvcGVydHlUb1JlZihvYmplY3QsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmNsYXNzIE9iamVjdFJlZkltcGwge1xuICBjb25zdHJ1Y3Rvcihfb2JqZWN0LCBfa2V5LCBfZGVmYXVsdFZhbHVlKSB7XG4gICAgdGhpcy5fb2JqZWN0ID0gX29iamVjdDtcbiAgICB0aGlzLl9rZXkgPSBfa2V5O1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IF9kZWZhdWx0VmFsdWU7XG4gICAgdGhpc1tcIl9fdl9pc1JlZlwiXSA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSB2b2lkIDA7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuX29iamVjdFt0aGlzLl9rZXldO1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSA9IHZhbCA9PT0gdm9pZCAwID8gdGhpcy5fZGVmYXVsdFZhbHVlIDogdmFsO1xuICB9XG4gIHNldCB2YWx1ZShuZXdWYWwpIHtcbiAgICB0aGlzLl9vYmplY3RbdGhpcy5fa2V5XSA9IG5ld1ZhbDtcbiAgfVxuICBnZXQgZGVwKCkge1xuICAgIHJldHVybiBnZXREZXBGcm9tUmVhY3RpdmUodG9SYXcodGhpcy5fb2JqZWN0KSwgdGhpcy5fa2V5KTtcbiAgfVxufVxuY2xhc3MgR2V0dGVyUmVmSW1wbCB7XG4gIGNvbnN0cnVjdG9yKF9nZXR0ZXIpIHtcbiAgICB0aGlzLl9nZXR0ZXIgPSBfZ2V0dGVyO1xuICAgIHRoaXNbXCJfX3ZfaXNSZWZcIl0gPSB0cnVlO1xuICAgIHRoaXNbXCJfX3ZfaXNSZWFkb25seVwiXSA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSB2b2lkIDA7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSA9IHRoaXMuX2dldHRlcigpO1xuICB9XG59XG5mdW5jdGlvbiB0b1JlZihzb3VyY2UsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmIChpc1JlZihzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICByZXR1cm4gbmV3IEdldHRlclJlZkltcGwoc291cmNlKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdChzb3VyY2UpICYmIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5VG9SZWYoc291cmNlLCBrZXksIGRlZmF1bHRWYWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlZihzb3VyY2UpO1xuICB9XG59XG5mdW5jdGlvbiBwcm9wZXJ0eVRvUmVmKHNvdXJjZSwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3QgdmFsID0gc291cmNlW2tleV07XG4gIHJldHVybiBpc1JlZih2YWwpID8gdmFsIDogbmV3IE9iamVjdFJlZkltcGwoc291cmNlLCBrZXksIGRlZmF1bHRWYWx1ZSk7XG59XG5cbmNsYXNzIENvbXB1dGVkUmVmSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGZuLCBzZXR0ZXIsIGlzU1NSKSB7XG4gICAgdGhpcy5mbiA9IGZuO1xuICAgIHRoaXMuc2V0dGVyID0gc2V0dGVyO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuX3ZhbHVlID0gdm9pZCAwO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuZGVwID0gbmV3IERlcCh0aGlzKTtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl9fdl9pc1JlZiA9IHRydWU7XG4gICAgLy8gVE9ETyBpc29sYXRlZERlY2xhcmF0aW9ucyBcIl9fdl9pc1JlYWRvbmx5XCJcbiAgICAvLyBBIGNvbXB1dGVkIGlzIGFsc28gYSBzdWJzY3JpYmVyIHRoYXQgdHJhY2tzIG90aGVyIGRlcHNcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLmRlcHMgPSB2b2lkIDA7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdGhpcy5kZXBzVGFpbCA9IHZvaWQgMDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLmZsYWdzID0gMTY7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdGhpcy5nbG9iYWxWZXJzaW9uID0gZ2xvYmFsVmVyc2lvbiAtIDE7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdGhpcy5uZXh0ID0gdm9pZCAwO1xuICAgIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgdGhpcy5lZmZlY3QgPSB0aGlzO1xuICAgIHRoaXNbXCJfX3ZfaXNSZWFkb25seVwiXSA9ICFzZXR0ZXI7XG4gICAgdGhpcy5pc1NTUiA9IGlzU1NSO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5vdGlmeSgpIHtcbiAgICB0aGlzLmZsYWdzIHw9IDE2O1xuICAgIGlmICghKHRoaXMuZmxhZ3MgJiA4KSAmJiAvLyBhdm9pZCBpbmZpbml0ZSBzZWxmIHJlY3Vyc2lvblxuICAgIGFjdGl2ZVN1YiAhPT0gdGhpcykge1xuICAgICAgYmF0Y2godGhpcywgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIDtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgY29uc3QgbGluayA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyB0aGlzLmRlcC50cmFjayh7XG4gICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICB0eXBlOiBcImdldFwiLFxuICAgICAga2V5OiBcInZhbHVlXCJcbiAgICB9KSA6IHRoaXMuZGVwLnRyYWNrKCk7XG4gICAgcmVmcmVzaENvbXB1dGVkKHRoaXMpO1xuICAgIGlmIChsaW5rKSB7XG4gICAgICBsaW5rLnZlcnNpb24gPSB0aGlzLmRlcC52ZXJzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgaWYgKHRoaXMuc2V0dGVyKSB7XG4gICAgICB0aGlzLnNldHRlcihuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuKFwiV3JpdGUgb3BlcmF0aW9uIGZhaWxlZDogY29tcHV0ZWQgdmFsdWUgaXMgcmVhZG9ubHlcIik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjb21wdXRlZChnZXR0ZXJPck9wdGlvbnMsIGRlYnVnT3B0aW9ucywgaXNTU1IgPSBmYWxzZSkge1xuICBsZXQgZ2V0dGVyO1xuICBsZXQgc2V0dGVyO1xuICBpZiAoaXNGdW5jdGlvbihnZXR0ZXJPck9wdGlvbnMpKSB7XG4gICAgZ2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zO1xuICB9IGVsc2Uge1xuICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucy5nZXQ7XG4gICAgc2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zLnNldDtcbiAgfVxuICBjb25zdCBjUmVmID0gbmV3IENvbXB1dGVkUmVmSW1wbChnZXR0ZXIsIHNldHRlciwgaXNTU1IpO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBkZWJ1Z09wdGlvbnMgJiYgIWlzU1NSKSB7XG4gICAgY1JlZi5vblRyYWNrID0gZGVidWdPcHRpb25zLm9uVHJhY2s7XG4gICAgY1JlZi5vblRyaWdnZXIgPSBkZWJ1Z09wdGlvbnMub25UcmlnZ2VyO1xuICB9XG4gIHJldHVybiBjUmVmO1xufVxuXG5jb25zdCBUcmFja09wVHlwZXMgPSB7XG4gIFwiR0VUXCI6IFwiZ2V0XCIsXG4gIFwiSEFTXCI6IFwiaGFzXCIsXG4gIFwiSVRFUkFURVwiOiBcIml0ZXJhdGVcIlxufTtcbmNvbnN0IFRyaWdnZXJPcFR5cGVzID0ge1xuICBcIlNFVFwiOiBcInNldFwiLFxuICBcIkFERFwiOiBcImFkZFwiLFxuICBcIkRFTEVURVwiOiBcImRlbGV0ZVwiLFxuICBcIkNMRUFSXCI6IFwiY2xlYXJcIlxufTtcbmNvbnN0IFJlYWN0aXZlRmxhZ3MgPSB7XG4gIFwiU0tJUFwiOiBcIl9fdl9za2lwXCIsXG4gIFwiSVNfUkVBQ1RJVkVcIjogXCJfX3ZfaXNSZWFjdGl2ZVwiLFxuICBcIklTX1JFQURPTkxZXCI6IFwiX192X2lzUmVhZG9ubHlcIixcbiAgXCJJU19TSEFMTE9XXCI6IFwiX192X2lzU2hhbGxvd1wiLFxuICBcIlJBV1wiOiBcIl9fdl9yYXdcIixcbiAgXCJJU19SRUZcIjogXCJfX3ZfaXNSZWZcIlxufTtcblxuY29uc3QgV2F0Y2hFcnJvckNvZGVzID0ge1xuICBcIldBVENIX0dFVFRFUlwiOiAyLFxuICBcIjJcIjogXCJXQVRDSF9HRVRURVJcIixcbiAgXCJXQVRDSF9DQUxMQkFDS1wiOiAzLFxuICBcIjNcIjogXCJXQVRDSF9DQUxMQkFDS1wiLFxuICBcIldBVENIX0NMRUFOVVBcIjogNCxcbiAgXCI0XCI6IFwiV0FUQ0hfQ0xFQU5VUFwiXG59O1xuY29uc3QgSU5JVElBTF9XQVRDSEVSX1ZBTFVFID0ge307XG5jb25zdCBjbGVhbnVwTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5sZXQgYWN0aXZlV2F0Y2hlciA9IHZvaWQgMDtcbmZ1bmN0aW9uIGdldEN1cnJlbnRXYXRjaGVyKCkge1xuICByZXR1cm4gYWN0aXZlV2F0Y2hlcjtcbn1cbmZ1bmN0aW9uIG9uV2F0Y2hlckNsZWFudXAoY2xlYW51cEZuLCBmYWlsU2lsZW50bHkgPSBmYWxzZSwgb3duZXIgPSBhY3RpdmVXYXRjaGVyKSB7XG4gIGlmIChvd25lcikge1xuICAgIGxldCBjbGVhbnVwcyA9IGNsZWFudXBNYXAuZ2V0KG93bmVyKTtcbiAgICBpZiAoIWNsZWFudXBzKSBjbGVhbnVwTWFwLnNldChvd25lciwgY2xlYW51cHMgPSBbXSk7XG4gICAgY2xlYW51cHMucHVzaChjbGVhbnVwRm4pO1xuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWZhaWxTaWxlbnRseSkge1xuICAgIHdhcm4oXG4gICAgICBgb25XYXRjaGVyQ2xlYW51cCgpIHdhcyBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gYWN0aXZlIHdhdGNoZXIgdG8gYXNzb2NpYXRlIHdpdGguYFxuICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMgPSBFTVBUWV9PQkopIHtcbiAgY29uc3QgeyBpbW1lZGlhdGUsIGRlZXAsIG9uY2UsIHNjaGVkdWxlciwgYXVnbWVudEpvYiwgY2FsbCB9ID0gb3B0aW9ucztcbiAgY29uc3Qgd2FybkludmFsaWRTb3VyY2UgPSAocykgPT4ge1xuICAgIChvcHRpb25zLm9uV2FybiB8fCB3YXJuKShcbiAgICAgIGBJbnZhbGlkIHdhdGNoIHNvdXJjZTogYCxcbiAgICAgIHMsXG4gICAgICBgQSB3YXRjaCBzb3VyY2UgY2FuIG9ubHkgYmUgYSBnZXR0ZXIvZWZmZWN0IGZ1bmN0aW9uLCBhIHJlZiwgYSByZWFjdGl2ZSBvYmplY3QsIG9yIGFuIGFycmF5IG9mIHRoZXNlIHR5cGVzLmBcbiAgICApO1xuICB9O1xuICBjb25zdCByZWFjdGl2ZUdldHRlciA9IChzb3VyY2UyKSA9PiB7XG4gICAgaWYgKGRlZXApIHJldHVybiBzb3VyY2UyO1xuICAgIGlmIChpc1NoYWxsb3coc291cmNlMikgfHwgZGVlcCA9PT0gZmFsc2UgfHwgZGVlcCA9PT0gMClcbiAgICAgIHJldHVybiB0cmF2ZXJzZShzb3VyY2UyLCAxKTtcbiAgICByZXR1cm4gdHJhdmVyc2Uoc291cmNlMik7XG4gIH07XG4gIGxldCBlZmZlY3Q7XG4gIGxldCBnZXR0ZXI7XG4gIGxldCBjbGVhbnVwO1xuICBsZXQgYm91bmRDbGVhbnVwO1xuICBsZXQgZm9yY2VUcmlnZ2VyID0gZmFsc2U7XG4gIGxldCBpc011bHRpU291cmNlID0gZmFsc2U7XG4gIGlmIChpc1JlZihzb3VyY2UpKSB7XG4gICAgZ2V0dGVyID0gKCkgPT4gc291cmNlLnZhbHVlO1xuICAgIGZvcmNlVHJpZ2dlciA9IGlzU2hhbGxvdyhzb3VyY2UpO1xuICB9IGVsc2UgaWYgKGlzUmVhY3RpdmUoc291cmNlKSkge1xuICAgIGdldHRlciA9ICgpID0+IHJlYWN0aXZlR2V0dGVyKHNvdXJjZSk7XG4gICAgZm9yY2VUcmlnZ2VyID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICBpc011bHRpU291cmNlID0gdHJ1ZTtcbiAgICBmb3JjZVRyaWdnZXIgPSBzb3VyY2Uuc29tZSgocykgPT4gaXNSZWFjdGl2ZShzKSB8fCBpc1NoYWxsb3cocykpO1xuICAgIGdldHRlciA9ICgpID0+IHNvdXJjZS5tYXAoKHMpID0+IHtcbiAgICAgIGlmIChpc1JlZihzKSkge1xuICAgICAgICByZXR1cm4gcy52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWFjdGl2ZShzKSkge1xuICAgICAgICByZXR1cm4gcmVhY3RpdmVHZXR0ZXIocyk7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24ocykpIHtcbiAgICAgICAgcmV0dXJuIGNhbGwgPyBjYWxsKHMsIDIpIDogcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuSW52YWxpZFNvdXJjZShzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGdldHRlciA9IGNhbGwgPyAoKSA9PiBjYWxsKHNvdXJjZSwgMikgOiBzb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdldHRlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcmVzZXRUcmFja2luZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50RWZmZWN0ID0gYWN0aXZlV2F0Y2hlcjtcbiAgICAgICAgYWN0aXZlV2F0Y2hlciA9IGVmZmVjdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gY2FsbCA/IGNhbGwoc291cmNlLCAzLCBbYm91bmRDbGVhbnVwXSkgOiBzb3VyY2UoYm91bmRDbGVhbnVwKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBhY3RpdmVXYXRjaGVyID0gY3VycmVudEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZ2V0dGVyID0gTk9PUDtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm5JbnZhbGlkU291cmNlKHNvdXJjZSk7XG4gIH1cbiAgaWYgKGNiICYmIGRlZXApIHtcbiAgICBjb25zdCBiYXNlR2V0dGVyID0gZ2V0dGVyO1xuICAgIGNvbnN0IGRlcHRoID0gZGVlcCA9PT0gdHJ1ZSA/IEluZmluaXR5IDogZGVlcDtcbiAgICBnZXR0ZXIgPSAoKSA9PiB0cmF2ZXJzZShiYXNlR2V0dGVyKCksIGRlcHRoKTtcbiAgfVxuICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICBjb25zdCB3YXRjaEhhbmRsZSA9ICgpID0+IHtcbiAgICBlZmZlY3Quc3RvcCgpO1xuICAgIGlmIChzY29wZSAmJiBzY29wZS5hY3RpdmUpIHtcbiAgICAgIHJlbW92ZShzY29wZS5lZmZlY3RzLCBlZmZlY3QpO1xuICAgIH1cbiAgfTtcbiAgaWYgKG9uY2UgJiYgY2IpIHtcbiAgICBjb25zdCBfY2IgPSBjYjtcbiAgICBjYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBfY2IoLi4uYXJncyk7XG4gICAgICB3YXRjaEhhbmRsZSgpO1xuICAgIH07XG4gIH1cbiAgbGV0IG9sZFZhbHVlID0gaXNNdWx0aVNvdXJjZSA/IG5ldyBBcnJheShzb3VyY2UubGVuZ3RoKS5maWxsKElOSVRJQUxfV0FUQ0hFUl9WQUxVRSkgOiBJTklUSUFMX1dBVENIRVJfVkFMVUU7XG4gIGNvbnN0IGpvYiA9IChpbW1lZGlhdGVGaXJzdFJ1bikgPT4ge1xuICAgIGlmICghKGVmZmVjdC5mbGFncyAmIDEpIHx8ICFlZmZlY3QuZGlydHkgJiYgIWltbWVkaWF0ZUZpcnN0UnVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYikge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBlZmZlY3QucnVuKCk7XG4gICAgICBpZiAoZGVlcCB8fCBmb3JjZVRyaWdnZXIgfHwgKGlzTXVsdGlTb3VyY2UgPyBuZXdWYWx1ZS5zb21lKCh2LCBpKSA9PiBoYXNDaGFuZ2VkKHYsIG9sZFZhbHVlW2ldKSkgOiBoYXNDaGFuZ2VkKG5ld1ZhbHVlLCBvbGRWYWx1ZSkpKSB7XG4gICAgICAgIGlmIChjbGVhbnVwKSB7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRXYXRjaGVyID0gYWN0aXZlV2F0Y2hlcjtcbiAgICAgICAgYWN0aXZlV2F0Y2hlciA9IGVmZmVjdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgICAvLyBwYXNzIHVuZGVmaW5lZCBhcyB0aGUgb2xkIHZhbHVlIHdoZW4gaXQncyBjaGFuZ2VkIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgb2xkVmFsdWUgPT09IElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA/IHZvaWQgMCA6IGlzTXVsdGlTb3VyY2UgJiYgb2xkVmFsdWVbMF0gPT09IElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA/IFtdIDogb2xkVmFsdWUsXG4gICAgICAgICAgICBib3VuZENsZWFudXBcbiAgICAgICAgICBdO1xuICAgICAgICAgIG9sZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgY2FsbCA/IGNhbGwoY2IsIDMsIGFyZ3MpIDogKFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgY2IoLi4uYXJncylcbiAgICAgICAgICApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGFjdGl2ZVdhdGNoZXIgPSBjdXJyZW50V2F0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZmZlY3QucnVuKCk7XG4gICAgfVxuICB9O1xuICBpZiAoYXVnbWVudEpvYikge1xuICAgIGF1Z21lbnRKb2Ioam9iKTtcbiAgfVxuICBlZmZlY3QgPSBuZXcgUmVhY3RpdmVFZmZlY3QoZ2V0dGVyKTtcbiAgZWZmZWN0LnNjaGVkdWxlciA9IHNjaGVkdWxlciA/ICgpID0+IHNjaGVkdWxlcihqb2IsIGZhbHNlKSA6IGpvYjtcbiAgYm91bmRDbGVhbnVwID0gKGZuKSA9PiBvbldhdGNoZXJDbGVhbnVwKGZuLCBmYWxzZSwgZWZmZWN0KTtcbiAgY2xlYW51cCA9IGVmZmVjdC5vblN0b3AgPSAoKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cHMgPSBjbGVhbnVwTWFwLmdldChlZmZlY3QpO1xuICAgIGlmIChjbGVhbnVwcykge1xuICAgICAgaWYgKGNhbGwpIHtcbiAgICAgICAgY2FsbChjbGVhbnVwcywgNCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGNsZWFudXAyIG9mIGNsZWFudXBzKSBjbGVhbnVwMigpO1xuICAgICAgfVxuICAgICAgY2xlYW51cE1hcC5kZWxldGUoZWZmZWN0KTtcbiAgICB9XG4gIH07XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgZWZmZWN0Lm9uVHJhY2sgPSBvcHRpb25zLm9uVHJhY2s7XG4gICAgZWZmZWN0Lm9uVHJpZ2dlciA9IG9wdGlvbnMub25UcmlnZ2VyO1xuICB9XG4gIGlmIChjYikge1xuICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgIGpvYih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkVmFsdWUgPSBlZmZlY3QucnVuKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNjaGVkdWxlcikge1xuICAgIHNjaGVkdWxlcihqb2IuYmluZChudWxsLCB0cnVlKSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWZmZWN0LnJ1bigpO1xuICB9XG4gIHdhdGNoSGFuZGxlLnBhdXNlID0gZWZmZWN0LnBhdXNlLmJpbmQoZWZmZWN0KTtcbiAgd2F0Y2hIYW5kbGUucmVzdW1lID0gZWZmZWN0LnJlc3VtZS5iaW5kKGVmZmVjdCk7XG4gIHdhdGNoSGFuZGxlLnN0b3AgPSB3YXRjaEhhbmRsZTtcbiAgcmV0dXJuIHdhdGNoSGFuZGxlO1xufVxuZnVuY3Rpb24gdHJhdmVyc2UodmFsdWUsIGRlcHRoID0gSW5maW5pdHksIHNlZW4pIHtcbiAgaWYgKGRlcHRoIDw9IDAgfHwgIWlzT2JqZWN0KHZhbHVlKSB8fCB2YWx1ZVtcIl9fdl9za2lwXCJdKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHNlZW4gPSBzZWVuIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGlmICgoc2Vlbi5nZXQodmFsdWUpIHx8IDApID49IGRlcHRoKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHNlZW4uc2V0KHZhbHVlLCBkZXB0aCk7XG4gIGRlcHRoLS07XG4gIGlmIChpc1JlZih2YWx1ZSkpIHtcbiAgICB0cmF2ZXJzZSh2YWx1ZS52YWx1ZSwgZGVwdGgsIHNlZW4pO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdHJhdmVyc2UodmFsdWVbaV0sIGRlcHRoLCBzZWVuKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTZXQodmFsdWUpIHx8IGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHtcbiAgICAgIHRyYXZlcnNlKHYsIGRlcHRoLCBzZWVuKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICB0cmF2ZXJzZSh2YWx1ZVtrZXldLCBkZXB0aCwgc2Vlbik7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModmFsdWUpKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHRyYXZlcnNlKHZhbHVlW2tleV0sIGRlcHRoLCBzZWVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgeyBBUlJBWV9JVEVSQVRFX0tFWSwgRWZmZWN0RmxhZ3MsIEVmZmVjdFNjb3BlLCBJVEVSQVRFX0tFWSwgTUFQX0tFWV9JVEVSQVRFX0tFWSwgUmVhY3RpdmVFZmZlY3QsIFJlYWN0aXZlRmxhZ3MsIFRyYWNrT3BUeXBlcywgVHJpZ2dlck9wVHlwZXMsIFdhdGNoRXJyb3JDb2RlcywgY29tcHV0ZWQsIGN1c3RvbVJlZiwgZWZmZWN0LCBlZmZlY3RTY29wZSwgZW5hYmxlVHJhY2tpbmcsIGdldEN1cnJlbnRTY29wZSwgZ2V0Q3VycmVudFdhdGNoZXIsIGlzUHJveHksIGlzUmVhY3RpdmUsIGlzUmVhZG9ubHksIGlzUmVmLCBpc1NoYWxsb3csIG1hcmtSYXcsIG9uRWZmZWN0Q2xlYW51cCwgb25TY29wZURpc3Bvc2UsIG9uV2F0Y2hlckNsZWFudXAsIHBhdXNlVHJhY2tpbmcsIHByb3h5UmVmcywgcmVhY3RpdmUsIHJlYWN0aXZlUmVhZEFycmF5LCByZWFkb25seSwgcmVmLCByZXNldFRyYWNraW5nLCBzaGFsbG93UmVhY3RpdmUsIHNoYWxsb3dSZWFkQXJyYXksIHNoYWxsb3dSZWFkb25seSwgc2hhbGxvd1JlZiwgc3RvcCwgdG9SYXcsIHRvUmVhY3RpdmUsIHRvUmVhZG9ubHksIHRvUmVmLCB0b1JlZnMsIHRvVmFsdWUsIHRyYWNrLCB0cmF2ZXJzZSwgdHJpZ2dlciwgdHJpZ2dlclJlZiwgdW5yZWYsIHdhdGNoIH07XG4iLCIvKipcbiogQHZ1ZS9ydW50aW1lLWNvcmUgdjMuNS4yNFxuKiAoYykgMjAxOC1wcmVzZW50IFl1eGkgKEV2YW4pIFlvdSBhbmQgVnVlIGNvbnRyaWJ1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL1xuaW1wb3J0IHsgcGF1c2VUcmFja2luZywgcmVzZXRUcmFja2luZywgaXNSZWYsIHRvUmF3LCB0cmF2ZXJzZSwgc2hhbGxvd1JlZiwgcmVhZG9ubHksIGlzUmVhY3RpdmUsIHJlZiwgaXNTaGFsbG93LCBpc1JlYWRvbmx5LCBzaGFsbG93UmVhZEFycmF5LCB0b1JlYWRvbmx5LCB0b1JlYWN0aXZlLCBzaGFsbG93UmVhZG9ubHksIHRyYWNrLCByZWFjdGl2ZSwgc2hhbGxvd1JlYWN0aXZlLCB0cmlnZ2VyLCBSZWFjdGl2ZUVmZmVjdCwgd2F0Y2ggYXMgd2F0Y2gkMSwgY3VzdG9tUmVmLCBpc1Byb3h5LCBwcm94eVJlZnMsIG1hcmtSYXcsIEVmZmVjdFNjb3BlLCBjb21wdXRlZCBhcyBjb21wdXRlZCQxIH0gZnJvbSAnQHZ1ZS9yZWFjdGl2aXR5JztcbmV4cG9ydCB7IEVmZmVjdFNjb3BlLCBSZWFjdGl2ZUVmZmVjdCwgVHJhY2tPcFR5cGVzLCBUcmlnZ2VyT3BUeXBlcywgY3VzdG9tUmVmLCBlZmZlY3QsIGVmZmVjdFNjb3BlLCBnZXRDdXJyZW50U2NvcGUsIGdldEN1cnJlbnRXYXRjaGVyLCBpc1Byb3h5LCBpc1JlYWN0aXZlLCBpc1JlYWRvbmx5LCBpc1JlZiwgaXNTaGFsbG93LCBtYXJrUmF3LCBvblNjb3BlRGlzcG9zZSwgb25XYXRjaGVyQ2xlYW51cCwgcHJveHlSZWZzLCByZWFjdGl2ZSwgcmVhZG9ubHksIHJlZiwgc2hhbGxvd1JlYWN0aXZlLCBzaGFsbG93UmVhZG9ubHksIHNoYWxsb3dSZWYsIHN0b3AsIHRvUmF3LCB0b1JlZiwgdG9SZWZzLCB0b1ZhbHVlLCB0cmlnZ2VyUmVmLCB1bnJlZiB9IGZyb20gJ0B2dWUvcmVhY3Rpdml0eSc7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNGdW5jdGlvbiwgRU1QVFlfT0JKLCBpc1Byb21pc2UsIGlzQXJyYXksIE5PT1AsIGdldEdsb2JhbFRoaXMsIGV4dGVuZCwgaXNCdWlsdEluRGlyZWN0aXZlLCBOTywgaGFzT3duLCByZW1vdmUsIGRlZiwgaXNPbiwgaXNSZXNlcnZlZFByb3AsIG5vcm1hbGl6ZUNsYXNzLCBzdHJpbmdpZnlTdHlsZSwgbm9ybWFsaXplU3R5bGUsIGlzS25vd25TdmdBdHRyLCBpc0Jvb2xlYW5BdHRyLCBpc0tub3duSHRtbEF0dHIsIGluY2x1ZGVCb29sZWFuQXR0ciwgaXNSZW5kZXJhYmxlQXR0clZhbHVlLCBub3JtYWxpemVDc3NWYXJWYWx1ZSwgZ2V0RXNjYXBlZENzc1Zhck5hbWUsIGlzT2JqZWN0LCBpc1JlZ0V4cCwgaW52b2tlQXJyYXlGbnMsIHRvSGFuZGxlcktleSwgY2FtZWxpemUsIGNhcGl0YWxpemUsIGlzU3ltYm9sLCBpc0dsb2JhbGx5QWxsb3dlZCwgRU1QVFlfQVJSLCBoeXBoZW5hdGUsIG1ha2VNYXAsIHRvUmF3VHlwZSwgaGFzQ2hhbmdlZCwgbG9vc2VUb051bWJlciwgaXNNb2RlbExpc3RlbmVyLCB0b051bWJlciB9IGZyb20gJ0B2dWUvc2hhcmVkJztcbmV4cG9ydCB7IGNhbWVsaXplLCBjYXBpdGFsaXplLCBub3JtYWxpemVDbGFzcywgbm9ybWFsaXplUHJvcHMsIG5vcm1hbGl6ZVN0eWxlLCB0b0Rpc3BsYXlTdHJpbmcsIHRvSGFuZGxlcktleSB9IGZyb20gJ0B2dWUvc2hhcmVkJztcblxuY29uc3Qgc3RhY2sgPSBbXTtcbmZ1bmN0aW9uIHB1c2hXYXJuaW5nQ29udGV4dCh2bm9kZSkge1xuICBzdGFjay5wdXNoKHZub2RlKTtcbn1cbmZ1bmN0aW9uIHBvcFdhcm5pbmdDb250ZXh0KCkge1xuICBzdGFjay5wb3AoKTtcbn1cbmxldCBpc1dhcm5pbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIHdhcm4kMShtc2csIC4uLmFyZ3MpIHtcbiAgaWYgKGlzV2FybmluZykgcmV0dXJuO1xuICBpc1dhcm5pbmcgPSB0cnVlO1xuICBwYXVzZVRyYWNraW5nKCk7XG4gIGNvbnN0IGluc3RhbmNlID0gc3RhY2subGVuZ3RoID8gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0uY29tcG9uZW50IDogbnVsbDtcbiAgY29uc3QgYXBwV2FybkhhbmRsZXIgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZy53YXJuSGFuZGxlcjtcbiAgY29uc3QgdHJhY2UgPSBnZXRDb21wb25lbnRUcmFjZSgpO1xuICBpZiAoYXBwV2FybkhhbmRsZXIpIHtcbiAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoXG4gICAgICBhcHBXYXJuSGFuZGxlcixcbiAgICAgIGluc3RhbmNlLFxuICAgICAgMTEsXG4gICAgICBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBtc2cgKyBhcmdzLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IGEudG9TdHJpbmcpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKGEpKSAhPSBudWxsID8gX2IgOiBKU09OLnN0cmluZ2lmeShhKTtcbiAgICAgICAgfSkuam9pbihcIlwiKSxcbiAgICAgICAgaW5zdGFuY2UgJiYgaW5zdGFuY2UucHJveHksXG4gICAgICAgIHRyYWNlLm1hcChcbiAgICAgICAgICAoeyB2bm9kZSB9KSA9PiBgYXQgPCR7Zm9ybWF0Q29tcG9uZW50TmFtZShpbnN0YW5jZSwgdm5vZGUudHlwZSl9PmBcbiAgICAgICAgKS5qb2luKFwiXFxuXCIpLFxuICAgICAgICB0cmFjZVxuICAgICAgXVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd2FybkFyZ3MgPSBbYFtWdWUgd2Fybl06ICR7bXNnfWAsIC4uLmFyZ3NdO1xuICAgIGlmICh0cmFjZS5sZW5ndGggJiYgLy8gYXZvaWQgc3BhbW1pbmcgY29uc29sZSBkdXJpbmcgdGVzdHNcbiAgICB0cnVlKSB7XG4gICAgICB3YXJuQXJncy5wdXNoKGBcbmAsIC4uLmZvcm1hdFRyYWNlKHRyYWNlKSk7XG4gICAgfVxuICAgIGNvbnNvbGUud2FybiguLi53YXJuQXJncyk7XG4gIH1cbiAgcmVzZXRUcmFja2luZygpO1xuICBpc1dhcm5pbmcgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudFRyYWNlKCkge1xuICBsZXQgY3VycmVudFZOb2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gIGlmICghY3VycmVudFZOb2RlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRTdGFjayA9IFtdO1xuICB3aGlsZSAoY3VycmVudFZOb2RlKSB7XG4gICAgY29uc3QgbGFzdCA9IG5vcm1hbGl6ZWRTdGFja1swXTtcbiAgICBpZiAobGFzdCAmJiBsYXN0LnZub2RlID09PSBjdXJyZW50Vk5vZGUpIHtcbiAgICAgIGxhc3QucmVjdXJzZUNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vcm1hbGl6ZWRTdGFjay5wdXNoKHtcbiAgICAgICAgdm5vZGU6IGN1cnJlbnRWTm9kZSxcbiAgICAgICAgcmVjdXJzZUNvdW50OiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSBjdXJyZW50Vk5vZGUuY29tcG9uZW50ICYmIGN1cnJlbnRWTm9kZS5jb21wb25lbnQucGFyZW50O1xuICAgIGN1cnJlbnRWTm9kZSA9IHBhcmVudEluc3RhbmNlICYmIHBhcmVudEluc3RhbmNlLnZub2RlO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkU3RhY2s7XG59XG5mdW5jdGlvbiBmb3JtYXRUcmFjZSh0cmFjZSkge1xuICBjb25zdCBsb2dzID0gW107XG4gIHRyYWNlLmZvckVhY2goKGVudHJ5LCBpKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmkgPT09IDAgPyBbXSA6IFtgXG5gXSwgLi4uZm9ybWF0VHJhY2VFbnRyeShlbnRyeSkpO1xuICB9KTtcbiAgcmV0dXJuIGxvZ3M7XG59XG5mdW5jdGlvbiBmb3JtYXRUcmFjZUVudHJ5KHsgdm5vZGUsIHJlY3Vyc2VDb3VudCB9KSB7XG4gIGNvbnN0IHBvc3RmaXggPSByZWN1cnNlQ291bnQgPiAwID8gYC4uLiAoJHtyZWN1cnNlQ291bnR9IHJlY3Vyc2l2ZSBjYWxscylgIDogYGA7XG4gIGNvbnN0IGlzUm9vdCA9IHZub2RlLmNvbXBvbmVudCA/IHZub2RlLmNvbXBvbmVudC5wYXJlbnQgPT0gbnVsbCA6IGZhbHNlO1xuICBjb25zdCBvcGVuID0gYCBhdCA8JHtmb3JtYXRDb21wb25lbnROYW1lKFxuICAgIHZub2RlLmNvbXBvbmVudCxcbiAgICB2bm9kZS50eXBlLFxuICAgIGlzUm9vdFxuICApfWA7XG4gIGNvbnN0IGNsb3NlID0gYD5gICsgcG9zdGZpeDtcbiAgcmV0dXJuIHZub2RlLnByb3BzID8gW29wZW4sIC4uLmZvcm1hdFByb3BzKHZub2RlLnByb3BzKSwgY2xvc2VdIDogW29wZW4gKyBjbG9zZV07XG59XG5mdW5jdGlvbiBmb3JtYXRQcm9wcyhwcm9wcykge1xuICBjb25zdCByZXMgPSBbXTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKTtcbiAga2V5cy5zbGljZSgwLCAzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICByZXMucHVzaCguLi5mb3JtYXRQcm9wKGtleSwgcHJvcHNba2V5XSkpO1xuICB9KTtcbiAgaWYgKGtleXMubGVuZ3RoID4gMykge1xuICAgIHJlcy5wdXNoKGAgLi4uYCk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGZvcm1hdFByb3Aoa2V5LCB2YWx1ZSwgcmF3KSB7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICByZXR1cm4gcmF3ID8gdmFsdWUgOiBbYCR7a2V5fT0ke3ZhbHVlfWBdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcmF3ID8gdmFsdWUgOiBbYCR7a2V5fT0ke3ZhbHVlfWBdO1xuICB9IGVsc2UgaWYgKGlzUmVmKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZm9ybWF0UHJvcChrZXksIHRvUmF3KHZhbHVlLnZhbHVlKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHJhdyA/IHZhbHVlIDogW2Ake2tleX09UmVmPGAsIHZhbHVlLCBgPmBdO1xuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgcmV0dXJuIFtgJHtrZXl9PWZuJHt2YWx1ZS5uYW1lID8gYDwke3ZhbHVlLm5hbWV9PmAgOiBgYH1gXTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IHRvUmF3KHZhbHVlKTtcbiAgICByZXR1cm4gcmF3ID8gdmFsdWUgOiBbYCR7a2V5fT1gLCB2YWx1ZV07XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE51bWJlcih2YWwsIHR5cGUpIHtcbiAgaWYgKCEhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSByZXR1cm47XG4gIGlmICh2YWwgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsICE9PSBcIm51bWJlclwiKSB7XG4gICAgd2FybiQxKGAke3R5cGV9IGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbCl9LmApO1xuICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICB3YXJuJDEoYCR7dHlwZX0gaXMgTmFOIC0gdGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LmApO1xuICB9XG59XG5cbmNvbnN0IEVycm9yQ29kZXMgPSB7XG4gIFwiU0VUVVBfRlVOQ1RJT05cIjogMCxcbiAgXCIwXCI6IFwiU0VUVVBfRlVOQ1RJT05cIixcbiAgXCJSRU5ERVJfRlVOQ1RJT05cIjogMSxcbiAgXCIxXCI6IFwiUkVOREVSX0ZVTkNUSU9OXCIsXG4gIFwiTkFUSVZFX0VWRU5UX0hBTkRMRVJcIjogNSxcbiAgXCI1XCI6IFwiTkFUSVZFX0VWRU5UX0hBTkRMRVJcIixcbiAgXCJDT01QT05FTlRfRVZFTlRfSEFORExFUlwiOiA2LFxuICBcIjZcIjogXCJDT01QT05FTlRfRVZFTlRfSEFORExFUlwiLFxuICBcIlZOT0RFX0hPT0tcIjogNyxcbiAgXCI3XCI6IFwiVk5PREVfSE9PS1wiLFxuICBcIkRJUkVDVElWRV9IT09LXCI6IDgsXG4gIFwiOFwiOiBcIkRJUkVDVElWRV9IT09LXCIsXG4gIFwiVFJBTlNJVElPTl9IT09LXCI6IDksXG4gIFwiOVwiOiBcIlRSQU5TSVRJT05fSE9PS1wiLFxuICBcIkFQUF9FUlJPUl9IQU5ETEVSXCI6IDEwLFxuICBcIjEwXCI6IFwiQVBQX0VSUk9SX0hBTkRMRVJcIixcbiAgXCJBUFBfV0FSTl9IQU5ETEVSXCI6IDExLFxuICBcIjExXCI6IFwiQVBQX1dBUk5fSEFORExFUlwiLFxuICBcIkZVTkNUSU9OX1JFRlwiOiAxMixcbiAgXCIxMlwiOiBcIkZVTkNUSU9OX1JFRlwiLFxuICBcIkFTWU5DX0NPTVBPTkVOVF9MT0FERVJcIjogMTMsXG4gIFwiMTNcIjogXCJBU1lOQ19DT01QT05FTlRfTE9BREVSXCIsXG4gIFwiU0NIRURVTEVSXCI6IDE0LFxuICBcIjE0XCI6IFwiU0NIRURVTEVSXCIsXG4gIFwiQ09NUE9ORU5UX1VQREFURVwiOiAxNSxcbiAgXCIxNVwiOiBcIkNPTVBPTkVOVF9VUERBVEVcIixcbiAgXCJBUFBfVU5NT1VOVF9DTEVBTlVQXCI6IDE2LFxuICBcIjE2XCI6IFwiQVBQX1VOTU9VTlRfQ0xFQU5VUFwiXG59O1xuY29uc3QgRXJyb3JUeXBlU3RyaW5ncyQxID0ge1xuICBbXCJzcFwiXTogXCJzZXJ2ZXJQcmVmZXRjaCBob29rXCIsXG4gIFtcImJjXCJdOiBcImJlZm9yZUNyZWF0ZSBob29rXCIsXG4gIFtcImNcIl06IFwiY3JlYXRlZCBob29rXCIsXG4gIFtcImJtXCJdOiBcImJlZm9yZU1vdW50IGhvb2tcIixcbiAgW1wibVwiXTogXCJtb3VudGVkIGhvb2tcIixcbiAgW1wiYnVcIl06IFwiYmVmb3JlVXBkYXRlIGhvb2tcIixcbiAgW1widVwiXTogXCJ1cGRhdGVkXCIsXG4gIFtcImJ1bVwiXTogXCJiZWZvcmVVbm1vdW50IGhvb2tcIixcbiAgW1widW1cIl06IFwidW5tb3VudGVkIGhvb2tcIixcbiAgW1wiYVwiXTogXCJhY3RpdmF0ZWQgaG9va1wiLFxuICBbXCJkYVwiXTogXCJkZWFjdGl2YXRlZCBob29rXCIsXG4gIFtcImVjXCJdOiBcImVycm9yQ2FwdHVyZWQgaG9va1wiLFxuICBbXCJydGNcIl06IFwicmVuZGVyVHJhY2tlZCBob29rXCIsXG4gIFtcInJ0Z1wiXTogXCJyZW5kZXJUcmlnZ2VyZWQgaG9va1wiLFxuICBbMF06IFwic2V0dXAgZnVuY3Rpb25cIixcbiAgWzFdOiBcInJlbmRlciBmdW5jdGlvblwiLFxuICBbMl06IFwid2F0Y2hlciBnZXR0ZXJcIixcbiAgWzNdOiBcIndhdGNoZXIgY2FsbGJhY2tcIixcbiAgWzRdOiBcIndhdGNoZXIgY2xlYW51cCBmdW5jdGlvblwiLFxuICBbNV06IFwibmF0aXZlIGV2ZW50IGhhbmRsZXJcIixcbiAgWzZdOiBcImNvbXBvbmVudCBldmVudCBoYW5kbGVyXCIsXG4gIFs3XTogXCJ2bm9kZSBob29rXCIsXG4gIFs4XTogXCJkaXJlY3RpdmUgaG9va1wiLFxuICBbOV06IFwidHJhbnNpdGlvbiBob29rXCIsXG4gIFsxMF06IFwiYXBwIGVycm9ySGFuZGxlclwiLFxuICBbMTFdOiBcImFwcCB3YXJuSGFuZGxlclwiLFxuICBbMTJdOiBcInJlZiBmdW5jdGlvblwiLFxuICBbMTNdOiBcImFzeW5jIGNvbXBvbmVudCBsb2FkZXJcIixcbiAgWzE0XTogXCJzY2hlZHVsZXIgZmx1c2hcIixcbiAgWzE1XTogXCJjb21wb25lbnQgdXBkYXRlXCIsXG4gIFsxNl06IFwiYXBwIHVubW91bnQgY2xlYW51cCBmdW5jdGlvblwiXG59O1xuZnVuY3Rpb24gY2FsbFdpdGhFcnJvckhhbmRsaW5nKGZuLCBpbnN0YW5jZSwgdHlwZSwgYXJncykge1xuICB0cnkge1xuICAgIHJldHVybiBhcmdzID8gZm4oLi4uYXJncykgOiBmbigpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoZm4sIGluc3RhbmNlLCB0eXBlLCBhcmdzKSB7XG4gIGlmIChpc0Z1bmN0aW9uKGZuKSkge1xuICAgIGNvbnN0IHJlcyA9IGNhbGxXaXRoRXJyb3JIYW5kbGluZyhmbiwgaW5zdGFuY2UsIHR5cGUsIGFyZ3MpO1xuICAgIGlmIChyZXMgJiYgaXNQcm9taXNlKHJlcykpIHtcbiAgICAgIHJlcy5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIHR5cGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYgKGlzQXJyYXkoZm4pKSB7XG4gICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzLnB1c2goY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoZm5baV0sIGluc3RhbmNlLCB0eXBlLCBhcmdzKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm4kMShcbiAgICAgIGBJbnZhbGlkIHZhbHVlIHR5cGUgcGFzc2VkIHRvIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKCk6ICR7dHlwZW9mIGZufWBcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCB0eXBlLCB0aHJvd0luRGV2ID0gdHJ1ZSkge1xuICBjb25zdCBjb250ZXh0Vk5vZGUgPSBpbnN0YW5jZSA/IGluc3RhbmNlLnZub2RlIDogbnVsbDtcbiAgY29uc3QgeyBlcnJvckhhbmRsZXIsIHRocm93VW5oYW5kbGVkRXJyb3JJblByb2R1Y3Rpb24gfSA9IGluc3RhbmNlICYmIGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnIHx8IEVNUFRZX09CSjtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgbGV0IGN1ciA9IGluc3RhbmNlLnBhcmVudDtcbiAgICBjb25zdCBleHBvc2VkSW5zdGFuY2UgPSBpbnN0YW5jZS5wcm94eTtcbiAgICBjb25zdCBlcnJvckluZm8gPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gRXJyb3JUeXBlU3RyaW5ncyQxW3R5cGVdIDogYGh0dHBzOi8vdnVlanMub3JnL2Vycm9yLXJlZmVyZW5jZS8jcnVudGltZS0ke3R5cGV9YDtcbiAgICB3aGlsZSAoY3VyKSB7XG4gICAgICBjb25zdCBlcnJvckNhcHR1cmVkSG9va3MgPSBjdXIuZWM7XG4gICAgICBpZiAoZXJyb3JDYXB0dXJlZEhvb2tzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JDYXB0dXJlZEhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGVycm9yQ2FwdHVyZWRIb29rc1tpXShlcnIsIGV4cG9zZWRJbnN0YW5jZSwgZXJyb3JJbmZvKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN1ciA9IGN1ci5wYXJlbnQ7XG4gICAgfVxuICAgIGlmIChlcnJvckhhbmRsZXIpIHtcbiAgICAgIHBhdXNlVHJhY2tpbmcoKTtcbiAgICAgIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhlcnJvckhhbmRsZXIsIG51bGwsIDEwLCBbXG4gICAgICAgIGVycixcbiAgICAgICAgZXhwb3NlZEluc3RhbmNlLFxuICAgICAgICBlcnJvckluZm9cbiAgICAgIF0pO1xuICAgICAgcmVzZXRUcmFja2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBsb2dFcnJvcihlcnIsIHR5cGUsIGNvbnRleHRWTm9kZSwgdGhyb3dJbkRldiwgdGhyb3dVbmhhbmRsZWRFcnJvckluUHJvZHVjdGlvbik7XG59XG5mdW5jdGlvbiBsb2dFcnJvcihlcnIsIHR5cGUsIGNvbnRleHRWTm9kZSwgdGhyb3dJbkRldiA9IHRydWUsIHRocm93SW5Qcm9kID0gZmFsc2UpIHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBjb25zdCBpbmZvID0gRXJyb3JUeXBlU3RyaW5ncyQxW3R5cGVdO1xuICAgIGlmIChjb250ZXh0Vk5vZGUpIHtcbiAgICAgIHB1c2hXYXJuaW5nQ29udGV4dChjb250ZXh0Vk5vZGUpO1xuICAgIH1cbiAgICB3YXJuJDEoYFVuaGFuZGxlZCBlcnJvciR7aW5mbyA/IGAgZHVyaW5nIGV4ZWN1dGlvbiBvZiAke2luZm99YCA6IGBgfWApO1xuICAgIGlmIChjb250ZXh0Vk5vZGUpIHtcbiAgICAgIHBvcFdhcm5pbmdDb250ZXh0KCk7XG4gICAgfVxuICAgIGlmICh0aHJvd0luRGV2KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhyb3dJblByb2QpIHtcbiAgICB0aHJvdyBlcnI7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmNvbnN0IHF1ZXVlID0gW107XG5sZXQgZmx1c2hJbmRleCA9IC0xO1xuY29uc3QgcGVuZGluZ1Bvc3RGbHVzaENicyA9IFtdO1xubGV0IGFjdGl2ZVBvc3RGbHVzaENicyA9IG51bGw7XG5sZXQgcG9zdEZsdXNoSW5kZXggPSAwO1xuY29uc3QgcmVzb2x2ZWRQcm9taXNlID0gLyogQF9fUFVSRV9fICovIFByb21pc2UucmVzb2x2ZSgpO1xubGV0IGN1cnJlbnRGbHVzaFByb21pc2UgPSBudWxsO1xuY29uc3QgUkVDVVJTSU9OX0xJTUlUID0gMTAwO1xuZnVuY3Rpb24gbmV4dFRpY2soZm4pIHtcbiAgY29uc3QgcCA9IGN1cnJlbnRGbHVzaFByb21pc2UgfHwgcmVzb2x2ZWRQcm9taXNlO1xuICByZXR1cm4gZm4gPyBwLnRoZW4odGhpcyA/IGZuLmJpbmQodGhpcykgOiBmbikgOiBwO1xufVxuZnVuY3Rpb24gZmluZEluc2VydGlvbkluZGV4KGlkKSB7XG4gIGxldCBzdGFydCA9IGZsdXNoSW5kZXggKyAxO1xuICBsZXQgZW5kID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBzdGFydCArIGVuZCA+Pj4gMTtcbiAgICBjb25zdCBtaWRkbGVKb2IgPSBxdWV1ZVttaWRkbGVdO1xuICAgIGNvbnN0IG1pZGRsZUpvYklkID0gZ2V0SWQobWlkZGxlSm9iKTtcbiAgICBpZiAobWlkZGxlSm9iSWQgPCBpZCB8fCBtaWRkbGVKb2JJZCA9PT0gaWQgJiYgbWlkZGxlSm9iLmZsYWdzICYgMikge1xuICAgICAgc3RhcnQgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmQgPSBtaWRkbGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGFydDtcbn1cbmZ1bmN0aW9uIHF1ZXVlSm9iKGpvYikge1xuICBpZiAoIShqb2IuZmxhZ3MgJiAxKSkge1xuICAgIGNvbnN0IGpvYklkID0gZ2V0SWQoam9iKTtcbiAgICBjb25zdCBsYXN0Sm9iID0gcXVldWVbcXVldWUubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFsYXN0Sm9iIHx8IC8vIGZhc3QgcGF0aCB3aGVuIHRoZSBqb2IgaWQgaXMgbGFyZ2VyIHRoYW4gdGhlIHRhaWxcbiAgICAhKGpvYi5mbGFncyAmIDIpICYmIGpvYklkID49IGdldElkKGxhc3RKb2IpKSB7XG4gICAgICBxdWV1ZS5wdXNoKGpvYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlLnNwbGljZShmaW5kSW5zZXJ0aW9uSW5kZXgoam9iSWQpLCAwLCBqb2IpO1xuICAgIH1cbiAgICBqb2IuZmxhZ3MgfD0gMTtcbiAgICBxdWV1ZUZsdXNoKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHF1ZXVlRmx1c2goKSB7XG4gIGlmICghY3VycmVudEZsdXNoUHJvbWlzZSkge1xuICAgIGN1cnJlbnRGbHVzaFByb21pc2UgPSByZXNvbHZlZFByb21pc2UudGhlbihmbHVzaEpvYnMpO1xuICB9XG59XG5mdW5jdGlvbiBxdWV1ZVBvc3RGbHVzaENiKGNiKSB7XG4gIGlmICghaXNBcnJheShjYikpIHtcbiAgICBpZiAoYWN0aXZlUG9zdEZsdXNoQ2JzICYmIGNiLmlkID09PSAtMSkge1xuICAgICAgYWN0aXZlUG9zdEZsdXNoQ2JzLnNwbGljZShwb3N0Rmx1c2hJbmRleCArIDEsIDAsIGNiKTtcbiAgICB9IGVsc2UgaWYgKCEoY2IuZmxhZ3MgJiAxKSkge1xuICAgICAgcGVuZGluZ1Bvc3RGbHVzaENicy5wdXNoKGNiKTtcbiAgICAgIGNiLmZsYWdzIHw9IDE7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBlbmRpbmdQb3N0Rmx1c2hDYnMucHVzaCguLi5jYik7XG4gIH1cbiAgcXVldWVGbHVzaCgpO1xufVxuZnVuY3Rpb24gZmx1c2hQcmVGbHVzaENicyhpbnN0YW5jZSwgc2VlbiwgaSA9IGZsdXNoSW5kZXggKyAxKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgc2VlbiA9IHNlZW4gfHwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBmb3IgKDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2IgPSBxdWV1ZVtpXTtcbiAgICBpZiAoY2IgJiYgY2IuZmxhZ3MgJiAyKSB7XG4gICAgICBpZiAoaW5zdGFuY2UgJiYgY2IuaWQgIT09IGluc3RhbmNlLnVpZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNoZWNrUmVjdXJzaXZlVXBkYXRlcyhzZWVuLCBjYikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBxdWV1ZS5zcGxpY2UoaSwgMSk7XG4gICAgICBpLS07XG4gICAgICBpZiAoY2IuZmxhZ3MgJiA0KSB7XG4gICAgICAgIGNiLmZsYWdzICY9IC0yO1xuICAgICAgfVxuICAgICAgY2IoKTtcbiAgICAgIGlmICghKGNiLmZsYWdzICYgNCkpIHtcbiAgICAgICAgY2IuZmxhZ3MgJj0gLTI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFBvc3RGbHVzaENicyhzZWVuKSB7XG4gIGlmIChwZW5kaW5nUG9zdEZsdXNoQ2JzLmxlbmd0aCkge1xuICAgIGNvbnN0IGRlZHVwZWQgPSBbLi4ubmV3IFNldChwZW5kaW5nUG9zdEZsdXNoQ2JzKV0uc29ydChcbiAgICAgIChhLCBiKSA9PiBnZXRJZChhKSAtIGdldElkKGIpXG4gICAgKTtcbiAgICBwZW5kaW5nUG9zdEZsdXNoQ2JzLmxlbmd0aCA9IDA7XG4gICAgaWYgKGFjdGl2ZVBvc3RGbHVzaENicykge1xuICAgICAgYWN0aXZlUG9zdEZsdXNoQ2JzLnB1c2goLi4uZGVkdXBlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFjdGl2ZVBvc3RGbHVzaENicyA9IGRlZHVwZWQ7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHNlZW4gPSBzZWVuIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGZvciAocG9zdEZsdXNoSW5kZXggPSAwOyBwb3N0Rmx1c2hJbmRleCA8IGFjdGl2ZVBvc3RGbHVzaENicy5sZW5ndGg7IHBvc3RGbHVzaEluZGV4KyspIHtcbiAgICAgIGNvbnN0IGNiID0gYWN0aXZlUG9zdEZsdXNoQ2JzW3Bvc3RGbHVzaEluZGV4XTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNoZWNrUmVjdXJzaXZlVXBkYXRlcyhzZWVuLCBjYikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY2IuZmxhZ3MgJiA0KSB7XG4gICAgICAgIGNiLmZsYWdzICY9IC0yO1xuICAgICAgfVxuICAgICAgaWYgKCEoY2IuZmxhZ3MgJiA4KSkgY2IoKTtcbiAgICAgIGNiLmZsYWdzICY9IC0yO1xuICAgIH1cbiAgICBhY3RpdmVQb3N0Rmx1c2hDYnMgPSBudWxsO1xuICAgIHBvc3RGbHVzaEluZGV4ID0gMDtcbiAgfVxufVxuY29uc3QgZ2V0SWQgPSAoam9iKSA9PiBqb2IuaWQgPT0gbnVsbCA/IGpvYi5mbGFncyAmIDIgPyAtMSA6IEluZmluaXR5IDogam9iLmlkO1xuZnVuY3Rpb24gZmx1c2hKb2JzKHNlZW4pIHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBzZWVuID0gc2VlbiB8fCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGNvbnN0IGNoZWNrID0gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IChqb2IpID0+IGNoZWNrUmVjdXJzaXZlVXBkYXRlcyhzZWVuLCBqb2IpIDogTk9PUDtcbiAgdHJ5IHtcbiAgICBmb3IgKGZsdXNoSW5kZXggPSAwOyBmbHVzaEluZGV4IDwgcXVldWUubGVuZ3RoOyBmbHVzaEluZGV4KyspIHtcbiAgICAgIGNvbnN0IGpvYiA9IHF1ZXVlW2ZsdXNoSW5kZXhdO1xuICAgICAgaWYgKGpvYiAmJiAhKGpvYi5mbGFncyAmIDgpKSB7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNoZWNrKGpvYikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoam9iLmZsYWdzICYgNCkge1xuICAgICAgICAgIGpvYi5mbGFncyAmPSB+MTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoXG4gICAgICAgICAgam9iLFxuICAgICAgICAgIGpvYi5pLFxuICAgICAgICAgIGpvYi5pID8gMTUgOiAxNFxuICAgICAgICApO1xuICAgICAgICBpZiAoIShqb2IuZmxhZ3MgJiA0KSkge1xuICAgICAgICAgIGpvYi5mbGFncyAmPSB+MTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmb3IgKDsgZmx1c2hJbmRleCA8IHF1ZXVlLmxlbmd0aDsgZmx1c2hJbmRleCsrKSB7XG4gICAgICBjb25zdCBqb2IgPSBxdWV1ZVtmbHVzaEluZGV4XTtcbiAgICAgIGlmIChqb2IpIHtcbiAgICAgICAgam9iLmZsYWdzICY9IC0yO1xuICAgICAgfVxuICAgIH1cbiAgICBmbHVzaEluZGV4ID0gLTE7XG4gICAgcXVldWUubGVuZ3RoID0gMDtcbiAgICBmbHVzaFBvc3RGbHVzaENicyhzZWVuKTtcbiAgICBjdXJyZW50Rmx1c2hQcm9taXNlID0gbnVsbDtcbiAgICBpZiAocXVldWUubGVuZ3RoIHx8IHBlbmRpbmdQb3N0Rmx1c2hDYnMubGVuZ3RoKSB7XG4gICAgICBmbHVzaEpvYnMoc2Vlbik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjaGVja1JlY3Vyc2l2ZVVwZGF0ZXMoc2VlbiwgZm4pIHtcbiAgY29uc3QgY291bnQgPSBzZWVuLmdldChmbikgfHwgMDtcbiAgaWYgKGNvdW50ID4gUkVDVVJTSU9OX0xJTUlUKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBmbi5pO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBpbnN0YW5jZSAmJiBnZXRDb21wb25lbnROYW1lKGluc3RhbmNlLnR5cGUpO1xuICAgIGhhbmRsZUVycm9yKFxuICAgICAgYE1heGltdW0gcmVjdXJzaXZlIHVwZGF0ZXMgZXhjZWVkZWQke2NvbXBvbmVudE5hbWUgPyBgIGluIGNvbXBvbmVudCA8JHtjb21wb25lbnROYW1lfT5gIDogYGB9LiBUaGlzIG1lYW5zIHlvdSBoYXZlIGEgcmVhY3RpdmUgZWZmZWN0IHRoYXQgaXMgbXV0YXRpbmcgaXRzIG93biBkZXBlbmRlbmNpZXMgYW5kIHRodXMgcmVjdXJzaXZlbHkgdHJpZ2dlcmluZyBpdHNlbGYuIFBvc3NpYmxlIHNvdXJjZXMgaW5jbHVkZSBjb21wb25lbnQgdGVtcGxhdGUsIHJlbmRlciBmdW5jdGlvbiwgdXBkYXRlZCBob29rIG9yIHdhdGNoZXIgc291cmNlIGZ1bmN0aW9uLmAsXG4gICAgICBudWxsLFxuICAgICAgMTBcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNlZW4uc2V0KGZuLCBjb3VudCArIDEpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmxldCBpc0htclVwZGF0aW5nID0gZmFsc2U7XG5jb25zdCBobXJEaXJ0eUNvbXBvbmVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgZ2V0R2xvYmFsVGhpcygpLl9fVlVFX0hNUl9SVU5USU1FX18gPSB7XG4gICAgY3JlYXRlUmVjb3JkOiB0cnlXcmFwKGNyZWF0ZVJlY29yZCksXG4gICAgcmVyZW5kZXI6IHRyeVdyYXAocmVyZW5kZXIpLFxuICAgIHJlbG9hZDogdHJ5V3JhcChyZWxvYWQpXG4gIH07XG59XG5jb25zdCBtYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZnVuY3Rpb24gcmVnaXN0ZXJITVIoaW5zdGFuY2UpIHtcbiAgY29uc3QgaWQgPSBpbnN0YW5jZS50eXBlLl9faG1ySWQ7XG4gIGxldCByZWNvcmQgPSBtYXAuZ2V0KGlkKTtcbiAgaWYgKCFyZWNvcmQpIHtcbiAgICBjcmVhdGVSZWNvcmQoaWQsIGluc3RhbmNlLnR5cGUpO1xuICAgIHJlY29yZCA9IG1hcC5nZXQoaWQpO1xuICB9XG4gIHJlY29yZC5pbnN0YW5jZXMuYWRkKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIHVucmVnaXN0ZXJITVIoaW5zdGFuY2UpIHtcbiAgbWFwLmdldChpbnN0YW5jZS50eXBlLl9faG1ySWQpLmluc3RhbmNlcy5kZWxldGUoaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVjb3JkKGlkLCBpbml0aWFsRGVmKSB7XG4gIGlmIChtYXAuaGFzKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBtYXAuc2V0KGlkLCB7XG4gICAgaW5pdGlhbERlZjogbm9ybWFsaXplQ2xhc3NDb21wb25lbnQoaW5pdGlhbERlZiksXG4gICAgaW5zdGFuY2VzOiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpXG4gIH0pO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNsYXNzQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICByZXR1cm4gaXNDbGFzc0NvbXBvbmVudChjb21wb25lbnQpID8gY29tcG9uZW50Ll9fdmNjT3B0cyA6IGNvbXBvbmVudDtcbn1cbmZ1bmN0aW9uIHJlcmVuZGVyKGlkLCBuZXdSZW5kZXIpIHtcbiAgY29uc3QgcmVjb3JkID0gbWFwLmdldChpZCk7XG4gIGlmICghcmVjb3JkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlY29yZC5pbml0aWFsRGVmLnJlbmRlciA9IG5ld1JlbmRlcjtcbiAgWy4uLnJlY29yZC5pbnN0YW5jZXNdLmZvckVhY2goKGluc3RhbmNlKSA9PiB7XG4gICAgaWYgKG5ld1JlbmRlcikge1xuICAgICAgaW5zdGFuY2UucmVuZGVyID0gbmV3UmVuZGVyO1xuICAgICAgbm9ybWFsaXplQ2xhc3NDb21wb25lbnQoaW5zdGFuY2UudHlwZSkucmVuZGVyID0gbmV3UmVuZGVyO1xuICAgIH1cbiAgICBpbnN0YW5jZS5yZW5kZXJDYWNoZSA9IFtdO1xuICAgIGlzSG1yVXBkYXRpbmcgPSB0cnVlO1xuICAgIGlmICghKGluc3RhbmNlLmpvYi5mbGFncyAmIDgpKSB7XG4gICAgICBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICB9XG4gICAgaXNIbXJVcGRhdGluZyA9IGZhbHNlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJlbG9hZChpZCwgbmV3Q29tcCkge1xuICBjb25zdCByZWNvcmQgPSBtYXAuZ2V0KGlkKTtcbiAgaWYgKCFyZWNvcmQpIHJldHVybjtcbiAgbmV3Q29tcCA9IG5vcm1hbGl6ZUNsYXNzQ29tcG9uZW50KG5ld0NvbXApO1xuICB1cGRhdGVDb21wb25lbnREZWYocmVjb3JkLmluaXRpYWxEZWYsIG5ld0NvbXApO1xuICBjb25zdCBpbnN0YW5jZXMgPSBbLi4ucmVjb3JkLmluc3RhbmNlc107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNbaV07XG4gICAgY29uc3Qgb2xkQ29tcCA9IG5vcm1hbGl6ZUNsYXNzQ29tcG9uZW50KGluc3RhbmNlLnR5cGUpO1xuICAgIGxldCBkaXJ0eUluc3RhbmNlcyA9IGhtckRpcnR5Q29tcG9uZW50cy5nZXQob2xkQ29tcCk7XG4gICAgaWYgKCFkaXJ0eUluc3RhbmNlcykge1xuICAgICAgaWYgKG9sZENvbXAgIT09IHJlY29yZC5pbml0aWFsRGVmKSB7XG4gICAgICAgIHVwZGF0ZUNvbXBvbmVudERlZihvbGRDb21wLCBuZXdDb21wKTtcbiAgICAgIH1cbiAgICAgIGhtckRpcnR5Q29tcG9uZW50cy5zZXQob2xkQ29tcCwgZGlydHlJbnN0YW5jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcbiAgICB9XG4gICAgZGlydHlJbnN0YW5jZXMuYWRkKGluc3RhbmNlKTtcbiAgICBpbnN0YW5jZS5hcHBDb250ZXh0LnByb3BzQ2FjaGUuZGVsZXRlKGluc3RhbmNlLnR5cGUpO1xuICAgIGluc3RhbmNlLmFwcENvbnRleHQuZW1pdHNDYWNoZS5kZWxldGUoaW5zdGFuY2UudHlwZSk7XG4gICAgaW5zdGFuY2UuYXBwQ29udGV4dC5vcHRpb25zQ2FjaGUuZGVsZXRlKGluc3RhbmNlLnR5cGUpO1xuICAgIGlmIChpbnN0YW5jZS5jZVJlbG9hZCkge1xuICAgICAgZGlydHlJbnN0YW5jZXMuYWRkKGluc3RhbmNlKTtcbiAgICAgIGluc3RhbmNlLmNlUmVsb2FkKG5ld0NvbXAuc3R5bGVzKTtcbiAgICAgIGRpcnR5SW5zdGFuY2VzLmRlbGV0ZShpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgIHF1ZXVlSm9iKCgpID0+IHtcbiAgICAgICAgaWYgKCEoaW5zdGFuY2Uuam9iLmZsYWdzICYgOCkpIHtcbiAgICAgICAgICBpc0htclVwZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBpbnN0YW5jZS5wYXJlbnQudXBkYXRlKCk7XG4gICAgICAgICAgaXNIbXJVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgICAgIGRpcnR5SW5zdGFuY2VzLmRlbGV0ZShpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuYXBwQ29udGV4dC5yZWxvYWQpIHtcbiAgICAgIGluc3RhbmNlLmFwcENvbnRleHQucmVsb2FkKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbSE1SXSBSb290IG9yIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UgbW9kaWZpZWQuIEZ1bGwgcmVsb2FkIHJlcXVpcmVkLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaW5zdGFuY2Uucm9vdC5jZSAmJiBpbnN0YW5jZSAhPT0gaW5zdGFuY2Uucm9vdCkge1xuICAgICAgaW5zdGFuY2Uucm9vdC5jZS5fcmVtb3ZlQ2hpbGRTdHlsZShvbGRDb21wKTtcbiAgICB9XG4gIH1cbiAgcXVldWVQb3N0Rmx1c2hDYigoKSA9PiB7XG4gICAgaG1yRGlydHlDb21wb25lbnRzLmNsZWFyKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50RGVmKG9sZENvbXAsIG5ld0NvbXApIHtcbiAgZXh0ZW5kKG9sZENvbXAsIG5ld0NvbXApO1xuICBmb3IgKGNvbnN0IGtleSBpbiBvbGRDb21wKSB7XG4gICAgaWYgKGtleSAhPT0gXCJfX2ZpbGVcIiAmJiAhKGtleSBpbiBuZXdDb21wKSkge1xuICAgICAgZGVsZXRlIG9sZENvbXBba2V5XTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHRyeVdyYXAoZm4pIHtcbiAgcmV0dXJuIChpZCwgYXJnKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbihpZCwgYXJnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0hNUl0gU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIFZ1ZSBjb21wb25lbnQgaG90LXJlbG9hZC4gRnVsbCByZWxvYWQgcmVxdWlyZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmxldCBkZXZ0b29scyQxO1xubGV0IGJ1ZmZlciA9IFtdO1xubGV0IGRldnRvb2xzTm90SW5zdGFsbGVkID0gZmFsc2U7XG5mdW5jdGlvbiBlbWl0JDEoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgaWYgKGRldnRvb2xzJDEpIHtcbiAgICBkZXZ0b29scyQxLmVtaXQoZXZlbnQsIC4uLmFyZ3MpO1xuICB9IGVsc2UgaWYgKCFkZXZ0b29sc05vdEluc3RhbGxlZCkge1xuICAgIGJ1ZmZlci5wdXNoKHsgZXZlbnQsIGFyZ3MgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldERldnRvb2xzSG9vayQxKGhvb2ssIHRhcmdldCkge1xuICB2YXIgX2EsIF9iO1xuICBkZXZ0b29scyQxID0gaG9vaztcbiAgaWYgKGRldnRvb2xzJDEpIHtcbiAgICBkZXZ0b29scyQxLmVuYWJsZWQgPSB0cnVlO1xuICAgIGJ1ZmZlci5mb3JFYWNoKCh7IGV2ZW50LCBhcmdzIH0pID0+IGRldnRvb2xzJDEuZW1pdChldmVudCwgLi4uYXJncykpO1xuICAgIGJ1ZmZlciA9IFtdO1xuICB9IGVsc2UgaWYgKFxuICAgIC8vIGhhbmRsZSBsYXRlIGRldnRvb2xzIGluamVjdGlvbiAtIG9ubHkgZG8gdGhpcyBpZiB3ZSBhcmUgaW4gYW4gYWN0dWFsXG4gICAgLy8gYnJvd3NlciBlbnZpcm9ubWVudCB0byBhdm9pZCB0aGUgdGltZXIgaGFuZGxlIHN0YWxsaW5nIHRlc3QgcnVubmVyIGV4aXRcbiAgICAvLyAoIzQ4MTUpXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAvLyBzb21lIGVudnMgbW9jayB3aW5kb3cgYnV0IG5vdCBmdWxseVxuICAgIHdpbmRvdy5IVE1MRWxlbWVudCAmJiAvLyBhbHNvIGV4Y2x1ZGUganNkb21cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAhKChfYiA9IChfYSA9IHdpbmRvdy5uYXZpZ2F0b3IpID09IG51bGwgPyB2b2lkIDAgOiBfYS51c2VyQWdlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pbmNsdWRlcyhcImpzZG9tXCIpKVxuICApIHtcbiAgICBjb25zdCByZXBsYXkgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXyA9IHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fIHx8IFtdO1xuICAgIHJlcGxheS5wdXNoKChuZXdIb29rKSA9PiB7XG4gICAgICBzZXREZXZ0b29sc0hvb2skMShuZXdIb29rLCB0YXJnZXQpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFkZXZ0b29scyQxKSB7XG4gICAgICAgIHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fID0gbnVsbDtcbiAgICAgICAgZGV2dG9vbHNOb3RJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgIH1cbiAgICB9LCAzZTMpO1xuICB9IGVsc2Uge1xuICAgIGRldnRvb2xzTm90SW5zdGFsbGVkID0gdHJ1ZTtcbiAgICBidWZmZXIgPSBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZGV2dG9vbHNJbml0QXBwKGFwcCwgdmVyc2lvbikge1xuICBlbWl0JDEoXCJhcHA6aW5pdFwiIC8qIEFQUF9JTklUICovLCBhcHAsIHZlcnNpb24sIHtcbiAgICBGcmFnbWVudCxcbiAgICBUZXh0LFxuICAgIENvbW1lbnQsXG4gICAgU3RhdGljXG4gIH0pO1xufVxuZnVuY3Rpb24gZGV2dG9vbHNVbm1vdW50QXBwKGFwcCkge1xuICBlbWl0JDEoXCJhcHA6dW5tb3VudFwiIC8qIEFQUF9VTk1PVU5UICovLCBhcHApO1xufVxuY29uc3QgZGV2dG9vbHNDb21wb25lbnRBZGRlZCA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soXCJjb21wb25lbnQ6YWRkZWRcIiAvKiBDT01QT05FTlRfQURERUQgKi8pO1xuY29uc3QgZGV2dG9vbHNDb21wb25lbnRVcGRhdGVkID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZURldnRvb2xzQ29tcG9uZW50SG9vayhcImNvbXBvbmVudDp1cGRhdGVkXCIgLyogQ09NUE9ORU5UX1VQREFURUQgKi8pO1xuY29uc3QgX2RldnRvb2xzQ29tcG9uZW50UmVtb3ZlZCA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soXG4gIFwiY29tcG9uZW50OnJlbW92ZWRcIiAvKiBDT01QT05FTlRfUkVNT1ZFRCAqL1xuKTtcbmNvbnN0IGRldnRvb2xzQ29tcG9uZW50UmVtb3ZlZCA9IChjb21wb25lbnQpID0+IHtcbiAgaWYgKGRldnRvb2xzJDEgJiYgdHlwZW9mIGRldnRvb2xzJDEuY2xlYW51cEJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiICYmIC8vIHJlbW92ZSB0aGUgY29tcG9uZW50IGlmIGl0IHdhc24ndCBidWZmZXJlZFxuICAhZGV2dG9vbHMkMS5jbGVhbnVwQnVmZmVyKGNvbXBvbmVudCkpIHtcbiAgICBfZGV2dG9vbHNDb21wb25lbnRSZW1vdmVkKGNvbXBvbmVudCk7XG4gIH1cbn07XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZnVuY3Rpb24gY3JlYXRlRGV2dG9vbHNDb21wb25lbnRIb29rKGhvb2spIHtcbiAgcmV0dXJuIChjb21wb25lbnQpID0+IHtcbiAgICBlbWl0JDEoXG4gICAgICBob29rLFxuICAgICAgY29tcG9uZW50LmFwcENvbnRleHQuYXBwLFxuICAgICAgY29tcG9uZW50LnVpZCxcbiAgICAgIGNvbXBvbmVudC5wYXJlbnQgPyBjb21wb25lbnQucGFyZW50LnVpZCA6IHZvaWQgMCxcbiAgICAgIGNvbXBvbmVudFxuICAgICk7XG4gIH07XG59XG5jb25zdCBkZXZ0b29sc1BlcmZTdGFydCA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVEZXZ0b29sc1BlcmZvcm1hbmNlSG9vayhcInBlcmY6c3RhcnRcIiAvKiBQRVJGT1JNQU5DRV9TVEFSVCAqLyk7XG5jb25zdCBkZXZ0b29sc1BlcmZFbmQgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlRGV2dG9vbHNQZXJmb3JtYW5jZUhvb2soXCJwZXJmOmVuZFwiIC8qIFBFUkZPUk1BTkNFX0VORCAqLyk7XG5mdW5jdGlvbiBjcmVhdGVEZXZ0b29sc1BlcmZvcm1hbmNlSG9vayhob29rKSB7XG4gIHJldHVybiAoY29tcG9uZW50LCB0eXBlLCB0aW1lKSA9PiB7XG4gICAgZW1pdCQxKGhvb2ssIGNvbXBvbmVudC5hcHBDb250ZXh0LmFwcCwgY29tcG9uZW50LnVpZCwgY29tcG9uZW50LCB0eXBlLCB0aW1lKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRldnRvb2xzQ29tcG9uZW50RW1pdChjb21wb25lbnQsIGV2ZW50LCBwYXJhbXMpIHtcbiAgZW1pdCQxKFxuICAgIFwiY29tcG9uZW50OmVtaXRcIiAvKiBDT01QT05FTlRfRU1JVCAqLyxcbiAgICBjb21wb25lbnQuYXBwQ29udGV4dC5hcHAsXG4gICAgY29tcG9uZW50LFxuICAgIGV2ZW50LFxuICAgIHBhcmFtc1xuICApO1xufVxuXG5sZXQgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbmxldCBjdXJyZW50U2NvcGVJZCA9IG51bGw7XG5mdW5jdGlvbiBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgY29uc3QgcHJldiA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gaW5zdGFuY2U7XG4gIGN1cnJlbnRTY29wZUlkID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UudHlwZS5fX3Njb3BlSWQgfHwgbnVsbDtcbiAgcmV0dXJuIHByZXY7XG59XG5mdW5jdGlvbiBwdXNoU2NvcGVJZChpZCkge1xuICBjdXJyZW50U2NvcGVJZCA9IGlkO1xufVxuZnVuY3Rpb24gcG9wU2NvcGVJZCgpIHtcbiAgY3VycmVudFNjb3BlSWQgPSBudWxsO1xufVxuY29uc3Qgd2l0aFNjb3BlSWQgPSAoX2lkKSA9PiB3aXRoQ3R4O1xuZnVuY3Rpb24gd2l0aEN0eChmbiwgY3R4ID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLCBpc05vblNjb3BlZFNsb3QpIHtcbiAgaWYgKCFjdHgpIHJldHVybiBmbjtcbiAgaWYgKGZuLl9uKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG4gIGNvbnN0IHJlbmRlckZuV2l0aENvbnRleHQgPSAoLi4uYXJncykgPT4ge1xuICAgIGlmIChyZW5kZXJGbldpdGhDb250ZXh0Ll9kKSB7XG4gICAgICBzZXRCbG9ja1RyYWNraW5nKC0xKTtcbiAgICB9XG4gICAgY29uc3QgcHJldkluc3RhbmNlID0gc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKGN0eCk7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gZm4oLi4uYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZShwcmV2SW5zdGFuY2UpO1xuICAgICAgaWYgKHJlbmRlckZuV2l0aENvbnRleHQuX2QpIHtcbiAgICAgICAgc2V0QmxvY2tUcmFja2luZygxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICBkZXZ0b29sc0NvbXBvbmVudFVwZGF0ZWQoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbiAgcmVuZGVyRm5XaXRoQ29udGV4dC5fbiA9IHRydWU7XG4gIHJlbmRlckZuV2l0aENvbnRleHQuX2MgPSB0cnVlO1xuICByZW5kZXJGbldpdGhDb250ZXh0Ll9kID0gdHJ1ZTtcbiAgcmV0dXJuIHJlbmRlckZuV2l0aENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGlyZWN0aXZlTmFtZShuYW1lKSB7XG4gIGlmIChpc0J1aWx0SW5EaXJlY3RpdmUobmFtZSkpIHtcbiAgICB3YXJuJDEoXCJEbyBub3QgdXNlIGJ1aWx0LWluIGRpcmVjdGl2ZSBpZHMgYXMgY3VzdG9tIGRpcmVjdGl2ZSBpZDogXCIgKyBuYW1lKTtcbiAgfVxufVxuZnVuY3Rpb24gd2l0aERpcmVjdGl2ZXModm5vZGUsIGRpcmVjdGl2ZXMpIHtcbiAgaWYgKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKGB3aXRoRGlyZWN0aXZlcyBjYW4gb25seSBiZSB1c2VkIGluc2lkZSByZW5kZXIgZnVuY3Rpb25zLmApO1xuICAgIHJldHVybiB2bm9kZTtcbiAgfVxuICBjb25zdCBpbnN0YW5jZSA9IGdldENvbXBvbmVudFB1YmxpY0luc3RhbmNlKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSk7XG4gIGNvbnN0IGJpbmRpbmdzID0gdm5vZGUuZGlycyB8fCAodm5vZGUuZGlycyA9IFtdKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXJlY3RpdmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IFtkaXIsIHZhbHVlLCBhcmcsIG1vZGlmaWVycyA9IEVNUFRZX09CSl0gPSBkaXJlY3RpdmVzW2ldO1xuICAgIGlmIChkaXIpIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGRpcikpIHtcbiAgICAgICAgZGlyID0ge1xuICAgICAgICAgIG1vdW50ZWQ6IGRpcixcbiAgICAgICAgICB1cGRhdGVkOiBkaXJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXIuZGVlcCkge1xuICAgICAgICB0cmF2ZXJzZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgZGlyLFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG9sZFZhbHVlOiB2b2lkIDAsXG4gICAgICAgIGFyZyxcbiAgICAgICAgbW9kaWZpZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZub2RlO1xufVxuZnVuY3Rpb24gaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgcHJldlZOb2RlLCBpbnN0YW5jZSwgbmFtZSkge1xuICBjb25zdCBiaW5kaW5ncyA9IHZub2RlLmRpcnM7XG4gIGNvbnN0IG9sZEJpbmRpbmdzID0gcHJldlZOb2RlICYmIHByZXZWTm9kZS5kaXJzO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbmRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdzW2ldO1xuICAgIGlmIChvbGRCaW5kaW5ncykge1xuICAgICAgYmluZGluZy5vbGRWYWx1ZSA9IG9sZEJpbmRpbmdzW2ldLnZhbHVlO1xuICAgIH1cbiAgICBsZXQgaG9vayA9IGJpbmRpbmcuZGlyW25hbWVdO1xuICAgIGlmIChob29rKSB7XG4gICAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhob29rLCBpbnN0YW5jZSwgOCwgW1xuICAgICAgICB2bm9kZS5lbCxcbiAgICAgICAgYmluZGluZyxcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIHByZXZWTm9kZVxuICAgICAgXSk7XG4gICAgICByZXNldFRyYWNraW5nKCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IFRlbGVwb3J0RW5kS2V5ID0gU3ltYm9sKFwiX3Z0ZVwiKTtcbmNvbnN0IGlzVGVsZXBvcnQgPSAodHlwZSkgPT4gdHlwZS5fX2lzVGVsZXBvcnQ7XG5jb25zdCBpc1RlbGVwb3J0RGlzYWJsZWQgPSAocHJvcHMpID0+IHByb3BzICYmIChwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy5kaXNhYmxlZCA9PT0gXCJcIik7XG5jb25zdCBpc1RlbGVwb3J0RGVmZXJyZWQgPSAocHJvcHMpID0+IHByb3BzICYmIChwcm9wcy5kZWZlciB8fCBwcm9wcy5kZWZlciA9PT0gXCJcIik7XG5jb25zdCBpc1RhcmdldFNWRyA9ICh0YXJnZXQpID0+IHR5cGVvZiBTVkdFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ7XG5jb25zdCBpc1RhcmdldE1hdGhNTCA9ICh0YXJnZXQpID0+IHR5cGVvZiBNYXRoTUxFbGVtZW50ID09PSBcImZ1bmN0aW9uXCIgJiYgdGFyZ2V0IGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudDtcbmNvbnN0IHJlc29sdmVUYXJnZXQgPSAocHJvcHMsIHNlbGVjdCkgPT4ge1xuICBjb25zdCB0YXJnZXRTZWxlY3RvciA9IHByb3BzICYmIHByb3BzLnRvO1xuICBpZiAoaXNTdHJpbmcodGFyZ2V0U2VsZWN0b3IpKSB7XG4gICAgaWYgKCFzZWxlY3QpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKFxuICAgICAgICBgQ3VycmVudCByZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZyB0YXJnZXQgZm9yIFRlbGVwb3J0cy4gKG1pc3NpbmcgcXVlcnlTZWxlY3RvciByZW5kZXJlciBvcHRpb24pYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBzZWxlY3QodGFyZ2V0U2VsZWN0b3IpO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIXRhcmdldCAmJiAhaXNUZWxlcG9ydERpc2FibGVkKHByb3BzKSkge1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYEZhaWxlZCB0byBsb2NhdGUgVGVsZXBvcnQgdGFyZ2V0IHdpdGggc2VsZWN0b3IgXCIke3RhcmdldFNlbGVjdG9yfVwiLiBOb3RlIHRoZSB0YXJnZXQgZWxlbWVudCBtdXN0IGV4aXN0IGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQgLSBpLmUuIHRoZSB0YXJnZXQgY2Fubm90IGJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb25lbnQgaXRzZWxmLCBhbmQgaWRlYWxseSBzaG91bGQgYmUgb3V0c2lkZSBvZiB0aGUgZW50aXJlIFZ1ZSBjb21wb25lbnQgdHJlZS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhdGFyZ2V0U2VsZWN0b3IgJiYgIWlzVGVsZXBvcnREaXNhYmxlZChwcm9wcykpIHtcbiAgICAgIHdhcm4kMShgSW52YWxpZCBUZWxlcG9ydCB0YXJnZXQ6ICR7dGFyZ2V0U2VsZWN0b3J9YCk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRTZWxlY3RvcjtcbiAgfVxufTtcbmNvbnN0IFRlbGVwb3J0SW1wbCA9IHtcbiAgbmFtZTogXCJUZWxlcG9ydFwiLFxuICBfX2lzVGVsZXBvcnQ6IHRydWUsXG4gIHByb2Nlc3MobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgaW50ZXJuYWxzKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWM6IG1vdW50Q2hpbGRyZW4sXG4gICAgICBwYzogcGF0Y2hDaGlsZHJlbixcbiAgICAgIHBiYzogcGF0Y2hCbG9ja0NoaWxkcmVuLFxuICAgICAgbzogeyBpbnNlcnQsIHF1ZXJ5U2VsZWN0b3IsIGNyZWF0ZVRleHQsIGNyZWF0ZUNvbW1lbnQgfVxuICAgIH0gPSBpbnRlcm5hbHM7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBpc1RlbGVwb3J0RGlzYWJsZWQobjIucHJvcHMpO1xuICAgIGxldCB7IHNoYXBlRmxhZywgY2hpbGRyZW4sIGR5bmFtaWNDaGlsZHJlbiB9ID0gbjI7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgaXNIbXJVcGRhdGluZykge1xuICAgICAgb3B0aW1pemVkID0gZmFsc2U7XG4gICAgICBkeW5hbWljQ2hpbGRyZW4gPSBudWxsO1xuICAgIH1cbiAgICBpZiAobjEgPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBuMi5lbCA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBjcmVhdGVDb21tZW50KFwidGVsZXBvcnQgc3RhcnRcIikgOiBjcmVhdGVUZXh0KFwiXCIpO1xuICAgICAgY29uc3QgbWFpbkFuY2hvciA9IG4yLmFuY2hvciA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBjcmVhdGVDb21tZW50KFwidGVsZXBvcnQgZW5kXCIpIDogY3JlYXRlVGV4dChcIlwiKTtcbiAgICAgIGluc2VydChwbGFjZWhvbGRlciwgY29udGFpbmVyLCBhbmNob3IpO1xuICAgICAgaW5zZXJ0KG1haW5BbmNob3IsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgIGNvbnN0IG1vdW50ID0gKGNvbnRhaW5lcjIsIGFuY2hvcjIpID0+IHtcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICAgICAgbW91bnRDaGlsZHJlbihcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgY29udGFpbmVyMixcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBtb3VudFRvVGFyZ2V0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBuMi50YXJnZXQgPSByZXNvbHZlVGFyZ2V0KG4yLnByb3BzLCBxdWVyeVNlbGVjdG9yKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0QW5jaG9yID0gcHJlcGFyZUFuY2hvcih0YXJnZXQsIG4yLCBjcmVhdGVUZXh0LCBpbnNlcnQpO1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZSAhPT0gXCJzdmdcIiAmJiBpc1RhcmdldFNWRyh0YXJnZXQpKSB7XG4gICAgICAgICAgICBuYW1lc3BhY2UgPSBcInN2Z1wiO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZXNwYWNlICE9PSBcIm1hdGhtbFwiICYmIGlzVGFyZ2V0TWF0aE1MKHRhcmdldCkpIHtcbiAgICAgICAgICAgIG5hbWVzcGFjZSA9IFwibWF0aG1sXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnRDb21wb25lbnQgJiYgcGFyZW50Q29tcG9uZW50LmlzQ0UpIHtcbiAgICAgICAgICAgIChwYXJlbnRDb21wb25lbnQuY2UuX3RlbGVwb3J0VGFyZ2V0cyB8fCAocGFyZW50Q29tcG9uZW50LmNlLl90ZWxlcG9ydFRhcmdldHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSkuYWRkKHRhcmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIG1vdW50KHRhcmdldCwgdGFyZ2V0QW5jaG9yKTtcbiAgICAgICAgICAgIHVwZGF0ZUNzc1ZhcnMobjIsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBcIkludmFsaWQgVGVsZXBvcnQgdGFyZ2V0IG9uIG1vdW50OlwiLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgYCgke3R5cGVvZiB0YXJnZXR9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIG1vdW50KGNvbnRhaW5lciwgbWFpbkFuY2hvcik7XG4gICAgICAgIHVwZGF0ZUNzc1ZhcnMobjIsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzVGVsZXBvcnREZWZlcnJlZChuMi5wcm9wcykpIHtcbiAgICAgICAgbjIuZWwuX19pc01vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBtb3VudFRvVGFyZ2V0KCk7XG4gICAgICAgICAgZGVsZXRlIG4yLmVsLl9faXNNb3VudGVkO1xuICAgICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb3VudFRvVGFyZ2V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RlbGVwb3J0RGVmZXJyZWQobjIucHJvcHMpICYmIG4xLmVsLl9faXNNb3VudGVkID09PSBmYWxzZSkge1xuICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIFRlbGVwb3J0SW1wbC5wcm9jZXNzKFxuICAgICAgICAgICAgbjEsXG4gICAgICAgICAgICBuMixcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkLFxuICAgICAgICAgICAgaW50ZXJuYWxzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBuMi5lbCA9IG4xLmVsO1xuICAgICAgbjIudGFyZ2V0U3RhcnQgPSBuMS50YXJnZXRTdGFydDtcbiAgICAgIGNvbnN0IG1haW5BbmNob3IgPSBuMi5hbmNob3IgPSBuMS5hbmNob3I7XG4gICAgICBjb25zdCB0YXJnZXQgPSBuMi50YXJnZXQgPSBuMS50YXJnZXQ7XG4gICAgICBjb25zdCB0YXJnZXRBbmNob3IgPSBuMi50YXJnZXRBbmNob3IgPSBuMS50YXJnZXRBbmNob3I7XG4gICAgICBjb25zdCB3YXNEaXNhYmxlZCA9IGlzVGVsZXBvcnREaXNhYmxlZChuMS5wcm9wcyk7XG4gICAgICBjb25zdCBjdXJyZW50Q29udGFpbmVyID0gd2FzRGlzYWJsZWQgPyBjb250YWluZXIgOiB0YXJnZXQ7XG4gICAgICBjb25zdCBjdXJyZW50QW5jaG9yID0gd2FzRGlzYWJsZWQgPyBtYWluQW5jaG9yIDogdGFyZ2V0QW5jaG9yO1xuICAgICAgaWYgKG5hbWVzcGFjZSA9PT0gXCJzdmdcIiB8fCBpc1RhcmdldFNWRyh0YXJnZXQpKSB7XG4gICAgICAgIG5hbWVzcGFjZSA9IFwic3ZnXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZSA9PT0gXCJtYXRobWxcIiB8fCBpc1RhcmdldE1hdGhNTCh0YXJnZXQpKSB7XG4gICAgICAgIG5hbWVzcGFjZSA9IFwibWF0aG1sXCI7XG4gICAgICB9XG4gICAgICBpZiAoZHluYW1pY0NoaWxkcmVuKSB7XG4gICAgICAgIHBhdGNoQmxvY2tDaGlsZHJlbihcbiAgICAgICAgICBuMS5keW5hbWljQ2hpbGRyZW4sXG4gICAgICAgICAgZHluYW1pY0NoaWxkcmVuLFxuICAgICAgICAgIGN1cnJlbnRDb250YWluZXIsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHNcbiAgICAgICAgKTtcbiAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIsICEhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKTtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGltaXplZCkge1xuICAgICAgICBwYXRjaENoaWxkcmVuKFxuICAgICAgICAgIG4xLFxuICAgICAgICAgIG4yLFxuICAgICAgICAgIGN1cnJlbnRDb250YWluZXIsXG4gICAgICAgICAgY3VycmVudEFuY2hvcixcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIGlmICghd2FzRGlzYWJsZWQpIHtcbiAgICAgICAgICBtb3ZlVGVsZXBvcnQoXG4gICAgICAgICAgICBuMixcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIG1haW5BbmNob3IsXG4gICAgICAgICAgICBpbnRlcm5hbHMsXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobjIucHJvcHMgJiYgbjEucHJvcHMgJiYgbjIucHJvcHMudG8gIT09IG4xLnByb3BzLnRvKSB7XG4gICAgICAgICAgICBuMi5wcm9wcy50byA9IG4xLnByb3BzLnRvO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChuMi5wcm9wcyAmJiBuMi5wcm9wcy50bykgIT09IChuMS5wcm9wcyAmJiBuMS5wcm9wcy50bykpIHtcbiAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gbjIudGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChcbiAgICAgICAgICAgIG4yLnByb3BzLFxuICAgICAgICAgICAgcXVlcnlTZWxlY3RvclxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5leHRUYXJnZXQpIHtcbiAgICAgICAgICAgIG1vdmVUZWxlcG9ydChcbiAgICAgICAgICAgICAgbjIsXG4gICAgICAgICAgICAgIG5leHRUYXJnZXQsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIGludGVybmFscyxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIFRlbGVwb3J0IHRhcmdldCBvbiB1cGRhdGU6XCIsXG4gICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgYCgke3R5cGVvZiB0YXJnZXR9KWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHdhc0Rpc2FibGVkKSB7XG4gICAgICAgICAgbW92ZVRlbGVwb3J0KFxuICAgICAgICAgICAgbjIsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXRBbmNob3IsXG4gICAgICAgICAgICBpbnRlcm5hbHMsXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdXBkYXRlQ3NzVmFycyhuMiwgZGlzYWJsZWQpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlKHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB7IHVtOiB1bm1vdW50LCBvOiB7IHJlbW92ZTogaG9zdFJlbW92ZSB9IH0sIGRvUmVtb3ZlKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2hhcGVGbGFnLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBhbmNob3IsXG4gICAgICB0YXJnZXRTdGFydCxcbiAgICAgIHRhcmdldEFuY2hvcixcbiAgICAgIHRhcmdldCxcbiAgICAgIHByb3BzXG4gICAgfSA9IHZub2RlO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGhvc3RSZW1vdmUodGFyZ2V0U3RhcnQpO1xuICAgICAgaG9zdFJlbW92ZSh0YXJnZXRBbmNob3IpO1xuICAgIH1cbiAgICBkb1JlbW92ZSAmJiBob3N0UmVtb3ZlKGFuY2hvcik7XG4gICAgaWYgKHNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICBjb25zdCBzaG91bGRSZW1vdmUgPSBkb1JlbW92ZSB8fCAhaXNUZWxlcG9ydERpc2FibGVkKHByb3BzKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgdW5tb3VudChcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgc2hvdWxkUmVtb3ZlLFxuICAgICAgICAgICEhY2hpbGQuZHluYW1pY0NoaWxkcmVuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtb3ZlOiBtb3ZlVGVsZXBvcnQsXG4gIGh5ZHJhdGU6IGh5ZHJhdGVUZWxlcG9ydFxufTtcbmZ1bmN0aW9uIG1vdmVUZWxlcG9ydCh2bm9kZSwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IsIHsgbzogeyBpbnNlcnQgfSwgbTogbW92ZSB9LCBtb3ZlVHlwZSA9IDIpIHtcbiAgaWYgKG1vdmVUeXBlID09PSAwKSB7XG4gICAgaW5zZXJ0KHZub2RlLnRhcmdldEFuY2hvciwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IpO1xuICB9XG4gIGNvbnN0IHsgZWwsIGFuY2hvciwgc2hhcGVGbGFnLCBjaGlsZHJlbiwgcHJvcHMgfSA9IHZub2RlO1xuICBjb25zdCBpc1Jlb3JkZXIgPSBtb3ZlVHlwZSA9PT0gMjtcbiAgaWYgKGlzUmVvcmRlcikge1xuICAgIGluc2VydChlbCwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IpO1xuICB9XG4gIGlmICghaXNSZW9yZGVyIHx8IGlzVGVsZXBvcnREaXNhYmxlZChwcm9wcykpIHtcbiAgICBpZiAoc2hhcGVGbGFnICYgMTYpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbW92ZShcbiAgICAgICAgICBjaGlsZHJlbltpXSxcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgcGFyZW50QW5jaG9yLFxuICAgICAgICAgIDJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGlzUmVvcmRlcikge1xuICAgIGluc2VydChhbmNob3IsIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gaHlkcmF0ZVRlbGVwb3J0KG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwge1xuICBvOiB7IG5leHRTaWJsaW5nLCBwYXJlbnROb2RlLCBxdWVyeVNlbGVjdG9yLCBpbnNlcnQsIGNyZWF0ZVRleHQgfVxufSwgaHlkcmF0ZUNoaWxkcmVuKSB7XG4gIGZ1bmN0aW9uIGh5ZHJhdGVEaXNhYmxlZFRlbGVwb3J0KG5vZGUyLCB2bm9kZTIsIHRhcmdldFN0YXJ0LCB0YXJnZXRBbmNob3IpIHtcbiAgICB2bm9kZTIuYW5jaG9yID0gaHlkcmF0ZUNoaWxkcmVuKFxuICAgICAgbmV4dFNpYmxpbmcobm9kZTIpLFxuICAgICAgdm5vZGUyLFxuICAgICAgcGFyZW50Tm9kZShub2RlMiksXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgIG9wdGltaXplZFxuICAgICk7XG4gICAgdm5vZGUyLnRhcmdldFN0YXJ0ID0gdGFyZ2V0U3RhcnQ7XG4gICAgdm5vZGUyLnRhcmdldEFuY2hvciA9IHRhcmdldEFuY2hvcjtcbiAgfVxuICBjb25zdCB0YXJnZXQgPSB2bm9kZS50YXJnZXQgPSByZXNvbHZlVGFyZ2V0KFxuICAgIHZub2RlLnByb3BzLFxuICAgIHF1ZXJ5U2VsZWN0b3JcbiAgKTtcbiAgY29uc3QgZGlzYWJsZWQgPSBpc1RlbGVwb3J0RGlzYWJsZWQodm5vZGUucHJvcHMpO1xuICBpZiAodGFyZ2V0KSB7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldC5fbHBhIHx8IHRhcmdldC5maXJzdENoaWxkO1xuICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxNikge1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIGh5ZHJhdGVEaXNhYmxlZFRlbGVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgdGFyZ2V0Tm9kZSxcbiAgICAgICAgICB0YXJnZXROb2RlICYmIG5leHRTaWJsaW5nKHRhcmdldE5vZGUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5hbmNob3IgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgbGV0IHRhcmdldEFuY2hvciA9IHRhcmdldE5vZGU7XG4gICAgICAgIHdoaWxlICh0YXJnZXRBbmNob3IpIHtcbiAgICAgICAgICBpZiAodGFyZ2V0QW5jaG9yICYmIHRhcmdldEFuY2hvci5ub2RlVHlwZSA9PT0gOCkge1xuICAgICAgICAgICAgaWYgKHRhcmdldEFuY2hvci5kYXRhID09PSBcInRlbGVwb3J0IHN0YXJ0IGFuY2hvclwiKSB7XG4gICAgICAgICAgICAgIHZub2RlLnRhcmdldFN0YXJ0ID0gdGFyZ2V0QW5jaG9yO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRBbmNob3IuZGF0YSA9PT0gXCJ0ZWxlcG9ydCBhbmNob3JcIikge1xuICAgICAgICAgICAgICB2bm9kZS50YXJnZXRBbmNob3IgPSB0YXJnZXRBbmNob3I7XG4gICAgICAgICAgICAgIHRhcmdldC5fbHBhID0gdm5vZGUudGFyZ2V0QW5jaG9yICYmIG5leHRTaWJsaW5nKHZub2RlLnRhcmdldEFuY2hvcik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXRBbmNob3IgPSBuZXh0U2libGluZyh0YXJnZXRBbmNob3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdm5vZGUudGFyZ2V0QW5jaG9yKSB7XG4gICAgICAgICAgcHJlcGFyZUFuY2hvcih0YXJnZXQsIHZub2RlLCBjcmVhdGVUZXh0LCBpbnNlcnQpO1xuICAgICAgICB9XG4gICAgICAgIGh5ZHJhdGVDaGlsZHJlbihcbiAgICAgICAgICB0YXJnZXROb2RlICYmIG5leHRTaWJsaW5nKHRhcmdldE5vZGUpLFxuICAgICAgICAgIHZub2RlLFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVDc3NWYXJzKHZub2RlLCBkaXNhYmxlZCk7XG4gIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHtcbiAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgMTYpIHtcbiAgICAgIGh5ZHJhdGVEaXNhYmxlZFRlbGVwb3J0KG5vZGUsIHZub2RlLCBub2RlLCBuZXh0U2libGluZyhub2RlKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2bm9kZS5hbmNob3IgJiYgbmV4dFNpYmxpbmcodm5vZGUuYW5jaG9yKTtcbn1cbmNvbnN0IFRlbGVwb3J0ID0gVGVsZXBvcnRJbXBsO1xuZnVuY3Rpb24gdXBkYXRlQ3NzVmFycyh2bm9kZSwgaXNEaXNhYmxlZCkge1xuICBjb25zdCBjdHggPSB2bm9kZS5jdHg7XG4gIGlmIChjdHggJiYgY3R4LnV0KSB7XG4gICAgbGV0IG5vZGUsIGFuY2hvcjtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgbm9kZSA9IHZub2RlLmVsO1xuICAgICAgYW5jaG9yID0gdm5vZGUuYW5jaG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gdm5vZGUudGFyZ2V0U3RhcnQ7XG4gICAgICBhbmNob3IgPSB2bm9kZS50YXJnZXRBbmNob3I7XG4gICAgfVxuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGFuY2hvcikge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIG5vZGUuc2V0QXR0cmlidXRlKFwiZGF0YS12LW93bmVyXCIsIGN0eC51aWQpO1xuICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuICAgIGN0eC51dCgpO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlQW5jaG9yKHRhcmdldCwgdm5vZGUsIGNyZWF0ZVRleHQsIGluc2VydCkge1xuICBjb25zdCB0YXJnZXRTdGFydCA9IHZub2RlLnRhcmdldFN0YXJ0ID0gY3JlYXRlVGV4dChcIlwiKTtcbiAgY29uc3QgdGFyZ2V0QW5jaG9yID0gdm5vZGUudGFyZ2V0QW5jaG9yID0gY3JlYXRlVGV4dChcIlwiKTtcbiAgdGFyZ2V0U3RhcnRbVGVsZXBvcnRFbmRLZXldID0gdGFyZ2V0QW5jaG9yO1xuICBpZiAodGFyZ2V0KSB7XG4gICAgaW5zZXJ0KHRhcmdldFN0YXJ0LCB0YXJnZXQpO1xuICAgIGluc2VydCh0YXJnZXRBbmNob3IsIHRhcmdldCk7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEFuY2hvcjtcbn1cblxuY29uc3QgbGVhdmVDYktleSA9IFN5bWJvbChcIl9sZWF2ZUNiXCIpO1xuY29uc3QgZW50ZXJDYktleSA9IFN5bWJvbChcIl9lbnRlckNiXCIpO1xuZnVuY3Rpb24gdXNlVHJhbnNpdGlvblN0YXRlKCkge1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgIGlzTGVhdmluZzogZmFsc2UsXG4gICAgaXNVbm1vdW50aW5nOiBmYWxzZSxcbiAgICBsZWF2aW5nVk5vZGVzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpXG4gIH07XG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgc3RhdGUuaXNNb3VudGVkID0gdHJ1ZTtcbiAgfSk7XG4gIG9uQmVmb3JlVW5tb3VudCgoKSA9PiB7XG4gICAgc3RhdGUuaXNVbm1vdW50aW5nID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiBzdGF0ZTtcbn1cbmNvbnN0IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yID0gW0Z1bmN0aW9uLCBBcnJheV07XG5jb25zdCBCYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycyA9IHtcbiAgbW9kZTogU3RyaW5nLFxuICBhcHBlYXI6IEJvb2xlYW4sXG4gIHBlcnNpc3RlZDogQm9vbGVhbixcbiAgLy8gZW50ZXJcbiAgb25CZWZvcmVFbnRlcjogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXG4gIG9uRW50ZXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICBvbkFmdGVyRW50ZXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICBvbkVudGVyQ2FuY2VsbGVkOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcbiAgLy8gbGVhdmVcbiAgb25CZWZvcmVMZWF2ZTogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXG4gIG9uTGVhdmU6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICBvbkFmdGVyTGVhdmU6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICBvbkxlYXZlQ2FuY2VsbGVkOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcbiAgLy8gYXBwZWFyXG4gIG9uQmVmb3JlQXBwZWFyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcbiAgb25BcHBlYXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICBvbkFmdGVyQXBwZWFyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcbiAgb25BcHBlYXJDYW5jZWxsZWQ6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yXG59O1xuY29uc3QgcmVjdXJzaXZlR2V0U3VidHJlZSA9IChpbnN0YW5jZSkgPT4ge1xuICBjb25zdCBzdWJUcmVlID0gaW5zdGFuY2Uuc3ViVHJlZTtcbiAgcmV0dXJuIHN1YlRyZWUuY29tcG9uZW50ID8gcmVjdXJzaXZlR2V0U3VidHJlZShzdWJUcmVlLmNvbXBvbmVudCkgOiBzdWJUcmVlO1xufTtcbmNvbnN0IEJhc2VUcmFuc2l0aW9uSW1wbCA9IHtcbiAgbmFtZTogYEJhc2VUcmFuc2l0aW9uYCxcbiAgcHJvcHM6IEJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzLFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZVRyYW5zaXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHNsb3RzLmRlZmF1bHQgJiYgZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuKHNsb3RzLmRlZmF1bHQoKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGQgPSBmaW5kTm9uQ29tbWVudENoaWxkKGNoaWxkcmVuKTtcbiAgICAgIGNvbnN0IHJhd1Byb3BzID0gdG9SYXcocHJvcHMpO1xuICAgICAgY29uc3QgeyBtb2RlIH0gPSByYXdQcm9wcztcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIG1vZGUgJiYgbW9kZSAhPT0gXCJpbi1vdXRcIiAmJiBtb2RlICE9PSBcIm91dC1pblwiICYmIG1vZGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHdhcm4kMShgaW52YWxpZCA8dHJhbnNpdGlvbj4gbW9kZTogJHttb2RlfWApO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmlzTGVhdmluZykge1xuICAgICAgICByZXR1cm4gZW1wdHlQbGFjZWhvbGRlcihjaGlsZCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbm5lckNoaWxkID0gZ2V0SW5uZXJDaGlsZCQxKGNoaWxkKTtcbiAgICAgIGlmICghaW5uZXJDaGlsZCkge1xuICAgICAgICByZXR1cm4gZW1wdHlQbGFjZWhvbGRlcihjaGlsZCk7XG4gICAgICB9XG4gICAgICBsZXQgZW50ZXJIb29rcyA9IHJlc29sdmVUcmFuc2l0aW9uSG9va3MoXG4gICAgICAgIGlubmVyQ2hpbGQsXG4gICAgICAgIHJhd1Byb3BzLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIC8vICMxMTA2MSwgZW5zdXJlIGVudGVySG9va3MgaXMgZnJlc2ggYWZ0ZXIgY2xvbmVcbiAgICAgICAgKGhvb2tzKSA9PiBlbnRlckhvb2tzID0gaG9va3NcbiAgICAgICk7XG4gICAgICBpZiAoaW5uZXJDaGlsZC50eXBlICE9PSBDb21tZW50KSB7XG4gICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyhpbm5lckNoaWxkLCBlbnRlckhvb2tzKTtcbiAgICAgIH1cbiAgICAgIGxldCBvbGRJbm5lckNoaWxkID0gaW5zdGFuY2Uuc3ViVHJlZSAmJiBnZXRJbm5lckNoaWxkJDEoaW5zdGFuY2Uuc3ViVHJlZSk7XG4gICAgICBpZiAob2xkSW5uZXJDaGlsZCAmJiBvbGRJbm5lckNoaWxkLnR5cGUgIT09IENvbW1lbnQgJiYgIWlzU2FtZVZOb2RlVHlwZShvbGRJbm5lckNoaWxkLCBpbm5lckNoaWxkKSAmJiByZWN1cnNpdmVHZXRTdWJ0cmVlKGluc3RhbmNlKS50eXBlICE9PSBDb21tZW50KSB7XG4gICAgICAgIGxldCBsZWF2aW5nSG9va3MgPSByZXNvbHZlVHJhbnNpdGlvbkhvb2tzKFxuICAgICAgICAgIG9sZElubmVyQ2hpbGQsXG4gICAgICAgICAgcmF3UHJvcHMsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgc2V0VHJhbnNpdGlvbkhvb2tzKG9sZElubmVyQ2hpbGQsIGxlYXZpbmdIb29rcyk7XG4gICAgICAgIGlmIChtb2RlID09PSBcIm91dC1pblwiICYmIGlubmVyQ2hpbGQudHlwZSAhPT0gQ29tbWVudCkge1xuICAgICAgICAgIHN0YXRlLmlzTGVhdmluZyA9IHRydWU7XG4gICAgICAgICAgbGVhdmluZ0hvb2tzLmFmdGVyTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBzdGF0ZS5pc0xlYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghKGluc3RhbmNlLmpvYi5mbGFncyAmIDgpKSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIGxlYXZpbmdIb29rcy5hZnRlckxlYXZlO1xuICAgICAgICAgICAgb2xkSW5uZXJDaGlsZCA9IHZvaWQgMDtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBlbXB0eVBsYWNlaG9sZGVyKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSBcImluLW91dFwiICYmIGlubmVyQ2hpbGQudHlwZSAhPT0gQ29tbWVudCkge1xuICAgICAgICAgIGxlYXZpbmdIb29rcy5kZWxheUxlYXZlID0gKGVsLCBlYXJseVJlbW92ZSwgZGVsYXllZExlYXZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZWF2aW5nVk5vZGVzQ2FjaGUgPSBnZXRMZWF2aW5nTm9kZXNGb3JUeXBlKFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgb2xkSW5uZXJDaGlsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxlYXZpbmdWTm9kZXNDYWNoZVtTdHJpbmcob2xkSW5uZXJDaGlsZC5rZXkpXSA9IG9sZElubmVyQ2hpbGQ7XG4gICAgICAgICAgICBlbFtsZWF2ZUNiS2V5XSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZWFybHlSZW1vdmUoKTtcbiAgICAgICAgICAgICAgZWxbbGVhdmVDYktleV0gPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGRlbGV0ZSBlbnRlckhvb2tzLmRlbGF5ZWRMZWF2ZTtcbiAgICAgICAgICAgICAgb2xkSW5uZXJDaGlsZCA9IHZvaWQgMDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbnRlckhvb2tzLmRlbGF5ZWRMZWF2ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZGVsYXllZExlYXZlKCk7XG4gICAgICAgICAgICAgIGRlbGV0ZSBlbnRlckhvb2tzLmRlbGF5ZWRMZWF2ZTtcbiAgICAgICAgICAgICAgb2xkSW5uZXJDaGlsZCA9IHZvaWQgMDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbGRJbm5lckNoaWxkID0gdm9pZCAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9sZElubmVyQ2hpbGQpIHtcbiAgICAgICAgb2xkSW5uZXJDaGlsZCA9IHZvaWQgMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9O1xuICB9XG59O1xuZnVuY3Rpb24gZmluZE5vbkNvbW1lbnRDaGlsZChjaGlsZHJlbikge1xuICBsZXQgY2hpbGQgPSBjaGlsZHJlblswXTtcbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICBsZXQgaGFzRm91bmQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjLnR5cGUgIT09IENvbW1lbnQpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgaGFzRm91bmQpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBcIjx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQgb3IgY29tcG9uZW50LiBVc2UgPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy5cIlxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGQgPSBjO1xuICAgICAgICBoYXNGb3VuZCA9IHRydWU7XG4gICAgICAgIGlmICghISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZDtcbn1cbmNvbnN0IEJhc2VUcmFuc2l0aW9uID0gQmFzZVRyYW5zaXRpb25JbXBsO1xuZnVuY3Rpb24gZ2V0TGVhdmluZ05vZGVzRm9yVHlwZShzdGF0ZSwgdm5vZGUpIHtcbiAgY29uc3QgeyBsZWF2aW5nVk5vZGVzIH0gPSBzdGF0ZTtcbiAgbGV0IGxlYXZpbmdWTm9kZXNDYWNoZSA9IGxlYXZpbmdWTm9kZXMuZ2V0KHZub2RlLnR5cGUpO1xuICBpZiAoIWxlYXZpbmdWTm9kZXNDYWNoZSkge1xuICAgIGxlYXZpbmdWTm9kZXNDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGxlYXZpbmdWTm9kZXMuc2V0KHZub2RlLnR5cGUsIGxlYXZpbmdWTm9kZXNDYWNoZSk7XG4gIH1cbiAgcmV0dXJuIGxlYXZpbmdWTm9kZXNDYWNoZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uSG9va3Modm5vZGUsIHByb3BzLCBzdGF0ZSwgaW5zdGFuY2UsIHBvc3RDbG9uZSkge1xuICBjb25zdCB7XG4gICAgYXBwZWFyLFxuICAgIG1vZGUsXG4gICAgcGVyc2lzdGVkID0gZmFsc2UsXG4gICAgb25CZWZvcmVFbnRlcixcbiAgICBvbkVudGVyLFxuICAgIG9uQWZ0ZXJFbnRlcixcbiAgICBvbkVudGVyQ2FuY2VsbGVkLFxuICAgIG9uQmVmb3JlTGVhdmUsXG4gICAgb25MZWF2ZSxcbiAgICBvbkFmdGVyTGVhdmUsXG4gICAgb25MZWF2ZUNhbmNlbGxlZCxcbiAgICBvbkJlZm9yZUFwcGVhcixcbiAgICBvbkFwcGVhcixcbiAgICBvbkFmdGVyQXBwZWFyLFxuICAgIG9uQXBwZWFyQ2FuY2VsbGVkXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qga2V5ID0gU3RyaW5nKHZub2RlLmtleSk7XG4gIGNvbnN0IGxlYXZpbmdWTm9kZXNDYWNoZSA9IGdldExlYXZpbmdOb2Rlc0ZvclR5cGUoc3RhdGUsIHZub2RlKTtcbiAgY29uc3QgY2FsbEhvb2sgPSAoaG9vaywgYXJncykgPT4ge1xuICAgIGhvb2sgJiYgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoXG4gICAgICBob29rLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICA5LFxuICAgICAgYXJnc1xuICAgICk7XG4gIH07XG4gIGNvbnN0IGNhbGxBc3luY0hvb2sgPSAoaG9vaywgYXJncykgPT4ge1xuICAgIGNvbnN0IGRvbmUgPSBhcmdzWzFdO1xuICAgIGNhbGxIb29rKGhvb2ssIGFyZ3MpO1xuICAgIGlmIChpc0FycmF5KGhvb2spKSB7XG4gICAgICBpZiAoaG9vay5ldmVyeSgoaG9vazIpID0+IGhvb2syLmxlbmd0aCA8PSAxKSkgZG9uZSgpO1xuICAgIH0gZWxzZSBpZiAoaG9vay5sZW5ndGggPD0gMSkge1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaG9va3MgPSB7XG4gICAgbW9kZSxcbiAgICBwZXJzaXN0ZWQsXG4gICAgYmVmb3JlRW50ZXIoZWwpIHtcbiAgICAgIGxldCBob29rID0gb25CZWZvcmVFbnRlcjtcbiAgICAgIGlmICghc3RhdGUuaXNNb3VudGVkKSB7XG4gICAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgICBob29rID0gb25CZWZvcmVBcHBlYXIgfHwgb25CZWZvcmVFbnRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbFtsZWF2ZUNiS2V5XSkge1xuICAgICAgICBlbFtsZWF2ZUNiS2V5XShcbiAgICAgICAgICB0cnVlXG4gICAgICAgICAgLyogY2FuY2VsbGVkICovXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBsZWF2aW5nVk5vZGUgPSBsZWF2aW5nVk5vZGVzQ2FjaGVba2V5XTtcbiAgICAgIGlmIChsZWF2aW5nVk5vZGUgJiYgaXNTYW1lVk5vZGVUeXBlKHZub2RlLCBsZWF2aW5nVk5vZGUpICYmIGxlYXZpbmdWTm9kZS5lbFtsZWF2ZUNiS2V5XSkge1xuICAgICAgICBsZWF2aW5nVk5vZGUuZWxbbGVhdmVDYktleV0oKTtcbiAgICAgIH1cbiAgICAgIGNhbGxIb29rKGhvb2ssIFtlbF0pO1xuICAgIH0sXG4gICAgZW50ZXIoZWwpIHtcbiAgICAgIGxldCBob29rID0gb25FbnRlcjtcbiAgICAgIGxldCBhZnRlckhvb2sgPSBvbkFmdGVyRW50ZXI7XG4gICAgICBsZXQgY2FuY2VsSG9vayA9IG9uRW50ZXJDYW5jZWxsZWQ7XG4gICAgICBpZiAoIXN0YXRlLmlzTW91bnRlZCkge1xuICAgICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgICAgaG9vayA9IG9uQXBwZWFyIHx8IG9uRW50ZXI7XG4gICAgICAgICAgYWZ0ZXJIb29rID0gb25BZnRlckFwcGVhciB8fCBvbkFmdGVyRW50ZXI7XG4gICAgICAgICAgY2FuY2VsSG9vayA9IG9uQXBwZWFyQ2FuY2VsbGVkIHx8IG9uRW50ZXJDYW5jZWxsZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBkb25lID0gZWxbZW50ZXJDYktleV0gPSAoY2FuY2VsbGVkKSA9PiB7XG4gICAgICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgIGNhbGxIb29rKGNhbmNlbEhvb2ssIFtlbF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxIb29rKGFmdGVySG9vaywgW2VsXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvb2tzLmRlbGF5ZWRMZWF2ZSkge1xuICAgICAgICAgIGhvb2tzLmRlbGF5ZWRMZWF2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsW2VudGVyQ2JLZXldID0gdm9pZCAwO1xuICAgICAgfTtcbiAgICAgIGlmIChob29rKSB7XG4gICAgICAgIGNhbGxBc3luY0hvb2soaG9vaywgW2VsLCBkb25lXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsZWF2ZShlbCwgcmVtb3ZlKSB7XG4gICAgICBjb25zdCBrZXkyID0gU3RyaW5nKHZub2RlLmtleSk7XG4gICAgICBpZiAoZWxbZW50ZXJDYktleV0pIHtcbiAgICAgICAgZWxbZW50ZXJDYktleV0oXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICAgIC8qIGNhbmNlbGxlZCAqL1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmlzVW5tb3VudGluZykge1xuICAgICAgICByZXR1cm4gcmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICBjYWxsSG9vayhvbkJlZm9yZUxlYXZlLCBbZWxdKTtcbiAgICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGRvbmUgPSBlbFtsZWF2ZUNiS2V5XSA9IChjYW5jZWxsZWQpID0+IHtcbiAgICAgICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgIGNhbGxIb29rKG9uTGVhdmVDYW5jZWxsZWQsIFtlbF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxIb29rKG9uQWZ0ZXJMZWF2ZSwgW2VsXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxbbGVhdmVDYktleV0gPSB2b2lkIDA7XG4gICAgICAgIGlmIChsZWF2aW5nVk5vZGVzQ2FjaGVba2V5Ml0gPT09IHZub2RlKSB7XG4gICAgICAgICAgZGVsZXRlIGxlYXZpbmdWTm9kZXNDYWNoZVtrZXkyXTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGxlYXZpbmdWTm9kZXNDYWNoZVtrZXkyXSA9IHZub2RlO1xuICAgICAgaWYgKG9uTGVhdmUpIHtcbiAgICAgICAgY2FsbEFzeW5jSG9vayhvbkxlYXZlLCBbZWwsIGRvbmVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsb25lKHZub2RlMikge1xuICAgICAgY29uc3QgaG9va3MyID0gcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhcbiAgICAgICAgdm5vZGUyLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBwb3N0Q2xvbmVcbiAgICAgICk7XG4gICAgICBpZiAocG9zdENsb25lKSBwb3N0Q2xvbmUoaG9va3MyKTtcbiAgICAgIHJldHVybiBob29rczI7XG4gICAgfVxuICB9O1xuICByZXR1cm4gaG9va3M7XG59XG5mdW5jdGlvbiBlbXB0eVBsYWNlaG9sZGVyKHZub2RlKSB7XG4gIGlmIChpc0tlZXBBbGl2ZSh2bm9kZSkpIHtcbiAgICB2bm9kZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIHZub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgICByZXR1cm4gdm5vZGU7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElubmVyQ2hpbGQkMSh2bm9kZSkge1xuICBpZiAoIWlzS2VlcEFsaXZlKHZub2RlKSkge1xuICAgIGlmIChpc1RlbGVwb3J0KHZub2RlLnR5cGUpICYmIHZub2RlLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gZmluZE5vbkNvbW1lbnRDaGlsZCh2bm9kZS5jaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZTtcbiAgfVxuICBpZiAodm5vZGUuY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHZub2RlLmNvbXBvbmVudC5zdWJUcmVlO1xuICB9XG4gIGNvbnN0IHsgc2hhcGVGbGFnLCBjaGlsZHJlbiB9ID0gdm5vZGU7XG4gIGlmIChjaGlsZHJlbikge1xuICAgIGlmIChzaGFwZUZsYWcgJiAxNikge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdO1xuICAgIH1cbiAgICBpZiAoc2hhcGVGbGFnICYgMzIgJiYgaXNGdW5jdGlvbihjaGlsZHJlbi5kZWZhdWx0KSkge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuLmRlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFRyYW5zaXRpb25Ib29rcyh2bm9kZSwgaG9va3MpIHtcbiAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDYgJiYgdm5vZGUuY29tcG9uZW50KSB7XG4gICAgdm5vZGUudHJhbnNpdGlvbiA9IGhvb2tzO1xuICAgIHNldFRyYW5zaXRpb25Ib29rcyh2bm9kZS5jb21wb25lbnQuc3ViVHJlZSwgaG9va3MpO1xuICB9IGVsc2UgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDEyOCkge1xuICAgIHZub2RlLnNzQ29udGVudC50cmFuc2l0aW9uID0gaG9va3MuY2xvbmUodm5vZGUuc3NDb250ZW50KTtcbiAgICB2bm9kZS5zc0ZhbGxiYWNrLnRyYW5zaXRpb24gPSBob29rcy5jbG9uZSh2bm9kZS5zc0ZhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICB2bm9kZS50cmFuc2l0aW9uID0gaG9va3M7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihjaGlsZHJlbiwga2VlcENvbW1lbnQgPSBmYWxzZSwgcGFyZW50S2V5KSB7XG4gIGxldCByZXQgPSBbXTtcbiAgbGV0IGtleWVkRnJhZ21lbnRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBjb25zdCBrZXkgPSBwYXJlbnRLZXkgPT0gbnVsbCA/IGNoaWxkLmtleSA6IFN0cmluZyhwYXJlbnRLZXkpICsgU3RyaW5nKGNoaWxkLmtleSAhPSBudWxsID8gY2hpbGQua2V5IDogaSk7XG4gICAgaWYgKGNoaWxkLnR5cGUgPT09IEZyYWdtZW50KSB7XG4gICAgICBpZiAoY2hpbGQucGF0Y2hGbGFnICYgMTI4KSBrZXllZEZyYWdtZW50Q291bnQrKztcbiAgICAgIHJldCA9IHJldC5jb25jYXQoXG4gICAgICAgIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwga2VlcENvbW1lbnQsIGtleSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChrZWVwQ29tbWVudCB8fCBjaGlsZC50eXBlICE9PSBDb21tZW50KSB7XG4gICAgICByZXQucHVzaChrZXkgIT0gbnVsbCA/IGNsb25lVk5vZGUoY2hpbGQsIHsga2V5IH0pIDogY2hpbGQpO1xuICAgIH1cbiAgfVxuICBpZiAoa2V5ZWRGcmFnbWVudENvdW50ID4gMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRbaV0ucGF0Y2hGbGFnID0gLTI7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5mdW5jdGlvbiBkZWZpbmVDb21wb25lbnQob3B0aW9ucywgZXh0cmFPcHRpb25zKSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKG9wdGlvbnMpID8gKFxuICAgIC8vICM4MjM2OiBleHRlbmQgY2FsbCBhbmQgb3B0aW9ucy5uYW1lIGFjY2VzcyBhcmUgY29uc2lkZXJlZCBzaWRlLWVmZmVjdHNcbiAgICAvLyBieSBSb2xsdXAsIHNvIHdlIGhhdmUgdG8gd3JhcCBpdCBpbiBhIHB1cmUtYW5ub3RhdGVkIElJRkUuXG4gICAgLyogQF9fUFVSRV9fICovICgoKSA9PiBleHRlbmQoeyBuYW1lOiBvcHRpb25zLm5hbWUgfSwgZXh0cmFPcHRpb25zLCB7IHNldHVwOiBvcHRpb25zIH0pKSgpXG4gICkgOiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiB1c2VJZCgpIHtcbiAgY29uc3QgaSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBpZiAoaSkge1xuICAgIHJldHVybiAoaS5hcHBDb250ZXh0LmNvbmZpZy5pZFByZWZpeCB8fCBcInZcIikgKyBcIi1cIiArIGkuaWRzWzBdICsgaS5pZHNbMV0rKztcbiAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FybiQxKFxuICAgICAgYHVzZUlkKCkgaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBiZSBhc3NvY2lhdGVkIHdpdGguYFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiBtYXJrQXN5bmNCb3VuZGFyeShpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5pZHMgPSBbaW5zdGFuY2UuaWRzWzBdICsgaW5zdGFuY2UuaWRzWzJdKysgKyBcIi1cIiwgMCwgMF07XG59XG5cbmNvbnN0IGtub3duVGVtcGxhdGVSZWZzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7XG5mdW5jdGlvbiB1c2VUZW1wbGF0ZVJlZihrZXkpIHtcbiAgY29uc3QgaSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBjb25zdCByID0gc2hhbGxvd1JlZihudWxsKTtcbiAgaWYgKGkpIHtcbiAgICBjb25zdCByZWZzID0gaS5yZWZzID09PSBFTVBUWV9PQkogPyBpLnJlZnMgPSB7fSA6IGkucmVmcztcbiAgICBsZXQgZGVzYztcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAoZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmVmcywga2V5KSkgJiYgIWRlc2MuY29uZmlndXJhYmxlKSB7XG4gICAgICB3YXJuJDEoYHVzZVRlbXBsYXRlUmVmKCcke2tleX0nKSBhbHJlYWR5IGV4aXN0cy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZnMsIGtleSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IHIudmFsdWUsXG4gICAgICAgIHNldDogKHZhbCkgPT4gci52YWx1ZSA9IHZhbFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuJDEoXG4gICAgICBgdXNlVGVtcGxhdGVSZWYoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC5gXG4gICAgKTtcbiAgfVxuICBjb25zdCByZXQgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gcmVhZG9ubHkocikgOiByO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGtub3duVGVtcGxhdGVSZWZzLmFkZChyZXQpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmNvbnN0IHBlbmRpbmdTZXRSZWZNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIHNldFJlZihyYXdSZWYsIG9sZFJhd1JlZiwgcGFyZW50U3VzcGVuc2UsIHZub2RlLCBpc1VubW91bnQgPSBmYWxzZSkge1xuICBpZiAoaXNBcnJheShyYXdSZWYpKSB7XG4gICAgcmF3UmVmLmZvckVhY2goXG4gICAgICAociwgaSkgPT4gc2V0UmVmKFxuICAgICAgICByLFxuICAgICAgICBvbGRSYXdSZWYgJiYgKGlzQXJyYXkob2xkUmF3UmVmKSA/IG9sZFJhd1JlZltpXSA6IG9sZFJhd1JlZiksXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICB2bm9kZSxcbiAgICAgICAgaXNVbm1vdW50XG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzQXN5bmNXcmFwcGVyKHZub2RlKSAmJiAhaXNVbm1vdW50KSB7XG4gICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDUxMiAmJiB2bm9kZS50eXBlLl9fYXN5bmNSZXNvbHZlZCAmJiB2bm9kZS5jb21wb25lbnQuc3ViVHJlZS5jb21wb25lbnQpIHtcbiAgICAgIHNldFJlZihyYXdSZWYsIG9sZFJhd1JlZiwgcGFyZW50U3VzcGVuc2UsIHZub2RlLmNvbXBvbmVudC5zdWJUcmVlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlZlZhbHVlID0gdm5vZGUuc2hhcGVGbGFnICYgNCA/IGdldENvbXBvbmVudFB1YmxpY0luc3RhbmNlKHZub2RlLmNvbXBvbmVudCkgOiB2bm9kZS5lbDtcbiAgY29uc3QgdmFsdWUgPSBpc1VubW91bnQgPyBudWxsIDogcmVmVmFsdWU7XG4gIGNvbnN0IHsgaTogb3duZXIsIHI6IHJlZiB9ID0gcmF3UmVmO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhb3duZXIpIHtcbiAgICB3YXJuJDEoXG4gICAgICBgTWlzc2luZyByZWYgb3duZXIgY29udGV4dC4gcmVmIGNhbm5vdCBiZSB1c2VkIG9uIGhvaXN0ZWQgdm5vZGVzLiBBIHZub2RlIHdpdGggcmVmIG11c3QgYmUgY3JlYXRlZCBpbnNpZGUgdGhlIHJlbmRlciBmdW5jdGlvbi5gXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb2xkUmVmID0gb2xkUmF3UmVmICYmIG9sZFJhd1JlZi5yO1xuICBjb25zdCByZWZzID0gb3duZXIucmVmcyA9PT0gRU1QVFlfT0JKID8gb3duZXIucmVmcyA9IHt9IDogb3duZXIucmVmcztcbiAgY29uc3Qgc2V0dXBTdGF0ZSA9IG93bmVyLnNldHVwU3RhdGU7XG4gIGNvbnN0IHJhd1NldHVwU3RhdGUgPSB0b1JhdyhzZXR1cFN0YXRlKTtcbiAgY29uc3QgY2FuU2V0U2V0dXBSZWYgPSBzZXR1cFN0YXRlID09PSBFTVBUWV9PQkogPyBOTyA6IChrZXkpID0+IHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgaWYgKGhhc093bihyYXdTZXR1cFN0YXRlLCBrZXkpICYmICFpc1JlZihyYXdTZXR1cFN0YXRlW2tleV0pKSB7XG4gICAgICAgIHdhcm4kMShcbiAgICAgICAgICBgVGVtcGxhdGUgcmVmIFwiJHtrZXl9XCIgdXNlZCBvbiBhIG5vbi1yZWYgdmFsdWUuIEl0IHdpbGwgbm90IHdvcmsgaW4gdGhlIHByb2R1Y3Rpb24gYnVpbGQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGtub3duVGVtcGxhdGVSZWZzLmhhcyhyYXdTZXR1cFN0YXRlW2tleV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc093bihyYXdTZXR1cFN0YXRlLCBrZXkpO1xuICB9O1xuICBjb25zdCBjYW5TZXRSZWYgPSAocmVmMikgPT4ge1xuICAgIHJldHVybiAhISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCAha25vd25UZW1wbGF0ZVJlZnMuaGFzKHJlZjIpO1xuICB9O1xuICBpZiAob2xkUmVmICE9IG51bGwgJiYgb2xkUmVmICE9PSByZWYpIHtcbiAgICBpbnZhbGlkYXRlUGVuZGluZ1NldFJlZihvbGRSYXdSZWYpO1xuICAgIGlmIChpc1N0cmluZyhvbGRSZWYpKSB7XG4gICAgICByZWZzW29sZFJlZl0gPSBudWxsO1xuICAgICAgaWYgKGNhblNldFNldHVwUmVmKG9sZFJlZikpIHtcbiAgICAgICAgc2V0dXBTdGF0ZVtvbGRSZWZdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUmVmKG9sZFJlZikpIHtcbiAgICAgIGlmIChjYW5TZXRSZWYob2xkUmVmKSkge1xuICAgICAgICBvbGRSZWYudmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2xkUmF3UmVmQXRvbSA9IG9sZFJhd1JlZjtcbiAgICAgIGlmIChvbGRSYXdSZWZBdG9tLmspIHJlZnNbb2xkUmF3UmVmQXRvbS5rXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcbiAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcocmVmLCBvd25lciwgMTIsIFt2YWx1ZSwgcmVmc10pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9pc1N0cmluZyA9IGlzU3RyaW5nKHJlZik7XG4gICAgY29uc3QgX2lzUmVmID0gaXNSZWYocmVmKTtcbiAgICBpZiAoX2lzU3RyaW5nIHx8IF9pc1JlZikge1xuICAgICAgY29uc3QgZG9TZXQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYXdSZWYuZikge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gX2lzU3RyaW5nID8gY2FuU2V0U2V0dXBSZWYocmVmKSA/IHNldHVwU3RhdGVbcmVmXSA6IHJlZnNbcmVmXSA6IGNhblNldFJlZihyZWYpIHx8ICFyYXdSZWYuayA/IHJlZi52YWx1ZSA6IHJlZnNbcmF3UmVmLmtdO1xuICAgICAgICAgIGlmIChpc1VubW91bnQpIHtcbiAgICAgICAgICAgIGlzQXJyYXkoZXhpc3RpbmcpICYmIHJlbW92ZShleGlzdGluZywgcmVmVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgICAgIGlmIChfaXNTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZWZzW3JlZl0gPSBbcmVmVmFsdWVdO1xuICAgICAgICAgICAgICAgIGlmIChjYW5TZXRTZXR1cFJlZihyZWYpKSB7XG4gICAgICAgICAgICAgICAgICBzZXR1cFN0YXRlW3JlZl0gPSByZWZzW3JlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IFtyZWZWYWx1ZV07XG4gICAgICAgICAgICAgICAgaWYgKGNhblNldFJlZihyZWYpKSB7XG4gICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyYXdSZWYuaykgcmVmc1tyYXdSZWYua10gPSBuZXdWYWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV4aXN0aW5nLmluY2x1ZGVzKHJlZlZhbHVlKSkge1xuICAgICAgICAgICAgICBleGlzdGluZy5wdXNoKHJlZlZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoX2lzU3RyaW5nKSB7XG4gICAgICAgICAgcmVmc1tyZWZdID0gdmFsdWU7XG4gICAgICAgICAgaWYgKGNhblNldFNldHVwUmVmKHJlZikpIHtcbiAgICAgICAgICAgIHNldHVwU3RhdGVbcmVmXSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChfaXNSZWYpIHtcbiAgICAgICAgICBpZiAoY2FuU2V0UmVmKHJlZikpIHtcbiAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmF3UmVmLmspIHJlZnNbcmF3UmVmLmtdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHdhcm4kMShcIkludmFsaWQgdGVtcGxhdGUgcmVmIHR5cGU6XCIsIHJlZiwgYCgke3R5cGVvZiByZWZ9KWApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGpvYiA9ICgpID0+IHtcbiAgICAgICAgICBkb1NldCgpO1xuICAgICAgICAgIHBlbmRpbmdTZXRSZWZNYXAuZGVsZXRlKHJhd1JlZik7XG4gICAgICAgIH07XG4gICAgICAgIGpvYi5pZCA9IC0xO1xuICAgICAgICBwZW5kaW5nU2V0UmVmTWFwLnNldChyYXdSZWYsIGpvYik7XG4gICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdChqb2IsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludmFsaWRhdGVQZW5kaW5nU2V0UmVmKHJhd1JlZik7XG4gICAgICAgIGRvU2V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuJDEoXCJJbnZhbGlkIHRlbXBsYXRlIHJlZiB0eXBlOlwiLCByZWYsIGAoJHt0eXBlb2YgcmVmfSlgKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGludmFsaWRhdGVQZW5kaW5nU2V0UmVmKHJhd1JlZikge1xuICBjb25zdCBwZW5kaW5nU2V0UmVmID0gcGVuZGluZ1NldFJlZk1hcC5nZXQocmF3UmVmKTtcbiAgaWYgKHBlbmRpbmdTZXRSZWYpIHtcbiAgICBwZW5kaW5nU2V0UmVmLmZsYWdzIHw9IDg7XG4gICAgcGVuZGluZ1NldFJlZk1hcC5kZWxldGUocmF3UmVmKTtcbiAgfVxufVxuXG5sZXQgaGFzTG9nZ2VkTWlzbWF0Y2hFcnJvciA9IGZhbHNlO1xuY29uc3QgbG9nTWlzbWF0Y2hFcnJvciA9ICgpID0+IHtcbiAgaWYgKGhhc0xvZ2dlZE1pc21hdGNoRXJyb3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc29sZS5lcnJvcihcIkh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuXCIpO1xuICBoYXNMb2dnZWRNaXNtYXRjaEVycm9yID0gdHJ1ZTtcbn07XG5jb25zdCBpc1NWR0NvbnRhaW5lciA9IChjb250YWluZXIpID0+IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkuaW5jbHVkZXMoXCJzdmdcIikgJiYgY29udGFpbmVyLnRhZ05hbWUgIT09IFwiZm9yZWlnbk9iamVjdFwiO1xuY29uc3QgaXNNYXRoTUxDb250YWluZXIgPSAoY29udGFpbmVyKSA9PiBjb250YWluZXIubmFtZXNwYWNlVVJJLmluY2x1ZGVzKFwiTWF0aE1MXCIpO1xuY29uc3QgZ2V0Q29udGFpbmVyVHlwZSA9IChjb250YWluZXIpID0+IHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuIHZvaWQgMDtcbiAgaWYgKGlzU1ZHQ29udGFpbmVyKGNvbnRhaW5lcikpIHJldHVybiBcInN2Z1wiO1xuICBpZiAoaXNNYXRoTUxDb250YWluZXIoY29udGFpbmVyKSkgcmV0dXJuIFwibWF0aG1sXCI7XG4gIHJldHVybiB2b2lkIDA7XG59O1xuY29uc3QgaXNDb21tZW50ID0gKG5vZGUpID0+IG5vZGUubm9kZVR5cGUgPT09IDg7XG5mdW5jdGlvbiBjcmVhdGVIeWRyYXRpb25GdW5jdGlvbnMocmVuZGVyZXJJbnRlcm5hbHMpIHtcbiAgY29uc3Qge1xuICAgIG10OiBtb3VudENvbXBvbmVudCxcbiAgICBwOiBwYXRjaCxcbiAgICBvOiB7XG4gICAgICBwYXRjaFByb3AsXG4gICAgICBjcmVhdGVUZXh0LFxuICAgICAgbmV4dFNpYmxpbmcsXG4gICAgICBwYXJlbnROb2RlLFxuICAgICAgcmVtb3ZlLFxuICAgICAgaW5zZXJ0LFxuICAgICAgY3JlYXRlQ29tbWVudFxuICAgIH1cbiAgfSA9IHJlbmRlcmVySW50ZXJuYWxzO1xuICBjb25zdCBoeWRyYXRlID0gKHZub2RlLCBjb250YWluZXIpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfXykgJiYgd2FybiQxKFxuICAgICAgICBgQXR0ZW1wdGluZyB0byBoeWRyYXRlIGV4aXN0aW5nIG1hcmt1cCBidXQgY29udGFpbmVyIGlzIGVtcHR5LiBQZXJmb3JtaW5nIGZ1bGwgbW91bnQgaW5zdGVhZC5gXG4gICAgICApO1xuICAgICAgcGF0Y2gobnVsbCwgdm5vZGUsIGNvbnRhaW5lcik7XG4gICAgICBmbHVzaFBvc3RGbHVzaENicygpO1xuICAgICAgY29udGFpbmVyLl92bm9kZSA9IHZub2RlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoeWRyYXRlTm9kZShjb250YWluZXIuZmlyc3RDaGlsZCwgdm5vZGUsIG51bGwsIG51bGwsIG51bGwpO1xuICAgIGZsdXNoUG9zdEZsdXNoQ2JzKCk7XG4gICAgY29udGFpbmVyLl92bm9kZSA9IHZub2RlO1xuICB9O1xuICBjb25zdCBoeWRyYXRlTm9kZSA9IChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQgPSBmYWxzZSkgPT4ge1xuICAgIG9wdGltaXplZCA9IG9wdGltaXplZCB8fCAhIXZub2RlLmR5bmFtaWNDaGlsZHJlbjtcbiAgICBjb25zdCBpc0ZyYWdtZW50U3RhcnQgPSBpc0NvbW1lbnQobm9kZSkgJiYgbm9kZS5kYXRhID09PSBcIltcIjtcbiAgICBjb25zdCBvbk1pc21hdGNoID0gKCkgPT4gaGFuZGxlTWlzbWF0Y2goXG4gICAgICBub2RlLFxuICAgICAgdm5vZGUsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgIGlzRnJhZ21lbnRTdGFydFxuICAgICk7XG4gICAgY29uc3QgeyB0eXBlLCByZWYsIHNoYXBlRmxhZywgcGF0Y2hGbGFnIH0gPSB2bm9kZTtcbiAgICBsZXQgZG9tVHlwZSA9IG5vZGUubm9kZVR5cGU7XG4gICAgdm5vZGUuZWwgPSBub2RlO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xuICAgICAgZGVmKG5vZGUsIFwiX192bm9kZVwiLCB2bm9kZSwgdHJ1ZSk7XG4gICAgICBkZWYobm9kZSwgXCJfX3Z1ZVBhcmVudENvbXBvbmVudFwiLCBwYXJlbnRDb21wb25lbnQsIHRydWUpO1xuICAgIH1cbiAgICBpZiAocGF0Y2hGbGFnID09PSAtMikge1xuICAgICAgb3B0aW1pemVkID0gZmFsc2U7XG4gICAgICB2bm9kZS5keW5hbWljQ2hpbGRyZW4gPSBudWxsO1xuICAgIH1cbiAgICBsZXQgbmV4dE5vZGUgPSBudWxsO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBUZXh0OlxuICAgICAgICBpZiAoZG9tVHlwZSAhPT0gMykge1xuICAgICAgICAgIGlmICh2bm9kZS5jaGlsZHJlbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgaW5zZXJ0KHZub2RlLmVsID0gY3JlYXRlVGV4dChcIlwiKSwgcGFyZW50Tm9kZShub2RlKSwgbm9kZSk7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobm9kZS5kYXRhICE9PSB2bm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9IWURSQVRJT05fTUlTTUFUQ0hfREVUQUlMU19fKSAmJiB3YXJuJDEoXG4gICAgICAgICAgICAgIGBIeWRyYXRpb24gdGV4dCBtaXNtYXRjaCBpbmAsXG4gICAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSxcbiAgICAgICAgICAgICAgYFxuICAtIHJlbmRlcmVkIG9uIHNlcnZlcjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBub2RlLmRhdGFcbiAgICAgICAgICAgICAgKX1cbiAgLSBleHBlY3RlZCBvbiBjbGllbnQ6ICR7SlNPTi5zdHJpbmdpZnkodm5vZGUuY2hpbGRyZW4pfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2dNaXNtYXRjaEVycm9yKCk7XG4gICAgICAgICAgICBub2RlLmRhdGEgPSB2bm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29tbWVudDpcbiAgICAgICAgaWYgKGlzVGVtcGxhdGVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgICByZXBsYWNlTm9kZShcbiAgICAgICAgICAgIHZub2RlLmVsID0gbm9kZS5jb250ZW50LmZpcnN0Q2hpbGQsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkb21UeXBlICE9PSA4IHx8IGlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0YXRpYzpcbiAgICAgICAgaWYgKGlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgICBkb21UeXBlID0gbm9kZS5ub2RlVHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tVHlwZSA9PT0gMSB8fCBkb21UeXBlID09PSAzKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBub2RlO1xuICAgICAgICAgIGNvbnN0IG5lZWRUb0Fkb3B0Q29udGVudCA9ICF2bm9kZS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5zdGF0aWNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobmVlZFRvQWRvcHRDb250ZW50KVxuICAgICAgICAgICAgICB2bm9kZS5jaGlsZHJlbiArPSBuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gMSA/IG5leHROb2RlLm91dGVySFRNTCA6IG5leHROb2RlLmRhdGE7XG4gICAgICAgICAgICBpZiAoaSA9PT0gdm5vZGUuc3RhdGljQ291bnQgLSAxKSB7XG4gICAgICAgICAgICAgIHZub2RlLmFuY2hvciA9IG5leHROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhuZXh0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpc0ZyYWdtZW50U3RhcnQgPyBuZXh0U2libGluZyhuZXh0Tm9kZSkgOiBuZXh0Tm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbk1pc21hdGNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICBpZiAoIWlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHROb2RlID0gaHlkcmF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZub2RlLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDEpIHtcbiAgICAgICAgICBpZiAoKGRvbVR5cGUgIT09IDEgfHwgdm5vZGUudHlwZS50b0xvd2VyQ2FzZSgpICE9PSBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgJiYgIWlzVGVtcGxhdGVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG9uTWlzbWF0Y2goKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dE5vZGUgPSBoeWRyYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZUZsYWcgJiA2KSB7XG4gICAgICAgICAgdm5vZGUuc2xvdFNjb3BlSWRzID0gc2xvdFNjb3BlSWRzO1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBhcmVudE5vZGUobm9kZSk7XG4gICAgICAgICAgaWYgKGlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgICAgbmV4dE5vZGUgPSBsb2NhdGVDbG9zaW5nQW5jaG9yKG5vZGUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNDb21tZW50KG5vZGUpICYmIG5vZGUuZGF0YSA9PT0gXCJ0ZWxlcG9ydCBzdGFydFwiKSB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IGxvY2F0ZUNsb3NpbmdBbmNob3Iobm9kZSwgbm9kZS5kYXRhLCBcInRlbGVwb3J0IGVuZFwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbW91bnRDb21wb25lbnQoXG4gICAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIGdldENvbnRhaW5lclR5cGUoY29udGFpbmVyKSxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlzQXN5bmNXcmFwcGVyKHZub2RlKSAmJiAhdm5vZGUudHlwZS5fX2FzeW5jUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIGxldCBzdWJUcmVlO1xuICAgICAgICAgICAgaWYgKGlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgICAgICBzdWJUcmVlID0gY3JlYXRlVk5vZGUoRnJhZ21lbnQpO1xuICAgICAgICAgICAgICBzdWJUcmVlLmFuY2hvciA9IG5leHROb2RlID8gbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nIDogY29udGFpbmVyLmxhc3RDaGlsZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1YlRyZWUgPSBub2RlLm5vZGVUeXBlID09PSAzID8gY3JlYXRlVGV4dFZOb2RlKFwiXCIpIDogY3JlYXRlVk5vZGUoXCJkaXZcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJUcmVlLmVsID0gbm9kZTtcbiAgICAgICAgICAgIHZub2RlLmNvbXBvbmVudC5zdWJUcmVlID0gc3ViVHJlZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGVGbGFnICYgNjQpIHtcbiAgICAgICAgICBpZiAoZG9tVHlwZSAhPT0gOCkge1xuICAgICAgICAgICAgbmV4dE5vZGUgPSBvbk1pc21hdGNoKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHROb2RlID0gdm5vZGUudHlwZS5oeWRyYXRlKFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgICAgICAgIHJlbmRlcmVySW50ZXJuYWxzLFxuICAgICAgICAgICAgICBoeWRyYXRlQ2hpbGRyZW5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgICAgIG5leHROb2RlID0gdm5vZGUudHlwZS5oeWRyYXRlKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZub2RlLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBnZXRDb250YWluZXJUeXBlKHBhcmVudE5vZGUobm9kZSkpLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkLFxuICAgICAgICAgICAgcmVuZGVyZXJJbnRlcm5hbHMsXG4gICAgICAgICAgICBoeWRyYXRlTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pIHtcbiAgICAgICAgICB3YXJuJDEoXCJJbnZhbGlkIEhvc3RWTm9kZSB0eXBlOlwiLCB0eXBlLCBgKCR7dHlwZW9mIHR5cGV9KWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZWYgIT0gbnVsbCkge1xuICAgICAgc2V0UmVmKHJlZiwgbnVsbCwgcGFyZW50U3VzcGVuc2UsIHZub2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHROb2RlO1xuICB9O1xuICBjb25zdCBoeWRyYXRlRWxlbWVudCA9IChlbCwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XG4gICAgb3B0aW1pemVkID0gb3B0aW1pemVkIHx8ICEhdm5vZGUuZHluYW1pY0NoaWxkcmVuO1xuICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMsIHBhdGNoRmxhZywgc2hhcGVGbGFnLCBkaXJzLCB0cmFuc2l0aW9uIH0gPSB2bm9kZTtcbiAgICBjb25zdCBmb3JjZVBhdGNoID0gdHlwZSA9PT0gXCJpbnB1dFwiIHx8IHR5cGUgPT09IFwib3B0aW9uXCI7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgZm9yY2VQYXRjaCB8fCBwYXRjaEZsYWcgIT09IC0xKSB7XG4gICAgICBpZiAoZGlycykge1xuICAgICAgICBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwiY3JlYXRlZFwiKTtcbiAgICAgIH1cbiAgICAgIGxldCBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcyA9IGZhbHNlO1xuICAgICAgaWYgKGlzVGVtcGxhdGVOb2RlKGVsKSkge1xuICAgICAgICBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcyA9IG5lZWRUcmFuc2l0aW9uKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgLy8gbm8gbmVlZCBjaGVjayBwYXJlbnRTdXNwZW5zZSBpbiBoeWRyYXRpb25cbiAgICAgICAgICB0cmFuc2l0aW9uXG4gICAgICAgICkgJiYgcGFyZW50Q29tcG9uZW50ICYmIHBhcmVudENvbXBvbmVudC52bm9kZS5wcm9wcyAmJiBwYXJlbnRDb21wb25lbnQudm5vZGUucHJvcHMuYXBwZWFyO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZWwuY29udGVudC5maXJzdENoaWxkO1xuICAgICAgICBpZiAobmVlZENhbGxUcmFuc2l0aW9uSG9va3MpIHtcbiAgICAgICAgICBjb25zdCBjbHMgPSBjb250ZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgICAgICAgIGlmIChjbHMpIGNvbnRlbnQuJGNscyA9IGNscztcbiAgICAgICAgICB0cmFuc2l0aW9uLmJlZm9yZUVudGVyKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJlcGxhY2VOb2RlKGNvbnRlbnQsIGVsLCBwYXJlbnRDb21wb25lbnQpO1xuICAgICAgICB2bm9kZS5lbCA9IGVsID0gY29udGVudDtcbiAgICAgIH1cbiAgICAgIGlmIChzaGFwZUZsYWcgJiAxNiAmJiAvLyBza2lwIGlmIGVsZW1lbnQgaGFzIGlubmVySFRNTCAvIHRleHRDb250ZW50XG4gICAgICAhKHByb3BzICYmIChwcm9wcy5pbm5lckhUTUwgfHwgcHJvcHMudGV4dENvbnRlbnQpKSkge1xuICAgICAgICBsZXQgbmV4dCA9IGh5ZHJhdGVDaGlsZHJlbihcbiAgICAgICAgICBlbC5maXJzdENoaWxkLFxuICAgICAgICAgIHZub2RlLFxuICAgICAgICAgIGVsLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBoYXNXYXJuZWQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKG5leHQpIHtcbiAgICAgICAgICBpZiAoIWlzTWlzbWF0Y2hBbGxvd2VkKGVsLCAxIC8qIENISUxEUkVOICovKSkge1xuICAgICAgICAgICAgaWYgKCghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfXykgJiYgIWhhc1dhcm5lZCkge1xuICAgICAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICAgICAgYEh5ZHJhdGlvbiBjaGlsZHJlbiBtaXNtYXRjaCBvbmAsXG4gICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgYFxuU2VydmVyIHJlbmRlcmVkIGVsZW1lbnQgY29udGFpbnMgbW9yZSBjaGlsZCBub2RlcyB0aGFuIGNsaWVudCB2ZG9tLmBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaGFzV2FybmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ01pc21hdGNoRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY3VyID0gbmV4dDtcbiAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0U2libGluZztcbiAgICAgICAgICByZW1vdmUoY3VyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzaGFwZUZsYWcgJiA4KSB7XG4gICAgICAgIGxldCBjbGllbnRUZXh0ID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIGlmIChjbGllbnRUZXh0WzBdID09PSBcIlxcblwiICYmIChlbC50YWdOYW1lID09PSBcIlBSRVwiIHx8IGVsLnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikpIHtcbiAgICAgICAgICBjbGllbnRUZXh0ID0gY2xpZW50VGV4dC5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHRleHRDb250ZW50IH0gPSBlbDtcbiAgICAgICAgaWYgKHRleHRDb250ZW50ICE9PSBjbGllbnRUZXh0ICYmIC8vIGlubmVySFRNTCBub3JtYWxpemUgXFxyXFxuIG9yIFxcciBpbnRvIGEgc2luZ2xlIFxcbiBpbiB0aGUgRE9NXG4gICAgICAgIHRleHRDb250ZW50ICE9PSBjbGllbnRUZXh0LnJlcGxhY2UoL1xcclxcbnxcXHIvZywgXCJcXG5cIikpIHtcbiAgICAgICAgICBpZiAoIWlzTWlzbWF0Y2hBbGxvd2VkKGVsLCAwIC8qIFRFWFQgKi8pKSB7XG4gICAgICAgICAgICAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pICYmIHdhcm4kMShcbiAgICAgICAgICAgICAgYEh5ZHJhdGlvbiB0ZXh0IGNvbnRlbnQgbWlzbWF0Y2ggb25gLFxuICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgYFxuICAtIHJlbmRlcmVkIG9uIHNlcnZlcjogJHt0ZXh0Q29udGVudH1cbiAgLSBleHBlY3RlZCBvbiBjbGllbnQ6ICR7Y2xpZW50VGV4dH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9nTWlzbWF0Y2hFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9IWURSQVRJT05fTUlTTUFUQ0hfREVUQUlMU19fIHx8IGZvcmNlUGF0Y2ggfHwgIW9wdGltaXplZCB8fCBwYXRjaEZsYWcgJiAoMTYgfCAzMikpIHtcbiAgICAgICAgICBjb25zdCBpc0N1c3RvbUVsZW1lbnQgPSBlbC50YWdOYW1lLmluY2x1ZGVzKFwiLVwiKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgICAgICAgaWYgKCghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfXykgJiYgLy8gIzExMTg5IHNraXAgaWYgdGhpcyBub2RlIGhhcyBkaXJlY3RpdmVzIHRoYXQgaGF2ZSBjcmVhdGVkIGhvb2tzXG4gICAgICAgICAgICAvLyBhcyBpdCBjb3VsZCBoYXZlIG11dGF0ZWQgdGhlIERPTSBpbiBhbnkgcG9zc2libGUgd2F5XG4gICAgICAgICAgICAhKGRpcnMgJiYgZGlycy5zb21lKChkKSA9PiBkLmRpci5jcmVhdGVkKSkgJiYgcHJvcEhhc01pc21hdGNoKGVsLCBrZXksIHByb3BzW2tleV0sIHZub2RlLCBwYXJlbnRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIGxvZ01pc21hdGNoRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JjZVBhdGNoICYmIChrZXkuZW5kc1dpdGgoXCJ2YWx1ZVwiKSB8fCBrZXkgPT09IFwiaW5kZXRlcm1pbmF0ZVwiKSB8fCBpc09uKGtleSkgJiYgIWlzUmVzZXJ2ZWRQcm9wKGtleSkgfHwgLy8gZm9yY2UgaHlkcmF0ZSB2LWJpbmQgd2l0aCAucHJvcCBtb2RpZmllcnNcbiAgICAgICAgICAgIGtleVswXSA9PT0gXCIuXCIgfHwgaXNDdXN0b21FbGVtZW50KSB7XG4gICAgICAgICAgICAgIHBhdGNoUHJvcChlbCwga2V5LCBudWxsLCBwcm9wc1trZXldLCB2b2lkIDAsIHBhcmVudENvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLm9uQ2xpY2spIHtcbiAgICAgICAgICBwYXRjaFByb3AoXG4gICAgICAgICAgICBlbCxcbiAgICAgICAgICAgIFwib25DbGlja1wiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHByb3BzLm9uQ2xpY2ssXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdGNoRmxhZyAmIDQgJiYgaXNSZWFjdGl2ZShwcm9wcy5zdHlsZSkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcy5zdHlsZSkgcHJvcHMuc3R5bGVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHZub2RlSG9va3M7XG4gICAgICBpZiAodm5vZGVIb29rcyA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVCZWZvcmVNb3VudCkge1xuICAgICAgICBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rcywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAoZGlycykge1xuICAgICAgICBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwiYmVmb3JlTW91bnRcIik7XG4gICAgICB9XG4gICAgICBpZiAoKHZub2RlSG9va3MgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlTW91bnRlZCkgfHwgZGlycyB8fCBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcykge1xuICAgICAgICBxdWV1ZUVmZmVjdFdpdGhTdXNwZW5zZSgoKSA9PiB7XG4gICAgICAgICAgdm5vZGVIb29rcyAmJiBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rcywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XG4gICAgICAgICAgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MgJiYgdHJhbnNpdGlvbi5lbnRlcihlbCk7XG4gICAgICAgICAgZGlycyAmJiBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwibW91bnRlZFwiKTtcbiAgICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWwubmV4dFNpYmxpbmc7XG4gIH07XG4gIGNvbnN0IGh5ZHJhdGVDaGlsZHJlbiA9IChub2RlLCBwYXJlbnRWTm9kZSwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xuICAgIG9wdGltaXplZCA9IG9wdGltaXplZCB8fCAhIXBhcmVudFZOb2RlLmR5bmFtaWNDaGlsZHJlbjtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudFZOb2RlLmNoaWxkcmVuO1xuICAgIGNvbnN0IGwgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgbGV0IGhhc1dhcm5lZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCB2bm9kZSA9IG9wdGltaXplZCA/IGNoaWxkcmVuW2ldIDogY2hpbGRyZW5baV0gPSBub3JtYWxpemVWTm9kZShjaGlsZHJlbltpXSk7XG4gICAgICBjb25zdCBpc1RleHQgPSB2bm9kZS50eXBlID09PSBUZXh0O1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgaWYgKGlzVGV4dCAmJiAhb3B0aW1pemVkKSB7XG4gICAgICAgICAgaWYgKGkgKyAxIDwgbCAmJiBub3JtYWxpemVWTm9kZShjaGlsZHJlbltpICsgMV0pLnR5cGUgPT09IFRleHQpIHtcbiAgICAgICAgICAgIGluc2VydChcbiAgICAgICAgICAgICAgY3JlYXRlVGV4dChcbiAgICAgICAgICAgICAgICBub2RlLmRhdGEuc2xpY2Uodm5vZGUuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICAgIG5leHRTaWJsaW5nKG5vZGUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbm9kZS5kYXRhID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBoeWRyYXRlTm9kZShcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIHZub2RlLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGV4dCAmJiAhdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgaW5zZXJ0KHZub2RlLmVsID0gY3JlYXRlVGV4dChcIlwiKSwgY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghaXNNaXNtYXRjaEFsbG93ZWQoY29udGFpbmVyLCAxIC8qIENISUxEUkVOICovKSkge1xuICAgICAgICAgIGlmICgoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pICYmICFoYXNXYXJuZWQpIHtcbiAgICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgICAgYEh5ZHJhdGlvbiBjaGlsZHJlbiBtaXNtYXRjaCBvbmAsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgYFxuU2VydmVyIHJlbmRlcmVkIGVsZW1lbnQgY29udGFpbnMgZmV3ZXIgY2hpbGQgbm9kZXMgdGhhbiBjbGllbnQgdmRvbS5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaGFzV2FybmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nTWlzbWF0Y2hFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIGdldENvbnRhaW5lclR5cGUoY29udGFpbmVyKSxcbiAgICAgICAgICBzbG90U2NvcGVJZHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIGNvbnN0IGh5ZHJhdGVGcmFnbWVudCA9IChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBjb25zdCB7IHNsb3RTY29wZUlkczogZnJhZ21lbnRTbG90U2NvcGVJZHMgfSA9IHZub2RlO1xuICAgIGlmIChmcmFnbWVudFNsb3RTY29wZUlkcykge1xuICAgICAgc2xvdFNjb3BlSWRzID0gc2xvdFNjb3BlSWRzID8gc2xvdFNjb3BlSWRzLmNvbmNhdChmcmFnbWVudFNsb3RTY29wZUlkcykgOiBmcmFnbWVudFNsb3RTY29wZUlkcztcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50Tm9kZShub2RlKTtcbiAgICBjb25zdCBuZXh0ID0gaHlkcmF0ZUNoaWxkcmVuKFxuICAgICAgbmV4dFNpYmxpbmcobm9kZSksXG4gICAgICB2bm9kZSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgb3B0aW1pemVkXG4gICAgKTtcbiAgICBpZiAobmV4dCAmJiBpc0NvbW1lbnQobmV4dCkgJiYgbmV4dC5kYXRhID09PSBcIl1cIikge1xuICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKHZub2RlLmFuY2hvciA9IG5leHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dNaXNtYXRjaEVycm9yKCk7XG4gICAgICBpbnNlcnQodm5vZGUuYW5jaG9yID0gY3JlYXRlQ29tbWVudChgXWApLCBjb250YWluZXIsIG5leHQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVNaXNtYXRjaCA9IChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBpc0ZyYWdtZW50KSA9PiB7XG4gICAgaWYgKCFpc01pc21hdGNoQWxsb3dlZChub2RlLnBhcmVudEVsZW1lbnQsIDEgLyogQ0hJTERSRU4gKi8pKSB7XG4gICAgICAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pICYmIHdhcm4kMShcbiAgICAgICAgYEh5ZHJhdGlvbiBub2RlIG1pc21hdGNoOlxuLSByZW5kZXJlZCBvbiBzZXJ2ZXI6YCxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbm9kZS5ub2RlVHlwZSA9PT0gMyA/IGAodGV4dClgIDogaXNDb21tZW50KG5vZGUpICYmIG5vZGUuZGF0YSA9PT0gXCJbXCIgPyBgKHN0YXJ0IG9mIGZyYWdtZW50KWAgOiBgYCxcbiAgICAgICAgYFxuLSBleHBlY3RlZCBvbiBjbGllbnQ6YCxcbiAgICAgICAgdm5vZGUudHlwZVxuICAgICAgKTtcbiAgICAgIGxvZ01pc21hdGNoRXJyb3IoKTtcbiAgICB9XG4gICAgdm5vZGUuZWwgPSBudWxsO1xuICAgIGlmIChpc0ZyYWdtZW50KSB7XG4gICAgICBjb25zdCBlbmQgPSBsb2NhdGVDbG9zaW5nQW5jaG9yKG5vZGUpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgbmV4dDIgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgaWYgKG5leHQyICYmIG5leHQyICE9PSBlbmQpIHtcbiAgICAgICAgICByZW1vdmUobmV4dDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICBjb25zdCBjb250YWluZXIgPSBwYXJlbnROb2RlKG5vZGUpO1xuICAgIHJlbW92ZShub2RlKTtcbiAgICBwYXRjaChcbiAgICAgIG51bGwsXG4gICAgICB2bm9kZSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG5leHQsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgIGdldENvbnRhaW5lclR5cGUoY29udGFpbmVyKSxcbiAgICAgIHNsb3RTY29wZUlkc1xuICAgICk7XG4gICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgcGFyZW50Q29tcG9uZW50LnZub2RlLmVsID0gdm5vZGUuZWw7XG4gICAgICB1cGRhdGVIT0NIb3N0RWwocGFyZW50Q29tcG9uZW50LCB2bm9kZS5lbCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9O1xuICBjb25zdCBsb2NhdGVDbG9zaW5nQW5jaG9yID0gKG5vZGUsIG9wZW4gPSBcIltcIiwgY2xvc2UgPSBcIl1cIikgPT4ge1xuICAgIGxldCBtYXRjaCA9IDA7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIG5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgIGlmIChub2RlICYmIGlzQ29tbWVudChub2RlKSkge1xuICAgICAgICBpZiAobm9kZS5kYXRhID09PSBvcGVuKSBtYXRjaCsrO1xuICAgICAgICBpZiAobm9kZS5kYXRhID09PSBjbG9zZSkge1xuICAgICAgICAgIGlmIChtYXRjaCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKG5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXRjaC0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgY29uc3QgcmVwbGFjZU5vZGUgPSAobmV3Tm9kZSwgb2xkTm9kZSwgcGFyZW50Q29tcG9uZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50Tm9kZTIgPSBvbGROb2RlLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudE5vZGUyKSB7XG4gICAgICBwYXJlbnROb2RlMi5yZXBsYWNlQ2hpbGQobmV3Tm9kZSwgb2xkTm9kZSk7XG4gICAgfVxuICAgIGxldCBwYXJlbnQgPSBwYXJlbnRDb21wb25lbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC52bm9kZS5lbCA9PT0gb2xkTm9kZSkge1xuICAgICAgICBwYXJlbnQudm5vZGUuZWwgPSBwYXJlbnQuc3ViVHJlZS5lbCA9IG5ld05vZGU7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaXNUZW1wbGF0ZU5vZGUgPSAobm9kZSkgPT4ge1xuICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAxICYmIG5vZGUudGFnTmFtZSA9PT0gXCJURU1QTEFURVwiO1xuICB9O1xuICByZXR1cm4gW2h5ZHJhdGUsIGh5ZHJhdGVOb2RlXTtcbn1cbmZ1bmN0aW9uIHByb3BIYXNNaXNtYXRjaChlbCwga2V5LCBjbGllbnRWYWx1ZSwgdm5vZGUsIGluc3RhbmNlKSB7XG4gIGxldCBtaXNtYXRjaFR5cGU7XG4gIGxldCBtaXNtYXRjaEtleTtcbiAgbGV0IGFjdHVhbDtcbiAgbGV0IGV4cGVjdGVkO1xuICBpZiAoa2V5ID09PSBcImNsYXNzXCIpIHtcbiAgICBpZiAoZWwuJGNscykge1xuICAgICAgYWN0dWFsID0gZWwuJGNscztcbiAgICAgIGRlbGV0ZSBlbC4kY2xzO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3R1YWwgPSBlbC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICB9XG4gICAgZXhwZWN0ZWQgPSBub3JtYWxpemVDbGFzcyhjbGllbnRWYWx1ZSk7XG4gICAgaWYgKCFpc1NldEVxdWFsKHRvQ2xhc3NTZXQoYWN0dWFsIHx8IFwiXCIpLCB0b0NsYXNzU2V0KGV4cGVjdGVkKSkpIHtcbiAgICAgIG1pc21hdGNoVHlwZSA9IDIgLyogQ0xBU1MgKi87XG4gICAgICBtaXNtYXRjaEtleSA9IGBjbGFzc2A7XG4gICAgfVxuICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgYWN0dWFsID0gZWwuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikgfHwgXCJcIjtcbiAgICBleHBlY3RlZCA9IGlzU3RyaW5nKGNsaWVudFZhbHVlKSA/IGNsaWVudFZhbHVlIDogc3RyaW5naWZ5U3R5bGUobm9ybWFsaXplU3R5bGUoY2xpZW50VmFsdWUpKTtcbiAgICBjb25zdCBhY3R1YWxNYXAgPSB0b1N0eWxlTWFwKGFjdHVhbCk7XG4gICAgY29uc3QgZXhwZWN0ZWRNYXAgPSB0b1N0eWxlTWFwKGV4cGVjdGVkKTtcbiAgICBpZiAodm5vZGUuZGlycykge1xuICAgICAgZm9yIChjb25zdCB7IGRpciwgdmFsdWUgfSBvZiB2bm9kZS5kaXJzKSB7XG4gICAgICAgIGlmIChkaXIubmFtZSA9PT0gXCJzaG93XCIgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgZXhwZWN0ZWRNYXAuc2V0KFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICByZXNvbHZlQ3NzVmFycyhpbnN0YW5jZSwgdm5vZGUsIGV4cGVjdGVkTWFwKTtcbiAgICB9XG4gICAgaWYgKCFpc01hcEVxdWFsKGFjdHVhbE1hcCwgZXhwZWN0ZWRNYXApKSB7XG4gICAgICBtaXNtYXRjaFR5cGUgPSAzIC8qIFNUWUxFICovO1xuICAgICAgbWlzbWF0Y2hLZXkgPSBcInN0eWxlXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgU1ZHRWxlbWVudCAmJiBpc0tub3duU3ZnQXR0cihrZXkpIHx8IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgKGlzQm9vbGVhbkF0dHIoa2V5KSB8fCBpc0tub3duSHRtbEF0dHIoa2V5KSkpIHtcbiAgICBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XG4gICAgICBhY3R1YWwgPSBlbC5oYXNBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIGV4cGVjdGVkID0gaW5jbHVkZUJvb2xlYW5BdHRyKGNsaWVudFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGNsaWVudFZhbHVlID09IG51bGwpIHtcbiAgICAgIGFjdHVhbCA9IGVsLmhhc0F0dHJpYnV0ZShrZXkpO1xuICAgICAgZXhwZWN0ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVsLmhhc0F0dHJpYnV0ZShrZXkpKSB7XG4gICAgICAgIGFjdHVhbCA9IGVsLmdldEF0dHJpYnV0ZShrZXkpO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwidmFsdWVcIiAmJiBlbC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICAgICAgYWN0dWFsID0gZWwudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGV4cGVjdGVkID0gaXNSZW5kZXJhYmxlQXR0clZhbHVlKGNsaWVudFZhbHVlKSA/IFN0cmluZyhjbGllbnRWYWx1ZSkgOiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICAgIG1pc21hdGNoVHlwZSA9IDQgLyogQVRUUklCVVRFICovO1xuICAgICAgbWlzbWF0Y2hLZXkgPSBrZXk7XG4gICAgfVxuICB9XG4gIGlmIChtaXNtYXRjaFR5cGUgIT0gbnVsbCAmJiAhaXNNaXNtYXRjaEFsbG93ZWQoZWwsIG1pc21hdGNoVHlwZSkpIHtcbiAgICBjb25zdCBmb3JtYXQgPSAodikgPT4gdiA9PT0gZmFsc2UgPyBgKG5vdCByZW5kZXJlZClgIDogYCR7bWlzbWF0Y2hLZXl9PVwiJHt2fVwiYDtcbiAgICBjb25zdCBwcmVTZWdtZW50ID0gYEh5ZHJhdGlvbiAke01pc21hdGNoVHlwZVN0cmluZ1ttaXNtYXRjaFR5cGVdfSBtaXNtYXRjaCBvbmA7XG4gICAgY29uc3QgcG9zdFNlZ21lbnQgPSBgXG4gIC0gcmVuZGVyZWQgb24gc2VydmVyOiAke2Zvcm1hdChhY3R1YWwpfVxuICAtIGV4cGVjdGVkIG9uIGNsaWVudDogJHtmb3JtYXQoZXhwZWN0ZWQpfVxuICBOb3RlOiB0aGlzIG1pc21hdGNoIGlzIGNoZWNrLW9ubHkuIFRoZSBET00gd2lsbCBub3QgYmUgcmVjdGlmaWVkIGluIHByb2R1Y3Rpb24gZHVlIHRvIHBlcmZvcm1hbmNlIG92ZXJoZWFkLlxuICBZb3Ugc2hvdWxkIGZpeCB0aGUgc291cmNlIG9mIHRoZSBtaXNtYXRjaC5gO1xuICAgIHtcbiAgICAgIHdhcm4kMShwcmVTZWdtZW50LCBlbCwgcG9zdFNlZ21lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiB0b0NsYXNzU2V0KHN0cikge1xuICByZXR1cm4gbmV3IFNldChzdHIudHJpbSgpLnNwbGl0KC9cXHMrLykpO1xufVxuZnVuY3Rpb24gaXNTZXRFcXVhbChhLCBiKSB7XG4gIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGNvbnN0IHMgb2YgYSkge1xuICAgIGlmICghYi5oYXMocykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiB0b1N0eWxlTWFwKHN0cikge1xuICBjb25zdCBzdHlsZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBzdHIuc3BsaXQoXCI7XCIpKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IGl0ZW0uc3BsaXQoXCI6XCIpO1xuICAgIGtleSA9IGtleS50cmltKCk7XG4gICAgdmFsdWUgPSB2YWx1ZSAmJiB2YWx1ZS50cmltKCk7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgc3R5bGVNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3R5bGVNYXA7XG59XG5mdW5jdGlvbiBpc01hcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGEpIHtcbiAgICBpZiAodmFsdWUgIT09IGIuZ2V0KGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXNvbHZlQ3NzVmFycyhpbnN0YW5jZSwgdm5vZGUsIGV4cGVjdGVkTWFwKSB7XG4gIGNvbnN0IHJvb3QgPSBpbnN0YW5jZS5zdWJUcmVlO1xuICBpZiAoaW5zdGFuY2UuZ2V0Q3NzVmFycyAmJiAodm5vZGUgPT09IHJvb3QgfHwgcm9vdCAmJiByb290LnR5cGUgPT09IEZyYWdtZW50ICYmIHJvb3QuY2hpbGRyZW4uaW5jbHVkZXModm5vZGUpKSkge1xuICAgIGNvbnN0IGNzc1ZhcnMgPSBpbnN0YW5jZS5nZXRDc3NWYXJzKCk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY3NzVmFycykge1xuICAgICAgY29uc3QgdmFsdWUgPSBub3JtYWxpemVDc3NWYXJWYWx1ZShjc3NWYXJzW2tleV0pO1xuICAgICAgZXhwZWN0ZWRNYXAuc2V0KGAtLSR7Z2V0RXNjYXBlZENzc1Zhck5hbWUoa2V5LCBmYWxzZSl9YCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBpZiAodm5vZGUgPT09IHJvb3QgJiYgaW5zdGFuY2UucGFyZW50KSB7XG4gICAgcmVzb2x2ZUNzc1ZhcnMoaW5zdGFuY2UucGFyZW50LCBpbnN0YW5jZS52bm9kZSwgZXhwZWN0ZWRNYXApO1xuICB9XG59XG5jb25zdCBhbGxvd01pc21hdGNoQXR0ciA9IFwiZGF0YS1hbGxvdy1taXNtYXRjaFwiO1xuY29uc3QgTWlzbWF0Y2hUeXBlU3RyaW5nID0ge1xuICBbMCAvKiBURVhUICovXTogXCJ0ZXh0XCIsXG4gIFsxIC8qIENISUxEUkVOICovXTogXCJjaGlsZHJlblwiLFxuICBbMiAvKiBDTEFTUyAqL106IFwiY2xhc3NcIixcbiAgWzMgLyogU1RZTEUgKi9dOiBcInN0eWxlXCIsXG4gIFs0IC8qIEFUVFJJQlVURSAqL106IFwiYXR0cmlidXRlXCJcbn07XG5mdW5jdGlvbiBpc01pc21hdGNoQWxsb3dlZChlbCwgYWxsb3dlZFR5cGUpIHtcbiAgaWYgKGFsbG93ZWRUeXBlID09PSAwIC8qIFRFWFQgKi8gfHwgYWxsb3dlZFR5cGUgPT09IDEgLyogQ0hJTERSRU4gKi8pIHtcbiAgICB3aGlsZSAoZWwgJiYgIWVsLmhhc0F0dHJpYnV0ZShhbGxvd01pc21hdGNoQXR0cikpIHtcbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICB9XG4gIH1cbiAgY29uc3QgYWxsb3dlZEF0dHIgPSBlbCAmJiBlbC5nZXRBdHRyaWJ1dGUoYWxsb3dNaXNtYXRjaEF0dHIpO1xuICBpZiAoYWxsb3dlZEF0dHIgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChhbGxvd2VkQXR0ciA9PT0gXCJcIikge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxpc3QgPSBhbGxvd2VkQXR0ci5zcGxpdChcIixcIik7XG4gICAgaWYgKGFsbG93ZWRUeXBlID09PSAwIC8qIFRFWFQgKi8gJiYgbGlzdC5pbmNsdWRlcyhcImNoaWxkcmVuXCIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3QuaW5jbHVkZXMoTWlzbWF0Y2hUeXBlU3RyaW5nW2FsbG93ZWRUeXBlXSk7XG4gIH1cbn1cblxuY29uc3QgcmVxdWVzdElkbGVDYWxsYmFjayA9IGdldEdsb2JhbFRoaXMoKS5yZXF1ZXN0SWRsZUNhbGxiYWNrIHx8ICgoY2IpID0+IHNldFRpbWVvdXQoY2IsIDEpKTtcbmNvbnN0IGNhbmNlbElkbGVDYWxsYmFjayA9IGdldEdsb2JhbFRoaXMoKS5jYW5jZWxJZGxlQ2FsbGJhY2sgfHwgKChpZCkgPT4gY2xlYXJUaW1lb3V0KGlkKSk7XG5jb25zdCBoeWRyYXRlT25JZGxlID0gKHRpbWVvdXQgPSAxZTQpID0+IChoeWRyYXRlKSA9PiB7XG4gIGNvbnN0IGlkID0gcmVxdWVzdElkbGVDYWxsYmFjayhoeWRyYXRlLCB7IHRpbWVvdXQgfSk7XG4gIHJldHVybiAoKSA9PiBjYW5jZWxJZGxlQ2FsbGJhY2soaWQpO1xufTtcbmZ1bmN0aW9uIGVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0KGVsKSB7XG4gIGNvbnN0IHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeyBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCB9ID0gd2luZG93O1xuICByZXR1cm4gKHRvcCA+IDAgJiYgdG9wIDwgaW5uZXJIZWlnaHQgfHwgYm90dG9tID4gMCAmJiBib3R0b20gPCBpbm5lckhlaWdodCkgJiYgKGxlZnQgPiAwICYmIGxlZnQgPCBpbm5lcldpZHRoIHx8IHJpZ2h0ID4gMCAmJiByaWdodCA8IGlubmVyV2lkdGgpO1xufVxuY29uc3QgaHlkcmF0ZU9uVmlzaWJsZSA9IChvcHRzKSA9PiAoaHlkcmF0ZSwgZm9yRWFjaCkgPT4ge1xuICBjb25zdCBvYiA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoIWUuaXNJbnRlcnNlY3RpbmcpIGNvbnRpbnVlO1xuICAgICAgb2IuZGlzY29ubmVjdCgpO1xuICAgICAgaHlkcmF0ZSgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9LCBvcHRzKTtcbiAgZm9yRWFjaCgoZWwpID0+IHtcbiAgICBpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgaWYgKGVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0KGVsKSkge1xuICAgICAgaHlkcmF0ZSgpO1xuICAgICAgb2IuZGlzY29ubmVjdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYi5vYnNlcnZlKGVsKTtcbiAgfSk7XG4gIHJldHVybiAoKSA9PiBvYi5kaXNjb25uZWN0KCk7XG59O1xuY29uc3QgaHlkcmF0ZU9uTWVkaWFRdWVyeSA9IChxdWVyeSkgPT4gKGh5ZHJhdGUpID0+IHtcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgY29uc3QgbXFsID0gbWF0Y2hNZWRpYShxdWVyeSk7XG4gICAgaWYgKG1xbC5tYXRjaGVzKSB7XG4gICAgICBoeWRyYXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1xbC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGh5ZHJhdGUsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiAoKSA9PiBtcWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBoeWRyYXRlKTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBoeWRyYXRlT25JbnRlcmFjdGlvbiA9IChpbnRlcmFjdGlvbnMgPSBbXSkgPT4gKGh5ZHJhdGUsIGZvckVhY2gpID0+IHtcbiAgaWYgKGlzU3RyaW5nKGludGVyYWN0aW9ucykpIGludGVyYWN0aW9ucyA9IFtpbnRlcmFjdGlvbnNdO1xuICBsZXQgaGFzSHlkcmF0ZWQgPSBmYWxzZTtcbiAgY29uc3QgZG9IeWRyYXRlID0gKGUpID0+IHtcbiAgICBpZiAoIWhhc0h5ZHJhdGVkKSB7XG4gICAgICBoYXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICB0ZWFyZG93bigpO1xuICAgICAgaHlkcmF0ZSgpO1xuICAgICAgZS50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgZS5jb25zdHJ1Y3RvcihlLnR5cGUsIGUpKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHRlYXJkb3duID0gKCkgPT4ge1xuICAgIGZvckVhY2goKGVsKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgaW50ZXJhY3Rpb25zKSB7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSwgZG9IeWRyYXRlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgZm9yRWFjaCgoZWwpID0+IHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgaW50ZXJhY3Rpb25zKSB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGksIGRvSHlkcmF0ZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0ZWFyZG93bjtcbn07XG5mdW5jdGlvbiBmb3JFYWNoRWxlbWVudChub2RlLCBjYikge1xuICBpZiAoaXNDb21tZW50KG5vZGUpICYmIG5vZGUuZGF0YSA9PT0gXCJbXCIpIHtcbiAgICBsZXQgZGVwdGggPSAxO1xuICAgIGxldCBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKG5leHQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2IobmV4dCk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDb21tZW50KG5leHQpKSB7XG4gICAgICAgIGlmIChuZXh0LmRhdGEgPT09IFwiXVwiKSB7XG4gICAgICAgICAgaWYgKC0tZGVwdGggPT09IDApIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHQuZGF0YSA9PT0gXCJbXCIpIHtcbiAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0U2libGluZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2Iobm9kZSk7XG4gIH1cbn1cblxuY29uc3QgaXNBc3luY1dyYXBwZXIgPSAoaSkgPT4gISFpLnR5cGUuX19hc3luY0xvYWRlcjtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5mdW5jdGlvbiBkZWZpbmVBc3luY0NvbXBvbmVudChzb3VyY2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc291cmNlKSkge1xuICAgIHNvdXJjZSA9IHsgbG9hZGVyOiBzb3VyY2UgfTtcbiAgfVxuICBjb25zdCB7XG4gICAgbG9hZGVyLFxuICAgIGxvYWRpbmdDb21wb25lbnQsXG4gICAgZXJyb3JDb21wb25lbnQsXG4gICAgZGVsYXkgPSAyMDAsXG4gICAgaHlkcmF0ZTogaHlkcmF0ZVN0cmF0ZWd5LFxuICAgIHRpbWVvdXQsXG4gICAgLy8gdW5kZWZpbmVkID0gbmV2ZXIgdGltZXMgb3V0XG4gICAgc3VzcGVuc2libGUgPSB0cnVlLFxuICAgIG9uRXJyb3I6IHVzZXJPbkVycm9yXG4gIH0gPSBzb3VyY2U7XG4gIGxldCBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gIGxldCByZXNvbHZlZENvbXA7XG4gIGxldCByZXRyaWVzID0gMDtcbiAgY29uc3QgcmV0cnkgPSAoKSA9PiB7XG4gICAgcmV0cmllcysrO1xuICAgIHBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICByZXR1cm4gbG9hZCgpO1xuICB9O1xuICBjb25zdCBsb2FkID0gKCkgPT4ge1xuICAgIGxldCB0aGlzUmVxdWVzdDtcbiAgICByZXR1cm4gcGVuZGluZ1JlcXVlc3QgfHwgKHRoaXNSZXF1ZXN0ID0gcGVuZGluZ1JlcXVlc3QgPSBsb2FkZXIoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSk7XG4gICAgICBpZiAodXNlck9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyUmV0cnkgPSAoKSA9PiByZXNvbHZlKHJldHJ5KCkpO1xuICAgICAgICAgIGNvbnN0IHVzZXJGYWlsID0gKCkgPT4gcmVqZWN0KGVycik7XG4gICAgICAgICAgdXNlck9uRXJyb3IoZXJyLCB1c2VyUmV0cnksIHVzZXJGYWlsLCByZXRyaWVzICsgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKGNvbXApID0+IHtcbiAgICAgIGlmICh0aGlzUmVxdWVzdCAhPT0gcGVuZGluZ1JlcXVlc3QgJiYgcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHBlbmRpbmdSZXF1ZXN0O1xuICAgICAgfVxuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWNvbXApIHtcbiAgICAgICAgd2FybiQxKFxuICAgICAgICAgIGBBc3luYyBjb21wb25lbnQgbG9hZGVyIHJlc29sdmVkIHRvIHVuZGVmaW5lZC4gSWYgeW91IGFyZSB1c2luZyByZXRyeSgpLCBtYWtlIHN1cmUgdG8gcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXAgJiYgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IFwiTW9kdWxlXCIpKSB7XG4gICAgICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBjb21wICYmICFpc09iamVjdChjb21wKSAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXN5bmMgY29tcG9uZW50IGxvYWQgcmVzdWx0OiAke2NvbXB9YCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlZENvbXAgPSBjb21wO1xuICAgICAgcmV0dXJuIGNvbXA7XG4gICAgfSkpO1xuICB9O1xuICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHtcbiAgICBuYW1lOiBcIkFzeW5jQ29tcG9uZW50V3JhcHBlclwiLFxuICAgIF9fYXN5bmNMb2FkZXI6IGxvYWQsXG4gICAgX19hc3luY0h5ZHJhdGUoZWwsIGluc3RhbmNlLCBoeWRyYXRlKSB7XG4gICAgICBsZXQgcGF0Y2hlZCA9IGZhbHNlO1xuICAgICAgKGluc3RhbmNlLmJ1IHx8IChpbnN0YW5jZS5idSA9IFtdKSkucHVzaCgoKSA9PiBwYXRjaGVkID0gdHJ1ZSk7XG4gICAgICBjb25zdCBwZXJmb3JtSHlkcmF0ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHBhdGNoZWQpIHtcbiAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgICBgU2tpcHBpbmcgbGF6eSBoeWRyYXRpb24gZm9yIGNvbXBvbmVudCAnJHtnZXRDb21wb25lbnROYW1lKHJlc29sdmVkQ29tcCkgfHwgcmVzb2x2ZWRDb21wLl9fZmlsZX0nOiBpdCB3YXMgdXBkYXRlZCBiZWZvcmUgbGF6eSBoeWRyYXRpb24gcGVyZm9ybWVkLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBoeWRyYXRlKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9IeWRyYXRlID0gaHlkcmF0ZVN0cmF0ZWd5ID8gKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZWFyZG93biA9IGh5ZHJhdGVTdHJhdGVneShcbiAgICAgICAgICBwZXJmb3JtSHlkcmF0ZSxcbiAgICAgICAgICAoY2IpID0+IGZvckVhY2hFbGVtZW50KGVsLCBjYilcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRlYXJkb3duKSB7XG4gICAgICAgICAgKGluc3RhbmNlLmJ1bSB8fCAoaW5zdGFuY2UuYnVtID0gW10pKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgfVxuICAgICAgfSA6IHBlcmZvcm1IeWRyYXRlO1xuICAgICAgaWYgKHJlc29sdmVkQ29tcCkge1xuICAgICAgICBkb0h5ZHJhdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvYWQoKS50aGVuKCgpID0+ICFpbnN0YW5jZS5pc1VubW91bnRlZCAmJiBkb0h5ZHJhdGUoKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXQgX19hc3luY1Jlc29sdmVkKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkQ29tcDtcbiAgICB9LFxuICAgIHNldHVwKCkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgICBtYXJrQXN5bmNCb3VuZGFyeShpbnN0YW5jZSk7XG4gICAgICBpZiAocmVzb2x2ZWRDb21wKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiBjcmVhdGVJbm5lckNvbXAocmVzb2x2ZWRDb21wLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBvbkVycm9yID0gKGVycikgPT4ge1xuICAgICAgICBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIGhhbmRsZUVycm9yKFxuICAgICAgICAgIGVycixcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAxMyxcbiAgICAgICAgICAhZXJyb3JDb21wb25lbnRcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBpZiAoc3VzcGVuc2libGUgJiYgaW5zdGFuY2Uuc3VzcGVuc2UgfHwgaXNJblNTUkNvbXBvbmVudFNldHVwKSB7XG4gICAgICAgIHJldHVybiBsb2FkKCkudGhlbigoY29tcCkgPT4ge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBjcmVhdGVJbm5lckNvbXAoY29tcCwgaW5zdGFuY2UpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgIHJldHVybiAoKSA9PiBlcnJvckNvbXBvbmVudCA/IGNyZWF0ZVZOb2RlKGVycm9yQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgICAgfSkgOiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvYWRlZCA9IHJlZihmYWxzZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHJlZigpO1xuICAgICAgY29uc3QgZGVsYXllZCA9IHJlZighIWRlbGF5KTtcbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBkZWxheWVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFsb2FkZWQudmFsdWUgJiYgIWVycm9yLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBBc3luYyBjb21wb25lbnQgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dH1tcy5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWUgPSBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIGxvYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgbG9hZGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGluc3RhbmNlLnBhcmVudCAmJiBpc0tlZXBBbGl2ZShpbnN0YW5jZS5wYXJlbnQudm5vZGUpKSB7XG4gICAgICAgICAgaW5zdGFuY2UucGFyZW50LnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgZXJyb3IudmFsdWUgPSBlcnI7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkZWQudmFsdWUgJiYgcmVzb2x2ZWRDb21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUlubmVyQ29tcChyZXNvbHZlZENvbXAsIGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci52YWx1ZSAmJiBlcnJvckNvbXBvbmVudCkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShlcnJvckNvbXBvbmVudCwge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9hZGluZ0NvbXBvbmVudCAmJiAhZGVsYXllZC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVJbm5lckNvbXAoXG4gICAgICAgICAgICBsb2FkaW5nQ29tcG9uZW50LFxuICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVJbm5lckNvbXAoY29tcCwgcGFyZW50KSB7XG4gIGNvbnN0IHsgcmVmOiByZWYyLCBwcm9wcywgY2hpbGRyZW4sIGNlIH0gPSBwYXJlbnQudm5vZGU7XG4gIGNvbnN0IHZub2RlID0gY3JlYXRlVk5vZGUoY29tcCwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgdm5vZGUucmVmID0gcmVmMjtcbiAgdm5vZGUuY2UgPSBjZTtcbiAgZGVsZXRlIHBhcmVudC52bm9kZS5jZTtcbiAgcmV0dXJuIHZub2RlO1xufVxuXG5jb25zdCBpc0tlZXBBbGl2ZSA9ICh2bm9kZSkgPT4gdm5vZGUudHlwZS5fX2lzS2VlcEFsaXZlO1xuY29uc3QgS2VlcEFsaXZlSW1wbCA9IHtcbiAgbmFtZTogYEtlZXBBbGl2ZWAsXG4gIC8vIE1hcmtlciBmb3Igc3BlY2lhbCBoYW5kbGluZyBpbnNpZGUgdGhlIHJlbmRlcmVyLiBXZSBhcmUgbm90IHVzaW5nIGEgPT09XG4gIC8vIGNoZWNrIGRpcmVjdGx5IG9uIEtlZXBBbGl2ZSBpbiB0aGUgcmVuZGVyZXIsIGJlY2F1c2UgaW1wb3J0aW5nIGl0IGRpcmVjdGx5XG4gIC8vIHdvdWxkIHByZXZlbnQgaXQgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgX19pc0tlZXBBbGl2ZTogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XSxcbiAgICBleGNsdWRlOiBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XSxcbiAgICBtYXg6IFtTdHJpbmcsIE51bWJlcl1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgY29uc3Qgc2hhcmVkQ29udGV4dCA9IGluc3RhbmNlLmN0eDtcbiAgICBpZiAoIXNoYXJlZENvbnRleHQucmVuZGVyZXIpIHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2xvdHMuZGVmYXVsdCAmJiBzbG90cy5kZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPT09IDEgPyBjaGlsZHJlblswXSA6IGNoaWxkcmVuO1xuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGtleXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIGxldCBjdXJyZW50ID0gbnVsbDtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgIGluc3RhbmNlLl9fdl9jYWNoZSA9IGNhY2hlO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnRTdXNwZW5zZSA9IGluc3RhbmNlLnN1c3BlbnNlO1xuICAgIGNvbnN0IHtcbiAgICAgIHJlbmRlcmVyOiB7XG4gICAgICAgIHA6IHBhdGNoLFxuICAgICAgICBtOiBtb3ZlLFxuICAgICAgICB1bTogX3VubW91bnQsXG4gICAgICAgIG86IHsgY3JlYXRlRWxlbWVudCB9XG4gICAgICB9XG4gICAgfSA9IHNoYXJlZENvbnRleHQ7XG4gICAgY29uc3Qgc3RvcmFnZUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgc2hhcmVkQ29udGV4dC5hY3RpdmF0ZSA9ICh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIG5hbWVzcGFjZSwgb3B0aW1pemVkKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZTIgPSB2bm9kZS5jb21wb25lbnQ7XG4gICAgICBtb3ZlKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgMCwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgcGF0Y2goXG4gICAgICAgIGluc3RhbmNlMi52bm9kZSxcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBpbnN0YW5jZTIsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHZub2RlLnNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaW5zdGFuY2UyLmlzRGVhY3RpdmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGluc3RhbmNlMi5hKSB7XG4gICAgICAgICAgaW52b2tlQXJyYXlGbnMoaW5zdGFuY2UyLmEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZub2RlSG9vayA9IHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLm9uVm5vZGVNb3VudGVkO1xuICAgICAgICBpZiAodm5vZGVIb29rKSB7XG4gICAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgaW5zdGFuY2UyLnBhcmVudCwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgICAgZGV2dG9vbHNDb21wb25lbnRBZGRlZChpbnN0YW5jZTIpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2hhcmVkQ29udGV4dC5kZWFjdGl2YXRlID0gKHZub2RlKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZTIgPSB2bm9kZS5jb21wb25lbnQ7XG4gICAgICBpbnZhbGlkYXRlTW91bnQoaW5zdGFuY2UyLm0pO1xuICAgICAgaW52YWxpZGF0ZU1vdW50KGluc3RhbmNlMi5hKTtcbiAgICAgIG1vdmUodm5vZGUsIHN0b3JhZ2VDb250YWluZXIsIG51bGwsIDEsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnN0YW5jZTIuZGEpIHtcbiAgICAgICAgICBpbnZva2VBcnJheUZucyhpbnN0YW5jZTIuZGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZub2RlSG9vayA9IHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLm9uVm5vZGVVbm1vdW50ZWQ7XG4gICAgICAgIGlmICh2bm9kZUhvb2spIHtcbiAgICAgICAgICBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBpbnN0YW5jZTIucGFyZW50LCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UyLmlzRGVhY3RpdmF0ZWQgPSB0cnVlO1xuICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICAgIGRldnRvb2xzQ29tcG9uZW50QWRkZWQoaW5zdGFuY2UyKTtcbiAgICAgIH1cbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHRydWUpIHtcbiAgICAgICAgaW5zdGFuY2UyLl9fa2VlcEFsaXZlU3RvcmFnZUNvbnRhaW5lciA9IHN0b3JhZ2VDb250YWluZXI7XG4gICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiB1bm1vdW50KHZub2RlKSB7XG4gICAgICByZXNldFNoYXBlRmxhZyh2bm9kZSk7XG4gICAgICBfdW5tb3VudCh2bm9kZSwgaW5zdGFuY2UsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJ1bmVDYWNoZShmaWx0ZXIpIHtcbiAgICAgIGNhY2hlLmZvckVhY2goKHZub2RlLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodm5vZGUudHlwZSk7XG4gICAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeShrZXkpIHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgaWYgKGNhY2hlZCAmJiAoIWN1cnJlbnQgfHwgIWlzU2FtZVZOb2RlVHlwZShjYWNoZWQsIGN1cnJlbnQpKSkge1xuICAgICAgICB1bm1vdW50KGNhY2hlZCk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgcmVzZXRTaGFwZUZsYWcoY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gW3Byb3BzLmluY2x1ZGUsIHByb3BzLmV4Y2x1ZGVdLFxuICAgICAgKFtpbmNsdWRlLCBleGNsdWRlXSkgPT4ge1xuICAgICAgICBpbmNsdWRlICYmIHBydW5lQ2FjaGUoKG5hbWUpID0+IG1hdGNoZXMoaW5jbHVkZSwgbmFtZSkpO1xuICAgICAgICBleGNsdWRlICYmIHBydW5lQ2FjaGUoKG5hbWUpID0+ICFtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKTtcbiAgICAgIH0sXG4gICAgICAvLyBwcnVuZSBwb3N0LXJlbmRlciBhZnRlciBgY3VycmVudGAgaGFzIGJlZW4gdXBkYXRlZFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIsIGRlZXA6IHRydWUgfVxuICAgICk7XG4gICAgbGV0IHBlbmRpbmdDYWNoZUtleSA9IG51bGw7XG4gICAgY29uc3QgY2FjaGVTdWJ0cmVlID0gKCkgPT4ge1xuICAgICAgaWYgKHBlbmRpbmdDYWNoZUtleSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc1N1c3BlbnNlKGluc3RhbmNlLnN1YlRyZWUudHlwZSkpIHtcbiAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY2FjaGUuc2V0KHBlbmRpbmdDYWNoZUtleSwgZ2V0SW5uZXJDaGlsZChpbnN0YW5jZS5zdWJUcmVlKSk7XG4gICAgICAgICAgfSwgaW5zdGFuY2Uuc3ViVHJlZS5zdXNwZW5zZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FjaGUuc2V0KHBlbmRpbmdDYWNoZUtleSwgZ2V0SW5uZXJDaGlsZChpbnN0YW5jZS5zdWJUcmVlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIG9uTW91bnRlZChjYWNoZVN1YnRyZWUpO1xuICAgIG9uVXBkYXRlZChjYWNoZVN1YnRyZWUpO1xuICAgIG9uQmVmb3JlVW5tb3VudCgoKSA9PiB7XG4gICAgICBjYWNoZS5mb3JFYWNoKChjYWNoZWQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdWJUcmVlLCBzdXNwZW5zZSB9ID0gaW5zdGFuY2U7XG4gICAgICAgIGNvbnN0IHZub2RlID0gZ2V0SW5uZXJDaGlsZChzdWJUcmVlKTtcbiAgICAgICAgaWYgKGNhY2hlZC50eXBlID09PSB2bm9kZS50eXBlICYmIGNhY2hlZC5rZXkgPT09IHZub2RlLmtleSkge1xuICAgICAgICAgIHJlc2V0U2hhcGVGbGFnKHZub2RlKTtcbiAgICAgICAgICBjb25zdCBkYSA9IHZub2RlLmNvbXBvbmVudC5kYTtcbiAgICAgICAgICBkYSAmJiBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoZGEsIHN1c3BlbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdW5tb3VudChjYWNoZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHBlbmRpbmdDYWNoZUtleSA9IG51bGw7XG4gICAgICBpZiAoIXNsb3RzLmRlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBzbG90cy5kZWZhdWx0KCk7XG4gICAgICBjb25zdCByYXdWTm9kZSA9IGNoaWxkcmVuWzBdO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoYEtlZXBBbGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSBjb21wb25lbnQgY2hpbGQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIH0gZWxzZSBpZiAoIWlzVk5vZGUocmF3Vk5vZGUpIHx8ICEocmF3Vk5vZGUuc2hhcGVGbGFnICYgNCkgJiYgIShyYXdWTm9kZS5zaGFwZUZsYWcgJiAxMjgpKSB7XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICByZXR1cm4gcmF3Vk5vZGU7XG4gICAgICB9XG4gICAgICBsZXQgdm5vZGUgPSBnZXRJbm5lckNoaWxkKHJhd1ZOb2RlKTtcbiAgICAgIGlmICh2bm9kZS50eXBlID09PSBDb21tZW50KSB7XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wID0gdm5vZGUudHlwZTtcbiAgICAgIGNvbnN0IG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFxuICAgICAgICBpc0FzeW5jV3JhcHBlcih2bm9kZSkgPyB2bm9kZS50eXBlLl9fYXN5bmNSZXNvbHZlZCB8fCB7fSA6IGNvbXBcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGluY2x1ZGUsIGV4Y2x1ZGUsIG1heCB9ID0gcHJvcHM7XG4gICAgICBpZiAoaW5jbHVkZSAmJiAoIW5hbWUgfHwgIW1hdGNoZXMoaW5jbHVkZSwgbmFtZSkpIHx8IGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKSB7XG4gICAgICAgIHZub2RlLnNoYXBlRmxhZyAmPSAtMjU3O1xuICAgICAgICBjdXJyZW50ID0gdm5vZGU7XG4gICAgICAgIHJldHVybiByYXdWTm9kZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IHZub2RlLmtleSA9PSBudWxsID8gY29tcCA6IHZub2RlLmtleTtcbiAgICAgIGNvbnN0IGNhY2hlZFZOb2RlID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICBpZiAodm5vZGUuZWwpIHtcbiAgICAgICAgdm5vZGUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICAgICAgaWYgKHJhd1ZOb2RlLnNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgICAgIHJhd1ZOb2RlLnNzQ29udGVudCA9IHZub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwZW5kaW5nQ2FjaGVLZXkgPSBrZXk7XG4gICAgICBpZiAoY2FjaGVkVk5vZGUpIHtcbiAgICAgICAgdm5vZGUuZWwgPSBjYWNoZWRWTm9kZS5lbDtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50ID0gY2FjaGVkVk5vZGUuY29tcG9uZW50O1xuICAgICAgICBpZiAodm5vZGUudHJhbnNpdGlvbikge1xuICAgICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyh2bm9kZSwgdm5vZGUudHJhbnNpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgdm5vZGUuc2hhcGVGbGFnIHw9IDUxMjtcbiAgICAgICAga2V5cy5kZWxldGUoa2V5KTtcbiAgICAgICAga2V5cy5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMuYWRkKGtleSk7XG4gICAgICAgIGlmIChtYXggJiYga2V5cy5zaXplID4gcGFyc2VJbnQobWF4LCAxMCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoa2V5cy52YWx1ZXMoKS5uZXh0KCkudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2bm9kZS5zaGFwZUZsYWcgfD0gMjU2O1xuICAgICAgY3VycmVudCA9IHZub2RlO1xuICAgICAgcmV0dXJuIGlzU3VzcGVuc2UocmF3Vk5vZGUudHlwZSkgPyByYXdWTm9kZSA6IHZub2RlO1xuICAgIH07XG4gIH1cbn07XG5jb25zdCBLZWVwQWxpdmUgPSBLZWVwQWxpdmVJbXBsO1xuZnVuY3Rpb24gbWF0Y2hlcyhwYXR0ZXJuLCBuYW1lKSB7XG4gIGlmIChpc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc29tZSgocCkgPT4gbWF0Y2hlcyhwLCBuYW1lKSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi5zcGxpdChcIixcIikuaW5jbHVkZXMobmFtZSk7XG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICBwYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChuYW1lKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBvbkFjdGl2YXRlZChob29rLCB0YXJnZXQpIHtcbiAgcmVnaXN0ZXJLZWVwQWxpdmVIb29rKGhvb2ssIFwiYVwiLCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gb25EZWFjdGl2YXRlZChob29rLCB0YXJnZXQpIHtcbiAgcmVnaXN0ZXJLZWVwQWxpdmVIb29rKGhvb2ssIFwiZGFcIiwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyS2VlcEFsaXZlSG9vayhob29rLCB0eXBlLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UpIHtcbiAgY29uc3Qgd3JhcHBlZEhvb2sgPSBob29rLl9fd2RjIHx8IChob29rLl9fd2RjID0gKCkgPT4ge1xuICAgIGxldCBjdXJyZW50ID0gdGFyZ2V0O1xuICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICBpZiAoY3VycmVudC5pc0RlYWN0aXZhdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGhvb2soKTtcbiAgfSk7XG4gIGluamVjdEhvb2sodHlwZSwgd3JhcHBlZEhvb2ssIHRhcmdldCk7XG4gIGlmICh0YXJnZXQpIHtcbiAgICBsZXQgY3VycmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudC5wYXJlbnQpIHtcbiAgICAgIGlmIChpc0tlZXBBbGl2ZShjdXJyZW50LnBhcmVudC52bm9kZSkpIHtcbiAgICAgICAgaW5qZWN0VG9LZWVwQWxpdmVSb290KHdyYXBwZWRIb29rLCB0eXBlLCB0YXJnZXQsIGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0VG9LZWVwQWxpdmVSb290KGhvb2ssIHR5cGUsIHRhcmdldCwga2VlcEFsaXZlUm9vdCkge1xuICBjb25zdCBpbmplY3RlZCA9IGluamVjdEhvb2soXG4gICAgdHlwZSxcbiAgICBob29rLFxuICAgIGtlZXBBbGl2ZVJvb3QsXG4gICAgdHJ1ZVxuICAgIC8qIHByZXBlbmQgKi9cbiAgKTtcbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHJlbW92ZShrZWVwQWxpdmVSb290W3R5cGVdLCBpbmplY3RlZCk7XG4gIH0sIHRhcmdldCk7XG59XG5mdW5jdGlvbiByZXNldFNoYXBlRmxhZyh2bm9kZSkge1xuICB2bm9kZS5zaGFwZUZsYWcgJj0gLTI1NztcbiAgdm5vZGUuc2hhcGVGbGFnICY9IC01MTM7XG59XG5mdW5jdGlvbiBnZXRJbm5lckNoaWxkKHZub2RlKSB7XG4gIHJldHVybiB2bm9kZS5zaGFwZUZsYWcgJiAxMjggPyB2bm9kZS5zc0NvbnRlbnQgOiB2bm9kZTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0SG9vayh0eXBlLCBob29rLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UsIHByZXBlbmQgPSBmYWxzZSkge1xuICBpZiAodGFyZ2V0KSB7XG4gICAgY29uc3QgaG9va3MgPSB0YXJnZXRbdHlwZV0gfHwgKHRhcmdldFt0eXBlXSA9IFtdKTtcbiAgICBjb25zdCB3cmFwcGVkSG9vayA9IGhvb2suX193ZWggfHwgKGhvb2suX193ZWggPSAoLi4uYXJncykgPT4ge1xuICAgICAgcGF1c2VUcmFja2luZygpO1xuICAgICAgY29uc3QgcmVzZXQgPSBzZXRDdXJyZW50SW5zdGFuY2UodGFyZ2V0KTtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGhvb2ssIHRhcmdldCwgdHlwZSwgYXJncyk7XG4gICAgICByZXNldCgpO1xuICAgICAgcmVzZXRUcmFja2luZygpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgICBpZiAocHJlcGVuZCkge1xuICAgICAgaG9va3MudW5zaGlmdCh3cmFwcGVkSG9vayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2tzLnB1c2god3JhcHBlZEhvb2spO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEhvb2s7XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGNvbnN0IGFwaU5hbWUgPSB0b0hhbmRsZXJLZXkoRXJyb3JUeXBlU3RyaW5ncyQxW3R5cGVdLnJlcGxhY2UoLyBob29rJC8sIFwiXCIpKTtcbiAgICB3YXJuJDEoXG4gICAgICBgJHthcGlOYW1lfSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC4gTGlmZWN5Y2xlIGluamVjdGlvbiBBUElzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBzZXR1cCgpLmAgKyAoYCBJZiB5b3UgYXJlIHVzaW5nIGFzeW5jIHNldHVwKCksIG1ha2Ugc3VyZSB0byByZWdpc3RlciBsaWZlY3ljbGUgaG9va3MgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdCBzdGF0ZW1lbnQuYCApXG4gICAgKTtcbiAgfVxufVxuY29uc3QgY3JlYXRlSG9vayA9IChsaWZlY3ljbGUpID0+IChob29rLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UpID0+IHtcbiAgaWYgKCFpc0luU1NSQ29tcG9uZW50U2V0dXAgfHwgbGlmZWN5Y2xlID09PSBcInNwXCIpIHtcbiAgICBpbmplY3RIb29rKGxpZmVjeWNsZSwgKC4uLmFyZ3MpID0+IGhvb2soLi4uYXJncyksIHRhcmdldCk7XG4gIH1cbn07XG5jb25zdCBvbkJlZm9yZU1vdW50ID0gY3JlYXRlSG9vayhcImJtXCIpO1xuY29uc3Qgb25Nb3VudGVkID0gY3JlYXRlSG9vayhcIm1cIik7XG5jb25zdCBvbkJlZm9yZVVwZGF0ZSA9IGNyZWF0ZUhvb2soXG4gIFwiYnVcIlxuKTtcbmNvbnN0IG9uVXBkYXRlZCA9IGNyZWF0ZUhvb2soXCJ1XCIpO1xuY29uc3Qgb25CZWZvcmVVbm1vdW50ID0gY3JlYXRlSG9vayhcbiAgXCJidW1cIlxuKTtcbmNvbnN0IG9uVW5tb3VudGVkID0gY3JlYXRlSG9vayhcInVtXCIpO1xuY29uc3Qgb25TZXJ2ZXJQcmVmZXRjaCA9IGNyZWF0ZUhvb2soXG4gIFwic3BcIlxuKTtcbmNvbnN0IG9uUmVuZGVyVHJpZ2dlcmVkID0gY3JlYXRlSG9vayhcInJ0Z1wiKTtcbmNvbnN0IG9uUmVuZGVyVHJhY2tlZCA9IGNyZWF0ZUhvb2soXCJydGNcIik7XG5mdW5jdGlvbiBvbkVycm9yQ2FwdHVyZWQoaG9vaywgdGFyZ2V0ID0gY3VycmVudEluc3RhbmNlKSB7XG4gIGluamVjdEhvb2soXCJlY1wiLCBob29rLCB0YXJnZXQpO1xufVxuXG5jb25zdCBDT01QT05FTlRTID0gXCJjb21wb25lbnRzXCI7XG5jb25zdCBESVJFQ1RJVkVTID0gXCJkaXJlY3RpdmVzXCI7XG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50KG5hbWUsIG1heWJlU2VsZlJlZmVyZW5jZSkge1xuICByZXR1cm4gcmVzb2x2ZUFzc2V0KENPTVBPTkVOVFMsIG5hbWUsIHRydWUsIG1heWJlU2VsZlJlZmVyZW5jZSkgfHwgbmFtZTtcbn1cbmNvbnN0IE5VTExfRFlOQU1JQ19DT01QT05FTlQgPSBTeW1ib2wuZm9yKFwidi1uZGNcIik7XG5mdW5jdGlvbiByZXNvbHZlRHluYW1pY0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgaWYgKGlzU3RyaW5nKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gcmVzb2x2ZUFzc2V0KENPTVBPTkVOVFMsIGNvbXBvbmVudCwgZmFsc2UpIHx8IGNvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50IHx8IE5VTExfRFlOQU1JQ19DT01QT05FTlQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVEaXJlY3RpdmUobmFtZSkge1xuICByZXR1cm4gcmVzb2x2ZUFzc2V0KERJUkVDVElWRVMsIG5hbWUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0KHR5cGUsIG5hbWUsIHdhcm5NaXNzaW5nID0gdHJ1ZSwgbWF5YmVTZWxmUmVmZXJlbmNlID0gZmFsc2UpIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgfHwgY3VycmVudEluc3RhbmNlO1xuICBpZiAoaW5zdGFuY2UpIHtcbiAgICBjb25zdCBDb21wb25lbnQgPSBpbnN0YW5jZS50eXBlO1xuICAgIGlmICh0eXBlID09PSBDT01QT05FTlRTKSB7XG4gICAgICBjb25zdCBzZWxmTmFtZSA9IGdldENvbXBvbmVudE5hbWUoXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZk5hbWUgJiYgKHNlbGZOYW1lID09PSBuYW1lIHx8IHNlbGZOYW1lID09PSBjYW1lbGl6ZShuYW1lKSB8fCBzZWxmTmFtZSA9PT0gY2FwaXRhbGl6ZShjYW1lbGl6ZShuYW1lKSkpKSB7XG4gICAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IChcbiAgICAgIC8vIGxvY2FsIHJlZ2lzdHJhdGlvblxuICAgICAgLy8gY2hlY2sgaW5zdGFuY2VbdHlwZV0gZmlyc3Qgd2hpY2ggaXMgcmVzb2x2ZWQgZm9yIG9wdGlvbnMgQVBJXG4gICAgICByZXNvbHZlKGluc3RhbmNlW3R5cGVdIHx8IENvbXBvbmVudFt0eXBlXSwgbmFtZSkgfHwgLy8gZ2xvYmFsIHJlZ2lzdHJhdGlvblxuICAgICAgcmVzb2x2ZShpbnN0YW5jZS5hcHBDb250ZXh0W3R5cGVdLCBuYW1lKVxuICAgICk7XG4gICAgaWYgKCFyZXMgJiYgbWF5YmVTZWxmUmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm4gQ29tcG9uZW50O1xuICAgIH1cbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgICBjb25zdCBleHRyYSA9IHR5cGUgPT09IENPTVBPTkVOVFMgPyBgXG5JZiB0aGlzIGlzIGEgbmF0aXZlIGN1c3RvbSBlbGVtZW50LCBtYWtlIHN1cmUgdG8gZXhjbHVkZSBpdCBmcm9tIGNvbXBvbmVudCByZXNvbHV0aW9uIHZpYSBjb21waWxlck9wdGlvbnMuaXNDdXN0b21FbGVtZW50LmAgOiBgYDtcbiAgICAgIHdhcm4kMShgRmFpbGVkIHRvIHJlc29sdmUgJHt0eXBlLnNsaWNlKDAsIC0xKX06ICR7bmFtZX0ke2V4dHJhfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuJDEoXG4gICAgICBgcmVzb2x2ZSR7Y2FwaXRhbGl6ZSh0eXBlLnNsaWNlKDAsIC0xKSl9IGNhbiBvbmx5IGJlIHVzZWQgaW4gcmVuZGVyKCkgb3Igc2V0dXAoKS5gXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZShyZWdpc3RyeSwgbmFtZSkge1xuICByZXR1cm4gcmVnaXN0cnkgJiYgKHJlZ2lzdHJ5W25hbWVdIHx8IHJlZ2lzdHJ5W2NhbWVsaXplKG5hbWUpXSB8fCByZWdpc3RyeVtjYXBpdGFsaXplKGNhbWVsaXplKG5hbWUpKV0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJMaXN0KHNvdXJjZSwgcmVuZGVySXRlbSwgY2FjaGUsIGluZGV4KSB7XG4gIGxldCByZXQ7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlICYmIGNhY2hlW2luZGV4XTtcbiAgY29uc3Qgc291cmNlSXNBcnJheSA9IGlzQXJyYXkoc291cmNlKTtcbiAgaWYgKHNvdXJjZUlzQXJyYXkgfHwgaXNTdHJpbmcoc291cmNlKSkge1xuICAgIGNvbnN0IHNvdXJjZUlzUmVhY3RpdmVBcnJheSA9IHNvdXJjZUlzQXJyYXkgJiYgaXNSZWFjdGl2ZShzb3VyY2UpO1xuICAgIGxldCBuZWVkc1dyYXAgPSBmYWxzZTtcbiAgICBsZXQgaXNSZWFkb25seVNvdXJjZSA9IGZhbHNlO1xuICAgIGlmIChzb3VyY2VJc1JlYWN0aXZlQXJyYXkpIHtcbiAgICAgIG5lZWRzV3JhcCA9ICFpc1NoYWxsb3coc291cmNlKTtcbiAgICAgIGlzUmVhZG9ubHlTb3VyY2UgPSBpc1JlYWRvbmx5KHNvdXJjZSk7XG4gICAgICBzb3VyY2UgPSBzaGFsbG93UmVhZEFycmF5KHNvdXJjZSk7XG4gICAgfVxuICAgIHJldCA9IG5ldyBBcnJheShzb3VyY2UubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHNvdXJjZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlckl0ZW0oXG4gICAgICAgIG5lZWRzV3JhcCA/IGlzUmVhZG9ubHlTb3VyY2UgPyB0b1JlYWRvbmx5KHRvUmVhY3RpdmUoc291cmNlW2ldKSkgOiB0b1JlYWN0aXZlKHNvdXJjZVtpXSkgOiBzb3VyY2VbaV0sXG4gICAgICAgIGksXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgY2FjaGVkICYmIGNhY2hlZFtpXVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFOdW1iZXIuaXNJbnRlZ2VyKHNvdXJjZSkpIHtcbiAgICAgIHdhcm4kMShgVGhlIHYtZm9yIHJhbmdlIGV4cGVjdCBhbiBpbnRlZ2VyIHZhbHVlIGJ1dCBnb3QgJHtzb3VyY2V9LmApO1xuICAgIH1cbiAgICByZXQgPSBuZXcgQXJyYXkoc291cmNlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZTsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXJJdGVtKGkgKyAxLCBpLCB2b2lkIDAsIGNhY2hlZCAmJiBjYWNoZWRbaV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgaWYgKHNvdXJjZVtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXQgPSBBcnJheS5mcm9tKFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIChpdGVtLCBpKSA9PiByZW5kZXJJdGVtKGl0ZW0sIGksIHZvaWQgMCwgY2FjaGVkICYmIGNhY2hlZFtpXSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgcmV0W2ldID0gcmVuZGVySXRlbShzb3VyY2Vba2V5XSwga2V5LCBpLCBjYWNoZWQgJiYgY2FjaGVkW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gW107XG4gIH1cbiAgaWYgKGNhY2hlKSB7XG4gICAgY2FjaGVbaW5kZXhdID0gcmV0O1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNsb3RzKHNsb3RzLCBkeW5hbWljU2xvdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkeW5hbWljU2xvdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzbG90ID0gZHluYW1pY1Nsb3RzW2ldO1xuICAgIGlmIChpc0FycmF5KHNsb3QpKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNsb3QubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc2xvdHNbc2xvdFtqXS5uYW1lXSA9IHNsb3Rbal0uZm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzbG90KSB7XG4gICAgICBzbG90c1tzbG90Lm5hbWVdID0gc2xvdC5rZXkgPyAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBzbG90LmZuKC4uLmFyZ3MpO1xuICAgICAgICBpZiAocmVzKSByZXMua2V5ID0gc2xvdC5rZXk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9IDogc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNsb3RzO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTbG90KHNsb3RzLCBuYW1lLCBwcm9wcyA9IHt9LCBmYWxsYmFjaywgbm9TbG90dGVkKSB7XG4gIGlmIChjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UuY2UgfHwgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLnBhcmVudCAmJiBpc0FzeW5jV3JhcHBlcihjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UucGFyZW50KSAmJiBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UucGFyZW50LmNlKSB7XG4gICAgY29uc3QgaGFzUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID4gMDtcbiAgICBpZiAobmFtZSAhPT0gXCJkZWZhdWx0XCIpIHByb3BzLm5hbWUgPSBuYW1lO1xuICAgIHJldHVybiBvcGVuQmxvY2soKSwgY3JlYXRlQmxvY2soXG4gICAgICBGcmFnbWVudCxcbiAgICAgIG51bGwsXG4gICAgICBbY3JlYXRlVk5vZGUoXCJzbG90XCIsIHByb3BzLCBmYWxsYmFjayAmJiBmYWxsYmFjaygpKV0sXG4gICAgICBoYXNQcm9wcyA/IC0yIDogNjRcbiAgICApO1xuICB9XG4gIGxldCBzbG90ID0gc2xvdHNbbmFtZV07XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHNsb3QgJiYgc2xvdC5sZW5ndGggPiAxKSB7XG4gICAgd2FybiQxKFxuICAgICAgYFNTUi1vcHRpbWl6ZWQgc2xvdCBmdW5jdGlvbiBkZXRlY3RlZCBpbiBhIG5vbi1TU1Itb3B0aW1pemVkIHJlbmRlciBmdW5jdGlvbi4gWW91IG5lZWQgdG8gbWFyayB0aGlzIGNvbXBvbmVudCB3aXRoICRkeW5hbWljLXNsb3RzIGluIHRoZSBwYXJlbnQgdGVtcGxhdGUuYFxuICAgICk7XG4gICAgc2xvdCA9ICgpID0+IFtdO1xuICB9XG4gIGlmIChzbG90ICYmIHNsb3QuX2MpIHtcbiAgICBzbG90Ll9kID0gZmFsc2U7XG4gIH1cbiAgb3BlbkJsb2NrKCk7XG4gIGNvbnN0IHZhbGlkU2xvdENvbnRlbnQgPSBzbG90ICYmIGVuc3VyZVZhbGlkVk5vZGUoc2xvdChwcm9wcykpO1xuICBjb25zdCBzbG90S2V5ID0gcHJvcHMua2V5IHx8IC8vIHNsb3QgY29udGVudCBhcnJheSBvZiBhIGR5bmFtaWMgY29uZGl0aW9uYWwgc2xvdCBtYXkgaGF2ZSBhIGJyYW5jaFxuICAvLyBrZXkgYXR0YWNoZWQgaW4gdGhlIGBjcmVhdGVTbG90c2AgaGVscGVyLCByZXNwZWN0IHRoYXRcbiAgdmFsaWRTbG90Q29udGVudCAmJiB2YWxpZFNsb3RDb250ZW50LmtleTtcbiAgY29uc3QgcmVuZGVyZWQgPSBjcmVhdGVCbG9jayhcbiAgICBGcmFnbWVudCxcbiAgICB7XG4gICAgICBrZXk6IChzbG90S2V5ICYmICFpc1N5bWJvbChzbG90S2V5KSA/IHNsb3RLZXkgOiBgXyR7bmFtZX1gKSArIC8vICM3MjU2IGZvcmNlIGRpZmZlcmVudGlhdGUgZmFsbGJhY2sgY29udGVudCBmcm9tIGFjdHVhbCBjb250ZW50XG4gICAgICAoIXZhbGlkU2xvdENvbnRlbnQgJiYgZmFsbGJhY2sgPyBcIl9mYlwiIDogXCJcIilcbiAgICB9LFxuICAgIHZhbGlkU2xvdENvbnRlbnQgfHwgKGZhbGxiYWNrID8gZmFsbGJhY2soKSA6IFtdKSxcbiAgICB2YWxpZFNsb3RDb250ZW50ICYmIHNsb3RzLl8gPT09IDEgPyA2NCA6IC0yXG4gICk7XG4gIGlmICghbm9TbG90dGVkICYmIHJlbmRlcmVkLnNjb3BlSWQpIHtcbiAgICByZW5kZXJlZC5zbG90U2NvcGVJZHMgPSBbcmVuZGVyZWQuc2NvcGVJZCArIFwiLXNcIl07XG4gIH1cbiAgaWYgKHNsb3QgJiYgc2xvdC5fYykge1xuICAgIHNsb3QuX2QgPSB0cnVlO1xuICB9XG4gIHJldHVybiByZW5kZXJlZDtcbn1cbmZ1bmN0aW9uIGVuc3VyZVZhbGlkVk5vZGUodm5vZGVzKSB7XG4gIHJldHVybiB2bm9kZXMuc29tZSgoY2hpbGQpID0+IHtcbiAgICBpZiAoIWlzVk5vZGUoY2hpbGQpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gQ29tbWVudCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjaGlsZC50eXBlID09PSBGcmFnbWVudCAmJiAhZW5zdXJlVmFsaWRWTm9kZShjaGlsZC5jaGlsZHJlbikpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pID8gdm5vZGVzIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9IYW5kbGVycyhvYmosIHByZXNlcnZlQ2FzZUlmTmVjZXNzYXJ5KSB7XG4gIGNvbnN0IHJldCA9IHt9O1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaXNPYmplY3Qob2JqKSkge1xuICAgIHdhcm4kMShgdi1vbiB3aXRoIG5vIGFyZ3VtZW50IGV4cGVjdHMgYW4gb2JqZWN0IHZhbHVlLmApO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgcmV0W3ByZXNlcnZlQ2FzZUlmTmVjZXNzYXJ5ICYmIC9bQS1aXS8udGVzdChrZXkpID8gYG9uOiR7a2V5fWAgOiB0b0hhbmRsZXJLZXkoa2V5KV0gPSBvYmpba2V5XTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5jb25zdCBnZXRQdWJsaWNJbnN0YW5jZSA9IChpKSA9PiB7XG4gIGlmICghaSkgcmV0dXJuIG51bGw7XG4gIGlmIChpc1N0YXRlZnVsQ29tcG9uZW50KGkpKSByZXR1cm4gZ2V0Q29tcG9uZW50UHVibGljSW5zdGFuY2UoaSk7XG4gIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShpLnBhcmVudCk7XG59O1xuY29uc3QgcHVibGljUHJvcGVydGllc01hcCA9IChcbiAgLy8gTW92ZSBQVVJFIG1hcmtlciB0byBuZXcgbGluZSB0byB3b3JrYXJvdW5kIGNvbXBpbGVyIGRpc2NhcmRpbmcgaXRcbiAgLy8gZHVlIHRvIHR5cGUgYW5ub3RhdGlvblxuICAvKiBAX19QVVJFX18gKi8gZXh0ZW5kKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCB7XG4gICAgJDogKGkpID0+IGksXG4gICAgJGVsOiAoaSkgPT4gaS52bm9kZS5lbCxcbiAgICAkZGF0YTogKGkpID0+IGkuZGF0YSxcbiAgICAkcHJvcHM6IChpKSA9PiAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gc2hhbGxvd1JlYWRvbmx5KGkucHJvcHMpIDogaS5wcm9wcyxcbiAgICAkYXR0cnM6IChpKSA9PiAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gc2hhbGxvd1JlYWRvbmx5KGkuYXR0cnMpIDogaS5hdHRycyxcbiAgICAkc2xvdHM6IChpKSA9PiAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gc2hhbGxvd1JlYWRvbmx5KGkuc2xvdHMpIDogaS5zbG90cyxcbiAgICAkcmVmczogKGkpID0+ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBzaGFsbG93UmVhZG9ubHkoaS5yZWZzKSA6IGkucmVmcyxcbiAgICAkcGFyZW50OiAoaSkgPT4gZ2V0UHVibGljSW5zdGFuY2UoaS5wYXJlbnQpLFxuICAgICRyb290OiAoaSkgPT4gZ2V0UHVibGljSW5zdGFuY2UoaS5yb290KSxcbiAgICAkaG9zdDogKGkpID0+IGkuY2UsXG4gICAgJGVtaXQ6IChpKSA9PiBpLmVtaXQsXG4gICAgJG9wdGlvbnM6IChpKSA9PiBfX1ZVRV9PUFRJT05TX0FQSV9fID8gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoaSkgOiBpLnR5cGUsXG4gICAgJGZvcmNlVXBkYXRlOiAoaSkgPT4gaS5mIHx8IChpLmYgPSAoKSA9PiB7XG4gICAgICBxdWV1ZUpvYihpLnVwZGF0ZSk7XG4gICAgfSksXG4gICAgJG5leHRUaWNrOiAoaSkgPT4gaS5uIHx8IChpLm4gPSBuZXh0VGljay5iaW5kKGkucHJveHkpKSxcbiAgICAkd2F0Y2g6IChpKSA9PiBfX1ZVRV9PUFRJT05TX0FQSV9fID8gaW5zdGFuY2VXYXRjaC5iaW5kKGkpIDogTk9PUFxuICB9KVxuKTtcbmNvbnN0IGlzUmVzZXJ2ZWRQcmVmaXggPSAoa2V5KSA9PiBrZXkgPT09IFwiX1wiIHx8IGtleSA9PT0gXCIkXCI7XG5jb25zdCBoYXNTZXR1cEJpbmRpbmcgPSAoc3RhdGUsIGtleSkgPT4gc3RhdGUgIT09IEVNUFRZX09CSiAmJiAhc3RhdGUuX19pc1NjcmlwdFNldHVwICYmIGhhc093bihzdGF0ZSwga2V5KTtcbmNvbnN0IFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycyA9IHtcbiAgZ2V0KHsgXzogaW5zdGFuY2UgfSwga2V5KSB7XG4gICAgaWYgKGtleSA9PT0gXCJfX3Zfc2tpcFwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgeyBjdHgsIHNldHVwU3RhdGUsIGRhdGEsIHByb3BzLCBhY2Nlc3NDYWNoZSwgdHlwZSwgYXBwQ29udGV4dCB9ID0gaW5zdGFuY2U7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYga2V5ID09PSBcIl9faXNWdWVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGxldCBub3JtYWxpemVkUHJvcHM7XG4gICAgaWYgKGtleVswXSAhPT0gXCIkXCIpIHtcbiAgICAgIGNvbnN0IG4gPSBhY2Nlc3NDYWNoZVtrZXldO1xuICAgICAgaWYgKG4gIT09IHZvaWQgMCkge1xuICAgICAgICBzd2l0Y2ggKG4pIHtcbiAgICAgICAgICBjYXNlIDEgLyogU0VUVVAgKi86XG4gICAgICAgICAgICByZXR1cm4gc2V0dXBTdGF0ZVtrZXldO1xuICAgICAgICAgIGNhc2UgMiAvKiBEQVRBICovOlxuICAgICAgICAgICAgcmV0dXJuIGRhdGFba2V5XTtcbiAgICAgICAgICBjYXNlIDQgLyogQ09OVEVYVCAqLzpcbiAgICAgICAgICAgIHJldHVybiBjdHhba2V5XTtcbiAgICAgICAgICBjYXNlIDMgLyogUFJPUFMgKi86XG4gICAgICAgICAgICByZXR1cm4gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoYXNTZXR1cEJpbmRpbmcoc2V0dXBTdGF0ZSwga2V5KSkge1xuICAgICAgICBhY2Nlc3NDYWNoZVtrZXldID0gMSAvKiBTRVRVUCAqLztcbiAgICAgICAgcmV0dXJuIHNldHVwU3RhdGVba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoX19WVUVfT1BUSU9OU19BUElfXyAmJiBkYXRhICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKGRhdGEsIGtleSkpIHtcbiAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDIgLyogREFUQSAqLztcbiAgICAgICAgcmV0dXJuIGRhdGFba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIC8vIG9ubHkgY2FjaGUgb3RoZXIgcHJvcGVydGllcyB3aGVuIGluc3RhbmNlIGhhcyBkZWNsYXJlZCAodGh1cyBzdGFibGUpXG4gICAgICAgIC8vIHByb3BzXG4gICAgICAgIChub3JtYWxpemVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wc09wdGlvbnNbMF0pICYmIGhhc093bihub3JtYWxpemVkUHJvcHMsIGtleSlcbiAgICAgICkge1xuICAgICAgICBhY2Nlc3NDYWNoZVtrZXldID0gMyAvKiBQUk9QUyAqLztcbiAgICAgICAgcmV0dXJuIHByb3BzW2tleV07XG4gICAgICB9IGVsc2UgaWYgKGN0eCAhPT0gRU1QVFlfT0JKICYmIGhhc093bihjdHgsIGtleSkpIHtcbiAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDQgLyogQ09OVEVYVCAqLztcbiAgICAgICAgcmV0dXJuIGN0eFtrZXldO1xuICAgICAgfSBlbHNlIGlmICghX19WVUVfT1BUSU9OU19BUElfXyB8fCBzaG91bGRDYWNoZUFjY2Vzcykge1xuICAgICAgICBhY2Nlc3NDYWNoZVtrZXldID0gMCAvKiBPVEhFUiAqLztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcHVibGljR2V0dGVyID0gcHVibGljUHJvcGVydGllc01hcFtrZXldO1xuICAgIGxldCBjc3NNb2R1bGUsIGdsb2JhbFByb3BlcnRpZXM7XG4gICAgaWYgKHB1YmxpY0dldHRlcikge1xuICAgICAgaWYgKGtleSA9PT0gXCIkYXR0cnNcIikge1xuICAgICAgICB0cmFjayhpbnN0YW5jZS5hdHRycywgXCJnZXRcIiwgXCJcIik7XG4gICAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgbWFya0F0dHJzQWNjZXNzZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBrZXkgPT09IFwiJHNsb3RzXCIpIHtcbiAgICAgICAgdHJhY2soaW5zdGFuY2UsIFwiZ2V0XCIsIGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHVibGljR2V0dGVyKGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gY3NzIG1vZHVsZSAoaW5qZWN0ZWQgYnkgdnVlLWxvYWRlcilcbiAgICAgIChjc3NNb2R1bGUgPSB0eXBlLl9fY3NzTW9kdWxlcykgJiYgKGNzc01vZHVsZSA9IGNzc01vZHVsZVtrZXldKVxuICAgICkge1xuICAgICAgcmV0dXJuIGNzc01vZHVsZTtcbiAgICB9IGVsc2UgaWYgKGN0eCAhPT0gRU1QVFlfT0JKICYmIGhhc093bihjdHgsIGtleSkpIHtcbiAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSA0IC8qIENPTlRFWFQgKi87XG4gICAgICByZXR1cm4gY3R4W2tleV07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIGdsb2JhbCBwcm9wZXJ0aWVzXG4gICAgICBnbG9iYWxQcm9wZXJ0aWVzID0gYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcywgaGFzT3duKGdsb2JhbFByb3BlcnRpZXMsIGtleSlcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFByb3BlcnRpZXNba2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlICYmICghaXNTdHJpbmcoa2V5KSB8fCAvLyAjMTA5MSBhdm9pZCBpbnRlcm5hbCBpc1JlZi9pc1ZOb2RlIGNoZWNrcyBvbiBjb21wb25lbnQgaW5zdGFuY2UgbGVhZGluZ1xuICAgIC8vIHRvIGluZmluaXRlIHdhcm5pbmcgbG9vcFxuICAgIGtleS5pbmRleE9mKFwiX192XCIpICE9PSAwKSkge1xuICAgICAgaWYgKGRhdGEgIT09IEVNUFRZX09CSiAmJiBpc1Jlc2VydmVkUHJlZml4KGtleVswXSkgJiYgaGFzT3duKGRhdGEsIGtleSkpIHtcbiAgICAgICAgd2FybiQxKFxuICAgICAgICAgIGBQcm9wZXJ0eSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAga2V5XG4gICAgICAgICAgKX0gbXVzdCBiZSBhY2Nlc3NlZCB2aWEgJGRhdGEgYmVjYXVzZSBpdCBzdGFydHMgd2l0aCBhIHJlc2VydmVkIGNoYXJhY3RlciAoXCIkXCIgb3IgXCJfXCIpIGFuZCBpcyBub3QgcHJveGllZCBvbiB0aGUgcmVuZGVyIGNvbnRleHQuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZSA9PT0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlKSB7XG4gICAgICAgIHdhcm4kMShcbiAgICAgICAgICBgUHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeShrZXkpfSB3YXMgYWNjZXNzZWQgZHVyaW5nIHJlbmRlciBidXQgaXMgbm90IGRlZmluZWQgb24gaW5zdGFuY2UuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2V0KHsgXzogaW5zdGFuY2UgfSwga2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IHsgZGF0YSwgc2V0dXBTdGF0ZSwgY3R4IH0gPSBpbnN0YW5jZTtcbiAgICBpZiAoaGFzU2V0dXBCaW5kaW5nKHNldHVwU3RhdGUsIGtleSkpIHtcbiAgICAgIHNldHVwU3RhdGVba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHNldHVwU3RhdGUuX19pc1NjcmlwdFNldHVwICYmIGhhc093bihzZXR1cFN0YXRlLCBrZXkpKSB7XG4gICAgICB3YXJuJDEoYENhbm5vdCBtdXRhdGUgPHNjcmlwdCBzZXR1cD4gYmluZGluZyBcIiR7a2V5fVwiIGZyb20gT3B0aW9ucyBBUEkuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChfX1ZVRV9PUFRJT05TX0FQSV9fICYmIGRhdGEgIT09IEVNUFRZX09CSiAmJiBoYXNPd24oZGF0YSwga2V5KSkge1xuICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhc093bihpbnN0YW5jZS5wcm9wcywga2V5KSkge1xuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuJDEoYEF0dGVtcHRpbmcgdG8gbXV0YXRlIHByb3AgXCIke2tleX1cIi4gUHJvcHMgYXJlIHJlYWRvbmx5LmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoa2V5WzBdID09PSBcIiRcIiAmJiBrZXkuc2xpY2UoMSkgaW4gaW5zdGFuY2UpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKFxuICAgICAgICBgQXR0ZW1wdGluZyB0byBtdXRhdGUgcHVibGljIHByb3BlcnR5IFwiJHtrZXl9XCIuIFByb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCAkIGFyZSByZXNlcnZlZCBhbmQgcmVhZG9ubHkuYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYga2V5IGluIGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHhba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgaGFzKHtcbiAgICBfOiB7IGRhdGEsIHNldHVwU3RhdGUsIGFjY2Vzc0NhY2hlLCBjdHgsIGFwcENvbnRleHQsIHByb3BzT3B0aW9ucywgdHlwZSB9XG4gIH0sIGtleSkge1xuICAgIGxldCBub3JtYWxpemVkUHJvcHMsIGNzc01vZHVsZXM7XG4gICAgcmV0dXJuICEhKGFjY2Vzc0NhY2hlW2tleV0gfHwgX19WVUVfT1BUSU9OU19BUElfXyAmJiBkYXRhICE9PSBFTVBUWV9PQkogJiYga2V5WzBdICE9PSBcIiRcIiAmJiBoYXNPd24oZGF0YSwga2V5KSB8fCBoYXNTZXR1cEJpbmRpbmcoc2V0dXBTdGF0ZSwga2V5KSB8fCAobm9ybWFsaXplZFByb3BzID0gcHJvcHNPcHRpb25zWzBdKSAmJiBoYXNPd24obm9ybWFsaXplZFByb3BzLCBrZXkpIHx8IGhhc093bihjdHgsIGtleSkgfHwgaGFzT3duKHB1YmxpY1Byb3BlcnRpZXNNYXAsIGtleSkgfHwgaGFzT3duKGFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsIGtleSkgfHwgKGNzc01vZHVsZXMgPSB0eXBlLl9fY3NzTW9kdWxlcykgJiYgY3NzTW9kdWxlc1trZXldKTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgICBpZiAoZGVzY3JpcHRvci5nZXQgIT0gbnVsbCkge1xuICAgICAgdGFyZ2V0Ll8uYWNjZXNzQ2FjaGVba2V5XSA9IDA7XG4gICAgfSBlbHNlIGlmIChoYXNPd24oZGVzY3JpcHRvciwgXCJ2YWx1ZVwiKSkge1xuICAgICAgdGhpcy5zZXQodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IudmFsdWUsIG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn07XG5pZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB0cnVlKSB7XG4gIFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycy5vd25LZXlzID0gKHRhcmdldCkgPT4ge1xuICAgIHdhcm4kMShcbiAgICAgIGBBdm9pZCBhcHAgbG9naWMgdGhhdCByZWxpZXMgb24gZW51bWVyYXRpbmcga2V5cyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhlIGtleXMgd2lsbCBiZSBlbXB0eSBpbiBwcm9kdWN0aW9uIG1vZGUgdG8gYXZvaWQgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuYFxuICAgICk7XG4gICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpO1xuICB9O1xufVxuY29uc3QgUnVudGltZUNvbXBpbGVkUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIGV4dGVuZCh7fSwgUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzLCB7XG4gIGdldCh0YXJnZXQsIGtleSkge1xuICAgIGlmIChrZXkgPT09IFN5bWJvbC51bnNjb3BhYmxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzLmdldCh0YXJnZXQsIGtleSwgdGFyZ2V0KTtcbiAgfSxcbiAgaGFzKF8sIGtleSkge1xuICAgIGNvbnN0IGhhcyA9IGtleVswXSAhPT0gXCJfXCIgJiYgIWlzR2xvYmFsbHlBbGxvd2VkKGtleSk7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWhhcyAmJiBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMuaGFzKF8sIGtleSkpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYFByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAga2V5XG4gICAgICAgICl9IHNob3VsZCBub3Qgc3RhcnQgd2l0aCBfIHdoaWNoIGlzIGEgcmVzZXJ2ZWQgcHJlZml4IGZvciBWdWUgaW50ZXJuYWxzLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBoYXM7XG4gIH1cbn0pO1xuZnVuY3Rpb24gY3JlYXRlRGV2UmVuZGVyQ29udGV4dChpbnN0YW5jZSkge1xuICBjb25zdCB0YXJnZXQgPSB7fTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9gLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogKCkgPT4gaW5zdGFuY2VcbiAgfSk7XG4gIE9iamVjdC5rZXlzKHB1YmxpY1Byb3BlcnRpZXNNYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6ICgpID0+IHB1YmxpY1Byb3BlcnRpZXNNYXBba2V5XShpbnN0YW5jZSksXG4gICAgICAvLyBpbnRlcmNlcHRlZCBieSB0aGUgcHJveHkgc28gbm8gbmVlZCBmb3IgaW1wbGVtZW50YXRpb24sXG4gICAgICAvLyBidXQgbmVlZGVkIHRvIHByZXZlbnQgc2V0IGVycm9yc1xuICAgICAgc2V0OiBOT09QXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gZXhwb3NlUHJvcHNPblJlbmRlckNvbnRleHQoaW5zdGFuY2UpIHtcbiAgY29uc3Qge1xuICAgIGN0eCxcbiAgICBwcm9wc09wdGlvbnM6IFtwcm9wc09wdGlvbnNdXG4gIH0gPSBpbnN0YW5jZTtcbiAgaWYgKHByb3BzT3B0aW9ucykge1xuICAgIE9iamVjdC5rZXlzKHByb3BzT3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IGluc3RhbmNlLnByb3BzW2tleV0sXG4gICAgICAgIHNldDogTk9PUFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGV4cG9zZVNldHVwU3RhdGVPblJlbmRlckNvbnRleHQoaW5zdGFuY2UpIHtcbiAgY29uc3QgeyBjdHgsIHNldHVwU3RhdGUgfSA9IGluc3RhbmNlO1xuICBPYmplY3Qua2V5cyh0b1JhdyhzZXR1cFN0YXRlKSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKCFzZXR1cFN0YXRlLl9faXNTY3JpcHRTZXR1cCkge1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRQcmVmaXgoa2V5WzBdKSkge1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYHNldHVwKCkgcmV0dXJuIHByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICApfSBzaG91bGQgbm90IHN0YXJ0IHdpdGggXCIkXCIgb3IgXCJfXCIgd2hpY2ggYXJlIHJlc2VydmVkIHByZWZpeGVzIGZvciBWdWUgaW50ZXJuYWxzLmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBzZXR1cFN0YXRlW2tleV0sXG4gICAgICAgIHNldDogTk9PUFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3Qgd2FyblJ1bnRpbWVVc2FnZSA9IChtZXRob2QpID0+IHdhcm4kMShcbiAgYCR7bWV0aG9kfSgpIGlzIGEgY29tcGlsZXItaGludCBoZWxwZXIgdGhhdCBpcyBvbmx5IHVzYWJsZSBpbnNpZGUgPHNjcmlwdCBzZXR1cD4gb2YgYSBzaW5nbGUgZmlsZSBjb21wb25lbnQuIEl0cyBhcmd1bWVudHMgc2hvdWxkIGJlIGNvbXBpbGVkIGF3YXkgYW5kIHBhc3NpbmcgaXQgYXQgcnVudGltZSBoYXMgbm8gZWZmZWN0LmBcbik7XG5mdW5jdGlvbiBkZWZpbmVQcm9wcygpIHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuUnVudGltZVVzYWdlKGBkZWZpbmVQcm9wc2ApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZGVmaW5lRW1pdHMoKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lRW1pdHNgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRlZmluZUV4cG9zZShleHBvc2VkKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lRXhwb3NlYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlZmluZU9wdGlvbnMob3B0aW9ucykge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm5SdW50aW1lVXNhZ2UoYGRlZmluZU9wdGlvbnNgKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVmaW5lU2xvdHMoKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lU2xvdHNgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRlZmluZU1vZGVsKCkge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm5SdW50aW1lVXNhZ2UoXCJkZWZpbmVNb2RlbFwiKTtcbiAgfVxufVxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHByb3BzLCBkZWZhdWx0cykge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm5SdW50aW1lVXNhZ2UoYHdpdGhEZWZhdWx0c2ApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gdXNlU2xvdHMoKSB7XG4gIHJldHVybiBnZXRDb250ZXh0KFwidXNlU2xvdHNcIikuc2xvdHM7XG59XG5mdW5jdGlvbiB1c2VBdHRycygpIHtcbiAgcmV0dXJuIGdldENvbnRleHQoXCJ1c2VBdHRyc1wiKS5hdHRycztcbn1cbmZ1bmN0aW9uIGdldENvbnRleHQoY2FsbGVkRnVuY3Rpb25OYW1lKSB7XG4gIGNvbnN0IGkgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWkpIHtcbiAgICB3YXJuJDEoYCR7Y2FsbGVkRnVuY3Rpb25OYW1lfSgpIGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBpbnN0YW5jZS5gKTtcbiAgfVxuICByZXR1cm4gaS5zZXR1cENvbnRleHQgfHwgKGkuc2V0dXBDb250ZXh0ID0gY3JlYXRlU2V0dXBDb250ZXh0KGkpKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzT3JFbWl0cyhwcm9wcykge1xuICByZXR1cm4gaXNBcnJheShwcm9wcykgPyBwcm9wcy5yZWR1Y2UoXG4gICAgKG5vcm1hbGl6ZWQsIHApID0+IChub3JtYWxpemVkW3BdID0gbnVsbCwgbm9ybWFsaXplZCksXG4gICAge31cbiAgKSA6IHByb3BzO1xufVxuZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhyYXcsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHByb3BzID0gbm9ybWFsaXplUHJvcHNPckVtaXRzKHJhdyk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKFwiX19za2lwXCIpKSBjb250aW51ZTtcbiAgICBsZXQgb3B0ID0gcHJvcHNba2V5XTtcbiAgICBpZiAob3B0KSB7XG4gICAgICBpZiAoaXNBcnJheShvcHQpIHx8IGlzRnVuY3Rpb24ob3B0KSkge1xuICAgICAgICBvcHQgPSBwcm9wc1trZXldID0geyB0eXBlOiBvcHQsIGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdC5kZWZhdWx0ID0gZGVmYXVsdHNba2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdCA9PT0gbnVsbCkge1xuICAgICAgb3B0ID0gcHJvcHNba2V5XSA9IHsgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xuICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgd2FybiQxKGBwcm9wcyBkZWZhdWx0IGtleSBcIiR7a2V5fVwiIGhhcyBubyBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9uLmApO1xuICAgIH1cbiAgICBpZiAob3B0ICYmIGRlZmF1bHRzW2BfX3NraXBfJHtrZXl9YF0pIHtcbiAgICAgIG9wdC5za2lwRmFjdG9yeSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wcztcbn1cbmZ1bmN0aW9uIG1lcmdlTW9kZWxzKGEsIGIpIHtcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gYSB8fCBiO1xuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpKSByZXR1cm4gYS5jb25jYXQoYik7XG4gIHJldHVybiBleHRlbmQoe30sIG5vcm1hbGl6ZVByb3BzT3JFbWl0cyhhKSwgbm9ybWFsaXplUHJvcHNPckVtaXRzKGIpKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVByb3BzUmVzdFByb3h5KHByb3BzLCBleGNsdWRlZEtleXMpIHtcbiAgY29uc3QgcmV0ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKCFleGNsdWRlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogKCkgPT4gcHJvcHNba2V5XVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiB3aXRoQXN5bmNDb250ZXh0KGdldEF3YWl0YWJsZSkge1xuICBjb25zdCBjdHggPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWN0eCkge1xuICAgIHdhcm4kMShcbiAgICAgIGB3aXRoQXN5bmNDb250ZXh0IGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBjdXJyZW50IGluc3RhbmNlLiBUaGlzIGlzIGxpa2VseSBhIGJ1Zy5gXG4gICAgKTtcbiAgfVxuICBsZXQgYXdhaXRhYmxlID0gZ2V0QXdhaXRhYmxlKCk7XG4gIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XG4gIGlmIChpc1Byb21pc2UoYXdhaXRhYmxlKSkge1xuICAgIGF3YWl0YWJsZSA9IGF3YWl0YWJsZS5jYXRjaCgoZSkgPT4ge1xuICAgICAgc2V0Q3VycmVudEluc3RhbmNlKGN0eCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBbYXdhaXRhYmxlLCAoKSA9PiBzZXRDdXJyZW50SW5zdGFuY2UoY3R4KV07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUR1cGxpY2F0ZUNoZWNrZXIoKSB7XG4gIGNvbnN0IGNhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAodHlwZSwga2V5KSA9PiB7XG4gICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgIHdhcm4kMShgJHt0eXBlfSBwcm9wZXJ0eSBcIiR7a2V5fVwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAke2NhY2hlW2tleV19LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZVtrZXldID0gdHlwZTtcbiAgICB9XG4gIH07XG59XG5sZXQgc2hvdWxkQ2FjaGVBY2Nlc3MgPSB0cnVlO1xuZnVuY3Rpb24gYXBwbHlPcHRpb25zKGluc3RhbmNlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpbnN0YW5jZSk7XG4gIGNvbnN0IHB1YmxpY1RoaXMgPSBpbnN0YW5jZS5wcm94eTtcbiAgY29uc3QgY3R4ID0gaW5zdGFuY2UuY3R4O1xuICBzaG91bGRDYWNoZUFjY2VzcyA9IGZhbHNlO1xuICBpZiAob3B0aW9ucy5iZWZvcmVDcmVhdGUpIHtcbiAgICBjYWxsSG9vayhvcHRpb25zLmJlZm9yZUNyZWF0ZSwgaW5zdGFuY2UsIFwiYmNcIik7XG4gIH1cbiAgY29uc3Qge1xuICAgIC8vIHN0YXRlXG4gICAgZGF0YTogZGF0YU9wdGlvbnMsXG4gICAgY29tcHV0ZWQ6IGNvbXB1dGVkT3B0aW9ucyxcbiAgICBtZXRob2RzLFxuICAgIHdhdGNoOiB3YXRjaE9wdGlvbnMsXG4gICAgcHJvdmlkZTogcHJvdmlkZU9wdGlvbnMsXG4gICAgaW5qZWN0OiBpbmplY3RPcHRpb25zLFxuICAgIC8vIGxpZmVjeWNsZVxuICAgIGNyZWF0ZWQsXG4gICAgYmVmb3JlTW91bnQsXG4gICAgbW91bnRlZCxcbiAgICBiZWZvcmVVcGRhdGUsXG4gICAgdXBkYXRlZCxcbiAgICBhY3RpdmF0ZWQsXG4gICAgZGVhY3RpdmF0ZWQsXG4gICAgYmVmb3JlRGVzdHJveSxcbiAgICBiZWZvcmVVbm1vdW50LFxuICAgIGRlc3Ryb3llZCxcbiAgICB1bm1vdW50ZWQsXG4gICAgcmVuZGVyLFxuICAgIHJlbmRlclRyYWNrZWQsXG4gICAgcmVuZGVyVHJpZ2dlcmVkLFxuICAgIGVycm9yQ2FwdHVyZWQsXG4gICAgc2VydmVyUHJlZmV0Y2gsXG4gICAgLy8gcHVibGljIEFQSVxuICAgIGV4cG9zZSxcbiAgICBpbmhlcml0QXR0cnMsXG4gICAgLy8gYXNzZXRzXG4gICAgY29tcG9uZW50cyxcbiAgICBkaXJlY3RpdmVzLFxuICAgIGZpbHRlcnNcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBjcmVhdGVEdXBsaWNhdGVDaGVja2VyKCkgOiBudWxsO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGNvbnN0IFtwcm9wc09wdGlvbnNdID0gaW5zdGFuY2UucHJvcHNPcHRpb25zO1xuICAgIGlmIChwcm9wc09wdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzT3B0aW9ucykge1xuICAgICAgICBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMoXCJQcm9wc1wiIC8qIFBST1BTICovLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoaW5qZWN0T3B0aW9ucykge1xuICAgIHJlc29sdmVJbmplY3Rpb25zKGluamVjdE9wdGlvbnMsIGN0eCwgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzKTtcbiAgfVxuICBpZiAobWV0aG9kcykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IG1ldGhvZEhhbmRsZXIgPSBtZXRob2RzW2tleV07XG4gICAgICBpZiAoaXNGdW5jdGlvbihtZXRob2RIYW5kbGVyKSkge1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IG1ldGhvZEhhbmRsZXIuYmluZChwdWJsaWNUaGlzKSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eFtrZXldID0gbWV0aG9kSGFuZGxlci5iaW5kKHB1YmxpY1RoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzKFwiTWV0aG9kc1wiIC8qIE1FVEhPRFMgKi8sIGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYE1ldGhvZCBcIiR7a2V5fVwiIGhhcyB0eXBlIFwiJHt0eXBlb2YgbWV0aG9kSGFuZGxlcn1cIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIERpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZGF0YU9wdGlvbnMpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaXNGdW5jdGlvbihkYXRhT3B0aW9ucykpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYFRoZSBkYXRhIG9wdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24uIFBsYWluIG9iamVjdCB1c2FnZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBkYXRhT3B0aW9ucy5jYWxsKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgZGF0YSgpIHJldHVybmVkIGEgUHJvbWlzZSAtIG5vdGUgZGF0YSgpIGNhbm5vdCBiZSBhc3luYzsgSWYgeW91IGludGVuZCB0byBwZXJmb3JtIGRhdGEgZmV0Y2hpbmcgYmVmb3JlIGNvbXBvbmVudCByZW5kZXJzLCB1c2UgYXN5bmMgc2V0dXAoKSArIDxTdXNwZW5zZT4uYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuJDEoYGRhdGEoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UuZGF0YSA9IHJlYWN0aXZlKGRhdGEpO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIkRhdGFcIiAvKiBEQVRBICovLCBrZXkpO1xuICAgICAgICAgIGlmICghaXNSZXNlcnZlZFByZWZpeChrZXlbMF0pKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBnZXQ6ICgpID0+IGRhdGFba2V5XSxcbiAgICAgICAgICAgICAgc2V0OiBOT09QXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2hvdWxkQ2FjaGVBY2Nlc3MgPSB0cnVlO1xuICBpZiAoY29tcHV0ZWRPcHRpb25zKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29tcHV0ZWRPcHRpb25zKSB7XG4gICAgICBjb25zdCBvcHQgPSBjb21wdXRlZE9wdGlvbnNba2V5XTtcbiAgICAgIGNvbnN0IGdldCA9IGlzRnVuY3Rpb24ob3B0KSA/IG9wdC5iaW5kKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpIDogaXNGdW5jdGlvbihvcHQuZ2V0KSA/IG9wdC5nZXQuYmluZChwdWJsaWNUaGlzLCBwdWJsaWNUaGlzKSA6IE5PT1A7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBnZXQgPT09IE5PT1ApIHtcbiAgICAgICAgd2FybiQxKGBDb21wdXRlZCBwcm9wZXJ0eSBcIiR7a2V5fVwiIGhhcyBubyBnZXR0ZXIuYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZXQgPSAhaXNGdW5jdGlvbihvcHQpICYmIGlzRnVuY3Rpb24ob3B0LnNldCkgPyBvcHQuc2V0LmJpbmQocHVibGljVGhpcykgOiAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gKCkgPT4ge1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYFdyaXRlIG9wZXJhdGlvbiBmYWlsZWQ6IGNvbXB1dGVkIHByb3BlcnR5IFwiJHtrZXl9XCIgaXMgcmVhZG9ubHkuYFxuICAgICAgICApO1xuICAgICAgfSA6IE5PT1A7XG4gICAgICBjb25zdCBjID0gY29tcHV0ZWQoe1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IGMudmFsdWUsXG4gICAgICAgIHNldDogKHYpID0+IGMudmFsdWUgPSB2XG4gICAgICB9KTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIkNvbXB1dGVkXCIgLyogQ09NUFVURUQgKi8sIGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh3YXRjaE9wdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB3YXRjaE9wdGlvbnMpIHtcbiAgICAgIGNyZWF0ZVdhdGNoZXIod2F0Y2hPcHRpb25zW2tleV0sIGN0eCwgcHVibGljVGhpcywga2V5KTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb3ZpZGVPcHRpb25zKSB7XG4gICAgY29uc3QgcHJvdmlkZXMgPSBpc0Z1bmN0aW9uKHByb3ZpZGVPcHRpb25zKSA/IHByb3ZpZGVPcHRpb25zLmNhbGwocHVibGljVGhpcykgOiBwcm92aWRlT3B0aW9ucztcbiAgICBSZWZsZWN0Lm93bktleXMocHJvdmlkZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgcHJvdmlkZShrZXksIHByb3ZpZGVzW2tleV0pO1xuICAgIH0pO1xuICB9XG4gIGlmIChjcmVhdGVkKSB7XG4gICAgY2FsbEhvb2soY3JlYXRlZCwgaW5zdGFuY2UsIFwiY1wiKTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3RlckxpZmVjeWNsZUhvb2socmVnaXN0ZXIsIGhvb2spIHtcbiAgICBpZiAoaXNBcnJheShob29rKSkge1xuICAgICAgaG9vay5mb3JFYWNoKChfaG9vaykgPT4gcmVnaXN0ZXIoX2hvb2suYmluZChwdWJsaWNUaGlzKSkpO1xuICAgIH0gZWxzZSBpZiAoaG9vaykge1xuICAgICAgcmVnaXN0ZXIoaG9vay5iaW5kKHB1YmxpY1RoaXMpKTtcbiAgICB9XG4gIH1cbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uQmVmb3JlTW91bnQsIGJlZm9yZU1vdW50KTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uTW91bnRlZCwgbW91bnRlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkJlZm9yZVVwZGF0ZSwgYmVmb3JlVXBkYXRlKTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uVXBkYXRlZCwgdXBkYXRlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkFjdGl2YXRlZCwgYWN0aXZhdGVkKTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uRGVhY3RpdmF0ZWQsIGRlYWN0aXZhdGVkKTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uRXJyb3JDYXB0dXJlZCwgZXJyb3JDYXB0dXJlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvblJlbmRlclRyYWNrZWQsIHJlbmRlclRyYWNrZWQpO1xuICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25SZW5kZXJUcmlnZ2VyZWQsIHJlbmRlclRyaWdnZXJlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkJlZm9yZVVubW91bnQsIGJlZm9yZVVubW91bnQpO1xuICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25Vbm1vdW50ZWQsIHVubW91bnRlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvblNlcnZlclByZWZldGNoLCBzZXJ2ZXJQcmVmZXRjaCk7XG4gIGlmIChpc0FycmF5KGV4cG9zZSkpIHtcbiAgICBpZiAoZXhwb3NlLmxlbmd0aCkge1xuICAgICAgY29uc3QgZXhwb3NlZCA9IGluc3RhbmNlLmV4cG9zZWQgfHwgKGluc3RhbmNlLmV4cG9zZWQgPSB7fSk7XG4gICAgICBleHBvc2UuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvc2VkLCBrZXksIHtcbiAgICAgICAgICBnZXQ6ICgpID0+IHB1YmxpY1RoaXNba2V5XSxcbiAgICAgICAgICBzZXQ6ICh2YWwpID0+IHB1YmxpY1RoaXNba2V5XSA9IHZhbCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaW5zdGFuY2UuZXhwb3NlZCkge1xuICAgICAgaW5zdGFuY2UuZXhwb3NlZCA9IHt9O1xuICAgIH1cbiAgfVxuICBpZiAocmVuZGVyICYmIGluc3RhbmNlLnJlbmRlciA9PT0gTk9PUCkge1xuICAgIGluc3RhbmNlLnJlbmRlciA9IHJlbmRlcjtcbiAgfVxuICBpZiAoaW5oZXJpdEF0dHJzICE9IG51bGwpIHtcbiAgICBpbnN0YW5jZS5pbmhlcml0QXR0cnMgPSBpbmhlcml0QXR0cnM7XG4gIH1cbiAgaWYgKGNvbXBvbmVudHMpIGluc3RhbmNlLmNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICBpZiAoZGlyZWN0aXZlcykgaW5zdGFuY2UuZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXM7XG4gIGlmIChzZXJ2ZXJQcmVmZXRjaCkge1xuICAgIG1hcmtBc3luY0JvdW5kYXJ5KGluc3RhbmNlKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdGlvbnMoaW5qZWN0T3B0aW9ucywgY3R4LCBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMgPSBOT09QKSB7XG4gIGlmIChpc0FycmF5KGluamVjdE9wdGlvbnMpKSB7XG4gICAgaW5qZWN0T3B0aW9ucyA9IG5vcm1hbGl6ZUluamVjdChpbmplY3RPcHRpb25zKTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiBpbmplY3RPcHRpb25zKSB7XG4gICAgY29uc3Qgb3B0ID0gaW5qZWN0T3B0aW9uc1trZXldO1xuICAgIGxldCBpbmplY3RlZDtcbiAgICBpZiAoaXNPYmplY3Qob3B0KSkge1xuICAgICAgaWYgKFwiZGVmYXVsdFwiIGluIG9wdCkge1xuICAgICAgICBpbmplY3RlZCA9IGluamVjdChcbiAgICAgICAgICBvcHQuZnJvbSB8fCBrZXksXG4gICAgICAgICAgb3B0LmRlZmF1bHQsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5qZWN0ZWQgPSBpbmplY3Qob3B0LmZyb20gfHwga2V5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5qZWN0ZWQgPSBpbmplY3Qob3B0KTtcbiAgICB9XG4gICAgaWYgKGlzUmVmKGluamVjdGVkKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBpbmplY3RlZC52YWx1ZSxcbiAgICAgICAgc2V0OiAodikgPT4gaW5qZWN0ZWQudmFsdWUgPSB2XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4W2tleV0gPSBpbmplY3RlZDtcbiAgICB9XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIkluamVjdFwiIC8qIElOSkVDVCAqLywga2V5KTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGxIb29rKGhvb2ssIGluc3RhbmNlLCB0eXBlKSB7XG4gIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKFxuICAgIGlzQXJyYXkoaG9vaykgPyBob29rLm1hcCgoaCkgPT4gaC5iaW5kKGluc3RhbmNlLnByb3h5KSkgOiBob29rLmJpbmQoaW5zdGFuY2UucHJveHkpLFxuICAgIGluc3RhbmNlLFxuICAgIHR5cGVcbiAgKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIocmF3LCBjdHgsIHB1YmxpY1RoaXMsIGtleSkge1xuICBsZXQgZ2V0dGVyID0ga2V5LmluY2x1ZGVzKFwiLlwiKSA/IGNyZWF0ZVBhdGhHZXR0ZXIocHVibGljVGhpcywga2V5KSA6ICgpID0+IHB1YmxpY1RoaXNba2V5XTtcbiAgaWYgKGlzU3RyaW5nKHJhdykpIHtcbiAgICBjb25zdCBoYW5kbGVyID0gY3R4W3Jhd107XG4gICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIHtcbiAgICAgICAgd2F0Y2goZ2V0dGVyLCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHdhcm4kMShgSW52YWxpZCB3YXRjaCBoYW5kbGVyIHNwZWNpZmllZCBieSBrZXkgXCIke3Jhd31cImAsIGhhbmRsZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHJhdykpIHtcbiAgICB7XG4gICAgICB3YXRjaChnZXR0ZXIsIHJhdy5iaW5kKHB1YmxpY1RoaXMpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QocmF3KSkge1xuICAgIGlmIChpc0FycmF5KHJhdykpIHtcbiAgICAgIHJhdy5mb3JFYWNoKChyKSA9PiBjcmVhdGVXYXRjaGVyKHIsIGN0eCwgcHVibGljVGhpcywga2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBpc0Z1bmN0aW9uKHJhdy5oYW5kbGVyKSA/IHJhdy5oYW5kbGVyLmJpbmQocHVibGljVGhpcykgOiBjdHhbcmF3LmhhbmRsZXJdO1xuICAgICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgICAgd2F0Y2goZ2V0dGVyLCBoYW5kbGVyLCByYXcpO1xuICAgICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIHdhcm4kMShgSW52YWxpZCB3YXRjaCBoYW5kbGVyIHNwZWNpZmllZCBieSBrZXkgXCIke3Jhdy5oYW5kbGVyfVwiYCwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuJDEoYEludmFsaWQgd2F0Y2ggb3B0aW9uOiBcIiR7a2V5fVwiYCwgcmF3KTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoaW5zdGFuY2UpIHtcbiAgY29uc3QgYmFzZSA9IGluc3RhbmNlLnR5cGU7XG4gIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gYmFzZTtcbiAgY29uc3Qge1xuICAgIG1peGluczogZ2xvYmFsTWl4aW5zLFxuICAgIG9wdGlvbnNDYWNoZTogY2FjaGUsXG4gICAgY29uZmlnOiB7IG9wdGlvbk1lcmdlU3RyYXRlZ2llcyB9XG4gIH0gPSBpbnN0YW5jZS5hcHBDb250ZXh0O1xuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQoYmFzZSk7XG4gIGxldCByZXNvbHZlZDtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJlc29sdmVkID0gY2FjaGVkO1xuICB9IGVsc2UgaWYgKCFnbG9iYWxNaXhpbnMubGVuZ3RoICYmICFtaXhpbnMgJiYgIWV4dGVuZHNPcHRpb25zKSB7XG4gICAge1xuICAgICAgcmVzb2x2ZWQgPSBiYXNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXNvbHZlZCA9IHt9O1xuICAgIGlmIChnbG9iYWxNaXhpbnMubGVuZ3RoKSB7XG4gICAgICBnbG9iYWxNaXhpbnMuZm9yRWFjaChcbiAgICAgICAgKG0pID0+IG1lcmdlT3B0aW9ucyhyZXNvbHZlZCwgbSwgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzLCB0cnVlKVxuICAgICAgKTtcbiAgICB9XG4gICAgbWVyZ2VPcHRpb25zKHJlc29sdmVkLCBiYXNlLCBvcHRpb25NZXJnZVN0cmF0ZWdpZXMpO1xuICB9XG4gIGlmIChpc09iamVjdChiYXNlKSkge1xuICAgIGNhY2hlLnNldChiYXNlLCByZXNvbHZlZCk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRvLCBmcm9tLCBzdHJhdHMsIGFzTWl4aW4gPSBmYWxzZSkge1xuICBjb25zdCB7IG1peGlucywgZXh0ZW5kczogZXh0ZW5kc09wdGlvbnMgfSA9IGZyb207XG4gIGlmIChleHRlbmRzT3B0aW9ucykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZXh0ZW5kc09wdGlvbnMsIHN0cmF0cywgdHJ1ZSk7XG4gIH1cbiAgaWYgKG1peGlucykge1xuICAgIG1peGlucy5mb3JFYWNoKFxuICAgICAgKG0pID0+IG1lcmdlT3B0aW9ucyh0bywgbSwgc3RyYXRzLCB0cnVlKVxuICAgICk7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gZnJvbSkge1xuICAgIGlmIChhc01peGluICYmIGtleSA9PT0gXCJleHBvc2VcIikge1xuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuJDEoXG4gICAgICAgIGBcImV4cG9zZVwiIG9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gZGVjbGFyZWQgaW4gbWl4aW5zIG9yIGV4dGVuZHMuIEl0IHNob3VsZCBvbmx5IGJlIGRlY2xhcmVkIGluIHRoZSBiYXNlIGNvbXBvbmVudCBpdHNlbGYuYFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyYXQgPSBpbnRlcm5hbE9wdGlvbk1lcmdlU3RyYXRzW2tleV0gfHwgc3RyYXRzICYmIHN0cmF0c1trZXldO1xuICAgICAgdG9ba2V5XSA9IHN0cmF0ID8gc3RyYXQodG9ba2V5XSwgZnJvbVtrZXldKSA6IGZyb21ba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvO1xufVxuY29uc3QgaW50ZXJuYWxPcHRpb25NZXJnZVN0cmF0cyA9IHtcbiAgZGF0YTogbWVyZ2VEYXRhRm4sXG4gIHByb3BzOiBtZXJnZUVtaXRzT3JQcm9wc09wdGlvbnMsXG4gIGVtaXRzOiBtZXJnZUVtaXRzT3JQcm9wc09wdGlvbnMsXG4gIC8vIG9iamVjdHNcbiAgbWV0aG9kczogbWVyZ2VPYmplY3RPcHRpb25zLFxuICBjb21wdXRlZDogbWVyZ2VPYmplY3RPcHRpb25zLFxuICAvLyBsaWZlY3ljbGVcbiAgYmVmb3JlQ3JlYXRlOiBtZXJnZUFzQXJyYXksXG4gIGNyZWF0ZWQ6IG1lcmdlQXNBcnJheSxcbiAgYmVmb3JlTW91bnQ6IG1lcmdlQXNBcnJheSxcbiAgbW91bnRlZDogbWVyZ2VBc0FycmF5LFxuICBiZWZvcmVVcGRhdGU6IG1lcmdlQXNBcnJheSxcbiAgdXBkYXRlZDogbWVyZ2VBc0FycmF5LFxuICBiZWZvcmVEZXN0cm95OiBtZXJnZUFzQXJyYXksXG4gIGJlZm9yZVVubW91bnQ6IG1lcmdlQXNBcnJheSxcbiAgZGVzdHJveWVkOiBtZXJnZUFzQXJyYXksXG4gIHVubW91bnRlZDogbWVyZ2VBc0FycmF5LFxuICBhY3RpdmF0ZWQ6IG1lcmdlQXNBcnJheSxcbiAgZGVhY3RpdmF0ZWQ6IG1lcmdlQXNBcnJheSxcbiAgZXJyb3JDYXB0dXJlZDogbWVyZ2VBc0FycmF5LFxuICBzZXJ2ZXJQcmVmZXRjaDogbWVyZ2VBc0FycmF5LFxuICAvLyBhc3NldHNcbiAgY29tcG9uZW50czogbWVyZ2VPYmplY3RPcHRpb25zLFxuICBkaXJlY3RpdmVzOiBtZXJnZU9iamVjdE9wdGlvbnMsXG4gIC8vIHdhdGNoXG4gIHdhdGNoOiBtZXJnZVdhdGNoT3B0aW9ucyxcbiAgLy8gcHJvdmlkZSAvIGluamVjdFxuICBwcm92aWRlOiBtZXJnZURhdGFGbixcbiAgaW5qZWN0OiBtZXJnZUluamVjdFxufTtcbmZ1bmN0aW9uIG1lcmdlRGF0YUZuKHRvLCBmcm9tKSB7XG4gIGlmICghZnJvbSkge1xuICAgIHJldHVybiB0bztcbiAgfVxuICBpZiAoIXRvKSB7XG4gICAgcmV0dXJuIGZyb207XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbigpIHtcbiAgICByZXR1cm4gKGV4dGVuZCkoXG4gICAgICBpc0Z1bmN0aW9uKHRvKSA/IHRvLmNhbGwodGhpcywgdGhpcykgOiB0byxcbiAgICAgIGlzRnVuY3Rpb24oZnJvbSkgPyBmcm9tLmNhbGwodGhpcywgdGhpcykgOiBmcm9tXG4gICAgKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG1lcmdlSW5qZWN0KHRvLCBmcm9tKSB7XG4gIHJldHVybiBtZXJnZU9iamVjdE9wdGlvbnMobm9ybWFsaXplSW5qZWN0KHRvKSwgbm9ybWFsaXplSW5qZWN0KGZyb20pKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUluamVjdChyYXcpIHtcbiAgaWYgKGlzQXJyYXkocmF3KSkge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbcmF3W2ldXSA9IHJhd1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuZnVuY3Rpb24gbWVyZ2VBc0FycmF5KHRvLCBmcm9tKSB7XG4gIHJldHVybiB0byA/IFsuLi5uZXcgU2V0KFtdLmNvbmNhdCh0bywgZnJvbSkpXSA6IGZyb207XG59XG5mdW5jdGlvbiBtZXJnZU9iamVjdE9wdGlvbnModG8sIGZyb20pIHtcbiAgcmV0dXJuIHRvID8gZXh0ZW5kKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCB0bywgZnJvbSkgOiBmcm9tO1xufVxuZnVuY3Rpb24gbWVyZ2VFbWl0c09yUHJvcHNPcHRpb25zKHRvLCBmcm9tKSB7XG4gIGlmICh0bykge1xuICAgIGlmIChpc0FycmF5KHRvKSAmJiBpc0FycmF5KGZyb20pKSB7XG4gICAgICByZXR1cm4gWy4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi50bywgLi4uZnJvbV0pXTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuZChcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgbm9ybWFsaXplUHJvcHNPckVtaXRzKHRvKSxcbiAgICAgIG5vcm1hbGl6ZVByb3BzT3JFbWl0cyhmcm9tICE9IG51bGwgPyBmcm9tIDoge30pXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnJvbTtcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2VXYXRjaE9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKCF0bykgcmV0dXJuIGZyb207XG4gIGlmICghZnJvbSkgcmV0dXJuIHRvO1xuICBjb25zdCBtZXJnZWQgPSBleHRlbmQoLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIHRvKTtcbiAgZm9yIChjb25zdCBrZXkgaW4gZnJvbSkge1xuICAgIG1lcmdlZFtrZXldID0gbWVyZ2VBc0FycmF5KHRvW2tleV0sIGZyb21ba2V5XSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXBwQ29udGV4dCgpIHtcbiAgcmV0dXJuIHtcbiAgICBhcHA6IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBpc05hdGl2ZVRhZzogTk8sXG4gICAgICBwZXJmb3JtYW5jZTogZmFsc2UsXG4gICAgICBnbG9iYWxQcm9wZXJ0aWVzOiB7fSxcbiAgICAgIG9wdGlvbk1lcmdlU3RyYXRlZ2llczoge30sXG4gICAgICBlcnJvckhhbmRsZXI6IHZvaWQgMCxcbiAgICAgIHdhcm5IYW5kbGVyOiB2b2lkIDAsXG4gICAgICBjb21waWxlck9wdGlvbnM6IHt9XG4gICAgfSxcbiAgICBtaXhpbnM6IFtdLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIGRpcmVjdGl2ZXM6IHt9LFxuICAgIHByb3ZpZGVzOiAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBvcHRpb25zQ2FjaGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpLFxuICAgIHByb3BzQ2FjaGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpLFxuICAgIGVtaXRzQ2FjaGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpXG4gIH07XG59XG5sZXQgdWlkJDEgPSAwO1xuZnVuY3Rpb24gY3JlYXRlQXBwQVBJKHJlbmRlciwgaHlkcmF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlQXBwKHJvb3RDb21wb25lbnQsIHJvb3RQcm9wcyA9IG51bGwpIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24ocm9vdENvbXBvbmVudCkpIHtcbiAgICAgIHJvb3RDb21wb25lbnQgPSBleHRlbmQoe30sIHJvb3RDb21wb25lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdFByb3BzICE9IG51bGwgJiYgIWlzT2JqZWN0KHJvb3RQcm9wcykpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKGByb290IHByb3BzIHBhc3NlZCB0byBhcHAubW91bnQoKSBtdXN0IGJlIGFuIG9iamVjdC5gKTtcbiAgICAgIHJvb3RQcm9wcyA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVBcHBDb250ZXh0KCk7XG4gICAgY29uc3QgaW5zdGFsbGVkUGx1Z2lucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpO1xuICAgIGNvbnN0IHBsdWdpbkNsZWFudXBGbnMgPSBbXTtcbiAgICBsZXQgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgY29uc3QgYXBwID0gY29udGV4dC5hcHAgPSB7XG4gICAgICBfdWlkOiB1aWQkMSsrLFxuICAgICAgX2NvbXBvbmVudDogcm9vdENvbXBvbmVudCxcbiAgICAgIF9wcm9wczogcm9vdFByb3BzLFxuICAgICAgX2NvbnRhaW5lcjogbnVsbCxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2luc3RhbmNlOiBudWxsLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbmZpZztcbiAgICAgIH0sXG4gICAgICBzZXQgY29uZmlnKHYpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgYXBwLmNvbmZpZyBjYW5ub3QgYmUgcmVwbGFjZWQuIE1vZGlmeSBpbmRpdmlkdWFsIG9wdGlvbnMgaW5zdGVhZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZShwbHVnaW4sIC4uLm9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaGFzKHBsdWdpbikpIHtcbiAgICAgICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4kMShgUGx1Z2luIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0byB0YXJnZXQgYXBwLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbiAmJiBpc0Z1bmN0aW9uKHBsdWdpbi5pbnN0YWxsKSkge1xuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMuYWRkKHBsdWdpbik7XG4gICAgICAgICAgcGx1Z2luLmluc3RhbGwoYXBwLCAuLi5vcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHBsdWdpbikpIHtcbiAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLmFkZChwbHVnaW4pO1xuICAgICAgICAgIHBsdWdpbihhcHAsIC4uLm9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgQSBwbHVnaW4gbXVzdCBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgd2l0aCBhbiBcImluc3RhbGxcIiBmdW5jdGlvbi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgfSxcbiAgICAgIG1peGluKG1peGluKSB7XG4gICAgICAgIGlmIChfX1ZVRV9PUFRJT05TX0FQSV9fKSB7XG4gICAgICAgICAgaWYgKCFjb250ZXh0Lm1peGlucy5pbmNsdWRlcyhtaXhpbikpIHtcbiAgICAgICAgICAgIGNvbnRleHQubWl4aW5zLnB1c2gobWl4aW4pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgICBcIk1peGluIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0byB0YXJnZXQgYXBwXCIgKyAobWl4aW4ubmFtZSA/IGA6ICR7bWl4aW4ubmFtZX1gIDogXCJcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXCJNaXhpbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIGJ1aWxkcyBzdXBwb3J0aW5nIE9wdGlvbnMgQVBJXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHA7XG4gICAgICB9LFxuICAgICAgY29tcG9uZW50KG5hbWUsIGNvbXBvbmVudCkge1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lLCBjb250ZXh0LmNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5jb21wb25lbnRzW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNvbnRleHQuY29tcG9uZW50c1tuYW1lXSkge1xuICAgICAgICAgIHdhcm4kMShgQ29tcG9uZW50IFwiJHtuYW1lfVwiIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBpbiB0YXJnZXQgYXBwLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuY29tcG9uZW50c1tuYW1lXSA9IGNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH0sXG4gICAgICBkaXJlY3RpdmUobmFtZSwgZGlyZWN0aXZlKSB7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgdmFsaWRhdGVEaXJlY3RpdmVOYW1lKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGlyZWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlyZWN0aXZlc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBjb250ZXh0LmRpcmVjdGl2ZXNbbmFtZV0pIHtcbiAgICAgICAgICB3YXJuJDEoYERpcmVjdGl2ZSBcIiR7bmFtZX1cIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgaW4gdGFyZ2V0IGFwcC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmRpcmVjdGl2ZXNbbmFtZV0gPSBkaXJlY3RpdmU7XG4gICAgICAgIHJldHVybiBhcHA7XG4gICAgICB9LFxuICAgICAgbW91bnQocm9vdENvbnRhaW5lciwgaXNIeWRyYXRlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgaWYgKCFpc01vdW50ZWQpIHtcbiAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiByb290Q29udGFpbmVyLl9fdnVlX2FwcF9fKSB7XG4gICAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICAgIGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFwcCBpbnN0YW5jZSBtb3VudGVkIG9uIHRoZSBob3N0IGNvbnRhaW5lci5cbiBJZiB5b3Ugd2FudCB0byBtb3VudCBhbm90aGVyIGFwcCBvbiB0aGUgc2FtZSBob3N0IGNvbnRhaW5lciwgeW91IG5lZWQgdG8gdW5tb3VudCB0aGUgcHJldmlvdXMgYXBwIGJ5IGNhbGxpbmcgXFxgYXBwLnVubW91bnQoKVxcYCBmaXJzdC5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2bm9kZSA9IGFwcC5fY2VWTm9kZSB8fCBjcmVhdGVWTm9kZShyb290Q29tcG9uZW50LCByb290UHJvcHMpO1xuICAgICAgICAgIHZub2RlLmFwcENvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgIGlmIChuYW1lc3BhY2UgPT09IHRydWUpIHtcbiAgICAgICAgICAgIG5hbWVzcGFjZSA9IFwic3ZnXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBuYW1lc3BhY2UgPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlbG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2xvbmVkID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgICAgICAgICAgIGNsb25lZC5lbCA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlcihjbG9uZWQsIHJvb3RDb250YWluZXIsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNIeWRyYXRlICYmIGh5ZHJhdGUpIHtcbiAgICAgICAgICAgIGh5ZHJhdGUodm5vZGUsIHJvb3RDb250YWluZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXIodm5vZGUsIHJvb3RDb250YWluZXIsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzTW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgYXBwLl9jb250YWluZXIgPSByb290Q29udGFpbmVyO1xuICAgICAgICAgIHJvb3RDb250YWluZXIuX192dWVfYXBwX18gPSBhcHA7XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICAgICAgICBhcHAuX2luc3RhbmNlID0gdm5vZGUuY29tcG9uZW50O1xuICAgICAgICAgICAgZGV2dG9vbHNJbml0QXBwKGFwcCwgdmVyc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnRQdWJsaWNJbnN0YW5jZSh2bm9kZS5jb21wb25lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgQXBwIGhhcyBhbHJlYWR5IGJlZW4gbW91bnRlZC5cbklmIHlvdSB3YW50IHRvIHJlbW91bnQgdGhlIHNhbWUgYXBwLCBtb3ZlIHlvdXIgYXBwIGNyZWF0aW9uIGxvZ2ljIGludG8gYSBmYWN0b3J5IGZ1bmN0aW9uIGFuZCBjcmVhdGUgZnJlc2ggYXBwIGluc3RhbmNlcyBmb3IgZWFjaCBtb3VudCAtIGUuZy4gXFxgY29uc3QgY3JlYXRlTXlBcHAgPSAoKSA9PiBjcmVhdGVBcHAoQXBwKVxcYGBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25Vbm1vdW50KGNsZWFudXBGbikge1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB0eXBlb2YgY2xlYW51cEZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgRXhwZWN0ZWQgZnVuY3Rpb24gYXMgZmlyc3QgYXJndW1lbnQgdG8gYXBwLm9uVW5tb3VudCgpLCBidXQgZ290ICR7dHlwZW9mIGNsZWFudXBGbn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwbHVnaW5DbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuKTtcbiAgICAgIH0sXG4gICAgICB1bm1vdW50KCkge1xuICAgICAgICBpZiAoaXNNb3VudGVkKSB7XG4gICAgICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoXG4gICAgICAgICAgICBwbHVnaW5DbGVhbnVwRm5zLFxuICAgICAgICAgICAgYXBwLl9pbnN0YW5jZSxcbiAgICAgICAgICAgIDE2XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZW5kZXIobnVsbCwgYXBwLl9jb250YWluZXIpO1xuICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xuICAgICAgICAgICAgYXBwLl9pbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICBkZXZ0b29sc1VubW91bnRBcHAoYXBwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIGFwcC5fY29udGFpbmVyLl9fdnVlX2FwcF9fO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoYENhbm5vdCB1bm1vdW50IGFuIGFwcCB0aGF0IGlzIG5vdCBtb3VudGVkLmApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvdmlkZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGtleSBpbiBjb250ZXh0LnByb3ZpZGVzKSB7XG4gICAgICAgICAgaWYgKGhhc093bihjb250ZXh0LnByb3ZpZGVzLCBrZXkpKSB7XG4gICAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICAgIGBBcHAgYWxyZWFkeSBwcm92aWRlcyBwcm9wZXJ0eSB3aXRoIGtleSBcIiR7U3RyaW5nKGtleSl9XCIuIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IHZhbHVlLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgICAgYEFwcCBhbHJlYWR5IHByb3ZpZGVzIHByb3BlcnR5IHdpdGgga2V5IFwiJHtTdHJpbmcoa2V5KX1cIiBpbmhlcml0ZWQgZnJvbSBpdHMgcGFyZW50IGVsZW1lbnQuIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IHZhbHVlLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQucHJvdmlkZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgfSxcbiAgICAgIHJ1bldpdGhDb250ZXh0KGZuKSB7XG4gICAgICAgIGNvbnN0IGxhc3RBcHAgPSBjdXJyZW50QXBwO1xuICAgICAgICBjdXJyZW50QXBwID0gYXBwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGN1cnJlbnRBcHAgPSBsYXN0QXBwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gYXBwO1xuICB9O1xufVxubGV0IGN1cnJlbnRBcHAgPSBudWxsO1xuXG5mdW5jdGlvbiBwcm92aWRlKGtleSwgdmFsdWUpIHtcbiAgaWYgKCFjdXJyZW50SW5zdGFuY2UpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgd2FybiQxKGBwcm92aWRlKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKS5gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IHByb3ZpZGVzID0gY3VycmVudEluc3RhbmNlLnByb3ZpZGVzO1xuICAgIGNvbnN0IHBhcmVudFByb3ZpZGVzID0gY3VycmVudEluc3RhbmNlLnBhcmVudCAmJiBjdXJyZW50SW5zdGFuY2UucGFyZW50LnByb3ZpZGVzO1xuICAgIGlmIChwYXJlbnRQcm92aWRlcyA9PT0gcHJvdmlkZXMpIHtcbiAgICAgIHByb3ZpZGVzID0gY3VycmVudEluc3RhbmNlLnByb3ZpZGVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRQcm92aWRlcyk7XG4gICAgfVxuICAgIHByb3ZpZGVzW2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkgPSBmYWxzZSkge1xuICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBpZiAoaW5zdGFuY2UgfHwgY3VycmVudEFwcCkge1xuICAgIGxldCBwcm92aWRlcyA9IGN1cnJlbnRBcHAgPyBjdXJyZW50QXBwLl9jb250ZXh0LnByb3ZpZGVzIDogaW5zdGFuY2UgPyBpbnN0YW5jZS5wYXJlbnQgPT0gbnVsbCB8fCBpbnN0YW5jZS5jZSA/IGluc3RhbmNlLnZub2RlLmFwcENvbnRleHQgJiYgaW5zdGFuY2Uudm5vZGUuYXBwQ29udGV4dC5wcm92aWRlcyA6IGluc3RhbmNlLnBhcmVudC5wcm92aWRlcyA6IHZvaWQgMDtcbiAgICBpZiAocHJvdmlkZXMgJiYga2V5IGluIHByb3ZpZGVzKSB7XG4gICAgICByZXR1cm4gcHJvdmlkZXNba2V5XTtcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gdHJlYXREZWZhdWx0QXNGYWN0b3J5ICYmIGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZS5jYWxsKGluc3RhbmNlICYmIGluc3RhbmNlLnByb3h5KSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHdhcm4kMShgaW5qZWN0aW9uIFwiJHtTdHJpbmcoa2V5KX1cIiBub3QgZm91bmQuYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuJDEoYGluamVjdCgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkgb3IgZnVuY3Rpb25hbCBjb21wb25lbnRzLmApO1xuICB9XG59XG5mdW5jdGlvbiBoYXNJbmplY3Rpb25Db250ZXh0KCkge1xuICByZXR1cm4gISEoZ2V0Q3VycmVudEluc3RhbmNlKCkgfHwgY3VycmVudEFwcCk7XG59XG5cbmNvbnN0IGludGVybmFsT2JqZWN0UHJvdG8gPSB7fTtcbmNvbnN0IGNyZWF0ZUludGVybmFsT2JqZWN0ID0gKCkgPT4gT2JqZWN0LmNyZWF0ZShpbnRlcm5hbE9iamVjdFByb3RvKTtcbmNvbnN0IGlzSW50ZXJuYWxPYmplY3QgPSAob2JqKSA9PiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gaW50ZXJuYWxPYmplY3RQcm90bztcblxuZnVuY3Rpb24gaW5pdFByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgaXNTdGF0ZWZ1bCwgaXNTU1IgPSBmYWxzZSkge1xuICBjb25zdCBwcm9wcyA9IHt9O1xuICBjb25zdCBhdHRycyA9IGNyZWF0ZUludGVybmFsT2JqZWN0KCk7XG4gIGluc3RhbmNlLnByb3BzRGVmYXVsdHMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc2V0RnVsbFByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgcHJvcHMsIGF0dHJzKTtcbiAgZm9yIChjb25zdCBrZXkgaW4gaW5zdGFuY2UucHJvcHNPcHRpb25zWzBdKSB7XG4gICAgaWYgKCEoa2V5IGluIHByb3BzKSkge1xuICAgICAgcHJvcHNba2V5XSA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB2YWxpZGF0ZVByb3BzKHJhd1Byb3BzIHx8IHt9LCBwcm9wcywgaW5zdGFuY2UpO1xuICB9XG4gIGlmIChpc1N0YXRlZnVsKSB7XG4gICAgaW5zdGFuY2UucHJvcHMgPSBpc1NTUiA/IHByb3BzIDogc2hhbGxvd1JlYWN0aXZlKHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWluc3RhbmNlLnR5cGUucHJvcHMpIHtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gYXR0cnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gcHJvcHM7XG4gICAgfVxuICB9XG4gIGluc3RhbmNlLmF0dHJzID0gYXR0cnM7XG59XG5mdW5jdGlvbiBpc0luSG1yQ29udGV4dChpbnN0YW5jZSkge1xuICB3aGlsZSAoaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2UudHlwZS5fX2htcklkKSByZXR1cm4gdHJ1ZTtcbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnBhcmVudDtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlUHJvcHMoaW5zdGFuY2UsIHJhd1Byb3BzLCByYXdQcmV2UHJvcHMsIG9wdGltaXplZCkge1xuICBjb25zdCB7XG4gICAgcHJvcHMsXG4gICAgYXR0cnMsXG4gICAgdm5vZGU6IHsgcGF0Y2hGbGFnIH1cbiAgfSA9IGluc3RhbmNlO1xuICBjb25zdCByYXdDdXJyZW50UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XG4gIGNvbnN0IFtvcHRpb25zXSA9IGluc3RhbmNlLnByb3BzT3B0aW9ucztcbiAgbGV0IGhhc0F0dHJzQ2hhbmdlZCA9IGZhbHNlO1xuICBpZiAoXG4gICAgLy8gYWx3YXlzIGZvcmNlIGZ1bGwgZGlmZiBpbiBkZXZcbiAgICAvLyAtICMxOTQyIGlmIGhtciBpcyBlbmFibGVkIHdpdGggc2ZjIGNvbXBvbmVudFxuICAgIC8vIC0gdml0ZSM4NzIgbm9uLXNmYyBjb21wb25lbnQgdXNlZCBieSBzZmMgY29tcG9uZW50XG4gICAgISghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzSW5IbXJDb250ZXh0KGluc3RhbmNlKSkgJiYgKG9wdGltaXplZCB8fCBwYXRjaEZsYWcgPiAwKSAmJiAhKHBhdGNoRmxhZyAmIDE2KVxuICApIHtcbiAgICBpZiAocGF0Y2hGbGFnICYgOCkge1xuICAgICAgY29uc3QgcHJvcHNUb1VwZGF0ZSA9IGluc3RhbmNlLnZub2RlLmR5bmFtaWNQcm9wcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNUb1VwZGF0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQga2V5ID0gcHJvcHNUb1VwZGF0ZVtpXTtcbiAgICAgICAgaWYgKGlzRW1pdExpc3RlbmVyKGluc3RhbmNlLmVtaXRzT3B0aW9ucywga2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmF3UHJvcHNba2V5XTtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoaGFzT3duKGF0dHJzLCBrZXkpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IGF0dHJzW2tleV0pIHtcbiAgICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICBoYXNBdHRyc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjYW1lbGl6ZWRLZXkgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgICAgICAgcHJvcHNbY2FtZWxpemVkS2V5XSA9IHJlc29sdmVQcm9wVmFsdWUoXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgIHJhd0N1cnJlbnRQcm9wcyxcbiAgICAgICAgICAgICAgY2FtZWxpemVkS2V5LFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGF0dHJzW2tleV0pIHtcbiAgICAgICAgICAgIGF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGhhc0F0dHJzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzZXRGdWxsUHJvcHMoaW5zdGFuY2UsIHJhd1Byb3BzLCBwcm9wcywgYXR0cnMpKSB7XG4gICAgICBoYXNBdHRyc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBsZXQga2ViYWJLZXk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmF3Q3VycmVudFByb3BzKSB7XG4gICAgICBpZiAoIXJhd1Byb3BzIHx8IC8vIGZvciBjYW1lbENhc2VcbiAgICAgICFoYXNPd24ocmF3UHJvcHMsIGtleSkgJiYgLy8gaXQncyBwb3NzaWJsZSB0aGUgb3JpZ2luYWwgcHJvcHMgd2FzIHBhc3NlZCBpbiBhcyBrZWJhYi1jYXNlXG4gICAgICAvLyBhbmQgY29udmVydGVkIHRvIGNhbWVsQ2FzZSAoIzk1NSlcbiAgICAgICgoa2ViYWJLZXkgPSBoeXBoZW5hdGUoa2V5KSkgPT09IGtleSB8fCAhaGFzT3duKHJhd1Byb3BzLCBrZWJhYktleSkpKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHJhd1ByZXZQcm9wcyAmJiAvLyBmb3IgY2FtZWxDYXNlXG4gICAgICAgICAgKHJhd1ByZXZQcm9wc1trZXldICE9PSB2b2lkIDAgfHwgLy8gZm9yIGtlYmFiLWNhc2VcbiAgICAgICAgICByYXdQcmV2UHJvcHNba2ViYWJLZXldICE9PSB2b2lkIDApKSB7XG4gICAgICAgICAgICBwcm9wc1trZXldID0gcmVzb2x2ZVByb3BWYWx1ZShcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgcmF3Q3VycmVudFByb3BzLFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBwcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhdHRycyAhPT0gcmF3Q3VycmVudFByb3BzKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xuICAgICAgICBpZiAoIXJhd1Byb3BzIHx8ICFoYXNPd24ocmF3UHJvcHMsIGtleSkgJiYgdHJ1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBhdHRyc1trZXldO1xuICAgICAgICAgIGhhc0F0dHJzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGhhc0F0dHJzQ2hhbmdlZCkge1xuICAgIHRyaWdnZXIoaW5zdGFuY2UuYXR0cnMsIFwic2V0XCIsIFwiXCIpO1xuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgdmFsaWRhdGVQcm9wcyhyYXdQcm9wcyB8fCB7fSwgcHJvcHMsIGluc3RhbmNlKTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0RnVsbFByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgcHJvcHMsIGF0dHJzKSB7XG4gIGNvbnN0IFtvcHRpb25zLCBuZWVkQ2FzdEtleXNdID0gaW5zdGFuY2UucHJvcHNPcHRpb25zO1xuICBsZXQgaGFzQXR0cnNDaGFuZ2VkID0gZmFsc2U7XG4gIGxldCByYXdDYXN0VmFsdWVzO1xuICBpZiAocmF3UHJvcHMpIHtcbiAgICBmb3IgKGxldCBrZXkgaW4gcmF3UHJvcHMpIHtcbiAgICAgIGlmIChpc1Jlc2VydmVkUHJvcChrZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSByYXdQcm9wc1trZXldO1xuICAgICAgbGV0IGNhbWVsS2V5O1xuICAgICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsIGNhbWVsS2V5ID0gY2FtZWxpemUoa2V5KSkpIHtcbiAgICAgICAgaWYgKCFuZWVkQ2FzdEtleXMgfHwgIW5lZWRDYXN0S2V5cy5pbmNsdWRlcyhjYW1lbEtleSkpIHtcbiAgICAgICAgICBwcm9wc1tjYW1lbEtleV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAocmF3Q2FzdFZhbHVlcyB8fCAocmF3Q2FzdFZhbHVlcyA9IHt9KSlbY2FtZWxLZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWlzRW1pdExpc3RlbmVyKGluc3RhbmNlLmVtaXRzT3B0aW9ucywga2V5KSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gYXR0cnMpIHx8IHZhbHVlICE9PSBhdHRyc1trZXldKSB7XG4gICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIGhhc0F0dHJzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG5lZWRDYXN0S2V5cykge1xuICAgIGNvbnN0IHJhd0N1cnJlbnRQcm9wcyA9IHRvUmF3KHByb3BzKTtcbiAgICBjb25zdCBjYXN0VmFsdWVzID0gcmF3Q2FzdFZhbHVlcyB8fCBFTVBUWV9PQko7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZWVkQ2FzdEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IG5lZWRDYXN0S2V5c1tpXTtcbiAgICAgIHByb3BzW2tleV0gPSByZXNvbHZlUHJvcFZhbHVlKFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICByYXdDdXJyZW50UHJvcHMsXG4gICAgICAgIGtleSxcbiAgICAgICAgY2FzdFZhbHVlc1trZXldLFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgIWhhc093bihjYXN0VmFsdWVzLCBrZXkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGFzQXR0cnNDaGFuZ2VkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVByb3BWYWx1ZShvcHRpb25zLCBwcm9wcywga2V5LCB2YWx1ZSwgaW5zdGFuY2UsIGlzQWJzZW50KSB7XG4gIGNvbnN0IG9wdCA9IG9wdGlvbnNba2V5XTtcbiAgaWYgKG9wdCAhPSBudWxsKSB7XG4gICAgY29uc3QgaGFzRGVmYXVsdCA9IGhhc093bihvcHQsIFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBvcHQuZGVmYXVsdDtcbiAgICAgIGlmIChvcHQudHlwZSAhPT0gRnVuY3Rpb24gJiYgIW9wdC5za2lwRmFjdG9yeSAmJiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgeyBwcm9wc0RlZmF1bHRzIH0gPSBpbnN0YW5jZTtcbiAgICAgICAgaWYgKGtleSBpbiBwcm9wc0RlZmF1bHRzKSB7XG4gICAgICAgICAgdmFsdWUgPSBwcm9wc0RlZmF1bHRzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzZXQgPSBzZXRDdXJyZW50SW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICAgIHZhbHVlID0gcHJvcHNEZWZhdWx0c1trZXldID0gZGVmYXVsdFZhbHVlLmNhbGwoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgcHJvcHNcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLmNlKSB7XG4gICAgICAgIGluc3RhbmNlLmNlLl9zZXRQcm9wKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0WzAgLyogc2hvdWxkQ2FzdCAqL10pIHtcbiAgICAgIGlmIChpc0Fic2VudCAmJiAhaGFzRGVmYXVsdCkge1xuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChvcHRbMSAvKiBzaG91bGRDYXN0VHJ1ZSAqL10gJiYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlID09PSBoeXBoZW5hdGUoa2V5KSkpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5jb25zdCBtaXhpblByb3BzQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzT3B0aW9ucyhjb21wLCBhcHBDb250ZXh0LCBhc01peGluID0gZmFsc2UpIHtcbiAgY29uc3QgY2FjaGUgPSBfX1ZVRV9PUFRJT05TX0FQSV9fICYmIGFzTWl4aW4gPyBtaXhpblByb3BzQ2FjaGUgOiBhcHBDb250ZXh0LnByb3BzQ2FjaGU7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChjb21wKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cbiAgY29uc3QgcmF3ID0gY29tcC5wcm9wcztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9O1xuICBjb25zdCBuZWVkQ2FzdEtleXMgPSBbXTtcbiAgbGV0IGhhc0V4dGVuZHMgPSBmYWxzZTtcbiAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18gJiYgIWlzRnVuY3Rpb24oY29tcCkpIHtcbiAgICBjb25zdCBleHRlbmRQcm9wcyA9IChyYXcyKSA9PiB7XG4gICAgICBoYXNFeHRlbmRzID0gdHJ1ZTtcbiAgICAgIGNvbnN0IFtwcm9wcywga2V5c10gPSBub3JtYWxpemVQcm9wc09wdGlvbnMocmF3MiwgYXBwQ29udGV4dCwgdHJ1ZSk7XG4gICAgICBleHRlbmQobm9ybWFsaXplZCwgcHJvcHMpO1xuICAgICAgaWYgKGtleXMpIG5lZWRDYXN0S2V5cy5wdXNoKC4uLmtleXMpO1xuICAgIH07XG4gICAgaWYgKCFhc01peGluICYmIGFwcENvbnRleHQubWl4aW5zLmxlbmd0aCkge1xuICAgICAgYXBwQ29udGV4dC5taXhpbnMuZm9yRWFjaChleHRlbmRQcm9wcyk7XG4gICAgfVxuICAgIGlmIChjb21wLmV4dGVuZHMpIHtcbiAgICAgIGV4dGVuZFByb3BzKGNvbXAuZXh0ZW5kcyk7XG4gICAgfVxuICAgIGlmIChjb21wLm1peGlucykge1xuICAgICAgY29tcC5taXhpbnMuZm9yRWFjaChleHRlbmRQcm9wcyk7XG4gICAgfVxuICB9XG4gIGlmICghcmF3ICYmICFoYXNFeHRlbmRzKSB7XG4gICAgaWYgKGlzT2JqZWN0KGNvbXApKSB7XG4gICAgICBjYWNoZS5zZXQoY29tcCwgRU1QVFlfQVJSKTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZX0FSUjtcbiAgfVxuICBpZiAoaXNBcnJheShyYXcpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpc1N0cmluZyhyYXdbaV0pKSB7XG4gICAgICAgIHdhcm4kMShgcHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LmAsIHJhd1tpXSk7XG4gICAgICB9XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gY2FtZWxpemUocmF3W2ldKTtcbiAgICAgIGlmICh2YWxpZGF0ZVByb3BOYW1lKG5vcm1hbGl6ZWRLZXkpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZEtleV0gPSBFTVBUWV9PQko7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHJhdykge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpc09iamVjdChyYXcpKSB7XG4gICAgICB3YXJuJDEoYGludmFsaWQgcHJvcHMgb3B0aW9uc2AsIHJhdyk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIHJhdykge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IGNhbWVsaXplKGtleSk7XG4gICAgICBpZiAodmFsaWRhdGVQcm9wTmFtZShub3JtYWxpemVkS2V5KSkge1xuICAgICAgICBjb25zdCBvcHQgPSByYXdba2V5XTtcbiAgICAgICAgY29uc3QgcHJvcCA9IG5vcm1hbGl6ZWRbbm9ybWFsaXplZEtleV0gPSBpc0FycmF5KG9wdCkgfHwgaXNGdW5jdGlvbihvcHQpID8geyB0eXBlOiBvcHQgfSA6IGV4dGVuZCh7fSwgb3B0KTtcbiAgICAgICAgY29uc3QgcHJvcFR5cGUgPSBwcm9wLnR5cGU7XG4gICAgICAgIGxldCBzaG91bGRDYXN0ID0gZmFsc2U7XG4gICAgICAgIGxldCBzaG91bGRDYXN0VHJ1ZSA9IHRydWU7XG4gICAgICAgIGlmIChpc0FycmF5KHByb3BUeXBlKSkge1xuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwcm9wVHlwZS5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBwcm9wVHlwZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGlzRnVuY3Rpb24odHlwZSkgJiYgdHlwZS5uYW1lO1xuICAgICAgICAgICAgaWYgKHR5cGVOYW1lID09PSBcIkJvb2xlYW5cIikge1xuICAgICAgICAgICAgICBzaG91bGRDYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVOYW1lID09PSBcIlN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIHNob3VsZENhc3RUcnVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3VsZENhc3QgPSBpc0Z1bmN0aW9uKHByb3BUeXBlKSAmJiBwcm9wVHlwZS5uYW1lID09PSBcIkJvb2xlYW5cIjtcbiAgICAgICAgfVxuICAgICAgICBwcm9wWzAgLyogc2hvdWxkQ2FzdCAqL10gPSBzaG91bGRDYXN0O1xuICAgICAgICBwcm9wWzEgLyogc2hvdWxkQ2FzdFRydWUgKi9dID0gc2hvdWxkQ2FzdFRydWU7XG4gICAgICAgIGlmIChzaG91bGRDYXN0IHx8IGhhc093bihwcm9wLCBcImRlZmF1bHRcIikpIHtcbiAgICAgICAgICBuZWVkQ2FzdEtleXMucHVzaChub3JtYWxpemVkS2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXMgPSBbbm9ybWFsaXplZCwgbmVlZENhc3RLZXlzXTtcbiAgaWYgKGlzT2JqZWN0KGNvbXApKSB7XG4gICAgY2FjaGUuc2V0KGNvbXAsIHJlcyk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcE5hbWUoa2V5KSB7XG4gIGlmIChrZXlbMF0gIT09IFwiJFwiICYmICFpc1Jlc2VydmVkUHJvcChrZXkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm4kMShgSW52YWxpZCBwcm9wIG5hbWU6IFwiJHtrZXl9XCIgaXMgYSByZXNlcnZlZCBwcm9wZXJ0eS5gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRUeXBlKGN0b3IpIHtcbiAgaWYgKGN0b3IgPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIH1cbiAgaWYgKHR5cGVvZiBjdG9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gY3Rvci5uYW1lIHx8IFwiXCI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGN0b3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBuYW1lID0gY3Rvci5jb25zdHJ1Y3RvciAmJiBjdG9yLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgcmV0dXJuIG5hbWUgfHwgXCJcIjtcbiAgfVxuICByZXR1cm4gXCJcIjtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMocmF3UHJvcHMsIHByb3BzLCBpbnN0YW5jZSkge1xuICBjb25zdCByZXNvbHZlZFZhbHVlcyA9IHRvUmF3KHByb3BzKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGluc3RhbmNlLnByb3BzT3B0aW9uc1swXTtcbiAgY29uc3QgY2FtZWxpemVQcm9wc0tleSA9IE9iamVjdC5rZXlzKHJhd1Byb3BzKS5tYXAoKGtleSkgPT4gY2FtZWxpemUoa2V5KSk7XG4gIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICBsZXQgb3B0ID0gb3B0aW9uc1trZXldO1xuICAgIGlmIChvcHQgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFsaWRhdGVQcm9wKFxuICAgICAga2V5LFxuICAgICAgcmVzb2x2ZWRWYWx1ZXNba2V5XSxcbiAgICAgIG9wdCxcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBzaGFsbG93UmVhZG9ubHkocmVzb2x2ZWRWYWx1ZXMpIDogcmVzb2x2ZWRWYWx1ZXMsXG4gICAgICAhY2FtZWxpemVQcm9wc0tleS5pbmNsdWRlcyhrZXkpXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wKG5hbWUsIHZhbHVlLCBwcm9wLCBwcm9wcywgaXNBYnNlbnQpIHtcbiAgY29uc3QgeyB0eXBlLCByZXF1aXJlZCwgdmFsaWRhdG9yLCBza2lwQ2hlY2sgfSA9IHByb3A7XG4gIGlmIChyZXF1aXJlZCAmJiBpc0Fic2VudCkge1xuICAgIHdhcm4kMSgnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsICYmICFyZXF1aXJlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZSAhPSBudWxsICYmIHR5cGUgIT09IHRydWUgJiYgIXNraXBDaGVjaykge1xuICAgIGxldCBpc1ZhbGlkID0gZmFsc2U7XG4gICAgY29uc3QgdHlwZXMgPSBpc0FycmF5KHR5cGUpID8gdHlwZSA6IFt0eXBlXTtcbiAgICBjb25zdCBleHBlY3RlZFR5cGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGggJiYgIWlzVmFsaWQ7IGkrKykge1xuICAgICAgY29uc3QgeyB2YWxpZCwgZXhwZWN0ZWRUeXBlIH0gPSBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlc1tpXSk7XG4gICAgICBleHBlY3RlZFR5cGVzLnB1c2goZXhwZWN0ZWRUeXBlIHx8IFwiXCIpO1xuICAgICAgaXNWYWxpZCA9IHZhbGlkO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHdhcm4kMShnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKHZhbGlkYXRvciAmJiAhdmFsaWRhdG9yKHZhbHVlLCBwcm9wcykpIHtcbiAgICB3YXJuJDEoJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nKTtcbiAgfVxufVxuY29uc3QgaXNTaW1wbGVUeXBlID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXG4gIFwiU3RyaW5nLE51bWJlcixCb29sZWFuLEZ1bmN0aW9uLFN5bWJvbCxCaWdJbnRcIlxuKTtcbmZ1bmN0aW9uIGFzc2VydFR5cGUodmFsdWUsIHR5cGUpIHtcbiAgbGV0IHZhbGlkO1xuICBjb25zdCBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBcIm51bGxcIikge1xuICAgIHZhbGlkID0gdmFsdWUgPT09IG51bGw7XG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVUeXBlKGV4cGVjdGVkVHlwZSkpIHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBcIk9iamVjdFwiKSB7XG4gICAgdmFsaWQgPSBpc09iamVjdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBcIkFycmF5XCIpIHtcbiAgICB2YWxpZCA9IGlzQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICB9XG4gIHJldHVybiB7XG4gICAgdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlXG4gIH07XG59XG5mdW5jdGlvbiBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgaWYgKGV4cGVjdGVkVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGBQcm9wIHR5cGUgW10gZm9yIHByb3AgXCIke25hbWV9XCIgd29uJ3QgbWF0Y2ggYW55dGhpbmcuIERpZCB5b3UgbWVhbiB0byB1c2UgdHlwZSBBcnJheSBpbnN0ZWFkP2A7XG4gIH1cbiAgbGV0IG1lc3NhZ2UgPSBgSW52YWxpZCBwcm9wOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIiR7bmFtZX1cIi4gRXhwZWN0ZWQgJHtleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKFwiIHwgXCIpfWA7XG4gIGNvbnN0IGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XG4gIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHRvUmF3VHlwZSh2YWx1ZSk7XG4gIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICBjb25zdCByZWNlaXZlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKTtcbiAgaWYgKGV4cGVjdGVkVHlwZXMubGVuZ3RoID09PSAxICYmIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XG4gICAgbWVzc2FnZSArPSBgIHdpdGggdmFsdWUgJHtleHBlY3RlZFZhbHVlfWA7XG4gIH1cbiAgbWVzc2FnZSArPSBgLCBnb3QgJHtyZWNlaXZlZFR5cGV9IGA7XG4gIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gYHdpdGggdmFsdWUgJHtyZWNlaXZlZFZhbHVlfS5gO1xuICB9XG4gIHJldHVybiBtZXNzYWdlO1xufVxuZnVuY3Rpb24gc3R5bGVWYWx1ZSh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gXCJTdHJpbmdcIikge1xuICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBcIk51bWJlclwiKSB7XG4gICAgcmV0dXJuIGAke051bWJlcih2YWx1ZSl9YDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgfVxufVxuZnVuY3Rpb24gaXNFeHBsaWNhYmxlKHR5cGUpIHtcbiAgY29uc3QgZXhwbGljaXRUeXBlcyA9IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIl07XG4gIHJldHVybiBleHBsaWNpdFR5cGVzLnNvbWUoKGVsZW0pID0+IHR5cGUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbSk7XG59XG5mdW5jdGlvbiBpc0Jvb2xlYW4oLi4uYXJncykge1xuICByZXR1cm4gYXJncy5zb21lKChlbGVtKSA9PiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09IFwiYm9vbGVhblwiKTtcbn1cblxuY29uc3QgaXNJbnRlcm5hbEtleSA9IChrZXkpID0+IGtleSA9PT0gXCJfXCIgfHwga2V5ID09PSBcIl9jdHhcIiB8fCBrZXkgPT09IFwiJHN0YWJsZVwiO1xuY29uc3Qgbm9ybWFsaXplU2xvdFZhbHVlID0gKHZhbHVlKSA9PiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWTm9kZSkgOiBbbm9ybWFsaXplVk5vZGUodmFsdWUpXTtcbmNvbnN0IG5vcm1hbGl6ZVNsb3QgPSAoa2V5LCByYXdTbG90LCBjdHgpID0+IHtcbiAgaWYgKHJhd1Nsb3QuX24pIHtcbiAgICByZXR1cm4gcmF3U2xvdDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gd2l0aEN0eCgoLi4uYXJncykgPT4ge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGN1cnJlbnRJbnN0YW5jZSAmJiAhKGN0eCA9PT0gbnVsbCAmJiBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UpICYmICEoY3R4ICYmIGN0eC5yb290ICE9PSBjdXJyZW50SW5zdGFuY2Uucm9vdCkpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYFNsb3QgXCIke2tleX1cIiBpbnZva2VkIG91dHNpZGUgb2YgdGhlIHJlbmRlciBmdW5jdGlvbjogdGhpcyB3aWxsIG5vdCB0cmFjayBkZXBlbmRlbmNpZXMgdXNlZCBpbiB0aGUgc2xvdC4gSW52b2tlIHRoZSBzbG90IGZ1bmN0aW9uIGluc2lkZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVNsb3RWYWx1ZShyYXdTbG90KC4uLmFyZ3MpKTtcbiAgfSwgY3R4KTtcbiAgbm9ybWFsaXplZC5fYyA9IGZhbHNlO1xuICByZXR1cm4gbm9ybWFsaXplZDtcbn07XG5jb25zdCBub3JtYWxpemVPYmplY3RTbG90cyA9IChyYXdTbG90cywgc2xvdHMsIGluc3RhbmNlKSA9PiB7XG4gIGNvbnN0IGN0eCA9IHJhd1Nsb3RzLl9jdHg7XG4gIGZvciAoY29uc3Qga2V5IGluIHJhd1Nsb3RzKSB7XG4gICAgaWYgKGlzSW50ZXJuYWxLZXkoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSByYXdTbG90c1trZXldO1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgc2xvdHNba2V5XSA9IG5vcm1hbGl6ZVNsb3Qoa2V5LCB2YWx1ZSwgY3R4KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHRydWUpIHtcbiAgICAgICAgd2FybiQxKFxuICAgICAgICAgIGBOb24tZnVuY3Rpb24gdmFsdWUgZW5jb3VudGVyZWQgZm9yIHNsb3QgXCIke2tleX1cIi4gUHJlZmVyIGZ1bmN0aW9uIHNsb3RzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVNsb3RWYWx1ZSh2YWx1ZSk7XG4gICAgICBzbG90c1trZXldID0gKCkgPT4gbm9ybWFsaXplZDtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBub3JtYWxpemVWTm9kZVNsb3RzID0gKGluc3RhbmNlLCBjaGlsZHJlbikgPT4ge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaXNLZWVwQWxpdmUoaW5zdGFuY2Uudm5vZGUpICYmIHRydWUpIHtcbiAgICB3YXJuJDEoXG4gICAgICBgTm9uLWZ1bmN0aW9uIHZhbHVlIGVuY291bnRlcmVkIGZvciBkZWZhdWx0IHNsb3QuIFByZWZlciBmdW5jdGlvbiBzbG90cyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLmBcbiAgICApO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVTbG90VmFsdWUoY2hpbGRyZW4pO1xuICBpbnN0YW5jZS5zbG90cy5kZWZhdWx0ID0gKCkgPT4gbm9ybWFsaXplZDtcbn07XG5jb25zdCBhc3NpZ25TbG90cyA9IChzbG90cywgY2hpbGRyZW4sIG9wdGltaXplZCkgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBpbiBjaGlsZHJlbikge1xuICAgIGlmIChvcHRpbWl6ZWQgfHwgIWlzSW50ZXJuYWxLZXkoa2V5KSkge1xuICAgICAgc2xvdHNba2V5XSA9IGNoaWxkcmVuW2tleV07XG4gICAgfVxuICB9XG59O1xuY29uc3QgaW5pdFNsb3RzID0gKGluc3RhbmNlLCBjaGlsZHJlbiwgb3B0aW1pemVkKSA9PiB7XG4gIGNvbnN0IHNsb3RzID0gaW5zdGFuY2Uuc2xvdHMgPSBjcmVhdGVJbnRlcm5hbE9iamVjdCgpO1xuICBpZiAoaW5zdGFuY2Uudm5vZGUuc2hhcGVGbGFnICYgMzIpIHtcbiAgICBjb25zdCB0eXBlID0gY2hpbGRyZW4uXztcbiAgICBpZiAodHlwZSkge1xuICAgICAgYXNzaWduU2xvdHMoc2xvdHMsIGNoaWxkcmVuLCBvcHRpbWl6ZWQpO1xuICAgICAgaWYgKG9wdGltaXplZCkge1xuICAgICAgICBkZWYoc2xvdHMsIFwiX1wiLCB0eXBlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbm9ybWFsaXplT2JqZWN0U2xvdHMoY2hpbGRyZW4sIHNsb3RzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcbiAgICBub3JtYWxpemVWTm9kZVNsb3RzKGluc3RhbmNlLCBjaGlsZHJlbik7XG4gIH1cbn07XG5jb25zdCB1cGRhdGVTbG90cyA9IChpbnN0YW5jZSwgY2hpbGRyZW4sIG9wdGltaXplZCkgPT4ge1xuICBjb25zdCB7IHZub2RlLCBzbG90cyB9ID0gaW5zdGFuY2U7XG4gIGxldCBuZWVkRGVsZXRpb25DaGVjayA9IHRydWU7XG4gIGxldCBkZWxldGlvbkNvbXBhcmlzb25UYXJnZXQgPSBFTVBUWV9PQko7XG4gIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAzMikge1xuICAgIGNvbnN0IHR5cGUgPSBjaGlsZHJlbi5fO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBpc0htclVwZGF0aW5nKSB7XG4gICAgICAgIGFzc2lnblNsb3RzKHNsb3RzLCBjaGlsZHJlbiwgb3B0aW1pemVkKTtcbiAgICAgICAgdHJpZ2dlcihpbnN0YW5jZSwgXCJzZXRcIiwgXCIkc2xvdHNcIik7XG4gICAgICB9IGVsc2UgaWYgKG9wdGltaXplZCAmJiB0eXBlID09PSAxKSB7XG4gICAgICAgIG5lZWREZWxldGlvbkNoZWNrID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NpZ25TbG90cyhzbG90cywgY2hpbGRyZW4sIG9wdGltaXplZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5lZWREZWxldGlvbkNoZWNrID0gIWNoaWxkcmVuLiRzdGFibGU7XG4gICAgICBub3JtYWxpemVPYmplY3RTbG90cyhjaGlsZHJlbiwgc2xvdHMpO1xuICAgIH1cbiAgICBkZWxldGlvbkNvbXBhcmlzb25UYXJnZXQgPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xuICAgIG5vcm1hbGl6ZVZOb2RlU2xvdHMoaW5zdGFuY2UsIGNoaWxkcmVuKTtcbiAgICBkZWxldGlvbkNvbXBhcmlzb25UYXJnZXQgPSB7IGRlZmF1bHQ6IDEgfTtcbiAgfVxuICBpZiAobmVlZERlbGV0aW9uQ2hlY2spIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzbG90cykge1xuICAgICAgaWYgKCFpc0ludGVybmFsS2V5KGtleSkgJiYgZGVsZXRpb25Db21wYXJpc29uVGFyZ2V0W2tleV0gPT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgc2xvdHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmxldCBzdXBwb3J0ZWQ7XG5sZXQgcGVyZjtcbmZ1bmN0aW9uIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgdHlwZSkge1xuICBpZiAoaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcucGVyZm9ybWFuY2UgJiYgaXNTdXBwb3J0ZWQoKSkge1xuICAgIHBlcmYubWFyayhgdnVlLSR7dHlwZX0tJHtpbnN0YW5jZS51aWR9YCk7XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgZGV2dG9vbHNQZXJmU3RhcnQoaW5zdGFuY2UsIHR5cGUsIGlzU3VwcG9ydGVkKCkgPyBwZXJmLm5vdygpIDogRGF0ZS5ub3coKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZE1lYXN1cmUoaW5zdGFuY2UsIHR5cGUpIHtcbiAgaWYgKGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLnBlcmZvcm1hbmNlICYmIGlzU3VwcG9ydGVkKCkpIHtcbiAgICBjb25zdCBzdGFydFRhZyA9IGB2dWUtJHt0eXBlfS0ke2luc3RhbmNlLnVpZH1gO1xuICAgIGNvbnN0IGVuZFRhZyA9IHN0YXJ0VGFnICsgYDplbmRgO1xuICAgIGNvbnN0IG1lYXN1cmVOYW1lID0gYDwke2Zvcm1hdENvbXBvbmVudE5hbWUoaW5zdGFuY2UsIGluc3RhbmNlLnR5cGUpfT4gJHt0eXBlfWA7XG4gICAgcGVyZi5tYXJrKGVuZFRhZyk7XG4gICAgcGVyZi5tZWFzdXJlKG1lYXN1cmVOYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICBwZXJmLmNsZWFyTWVhc3VyZXMobWVhc3VyZU5hbWUpO1xuICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XG4gICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgZGV2dG9vbHNQZXJmRW5kKGluc3RhbmNlLCB0eXBlLCBpc1N1cHBvcnRlZCgpID8gcGVyZi5ub3coKSA6IERhdGUubm93KCkpO1xuICB9XG59XG5mdW5jdGlvbiBpc1N1cHBvcnRlZCgpIHtcbiAgaWYgKHN1cHBvcnRlZCAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHN1cHBvcnRlZDtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cucGVyZm9ybWFuY2UpIHtcbiAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgIHBlcmYgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIH0gZWxzZSB7XG4gICAgc3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHN1cHBvcnRlZDtcbn1cblxuZnVuY3Rpb24gaW5pdEZlYXR1cmVGbGFncygpIHtcbiAgY29uc3QgbmVlZFdhcm4gPSBbXTtcbiAgaWYgKHR5cGVvZiBfX1ZVRV9PUFRJT05TX0FQSV9fICE9PSBcImJvb2xlYW5cIikge1xuICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgbmVlZFdhcm4ucHVzaChgX19WVUVfT1BUSU9OU19BUElfX2ApO1xuICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9PUFRJT05TX0FQSV9fID0gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIF9fVlVFX1BST0RfREVWVE9PTFNfXyAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIG5lZWRXYXJuLnB1c2goYF9fVlVFX1BST0RfREVWVE9PTFNfX2ApO1xuICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9QUk9EX0RFVlRPT0xTX18gPSBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfXyAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIG5lZWRXYXJuLnB1c2goYF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfX2ApO1xuICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18gPSBmYWxzZTtcbiAgfVxuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBuZWVkV2Fybi5sZW5ndGgpIHtcbiAgICBjb25zdCBtdWx0aSA9IG5lZWRXYXJuLmxlbmd0aCA+IDE7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYEZlYXR1cmUgZmxhZyR7bXVsdGkgPyBgc2AgOiBgYH0gJHtuZWVkV2Fybi5qb2luKFwiLCBcIil9ICR7bXVsdGkgPyBgYXJlYCA6IGBpc2B9IG5vdCBleHBsaWNpdGx5IGRlZmluZWQuIFlvdSBhcmUgcnVubmluZyB0aGUgZXNtLWJ1bmRsZXIgYnVpbGQgb2YgVnVlLCB3aGljaCBleHBlY3RzIHRoZXNlIGNvbXBpbGUtdGltZSBmZWF0dXJlIGZsYWdzIHRvIGJlIGdsb2JhbGx5IGluamVjdGVkIHZpYSB0aGUgYnVuZGxlciBjb25maWcgaW4gb3JkZXIgdG8gZ2V0IGJldHRlciB0cmVlLXNoYWtpbmcgaW4gdGhlIHByb2R1Y3Rpb24gYnVuZGxlLlxuXG5Gb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9saW5rLnZ1ZWpzLm9yZy9mZWF0dXJlLWZsYWdzLmBcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHF1ZXVlUG9zdFJlbmRlckVmZmVjdCA9IHF1ZXVlRWZmZWN0V2l0aFN1c3BlbnNlIDtcbmZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGJhc2VDcmVhdGVSZW5kZXJlcihvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGJhc2VDcmVhdGVSZW5kZXJlcihvcHRpb25zLCBjcmVhdGVIeWRyYXRpb25GdW5jdGlvbnMpO1xufVxuZnVuY3Rpb24gYmFzZUNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMsIGNyZWF0ZUh5ZHJhdGlvbkZucykge1xuICB7XG4gICAgaW5pdEZlYXR1cmVGbGFncygpO1xuICB9XG4gIGNvbnN0IHRhcmdldCA9IGdldEdsb2JhbFRoaXMoKTtcbiAgdGFyZ2V0Ll9fVlVFX18gPSB0cnVlO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICBzZXREZXZ0b29sc0hvb2skMSh0YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXywgdGFyZ2V0KTtcbiAgfVxuICBjb25zdCB7XG4gICAgaW5zZXJ0OiBob3N0SW5zZXJ0LFxuICAgIHJlbW92ZTogaG9zdFJlbW92ZSxcbiAgICBwYXRjaFByb3A6IGhvc3RQYXRjaFByb3AsXG4gICAgY3JlYXRlRWxlbWVudDogaG9zdENyZWF0ZUVsZW1lbnQsXG4gICAgY3JlYXRlVGV4dDogaG9zdENyZWF0ZVRleHQsXG4gICAgY3JlYXRlQ29tbWVudDogaG9zdENyZWF0ZUNvbW1lbnQsXG4gICAgc2V0VGV4dDogaG9zdFNldFRleHQsXG4gICAgc2V0RWxlbWVudFRleHQ6IGhvc3RTZXRFbGVtZW50VGV4dCxcbiAgICBwYXJlbnROb2RlOiBob3N0UGFyZW50Tm9kZSxcbiAgICBuZXh0U2libGluZzogaG9zdE5leHRTaWJsaW5nLFxuICAgIHNldFNjb3BlSWQ6IGhvc3RTZXRTY29wZUlkID0gTk9PUCxcbiAgICBpbnNlcnRTdGF0aWNDb250ZW50OiBob3N0SW5zZXJ0U3RhdGljQ29udGVudFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcGF0Y2ggPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciA9IG51bGwsIHBhcmVudENvbXBvbmVudCA9IG51bGwsIHBhcmVudFN1c3BlbnNlID0gbnVsbCwgbmFtZXNwYWNlID0gdm9pZCAwLCBzbG90U2NvcGVJZHMgPSBudWxsLCBvcHRpbWl6ZWQgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzSG1yVXBkYXRpbmcgPyBmYWxzZSA6ICEhbjIuZHluYW1pY0NoaWxkcmVuKSA9PiB7XG4gICAgaWYgKG4xID09PSBuMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobjEgJiYgIWlzU2FtZVZOb2RlVHlwZShuMSwgbjIpKSB7XG4gICAgICBhbmNob3IgPSBnZXROZXh0SG9zdE5vZGUobjEpO1xuICAgICAgdW5tb3VudChuMSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XG4gICAgICBuMSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChuMi5wYXRjaEZsYWcgPT09IC0yKSB7XG4gICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgIG4yLmR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHsgdHlwZSwgcmVmLCBzaGFwZUZsYWcgfSA9IG4yO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBUZXh0OlxuICAgICAgICBwcm9jZXNzVGV4dChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbW1lbnQ6XG4gICAgICAgIHByb2Nlc3NDb21tZW50Tm9kZShuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0YXRpYzpcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcbiAgICAgICAgICBtb3VudFN0YXRpY05vZGUobjIsIGNvbnRhaW5lciwgYW5jaG9yLCBuYW1lc3BhY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwYXRjaFN0YXRpY05vZGUobjEsIG4yLCBjb250YWluZXIsIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICBwcm9jZXNzRnJhZ21lbnQoXG4gICAgICAgICAgbjEsXG4gICAgICAgICAgbjIsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgMSkge1xuICAgICAgICAgIHByb2Nlc3NFbGVtZW50KFxuICAgICAgICAgICAgbjEsXG4gICAgICAgICAgICBuMixcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZUZsYWcgJiA2KSB7XG4gICAgICAgICAgcHJvY2Vzc0NvbXBvbmVudChcbiAgICAgICAgICAgIG4xLFxuICAgICAgICAgICAgbjIsXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGVGbGFnICYgNjQpIHtcbiAgICAgICAgICB0eXBlLnByb2Nlc3MoXG4gICAgICAgICAgICBuMSxcbiAgICAgICAgICAgIG4yLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgICAgICBpbnRlcm5hbHNcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgICAgIHR5cGUucHJvY2VzcyhcbiAgICAgICAgICAgIG4xLFxuICAgICAgICAgICAgbjIsXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZCxcbiAgICAgICAgICAgIGludGVybmFsc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHdhcm4kMShcIkludmFsaWQgVk5vZGUgdHlwZTpcIiwgdHlwZSwgYCgke3R5cGVvZiB0eXBlfSlgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVmICE9IG51bGwgJiYgcGFyZW50Q29tcG9uZW50KSB7XG4gICAgICBzZXRSZWYocmVmLCBuMSAmJiBuMS5yZWYsIHBhcmVudFN1c3BlbnNlLCBuMiB8fCBuMSwgIW4yKTtcbiAgICB9IGVsc2UgaWYgKHJlZiA9PSBudWxsICYmIG4xICYmIG4xLnJlZiAhPSBudWxsKSB7XG4gICAgICBzZXRSZWYobjEucmVmLCBudWxsLCBwYXJlbnRTdXNwZW5zZSwgbjEsIHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcHJvY2Vzc1RleHQgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvcikgPT4ge1xuICAgIGlmIChuMSA9PSBudWxsKSB7XG4gICAgICBob3N0SW5zZXJ0KFxuICAgICAgICBuMi5lbCA9IGhvc3RDcmVhdGVUZXh0KG4yLmNoaWxkcmVuKSxcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBhbmNob3JcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVsID0gbjIuZWwgPSBuMS5lbDtcbiAgICAgIGlmIChuMi5jaGlsZHJlbiAhPT0gbjEuY2hpbGRyZW4pIHtcbiAgICAgICAgaG9zdFNldFRleHQoZWwsIG4yLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IHByb2Nlc3NDb21tZW50Tm9kZSA9IChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKSA9PiB7XG4gICAgaWYgKG4xID09IG51bGwpIHtcbiAgICAgIGhvc3RJbnNlcnQoXG4gICAgICAgIG4yLmVsID0gaG9zdENyZWF0ZUNvbW1lbnQobjIuY2hpbGRyZW4gfHwgXCJcIiksXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuMi5lbCA9IG4xLmVsO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgbW91bnRTdGF0aWNOb2RlID0gKG4yLCBjb250YWluZXIsIGFuY2hvciwgbmFtZXNwYWNlKSA9PiB7XG4gICAgW24yLmVsLCBuMi5hbmNob3JdID0gaG9zdEluc2VydFN0YXRpY0NvbnRlbnQoXG4gICAgICBuMi5jaGlsZHJlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGFuY2hvcixcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIG4yLmVsLFxuICAgICAgbjIuYW5jaG9yXG4gICAgKTtcbiAgfTtcbiAgY29uc3QgcGF0Y2hTdGF0aWNOb2RlID0gKG4xLCBuMiwgY29udGFpbmVyLCBuYW1lc3BhY2UpID0+IHtcbiAgICBpZiAobjIuY2hpbGRyZW4gIT09IG4xLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBob3N0TmV4dFNpYmxpbmcobjEuYW5jaG9yKTtcbiAgICAgIHJlbW92ZVN0YXRpY05vZGUobjEpO1xuICAgICAgW24yLmVsLCBuMi5hbmNob3JdID0gaG9zdEluc2VydFN0YXRpY0NvbnRlbnQoXG4gICAgICAgIG4yLmNoaWxkcmVuLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgbmFtZXNwYWNlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuMi5lbCA9IG4xLmVsO1xuICAgICAgbjIuYW5jaG9yID0gbjEuYW5jaG9yO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgbW92ZVN0YXRpY05vZGUgPSAoeyBlbCwgYW5jaG9yIH0sIGNvbnRhaW5lciwgbmV4dFNpYmxpbmcpID0+IHtcbiAgICBsZXQgbmV4dDtcbiAgICB3aGlsZSAoZWwgJiYgZWwgIT09IGFuY2hvcikge1xuICAgICAgbmV4dCA9IGhvc3ROZXh0U2libGluZyhlbCk7XG4gICAgICBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIG5leHRTaWJsaW5nKTtcbiAgICAgIGVsID0gbmV4dDtcbiAgICB9XG4gICAgaG9zdEluc2VydChhbmNob3IsIGNvbnRhaW5lciwgbmV4dFNpYmxpbmcpO1xuICB9O1xuICBjb25zdCByZW1vdmVTdGF0aWNOb2RlID0gKHsgZWwsIGFuY2hvciB9KSA9PiB7XG4gICAgbGV0IG5leHQ7XG4gICAgd2hpbGUgKGVsICYmIGVsICE9PSBhbmNob3IpIHtcbiAgICAgIG5leHQgPSBob3N0TmV4dFNpYmxpbmcoZWwpO1xuICAgICAgaG9zdFJlbW92ZShlbCk7XG4gICAgICBlbCA9IG5leHQ7XG4gICAgfVxuICAgIGhvc3RSZW1vdmUoYW5jaG9yKTtcbiAgfTtcbiAgY29uc3QgcHJvY2Vzc0VsZW1lbnQgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xuICAgIGlmIChuMi50eXBlID09PSBcInN2Z1wiKSB7XG4gICAgICBuYW1lc3BhY2UgPSBcInN2Z1wiO1xuICAgIH0gZWxzZSBpZiAobjIudHlwZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgIG5hbWVzcGFjZSA9IFwibWF0aG1sXCI7XG4gICAgfVxuICAgIGlmIChuMSA9PSBudWxsKSB7XG4gICAgICBtb3VudEVsZW1lbnQoXG4gICAgICAgIG4yLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9ICEhKG4xLmVsICYmIG4xLmVsLl9pc1Z1ZUNFKSA/IG4xLmVsIDogbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50KSB7XG4gICAgICAgICAgY3VzdG9tRWxlbWVudC5fYmVnaW5QYXRjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHBhdGNoRWxlbWVudChcbiAgICAgICAgICBuMSxcbiAgICAgICAgICBuMixcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50KSB7XG4gICAgICAgICAgY3VzdG9tRWxlbWVudC5fZW5kUGF0Y2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgbW91bnRFbGVtZW50ID0gKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xuICAgIGxldCBlbDtcbiAgICBsZXQgdm5vZGVIb29rO1xuICAgIGNvbnN0IHsgcHJvcHMsIHNoYXBlRmxhZywgdHJhbnNpdGlvbiwgZGlycyB9ID0gdm5vZGU7XG4gICAgZWwgPSB2bm9kZS5lbCA9IGhvc3RDcmVhdGVFbGVtZW50KFxuICAgICAgdm5vZGUudHlwZSxcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIHByb3BzICYmIHByb3BzLmlzLFxuICAgICAgcHJvcHNcbiAgICApO1xuICAgIGlmIChzaGFwZUZsYWcgJiA4KSB7XG4gICAgICBob3N0U2V0RWxlbWVudFRleHQoZWwsIHZub2RlLmNoaWxkcmVuKTtcbiAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICBtb3VudENoaWxkcmVuKFxuICAgICAgICB2bm9kZS5jaGlsZHJlbixcbiAgICAgICAgZWwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIHJlc29sdmVDaGlsZHJlbk5hbWVzcGFjZSh2bm9kZSwgbmFtZXNwYWNlKSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkaXJzKSB7XG4gICAgICBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwiY3JlYXRlZFwiKTtcbiAgICB9XG4gICAgc2V0U2NvcGVJZChlbCwgdm5vZGUsIHZub2RlLnNjb3BlSWQsIHNsb3RTY29wZUlkcywgcGFyZW50Q29tcG9uZW50KTtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmIChrZXkgIT09IFwidmFsdWVcIiAmJiAhaXNSZXNlcnZlZFByb3Aoa2V5KSkge1xuICAgICAgICAgIGhvc3RQYXRjaFByb3AoZWwsIGtleSwgbnVsbCwgcHJvcHNba2V5XSwgbmFtZXNwYWNlLCBwYXJlbnRDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIHByb3BzKSB7XG4gICAgICAgIGhvc3RQYXRjaFByb3AoZWwsIFwidmFsdWVcIiwgbnVsbCwgcHJvcHMudmFsdWUsIG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgICBpZiAodm5vZGVIb29rID0gcHJvcHMub25Wbm9kZUJlZm9yZU1vdW50KSB7XG4gICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgIGRlZihlbCwgXCJfX3Zub2RlXCIsIHZub2RlLCB0cnVlKTtcbiAgICAgIGRlZihlbCwgXCJfX3Z1ZVBhcmVudENvbXBvbmVudFwiLCBwYXJlbnRDb21wb25lbnQsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoZGlycykge1xuICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBcImJlZm9yZU1vdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcyA9IG5lZWRUcmFuc2l0aW9uKHBhcmVudFN1c3BlbnNlLCB0cmFuc2l0aW9uKTtcbiAgICBpZiAobmVlZENhbGxUcmFuc2l0aW9uSG9va3MpIHtcbiAgICAgIHRyYW5zaXRpb24uYmVmb3JlRW50ZXIoZWwpO1xuICAgIH1cbiAgICBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgaWYgKCh2bm9kZUhvb2sgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlTW91bnRlZCkgfHwgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MgfHwgZGlycykge1xuICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdm5vZGVIb29rICYmIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xuICAgICAgICBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcyAmJiB0cmFuc2l0aW9uLmVudGVyKGVsKTtcbiAgICAgICAgZGlycyAmJiBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwibW91bnRlZFwiKTtcbiAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldFNjb3BlSWQgPSAoZWwsIHZub2RlLCBzY29wZUlkLCBzbG90U2NvcGVJZHMsIHBhcmVudENvbXBvbmVudCkgPT4ge1xuICAgIGlmIChzY29wZUlkKSB7XG4gICAgICBob3N0U2V0U2NvcGVJZChlbCwgc2NvcGVJZCk7XG4gICAgfVxuICAgIGlmIChzbG90U2NvcGVJZHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xvdFNjb3BlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGhvc3RTZXRTY29wZUlkKGVsLCBzbG90U2NvcGVJZHNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICBsZXQgc3ViVHJlZSA9IHBhcmVudENvbXBvbmVudC5zdWJUcmVlO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc3ViVHJlZS5wYXRjaEZsYWcgPiAwICYmIHN1YlRyZWUucGF0Y2hGbGFnICYgMjA0OCkge1xuICAgICAgICBzdWJUcmVlID0gZmlsdGVyU2luZ2xlUm9vdChzdWJUcmVlLmNoaWxkcmVuKSB8fCBzdWJUcmVlO1xuICAgICAgfVxuICAgICAgaWYgKHZub2RlID09PSBzdWJUcmVlIHx8IGlzU3VzcGVuc2Uoc3ViVHJlZS50eXBlKSAmJiAoc3ViVHJlZS5zc0NvbnRlbnQgPT09IHZub2RlIHx8IHN1YlRyZWUuc3NGYWxsYmFjayA9PT0gdm5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFZOb2RlID0gcGFyZW50Q29tcG9uZW50LnZub2RlO1xuICAgICAgICBzZXRTY29wZUlkKFxuICAgICAgICAgIGVsLFxuICAgICAgICAgIHBhcmVudFZOb2RlLFxuICAgICAgICAgIHBhcmVudFZOb2RlLnNjb3BlSWQsXG4gICAgICAgICAgcGFyZW50Vk5vZGUuc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudC5wYXJlbnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IG1vdW50Q2hpbGRyZW4gPSAoY2hpbGRyZW4sIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCBzdGFydCA9IDApID0+IHtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXSA9IG9wdGltaXplZCA/IGNsb25lSWZNb3VudGVkKGNoaWxkcmVuW2ldKSA6IG5vcm1hbGl6ZVZOb2RlKGNoaWxkcmVuW2ldKTtcbiAgICAgIHBhdGNoKFxuICAgICAgICBudWxsLFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBhbmNob3IsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICk7XG4gICAgfVxuICB9O1xuICBjb25zdCBwYXRjaEVsZW1lbnQgPSAobjEsIG4yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XG4gICAgY29uc3QgZWwgPSBuMi5lbCA9IG4xLmVsO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xuICAgICAgZWwuX192bm9kZSA9IG4yO1xuICAgIH1cbiAgICBsZXQgeyBwYXRjaEZsYWcsIGR5bmFtaWNDaGlsZHJlbiwgZGlycyB9ID0gbjI7XG4gICAgcGF0Y2hGbGFnIHw9IG4xLnBhdGNoRmxhZyAmIDE2O1xuICAgIGNvbnN0IG9sZFByb3BzID0gbjEucHJvcHMgfHwgRU1QVFlfT0JKO1xuICAgIGNvbnN0IG5ld1Byb3BzID0gbjIucHJvcHMgfHwgRU1QVFlfT0JKO1xuICAgIGxldCB2bm9kZUhvb2s7XG4gICAgcGFyZW50Q29tcG9uZW50ICYmIHRvZ2dsZVJlY3Vyc2UocGFyZW50Q29tcG9uZW50LCBmYWxzZSk7XG4gICAgaWYgKHZub2RlSG9vayA9IG5ld1Byb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpIHtcbiAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgbjIsIG4xKTtcbiAgICB9XG4gICAgaWYgKGRpcnMpIHtcbiAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sobjIsIG4xLCBwYXJlbnRDb21wb25lbnQsIFwiYmVmb3JlVXBkYXRlXCIpO1xuICAgIH1cbiAgICBwYXJlbnRDb21wb25lbnQgJiYgdG9nZ2xlUmVjdXJzZShwYXJlbnRDb21wb25lbnQsIHRydWUpO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzSG1yVXBkYXRpbmcpIHtcbiAgICAgIHBhdGNoRmxhZyA9IDA7XG4gICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgIGR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XG4gICAgfVxuICAgIGlmIChvbGRQcm9wcy5pbm5lckhUTUwgJiYgbmV3UHJvcHMuaW5uZXJIVE1MID09IG51bGwgfHwgb2xkUHJvcHMudGV4dENvbnRlbnQgJiYgbmV3UHJvcHMudGV4dENvbnRlbnQgPT0gbnVsbCkge1xuICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGVsLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKGR5bmFtaWNDaGlsZHJlbikge1xuICAgICAgcGF0Y2hCbG9ja0NoaWxkcmVuKFxuICAgICAgICBuMS5keW5hbWljQ2hpbGRyZW4sXG4gICAgICAgIGR5bmFtaWNDaGlsZHJlbixcbiAgICAgICAgZWwsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIHJlc29sdmVDaGlsZHJlbk5hbWVzcGFjZShuMiwgbmFtZXNwYWNlKSxcbiAgICAgICAgc2xvdFNjb3BlSWRzXG4gICAgICApO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIW9wdGltaXplZCkge1xuICAgICAgcGF0Y2hDaGlsZHJlbihcbiAgICAgICAgbjEsXG4gICAgICAgIG4yLFxuICAgICAgICBlbCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgcmVzb2x2ZUNoaWxkcmVuTmFtZXNwYWNlKG4yLCBuYW1lc3BhY2UpLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocGF0Y2hGbGFnID4gMCkge1xuICAgICAgaWYgKHBhdGNoRmxhZyAmIDE2KSB7XG4gICAgICAgIHBhdGNoUHJvcHMoZWwsIG9sZFByb3BzLCBuZXdQcm9wcywgcGFyZW50Q29tcG9uZW50LCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDIpIHtcbiAgICAgICAgICBpZiAob2xkUHJvcHMuY2xhc3MgIT09IG5ld1Byb3BzLmNsYXNzKSB7XG4gICAgICAgICAgICBob3N0UGF0Y2hQcm9wKGVsLCBcImNsYXNzXCIsIG51bGwsIG5ld1Byb3BzLmNsYXNzLCBuYW1lc3BhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0Y2hGbGFnICYgNCkge1xuICAgICAgICAgIGhvc3RQYXRjaFByb3AoZWwsIFwic3R5bGVcIiwgb2xkUHJvcHMuc3R5bGUsIG5ld1Byb3BzLnN0eWxlLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRjaEZsYWcgJiA4KSB7XG4gICAgICAgICAgY29uc3QgcHJvcHNUb1VwZGF0ZSA9IG4yLmR5bmFtaWNQcm9wcztcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzVG9VcGRhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHByb3BzVG9VcGRhdGVbaV07XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gb2xkUHJvcHNba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXdQcm9wc1trZXldO1xuICAgICAgICAgICAgaWYgKG5leHQgIT09IHByZXYgfHwga2V5ID09PSBcInZhbHVlXCIpIHtcbiAgICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwga2V5LCBwcmV2LCBuZXh0LCBuYW1lc3BhY2UsIHBhcmVudENvbXBvbmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGF0Y2hGbGFnICYgMSkge1xuICAgICAgICBpZiAobjEuY2hpbGRyZW4gIT09IG4yLmNoaWxkcmVuKSB7XG4gICAgICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGVsLCBuMi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFvcHRpbWl6ZWQgJiYgZHluYW1pY0NoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHBhdGNoUHJvcHMoZWwsIG9sZFByb3BzLCBuZXdQcm9wcywgcGFyZW50Q29tcG9uZW50LCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgICBpZiAoKHZub2RlSG9vayA9IG5ld1Byb3BzLm9uVm5vZGVVcGRhdGVkKSB8fCBkaXJzKSB7XG4gICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2bm9kZUhvb2sgJiYgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCBuMiwgbjEpO1xuICAgICAgICBkaXJzICYmIGludm9rZURpcmVjdGl2ZUhvb2sobjIsIG4xLCBwYXJlbnRDb21wb25lbnQsIFwidXBkYXRlZFwiKTtcbiAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHBhdGNoQmxvY2tDaGlsZHJlbiA9IChvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4sIGZhbGxiYWNrQ29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcykgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5baV07XG4gICAgICBjb25zdCBuZXdWTm9kZSA9IG5ld0NoaWxkcmVuW2ldO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gKFxuICAgICAgICAvLyBvbGRWTm9kZSBtYXkgYmUgYW4gZXJyb3JlZCBhc3luYyBzZXR1cCgpIGNvbXBvbmVudCBpbnNpZGUgU3VzcGVuc2VcbiAgICAgICAgLy8gd2hpY2ggd2lsbCBub3QgaGF2ZSBhIG1vdW50ZWQgZWxlbWVudFxuICAgICAgICBvbGRWTm9kZS5lbCAmJiAvLyAtIEluIHRoZSBjYXNlIG9mIGEgRnJhZ21lbnQsIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgYWN0dWFsIHBhcmVudFxuICAgICAgICAvLyBvZiB0aGUgRnJhZ21lbnQgaXRzZWxmIHNvIGl0IGNhbiBtb3ZlIGl0cyBjaGlsZHJlbi5cbiAgICAgICAgKG9sZFZOb2RlLnR5cGUgPT09IEZyYWdtZW50IHx8IC8vIC0gSW4gdGhlIGNhc2Ugb2YgZGlmZmVyZW50IG5vZGVzLCB0aGVyZSBpcyBnb2luZyB0byBiZSBhIHJlcGxhY2VtZW50XG4gICAgICAgIC8vIHdoaWNoIGFsc28gcmVxdWlyZXMgdGhlIGNvcnJlY3QgcGFyZW50IGNvbnRhaW5lclxuICAgICAgICAhaXNTYW1lVk5vZGVUeXBlKG9sZFZOb2RlLCBuZXdWTm9kZSkgfHwgLy8gLSBJbiB0aGUgY2FzZSBvZiBhIGNvbXBvbmVudCwgaXQgY291bGQgY29udGFpbiBhbnl0aGluZy5cbiAgICAgICAgb2xkVk5vZGUuc2hhcGVGbGFnICYgKDYgfCA2NCB8IDEyOCkpID8gaG9zdFBhcmVudE5vZGUob2xkVk5vZGUuZWwpIDogKFxuICAgICAgICAgIC8vIEluIG90aGVyIGNhc2VzLCB0aGUgcGFyZW50IGNvbnRhaW5lciBpcyBub3QgYWN0dWFsbHkgdXNlZCBzbyB3ZVxuICAgICAgICAgIC8vIGp1c3QgcGFzcyB0aGUgYmxvY2sgZWxlbWVudCBoZXJlIHRvIGF2b2lkIGEgRE9NIHBhcmVudE5vZGUgY2FsbC5cbiAgICAgICAgICBmYWxsYmFja0NvbnRhaW5lclxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcGF0Y2goXG4gICAgICAgIG9sZFZOb2RlLFxuICAgICAgICBuZXdWTm9kZSxcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHBhdGNoUHJvcHMgPSAoZWwsIG9sZFByb3BzLCBuZXdQcm9wcywgcGFyZW50Q29tcG9uZW50LCBuYW1lc3BhY2UpID0+IHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzKSB7XG4gICAgICBpZiAob2xkUHJvcHMgIT09IEVNUFRZX09CSikge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvbGRQcm9wcykge1xuICAgICAgICAgIGlmICghaXNSZXNlcnZlZFByb3Aoa2V5KSAmJiAhKGtleSBpbiBuZXdQcm9wcykpIHtcbiAgICAgICAgICAgIGhvc3RQYXRjaFByb3AoXG4gICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIG9sZFByb3BzW2tleV0sXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgICAgaWYgKGlzUmVzZXJ2ZWRQcm9wKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBuZXh0ID0gbmV3UHJvcHNba2V5XTtcbiAgICAgICAgY29uc3QgcHJldiA9IG9sZFByb3BzW2tleV07XG4gICAgICAgIGlmIChuZXh0ICE9PSBwcmV2ICYmIGtleSAhPT0gXCJ2YWx1ZVwiKSB7XG4gICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwga2V5LCBwcmV2LCBuZXh0LCBuYW1lc3BhY2UsIHBhcmVudENvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcInZhbHVlXCIgaW4gbmV3UHJvcHMpIHtcbiAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwgXCJ2YWx1ZVwiLCBvbGRQcm9wcy52YWx1ZSwgbmV3UHJvcHMudmFsdWUsIG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBwcm9jZXNzRnJhZ21lbnQgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xuICAgIGNvbnN0IGZyYWdtZW50U3RhcnRBbmNob3IgPSBuMi5lbCA9IG4xID8gbjEuZWwgOiBob3N0Q3JlYXRlVGV4dChcIlwiKTtcbiAgICBjb25zdCBmcmFnbWVudEVuZEFuY2hvciA9IG4yLmFuY2hvciA9IG4xID8gbjEuYW5jaG9yIDogaG9zdENyZWF0ZVRleHQoXCJcIik7XG4gICAgbGV0IHsgcGF0Y2hGbGFnLCBkeW5hbWljQ2hpbGRyZW4sIHNsb3RTY29wZUlkczogZnJhZ21lbnRTbG90U2NvcGVJZHMgfSA9IG4yO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIC8vICM1NTIzIGRldiByb290IGZyYWdtZW50IG1heSBpbmhlcml0IGRpcmVjdGl2ZXNcbiAgICAoaXNIbXJVcGRhdGluZyB8fCBwYXRjaEZsYWcgJiAyMDQ4KSkge1xuICAgICAgcGF0Y2hGbGFnID0gMDtcbiAgICAgIG9wdGltaXplZCA9IGZhbHNlO1xuICAgICAgZHluYW1pY0NoaWxkcmVuID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZyYWdtZW50U2xvdFNjb3BlSWRzKSB7XG4gICAgICBzbG90U2NvcGVJZHMgPSBzbG90U2NvcGVJZHMgPyBzbG90U2NvcGVJZHMuY29uY2F0KGZyYWdtZW50U2xvdFNjb3BlSWRzKSA6IGZyYWdtZW50U2xvdFNjb3BlSWRzO1xuICAgIH1cbiAgICBpZiAobjEgPT0gbnVsbCkge1xuICAgICAgaG9zdEluc2VydChmcmFnbWVudFN0YXJ0QW5jaG9yLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgICBob3N0SW5zZXJ0KGZyYWdtZW50RW5kQW5jaG9yLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgICBtb3VudENoaWxkcmVuKFxuICAgICAgICAvLyAjMTAwMDdcbiAgICAgICAgLy8gc3VjaCBmcmFnbWVudCBsaWtlIGA8PjwvPmAgd2lsbCBiZSBjb21waWxlZCBpbnRvXG4gICAgICAgIC8vIGEgZnJhZ21lbnQgd2hpY2ggZG9lc24ndCBoYXZlIGEgY2hpbGRyZW4uXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSBmYWxsYmFjayB0byBhbiBlbXB0eSBhcnJheVxuICAgICAgICBuMi5jaGlsZHJlbiB8fCBbXSxcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBmcmFnbWVudEVuZEFuY2hvcixcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhdGNoRmxhZyA+IDAgJiYgcGF0Y2hGbGFnICYgNjQgJiYgZHluYW1pY0NoaWxkcmVuICYmIC8vICMyNzE1IHRoZSBwcmV2aW91cyBmcmFnbWVudCBjb3VsZCd2ZSBiZWVuIGEgQkFJTGVkIG9uZSBhcyBhIHJlc3VsdFxuICAgICAgLy8gb2YgcmVuZGVyU2xvdCgpIHdpdGggbm8gdmFsaWQgY2hpbGRyZW5cbiAgICAgIG4xLmR5bmFtaWNDaGlsZHJlbikge1xuICAgICAgICBwYXRjaEJsb2NrQ2hpbGRyZW4oXG4gICAgICAgICAgbjEuZHluYW1pY0NoaWxkcmVuLFxuICAgICAgICAgIGR5bmFtaWNDaGlsZHJlbixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuKG4xLCBuMik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgLy8gIzIwODAgaWYgdGhlIHN0YWJsZSBmcmFnbWVudCBoYXMgYSBrZXksIGl0J3MgYSA8dGVtcGxhdGUgdi1mb3I+IHRoYXQgbWF5XG4gICAgICAgICAgLy8gIGdldCBtb3ZlZCBhcm91bmQuIE1ha2Ugc3VyZSBhbGwgcm9vdCBsZXZlbCB2bm9kZXMgaW5oZXJpdCBlbC5cbiAgICAgICAgICAvLyAjMjEzNCBvciBpZiBpdCdzIGEgY29tcG9uZW50IHJvb3QsIGl0IG1heSBhbHNvIGdldCBtb3ZlZCBhcm91bmRcbiAgICAgICAgICAvLyBhcyB0aGUgY29tcG9uZW50IGlzIGJlaW5nIG1vdmVkLlxuICAgICAgICAgIG4yLmtleSAhPSBudWxsIHx8IHBhcmVudENvbXBvbmVudCAmJiBuMiA9PT0gcGFyZW50Q29tcG9uZW50LnN1YlRyZWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihcbiAgICAgICAgICAgIG4xLFxuICAgICAgICAgICAgbjIsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAvKiBzaGFsbG93ICovXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0Y2hDaGlsZHJlbihcbiAgICAgICAgICBuMSxcbiAgICAgICAgICBuMixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgZnJhZ21lbnRFbmRBbmNob3IsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50ID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBuMi5zbG90U2NvcGVJZHMgPSBzbG90U2NvcGVJZHM7XG4gICAgaWYgKG4xID09IG51bGwpIHtcbiAgICAgIGlmIChuMi5zaGFwZUZsYWcgJiA1MTIpIHtcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LmN0eC5hY3RpdmF0ZShcbiAgICAgICAgICBuMixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vdW50Q29tcG9uZW50KFxuICAgICAgICAgIG4yLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlQ29tcG9uZW50KG4xLCBuMiwgb3B0aW1pemVkKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1vdW50Q29tcG9uZW50ID0gKGluaXRpYWxWTm9kZSwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgb3B0aW1pemVkKSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSAoaW5pdGlhbFZOb2RlLmNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlKFxuICAgICAgaW5pdGlhbFZOb2RlLFxuICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgcGFyZW50U3VzcGVuc2VcbiAgICApKTtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBpbnN0YW5jZS50eXBlLl9faG1ySWQpIHtcbiAgICAgIHJlZ2lzdGVySE1SKGluc3RhbmNlKTtcbiAgICB9XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHB1c2hXYXJuaW5nQ29udGV4dChpbml0aWFsVk5vZGUpO1xuICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgbW91bnRgKTtcbiAgICB9XG4gICAgaWYgKGlzS2VlcEFsaXZlKGluaXRpYWxWTm9kZSkpIHtcbiAgICAgIGluc3RhbmNlLmN0eC5yZW5kZXJlciA9IGludGVybmFscztcbiAgICB9XG4gICAge1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgaW5pdGApO1xuICAgICAgfVxuICAgICAgc2V0dXBDb21wb25lbnQoaW5zdGFuY2UsIGZhbHNlLCBvcHRpbWl6ZWQpO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYGluaXRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgaXNIbXJVcGRhdGluZykgaW5pdGlhbFZOb2RlLmVsID0gbnVsbDtcbiAgICBpZiAoaW5zdGFuY2UuYXN5bmNEZXApIHtcbiAgICAgIHBhcmVudFN1c3BlbnNlICYmIHBhcmVudFN1c3BlbnNlLnJlZ2lzdGVyRGVwKGluc3RhbmNlLCBzZXR1cFJlbmRlckVmZmVjdCwgb3B0aW1pemVkKTtcbiAgICAgIGlmICghaW5pdGlhbFZOb2RlLmVsKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gaW5zdGFuY2Uuc3ViVHJlZSA9IGNyZWF0ZVZOb2RlKENvbW1lbnQpO1xuICAgICAgICBwcm9jZXNzQ29tbWVudE5vZGUobnVsbCwgcGxhY2Vob2xkZXIsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgICAgaW5pdGlhbFZOb2RlLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIuZWw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldHVwUmVuZGVyRWZmZWN0KFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgaW5pdGlhbFZOb2RlLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgcG9wV2FybmluZ0NvbnRleHQoKTtcbiAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBtb3VudGApO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgdXBkYXRlQ29tcG9uZW50ID0gKG4xLCBuMiwgb3B0aW1pemVkKSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuMi5jb21wb25lbnQgPSBuMS5jb21wb25lbnQ7XG4gICAgaWYgKHNob3VsZFVwZGF0ZUNvbXBvbmVudChuMSwgbjIsIG9wdGltaXplZCkpIHtcbiAgICAgIGlmIChpbnN0YW5jZS5hc3luY0RlcCAmJiAhaW5zdGFuY2UuYXN5bmNSZXNvbHZlZCkge1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHB1c2hXYXJuaW5nQ29udGV4dChuMik7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlQ29tcG9uZW50UHJlUmVuZGVyKGluc3RhbmNlLCBuMiwgb3B0aW1pemVkKTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlLm5leHQgPSBuMjtcbiAgICAgICAgaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG4yLmVsID0gbjEuZWw7XG4gICAgICBpbnN0YW5jZS52bm9kZSA9IG4yO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc2V0dXBSZW5kZXJFZmZlY3QgPSAoaW5zdGFuY2UsIGluaXRpYWxWTm9kZSwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIG9wdGltaXplZCkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudFVwZGF0ZUZuID0gKCkgPT4ge1xuICAgICAgaWYgKCFpbnN0YW5jZS5pc01vdW50ZWQpIHtcbiAgICAgICAgbGV0IHZub2RlSG9vaztcbiAgICAgICAgY29uc3QgeyBlbCwgcHJvcHMgfSA9IGluaXRpYWxWTm9kZTtcbiAgICAgICAgY29uc3QgeyBibSwgbSwgcGFyZW50LCByb290LCB0eXBlIH0gPSBpbnN0YW5jZTtcbiAgICAgICAgY29uc3QgaXNBc3luY1dyYXBwZXJWTm9kZSA9IGlzQXN5bmNXcmFwcGVyKGluaXRpYWxWTm9kZSk7XG4gICAgICAgIHRvZ2dsZVJlY3Vyc2UoaW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgaWYgKGJtKSB7XG4gICAgICAgICAgaW52b2tlQXJyYXlGbnMoYm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBc3luY1dyYXBwZXJWTm9kZSAmJiAodm5vZGVIb29rID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZUJlZm9yZU1vdW50KSkge1xuICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudCwgaW5pdGlhbFZOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0b2dnbGVSZWN1cnNlKGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgaWYgKGVsICYmIGh5ZHJhdGVOb2RlKSB7XG4gICAgICAgICAgY29uc3QgaHlkcmF0ZVN1YlRyZWUgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc3RhbmNlLnN1YlRyZWUgPSByZW5kZXJDb21wb25lbnRSb290KGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYGh5ZHJhdGVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGh5ZHJhdGVOb2RlKFxuICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgaW5zdGFuY2Uuc3ViVHJlZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYGh5ZHJhdGVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChpc0FzeW5jV3JhcHBlclZOb2RlICYmIHR5cGUuX19hc3luY0h5ZHJhdGUpIHtcbiAgICAgICAgICAgIHR5cGUuX19hc3luY0h5ZHJhdGUoXG4gICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgaHlkcmF0ZVN1YlRyZWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh5ZHJhdGVTdWJUcmVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChyb290LmNlICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgX2RlZiBpcyBwcml2YXRlXG4gICAgICAgICAgcm9vdC5jZS5fZGVmLnNoYWRvd1Jvb3QgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb290LmNlLl9pbmplY3RDaGlsZFN0eWxlKHR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSBpbnN0YW5jZS5zdWJUcmVlID0gcmVuZGVyQ29tcG9uZW50Um9vdChpbnN0YW5jZSk7XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHBhdGNoYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhdGNoKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHN1YlRyZWUsXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgbmFtZXNwYWNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYHBhdGNoYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluaXRpYWxWTm9kZS5lbCA9IHN1YlRyZWUuZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QobSwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBc3luY1dyYXBwZXJWTm9kZSAmJiAodm5vZGVIb29rID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZU1vdW50ZWQpKSB7XG4gICAgICAgICAgY29uc3Qgc2NvcGVkSW5pdGlhbFZOb2RlID0gaW5pdGlhbFZOb2RlO1xuICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdChcbiAgICAgICAgICAgICgpID0+IGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudCwgc2NvcGVkSW5pdGlhbFZOb2RlKSxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5pdGlhbFZOb2RlLnNoYXBlRmxhZyAmIDI1NiB8fCBwYXJlbnQgJiYgaXNBc3luY1dyYXBwZXIocGFyZW50LnZub2RlKSAmJiBwYXJlbnQudm5vZGUuc2hhcGVGbGFnICYgMjU2KSB7XG4gICAgICAgICAgaW5zdGFuY2UuYSAmJiBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoaW5zdGFuY2UuYSwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlLmlzTW91bnRlZCA9IHRydWU7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xuICAgICAgICAgIGRldnRvb2xzQ29tcG9uZW50QWRkZWQoaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGluaXRpYWxWTm9kZSA9IGNvbnRhaW5lciA9IGFuY2hvciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBuZXh0LCBidSwgdSwgcGFyZW50LCB2bm9kZSB9ID0gaW5zdGFuY2U7XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBub25IeWRyYXRlZEFzeW5jUm9vdCA9IGxvY2F0ZU5vbkh5ZHJhdGVkQXN5bmNSb290KGluc3RhbmNlKTtcbiAgICAgICAgICBpZiAobm9uSHlkcmF0ZWRBc3luY1Jvb3QpIHtcbiAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgIG5leHQuZWwgPSB2bm9kZS5lbDtcbiAgICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50UHJlUmVuZGVyKGluc3RhbmNlLCBuZXh0LCBvcHRpbWl6ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9uSHlkcmF0ZWRBc3luY1Jvb3QuYXN5bmNEZXAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRVcGRhdGVGbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG9yaWdpbk5leHQgPSBuZXh0O1xuICAgICAgICBsZXQgdm5vZGVIb29rO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHB1c2hXYXJuaW5nQ29udGV4dChuZXh0IHx8IGluc3RhbmNlLnZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0b2dnbGVSZWN1cnNlKGluc3RhbmNlLCBmYWxzZSk7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgbmV4dC5lbCA9IHZub2RlLmVsO1xuICAgICAgICAgIHVwZGF0ZUNvbXBvbmVudFByZVJlbmRlcihpbnN0YW5jZSwgbmV4dCwgb3B0aW1pemVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0ID0gdm5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1KSB7XG4gICAgICAgICAgaW52b2tlQXJyYXlGbnMoYnUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bm9kZUhvb2sgPSBuZXh0LnByb3BzICYmIG5leHQucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkge1xuICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudCwgbmV4dCwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRvZ2dsZVJlY3Vyc2UoaW5zdGFuY2UsIHRydWUpO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHJlbmRlcmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRUcmVlID0gcmVuZGVyQ29tcG9uZW50Um9vdChpbnN0YW5jZSk7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYHJlbmRlcmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZUcmVlID0gaW5zdGFuY2Uuc3ViVHJlZTtcbiAgICAgICAgaW5zdGFuY2Uuc3ViVHJlZSA9IG5leHRUcmVlO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHBhdGNoYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0Y2goXG4gICAgICAgICAgcHJldlRyZWUsXG4gICAgICAgICAgbmV4dFRyZWUsXG4gICAgICAgICAgLy8gcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgaWYgaXQncyBpbiBhIHRlbGVwb3J0XG4gICAgICAgICAgaG9zdFBhcmVudE5vZGUocHJldlRyZWUuZWwpLFxuICAgICAgICAgIC8vIGFuY2hvciBtYXkgaGF2ZSBjaGFuZ2VkIGlmIGl0J3MgaW4gYSBmcmFnbWVudFxuICAgICAgICAgIGdldE5leHRIb3N0Tm9kZShwcmV2VHJlZSksXG4gICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYHBhdGNoYCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dC5lbCA9IG5leHRUcmVlLmVsO1xuICAgICAgICBpZiAob3JpZ2luTmV4dCA9PT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUhPQ0hvc3RFbChpbnN0YW5jZSwgbmV4dFRyZWUuZWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KHUsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm5vZGVIb29rID0gbmV4dC5wcm9wcyAmJiBuZXh0LnByb3BzLm9uVm5vZGVVcGRhdGVkKSB7XG4gICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4gaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50LCBuZXh0LCB2bm9kZSksXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICAgICAgZGV2dG9vbHNDb21wb25lbnRVcGRhdGVkKGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHBvcFdhcm5pbmdDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGluc3RhbmNlLnNjb3BlLm9uKCk7XG4gICAgY29uc3QgZWZmZWN0ID0gaW5zdGFuY2UuZWZmZWN0ID0gbmV3IFJlYWN0aXZlRWZmZWN0KGNvbXBvbmVudFVwZGF0ZUZuKTtcbiAgICBpbnN0YW5jZS5zY29wZS5vZmYoKTtcbiAgICBjb25zdCB1cGRhdGUgPSBpbnN0YW5jZS51cGRhdGUgPSBlZmZlY3QucnVuLmJpbmQoZWZmZWN0KTtcbiAgICBjb25zdCBqb2IgPSBpbnN0YW5jZS5qb2IgPSBlZmZlY3QucnVuSWZEaXJ0eS5iaW5kKGVmZmVjdCk7XG4gICAgam9iLmkgPSBpbnN0YW5jZTtcbiAgICBqb2IuaWQgPSBpbnN0YW5jZS51aWQ7XG4gICAgZWZmZWN0LnNjaGVkdWxlciA9ICgpID0+IHF1ZXVlSm9iKGpvYik7XG4gICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIGVmZmVjdC5vblRyYWNrID0gaW5zdGFuY2UucnRjID8gKGUpID0+IGludm9rZUFycmF5Rm5zKGluc3RhbmNlLnJ0YywgZSkgOiB2b2lkIDA7XG4gICAgICBlZmZlY3Qub25UcmlnZ2VyID0gaW5zdGFuY2UucnRnID8gKGUpID0+IGludm9rZUFycmF5Rm5zKGluc3RhbmNlLnJ0ZywgZSkgOiB2b2lkIDA7XG4gICAgfVxuICAgIHVwZGF0ZSgpO1xuICB9O1xuICBjb25zdCB1cGRhdGVDb21wb25lbnRQcmVSZW5kZXIgPSAoaW5zdGFuY2UsIG5leHRWTm9kZSwgb3B0aW1pemVkKSA9PiB7XG4gICAgbmV4dFZOb2RlLmNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIGNvbnN0IHByZXZQcm9wcyA9IGluc3RhbmNlLnZub2RlLnByb3BzO1xuICAgIGluc3RhbmNlLnZub2RlID0gbmV4dFZOb2RlO1xuICAgIGluc3RhbmNlLm5leHQgPSBudWxsO1xuICAgIHVwZGF0ZVByb3BzKGluc3RhbmNlLCBuZXh0Vk5vZGUucHJvcHMsIHByZXZQcm9wcywgb3B0aW1pemVkKTtcbiAgICB1cGRhdGVTbG90cyhpbnN0YW5jZSwgbmV4dFZOb2RlLmNoaWxkcmVuLCBvcHRpbWl6ZWQpO1xuICAgIHBhdXNlVHJhY2tpbmcoKTtcbiAgICBmbHVzaFByZUZsdXNoQ2JzKGluc3RhbmNlKTtcbiAgICByZXNldFRyYWNraW5nKCk7XG4gIH07XG4gIGNvbnN0IHBhdGNoQ2hpbGRyZW4gPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgYzEgPSBuMSAmJiBuMS5jaGlsZHJlbjtcbiAgICBjb25zdCBwcmV2U2hhcGVGbGFnID0gbjEgPyBuMS5zaGFwZUZsYWcgOiAwO1xuICAgIGNvbnN0IGMyID0gbjIuY2hpbGRyZW47XG4gICAgY29uc3QgeyBwYXRjaEZsYWcsIHNoYXBlRmxhZyB9ID0gbjI7XG4gICAgaWYgKHBhdGNoRmxhZyA+IDApIHtcbiAgICAgIGlmIChwYXRjaEZsYWcgJiAxMjgpIHtcbiAgICAgICAgcGF0Y2hLZXllZENoaWxkcmVuKFxuICAgICAgICAgIGMxLFxuICAgICAgICAgIGMyLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAocGF0Y2hGbGFnICYgMjU2KSB7XG4gICAgICAgIHBhdGNoVW5rZXllZENoaWxkcmVuKFxuICAgICAgICAgIGMxLFxuICAgICAgICAgIGMyLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNoYXBlRmxhZyAmIDgpIHtcbiAgICAgIGlmIChwcmV2U2hhcGVGbGFnICYgMTYpIHtcbiAgICAgICAgdW5tb3VudENoaWxkcmVuKGMxLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjMiAhPT0gYzEpIHtcbiAgICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGNvbnRhaW5lciwgYzIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJldlNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiAxNikge1xuICAgICAgICAgIHBhdGNoS2V5ZWRDaGlsZHJlbihcbiAgICAgICAgICAgIGMxLFxuICAgICAgICAgICAgYzIsXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5tb3VudENoaWxkcmVuKGMxLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByZXZTaGFwZUZsYWcgJiA4KSB7XG4gICAgICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGNvbnRhaW5lciwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICAgICAgbW91bnRDaGlsZHJlbihcbiAgICAgICAgICAgIGMyLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBwYXRjaFVua2V5ZWRDaGlsZHJlbiA9IChjMSwgYzIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XG4gICAgYzEgPSBjMSB8fCBFTVBUWV9BUlI7XG4gICAgYzIgPSBjMiB8fCBFTVBUWV9BUlI7XG4gICAgY29uc3Qgb2xkTGVuZ3RoID0gYzEubGVuZ3RoO1xuICAgIGNvbnN0IG5ld0xlbmd0aCA9IGMyLmxlbmd0aDtcbiAgICBjb25zdCBjb21tb25MZW5ndGggPSBNYXRoLm1pbihvbGRMZW5ndGgsIG5ld0xlbmd0aCk7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgaSA8IGNvbW1vbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBuZXh0Q2hpbGQgPSBjMltpXSA9IG9wdGltaXplZCA/IGNsb25lSWZNb3VudGVkKGMyW2ldKSA6IG5vcm1hbGl6ZVZOb2RlKGMyW2ldKTtcbiAgICAgIHBhdGNoKFxuICAgICAgICBjMVtpXSxcbiAgICAgICAgbmV4dENoaWxkLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvbGRMZW5ndGggPiBuZXdMZW5ndGgpIHtcbiAgICAgIHVubW91bnRDaGlsZHJlbihcbiAgICAgICAgYzEsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIHRydWUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBjb21tb25MZW5ndGhcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vdW50Q2hpbGRyZW4oXG4gICAgICAgIGMyLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZCxcbiAgICAgICAgY29tbW9uTGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcGF0Y2hLZXllZENoaWxkcmVuID0gKGMxLCBjMiwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgbDIgPSBjMi5sZW5ndGg7XG4gICAgbGV0IGUxID0gYzEubGVuZ3RoIC0gMTtcbiAgICBsZXQgZTIgPSBsMiAtIDE7XG4gICAgd2hpbGUgKGkgPD0gZTEgJiYgaSA8PSBlMikge1xuICAgICAgY29uc3QgbjEgPSBjMVtpXTtcbiAgICAgIGNvbnN0IG4yID0gYzJbaV0gPSBvcHRpbWl6ZWQgPyBjbG9uZUlmTW91bnRlZChjMltpXSkgOiBub3JtYWxpemVWTm9kZShjMltpXSk7XG4gICAgICBpZiAoaXNTYW1lVk5vZGVUeXBlKG4xLCBuMikpIHtcbiAgICAgICAgcGF0Y2goXG4gICAgICAgICAgbjEsXG4gICAgICAgICAgbjIsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgd2hpbGUgKGkgPD0gZTEgJiYgaSA8PSBlMikge1xuICAgICAgY29uc3QgbjEgPSBjMVtlMV07XG4gICAgICBjb25zdCBuMiA9IGMyW2UyXSA9IG9wdGltaXplZCA/IGNsb25lSWZNb3VudGVkKGMyW2UyXSkgOiBub3JtYWxpemVWTm9kZShjMltlMl0pO1xuICAgICAgaWYgKGlzU2FtZVZOb2RlVHlwZShuMSwgbjIpKSB7XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIG4xLFxuICAgICAgICAgIG4yLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlMS0tO1xuICAgICAgZTItLTtcbiAgICB9XG4gICAgaWYgKGkgPiBlMSkge1xuICAgICAgaWYgKGkgPD0gZTIpIHtcbiAgICAgICAgY29uc3QgbmV4dFBvcyA9IGUyICsgMTtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gbmV4dFBvcyA8IGwyID8gYzJbbmV4dFBvc10uZWwgOiBwYXJlbnRBbmNob3I7XG4gICAgICAgIHdoaWxlIChpIDw9IGUyKSB7XG4gICAgICAgICAgcGF0Y2goXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgYzJbaV0gPSBvcHRpbWl6ZWQgPyBjbG9uZUlmTW91bnRlZChjMltpXSkgOiBub3JtYWxpemVWTm9kZShjMltpXSksXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpID4gZTIpIHtcbiAgICAgIHdoaWxlIChpIDw9IGUxKSB7XG4gICAgICAgIHVubW91bnQoYzFbaV0sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHRydWUpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHMxID0gaTtcbiAgICAgIGNvbnN0IHMyID0gaTtcbiAgICAgIGNvbnN0IGtleVRvTmV3SW5kZXhNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgZm9yIChpID0gczI7IGkgPD0gZTI7IGkrKykge1xuICAgICAgICBjb25zdCBuZXh0Q2hpbGQgPSBjMltpXSA9IG9wdGltaXplZCA/IGNsb25lSWZNb3VudGVkKGMyW2ldKSA6IG5vcm1hbGl6ZVZOb2RlKGMyW2ldKTtcbiAgICAgICAgaWYgKG5leHRDaGlsZC5rZXkgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGtleVRvTmV3SW5kZXhNYXAuaGFzKG5leHRDaGlsZC5rZXkpKSB7XG4gICAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICAgIGBEdXBsaWNhdGUga2V5cyBmb3VuZCBkdXJpbmcgdXBkYXRlOmAsXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG5leHRDaGlsZC5rZXkpLFxuICAgICAgICAgICAgICBgTWFrZSBzdXJlIGtleXMgYXJlIHVuaXF1ZS5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZXlUb05ld0luZGV4TWFwLnNldChuZXh0Q2hpbGQua2V5LCBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGo7XG4gICAgICBsZXQgcGF0Y2hlZCA9IDA7XG4gICAgICBjb25zdCB0b0JlUGF0Y2hlZCA9IGUyIC0gczIgKyAxO1xuICAgICAgbGV0IG1vdmVkID0gZmFsc2U7XG4gICAgICBsZXQgbWF4TmV3SW5kZXhTb0ZhciA9IDA7XG4gICAgICBjb25zdCBuZXdJbmRleFRvT2xkSW5kZXhNYXAgPSBuZXcgQXJyYXkodG9CZVBhdGNoZWQpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRvQmVQYXRjaGVkOyBpKyspIG5ld0luZGV4VG9PbGRJbmRleE1hcFtpXSA9IDA7XG4gICAgICBmb3IgKGkgPSBzMTsgaSA8PSBlMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHByZXZDaGlsZCA9IGMxW2ldO1xuICAgICAgICBpZiAocGF0Y2hlZCA+PSB0b0JlUGF0Y2hlZCkge1xuICAgICAgICAgIHVubW91bnQocHJldkNoaWxkLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3SW5kZXg7XG4gICAgICAgIGlmIChwcmV2Q2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdJbmRleCA9IGtleVRvTmV3SW5kZXhNYXAuZ2V0KHByZXZDaGlsZC5rZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoaiA9IHMyOyBqIDw9IGUyOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChuZXdJbmRleFRvT2xkSW5kZXhNYXBbaiAtIHMyXSA9PT0gMCAmJiBpc1NhbWVWTm9kZVR5cGUocHJldkNoaWxkLCBjMltqXSkpIHtcbiAgICAgICAgICAgICAgbmV3SW5kZXggPSBqO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0luZGV4ID09PSB2b2lkIDApIHtcbiAgICAgICAgICB1bm1vdW50KHByZXZDaGlsZCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3SW5kZXhUb09sZEluZGV4TWFwW25ld0luZGV4IC0gczJdID0gaSArIDE7XG4gICAgICAgICAgaWYgKG5ld0luZGV4ID49IG1heE5ld0luZGV4U29GYXIpIHtcbiAgICAgICAgICAgIG1heE5ld0luZGV4U29GYXIgPSBuZXdJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRjaChcbiAgICAgICAgICAgIHByZXZDaGlsZCxcbiAgICAgICAgICAgIGMyW25ld0luZGV4XSxcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgICAgcGF0Y2hlZCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBpbmNyZWFzaW5nTmV3SW5kZXhTZXF1ZW5jZSA9IG1vdmVkID8gZ2V0U2VxdWVuY2UobmV3SW5kZXhUb09sZEluZGV4TWFwKSA6IEVNUFRZX0FSUjtcbiAgICAgIGogPSBpbmNyZWFzaW5nTmV3SW5kZXhTZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgZm9yIChpID0gdG9CZVBhdGNoZWQgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBzMiArIGk7XG4gICAgICAgIGNvbnN0IG5leHRDaGlsZCA9IGMyW25leHRJbmRleF07XG4gICAgICAgIGNvbnN0IGFuY2hvclZOb2RlID0gYzJbbmV4dEluZGV4ICsgMV07XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IG5leHRJbmRleCArIDEgPCBsMiA/IChcbiAgICAgICAgICAvLyAjMTM1NTksIGZhbGxiYWNrIHRvIGVsIHBsYWNlaG9sZGVyIGZvciB1bnJlc29sdmVkIGFzeW5jIGNvbXBvbmVudFxuICAgICAgICAgIGFuY2hvclZOb2RlLmVsIHx8IGFuY2hvclZOb2RlLnBsYWNlaG9sZGVyXG4gICAgICAgICkgOiBwYXJlbnRBbmNob3I7XG4gICAgICAgIGlmIChuZXdJbmRleFRvT2xkSW5kZXhNYXBbaV0gPT09IDApIHtcbiAgICAgICAgICBwYXRjaChcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBuZXh0Q2hpbGQsXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAobW92ZWQpIHtcbiAgICAgICAgICBpZiAoaiA8IDAgfHwgaSAhPT0gaW5jcmVhc2luZ05ld0luZGV4U2VxdWVuY2Vbal0pIHtcbiAgICAgICAgICAgIG1vdmUobmV4dENoaWxkLCBjb250YWluZXIsIGFuY2hvciwgMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IG1vdmUgPSAodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBtb3ZlVHlwZSwgcGFyZW50U3VzcGVuc2UgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgeyBlbCwgdHlwZSwgdHJhbnNpdGlvbiwgY2hpbGRyZW4sIHNoYXBlRmxhZyB9ID0gdm5vZGU7XG4gICAgaWYgKHNoYXBlRmxhZyAmIDYpIHtcbiAgICAgIG1vdmUodm5vZGUuY29tcG9uZW50LnN1YlRyZWUsIGNvbnRhaW5lciwgYW5jaG9yLCBtb3ZlVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzaGFwZUZsYWcgJiAxMjgpIHtcbiAgICAgIHZub2RlLnN1c3BlbnNlLm1vdmUoY29udGFpbmVyLCBhbmNob3IsIG1vdmVUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNoYXBlRmxhZyAmIDY0KSB7XG4gICAgICB0eXBlLm1vdmUodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBpbnRlcm5hbHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gRnJhZ21lbnQpIHtcbiAgICAgIGhvc3RJbnNlcnQoZWwsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbW92ZShjaGlsZHJlbltpXSwgY29udGFpbmVyLCBhbmNob3IsIG1vdmVUeXBlKTtcbiAgICAgIH1cbiAgICAgIGhvc3RJbnNlcnQodm5vZGUuYW5jaG9yLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBTdGF0aWMpIHtcbiAgICAgIG1vdmVTdGF0aWNOb2RlKHZub2RlLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5lZWRUcmFuc2l0aW9uMiA9IG1vdmVUeXBlICE9PSAyICYmIHNoYXBlRmxhZyAmIDEgJiYgdHJhbnNpdGlvbjtcbiAgICBpZiAobmVlZFRyYW5zaXRpb24yKSB7XG4gICAgICBpZiAobW92ZVR5cGUgPT09IDApIHtcbiAgICAgICAgdHJhbnNpdGlvbi5iZWZvcmVFbnRlcihlbCk7XG4gICAgICAgIGhvc3RJbnNlcnQoZWwsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHRyYW5zaXRpb24uZW50ZXIoZWwpLCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxlYXZlLCBkZWxheUxlYXZlLCBhZnRlckxlYXZlIH0gPSB0cmFuc2l0aW9uO1xuICAgICAgICBjb25zdCByZW1vdmUyID0gKCkgPT4ge1xuICAgICAgICAgIGlmICh2bm9kZS5jdHguaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgIGhvc3RSZW1vdmUoZWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwZXJmb3JtTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGVsLl9pc0xlYXZpbmcpIHtcbiAgICAgICAgICAgIGVsW2xlYXZlQ2JLZXldKFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgIC8qIGNhbmNlbGxlZCAqL1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVhdmUoZWwsICgpID0+IHtcbiAgICAgICAgICAgIHJlbW92ZTIoKTtcbiAgICAgICAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgICAgICAgIGRlbGF5TGVhdmUoZWwsIHJlbW92ZTIsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVyZm9ybUxlYXZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBhbmNob3IpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgdW5tb3VudCA9ICh2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUgPSBmYWxzZSwgb3B0aW1pemVkID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICByZWYsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGR5bmFtaWNDaGlsZHJlbixcbiAgICAgIHNoYXBlRmxhZyxcbiAgICAgIHBhdGNoRmxhZyxcbiAgICAgIGRpcnMsXG4gICAgICBjYWNoZUluZGV4XG4gICAgfSA9IHZub2RlO1xuICAgIGlmIChwYXRjaEZsYWcgPT09IC0yKSB7XG4gICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHJlZiAhPSBudWxsKSB7XG4gICAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgICBzZXRSZWYocmVmLCBudWxsLCBwYXJlbnRTdXNwZW5zZSwgdm5vZGUsIHRydWUpO1xuICAgICAgcmVzZXRUcmFja2luZygpO1xuICAgIH1cbiAgICBpZiAoY2FjaGVJbmRleCAhPSBudWxsKSB7XG4gICAgICBwYXJlbnRDb21wb25lbnQucmVuZGVyQ2FjaGVbY2FjaGVJbmRleF0gPSB2b2lkIDA7XG4gICAgfVxuICAgIGlmIChzaGFwZUZsYWcgJiAyNTYpIHtcbiAgICAgIHBhcmVudENvbXBvbmVudC5jdHguZGVhY3RpdmF0ZSh2bm9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZEludm9rZURpcnMgPSBzaGFwZUZsYWcgJiAxICYmIGRpcnM7XG4gICAgY29uc3Qgc2hvdWxkSW52b2tlVm5vZGVIb29rID0gIWlzQXN5bmNXcmFwcGVyKHZub2RlKTtcbiAgICBsZXQgdm5vZGVIb29rO1xuICAgIGlmIChzaG91bGRJbnZva2VWbm9kZUhvb2sgJiYgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVCZWZvcmVVbm1vdW50KSkge1xuICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XG4gICAgfVxuICAgIGlmIChzaGFwZUZsYWcgJiA2KSB7XG4gICAgICB1bm1vdW50Q29tcG9uZW50KHZub2RlLmNvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgICB2bm9kZS5zdXNwZW5zZS51bm1vdW50KHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRJbnZva2VEaXJzKSB7XG4gICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgXCJiZWZvcmVVbm1vdW50XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHNoYXBlRmxhZyAmIDY0KSB7XG4gICAgICAgIHZub2RlLnR5cGUucmVtb3ZlKFxuICAgICAgICAgIHZub2RlLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBpbnRlcm5hbHMsXG4gICAgICAgICAgZG9SZW1vdmVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZHluYW1pY0NoaWxkcmVuICYmIC8vICM1MTU0XG4gICAgICAvLyB3aGVuIHYtb25jZSBpcyB1c2VkIGluc2lkZSBhIGJsb2NrLCBzZXRCbG9ja1RyYWNraW5nKC0xKSBtYXJrcyB0aGVcbiAgICAgIC8vIHBhcmVudCBibG9jayB3aXRoIGhhc09uY2U6IHRydWVcbiAgICAgIC8vIHNvIHRoYXQgaXQgZG9lc24ndCB0YWtlIHRoZSBmYXN0IHBhdGggZHVyaW5nIHVubW91bnQgLSBvdGhlcndpc2VcbiAgICAgIC8vIGNvbXBvbmVudHMgbmVzdGVkIGluIHYtb25jZSBhcmUgbmV2ZXIgdW5tb3VudGVkLlxuICAgICAgIWR5bmFtaWNDaGlsZHJlbi5oYXNPbmNlICYmIC8vICMxMTUzOiBmYXN0IHBhdGggc2hvdWxkIG5vdCBiZSB0YWtlbiBmb3Igbm9uLXN0YWJsZSAodi1mb3IpIGZyYWdtZW50c1xuICAgICAgKHR5cGUgIT09IEZyYWdtZW50IHx8IHBhdGNoRmxhZyA+IDAgJiYgcGF0Y2hGbGFnICYgNjQpKSB7XG4gICAgICAgIHVubW91bnRDaGlsZHJlbihcbiAgICAgICAgICBkeW5hbWljQ2hpbGRyZW4sXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRnJhZ21lbnQgJiYgcGF0Y2hGbGFnICYgKDEyOCB8IDI1NikgfHwgIW9wdGltaXplZCAmJiBzaGFwZUZsYWcgJiAxNikge1xuICAgICAgICB1bm1vdW50Q2hpbGRyZW4oY2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgfVxuICAgICAgaWYgKGRvUmVtb3ZlKSB7XG4gICAgICAgIHJlbW92ZSh2bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzaG91bGRJbnZva2VWbm9kZUhvb2sgJiYgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVVbm1vdW50ZWQpIHx8IHNob3VsZEludm9rZURpcnMpIHtcbiAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZub2RlSG9vayAmJiBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnRDb21wb25lbnQsIHZub2RlKTtcbiAgICAgICAgc2hvdWxkSW52b2tlRGlycyAmJiBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwidW5tb3VudGVkXCIpO1xuICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVtb3ZlID0gKHZub2RlKSA9PiB7XG4gICAgY29uc3QgeyB0eXBlLCBlbCwgYW5jaG9yLCB0cmFuc2l0aW9uIH0gPSB2bm9kZTtcbiAgICBpZiAodHlwZSA9PT0gRnJhZ21lbnQpIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHZub2RlLnBhdGNoRmxhZyA+IDAgJiYgdm5vZGUucGF0Y2hGbGFnICYgMjA0OCAmJiB0cmFuc2l0aW9uICYmICF0cmFuc2l0aW9uLnBlcnNpc3RlZCkge1xuICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSBDb21tZW50KSB7XG4gICAgICAgICAgICBob3N0UmVtb3ZlKGNoaWxkLmVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlRnJhZ21lbnQoZWwsIGFuY2hvcik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBTdGF0aWMpIHtcbiAgICAgIHJlbW92ZVN0YXRpY05vZGUodm5vZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZXJmb3JtUmVtb3ZlID0gKCkgPT4ge1xuICAgICAgaG9zdFJlbW92ZShlbCk7XG4gICAgICBpZiAodHJhbnNpdGlvbiAmJiAhdHJhbnNpdGlvbi5wZXJzaXN0ZWQgJiYgdHJhbnNpdGlvbi5hZnRlckxlYXZlKSB7XG4gICAgICAgIHRyYW5zaXRpb24uYWZ0ZXJMZWF2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDEgJiYgdHJhbnNpdGlvbiAmJiAhdHJhbnNpdGlvbi5wZXJzaXN0ZWQpIHtcbiAgICAgIGNvbnN0IHsgbGVhdmUsIGRlbGF5TGVhdmUgfSA9IHRyYW5zaXRpb247XG4gICAgICBjb25zdCBwZXJmb3JtTGVhdmUgPSAoKSA9PiBsZWF2ZShlbCwgcGVyZm9ybVJlbW92ZSk7XG4gICAgICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgICAgICBkZWxheUxlYXZlKHZub2RlLmVsLCBwZXJmb3JtUmVtb3ZlLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVyZm9ybUxlYXZlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcmZvcm1SZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlbW92ZUZyYWdtZW50ID0gKGN1ciwgZW5kKSA9PiB7XG4gICAgbGV0IG5leHQ7XG4gICAgd2hpbGUgKGN1ciAhPT0gZW5kKSB7XG4gICAgICBuZXh0ID0gaG9zdE5leHRTaWJsaW5nKGN1cik7XG4gICAgICBob3N0UmVtb3ZlKGN1cik7XG4gICAgICBjdXIgPSBuZXh0O1xuICAgIH1cbiAgICBob3N0UmVtb3ZlKGVuZCk7XG4gIH07XG4gIGNvbnN0IHVubW91bnRDb21wb25lbnQgPSAoaW5zdGFuY2UsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSkgPT4ge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGluc3RhbmNlLnR5cGUuX19obXJJZCkge1xuICAgICAgdW5yZWdpc3RlckhNUihpbnN0YW5jZSk7XG4gICAgfVxuICAgIGNvbnN0IHsgYnVtLCBzY29wZSwgam9iLCBzdWJUcmVlLCB1bSwgbSwgYSB9ID0gaW5zdGFuY2U7XG4gICAgaW52YWxpZGF0ZU1vdW50KG0pO1xuICAgIGludmFsaWRhdGVNb3VudChhKTtcbiAgICBpZiAoYnVtKSB7XG4gICAgICBpbnZva2VBcnJheUZucyhidW0pO1xuICAgIH1cbiAgICBzY29wZS5zdG9wKCk7XG4gICAgaWYgKGpvYikge1xuICAgICAgam9iLmZsYWdzIHw9IDg7XG4gICAgICB1bm1vdW50KHN1YlRyZWUsIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpO1xuICAgIH1cbiAgICBpZiAodW0pIHtcbiAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCh1bSwgcGFyZW50U3VzcGVuc2UpO1xuICAgIH1cbiAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuaXNVbm1vdW50ZWQgPSB0cnVlO1xuICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgIGRldnRvb2xzQ29tcG9uZW50UmVtb3ZlZChpbnN0YW5jZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCB1bm1vdW50Q2hpbGRyZW4gPSAoY2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlID0gZmFsc2UsIG9wdGltaXplZCA9IGZhbHNlLCBzdGFydCA9IDApID0+IHtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdW5tb3VudChjaGlsZHJlbltpXSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUsIG9wdGltaXplZCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBnZXROZXh0SG9zdE5vZGUgPSAodm5vZGUpID0+IHtcbiAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgNikge1xuICAgICAgcmV0dXJuIGdldE5leHRIb3N0Tm9kZSh2bm9kZS5jb21wb25lbnQuc3ViVHJlZSk7XG4gICAgfVxuICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxMjgpIHtcbiAgICAgIHJldHVybiB2bm9kZS5zdXNwZW5zZS5uZXh0KCk7XG4gICAgfVxuICAgIGNvbnN0IGVsID0gaG9zdE5leHRTaWJsaW5nKHZub2RlLmFuY2hvciB8fCB2bm9kZS5lbCk7XG4gICAgY29uc3QgdGVsZXBvcnRFbmQgPSBlbCAmJiBlbFtUZWxlcG9ydEVuZEtleV07XG4gICAgcmV0dXJuIHRlbGVwb3J0RW5kID8gaG9zdE5leHRTaWJsaW5nKHRlbGVwb3J0RW5kKSA6IGVsO1xuICB9O1xuICBsZXQgaXNGbHVzaGluZyA9IGZhbHNlO1xuICBjb25zdCByZW5kZXIgPSAodm5vZGUsIGNvbnRhaW5lciwgbmFtZXNwYWNlKSA9PiB7XG4gICAgaWYgKHZub2RlID09IG51bGwpIHtcbiAgICAgIGlmIChjb250YWluZXIuX3Zub2RlKSB7XG4gICAgICAgIHVubW91bnQoY29udGFpbmVyLl92bm9kZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGNoKFxuICAgICAgICBjb250YWluZXIuX3Zub2RlIHx8IG51bGwsXG4gICAgICAgIHZub2RlLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG5hbWVzcGFjZVxuICAgICAgKTtcbiAgICB9XG4gICAgY29udGFpbmVyLl92bm9kZSA9IHZub2RlO1xuICAgIGlmICghaXNGbHVzaGluZykge1xuICAgICAgaXNGbHVzaGluZyA9IHRydWU7XG4gICAgICBmbHVzaFByZUZsdXNoQ2JzKCk7XG4gICAgICBmbHVzaFBvc3RGbHVzaENicygpO1xuICAgICAgaXNGbHVzaGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaW50ZXJuYWxzID0ge1xuICAgIHA6IHBhdGNoLFxuICAgIHVtOiB1bm1vdW50LFxuICAgIG06IG1vdmUsXG4gICAgcjogcmVtb3ZlLFxuICAgIG10OiBtb3VudENvbXBvbmVudCxcbiAgICBtYzogbW91bnRDaGlsZHJlbixcbiAgICBwYzogcGF0Y2hDaGlsZHJlbixcbiAgICBwYmM6IHBhdGNoQmxvY2tDaGlsZHJlbixcbiAgICBuOiBnZXROZXh0SG9zdE5vZGUsXG4gICAgbzogb3B0aW9uc1xuICB9O1xuICBsZXQgaHlkcmF0ZTtcbiAgbGV0IGh5ZHJhdGVOb2RlO1xuICBpZiAoY3JlYXRlSHlkcmF0aW9uRm5zKSB7XG4gICAgW2h5ZHJhdGUsIGh5ZHJhdGVOb2RlXSA9IGNyZWF0ZUh5ZHJhdGlvbkZucyhcbiAgICAgIGludGVybmFsc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW5kZXIsXG4gICAgaHlkcmF0ZSxcbiAgICBjcmVhdGVBcHA6IGNyZWF0ZUFwcEFQSShyZW5kZXIsIGh5ZHJhdGUpXG4gIH07XG59XG5mdW5jdGlvbiByZXNvbHZlQ2hpbGRyZW5OYW1lc3BhY2UoeyB0eXBlLCBwcm9wcyB9LCBjdXJyZW50TmFtZXNwYWNlKSB7XG4gIHJldHVybiBjdXJyZW50TmFtZXNwYWNlID09PSBcInN2Z1wiICYmIHR5cGUgPT09IFwiZm9yZWlnbk9iamVjdFwiIHx8IGN1cnJlbnROYW1lc3BhY2UgPT09IFwibWF0aG1sXCIgJiYgdHlwZSA9PT0gXCJhbm5vdGF0aW9uLXhtbFwiICYmIHByb3BzICYmIHByb3BzLmVuY29kaW5nICYmIHByb3BzLmVuY29kaW5nLmluY2x1ZGVzKFwiaHRtbFwiKSA/IHZvaWQgMCA6IGN1cnJlbnROYW1lc3BhY2U7XG59XG5mdW5jdGlvbiB0b2dnbGVSZWN1cnNlKHsgZWZmZWN0LCBqb2IgfSwgYWxsb3dlZCkge1xuICBpZiAoYWxsb3dlZCkge1xuICAgIGVmZmVjdC5mbGFncyB8PSAzMjtcbiAgICBqb2IuZmxhZ3MgfD0gNDtcbiAgfSBlbHNlIHtcbiAgICBlZmZlY3QuZmxhZ3MgJj0gLTMzO1xuICAgIGpvYi5mbGFncyAmPSAtNTtcbiAgfVxufVxuZnVuY3Rpb24gbmVlZFRyYW5zaXRpb24ocGFyZW50U3VzcGVuc2UsIHRyYW5zaXRpb24pIHtcbiAgcmV0dXJuICghcGFyZW50U3VzcGVuc2UgfHwgcGFyZW50U3VzcGVuc2UgJiYgIXBhcmVudFN1c3BlbnNlLnBlbmRpbmdCcmFuY2gpICYmIHRyYW5zaXRpb24gJiYgIXRyYW5zaXRpb24ucGVyc2lzdGVkO1xufVxuZnVuY3Rpb24gdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIsIHNoYWxsb3cgPSBmYWxzZSkge1xuICBjb25zdCBjaDEgPSBuMS5jaGlsZHJlbjtcbiAgY29uc3QgY2gyID0gbjIuY2hpbGRyZW47XG4gIGlmIChpc0FycmF5KGNoMSkgJiYgaXNBcnJheShjaDIpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaDEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGMxID0gY2gxW2ldO1xuICAgICAgbGV0IGMyID0gY2gyW2ldO1xuICAgICAgaWYgKGMyLnNoYXBlRmxhZyAmIDEgJiYgIWMyLmR5bmFtaWNDaGlsZHJlbikge1xuICAgICAgICBpZiAoYzIucGF0Y2hGbGFnIDw9IDAgfHwgYzIucGF0Y2hGbGFnID09PSAzMikge1xuICAgICAgICAgIGMyID0gY2gyW2ldID0gY2xvbmVJZk1vdW50ZWQoY2gyW2ldKTtcbiAgICAgICAgICBjMi5lbCA9IGMxLmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2hhbGxvdyAmJiBjMi5wYXRjaEZsYWcgIT09IC0yKVxuICAgICAgICAgIHRyYXZlcnNlU3RhdGljQ2hpbGRyZW4oYzEsIGMyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjMi50eXBlID09PSBUZXh0ICYmIC8vIGF2b2lkIGNhY2hlZCB0ZXh0IG5vZGVzIHJldGFpbmluZyBkZXRhY2hlZCBkb20gbm9kZXNcbiAgICAgIGMyLnBhdGNoRmxhZyAhPT0gLTEpIHtcbiAgICAgICAgYzIuZWwgPSBjMS5lbDtcbiAgICAgIH1cbiAgICAgIGlmIChjMi50eXBlID09PSBDb21tZW50ICYmICFjMi5lbCkge1xuICAgICAgICBjMi5lbCA9IGMxLmVsO1xuICAgICAgfVxuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgYzIuZWwgJiYgKGMyLmVsLl9fdm5vZGUgPSBjMik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRTZXF1ZW5jZShhcnIpIHtcbiAgY29uc3QgcCA9IGFyci5zbGljZSgpO1xuICBjb25zdCByZXN1bHQgPSBbMF07XG4gIGxldCBpLCBqLCB1LCB2LCBjO1xuICBjb25zdCBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBhcnJJID0gYXJyW2ldO1xuICAgIGlmIChhcnJJICE9PSAwKSB7XG4gICAgICBqID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChhcnJbal0gPCBhcnJJKSB7XG4gICAgICAgIHBbaV0gPSBqO1xuICAgICAgICByZXN1bHQucHVzaChpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gMDtcbiAgICAgIHYgPSByZXN1bHQubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlICh1IDwgdikge1xuICAgICAgICBjID0gdSArIHYgPj4gMTtcbiAgICAgICAgaWYgKGFycltyZXN1bHRbY11dIDwgYXJySSkge1xuICAgICAgICAgIHUgPSBjICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2ID0gYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGFyckkgPCBhcnJbcmVzdWx0W3VdXSkge1xuICAgICAgICBpZiAodSA+IDApIHtcbiAgICAgICAgICBwW2ldID0gcmVzdWx0W3UgLSAxXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbdV0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1ID0gcmVzdWx0Lmxlbmd0aDtcbiAgdiA9IHJlc3VsdFt1IC0gMV07XG4gIHdoaWxlICh1LS0gPiAwKSB7XG4gICAgcmVzdWx0W3VdID0gdjtcbiAgICB2ID0gcFt2XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbG9jYXRlTm9uSHlkcmF0ZWRBc3luY1Jvb3QoaW5zdGFuY2UpIHtcbiAgY29uc3Qgc3ViQ29tcG9uZW50ID0gaW5zdGFuY2Uuc3ViVHJlZS5jb21wb25lbnQ7XG4gIGlmIChzdWJDb21wb25lbnQpIHtcbiAgICBpZiAoc3ViQ29tcG9uZW50LmFzeW5jRGVwICYmICFzdWJDb21wb25lbnQuYXN5bmNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuIHN1YkNvbXBvbmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxvY2F0ZU5vbkh5ZHJhdGVkQXN5bmNSb290KHN1YkNvbXBvbmVudCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBpbnZhbGlkYXRlTW91bnQoaG9va3MpIHtcbiAgaWYgKGhvb2tzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKylcbiAgICAgIGhvb2tzW2ldLmZsYWdzIHw9IDg7XG4gIH1cbn1cblxuY29uc3Qgc3NyQ29udGV4dEtleSA9IFN5bWJvbC5mb3IoXCJ2LXNjeFwiKTtcbmNvbnN0IHVzZVNTUkNvbnRleHQgPSAoKSA9PiB7XG4gIHtcbiAgICBjb25zdCBjdHggPSBpbmplY3Qoc3NyQ29udGV4dEtleSk7XG4gICAgaWYgKCFjdHgpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKFxuICAgICAgICBgU2VydmVyIHJlbmRlcmluZyBjb250ZXh0IG5vdCBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIG9ubHkgY2FsbCB1c2VTU1JDb250ZXh0KCkgY29uZGl0aW9uYWxseSBpbiB0aGUgc2VydmVyIGJ1aWxkLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHdhdGNoRWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gd2F0Y2hQb3N0RWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICByZXR1cm4gZG9XYXRjaChcbiAgICBlZmZlY3QsXG4gICAgbnVsbCxcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gZXh0ZW5kKHt9LCBvcHRpb25zLCB7IGZsdXNoOiBcInBvc3RcIiB9KSA6IHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgKTtcbn1cbmZ1bmN0aW9uIHdhdGNoU3luY0VmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRvV2F0Y2goXG4gICAgZWZmZWN0LFxuICAgIG51bGwsXG4gICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IGV4dGVuZCh7fSwgb3B0aW9ucywgeyBmbHVzaDogXCJzeW5jXCIgfSkgOiB7IGZsdXNoOiBcInN5bmNcIiB9XG4gICk7XG59XG5mdW5jdGlvbiB3YXRjaChzb3VyY2UsIGNiLCBvcHRpb25zKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpc0Z1bmN0aW9uKGNiKSkge1xuICAgIHdhcm4kMShcbiAgICAgIGBcXGB3YXRjaChmbiwgb3B0aW9ucz8pXFxgIHNpZ25hdHVyZSBoYXMgYmVlbiBtb3ZlZCB0byBhIHNlcGFyYXRlIEFQSS4gVXNlIFxcYHdhdGNoRWZmZWN0KGZuLCBvcHRpb25zPylcXGAgaW5zdGVhZC4gXFxgd2F0Y2hcXGAgbm93IG9ubHkgc3VwcG9ydHMgXFxgd2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucz8pIHNpZ25hdHVyZS5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZG9XYXRjaChzb3VyY2UsIGNiLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGRvV2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucyA9IEVNUFRZX09CSikge1xuICBjb25zdCB7IGltbWVkaWF0ZSwgZGVlcCwgZmx1c2gsIG9uY2UgfSA9IG9wdGlvbnM7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFjYikge1xuICAgIGlmIChpbW1lZGlhdGUgIT09IHZvaWQgMCkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgd2F0Y2goKSBcImltbWVkaWF0ZVwiIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIHVzaW5nIHRoZSB3YXRjaChzb3VyY2UsIGNhbGxiYWNrLCBvcHRpb25zPykgc2lnbmF0dXJlLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWVwICE9PSB2b2lkIDApIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYHdhdGNoKCkgXCJkZWVwXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIHdhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9uY2UgIT09IHZvaWQgMCkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgd2F0Y2goKSBcIm9uY2VcIiBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyB0aGUgd2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBiYXNlV2F0Y2hPcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIGJhc2VXYXRjaE9wdGlvbnMub25XYXJuID0gd2FybiQxO1xuICBjb25zdCBydW5zSW1tZWRpYXRlbHkgPSBjYiAmJiBpbW1lZGlhdGUgfHwgIWNiICYmIGZsdXNoICE9PSBcInBvc3RcIjtcbiAgbGV0IHNzckNsZWFudXA7XG4gIGlmIChpc0luU1NSQ29tcG9uZW50U2V0dXApIHtcbiAgICBpZiAoZmx1c2ggPT09IFwic3luY1wiKSB7XG4gICAgICBjb25zdCBjdHggPSB1c2VTU1JDb250ZXh0KCk7XG4gICAgICBzc3JDbGVhbnVwID0gY3R4Ll9fd2F0Y2hlckhhbmRsZXMgfHwgKGN0eC5fX3dhdGNoZXJIYW5kbGVzID0gW10pO1xuICAgIH0gZWxzZSBpZiAoIXJ1bnNJbW1lZGlhdGVseSkge1xuICAgICAgY29uc3Qgd2F0Y2hTdG9wSGFuZGxlID0gKCkgPT4ge1xuICAgICAgfTtcbiAgICAgIHdhdGNoU3RvcEhhbmRsZS5zdG9wID0gTk9PUDtcbiAgICAgIHdhdGNoU3RvcEhhbmRsZS5yZXN1bWUgPSBOT09QO1xuICAgICAgd2F0Y2hTdG9wSGFuZGxlLnBhdXNlID0gTk9PUDtcbiAgICAgIHJldHVybiB3YXRjaFN0b3BIYW5kbGU7XG4gICAgfVxuICB9XG4gIGNvbnN0IGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICBiYXNlV2F0Y2hPcHRpb25zLmNhbGwgPSAoZm4sIHR5cGUsIGFyZ3MpID0+IGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGZuLCBpbnN0YW5jZSwgdHlwZSwgYXJncyk7XG4gIGxldCBpc1ByZSA9IGZhbHNlO1xuICBpZiAoZmx1c2ggPT09IFwicG9zdFwiKSB7XG4gICAgYmFzZVdhdGNoT3B0aW9ucy5zY2hlZHVsZXIgPSAoam9iKSA9PiB7XG4gICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3Qoam9iLCBpbnN0YW5jZSAmJiBpbnN0YW5jZS5zdXNwZW5zZSk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChmbHVzaCAhPT0gXCJzeW5jXCIpIHtcbiAgICBpc1ByZSA9IHRydWU7XG4gICAgYmFzZVdhdGNoT3B0aW9ucy5zY2hlZHVsZXIgPSAoam9iLCBpc0ZpcnN0UnVuKSA9PiB7XG4gICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBqb2IoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSm9iKGpvYik7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBiYXNlV2F0Y2hPcHRpb25zLmF1Z21lbnRKb2IgPSAoam9iKSA9PiB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBqb2IuZmxhZ3MgfD0gNDtcbiAgICB9XG4gICAgaWYgKGlzUHJlKSB7XG4gICAgICBqb2IuZmxhZ3MgfD0gMjtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBqb2IuaWQgPSBpbnN0YW5jZS51aWQ7XG4gICAgICAgIGpvYi5pID0gaW5zdGFuY2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCB3YXRjaEhhbmRsZSA9IHdhdGNoJDEoc291cmNlLCBjYiwgYmFzZVdhdGNoT3B0aW9ucyk7XG4gIGlmIChpc0luU1NSQ29tcG9uZW50U2V0dXApIHtcbiAgICBpZiAoc3NyQ2xlYW51cCkge1xuICAgICAgc3NyQ2xlYW51cC5wdXNoKHdhdGNoSGFuZGxlKTtcbiAgICB9IGVsc2UgaWYgKHJ1bnNJbW1lZGlhdGVseSkge1xuICAgICAgd2F0Y2hIYW5kbGUoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdhdGNoSGFuZGxlO1xufVxuZnVuY3Rpb24gaW5zdGFuY2VXYXRjaChzb3VyY2UsIHZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHB1YmxpY1RoaXMgPSB0aGlzLnByb3h5O1xuICBjb25zdCBnZXR0ZXIgPSBpc1N0cmluZyhzb3VyY2UpID8gc291cmNlLmluY2x1ZGVzKFwiLlwiKSA/IGNyZWF0ZVBhdGhHZXR0ZXIocHVibGljVGhpcywgc291cmNlKSA6ICgpID0+IHB1YmxpY1RoaXNbc291cmNlXSA6IHNvdXJjZS5iaW5kKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpO1xuICBsZXQgY2I7XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIGNiID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY2IgPSB2YWx1ZS5oYW5kbGVyO1xuICAgIG9wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuICBjb25zdCByZXNldCA9IHNldEN1cnJlbnRJbnN0YW5jZSh0aGlzKTtcbiAgY29uc3QgcmVzID0gZG9XYXRjaChnZXR0ZXIsIGNiLmJpbmQocHVibGljVGhpcyksIG9wdGlvbnMpO1xuICByZXNldCgpO1xuICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gY3JlYXRlUGF0aEdldHRlcihjdHgsIHBhdGgpIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsZXQgY3VyID0gY3R4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoICYmIGN1cjsgaSsrKSB7XG4gICAgICBjdXIgPSBjdXJbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gY3VyO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VNb2RlbChwcm9wcywgbmFtZSwgb3B0aW9ucyA9IEVNUFRZX09CSikge1xuICBjb25zdCBpID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpKSB7XG4gICAgd2FybiQxKGB1c2VNb2RlbCgpIGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBpbnN0YW5jZS5gKTtcbiAgICByZXR1cm4gcmVmKCk7XG4gIH1cbiAgY29uc3QgY2FtZWxpemVkTmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaS5wcm9wc09wdGlvbnNbMF1bY2FtZWxpemVkTmFtZV0pIHtcbiAgICB3YXJuJDEoYHVzZU1vZGVsKCkgY2FsbGVkIHdpdGggcHJvcCBcIiR7bmFtZX1cIiB3aGljaCBpcyBub3QgZGVjbGFyZWQuYCk7XG4gICAgcmV0dXJuIHJlZigpO1xuICB9XG4gIGNvbnN0IGh5cGhlbmF0ZWROYW1lID0gaHlwaGVuYXRlKG5hbWUpO1xuICBjb25zdCBtb2RpZmllcnMgPSBnZXRNb2RlbE1vZGlmaWVycyhwcm9wcywgY2FtZWxpemVkTmFtZSk7XG4gIGNvbnN0IHJlcyA9IGN1c3RvbVJlZigodHJhY2ssIHRyaWdnZXIpID0+IHtcbiAgICBsZXQgbG9jYWxWYWx1ZTtcbiAgICBsZXQgcHJldlNldFZhbHVlID0gRU1QVFlfT0JKO1xuICAgIGxldCBwcmV2RW1pdHRlZFZhbHVlO1xuICAgIHdhdGNoU3luY0VmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1tjYW1lbGl6ZWROYW1lXTtcbiAgICAgIGlmIChoYXNDaGFuZ2VkKGxvY2FsVmFsdWUsIHByb3BWYWx1ZSkpIHtcbiAgICAgICAgbG9jYWxWYWx1ZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgdHJpZ2dlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHRyYWNrKCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmdldCA/IG9wdGlvbnMuZ2V0KGxvY2FsVmFsdWUpIDogbG9jYWxWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZW1pdHRlZFZhbHVlID0gb3B0aW9ucy5zZXQgPyBvcHRpb25zLnNldCh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgaWYgKCFoYXNDaGFuZ2VkKGVtaXR0ZWRWYWx1ZSwgbG9jYWxWYWx1ZSkgJiYgIShwcmV2U2V0VmFsdWUgIT09IEVNUFRZX09CSiAmJiBoYXNDaGFuZ2VkKHZhbHVlLCBwcmV2U2V0VmFsdWUpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYXdQcm9wcyA9IGkudm5vZGUucHJvcHM7XG4gICAgICAgIGlmICghKHJhd1Byb3BzICYmIC8vIGNoZWNrIGlmIHBhcmVudCBoYXMgcGFzc2VkIHYtbW9kZWxcbiAgICAgICAgKG5hbWUgaW4gcmF3UHJvcHMgfHwgY2FtZWxpemVkTmFtZSBpbiByYXdQcm9wcyB8fCBoeXBoZW5hdGVkTmFtZSBpbiByYXdQcm9wcykgJiYgKGBvblVwZGF0ZToke25hbWV9YCBpbiByYXdQcm9wcyB8fCBgb25VcGRhdGU6JHtjYW1lbGl6ZWROYW1lfWAgaW4gcmF3UHJvcHMgfHwgYG9uVXBkYXRlOiR7aHlwaGVuYXRlZE5hbWV9YCBpbiByYXdQcm9wcykpKSB7XG4gICAgICAgICAgbG9jYWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIHRyaWdnZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpLmVtaXQoYHVwZGF0ZToke25hbWV9YCwgZW1pdHRlZFZhbHVlKTtcbiAgICAgICAgaWYgKGhhc0NoYW5nZWQodmFsdWUsIGVtaXR0ZWRWYWx1ZSkgJiYgaGFzQ2hhbmdlZCh2YWx1ZSwgcHJldlNldFZhbHVlKSAmJiAhaGFzQ2hhbmdlZChlbWl0dGVkVmFsdWUsIHByZXZFbWl0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgdHJpZ2dlcigpO1xuICAgICAgICB9XG4gICAgICAgIHByZXZTZXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBwcmV2RW1pdHRlZFZhbHVlID0gZW1pdHRlZFZhbHVlO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuICByZXNbU3ltYm9sLml0ZXJhdG9yXSA9ICgpID0+IHtcbiAgICBsZXQgaTIgPSAwO1xuICAgIHJldHVybiB7XG4gICAgICBuZXh0KCkge1xuICAgICAgICBpZiAoaTIgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGkyKysgPyBtb2RpZmllcnMgfHwgRU1QVFlfT0JKIDogcmVzLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH07XG4gIHJldHVybiByZXM7XG59XG5jb25zdCBnZXRNb2RlbE1vZGlmaWVycyA9IChwcm9wcywgbW9kZWxOYW1lKSA9PiB7XG4gIHJldHVybiBtb2RlbE5hbWUgPT09IFwibW9kZWxWYWx1ZVwiIHx8IG1vZGVsTmFtZSA9PT0gXCJtb2RlbC12YWx1ZVwiID8gcHJvcHMubW9kZWxNb2RpZmllcnMgOiBwcm9wc1tgJHttb2RlbE5hbWV9TW9kaWZpZXJzYF0gfHwgcHJvcHNbYCR7Y2FtZWxpemUobW9kZWxOYW1lKX1Nb2RpZmllcnNgXSB8fCBwcm9wc1tgJHtoeXBoZW5hdGUobW9kZWxOYW1lKX1Nb2RpZmllcnNgXTtcbn07XG5cbmZ1bmN0aW9uIGVtaXQoaW5zdGFuY2UsIGV2ZW50LCAuLi5yYXdBcmdzKSB7XG4gIGlmIChpbnN0YW5jZS5pc1VubW91bnRlZCkgcmV0dXJuO1xuICBjb25zdCBwcm9wcyA9IGluc3RhbmNlLnZub2RlLnByb3BzIHx8IEVNUFRZX09CSjtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbWl0c09wdGlvbnMsXG4gICAgICBwcm9wc09wdGlvbnM6IFtwcm9wc09wdGlvbnNdXG4gICAgfSA9IGluc3RhbmNlO1xuICAgIGlmIChlbWl0c09wdGlvbnMpIHtcbiAgICAgIGlmICghKGV2ZW50IGluIGVtaXRzT3B0aW9ucykgJiYgdHJ1ZSkge1xuICAgICAgICBpZiAoIXByb3BzT3B0aW9ucyB8fCAhKHRvSGFuZGxlcktleShjYW1lbGl6ZShldmVudCkpIGluIHByb3BzT3B0aW9ucykpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgQ29tcG9uZW50IGVtaXR0ZWQgZXZlbnQgXCIke2V2ZW50fVwiIGJ1dCBpdCBpcyBuZWl0aGVyIGRlY2xhcmVkIGluIHRoZSBlbWl0cyBvcHRpb24gbm9yIGFzIGFuIFwiJHt0b0hhbmRsZXJLZXkoY2FtZWxpemUoZXZlbnQpKX1cIiBwcm9wLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSBlbWl0c09wdGlvbnNbZXZlbnRdO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0b3IpKSB7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRvciguLi5yYXdBcmdzKTtcbiAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgICAgYEludmFsaWQgZXZlbnQgYXJndW1lbnRzOiBldmVudCB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgZXZlbnQgXCIke2V2ZW50fVwiLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxldCBhcmdzID0gcmF3QXJncztcbiAgY29uc3QgaXNNb2RlbExpc3RlbmVyID0gZXZlbnQuc3RhcnRzV2l0aChcInVwZGF0ZTpcIik7XG4gIGNvbnN0IG1vZGlmaWVycyA9IGlzTW9kZWxMaXN0ZW5lciAmJiBnZXRNb2RlbE1vZGlmaWVycyhwcm9wcywgZXZlbnQuc2xpY2UoNykpO1xuICBpZiAobW9kaWZpZXJzKSB7XG4gICAgaWYgKG1vZGlmaWVycy50cmltKSB7XG4gICAgICBhcmdzID0gcmF3QXJncy5tYXAoKGEpID0+IGlzU3RyaW5nKGEpID8gYS50cmltKCkgOiBhKTtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVycy5udW1iZXIpIHtcbiAgICAgIGFyZ3MgPSByYXdBcmdzLm1hcChsb29zZVRvTnVtYmVyKTtcbiAgICB9XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgZGV2dG9vbHNDb21wb25lbnRFbWl0KGluc3RhbmNlLCBldmVudCwgYXJncyk7XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBjb25zdCBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiBwcm9wc1t0b0hhbmRsZXJLZXkobG93ZXJDYXNlRXZlbnQpXSkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgRXZlbnQgXCIke2xvd2VyQ2FzZUV2ZW50fVwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50ICR7Zm9ybWF0Q29tcG9uZW50TmFtZShcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBpbnN0YW5jZS50eXBlXG4gICAgICAgICl9IGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcIiR7ZXZlbnR9XCIuIE5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIHYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcIiR7aHlwaGVuYXRlKFxuICAgICAgICAgIGV2ZW50XG4gICAgICAgICl9XCIgaW5zdGVhZCBvZiBcIiR7ZXZlbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgbGV0IGhhbmRsZXJOYW1lO1xuICBsZXQgaGFuZGxlciA9IHByb3BzW2hhbmRsZXJOYW1lID0gdG9IYW5kbGVyS2V5KGV2ZW50KV0gfHwgLy8gYWxzbyB0cnkgY2FtZWxDYXNlIGV2ZW50IGhhbmRsZXIgKCMyMjQ5KVxuICBwcm9wc1toYW5kbGVyTmFtZSA9IHRvSGFuZGxlcktleShjYW1lbGl6ZShldmVudCkpXTtcbiAgaWYgKCFoYW5kbGVyICYmIGlzTW9kZWxMaXN0ZW5lcikge1xuICAgIGhhbmRsZXIgPSBwcm9wc1toYW5kbGVyTmFtZSA9IHRvSGFuZGxlcktleShoeXBoZW5hdGUoZXZlbnQpKV07XG4gIH1cbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhcbiAgICAgIGhhbmRsZXIsXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIDYsXG4gICAgICBhcmdzXG4gICAgKTtcbiAgfVxuICBjb25zdCBvbmNlSGFuZGxlciA9IHByb3BzW2hhbmRsZXJOYW1lICsgYE9uY2VgXTtcbiAgaWYgKG9uY2VIYW5kbGVyKSB7XG4gICAgaWYgKCFpbnN0YW5jZS5lbWl0dGVkKSB7XG4gICAgICBpbnN0YW5jZS5lbWl0dGVkID0ge307XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5lbWl0dGVkW2hhbmRsZXJOYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnN0YW5jZS5lbWl0dGVkW2hhbmRsZXJOYW1lXSA9IHRydWU7XG4gICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoXG4gICAgICBvbmNlSGFuZGxlcixcbiAgICAgIGluc3RhbmNlLFxuICAgICAgNixcbiAgICAgIGFyZ3NcbiAgICApO1xuICB9XG59XG5jb25zdCBtaXhpbkVtaXRzQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVtaXRzT3B0aW9ucyhjb21wLCBhcHBDb250ZXh0LCBhc01peGluID0gZmFsc2UpIHtcbiAgY29uc3QgY2FjaGUgPSBfX1ZVRV9PUFRJT05TX0FQSV9fICYmIGFzTWl4aW4gPyBtaXhpbkVtaXRzQ2FjaGUgOiBhcHBDb250ZXh0LmVtaXRzQ2FjaGU7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChjb21wKTtcbiAgaWYgKGNhY2hlZCAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCByYXcgPSBjb21wLmVtaXRzO1xuICBsZXQgbm9ybWFsaXplZCA9IHt9O1xuICBsZXQgaGFzRXh0ZW5kcyA9IGZhbHNlO1xuICBpZiAoX19WVUVfT1BUSU9OU19BUElfXyAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xuICAgIGNvbnN0IGV4dGVuZEVtaXRzID0gKHJhdzIpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGcm9tRXh0ZW5kID0gbm9ybWFsaXplRW1pdHNPcHRpb25zKHJhdzIsIGFwcENvbnRleHQsIHRydWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRGcm9tRXh0ZW5kKSB7XG4gICAgICAgIGhhc0V4dGVuZHMgPSB0cnVlO1xuICAgICAgICBleHRlbmQobm9ybWFsaXplZCwgbm9ybWFsaXplZEZyb21FeHRlbmQpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKCFhc01peGluICYmIGFwcENvbnRleHQubWl4aW5zLmxlbmd0aCkge1xuICAgICAgYXBwQ29udGV4dC5taXhpbnMuZm9yRWFjaChleHRlbmRFbWl0cyk7XG4gICAgfVxuICAgIGlmIChjb21wLmV4dGVuZHMpIHtcbiAgICAgIGV4dGVuZEVtaXRzKGNvbXAuZXh0ZW5kcyk7XG4gICAgfVxuICAgIGlmIChjb21wLm1peGlucykge1xuICAgICAgY29tcC5taXhpbnMuZm9yRWFjaChleHRlbmRFbWl0cyk7XG4gICAgfVxuICB9XG4gIGlmICghcmF3ICYmICFoYXNFeHRlbmRzKSB7XG4gICAgaWYgKGlzT2JqZWN0KGNvbXApKSB7XG4gICAgICBjYWNoZS5zZXQoY29tcCwgbnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChpc0FycmF5KHJhdykpIHtcbiAgICByYXcuZm9yRWFjaCgoa2V5KSA9PiBub3JtYWxpemVkW2tleV0gPSBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICBleHRlbmQobm9ybWFsaXplZCwgcmF3KTtcbiAgfVxuICBpZiAoaXNPYmplY3QoY29tcCkpIHtcbiAgICBjYWNoZS5zZXQoY29tcCwgbm9ybWFsaXplZCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5mdW5jdGlvbiBpc0VtaXRMaXN0ZW5lcihvcHRpb25zLCBrZXkpIHtcbiAgaWYgKCFvcHRpb25zIHx8ICFpc09uKGtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAga2V5ID0ga2V5LnNsaWNlKDIpLnJlcGxhY2UoL09uY2UkLywgXCJcIik7XG4gIHJldHVybiBoYXNPd24ob3B0aW9ucywga2V5WzBdLnRvTG93ZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSkpIHx8IGhhc093bihvcHRpb25zLCBoeXBoZW5hdGUoa2V5KSkgfHwgaGFzT3duKG9wdGlvbnMsIGtleSk7XG59XG5cbmxldCBhY2Nlc3NlZEF0dHJzID0gZmFsc2U7XG5mdW5jdGlvbiBtYXJrQXR0cnNBY2Nlc3NlZCgpIHtcbiAgYWNjZXNzZWRBdHRycyA9IHRydWU7XG59XG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnRSb290KGluc3RhbmNlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlOiBDb21wb25lbnQsXG4gICAgdm5vZGUsXG4gICAgcHJveHksXG4gICAgd2l0aFByb3h5LFxuICAgIHByb3BzT3B0aW9uczogW3Byb3BzT3B0aW9uc10sXG4gICAgc2xvdHMsXG4gICAgYXR0cnMsXG4gICAgZW1pdCxcbiAgICByZW5kZXIsXG4gICAgcmVuZGVyQ2FjaGUsXG4gICAgcHJvcHMsXG4gICAgZGF0YSxcbiAgICBzZXR1cFN0YXRlLFxuICAgIGN0eCxcbiAgICBpbmhlcml0QXR0cnNcbiAgfSA9IGluc3RhbmNlO1xuICBjb25zdCBwcmV2ID0gc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKGluc3RhbmNlKTtcbiAgbGV0IHJlc3VsdDtcbiAgbGV0IGZhbGx0aHJvdWdoQXR0cnM7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgYWNjZXNzZWRBdHRycyA9IGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDQpIHtcbiAgICAgIGNvbnN0IHByb3h5VG9Vc2UgPSB3aXRoUHJveHkgfHwgcHJveHk7XG4gICAgICBjb25zdCB0aGlzUHJveHkgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHNldHVwU3RhdGUuX19pc1NjcmlwdFNldHVwID8gbmV3IFByb3h5KHByb3h5VG9Vc2UsIHtcbiAgICAgICAgZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcikge1xuICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgIGBQcm9wZXJ0eSAnJHtTdHJpbmcoXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKX0nIHdhcyBhY2Nlc3NlZCB2aWEgJ3RoaXMnLiBBdm9pZCB1c2luZyAndGhpcycgaW4gdGVtcGxhdGVzLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xuICAgICAgICB9XG4gICAgICB9KSA6IHByb3h5VG9Vc2U7XG4gICAgICByZXN1bHQgPSBub3JtYWxpemVWTm9kZShcbiAgICAgICAgcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpc1Byb3h5LFxuICAgICAgICAgIHByb3h5VG9Vc2UsXG4gICAgICAgICAgcmVuZGVyQ2FjaGUsXG4gICAgICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHNoYWxsb3dSZWFkb25seShwcm9wcykgOiBwcm9wcyxcbiAgICAgICAgICBzZXR1cFN0YXRlLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgY3R4XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmYWxsdGhyb3VnaEF0dHJzID0gYXR0cnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbmRlcjIgPSBDb21wb25lbnQ7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBhdHRycyA9PT0gcHJvcHMpIHtcbiAgICAgICAgbWFya0F0dHJzQWNjZXNzZWQoKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IG5vcm1hbGl6ZVZOb2RlKFxuICAgICAgICByZW5kZXIyLmxlbmd0aCA+IDEgPyByZW5kZXIyKFxuICAgICAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBzaGFsbG93UmVhZG9ubHkocHJvcHMpIDogcHJvcHMsXG4gICAgICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHtcbiAgICAgICAgICAgIGdldCBhdHRycygpIHtcbiAgICAgICAgICAgICAgbWFya0F0dHJzQWNjZXNzZWQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHNoYWxsb3dSZWFkb25seShhdHRycyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgICBlbWl0XG4gICAgICAgICAgfSA6IHsgYXR0cnMsIHNsb3RzLCBlbWl0IH1cbiAgICAgICAgKSA6IHJlbmRlcjIoXG4gICAgICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHNoYWxsb3dSZWFkb25seShwcm9wcykgOiBwcm9wcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmYWxsdGhyb3VnaEF0dHJzID0gQ29tcG9uZW50LnByb3BzID8gYXR0cnMgOiBnZXRGdW5jdGlvbmFsRmFsbHRocm91Z2goYXR0cnMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYmxvY2tTdGFjay5sZW5ndGggPSAwO1xuICAgIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIDEpO1xuICAgIHJlc3VsdCA9IGNyZWF0ZVZOb2RlKENvbW1lbnQpO1xuICB9XG4gIGxldCByb290ID0gcmVzdWx0O1xuICBsZXQgc2V0Um9vdCA9IHZvaWQgMDtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgcmVzdWx0LnBhdGNoRmxhZyA+IDAgJiYgcmVzdWx0LnBhdGNoRmxhZyAmIDIwNDgpIHtcbiAgICBbcm9vdCwgc2V0Um9vdF0gPSBnZXRDaGlsZFJvb3QocmVzdWx0KTtcbiAgfVxuICBpZiAoZmFsbHRocm91Z2hBdHRycyAmJiBpbmhlcml0QXR0cnMgIT09IGZhbHNlKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZhbGx0aHJvdWdoQXR0cnMpO1xuICAgIGNvbnN0IHsgc2hhcGVGbGFnIH0gPSByb290O1xuICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgaWYgKHNoYXBlRmxhZyAmICgxIHwgNikpIHtcbiAgICAgICAgaWYgKHByb3BzT3B0aW9ucyAmJiBrZXlzLnNvbWUoaXNNb2RlbExpc3RlbmVyKSkge1xuICAgICAgICAgIGZhbGx0aHJvdWdoQXR0cnMgPSBmaWx0ZXJNb2RlbExpc3RlbmVycyhcbiAgICAgICAgICAgIGZhbGx0aHJvdWdoQXR0cnMsXG4gICAgICAgICAgICBwcm9wc09wdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJvb3QgPSBjbG9uZVZOb2RlKHJvb3QsIGZhbGx0aHJvdWdoQXR0cnMsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhYWNjZXNzZWRBdHRycyAmJiByb290LnR5cGUgIT09IENvbW1lbnQpIHtcbiAgICAgICAgY29uc3QgYWxsQXR0cnMgPSBPYmplY3Qua2V5cyhhdHRycyk7XG4gICAgICAgIGNvbnN0IGV2ZW50QXR0cnMgPSBbXTtcbiAgICAgICAgY29uc3QgZXh0cmFBdHRycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFsbEF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGFsbEF0dHJzW2ldO1xuICAgICAgICAgIGlmIChpc09uKGtleSkpIHtcbiAgICAgICAgICAgIGlmICghaXNNb2RlbExpc3RlbmVyKGtleSkpIHtcbiAgICAgICAgICAgICAgZXZlbnRBdHRycy5wdXNoKGtleVsyXS50b0xvd2VyQ2FzZSgpICsga2V5LnNsaWNlKDMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXh0cmFBdHRycy5wdXNoKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYUF0dHJzLmxlbmd0aCkge1xuICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgIGBFeHRyYW5lb3VzIG5vbi1wcm9wcyBhdHRyaWJ1dGVzICgke2V4dHJhQXR0cnMuam9pbihcIiwgXCIpfSkgd2VyZSBwYXNzZWQgdG8gY29tcG9uZW50IGJ1dCBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBpbmhlcml0ZWQgYmVjYXVzZSBjb21wb25lbnQgcmVuZGVycyBmcmFnbWVudCBvciB0ZXh0IG9yIHRlbGVwb3J0IHJvb3Qgbm9kZXMuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50QXR0cnMubGVuZ3RoKSB7XG4gICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgYEV4dHJhbmVvdXMgbm9uLWVtaXRzIGV2ZW50IGxpc3RlbmVycyAoJHtldmVudEF0dHJzLmpvaW4oXCIsIFwiKX0pIHdlcmUgcGFzc2VkIHRvIGNvbXBvbmVudCBidXQgY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkIGJlY2F1c2UgY29tcG9uZW50IHJlbmRlcnMgZnJhZ21lbnQgb3IgdGV4dCByb290IG5vZGVzLiBJZiB0aGUgbGlzdGVuZXIgaXMgaW50ZW5kZWQgdG8gYmUgYSBjb21wb25lbnQgY3VzdG9tIGV2ZW50IGxpc3RlbmVyIG9ubHksIGRlY2xhcmUgaXQgdXNpbmcgdGhlIFwiZW1pdHNcIiBvcHRpb24uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHZub2RlLmRpcnMpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaXNFbGVtZW50Um9vdChyb290KSkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgUnVudGltZSBkaXJlY3RpdmUgdXNlZCBvbiBjb21wb25lbnQgd2l0aCBub24tZWxlbWVudCByb290IG5vZGUuIFRoZSBkaXJlY3RpdmVzIHdpbGwgbm90IGZ1bmN0aW9uIGFzIGludGVuZGVkLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJvb3QgPSBjbG9uZVZOb2RlKHJvb3QsIG51bGwsIGZhbHNlLCB0cnVlKTtcbiAgICByb290LmRpcnMgPSByb290LmRpcnMgPyByb290LmRpcnMuY29uY2F0KHZub2RlLmRpcnMpIDogdm5vZGUuZGlycztcbiAgfVxuICBpZiAodm5vZGUudHJhbnNpdGlvbikge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpc0VsZW1lbnRSb290KHJvb3QpKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGBDb21wb25lbnQgaW5zaWRlIDxUcmFuc2l0aW9uPiByZW5kZXJzIG5vbi1lbGVtZW50IHJvb3Qgbm9kZSB0aGF0IGNhbm5vdCBiZSBhbmltYXRlZC5gXG4gICAgICApO1xuICAgIH1cbiAgICBzZXRUcmFuc2l0aW9uSG9va3Mocm9vdCwgdm5vZGUudHJhbnNpdGlvbik7XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc2V0Um9vdCkge1xuICAgIHNldFJvb3Qocm9vdCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gcm9vdDtcbiAgfVxuICBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UocHJldik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5jb25zdCBnZXRDaGlsZFJvb3QgPSAodm5vZGUpID0+IHtcbiAgY29uc3QgcmF3Q2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgY29uc3QgZHluYW1pY0NoaWxkcmVuID0gdm5vZGUuZHluYW1pY0NoaWxkcmVuO1xuICBjb25zdCBjaGlsZFJvb3QgPSBmaWx0ZXJTaW5nbGVSb290KHJhd0NoaWxkcmVuLCBmYWxzZSk7XG4gIGlmICghY2hpbGRSb290KSB7XG4gICAgcmV0dXJuIFt2bm9kZSwgdm9pZCAwXTtcbiAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNoaWxkUm9vdC5wYXRjaEZsYWcgPiAwICYmIGNoaWxkUm9vdC5wYXRjaEZsYWcgJiAyMDQ4KSB7XG4gICAgcmV0dXJuIGdldENoaWxkUm9vdChjaGlsZFJvb3QpO1xuICB9XG4gIGNvbnN0IGluZGV4ID0gcmF3Q2hpbGRyZW4uaW5kZXhPZihjaGlsZFJvb3QpO1xuICBjb25zdCBkeW5hbWljSW5kZXggPSBkeW5hbWljQ2hpbGRyZW4gPyBkeW5hbWljQ2hpbGRyZW4uaW5kZXhPZihjaGlsZFJvb3QpIDogLTE7XG4gIGNvbnN0IHNldFJvb3QgPSAodXBkYXRlZFJvb3QpID0+IHtcbiAgICByYXdDaGlsZHJlbltpbmRleF0gPSB1cGRhdGVkUm9vdDtcbiAgICBpZiAoZHluYW1pY0NoaWxkcmVuKSB7XG4gICAgICBpZiAoZHluYW1pY0luZGV4ID4gLTEpIHtcbiAgICAgICAgZHluYW1pY0NoaWxkcmVuW2R5bmFtaWNJbmRleF0gPSB1cGRhdGVkUm9vdDtcbiAgICAgIH0gZWxzZSBpZiAodXBkYXRlZFJvb3QucGF0Y2hGbGFnID4gMCkge1xuICAgICAgICB2bm9kZS5keW5hbWljQ2hpbGRyZW4gPSBbLi4uZHluYW1pY0NoaWxkcmVuLCB1cGRhdGVkUm9vdF07XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gW25vcm1hbGl6ZVZOb2RlKGNoaWxkUm9vdCksIHNldFJvb3RdO1xufTtcbmZ1bmN0aW9uIGZpbHRlclNpbmdsZVJvb3QoY2hpbGRyZW4sIHJlY3Vyc2UgPSB0cnVlKSB7XG4gIGxldCBzaW5nbGVSb290O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoaXNWTm9kZShjaGlsZCkpIHtcbiAgICAgIGlmIChjaGlsZC50eXBlICE9PSBDb21tZW50IHx8IGNoaWxkLmNoaWxkcmVuID09PSBcInYtaWZcIikge1xuICAgICAgICBpZiAoc2luZ2xlUm9vdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaW5nbGVSb290ID0gY2hpbGQ7XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgcmVjdXJzZSAmJiBzaW5nbGVSb290LnBhdGNoRmxhZyA+IDAgJiYgc2luZ2xlUm9vdC5wYXRjaEZsYWcgJiAyMDQ4KSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyU2luZ2xlUm9vdChzaW5nbGVSb290LmNoaWxkcmVuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2luZ2xlUm9vdDtcbn1cbmNvbnN0IGdldEZ1bmN0aW9uYWxGYWxsdGhyb3VnaCA9IChhdHRycykgPT4ge1xuICBsZXQgcmVzO1xuICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xuICAgIGlmIChrZXkgPT09IFwiY2xhc3NcIiB8fCBrZXkgPT09IFwic3R5bGVcIiB8fCBpc09uKGtleSkpIHtcbiAgICAgIChyZXMgfHwgKHJlcyA9IHt9KSlba2V5XSA9IGF0dHJzW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuY29uc3QgZmlsdGVyTW9kZWxMaXN0ZW5lcnMgPSAoYXR0cnMsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHJlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xuICAgIGlmICghaXNNb2RlbExpc3RlbmVyKGtleSkgfHwgIShrZXkuc2xpY2UoOSkgaW4gcHJvcHMpKSB7XG4gICAgICByZXNba2V5XSA9IGF0dHJzW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuY29uc3QgaXNFbGVtZW50Um9vdCA9ICh2bm9kZSkgPT4ge1xuICByZXR1cm4gdm5vZGUuc2hhcGVGbGFnICYgKDYgfCAxKSB8fCB2bm9kZS50eXBlID09PSBDb21tZW50O1xufTtcbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZUNvbXBvbmVudChwcmV2Vk5vZGUsIG5leHRWTm9kZSwgb3B0aW1pemVkKSB7XG4gIGNvbnN0IHsgcHJvcHM6IHByZXZQcm9wcywgY2hpbGRyZW46IHByZXZDaGlsZHJlbiwgY29tcG9uZW50IH0gPSBwcmV2Vk5vZGU7XG4gIGNvbnN0IHsgcHJvcHM6IG5leHRQcm9wcywgY2hpbGRyZW46IG5leHRDaGlsZHJlbiwgcGF0Y2hGbGFnIH0gPSBuZXh0Vk5vZGU7XG4gIGNvbnN0IGVtaXRzID0gY29tcG9uZW50LmVtaXRzT3B0aW9ucztcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgKHByZXZDaGlsZHJlbiB8fCBuZXh0Q2hpbGRyZW4pICYmIGlzSG1yVXBkYXRpbmcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAobmV4dFZOb2RlLmRpcnMgfHwgbmV4dFZOb2RlLnRyYW5zaXRpb24pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAob3B0aW1pemVkICYmIHBhdGNoRmxhZyA+PSAwKSB7XG4gICAgaWYgKHBhdGNoRmxhZyAmIDEwMjQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAocGF0Y2hGbGFnICYgMTYpIHtcbiAgICAgIGlmICghcHJldlByb3BzKSB7XG4gICAgICAgIHJldHVybiAhIW5leHRQcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNQcm9wc0NoYW5nZWQocHJldlByb3BzLCBuZXh0UHJvcHMsIGVtaXRzKTtcbiAgICB9IGVsc2UgaWYgKHBhdGNoRmxhZyAmIDgpIHtcbiAgICAgIGNvbnN0IGR5bmFtaWNQcm9wcyA9IG5leHRWTm9kZS5keW5hbWljUHJvcHM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGR5bmFtaWNQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBkeW5hbWljUHJvcHNbaV07XG4gICAgICAgIGlmIChuZXh0UHJvcHNba2V5XSAhPT0gcHJldlByb3BzW2tleV0gJiYgIWlzRW1pdExpc3RlbmVyKGVtaXRzLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByZXZDaGlsZHJlbiB8fCBuZXh0Q2hpbGRyZW4pIHtcbiAgICAgIGlmICghbmV4dENoaWxkcmVuIHx8ICFuZXh0Q2hpbGRyZW4uJHN0YWJsZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByZXZQcm9wcyA9PT0gbmV4dFByb3BzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghcHJldlByb3BzKSB7XG4gICAgICByZXR1cm4gISFuZXh0UHJvcHM7XG4gICAgfVxuICAgIGlmICghbmV4dFByb3BzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc1Byb3BzQ2hhbmdlZChwcmV2UHJvcHMsIG5leHRQcm9wcywgZW1pdHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGhhc1Byb3BzQ2hhbmdlZChwcmV2UHJvcHMsIG5leHRQcm9wcywgZW1pdHNPcHRpb25zKSB7XG4gIGNvbnN0IG5leHRLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcbiAgaWYgKG5leHRLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMocHJldlByb3BzKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5leHRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0gbmV4dEtleXNbaV07XG4gICAgaWYgKG5leHRQcm9wc1trZXldICE9PSBwcmV2UHJvcHNba2V5XSAmJiAhaXNFbWl0TGlzdGVuZXIoZW1pdHNPcHRpb25zLCBrZXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gdXBkYXRlSE9DSG9zdEVsKHsgdm5vZGUsIHBhcmVudCB9LCBlbCkge1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgY29uc3Qgcm9vdCA9IHBhcmVudC5zdWJUcmVlO1xuICAgIGlmIChyb290LnN1c3BlbnNlICYmIHJvb3Quc3VzcGVuc2UuYWN0aXZlQnJhbmNoID09PSB2bm9kZSkge1xuICAgICAgcm9vdC5lbCA9IHZub2RlLmVsO1xuICAgIH1cbiAgICBpZiAocm9vdCA9PT0gdm5vZGUpIHtcbiAgICAgICh2bm9kZSA9IHBhcmVudC52bm9kZSkuZWwgPSBlbDtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBpc1N1c3BlbnNlID0gKHR5cGUpID0+IHR5cGUuX19pc1N1c3BlbnNlO1xubGV0IHN1c3BlbnNlSWQgPSAwO1xuY29uc3QgU3VzcGVuc2VJbXBsID0ge1xuICBuYW1lOiBcIlN1c3BlbnNlXCIsXG4gIC8vIEluIG9yZGVyIHRvIG1ha2UgU3VzcGVuc2UgdHJlZS1zaGFrYWJsZSwgd2UgbmVlZCB0byBhdm9pZCBpbXBvcnRpbmcgaXRcbiAgLy8gZGlyZWN0bHkgaW4gdGhlIHJlbmRlcmVyLiBUaGUgcmVuZGVyZXIgY2hlY2tzIGZvciB0aGUgX19pc1N1c3BlbnNlIGZsYWdcbiAgLy8gb24gYSB2bm9kZSdzIHR5cGUgYW5kIGNhbGxzIHRoZSBgcHJvY2Vzc2AgbWV0aG9kLCBwYXNzaW5nIGluIHJlbmRlcmVyXG4gIC8vIGludGVybmFscy5cbiAgX19pc1N1c3BlbnNlOiB0cnVlLFxuICBwcm9jZXNzKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHJlbmRlcmVySW50ZXJuYWxzKSB7XG4gICAgaWYgKG4xID09IG51bGwpIHtcbiAgICAgIG1vdW50U3VzcGVuc2UoXG4gICAgICAgIG4yLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZCxcbiAgICAgICAgcmVuZGVyZXJJbnRlcm5hbHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXJlbnRTdXNwZW5zZSAmJiBwYXJlbnRTdXNwZW5zZS5kZXBzID4gMCAmJiAhbjEuc3VzcGVuc2UuaXNJbkZhbGxiYWNrKSB7XG4gICAgICAgIG4yLnN1c3BlbnNlID0gbjEuc3VzcGVuc2U7XG4gICAgICAgIG4yLnN1c3BlbnNlLnZub2RlID0gbjI7XG4gICAgICAgIG4yLmVsID0gbjEuZWw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBhdGNoU3VzcGVuc2UoXG4gICAgICAgIG4xLFxuICAgICAgICBuMixcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBhbmNob3IsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZCxcbiAgICAgICAgcmVuZGVyZXJJbnRlcm5hbHNcbiAgICAgICk7XG4gICAgfVxuICB9LFxuICBoeWRyYXRlOiBoeWRyYXRlU3VzcGVuc2UsXG4gIG5vcm1hbGl6ZTogbm9ybWFsaXplU3VzcGVuc2VDaGlsZHJlblxufTtcbmNvbnN0IFN1c3BlbnNlID0gU3VzcGVuc2VJbXBsIDtcbmZ1bmN0aW9uIHRyaWdnZXJFdmVudCh2bm9kZSwgbmFtZSkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHNbbmFtZV07XG4gIGlmIChpc0Z1bmN0aW9uKGV2ZW50TGlzdGVuZXIpKSB7XG4gICAgZXZlbnRMaXN0ZW5lcigpO1xuICB9XG59XG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMpIHtcbiAgY29uc3Qge1xuICAgIHA6IHBhdGNoLFxuICAgIG86IHsgY3JlYXRlRWxlbWVudCB9XG4gIH0gPSByZW5kZXJlckludGVybmFscztcbiAgY29uc3QgaGlkZGVuQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc3VzcGVuc2UgPSB2bm9kZS5zdXNwZW5zZSA9IGNyZWF0ZVN1c3BlbnNlQm91bmRhcnkoXG4gICAgdm5vZGUsXG4gICAgcGFyZW50U3VzcGVuc2UsXG4gICAgcGFyZW50Q29tcG9uZW50LFxuICAgIGNvbnRhaW5lcixcbiAgICBoaWRkZW5Db250YWluZXIsXG4gICAgYW5jaG9yLFxuICAgIG5hbWVzcGFjZSxcbiAgICBzbG90U2NvcGVJZHMsXG4gICAgb3B0aW1pemVkLFxuICAgIHJlbmRlcmVySW50ZXJuYWxzXG4gICk7XG4gIHBhdGNoKFxuICAgIG51bGwsXG4gICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IHZub2RlLnNzQ29udGVudCxcbiAgICBoaWRkZW5Db250YWluZXIsXG4gICAgbnVsbCxcbiAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgc3VzcGVuc2UsXG4gICAgbmFtZXNwYWNlLFxuICAgIHNsb3RTY29wZUlkc1xuICApO1xuICBpZiAoc3VzcGVuc2UuZGVwcyA+IDApIHtcbiAgICB0cmlnZ2VyRXZlbnQodm5vZGUsIFwib25QZW5kaW5nXCIpO1xuICAgIHRyaWdnZXJFdmVudCh2bm9kZSwgXCJvbkZhbGxiYWNrXCIpO1xuICAgIHBhdGNoKFxuICAgICAgbnVsbCxcbiAgICAgIHZub2RlLnNzRmFsbGJhY2ssXG4gICAgICBjb250YWluZXIsXG4gICAgICBhbmNob3IsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBudWxsLFxuICAgICAgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIHNsb3RTY29wZUlkc1xuICAgICk7XG4gICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCB2bm9kZS5zc0ZhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBzdXNwZW5zZS5yZXNvbHZlKGZhbHNlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcGF0Y2hTdXNwZW5zZShuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHsgcDogcGF0Y2gsIHVtOiB1bm1vdW50LCBvOiB7IGNyZWF0ZUVsZW1lbnQgfSB9KSB7XG4gIGNvbnN0IHN1c3BlbnNlID0gbjIuc3VzcGVuc2UgPSBuMS5zdXNwZW5zZTtcbiAgc3VzcGVuc2Uudm5vZGUgPSBuMjtcbiAgbjIuZWwgPSBuMS5lbDtcbiAgY29uc3QgbmV3QnJhbmNoID0gbjIuc3NDb250ZW50O1xuICBjb25zdCBuZXdGYWxsYmFjayA9IG4yLnNzRmFsbGJhY2s7XG4gIGNvbnN0IHsgYWN0aXZlQnJhbmNoLCBwZW5kaW5nQnJhbmNoLCBpc0luRmFsbGJhY2ssIGlzSHlkcmF0aW5nIH0gPSBzdXNwZW5zZTtcbiAgaWYgKHBlbmRpbmdCcmFuY2gpIHtcbiAgICBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoID0gbmV3QnJhbmNoO1xuICAgIGlmIChpc1NhbWVWTm9kZVR5cGUocGVuZGluZ0JyYW5jaCwgbmV3QnJhbmNoKSkge1xuICAgICAgcGF0Y2goXG4gICAgICAgIHBlbmRpbmdCcmFuY2gsXG4gICAgICAgIG5ld0JyYW5jaCxcbiAgICAgICAgc3VzcGVuc2UuaGlkZGVuQ29udGFpbmVyLFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgICAgaWYgKHN1c3BlbnNlLmRlcHMgPD0gMCkge1xuICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzSW5GYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICAgICAgcGF0Y2goXG4gICAgICAgICAgICBhY3RpdmVCcmFuY2gsXG4gICAgICAgICAgICBuZXdGYWxsYmFjayxcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAvLyBmYWxsYmFjayB0cmVlIHdpbGwgbm90IGhhdmUgc3VzcGVuc2UgY29udGV4dFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIG5ld0ZhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdXNwZW5zZS5wZW5kaW5nSWQgPSBzdXNwZW5zZUlkKys7XG4gICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgc3VzcGVuc2UuaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgc3VzcGVuc2UuYWN0aXZlQnJhbmNoID0gcGVuZGluZ0JyYW5jaDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVubW91bnQocGVuZGluZ0JyYW5jaCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSk7XG4gICAgICB9XG4gICAgICBzdXNwZW5zZS5kZXBzID0gMDtcbiAgICAgIHN1c3BlbnNlLmVmZmVjdHMubGVuZ3RoID0gMDtcbiAgICAgIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpZiAoaXNJbkZhbGxiYWNrKSB7XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmV3QnJhbmNoLFxuICAgICAgICAgIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lcixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBzdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICBpZiAoc3VzcGVuc2UuZGVwcyA8PSAwKSB7XG4gICAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdGNoKFxuICAgICAgICAgICAgYWN0aXZlQnJhbmNoLFxuICAgICAgICAgICAgbmV3RmFsbGJhY2ssXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBuZXdGYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlQnJhbmNoICYmIGlzU2FtZVZOb2RlVHlwZShhY3RpdmVCcmFuY2gsIG5ld0JyYW5jaCkpIHtcbiAgICAgICAgcGF0Y2goXG4gICAgICAgICAgYWN0aXZlQnJhbmNoLFxuICAgICAgICAgIG5ld0JyYW5jaCxcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBzdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0Y2goXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuZXdCcmFuY2gsXG4gICAgICAgICAgc3VzcGVuc2UuaGlkZGVuQ29udGFpbmVyLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdXNwZW5zZS5kZXBzIDw9IDApIHtcbiAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFjdGl2ZUJyYW5jaCAmJiBpc1NhbWVWTm9kZVR5cGUoYWN0aXZlQnJhbmNoLCBuZXdCcmFuY2gpKSB7XG4gICAgICBwYXRjaChcbiAgICAgICAgYWN0aXZlQnJhbmNoLFxuICAgICAgICBuZXdCcmFuY2gsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBuZXdCcmFuY2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmlnZ2VyRXZlbnQobjIsIFwib25QZW5kaW5nXCIpO1xuICAgICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IG5ld0JyYW5jaDtcbiAgICAgIGlmIChuZXdCcmFuY2guc2hhcGVGbGFnICYgNTEyKSB7XG4gICAgICAgIHN1c3BlbnNlLnBlbmRpbmdJZCA9IG5ld0JyYW5jaC5jb21wb25lbnQuc3VzcGVuc2VJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1c3BlbnNlLnBlbmRpbmdJZCA9IHN1c3BlbnNlSWQrKztcbiAgICAgIH1cbiAgICAgIHBhdGNoKFxuICAgICAgICBudWxsLFxuICAgICAgICBuZXdCcmFuY2gsXG4gICAgICAgIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBzdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZFxuICAgICAgKTtcbiAgICAgIGlmIChzdXNwZW5zZS5kZXBzIDw9IDApIHtcbiAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyB0aW1lb3V0LCBwZW5kaW5nSWQgfSA9IHN1c3BlbnNlO1xuICAgICAgICBpZiAodGltZW91dCA+IDApIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdXNwZW5zZS5wZW5kaW5nSWQgPT09IHBlbmRpbmdJZCkge1xuICAgICAgICAgICAgICBzdXNwZW5zZS5mYWxsYmFjayhuZXdGYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZW91dCA9PT0gMCkge1xuICAgICAgICAgIHN1c3BlbnNlLmZhbGxiYWNrKG5ld0ZhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxubGV0IGhhc1dhcm5lZCA9IGZhbHNlO1xuZnVuY3Rpb24gY3JlYXRlU3VzcGVuc2VCb3VuZGFyeSh2bm9kZSwgcGFyZW50U3VzcGVuc2UsIHBhcmVudENvbXBvbmVudCwgY29udGFpbmVyLCBoaWRkZW5Db250YWluZXIsIGFuY2hvciwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMsIGlzSHlkcmF0aW5nID0gZmFsc2UpIHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgdHJ1ZSAmJiAhaGFzV2FybmVkKSB7XG4gICAgaGFzV2FybmVkID0gdHJ1ZTtcbiAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/IFwiaW5mb1wiIDogXCJsb2dcIl0oXG4gICAgICBgPFN1c3BlbnNlPiBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSBhbmQgaXRzIEFQSSB3aWxsIGxpa2VseSBjaGFuZ2UuYFxuICAgICk7XG4gIH1cbiAgY29uc3Qge1xuICAgIHA6IHBhdGNoLFxuICAgIG06IG1vdmUsXG4gICAgdW06IHVubW91bnQsXG4gICAgbjogbmV4dCxcbiAgICBvOiB7IHBhcmVudE5vZGUsIHJlbW92ZSB9XG4gIH0gPSByZW5kZXJlckludGVybmFscztcbiAgbGV0IHBhcmVudFN1c3BlbnNlSWQ7XG4gIGNvbnN0IGlzU3VzcGVuc2libGUgPSBpc1ZOb2RlU3VzcGVuc2libGUodm5vZGUpO1xuICBpZiAoaXNTdXNwZW5zaWJsZSkge1xuICAgIGlmIChwYXJlbnRTdXNwZW5zZSAmJiBwYXJlbnRTdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XG4gICAgICBwYXJlbnRTdXNwZW5zZUlkID0gcGFyZW50U3VzcGVuc2UucGVuZGluZ0lkO1xuICAgICAgcGFyZW50U3VzcGVuc2UuZGVwcysrO1xuICAgIH1cbiAgfVxuICBjb25zdCB0aW1lb3V0ID0gdm5vZGUucHJvcHMgPyB0b051bWJlcih2bm9kZS5wcm9wcy50aW1lb3V0KSA6IHZvaWQgMDtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBhc3NlcnROdW1iZXIodGltZW91dCwgYFN1c3BlbnNlIHRpbWVvdXRgKTtcbiAgfVxuICBjb25zdCBpbml0aWFsQW5jaG9yID0gYW5jaG9yO1xuICBjb25zdCBzdXNwZW5zZSA9IHtcbiAgICB2bm9kZSxcbiAgICBwYXJlbnQ6IHBhcmVudFN1c3BlbnNlLFxuICAgIHBhcmVudENvbXBvbmVudCxcbiAgICBuYW1lc3BhY2UsXG4gICAgY29udGFpbmVyLFxuICAgIGhpZGRlbkNvbnRhaW5lcixcbiAgICBkZXBzOiAwLFxuICAgIHBlbmRpbmdJZDogc3VzcGVuc2VJZCsrLFxuICAgIHRpbWVvdXQ6IHR5cGVvZiB0aW1lb3V0ID09PSBcIm51bWJlclwiID8gdGltZW91dCA6IC0xLFxuICAgIGFjdGl2ZUJyYW5jaDogbnVsbCxcbiAgICBwZW5kaW5nQnJhbmNoOiBudWxsLFxuICAgIGlzSW5GYWxsYmFjazogIWlzSHlkcmF0aW5nLFxuICAgIGlzSHlkcmF0aW5nLFxuICAgIGlzVW5tb3VudGVkOiBmYWxzZSxcbiAgICBlZmZlY3RzOiBbXSxcbiAgICByZXNvbHZlKHJlc3VtZSA9IGZhbHNlLCBzeW5jID0gZmFsc2UpIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIGlmICghcmVzdW1lICYmICFzdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHN1c3BlbnNlLnJlc29sdmUoKSBpcyBjYWxsZWQgd2l0aG91dCBhIHBlbmRpbmcgYnJhbmNoLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdXNwZW5zZS5pc1VubW91bnRlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzdXNwZW5zZS5yZXNvbHZlKCkgaXMgY2FsbGVkIG9uIGFuIGFscmVhZHkgdW5tb3VudGVkIHN1c3BlbnNlIGJvdW5kYXJ5LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZub2RlOiB2bm9kZTIsXG4gICAgICAgIGFjdGl2ZUJyYW5jaCxcbiAgICAgICAgcGVuZGluZ0JyYW5jaCxcbiAgICAgICAgcGVuZGluZ0lkLFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQ6IHBhcmVudENvbXBvbmVudDIsXG4gICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyMixcbiAgICAgICAgaXNJbkZhbGxiYWNrXG4gICAgICB9ID0gc3VzcGVuc2U7XG4gICAgICBsZXQgZGVsYXlFbnRlciA9IGZhbHNlO1xuICAgICAgaWYgKHN1c3BlbnNlLmlzSHlkcmF0aW5nKSB7XG4gICAgICAgIHN1c3BlbnNlLmlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFyZXN1bWUpIHtcbiAgICAgICAgZGVsYXlFbnRlciA9IGFjdGl2ZUJyYW5jaCAmJiBwZW5kaW5nQnJhbmNoLnRyYW5zaXRpb24gJiYgcGVuZGluZ0JyYW5jaC50cmFuc2l0aW9uLm1vZGUgPT09IFwib3V0LWluXCI7XG4gICAgICAgIGlmIChkZWxheUVudGVyKSB7XG4gICAgICAgICAgYWN0aXZlQnJhbmNoLnRyYW5zaXRpb24uYWZ0ZXJMZWF2ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nSWQgPT09IHN1c3BlbnNlLnBlbmRpbmdJZCkge1xuICAgICAgICAgICAgICBtb3ZlKFxuICAgICAgICAgICAgICAgIHBlbmRpbmdCcmFuY2gsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyMixcbiAgICAgICAgICAgICAgICBhbmNob3IgPT09IGluaXRpYWxBbmNob3IgPyBuZXh0KGFjdGl2ZUJyYW5jaCkgOiBhbmNob3IsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBxdWV1ZVBvc3RGbHVzaENiKGVmZmVjdHMpO1xuICAgICAgICAgICAgICBpZiAoaXNJbkZhbGxiYWNrICYmIHZub2RlMi5zc0ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdm5vZGUyLnNzRmFsbGJhY2suZWwgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZlQnJhbmNoKSB7XG4gICAgICAgICAgaWYgKHBhcmVudE5vZGUoYWN0aXZlQnJhbmNoLmVsKSA9PT0gY29udGFpbmVyMikge1xuICAgICAgICAgICAgYW5jaG9yID0gbmV4dChhY3RpdmVCcmFuY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1bm1vdW50KGFjdGl2ZUJyYW5jaCwgcGFyZW50Q29tcG9uZW50Miwgc3VzcGVuc2UsIHRydWUpO1xuICAgICAgICAgIGlmICghZGVsYXlFbnRlciAmJiBpc0luRmFsbGJhY2sgJiYgdm5vZGUyLnNzRmFsbGJhY2spIHtcbiAgICAgICAgICAgIHZub2RlMi5zc0ZhbGxiYWNrLmVsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWxheUVudGVyKSB7XG4gICAgICAgICAgbW92ZShwZW5kaW5nQnJhbmNoLCBjb250YWluZXIyLCBhbmNob3IsIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIHBlbmRpbmdCcmFuY2gpO1xuICAgICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IG51bGw7XG4gICAgICBzdXNwZW5zZS5pc0luRmFsbGJhY2sgPSBmYWxzZTtcbiAgICAgIGxldCBwYXJlbnQgPSBzdXNwZW5zZS5wYXJlbnQ7XG4gICAgICBsZXQgaGFzVW5yZXNvbHZlZEFuY2VzdG9yID0gZmFsc2U7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQucGVuZGluZ0JyYW5jaCkge1xuICAgICAgICAgIHBhcmVudC5lZmZlY3RzLnB1c2goLi4uZWZmZWN0cyk7XG4gICAgICAgICAgaGFzVW5yZXNvbHZlZEFuY2VzdG9yID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFoYXNVbnJlc29sdmVkQW5jZXN0b3IgJiYgIWRlbGF5RW50ZXIpIHtcbiAgICAgICAgcXVldWVQb3N0Rmx1c2hDYihlZmZlY3RzKTtcbiAgICAgIH1cbiAgICAgIHN1c3BlbnNlLmVmZmVjdHMgPSBbXTtcbiAgICAgIGlmIChpc1N1c3BlbnNpYmxlKSB7XG4gICAgICAgIGlmIChwYXJlbnRTdXNwZW5zZSAmJiBwYXJlbnRTdXNwZW5zZS5wZW5kaW5nQnJhbmNoICYmIHBhcmVudFN1c3BlbnNlSWQgPT09IHBhcmVudFN1c3BlbnNlLnBlbmRpbmdJZCkge1xuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLmRlcHMtLTtcbiAgICAgICAgICBpZiAocGFyZW50U3VzcGVuc2UuZGVwcyA9PT0gMCAmJiAhc3luYykge1xuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UucmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJpZ2dlckV2ZW50KHZub2RlMiwgXCJvblJlc29sdmVcIik7XG4gICAgfSxcbiAgICBmYWxsYmFjayhmYWxsYmFja1ZOb2RlKSB7XG4gICAgICBpZiAoIXN1c3BlbnNlLnBlbmRpbmdCcmFuY2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB2bm9kZTogdm5vZGUyLCBhY3RpdmVCcmFuY2gsIHBhcmVudENvbXBvbmVudDogcGFyZW50Q29tcG9uZW50MiwgY29udGFpbmVyOiBjb250YWluZXIyLCBuYW1lc3BhY2U6IG5hbWVzcGFjZTIgfSA9IHN1c3BlbnNlO1xuICAgICAgdHJpZ2dlckV2ZW50KHZub2RlMiwgXCJvbkZhbGxiYWNrXCIpO1xuICAgICAgY29uc3QgYW5jaG9yMiA9IG5leHQoYWN0aXZlQnJhbmNoKTtcbiAgICAgIGNvbnN0IG1vdW50RmFsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICghc3VzcGVuc2UuaXNJbkZhbGxiYWNrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZmFsbGJhY2tWTm9kZSxcbiAgICAgICAgICBjb250YWluZXIyLFxuICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50MixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIC8vIGZhbGxiYWNrIHRyZWUgd2lsbCBub3QgaGF2ZSBzdXNwZW5zZSBjb250ZXh0XG4gICAgICAgICAgbmFtZXNwYWNlMixcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICAgIHNldEFjdGl2ZUJyYW5jaChzdXNwZW5zZSwgZmFsbGJhY2tWTm9kZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZGVsYXlFbnRlciA9IGZhbGxiYWNrVk5vZGUudHJhbnNpdGlvbiAmJiBmYWxsYmFja1ZOb2RlLnRyYW5zaXRpb24ubW9kZSA9PT0gXCJvdXQtaW5cIjtcbiAgICAgIGlmIChkZWxheUVudGVyKSB7XG4gICAgICAgIGFjdGl2ZUJyYW5jaC50cmFuc2l0aW9uLmFmdGVyTGVhdmUgPSBtb3VudEZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgc3VzcGVuc2UuaXNJbkZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgIHVubW91bnQoXG4gICAgICAgIGFjdGl2ZUJyYW5jaCxcbiAgICAgICAgcGFyZW50Q29tcG9uZW50MixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gbm8gc3VzcGVuc2Ugc28gdW5tb3VudCBob29rcyBmaXJlIG5vd1xuICAgICAgICB0cnVlXG4gICAgICAgIC8vIHNob3VsZFJlbW92ZVxuICAgICAgKTtcbiAgICAgIGlmICghZGVsYXlFbnRlcikge1xuICAgICAgICBtb3VudEZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb3ZlKGNvbnRhaW5lcjIsIGFuY2hvcjIsIHR5cGUpIHtcbiAgICAgIHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCAmJiBtb3ZlKHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCwgY29udGFpbmVyMiwgYW5jaG9yMiwgdHlwZSk7XG4gICAgICBzdXNwZW5zZS5jb250YWluZXIgPSBjb250YWluZXIyO1xuICAgIH0sXG4gICAgbmV4dCgpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZS5hY3RpdmVCcmFuY2ggJiYgbmV4dChzdXNwZW5zZS5hY3RpdmVCcmFuY2gpO1xuICAgIH0sXG4gICAgcmVnaXN0ZXJEZXAoaW5zdGFuY2UsIHNldHVwUmVuZGVyRWZmZWN0LCBvcHRpbWl6ZWQyKSB7XG4gICAgICBjb25zdCBpc0luUGVuZGluZ1N1c3BlbnNlID0gISFzdXNwZW5zZS5wZW5kaW5nQnJhbmNoO1xuICAgICAgaWYgKGlzSW5QZW5kaW5nU3VzcGVuc2UpIHtcbiAgICAgICAgc3VzcGVuc2UuZGVwcysrO1xuICAgICAgfVxuICAgICAgY29uc3QgaHlkcmF0ZWRFbCA9IGluc3RhbmNlLnZub2RlLmVsO1xuICAgICAgaW5zdGFuY2UuYXN5bmNEZXAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCAwKTtcbiAgICAgIH0pLnRoZW4oKGFzeW5jU2V0dXBSZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmlzVW5tb3VudGVkIHx8IHN1c3BlbnNlLmlzVW5tb3VudGVkIHx8IHN1c3BlbnNlLnBlbmRpbmdJZCAhPT0gaW5zdGFuY2Uuc3VzcGVuc2VJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZS5hc3luY1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgeyB2bm9kZTogdm5vZGUyIH0gPSBpbnN0YW5jZTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQodm5vZGUyKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVTZXR1cFJlc3VsdChpbnN0YW5jZSwgYXN5bmNTZXR1cFJlc3VsdCwgZmFsc2UpO1xuICAgICAgICBpZiAoaHlkcmF0ZWRFbCkge1xuICAgICAgICAgIHZub2RlMi5lbCA9IGh5ZHJhdGVkRWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSAhaHlkcmF0ZWRFbCAmJiBpbnN0YW5jZS5zdWJUcmVlLmVsO1xuICAgICAgICBzZXR1cFJlbmRlckVmZmVjdChcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICB2bm9kZTIsXG4gICAgICAgICAgLy8gY29tcG9uZW50IG1heSBoYXZlIGJlZW4gbW92ZWQgYmVmb3JlIHJlc29sdmUuXG4gICAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSBoeWRyYXRpb24sIGluc3RhbmNlLnN1YlRyZWUgd2lsbCBiZSB0aGUgY29tbWVudFxuICAgICAgICAgIC8vIHBsYWNlaG9sZGVyLlxuICAgICAgICAgIHBhcmVudE5vZGUoaHlkcmF0ZWRFbCB8fCBpbnN0YW5jZS5zdWJUcmVlLmVsKSxcbiAgICAgICAgICAvLyBhbmNob3Igd2lsbCBub3QgYmUgdXNlZCBpZiB0aGlzIGlzIGh5ZHJhdGlvbiwgc28gb25seSBuZWVkIHRvXG4gICAgICAgICAgLy8gY29uc2lkZXIgdGhlIGNvbW1lbnQgcGxhY2Vob2xkZXIgY2FzZS5cbiAgICAgICAgICBoeWRyYXRlZEVsID8gbnVsbCA6IG5leHQoaW5zdGFuY2Uuc3ViVHJlZSksXG4gICAgICAgICAgc3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgIG9wdGltaXplZDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgdm5vZGUyLnBsYWNlaG9sZGVyID0gbnVsbDtcbiAgICAgICAgICByZW1vdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUhPQ0hvc3RFbChpbnN0YW5jZSwgdm5vZGUyLmVsKTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luUGVuZGluZ1N1c3BlbnNlICYmIC0tc3VzcGVuc2UuZGVwcyA9PT0gMCkge1xuICAgICAgICAgIHN1c3BlbnNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1bm1vdW50KHBhcmVudFN1c3BlbnNlMiwgZG9SZW1vdmUpIHtcbiAgICAgIHN1c3BlbnNlLmlzVW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgIGlmIChzdXNwZW5zZS5hY3RpdmVCcmFuY2gpIHtcbiAgICAgICAgdW5tb3VudChcbiAgICAgICAgICBzdXNwZW5zZS5hY3RpdmVCcmFuY2gsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlMixcbiAgICAgICAgICBkb1JlbW92ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN1c3BlbnNlLnBlbmRpbmdCcmFuY2gpIHtcbiAgICAgICAgdW5tb3VudChcbiAgICAgICAgICBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZTIsXG4gICAgICAgICAgZG9SZW1vdmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBzdXNwZW5zZTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVTdXNwZW5zZShub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMsIGh5ZHJhdGVOb2RlKSB7XG4gIGNvbnN0IHN1c3BlbnNlID0gdm5vZGUuc3VzcGVuc2UgPSBjcmVhdGVTdXNwZW5zZUJvdW5kYXJ5KFxuICAgIHZub2RlLFxuICAgIHBhcmVudFN1c3BlbnNlLFxuICAgIHBhcmVudENvbXBvbmVudCxcbiAgICBub2RlLnBhcmVudE5vZGUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgbnVsbCxcbiAgICBuYW1lc3BhY2UsXG4gICAgc2xvdFNjb3BlSWRzLFxuICAgIG9wdGltaXplZCxcbiAgICByZW5kZXJlckludGVybmFscyxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHJlc3VsdCA9IGh5ZHJhdGVOb2RlKFxuICAgIG5vZGUsXG4gICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IHZub2RlLnNzQ29udGVudCxcbiAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgc3VzcGVuc2UsXG4gICAgc2xvdFNjb3BlSWRzLFxuICAgIG9wdGltaXplZFxuICApO1xuICBpZiAoc3VzcGVuc2UuZGVwcyA9PT0gMCkge1xuICAgIHN1c3BlbnNlLnJlc29sdmUoZmFsc2UsIHRydWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBub3JtYWxpemVTdXNwZW5zZUNoaWxkcmVuKHZub2RlKSB7XG4gIGNvbnN0IHsgc2hhcGVGbGFnLCBjaGlsZHJlbiB9ID0gdm5vZGU7XG4gIGNvbnN0IGlzU2xvdENoaWxkcmVuID0gc2hhcGVGbGFnICYgMzI7XG4gIHZub2RlLnNzQ29udGVudCA9IG5vcm1hbGl6ZVN1c3BlbnNlU2xvdChcbiAgICBpc1Nsb3RDaGlsZHJlbiA/IGNoaWxkcmVuLmRlZmF1bHQgOiBjaGlsZHJlblxuICApO1xuICB2bm9kZS5zc0ZhbGxiYWNrID0gaXNTbG90Q2hpbGRyZW4gPyBub3JtYWxpemVTdXNwZW5zZVNsb3QoY2hpbGRyZW4uZmFsbGJhY2spIDogY3JlYXRlVk5vZGUoQ29tbWVudCk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVTdXNwZW5zZVNsb3Qocykge1xuICBsZXQgYmxvY2s7XG4gIGlmIChpc0Z1bmN0aW9uKHMpKSB7XG4gICAgY29uc3QgdHJhY2tCbG9jayA9IGlzQmxvY2tUcmVlRW5hYmxlZCAmJiBzLl9jO1xuICAgIGlmICh0cmFja0Jsb2NrKSB7XG4gICAgICBzLl9kID0gZmFsc2U7XG4gICAgICBvcGVuQmxvY2soKTtcbiAgICB9XG4gICAgcyA9IHMoKTtcbiAgICBpZiAodHJhY2tCbG9jaykge1xuICAgICAgcy5fZCA9IHRydWU7XG4gICAgICBibG9jayA9IGN1cnJlbnRCbG9jaztcbiAgICAgIGNsb3NlQmxvY2soKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQXJyYXkocykpIHtcbiAgICBjb25zdCBzaW5nbGVDaGlsZCA9IGZpbHRlclNpbmdsZVJvb3Qocyk7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIXNpbmdsZUNoaWxkICYmIHMuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQgIT09IE5VTExfRFlOQU1JQ19DT01QT05FTlQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHdhcm4kMShgPFN1c3BlbnNlPiBzbG90cyBleHBlY3QgYSBzaW5nbGUgcm9vdCBub2RlLmApO1xuICAgIH1cbiAgICBzID0gc2luZ2xlQ2hpbGQ7XG4gIH1cbiAgcyA9IG5vcm1hbGl6ZVZOb2RlKHMpO1xuICBpZiAoYmxvY2sgJiYgIXMuZHluYW1pY0NoaWxkcmVuKSB7XG4gICAgcy5keW5hbWljQ2hpbGRyZW4gPSBibG9jay5maWx0ZXIoKGMpID0+IGMgIT09IHMpO1xuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gcXVldWVFZmZlY3RXaXRoU3VzcGVuc2UoZm4sIHN1c3BlbnNlKSB7XG4gIGlmIChzdXNwZW5zZSAmJiBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XG4gICAgaWYgKGlzQXJyYXkoZm4pKSB7XG4gICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goLi4uZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goZm4pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBxdWV1ZVBvc3RGbHVzaENiKGZuKTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBicmFuY2gpIHtcbiAgc3VzcGVuc2UuYWN0aXZlQnJhbmNoID0gYnJhbmNoO1xuICBjb25zdCB7IHZub2RlLCBwYXJlbnRDb21wb25lbnQgfSA9IHN1c3BlbnNlO1xuICBsZXQgZWwgPSBicmFuY2guZWw7XG4gIHdoaWxlICghZWwgJiYgYnJhbmNoLmNvbXBvbmVudCkge1xuICAgIGJyYW5jaCA9IGJyYW5jaC5jb21wb25lbnQuc3ViVHJlZTtcbiAgICBlbCA9IGJyYW5jaC5lbDtcbiAgfVxuICB2bm9kZS5lbCA9IGVsO1xuICBpZiAocGFyZW50Q29tcG9uZW50ICYmIHBhcmVudENvbXBvbmVudC5zdWJUcmVlID09PSB2bm9kZSkge1xuICAgIHBhcmVudENvbXBvbmVudC52bm9kZS5lbCA9IGVsO1xuICAgIHVwZGF0ZUhPQ0hvc3RFbChwYXJlbnRDb21wb25lbnQsIGVsKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNWTm9kZVN1c3BlbnNpYmxlKHZub2RlKSB7XG4gIGNvbnN0IHN1c3BlbnNpYmxlID0gdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMuc3VzcGVuc2libGU7XG4gIHJldHVybiBzdXNwZW5zaWJsZSAhPSBudWxsICYmIHN1c3BlbnNpYmxlICE9PSBmYWxzZTtcbn1cblxuY29uc3QgRnJhZ21lbnQgPSBTeW1ib2wuZm9yKFwidi1mZ3RcIik7XG5jb25zdCBUZXh0ID0gU3ltYm9sLmZvcihcInYtdHh0XCIpO1xuY29uc3QgQ29tbWVudCA9IFN5bWJvbC5mb3IoXCJ2LWNtdFwiKTtcbmNvbnN0IFN0YXRpYyA9IFN5bWJvbC5mb3IoXCJ2LXN0Y1wiKTtcbmNvbnN0IGJsb2NrU3RhY2sgPSBbXTtcbmxldCBjdXJyZW50QmxvY2sgPSBudWxsO1xuZnVuY3Rpb24gb3BlbkJsb2NrKGRpc2FibGVUcmFja2luZyA9IGZhbHNlKSB7XG4gIGJsb2NrU3RhY2sucHVzaChjdXJyZW50QmxvY2sgPSBkaXNhYmxlVHJhY2tpbmcgPyBudWxsIDogW10pO1xufVxuZnVuY3Rpb24gY2xvc2VCbG9jaygpIHtcbiAgYmxvY2tTdGFjay5wb3AoKTtcbiAgY3VycmVudEJsb2NrID0gYmxvY2tTdGFja1tibG9ja1N0YWNrLmxlbmd0aCAtIDFdIHx8IG51bGw7XG59XG5sZXQgaXNCbG9ja1RyZWVFbmFibGVkID0gMTtcbmZ1bmN0aW9uIHNldEJsb2NrVHJhY2tpbmcodmFsdWUsIGluVk9uY2UgPSBmYWxzZSkge1xuICBpc0Jsb2NrVHJlZUVuYWJsZWQgKz0gdmFsdWU7XG4gIGlmICh2YWx1ZSA8IDAgJiYgY3VycmVudEJsb2NrICYmIGluVk9uY2UpIHtcbiAgICBjdXJyZW50QmxvY2suaGFzT25jZSA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldHVwQmxvY2sodm5vZGUpIHtcbiAgdm5vZGUuZHluYW1pY0NoaWxkcmVuID0gaXNCbG9ja1RyZWVFbmFibGVkID4gMCA/IGN1cnJlbnRCbG9jayB8fCBFTVBUWV9BUlIgOiBudWxsO1xuICBjbG9zZUJsb2NrKCk7XG4gIGlmIChpc0Jsb2NrVHJlZUVuYWJsZWQgPiAwICYmIGN1cnJlbnRCbG9jaykge1xuICAgIGN1cnJlbnRCbG9jay5wdXNoKHZub2RlKTtcbiAgfVxuICByZXR1cm4gdm5vZGU7XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50QmxvY2sodHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcywgc2hhcGVGbGFnKSB7XG4gIHJldHVybiBzZXR1cEJsb2NrKFxuICAgIGNyZWF0ZUJhc2VWTm9kZShcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgcGF0Y2hGbGFnLFxuICAgICAgZHluYW1pY1Byb3BzLFxuICAgICAgc2hhcGVGbGFnLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUJsb2NrKHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgcGF0Y2hGbGFnLCBkeW5hbWljUHJvcHMpIHtcbiAgcmV0dXJuIHNldHVwQmxvY2soXG4gICAgY3JlYXRlVk5vZGUoXG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIHBhdGNoRmxhZyxcbiAgICAgIGR5bmFtaWNQcm9wcyxcbiAgICAgIHRydWVcbiAgICApXG4gICk7XG59XG5mdW5jdGlvbiBpc1ZOb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IHZhbHVlLl9fdl9pc1ZOb2RlID09PSB0cnVlIDogZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NhbWVWTm9kZVR5cGUobjEsIG4yKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIG4yLnNoYXBlRmxhZyAmIDYgJiYgbjEuY29tcG9uZW50KSB7XG4gICAgY29uc3QgZGlydHlJbnN0YW5jZXMgPSBobXJEaXJ0eUNvbXBvbmVudHMuZ2V0KG4yLnR5cGUpO1xuICAgIGlmIChkaXJ0eUluc3RhbmNlcyAmJiBkaXJ0eUluc3RhbmNlcy5oYXMobjEuY29tcG9uZW50KSkge1xuICAgICAgbjEuc2hhcGVGbGFnICY9IC0yNTc7XG4gICAgICBuMi5zaGFwZUZsYWcgJj0gLTUxMztcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG4xLnR5cGUgPT09IG4yLnR5cGUgJiYgbjEua2V5ID09PSBuMi5rZXk7XG59XG5sZXQgdm5vZGVBcmdzVHJhbnNmb3JtZXI7XG5mdW5jdGlvbiB0cmFuc2Zvcm1WTm9kZUFyZ3ModHJhbnNmb3JtZXIpIHtcbiAgdm5vZGVBcmdzVHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lcjtcbn1cbmNvbnN0IGNyZWF0ZVZOb2RlV2l0aEFyZ3NUcmFuc2Zvcm0gPSAoLi4uYXJncykgPT4ge1xuICByZXR1cm4gX2NyZWF0ZVZOb2RlKFxuICAgIC4uLnZub2RlQXJnc1RyYW5zZm9ybWVyID8gdm5vZGVBcmdzVHJhbnNmb3JtZXIoYXJncywgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlKSA6IGFyZ3NcbiAgKTtcbn07XG5jb25zdCBub3JtYWxpemVLZXkgPSAoeyBrZXkgfSkgPT4ga2V5ICE9IG51bGwgPyBrZXkgOiBudWxsO1xuY29uc3Qgbm9ybWFsaXplUmVmID0gKHtcbiAgcmVmLFxuICByZWZfa2V5LFxuICByZWZfZm9yXG59KSA9PiB7XG4gIGlmICh0eXBlb2YgcmVmID09PSBcIm51bWJlclwiKSB7XG4gICAgcmVmID0gXCJcIiArIHJlZjtcbiAgfVxuICByZXR1cm4gcmVmICE9IG51bGwgPyBpc1N0cmluZyhyZWYpIHx8IGlzUmVmKHJlZikgfHwgaXNGdW5jdGlvbihyZWYpID8geyBpOiBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UsIHI6IHJlZiwgazogcmVmX2tleSwgZjogISFyZWZfZm9yIH0gOiByZWYgOiBudWxsO1xufTtcbmZ1bmN0aW9uIGNyZWF0ZUJhc2VWTm9kZSh0eXBlLCBwcm9wcyA9IG51bGwsIGNoaWxkcmVuID0gbnVsbCwgcGF0Y2hGbGFnID0gMCwgZHluYW1pY1Byb3BzID0gbnVsbCwgc2hhcGVGbGFnID0gdHlwZSA9PT0gRnJhZ21lbnQgPyAwIDogMSwgaXNCbG9ja05vZGUgPSBmYWxzZSwgbmVlZEZ1bGxDaGlsZHJlbk5vcm1hbGl6YXRpb24gPSBmYWxzZSkge1xuICBjb25zdCB2bm9kZSA9IHtcbiAgICBfX3ZfaXNWTm9kZTogdHJ1ZSxcbiAgICBfX3Zfc2tpcDogdHJ1ZSxcbiAgICB0eXBlLFxuICAgIHByb3BzLFxuICAgIGtleTogcHJvcHMgJiYgbm9ybWFsaXplS2V5KHByb3BzKSxcbiAgICByZWY6IHByb3BzICYmIG5vcm1hbGl6ZVJlZihwcm9wcyksXG4gICAgc2NvcGVJZDogY3VycmVudFNjb3BlSWQsXG4gICAgc2xvdFNjb3BlSWRzOiBudWxsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICBzdXNwZW5zZTogbnVsbCxcbiAgICBzc0NvbnRlbnQ6IG51bGwsXG4gICAgc3NGYWxsYmFjazogbnVsbCxcbiAgICBkaXJzOiBudWxsLFxuICAgIHRyYW5zaXRpb246IG51bGwsXG4gICAgZWw6IG51bGwsXG4gICAgYW5jaG9yOiBudWxsLFxuICAgIHRhcmdldDogbnVsbCxcbiAgICB0YXJnZXRTdGFydDogbnVsbCxcbiAgICB0YXJnZXRBbmNob3I6IG51bGwsXG4gICAgc3RhdGljQ291bnQ6IDAsXG4gICAgc2hhcGVGbGFnLFxuICAgIHBhdGNoRmxhZyxcbiAgICBkeW5hbWljUHJvcHMsXG4gICAgZHluYW1pY0NoaWxkcmVuOiBudWxsLFxuICAgIGFwcENvbnRleHQ6IG51bGwsXG4gICAgY3R4OiBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2VcbiAgfTtcbiAgaWYgKG5lZWRGdWxsQ2hpbGRyZW5Ob3JtYWxpemF0aW9uKSB7XG4gICAgbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuKTtcbiAgICBpZiAoc2hhcGVGbGFnICYgMTI4KSB7XG4gICAgICB0eXBlLm5vcm1hbGl6ZSh2bm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNoaWxkcmVuKSB7XG4gICAgdm5vZGUuc2hhcGVGbGFnIHw9IGlzU3RyaW5nKGNoaWxkcmVuKSA/IDggOiAxNjtcbiAgfVxuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB2bm9kZS5rZXkgIT09IHZub2RlLmtleSkge1xuICAgIHdhcm4kMShgVk5vZGUgY3JlYXRlZCB3aXRoIGludmFsaWQga2V5IChOYU4pLiBWTm9kZSB0eXBlOmAsIHZub2RlLnR5cGUpO1xuICB9XG4gIGlmIChpc0Jsb2NrVHJlZUVuYWJsZWQgPiAwICYmIC8vIGF2b2lkIGEgYmxvY2sgbm9kZSBmcm9tIHRyYWNraW5nIGl0c2VsZlxuICAhaXNCbG9ja05vZGUgJiYgLy8gaGFzIGN1cnJlbnQgcGFyZW50IGJsb2NrXG4gIGN1cnJlbnRCbG9jayAmJiAvLyBwcmVzZW5jZSBvZiBhIHBhdGNoIGZsYWcgaW5kaWNhdGVzIHRoaXMgbm9kZSBuZWVkcyBwYXRjaGluZyBvbiB1cGRhdGVzLlxuICAvLyBjb21wb25lbnQgbm9kZXMgYWxzbyBzaG91bGQgYWx3YXlzIGJlIHBhdGNoZWQsIGJlY2F1c2UgZXZlbiBpZiB0aGVcbiAgLy8gY29tcG9uZW50IGRvZXNuJ3QgbmVlZCB0byB1cGRhdGUsIGl0IG5lZWRzIHRvIHBlcnNpc3QgdGhlIGluc3RhbmNlIG9uIHRvXG4gIC8vIHRoZSBuZXh0IHZub2RlIHNvIHRoYXQgaXQgY2FuIGJlIHByb3Blcmx5IHVubW91bnRlZCBsYXRlci5cbiAgKHZub2RlLnBhdGNoRmxhZyA+IDAgfHwgc2hhcGVGbGFnICYgNikgJiYgLy8gdGhlIEVWRU5UUyBmbGFnIGlzIG9ubHkgZm9yIGh5ZHJhdGlvbiBhbmQgaWYgaXQgaXMgdGhlIG9ubHkgZmxhZywgdGhlXG4gIC8vIHZub2RlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBkeW5hbWljIGR1ZSB0byBoYW5kbGVyIGNhY2hpbmcuXG4gIHZub2RlLnBhdGNoRmxhZyAhPT0gMzIpIHtcbiAgICBjdXJyZW50QmxvY2sucHVzaCh2bm9kZSk7XG4gIH1cbiAgcmV0dXJuIHZub2RlO1xufVxuY29uc3QgY3JlYXRlVk5vZGUgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gY3JlYXRlVk5vZGVXaXRoQXJnc1RyYW5zZm9ybSA6IF9jcmVhdGVWTm9kZTtcbmZ1bmN0aW9uIF9jcmVhdGVWTm9kZSh0eXBlLCBwcm9wcyA9IG51bGwsIGNoaWxkcmVuID0gbnVsbCwgcGF0Y2hGbGFnID0gMCwgZHluYW1pY1Byb3BzID0gbnVsbCwgaXNCbG9ja05vZGUgPSBmYWxzZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZSA9PT0gTlVMTF9EWU5BTUlDX0NPTVBPTkVOVCkge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICF0eXBlKSB7XG4gICAgICB3YXJuJDEoYEludmFsaWQgdm5vZGUgdHlwZSB3aGVuIGNyZWF0aW5nIHZub2RlOiAke3R5cGV9LmApO1xuICAgIH1cbiAgICB0eXBlID0gQ29tbWVudDtcbiAgfVxuICBpZiAoaXNWTm9kZSh0eXBlKSkge1xuICAgIGNvbnN0IGNsb25lZCA9IGNsb25lVk5vZGUoXG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICB0cnVlXG4gICAgICAvKiBtZXJnZVJlZjogdHJ1ZSAqL1xuICAgICk7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBub3JtYWxpemVDaGlsZHJlbihjbG9uZWQsIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgaWYgKGlzQmxvY2tUcmVlRW5hYmxlZCA+IDAgJiYgIWlzQmxvY2tOb2RlICYmIGN1cnJlbnRCbG9jaykge1xuICAgICAgaWYgKGNsb25lZC5zaGFwZUZsYWcgJiA2KSB7XG4gICAgICAgIGN1cnJlbnRCbG9ja1tjdXJyZW50QmxvY2suaW5kZXhPZih0eXBlKV0gPSBjbG9uZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50QmxvY2sucHVzaChjbG9uZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBjbG9uZWQucGF0Y2hGbGFnID0gLTI7XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxuICBpZiAoaXNDbGFzc0NvbXBvbmVudCh0eXBlKSkge1xuICAgIHR5cGUgPSB0eXBlLl9fdmNjT3B0cztcbiAgfVxuICBpZiAocHJvcHMpIHtcbiAgICBwcm9wcyA9IGd1YXJkUmVhY3RpdmVQcm9wcyhwcm9wcyk7XG4gICAgbGV0IHsgY2xhc3M6IGtsYXNzLCBzdHlsZSB9ID0gcHJvcHM7XG4gICAgaWYgKGtsYXNzICYmICFpc1N0cmluZyhrbGFzcykpIHtcbiAgICAgIHByb3BzLmNsYXNzID0gbm9ybWFsaXplQ2xhc3Moa2xhc3MpO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3Qoc3R5bGUpKSB7XG4gICAgICBpZiAoaXNQcm94eShzdHlsZSkgJiYgIWlzQXJyYXkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlID0gZXh0ZW5kKHt9LCBzdHlsZSk7XG4gICAgICB9XG4gICAgICBwcm9wcy5zdHlsZSA9IG5vcm1hbGl6ZVN0eWxlKHN0eWxlKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2hhcGVGbGFnID0gaXNTdHJpbmcodHlwZSkgPyAxIDogaXNTdXNwZW5zZSh0eXBlKSA/IDEyOCA6IGlzVGVsZXBvcnQodHlwZSkgPyA2NCA6IGlzT2JqZWN0KHR5cGUpID8gNCA6IGlzRnVuY3Rpb24odHlwZSkgPyAyIDogMDtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc2hhcGVGbGFnICYgNCAmJiBpc1Byb3h5KHR5cGUpKSB7XG4gICAgdHlwZSA9IHRvUmF3KHR5cGUpO1xuICAgIHdhcm4kMShcbiAgICAgIGBWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgdGhhdCB3YXMgbWFkZSBhIHJlYWN0aXZlIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCBhbmQgc2hvdWxkIGJlIGF2b2lkZWQgYnkgbWFya2luZyB0aGUgY29tcG9uZW50IHdpdGggXFxgbWFya1Jhd1xcYCBvciB1c2luZyBcXGBzaGFsbG93UmVmXFxgIGluc3RlYWQgb2YgXFxgcmVmXFxgLmAsXG4gICAgICBgXG5Db21wb25lbnQgdGhhdCB3YXMgbWFkZSByZWFjdGl2ZTogYCxcbiAgICAgIHR5cGVcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVCYXNlVk5vZGUoXG4gICAgdHlwZSxcbiAgICBwcm9wcyxcbiAgICBjaGlsZHJlbixcbiAgICBwYXRjaEZsYWcsXG4gICAgZHluYW1pY1Byb3BzLFxuICAgIHNoYXBlRmxhZyxcbiAgICBpc0Jsb2NrTm9kZSxcbiAgICB0cnVlXG4gICk7XG59XG5mdW5jdGlvbiBndWFyZFJlYWN0aXZlUHJvcHMocHJvcHMpIHtcbiAgaWYgKCFwcm9wcykgcmV0dXJuIG51bGw7XG4gIHJldHVybiBpc1Byb3h5KHByb3BzKSB8fCBpc0ludGVybmFsT2JqZWN0KHByb3BzKSA/IGV4dGVuZCh7fSwgcHJvcHMpIDogcHJvcHM7XG59XG5mdW5jdGlvbiBjbG9uZVZOb2RlKHZub2RlLCBleHRyYVByb3BzLCBtZXJnZVJlZiA9IGZhbHNlLCBjbG9uZVRyYW5zaXRpb24gPSBmYWxzZSkge1xuICBjb25zdCB7IHByb3BzLCByZWYsIHBhdGNoRmxhZywgY2hpbGRyZW4sIHRyYW5zaXRpb24gfSA9IHZub2RlO1xuICBjb25zdCBtZXJnZWRQcm9wcyA9IGV4dHJhUHJvcHMgPyBtZXJnZVByb3BzKHByb3BzIHx8IHt9LCBleHRyYVByb3BzKSA6IHByb3BzO1xuICBjb25zdCBjbG9uZWQgPSB7XG4gICAgX192X2lzVk5vZGU6IHRydWUsXG4gICAgX192X3NraXA6IHRydWUsXG4gICAgdHlwZTogdm5vZGUudHlwZSxcbiAgICBwcm9wczogbWVyZ2VkUHJvcHMsXG4gICAga2V5OiBtZXJnZWRQcm9wcyAmJiBub3JtYWxpemVLZXkobWVyZ2VkUHJvcHMpLFxuICAgIHJlZjogZXh0cmFQcm9wcyAmJiBleHRyYVByb3BzLnJlZiA/IChcbiAgICAgIC8vICMyMDc4IGluIHRoZSBjYXNlIG9mIDxjb21wb25lbnQgOmlzPVwidm5vZGVcIiByZWY9XCJleHRyYVwiLz5cbiAgICAgIC8vIGlmIHRoZSB2bm9kZSBpdHNlbGYgYWxyZWFkeSBoYXMgYSByZWYsIGNsb25lVk5vZGUgd2lsbCBuZWVkIHRvIG1lcmdlXG4gICAgICAvLyB0aGUgcmVmcyBzbyB0aGUgc2luZ2xlIHZub2RlIGNhbiBiZSBzZXQgb24gbXVsdGlwbGUgcmVmc1xuICAgICAgbWVyZ2VSZWYgJiYgcmVmID8gaXNBcnJheShyZWYpID8gcmVmLmNvbmNhdChub3JtYWxpemVSZWYoZXh0cmFQcm9wcykpIDogW3JlZiwgbm9ybWFsaXplUmVmKGV4dHJhUHJvcHMpXSA6IG5vcm1hbGl6ZVJlZihleHRyYVByb3BzKVxuICAgICkgOiByZWYsXG4gICAgc2NvcGVJZDogdm5vZGUuc2NvcGVJZCxcbiAgICBzbG90U2NvcGVJZHM6IHZub2RlLnNsb3RTY29wZUlkcyxcbiAgICBjaGlsZHJlbjogISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBwYXRjaEZsYWcgPT09IC0xICYmIGlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4ubWFwKGRlZXBDbG9uZVZOb2RlKSA6IGNoaWxkcmVuLFxuICAgIHRhcmdldDogdm5vZGUudGFyZ2V0LFxuICAgIHRhcmdldFN0YXJ0OiB2bm9kZS50YXJnZXRTdGFydCxcbiAgICB0YXJnZXRBbmNob3I6IHZub2RlLnRhcmdldEFuY2hvcixcbiAgICBzdGF0aWNDb3VudDogdm5vZGUuc3RhdGljQ291bnQsXG4gICAgc2hhcGVGbGFnOiB2bm9kZS5zaGFwZUZsYWcsXG4gICAgLy8gaWYgdGhlIHZub2RlIGlzIGNsb25lZCB3aXRoIGV4dHJhIHByb3BzLCB3ZSBjYW4gbm8gbG9uZ2VyIGFzc3VtZSBpdHNcbiAgICAvLyBleGlzdGluZyBwYXRjaCBmbGFnIHRvIGJlIHJlbGlhYmxlIGFuZCBuZWVkIHRvIGFkZCB0aGUgRlVMTF9QUk9QUyBmbGFnLlxuICAgIC8vIG5vdGU6IHByZXNlcnZlIGZsYWcgZm9yIGZyYWdtZW50cyBzaW5jZSB0aGV5IHVzZSB0aGUgZmxhZyBmb3IgY2hpbGRyZW5cbiAgICAvLyBmYXN0IHBhdGhzIG9ubHkuXG4gICAgcGF0Y2hGbGFnOiBleHRyYVByb3BzICYmIHZub2RlLnR5cGUgIT09IEZyYWdtZW50ID8gcGF0Y2hGbGFnID09PSAtMSA/IDE2IDogcGF0Y2hGbGFnIHwgMTYgOiBwYXRjaEZsYWcsXG4gICAgZHluYW1pY1Byb3BzOiB2bm9kZS5keW5hbWljUHJvcHMsXG4gICAgZHluYW1pY0NoaWxkcmVuOiB2bm9kZS5keW5hbWljQ2hpbGRyZW4sXG4gICAgYXBwQ29udGV4dDogdm5vZGUuYXBwQ29udGV4dCxcbiAgICBkaXJzOiB2bm9kZS5kaXJzLFxuICAgIHRyYW5zaXRpb24sXG4gICAgLy8gVGhlc2Ugc2hvdWxkIHRlY2huaWNhbGx5IG9ubHkgYmUgbm9uLW51bGwgb24gbW91bnRlZCBWTm9kZXMuIEhvd2V2ZXIsXG4gICAgLy8gdGhleSAqc2hvdWxkKiBiZSBjb3BpZWQgZm9yIGtlcHQtYWxpdmUgdm5vZGVzLiBTbyB3ZSBqdXN0IGFsd2F5cyBjb3B5XG4gICAgLy8gdGhlbSBzaW5jZSB0aGVtIGJlaW5nIG5vbi1udWxsIGR1cmluZyBhIG1vdW50IGRvZXNuJ3QgYWZmZWN0IHRoZSBsb2dpYyBhc1xuICAgIC8vIHRoZXkgd2lsbCBzaW1wbHkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgY29tcG9uZW50OiB2bm9kZS5jb21wb25lbnQsXG4gICAgc3VzcGVuc2U6IHZub2RlLnN1c3BlbnNlLFxuICAgIHNzQ29udGVudDogdm5vZGUuc3NDb250ZW50ICYmIGNsb25lVk5vZGUodm5vZGUuc3NDb250ZW50KSxcbiAgICBzc0ZhbGxiYWNrOiB2bm9kZS5zc0ZhbGxiYWNrICYmIGNsb25lVk5vZGUodm5vZGUuc3NGYWxsYmFjayksXG4gICAgcGxhY2Vob2xkZXI6IHZub2RlLnBsYWNlaG9sZGVyLFxuICAgIGVsOiB2bm9kZS5lbCxcbiAgICBhbmNob3I6IHZub2RlLmFuY2hvcixcbiAgICBjdHg6IHZub2RlLmN0eCxcbiAgICBjZTogdm5vZGUuY2VcbiAgfTtcbiAgaWYgKHRyYW5zaXRpb24gJiYgY2xvbmVUcmFuc2l0aW9uKSB7XG4gICAgc2V0VHJhbnNpdGlvbkhvb2tzKFxuICAgICAgY2xvbmVkLFxuICAgICAgdHJhbnNpdGlvbi5jbG9uZShjbG9uZWQpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY2xvbmVkO1xufVxuZnVuY3Rpb24gZGVlcENsb25lVk5vZGUodm5vZGUpIHtcbiAgY29uc3QgY2xvbmVkID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gIGlmIChpc0FycmF5KHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGNsb25lZC5jaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuLm1hcChkZWVwQ2xvbmVWTm9kZSk7XG4gIH1cbiAgcmV0dXJuIGNsb25lZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSh0ZXh0ID0gXCIgXCIsIGZsYWcgPSAwKSB7XG4gIHJldHVybiBjcmVhdGVWTm9kZShUZXh0LCBudWxsLCB0ZXh0LCBmbGFnKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRpY1ZOb2RlKGNvbnRlbnQsIG51bWJlck9mTm9kZXMpIHtcbiAgY29uc3Qgdm5vZGUgPSBjcmVhdGVWTm9kZShTdGF0aWMsIG51bGwsIGNvbnRlbnQpO1xuICB2bm9kZS5zdGF0aWNDb3VudCA9IG51bWJlck9mTm9kZXM7XG4gIHJldHVybiB2bm9kZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnRWTm9kZSh0ZXh0ID0gXCJcIiwgYXNCbG9jayA9IGZhbHNlKSB7XG4gIHJldHVybiBhc0Jsb2NrID8gKG9wZW5CbG9jaygpLCBjcmVhdGVCbG9jayhDb21tZW50LCBudWxsLCB0ZXh0KSkgOiBjcmVhdGVWTm9kZShDb21tZW50LCBudWxsLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZOb2RlKGNoaWxkKSB7XG4gIGlmIChjaGlsZCA9PSBudWxsIHx8IHR5cGVvZiBjaGlsZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUoQ29tbWVudCk7XG4gIH0gZWxzZSBpZiAoaXNBcnJheShjaGlsZCkpIHtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUoXG4gICAgICBGcmFnbWVudCxcbiAgICAgIG51bGwsXG4gICAgICAvLyAjMzY2NiwgYXZvaWQgcmVmZXJlbmNlIHBvbGx1dGlvbiB3aGVuIHJldXNpbmcgdm5vZGVcbiAgICAgIGNoaWxkLnNsaWNlKClcbiAgICApO1xuICB9IGVsc2UgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XG4gICAgcmV0dXJuIGNsb25lSWZNb3VudGVkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUoVGV4dCwgbnVsbCwgU3RyaW5nKGNoaWxkKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNsb25lSWZNb3VudGVkKGNoaWxkKSB7XG4gIHJldHVybiBjaGlsZC5lbCA9PT0gbnVsbCAmJiBjaGlsZC5wYXRjaEZsYWcgIT09IC0xIHx8IGNoaWxkLm1lbW8gPyBjaGlsZCA6IGNsb25lVk5vZGUoY2hpbGQpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuKSB7XG4gIGxldCB0eXBlID0gMDtcbiAgY29uc3QgeyBzaGFwZUZsYWcgfSA9IHZub2RlO1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIHR5cGUgPSAxNjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09IFwib2JqZWN0XCIpIHtcbiAgICBpZiAoc2hhcGVGbGFnICYgKDEgfCA2NCkpIHtcbiAgICAgIGNvbnN0IHNsb3QgPSBjaGlsZHJlbi5kZWZhdWx0O1xuICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgc2xvdC5fYyAmJiAoc2xvdC5fZCA9IGZhbHNlKTtcbiAgICAgICAgbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUsIHNsb3QoKSk7XG4gICAgICAgIHNsb3QuX2MgJiYgKHNsb3QuX2QgPSB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZSA9IDMyO1xuICAgICAgY29uc3Qgc2xvdEZsYWcgPSBjaGlsZHJlbi5fO1xuICAgICAgaWYgKCFzbG90RmxhZyAmJiAhaXNJbnRlcm5hbE9iamVjdChjaGlsZHJlbikpIHtcbiAgICAgICAgY2hpbGRyZW4uX2N0eCA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgICAgIH0gZWxzZSBpZiAoc2xvdEZsYWcgPT09IDMgJiYgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlKSB7XG4gICAgICAgIGlmIChjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2Uuc2xvdHMuXyA9PT0gMSkge1xuICAgICAgICAgIGNoaWxkcmVuLl8gPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoaWxkcmVuLl8gPSAyO1xuICAgICAgICAgIHZub2RlLnBhdGNoRmxhZyB8PSAxMDI0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oY2hpbGRyZW4pKSB7XG4gICAgY2hpbGRyZW4gPSB7IGRlZmF1bHQ6IGNoaWxkcmVuLCBfY3R4OiBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgfTtcbiAgICB0eXBlID0gMzI7XG4gIH0gZWxzZSB7XG4gICAgY2hpbGRyZW4gPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgIGlmIChzaGFwZUZsYWcgJiA2NCkge1xuICAgICAgdHlwZSA9IDE2O1xuICAgICAgY2hpbGRyZW4gPSBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSA4O1xuICAgIH1cbiAgfVxuICB2bm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB2bm9kZS5zaGFwZUZsYWcgfD0gdHlwZTtcbn1cbmZ1bmN0aW9uIG1lcmdlUHJvcHMoLi4uYXJncykge1xuICBjb25zdCByZXQgPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG9NZXJnZSA9IGFyZ3NbaV07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdG9NZXJnZSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICAgIGlmIChyZXQuY2xhc3MgIT09IHRvTWVyZ2UuY2xhc3MpIHtcbiAgICAgICAgICByZXQuY2xhc3MgPSBub3JtYWxpemVDbGFzcyhbcmV0LmNsYXNzLCB0b01lcmdlLmNsYXNzXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgcmV0LnN0eWxlID0gbm9ybWFsaXplU3R5bGUoW3JldC5zdHlsZSwgdG9NZXJnZS5zdHlsZV0pO1xuICAgICAgfSBlbHNlIGlmIChpc09uKGtleSkpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXRba2V5XTtcbiAgICAgICAgY29uc3QgaW5jb21pbmcgPSB0b01lcmdlW2tleV07XG4gICAgICAgIGlmIChpbmNvbWluZyAmJiBleGlzdGluZyAhPT0gaW5jb21pbmcgJiYgIShpc0FycmF5KGV4aXN0aW5nKSAmJiBleGlzdGluZy5pbmNsdWRlcyhpbmNvbWluZykpKSB7XG4gICAgICAgICAgcmV0W2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaW5jb21pbmcpIDogaW5jb21pbmc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSBcIlwiKSB7XG4gICAgICAgIHJldFtrZXldID0gdG9NZXJnZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gaW52b2tlVk5vZGVIb29rKGhvb2ssIGluc3RhbmNlLCB2bm9kZSwgcHJldlZOb2RlID0gbnVsbCkge1xuICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhob29rLCBpbnN0YW5jZSwgNywgW1xuICAgIHZub2RlLFxuICAgIHByZXZWTm9kZVxuICBdKTtcbn1cblxuY29uc3QgZW1wdHlBcHBDb250ZXh0ID0gY3JlYXRlQXBwQ29udGV4dCgpO1xubGV0IHVpZCA9IDA7XG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZSh2bm9kZSwgcGFyZW50LCBzdXNwZW5zZSkge1xuICBjb25zdCB0eXBlID0gdm5vZGUudHlwZTtcbiAgY29uc3QgYXBwQ29udGV4dCA9IChwYXJlbnQgPyBwYXJlbnQuYXBwQ29udGV4dCA6IHZub2RlLmFwcENvbnRleHQpIHx8IGVtcHR5QXBwQ29udGV4dDtcbiAgY29uc3QgaW5zdGFuY2UgPSB7XG4gICAgdWlkOiB1aWQrKyxcbiAgICB2bm9kZSxcbiAgICB0eXBlLFxuICAgIHBhcmVudCxcbiAgICBhcHBDb250ZXh0LFxuICAgIHJvb3Q6IG51bGwsXG4gICAgLy8gdG8gYmUgaW1tZWRpYXRlbHkgc2V0XG4gICAgbmV4dDogbnVsbCxcbiAgICBzdWJUcmVlOiBudWxsLFxuICAgIC8vIHdpbGwgYmUgc2V0IHN5bmNocm9ub3VzbHkgcmlnaHQgYWZ0ZXIgY3JlYXRpb25cbiAgICBlZmZlY3Q6IG51bGwsXG4gICAgdXBkYXRlOiBudWxsLFxuICAgIC8vIHdpbGwgYmUgc2V0IHN5bmNocm9ub3VzbHkgcmlnaHQgYWZ0ZXIgY3JlYXRpb25cbiAgICBqb2I6IG51bGwsXG4gICAgc2NvcGU6IG5ldyBFZmZlY3RTY29wZShcbiAgICAgIHRydWVcbiAgICAgIC8qIGRldGFjaGVkICovXG4gICAgKSxcbiAgICByZW5kZXI6IG51bGwsXG4gICAgcHJveHk6IG51bGwsXG4gICAgZXhwb3NlZDogbnVsbCxcbiAgICBleHBvc2VQcm94eTogbnVsbCxcbiAgICB3aXRoUHJveHk6IG51bGwsXG4gICAgcHJvdmlkZXM6IHBhcmVudCA/IHBhcmVudC5wcm92aWRlcyA6IE9iamVjdC5jcmVhdGUoYXBwQ29udGV4dC5wcm92aWRlcyksXG4gICAgaWRzOiBwYXJlbnQgPyBwYXJlbnQuaWRzIDogW1wiXCIsIDAsIDBdLFxuICAgIGFjY2Vzc0NhY2hlOiBudWxsLFxuICAgIHJlbmRlckNhY2hlOiBbXSxcbiAgICAvLyBsb2NhbCByZXNvbHZlZCBhc3NldHNcbiAgICBjb21wb25lbnRzOiBudWxsLFxuICAgIGRpcmVjdGl2ZXM6IG51bGwsXG4gICAgLy8gcmVzb2x2ZWQgcHJvcHMgYW5kIGVtaXRzIG9wdGlvbnNcbiAgICBwcm9wc09wdGlvbnM6IG5vcm1hbGl6ZVByb3BzT3B0aW9ucyh0eXBlLCBhcHBDb250ZXh0KSxcbiAgICBlbWl0c09wdGlvbnM6IG5vcm1hbGl6ZUVtaXRzT3B0aW9ucyh0eXBlLCBhcHBDb250ZXh0KSxcbiAgICAvLyBlbWl0XG4gICAgZW1pdDogbnVsbCxcbiAgICAvLyB0byBiZSBzZXQgaW1tZWRpYXRlbHlcbiAgICBlbWl0dGVkOiBudWxsLFxuICAgIC8vIHByb3BzIGRlZmF1bHQgdmFsdWVcbiAgICBwcm9wc0RlZmF1bHRzOiBFTVBUWV9PQkosXG4gICAgLy8gaW5oZXJpdEF0dHJzXG4gICAgaW5oZXJpdEF0dHJzOiB0eXBlLmluaGVyaXRBdHRycyxcbiAgICAvLyBzdGF0ZVxuICAgIGN0eDogRU1QVFlfT0JKLFxuICAgIGRhdGE6IEVNUFRZX09CSixcbiAgICBwcm9wczogRU1QVFlfT0JKLFxuICAgIGF0dHJzOiBFTVBUWV9PQkosXG4gICAgc2xvdHM6IEVNUFRZX09CSixcbiAgICByZWZzOiBFTVBUWV9PQkosXG4gICAgc2V0dXBTdGF0ZTogRU1QVFlfT0JKLFxuICAgIHNldHVwQ29udGV4dDogbnVsbCxcbiAgICAvLyBzdXNwZW5zZSByZWxhdGVkXG4gICAgc3VzcGVuc2UsXG4gICAgc3VzcGVuc2VJZDogc3VzcGVuc2UgPyBzdXNwZW5zZS5wZW5kaW5nSWQgOiAwLFxuICAgIGFzeW5jRGVwOiBudWxsLFxuICAgIGFzeW5jUmVzb2x2ZWQ6IGZhbHNlLFxuICAgIC8vIGxpZmVjeWNsZSBob29rc1xuICAgIC8vIG5vdCB1c2luZyBlbnVtcyBoZXJlIGJlY2F1c2UgaXQgcmVzdWx0cyBpbiBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICBpc1VubW91bnRlZDogZmFsc2UsXG4gICAgaXNEZWFjdGl2YXRlZDogZmFsc2UsXG4gICAgYmM6IG51bGwsXG4gICAgYzogbnVsbCxcbiAgICBibTogbnVsbCxcbiAgICBtOiBudWxsLFxuICAgIGJ1OiBudWxsLFxuICAgIHU6IG51bGwsXG4gICAgdW06IG51bGwsXG4gICAgYnVtOiBudWxsLFxuICAgIGRhOiBudWxsLFxuICAgIGE6IG51bGwsXG4gICAgcnRnOiBudWxsLFxuICAgIHJ0YzogbnVsbCxcbiAgICBlYzogbnVsbCxcbiAgICBzcDogbnVsbFxuICB9O1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGluc3RhbmNlLmN0eCA9IGNyZWF0ZURldlJlbmRlckNvbnRleHQoaW5zdGFuY2UpO1xuICB9IGVsc2Uge1xuICAgIGluc3RhbmNlLmN0eCA9IHsgXzogaW5zdGFuY2UgfTtcbiAgfVxuICBpbnN0YW5jZS5yb290ID0gcGFyZW50ID8gcGFyZW50LnJvb3QgOiBpbnN0YW5jZTtcbiAgaW5zdGFuY2UuZW1pdCA9IGVtaXQuYmluZChudWxsLCBpbnN0YW5jZSk7XG4gIGlmICh2bm9kZS5jZSkge1xuICAgIHZub2RlLmNlKGluc3RhbmNlKTtcbiAgfVxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5sZXQgY3VycmVudEluc3RhbmNlID0gbnVsbDtcbmNvbnN0IGdldEN1cnJlbnRJbnN0YW5jZSA9ICgpID0+IGN1cnJlbnRJbnN0YW5jZSB8fCBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG5sZXQgaW50ZXJuYWxTZXRDdXJyZW50SW5zdGFuY2U7XG5sZXQgc2V0SW5TU1JTZXR1cFN0YXRlO1xue1xuICBjb25zdCBnID0gZ2V0R2xvYmFsVGhpcygpO1xuICBjb25zdCByZWdpc3Rlckdsb2JhbFNldHRlciA9IChrZXksIHNldHRlcikgPT4ge1xuICAgIGxldCBzZXR0ZXJzO1xuICAgIGlmICghKHNldHRlcnMgPSBnW2tleV0pKSBzZXR0ZXJzID0gZ1trZXldID0gW107XG4gICAgc2V0dGVycy5wdXNoKHNldHRlcik7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICBpZiAoc2V0dGVycy5sZW5ndGggPiAxKSBzZXR0ZXJzLmZvckVhY2goKHNldCkgPT4gc2V0KHYpKTtcbiAgICAgIGVsc2Ugc2V0dGVyc1swXSh2KTtcbiAgICB9O1xuICB9O1xuICBpbnRlcm5hbFNldEN1cnJlbnRJbnN0YW5jZSA9IHJlZ2lzdGVyR2xvYmFsU2V0dGVyKFxuICAgIGBfX1ZVRV9JTlNUQU5DRV9TRVRURVJTX19gLFxuICAgICh2KSA9PiBjdXJyZW50SW5zdGFuY2UgPSB2XG4gICk7XG4gIHNldEluU1NSU2V0dXBTdGF0ZSA9IHJlZ2lzdGVyR2xvYmFsU2V0dGVyKFxuICAgIGBfX1ZVRV9TU1JfU0VUVEVSU19fYCxcbiAgICAodikgPT4gaXNJblNTUkNvbXBvbmVudFNldHVwID0gdlxuICApO1xufVxuY29uc3Qgc2V0Q3VycmVudEluc3RhbmNlID0gKGluc3RhbmNlKSA9PiB7XG4gIGNvbnN0IHByZXYgPSBjdXJyZW50SW5zdGFuY2U7XG4gIGludGVybmFsU2V0Q3VycmVudEluc3RhbmNlKGluc3RhbmNlKTtcbiAgaW5zdGFuY2Uuc2NvcGUub24oKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpbnN0YW5jZS5zY29wZS5vZmYoKTtcbiAgICBpbnRlcm5hbFNldEN1cnJlbnRJbnN0YW5jZShwcmV2KTtcbiAgfTtcbn07XG5jb25zdCB1bnNldEN1cnJlbnRJbnN0YW5jZSA9ICgpID0+IHtcbiAgY3VycmVudEluc3RhbmNlICYmIGN1cnJlbnRJbnN0YW5jZS5zY29wZS5vZmYoKTtcbiAgaW50ZXJuYWxTZXRDdXJyZW50SW5zdGFuY2UobnVsbCk7XG59O1xuY29uc3QgaXNCdWlsdEluVGFnID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXCJzbG90LGNvbXBvbmVudFwiKTtcbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lLCB7IGlzTmF0aXZlVGFnIH0pIHtcbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBpc05hdGl2ZVRhZyhuYW1lKSkge1xuICAgIHdhcm4kMShcbiAgICAgIFwiRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCBpZDogXCIgKyBuYW1lXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNTdGF0ZWZ1bENvbXBvbmVudChpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2Uudm5vZGUuc2hhcGVGbGFnICYgNDtcbn1cbmxldCBpc0luU1NSQ29tcG9uZW50U2V0dXAgPSBmYWxzZTtcbmZ1bmN0aW9uIHNldHVwQ29tcG9uZW50KGluc3RhbmNlLCBpc1NTUiA9IGZhbHNlLCBvcHRpbWl6ZWQgPSBmYWxzZSkge1xuICBpc1NTUiAmJiBzZXRJblNTUlNldHVwU3RhdGUoaXNTU1IpO1xuICBjb25zdCB7IHByb3BzLCBjaGlsZHJlbiB9ID0gaW5zdGFuY2Uudm5vZGU7XG4gIGNvbnN0IGlzU3RhdGVmdWwgPSBpc1N0YXRlZnVsQ29tcG9uZW50KGluc3RhbmNlKTtcbiAgaW5pdFByb3BzKGluc3RhbmNlLCBwcm9wcywgaXNTdGF0ZWZ1bCwgaXNTU1IpO1xuICBpbml0U2xvdHMoaW5zdGFuY2UsIGNoaWxkcmVuLCBvcHRpbWl6ZWQgfHwgaXNTU1IpO1xuICBjb25zdCBzZXR1cFJlc3VsdCA9IGlzU3RhdGVmdWwgPyBzZXR1cFN0YXRlZnVsQ29tcG9uZW50KGluc3RhbmNlLCBpc1NTUikgOiB2b2lkIDA7XG4gIGlzU1NSICYmIHNldEluU1NSU2V0dXBTdGF0ZShmYWxzZSk7XG4gIHJldHVybiBzZXR1cFJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNldHVwU3RhdGVmdWxDb21wb25lbnQoaW5zdGFuY2UsIGlzU1NSKSB7XG4gIHZhciBfYTtcbiAgY29uc3QgQ29tcG9uZW50ID0gaW5zdGFuY2UudHlwZTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBpZiAoQ29tcG9uZW50Lm5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShDb21wb25lbnQubmFtZSwgaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcpO1xuICAgIH1cbiAgICBpZiAoQ29tcG9uZW50LmNvbXBvbmVudHMpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoQ29tcG9uZW50LmNvbXBvbmVudHMpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZXNbaV0sIGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKENvbXBvbmVudC5kaXJlY3RpdmVzKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKENvbXBvbmVudC5kaXJlY3RpdmVzKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsaWRhdGVEaXJlY3RpdmVOYW1lKG5hbWVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKENvbXBvbmVudC5jb21waWxlck9wdGlvbnMgJiYgaXNSdW50aW1lT25seSgpKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGBcImNvbXBpbGVyT3B0aW9uc1wiIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSBidWlsZCBvZiBWdWUgdGhhdCBpbmNsdWRlcyB0aGUgcnVudGltZSBjb21waWxlci4gU2luY2UgeW91IGFyZSB1c2luZyBhIHJ1bnRpbWUtb25seSBidWlsZCwgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCB2aWEgeW91ciBidWlsZCB0b29sIGNvbmZpZyBpbnN0ZWFkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGluc3RhbmNlLmFjY2Vzc0NhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGluc3RhbmNlLnByb3h5ID0gbmV3IFByb3h5KGluc3RhbmNlLmN0eCwgUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBleHBvc2VQcm9wc09uUmVuZGVyQ29udGV4dChpbnN0YW5jZSk7XG4gIH1cbiAgY29uc3QgeyBzZXR1cCB9ID0gQ29tcG9uZW50O1xuICBpZiAoc2V0dXApIHtcbiAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgY29uc3Qgc2V0dXBDb250ZXh0ID0gaW5zdGFuY2Uuc2V0dXBDb250ZXh0ID0gc2V0dXAubGVuZ3RoID4gMSA/IGNyZWF0ZVNldHVwQ29udGV4dChpbnN0YW5jZSkgOiBudWxsO1xuICAgIGNvbnN0IHJlc2V0ID0gc2V0Q3VycmVudEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGNhbGxXaXRoRXJyb3JIYW5kbGluZyhcbiAgICAgIHNldHVwLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICAwLFxuICAgICAgW1xuICAgICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gc2hhbGxvd1JlYWRvbmx5KGluc3RhbmNlLnByb3BzKSA6IGluc3RhbmNlLnByb3BzLFxuICAgICAgICBzZXR1cENvbnRleHRcbiAgICAgIF1cbiAgICApO1xuICAgIGNvbnN0IGlzQXN5bmNTZXR1cCA9IGlzUHJvbWlzZShzZXR1cFJlc3VsdCk7XG4gICAgcmVzZXRUcmFja2luZygpO1xuICAgIHJlc2V0KCk7XG4gICAgaWYgKChpc0FzeW5jU2V0dXAgfHwgaW5zdGFuY2Uuc3ApICYmICFpc0FzeW5jV3JhcHBlcihpbnN0YW5jZSkpIHtcbiAgICAgIG1hcmtBc3luY0JvdW5kYXJ5KGluc3RhbmNlKTtcbiAgICB9XG4gICAgaWYgKGlzQXN5bmNTZXR1cCkge1xuICAgICAgc2V0dXBSZXN1bHQudGhlbih1bnNldEN1cnJlbnRJbnN0YW5jZSwgdW5zZXRDdXJyZW50SW5zdGFuY2UpO1xuICAgICAgaWYgKGlzU1NSKSB7XG4gICAgICAgIHJldHVybiBzZXR1cFJlc3VsdC50aGVuKChyZXNvbHZlZFJlc3VsdCkgPT4ge1xuICAgICAgICAgIGhhbmRsZVNldHVwUmVzdWx0KGluc3RhbmNlLCByZXNvbHZlZFJlc3VsdCwgaXNTU1IpO1xuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIGluc3RhbmNlLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YW5jZS5hc3luY0RlcCA9IHNldHVwUmVzdWx0O1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaW5zdGFuY2Uuc3VzcGVuc2UpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gKF9hID0gQ29tcG9uZW50Lm5hbWUpICE9IG51bGwgPyBfYSA6IFwiQW5vbnltb3VzXCI7XG4gICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgYENvbXBvbmVudCA8JHtuYW1lfT46IHNldHVwIGZ1bmN0aW9uIHJldHVybmVkIGEgcHJvbWlzZSwgYnV0IG5vIDxTdXNwZW5zZT4gYm91bmRhcnkgd2FzIGZvdW5kIGluIHRoZSBwYXJlbnQgY29tcG9uZW50IHRyZWUuIEEgY29tcG9uZW50IHdpdGggYXN5bmMgc2V0dXAoKSBtdXN0IGJlIG5lc3RlZCBpbiBhIDxTdXNwZW5zZT4gaW4gb3JkZXIgdG8gYmUgcmVuZGVyZWQuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlU2V0dXBSZXN1bHQoaW5zdGFuY2UsIHNldHVwUmVzdWx0LCBpc1NTUik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmlzaENvbXBvbmVudFNldHVwKGluc3RhbmNlLCBpc1NTUik7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZVNldHVwUmVzdWx0KGluc3RhbmNlLCBzZXR1cFJlc3VsdCwgaXNTU1IpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2V0dXBSZXN1bHQpKSB7XG4gICAgaWYgKGluc3RhbmNlLnR5cGUuX19zc3JJbmxpbmVSZW5kZXIpIHtcbiAgICAgIGluc3RhbmNlLnNzclJlbmRlciA9IHNldHVwUmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZS5yZW5kZXIgPSBzZXR1cFJlc3VsdDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2V0dXBSZXN1bHQpKSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgaXNWTm9kZShzZXR1cFJlc3VsdCkpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYHNldHVwKCkgc2hvdWxkIG5vdCByZXR1cm4gVk5vZGVzIGRpcmVjdGx5IC0gcmV0dXJuIGEgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICBpbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGUgPSBzZXR1cFJlc3VsdDtcbiAgICB9XG4gICAgaW5zdGFuY2Uuc2V0dXBTdGF0ZSA9IHByb3h5UmVmcyhzZXR1cFJlc3VsdCk7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIGV4cG9zZVNldHVwU3RhdGVPblJlbmRlckNvbnRleHQoaW5zdGFuY2UpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHNldHVwUmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICB3YXJuJDEoXG4gICAgICBgc2V0dXAoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4gUmVjZWl2ZWQ6ICR7c2V0dXBSZXN1bHQgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBzZXR1cFJlc3VsdH1gXG4gICAgKTtcbiAgfVxuICBmaW5pc2hDb21wb25lbnRTZXR1cChpbnN0YW5jZSwgaXNTU1IpO1xufVxubGV0IGNvbXBpbGU7XG5sZXQgaW5zdGFsbFdpdGhQcm94eTtcbmZ1bmN0aW9uIHJlZ2lzdGVyUnVudGltZUNvbXBpbGVyKF9jb21waWxlKSB7XG4gIGNvbXBpbGUgPSBfY29tcGlsZTtcbiAgaW5zdGFsbFdpdGhQcm94eSA9IChpKSA9PiB7XG4gICAgaWYgKGkucmVuZGVyLl9yYykge1xuICAgICAgaS53aXRoUHJveHkgPSBuZXcgUHJveHkoaS5jdHgsIFJ1bnRpbWVDb21waWxlZFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycyk7XG4gICAgfVxuICB9O1xufVxuY29uc3QgaXNSdW50aW1lT25seSA9ICgpID0+ICFjb21waWxlO1xuZnVuY3Rpb24gZmluaXNoQ29tcG9uZW50U2V0dXAoaW5zdGFuY2UsIGlzU1NSLCBza2lwT3B0aW9ucykge1xuICBjb25zdCBDb21wb25lbnQgPSBpbnN0YW5jZS50eXBlO1xuICBpZiAoIWluc3RhbmNlLnJlbmRlcikge1xuICAgIGlmICghaXNTU1IgJiYgY29tcGlsZSAmJiAhQ29tcG9uZW50LnJlbmRlcikge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBDb21wb25lbnQudGVtcGxhdGUgfHwgX19WVUVfT1BUSU9OU19BUElfXyAmJiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpbnN0YW5jZSkudGVtcGxhdGU7XG4gICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGBjb21waWxlYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBpc0N1c3RvbUVsZW1lbnQsIGNvbXBpbGVyT3B0aW9ucyB9ID0gaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWc7XG4gICAgICAgIGNvbnN0IHsgZGVsaW1pdGVycywgY29tcGlsZXJPcHRpb25zOiBjb21wb25lbnRDb21waWxlck9wdGlvbnMgfSA9IENvbXBvbmVudDtcbiAgICAgICAgY29uc3QgZmluYWxDb21waWxlck9wdGlvbnMgPSBleHRlbmQoXG4gICAgICAgICAgZXh0ZW5kKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpc0N1c3RvbUVsZW1lbnQsXG4gICAgICAgICAgICAgIGRlbGltaXRlcnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21waWxlck9wdGlvbnNcbiAgICAgICAgICApLFxuICAgICAgICAgIGNvbXBvbmVudENvbXBpbGVyT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBDb21wb25lbnQucmVuZGVyID0gY29tcGlsZSh0ZW1wbGF0ZSwgZmluYWxDb21waWxlck9wdGlvbnMpO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBjb21waWxlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaW5zdGFuY2UucmVuZGVyID0gQ29tcG9uZW50LnJlbmRlciB8fCBOT09QO1xuICAgIGlmIChpbnN0YWxsV2l0aFByb3h5KSB7XG4gICAgICBpbnN0YWxsV2l0aFByb3h5KGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbiAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18gJiYgdHJ1ZSkge1xuICAgIGNvbnN0IHJlc2V0ID0gc2V0Q3VycmVudEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgdHJ5IHtcbiAgICAgIGFwcGx5T3B0aW9ucyhpbnN0YW5jZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc2V0VHJhY2tpbmcoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFDb21wb25lbnQucmVuZGVyICYmIGluc3RhbmNlLnJlbmRlciA9PT0gTk9PUCAmJiAhaXNTU1IpIHtcbiAgICBpZiAoIWNvbXBpbGUgJiYgQ29tcG9uZW50LnRlbXBsYXRlKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGBDb21wb25lbnQgcHJvdmlkZWQgdGVtcGxhdGUgb3B0aW9uIGJ1dCBydW50aW1lIGNvbXBpbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCBvZiBWdWUuYCArIChgIENvbmZpZ3VyZSB5b3VyIGJ1bmRsZXIgdG8gYWxpYXMgXCJ2dWVcIiB0byBcInZ1ZS9kaXN0L3Z1ZS5lc20tYnVuZGxlci5qc1wiLmAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybiQxKGBDb21wb25lbnQgaXMgbWlzc2luZyB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb246IGAsIENvbXBvbmVudCk7XG4gICAgfVxuICB9XG59XG5jb25zdCBhdHRyc1Byb3h5SGFuZGxlcnMgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8ge1xuICBnZXQodGFyZ2V0LCBrZXkpIHtcbiAgICBtYXJrQXR0cnNBY2Nlc3NlZCgpO1xuICAgIHRyYWNrKHRhcmdldCwgXCJnZXRcIiwgXCJcIik7XG4gICAgcmV0dXJuIHRhcmdldFtrZXldO1xuICB9LFxuICBzZXQoKSB7XG4gICAgd2FybiQxKGBzZXR1cENvbnRleHQuYXR0cnMgaXMgcmVhZG9ubHkuYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBkZWxldGVQcm9wZXJ0eSgpIHtcbiAgICB3YXJuJDEoYHNldHVwQ29udGV4dC5hdHRycyBpcyByZWFkb25seS5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0gOiB7XG4gIGdldCh0YXJnZXQsIGtleSkge1xuICAgIHRyYWNrKHRhcmdldCwgXCJnZXRcIiwgXCJcIik7XG4gICAgcmV0dXJuIHRhcmdldFtrZXldO1xuICB9XG59O1xuZnVuY3Rpb24gZ2V0U2xvdHNQcm94eShpbnN0YW5jZSkge1xuICByZXR1cm4gbmV3IFByb3h5KGluc3RhbmNlLnNsb3RzLCB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICB0cmFjayhpbnN0YW5jZSwgXCJnZXRcIiwgXCIkc2xvdHNcIik7XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV07XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNldHVwQ29udGV4dChpbnN0YW5jZSkge1xuICBjb25zdCBleHBvc2UgPSAoZXhwb3NlZCkgPT4ge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICBpZiAoaW5zdGFuY2UuZXhwb3NlZCkge1xuICAgICAgICB3YXJuJDEoYGV4cG9zZSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciBzZXR1cCgpLmApO1xuICAgICAgfVxuICAgICAgaWYgKGV4cG9zZWQgIT0gbnVsbCkge1xuICAgICAgICBsZXQgZXhwb3NlZFR5cGUgPSB0eXBlb2YgZXhwb3NlZDtcbiAgICAgICAgaWYgKGV4cG9zZWRUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoZXhwb3NlZCkpIHtcbiAgICAgICAgICAgIGV4cG9zZWRUeXBlID0gXCJhcnJheVwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWYoZXhwb3NlZCkpIHtcbiAgICAgICAgICAgIGV4cG9zZWRUeXBlID0gXCJyZWZcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cG9zZWRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgYGV4cG9zZSgpIHNob3VsZCBiZSBwYXNzZWQgYSBwbGFpbiBvYmplY3QsIHJlY2VpdmVkICR7ZXhwb3NlZFR5cGV9LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGluc3RhbmNlLmV4cG9zZWQgPSBleHBvc2VkIHx8IHt9O1xuICB9O1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGxldCBhdHRyc1Byb3h5O1xuICAgIGxldCBzbG90c1Byb3h5O1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgIGdldCBhdHRycygpIHtcbiAgICAgICAgcmV0dXJuIGF0dHJzUHJveHkgfHwgKGF0dHJzUHJveHkgPSBuZXcgUHJveHkoaW5zdGFuY2UuYXR0cnMsIGF0dHJzUHJveHlIYW5kbGVycykpO1xuICAgICAgfSxcbiAgICAgIGdldCBzbG90cygpIHtcbiAgICAgICAgcmV0dXJuIHNsb3RzUHJveHkgfHwgKHNsb3RzUHJveHkgPSBnZXRTbG90c1Byb3h5KGluc3RhbmNlKSk7XG4gICAgICB9LFxuICAgICAgZ2V0IGVtaXQoKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQsIC4uLmFyZ3MpID0+IGluc3RhbmNlLmVtaXQoZXZlbnQsIC4uLmFyZ3MpO1xuICAgICAgfSxcbiAgICAgIGV4cG9zZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczogbmV3IFByb3h5KGluc3RhbmNlLmF0dHJzLCBhdHRyc1Byb3h5SGFuZGxlcnMpLFxuICAgICAgc2xvdHM6IGluc3RhbmNlLnNsb3RzLFxuICAgICAgZW1pdDogaW5zdGFuY2UuZW1pdCxcbiAgICAgIGV4cG9zZVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKSB7XG4gIGlmIChpbnN0YW5jZS5leHBvc2VkKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmV4cG9zZVByb3h5IHx8IChpbnN0YW5jZS5leHBvc2VQcm94eSA9IG5ldyBQcm94eShwcm94eVJlZnMobWFya1JhdyhpbnN0YW5jZS5leHBvc2VkKSksIHtcbiAgICAgIGdldCh0YXJnZXQsIGtleSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgaW4gcHVibGljUHJvcGVydGllc01hcCkge1xuICAgICAgICAgIHJldHVybiBwdWJsaWNQcm9wZXJ0aWVzTWFwW2tleV0oaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFzKHRhcmdldCwga2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgaW4gdGFyZ2V0IHx8IGtleSBpbiBwdWJsaWNQcm9wZXJ0aWVzTWFwO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW5zdGFuY2UucHJveHk7XG4gIH1cbn1cbmNvbnN0IGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKVxcdy9nO1xuY29uc3QgY2xhc3NpZnkgPSAoc3RyKSA9PiBzdHIucmVwbGFjZShjbGFzc2lmeVJFLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKS5yZXBsYWNlKC9bLV9dL2csIFwiXCIpO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQsIGluY2x1ZGVJbmZlcnJlZCA9IHRydWUpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24oQ29tcG9uZW50KSA/IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSA6IENvbXBvbmVudC5uYW1lIHx8IGluY2x1ZGVJbmZlcnJlZCAmJiBDb21wb25lbnQuX19uYW1lO1xufVxuZnVuY3Rpb24gZm9ybWF0Q29tcG9uZW50TmFtZShpbnN0YW5jZSwgQ29tcG9uZW50LCBpc1Jvb3QgPSBmYWxzZSkge1xuICBsZXQgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KTtcbiAgaWYgKCFuYW1lICYmIENvbXBvbmVudC5fX2ZpbGUpIHtcbiAgICBjb25zdCBtYXRjaCA9IENvbXBvbmVudC5fX2ZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwuXFx3KyQvKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIG5hbWUgPSBtYXRjaFsxXTtcbiAgICB9XG4gIH1cbiAgaWYgKCFuYW1lICYmIGluc3RhbmNlICYmIGluc3RhbmNlLnBhcmVudCkge1xuICAgIGNvbnN0IGluZmVyRnJvbVJlZ2lzdHJ5ID0gKHJlZ2lzdHJ5KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiByZWdpc3RyeSkge1xuICAgICAgICBpZiAocmVnaXN0cnlba2V5XSA9PT0gQ29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgbmFtZSA9IGluZmVyRnJvbVJlZ2lzdHJ5KFxuICAgICAgaW5zdGFuY2UuY29tcG9uZW50cyB8fCBpbnN0YW5jZS5wYXJlbnQudHlwZS5jb21wb25lbnRzXG4gICAgKSB8fCBpbmZlckZyb21SZWdpc3RyeShpbnN0YW5jZS5hcHBDb250ZXh0LmNvbXBvbmVudHMpO1xuICB9XG4gIHJldHVybiBuYW1lID8gY2xhc3NpZnkobmFtZSkgOiBpc1Jvb3QgPyBgQXBwYCA6IGBBbm9ueW1vdXNgO1xufVxuZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudCh2YWx1ZSkge1xuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSkgJiYgXCJfX3ZjY09wdHNcIiBpbiB2YWx1ZTtcbn1cblxuY29uc3QgY29tcHV0ZWQgPSAoZ2V0dGVyT3JPcHRpb25zLCBkZWJ1Z09wdGlvbnMpID0+IHtcbiAgY29uc3QgYyA9IGNvbXB1dGVkJDEoZ2V0dGVyT3JPcHRpb25zLCBkZWJ1Z09wdGlvbnMsIGlzSW5TU1JDb21wb25lbnRTZXR1cCk7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgY29uc3QgaSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgIGlmIChpICYmIGkuYXBwQ29udGV4dC5jb25maWcud2FyblJlY3Vyc2l2ZUNvbXB1dGVkKSB7XG4gICAgICBjLl93YXJuUmVjdXJzaXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGM7XG59O1xuXG5mdW5jdGlvbiBoKHR5cGUsIHByb3BzT3JDaGlsZHJlbiwgY2hpbGRyZW4pIHtcbiAgdHJ5IHtcbiAgICBzZXRCbG9ja1RyYWNraW5nKC0xKTtcbiAgICBjb25zdCBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAobCA9PT0gMikge1xuICAgICAgaWYgKGlzT2JqZWN0KHByb3BzT3JDaGlsZHJlbikgJiYgIWlzQXJyYXkocHJvcHNPckNoaWxkcmVuKSkge1xuICAgICAgICBpZiAoaXNWTm9kZShwcm9wc09yQ2hpbGRyZW4pKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIG51bGwsIFtwcm9wc09yQ2hpbGRyZW5dKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUodHlwZSwgcHJvcHNPckNoaWxkcmVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBudWxsLCBwcm9wc09yQ2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobCA+IDMpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgfSBlbHNlIGlmIChsID09PSAzICYmIGlzVk5vZGUoY2hpbGRyZW4pKSB7XG4gICAgICAgIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wc09yQ2hpbGRyZW4sIGNoaWxkcmVuKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc2V0QmxvY2tUcmFja2luZygxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0Q3VzdG9tRm9ybWF0dGVyKCkge1xuICBpZiAoISEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB2dWVTdHlsZSA9IHsgc3R5bGU6IFwiY29sb3I6IzNiYTc3NlwiIH07XG4gIGNvbnN0IG51bWJlclN0eWxlID0geyBzdHlsZTogXCJjb2xvcjojMTY3N2ZmXCIgfTtcbiAgY29uc3Qgc3RyaW5nU3R5bGUgPSB7IHN0eWxlOiBcImNvbG9yOiNmNTIyMmRcIiB9O1xuICBjb25zdCBrZXl3b3JkU3R5bGUgPSB7IHN0eWxlOiBcImNvbG9yOiNlYjJmOTZcIiB9O1xuICBjb25zdCBmb3JtYXR0ZXIgPSB7XG4gICAgX192dWVfY3VzdG9tX2Zvcm1hdHRlcjogdHJ1ZSxcbiAgICBoZWFkZXIob2JqKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAob2JqLl9faXNWdWUpIHtcbiAgICAgICAgcmV0dXJuIFtcImRpdlwiLCB2dWVTdHlsZSwgYFZ1ZUluc3RhbmNlYF07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVmKG9iaikpIHtcbiAgICAgICAgcGF1c2VUcmFja2luZygpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9iai52YWx1ZTtcbiAgICAgICAgcmVzZXRUcmFja2luZygpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge30sXG4gICAgICAgICAgW1wic3BhblwiLCB2dWVTdHlsZSwgZ2VuUmVmRmxhZyhvYmopXSxcbiAgICAgICAgICBcIjxcIixcbiAgICAgICAgICBmb3JtYXRWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgYD5gXG4gICAgICAgIF07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVhY3RpdmUob2JqKSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge30sXG4gICAgICAgICAgW1wic3BhblwiLCB2dWVTdHlsZSwgaXNTaGFsbG93KG9iaikgPyBcIlNoYWxsb3dSZWFjdGl2ZVwiIDogXCJSZWFjdGl2ZVwiXSxcbiAgICAgICAgICBcIjxcIixcbiAgICAgICAgICBmb3JtYXRWYWx1ZShvYmopLFxuICAgICAgICAgIGA+JHtpc1JlYWRvbmx5KG9iaikgPyBgIChyZWFkb25seSlgIDogYGB9YFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIGlmIChpc1JlYWRvbmx5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIFtcInNwYW5cIiwgdnVlU3R5bGUsIGlzU2hhbGxvdyhvYmopID8gXCJTaGFsbG93UmVhZG9ubHlcIiA6IFwiUmVhZG9ubHlcIl0sXG4gICAgICAgICAgXCI8XCIsXG4gICAgICAgICAgZm9ybWF0VmFsdWUob2JqKSxcbiAgICAgICAgICBcIj5cIlxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBoYXNCb2R5KG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBvYmouX19pc1Z1ZTtcbiAgICB9LFxuICAgIGJvZHkob2JqKSB7XG4gICAgICBpZiAob2JqICYmIG9iai5fX2lzVnVlKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7fSxcbiAgICAgICAgICAuLi5mb3JtYXRJbnN0YW5jZShvYmouJClcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIGZvcm1hdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgY29uc3QgYmxvY2tzID0gW107XG4gICAgaWYgKGluc3RhbmNlLnR5cGUucHJvcHMgJiYgaW5zdGFuY2UucHJvcHMpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soXCJwcm9wc1wiLCB0b1JhdyhpbnN0YW5jZS5wcm9wcykpKTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLnNldHVwU3RhdGUgIT09IEVNUFRZX09CSikge1xuICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jayhcInNldHVwXCIsIGluc3RhbmNlLnNldHVwU3RhdGUpKTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLmRhdGEgIT09IEVNUFRZX09CSikge1xuICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jayhcImRhdGFcIiwgdG9SYXcoaW5zdGFuY2UuZGF0YSkpKTtcbiAgICB9XG4gICAgY29uc3QgY29tcHV0ZWQgPSBleHRyYWN0S2V5cyhpbnN0YW5jZSwgXCJjb21wdXRlZFwiKTtcbiAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soXCJjb21wdXRlZFwiLCBjb21wdXRlZCkpO1xuICAgIH1cbiAgICBjb25zdCBpbmplY3RlZCA9IGV4dHJhY3RLZXlzKGluc3RhbmNlLCBcImluamVjdFwiKTtcbiAgICBpZiAoaW5qZWN0ZWQpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soXCJpbmplY3RlZFwiLCBpbmplY3RlZCkpO1xuICAgIH1cbiAgICBibG9ja3MucHVzaChbXG4gICAgICBcImRpdlwiLFxuICAgICAge30sXG4gICAgICBbXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IGtleXdvcmRTdHlsZS5zdHlsZSArIFwiO29wYWNpdHk6MC42NlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiJCAoaW50ZXJuYWwpOiBcIlxuICAgICAgXSxcbiAgICAgIFtcIm9iamVjdFwiLCB7IG9iamVjdDogaW5zdGFuY2UgfV1cbiAgICBdKTtcbiAgICByZXR1cm4gYmxvY2tzO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlQmxvY2sodHlwZSwgdGFyZ2V0KSB7XG4gICAgdGFyZ2V0ID0gZXh0ZW5kKHt9LCB0YXJnZXQpO1xuICAgIGlmICghT2JqZWN0LmtleXModGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIHt9XTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0eWxlOiBcImxpbmUtaGVpZ2h0OjEuMjVlbTttYXJnaW4tYm90dG9tOjAuNmVtXCIgfSxcbiAgICAgIFtcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiBcImNvbG9yOiM0NzY1ODJcIlxuICAgICAgICB9LFxuICAgICAgICB0eXBlXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IFwicGFkZGluZy1sZWZ0OjEuMjVlbVwiXG4gICAgICAgIH0sXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHRhcmdldCkubWFwKChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgW1wic3BhblwiLCBrZXl3b3JkU3R5bGUsIGtleSArIFwiOiBcIl0sXG4gICAgICAgICAgICBmb3JtYXRWYWx1ZSh0YXJnZXRba2V5XSwgZmFsc2UpXG4gICAgICAgICAgXTtcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICBdO1xuICB9XG4gIGZ1bmN0aW9uIGZvcm1hdFZhbHVlKHYsIGFzUmF3ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIFtcInNwYW5cIiwgbnVtYmVyU3R5bGUsIHZdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIHN0cmluZ1N0eWxlLCBKU09OLnN0cmluZ2lmeSh2KV07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIGtleXdvcmRTdHlsZSwgdl07XG4gICAgfSBlbHNlIGlmIChpc09iamVjdCh2KSkge1xuICAgICAgcmV0dXJuIFtcIm9iamVjdFwiLCB7IG9iamVjdDogYXNSYXcgPyB0b1Jhdyh2KSA6IHYgfV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIHN0cmluZ1N0eWxlLCBTdHJpbmcodildO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBleHRyYWN0S2V5cyhpbnN0YW5jZSwgdHlwZSkge1xuICAgIGNvbnN0IENvbXAgPSBpbnN0YW5jZS50eXBlO1xuICAgIGlmIChpc0Z1bmN0aW9uKENvbXApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4dHJhY3RlZCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGluc3RhbmNlLmN0eCkge1xuICAgICAgaWYgKGlzS2V5T2ZUeXBlKENvbXAsIGtleSwgdHlwZSkpIHtcbiAgICAgICAgZXh0cmFjdGVkW2tleV0gPSBpbnN0YW5jZS5jdHhba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4dHJhY3RlZDtcbiAgfVxuICBmdW5jdGlvbiBpc0tleU9mVHlwZShDb21wLCBrZXksIHR5cGUpIHtcbiAgICBjb25zdCBvcHRzID0gQ29tcFt0eXBlXTtcbiAgICBpZiAoaXNBcnJheShvcHRzKSAmJiBvcHRzLmluY2x1ZGVzKGtleSkgfHwgaXNPYmplY3Qob3B0cykgJiYga2V5IGluIG9wdHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoQ29tcC5leHRlbmRzICYmIGlzS2V5T2ZUeXBlKENvbXAuZXh0ZW5kcywga2V5LCB0eXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChDb21wLm1peGlucyAmJiBDb21wLm1peGlucy5zb21lKChtKSA9PiBpc0tleU9mVHlwZShtLCBrZXksIHR5cGUpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlblJlZkZsYWcodikge1xuICAgIGlmIChpc1NoYWxsb3codikpIHtcbiAgICAgIHJldHVybiBgU2hhbGxvd1JlZmA7XG4gICAgfVxuICAgIGlmICh2LmVmZmVjdCkge1xuICAgICAgcmV0dXJuIGBDb21wdXRlZFJlZmA7XG4gICAgfVxuICAgIHJldHVybiBgUmVmYDtcbiAgfVxuICBpZiAod2luZG93LmRldnRvb2xzRm9ybWF0dGVycykge1xuICAgIHdpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnMucHVzaChmb3JtYXR0ZXIpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnMgPSBbZm9ybWF0dGVyXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3aXRoTWVtbyhtZW1vLCByZW5kZXIsIGNhY2hlLCBpbmRleCkge1xuICBjb25zdCBjYWNoZWQgPSBjYWNoZVtpbmRleF07XG4gIGlmIChjYWNoZWQgJiYgaXNNZW1vU2FtZShjYWNoZWQsIG1lbW8pKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCByZXQgPSByZW5kZXIoKTtcbiAgcmV0Lm1lbW8gPSBtZW1vLnNsaWNlKCk7XG4gIHJldC5jYWNoZUluZGV4ID0gaW5kZXg7XG4gIHJldHVybiBjYWNoZVtpbmRleF0gPSByZXQ7XG59XG5mdW5jdGlvbiBpc01lbW9TYW1lKGNhY2hlZCwgbWVtbykge1xuICBjb25zdCBwcmV2ID0gY2FjaGVkLm1lbW87XG4gIGlmIChwcmV2Lmxlbmd0aCAhPSBtZW1vLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXYubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaGFzQ2hhbmdlZChwcmV2W2ldLCBtZW1vW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNCbG9ja1RyZWVFbmFibGVkID4gMCAmJiBjdXJyZW50QmxvY2spIHtcbiAgICBjdXJyZW50QmxvY2sucHVzaChjYWNoZWQpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb25zdCB2ZXJzaW9uID0gXCIzLjUuMjRcIjtcbmNvbnN0IHdhcm4gPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gd2FybiQxIDogTk9PUDtcbmNvbnN0IEVycm9yVHlwZVN0cmluZ3MgPSBFcnJvclR5cGVTdHJpbmdzJDEgO1xuY29uc3QgZGV2dG9vbHMgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IHRydWUgPyBkZXZ0b29scyQxIDogdm9pZCAwO1xuY29uc3Qgc2V0RGV2dG9vbHNIb29rID0gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCB0cnVlID8gc2V0RGV2dG9vbHNIb29rJDEgOiBOT09QO1xuY29uc3QgX3NzclV0aWxzID0ge1xuICBjcmVhdGVDb21wb25lbnRJbnN0YW5jZSxcbiAgc2V0dXBDb21wb25lbnQsXG4gIHJlbmRlckNvbXBvbmVudFJvb3QsXG4gIHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSxcbiAgaXNWTm9kZTogaXNWTm9kZSxcbiAgbm9ybWFsaXplVk5vZGUsXG4gIGdldENvbXBvbmVudFB1YmxpY0luc3RhbmNlLFxuICBlbnN1cmVWYWxpZFZOb2RlLFxuICBwdXNoV2FybmluZ0NvbnRleHQsXG4gIHBvcFdhcm5pbmdDb250ZXh0XG59O1xuY29uc3Qgc3NyVXRpbHMgPSBfc3NyVXRpbHMgO1xuY29uc3QgcmVzb2x2ZUZpbHRlciA9IG51bGw7XG5jb25zdCBjb21wYXRVdGlscyA9IG51bGw7XG5jb25zdCBEZXByZWNhdGlvblR5cGVzID0gbnVsbDtcblxuZXhwb3J0IHsgQmFzZVRyYW5zaXRpb24sIEJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzLCBDb21tZW50LCBEZXByZWNhdGlvblR5cGVzLCBFcnJvckNvZGVzLCBFcnJvclR5cGVTdHJpbmdzLCBGcmFnbWVudCwgS2VlcEFsaXZlLCBTdGF0aWMsIFN1c3BlbnNlLCBUZWxlcG9ydCwgVGV4dCwgYXNzZXJ0TnVtYmVyLCBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZywgY2FsbFdpdGhFcnJvckhhbmRsaW5nLCBjbG9uZVZOb2RlLCBjb21wYXRVdGlscywgY29tcHV0ZWQsIGNyZWF0ZUJsb2NrLCBjcmVhdGVDb21tZW50Vk5vZGUsIGNyZWF0ZUVsZW1lbnRCbG9jaywgY3JlYXRlQmFzZVZOb2RlIGFzIGNyZWF0ZUVsZW1lbnRWTm9kZSwgY3JlYXRlSHlkcmF0aW9uUmVuZGVyZXIsIGNyZWF0ZVByb3BzUmVzdFByb3h5LCBjcmVhdGVSZW5kZXJlciwgY3JlYXRlU2xvdHMsIGNyZWF0ZVN0YXRpY1ZOb2RlLCBjcmVhdGVUZXh0Vk5vZGUsIGNyZWF0ZVZOb2RlLCBkZWZpbmVBc3luY0NvbXBvbmVudCwgZGVmaW5lQ29tcG9uZW50LCBkZWZpbmVFbWl0cywgZGVmaW5lRXhwb3NlLCBkZWZpbmVNb2RlbCwgZGVmaW5lT3B0aW9ucywgZGVmaW5lUHJvcHMsIGRlZmluZVNsb3RzLCBkZXZ0b29scywgZ2V0Q3VycmVudEluc3RhbmNlLCBnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4sIGd1YXJkUmVhY3RpdmVQcm9wcywgaCwgaGFuZGxlRXJyb3IsIGhhc0luamVjdGlvbkNvbnRleHQsIGh5ZHJhdGVPbklkbGUsIGh5ZHJhdGVPbkludGVyYWN0aW9uLCBoeWRyYXRlT25NZWRpYVF1ZXJ5LCBoeWRyYXRlT25WaXNpYmxlLCBpbml0Q3VzdG9tRm9ybWF0dGVyLCBpbmplY3QsIGlzTWVtb1NhbWUsIGlzUnVudGltZU9ubHksIGlzVk5vZGUsIG1lcmdlRGVmYXVsdHMsIG1lcmdlTW9kZWxzLCBtZXJnZVByb3BzLCBuZXh0VGljaywgb25BY3RpdmF0ZWQsIG9uQmVmb3JlTW91bnQsIG9uQmVmb3JlVW5tb3VudCwgb25CZWZvcmVVcGRhdGUsIG9uRGVhY3RpdmF0ZWQsIG9uRXJyb3JDYXB0dXJlZCwgb25Nb3VudGVkLCBvblJlbmRlclRyYWNrZWQsIG9uUmVuZGVyVHJpZ2dlcmVkLCBvblNlcnZlclByZWZldGNoLCBvblVubW91bnRlZCwgb25VcGRhdGVkLCBvcGVuQmxvY2ssIHBvcFNjb3BlSWQsIHByb3ZpZGUsIHB1c2hTY29wZUlkLCBxdWV1ZVBvc3RGbHVzaENiLCByZWdpc3RlclJ1bnRpbWVDb21waWxlciwgcmVuZGVyTGlzdCwgcmVuZGVyU2xvdCwgcmVzb2x2ZUNvbXBvbmVudCwgcmVzb2x2ZURpcmVjdGl2ZSwgcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQsIHJlc29sdmVGaWx0ZXIsIHJlc29sdmVUcmFuc2l0aW9uSG9va3MsIHNldEJsb2NrVHJhY2tpbmcsIHNldERldnRvb2xzSG9vaywgc2V0VHJhbnNpdGlvbkhvb2tzLCBzc3JDb250ZXh0S2V5LCBzc3JVdGlscywgdG9IYW5kbGVycywgdHJhbnNmb3JtVk5vZGVBcmdzLCB1c2VBdHRycywgdXNlSWQsIHVzZU1vZGVsLCB1c2VTU1JDb250ZXh0LCB1c2VTbG90cywgdXNlVGVtcGxhdGVSZWYsIHVzZVRyYW5zaXRpb25TdGF0ZSwgdmVyc2lvbiwgd2Fybiwgd2F0Y2gsIHdhdGNoRWZmZWN0LCB3YXRjaFBvc3RFZmZlY3QsIHdhdGNoU3luY0VmZmVjdCwgd2l0aEFzeW5jQ29udGV4dCwgd2l0aEN0eCwgd2l0aERlZmF1bHRzLCB3aXRoRGlyZWN0aXZlcywgd2l0aE1lbW8sIHdpdGhTY29wZUlkIH07XG4iLCIvKipcbiogQHZ1ZS9ydW50aW1lLWRvbSB2My41LjI0XG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpYnV0b3JzXG4qIEBsaWNlbnNlIE1JVFxuKiovXG5pbXBvcnQgeyB3YXJuLCBCYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycywgaCwgQmFzZVRyYW5zaXRpb24sIGFzc2VydE51bWJlciwgZ2V0Q3VycmVudEluc3RhbmNlLCBvbkJlZm9yZVVwZGF0ZSwgcXVldWVQb3N0Rmx1c2hDYiwgb25Nb3VudGVkLCB3YXRjaCwgb25Vbm1vdW50ZWQsIEZyYWdtZW50LCBTdGF0aWMsIGNhbWVsaXplLCBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZywgZGVmaW5lQ29tcG9uZW50LCBuZXh0VGljaywgdW5yZWYsIGNyZWF0ZVZOb2RlLCB1c2VUcmFuc2l0aW9uU3RhdGUsIG9uVXBkYXRlZCwgdG9SYXcsIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbiwgc2V0VHJhbnNpdGlvbkhvb2tzLCByZXNvbHZlVHJhbnNpdGlvbkhvb2tzLCBUZXh0LCBjcmVhdGVSZW5kZXJlciwgY3JlYXRlSHlkcmF0aW9uUmVuZGVyZXIsIGlzUnVudGltZU9ubHkgfSBmcm9tICdAdnVlL3J1bnRpbWUtY29yZSc7XG5leHBvcnQgKiBmcm9tICdAdnVlL3J1bnRpbWUtY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGlzT2JqZWN0LCB0b051bWJlciwgaXNBcnJheSwgTk9PUCwgbm9ybWFsaXplQ3NzVmFyVmFsdWUsIGlzU3RyaW5nLCBoeXBoZW5hdGUsIGNhcGl0YWxpemUsIGlzU3BlY2lhbEJvb2xlYW5BdHRyLCBpbmNsdWRlQm9vbGVhbkF0dHIsIGlzU3ltYm9sLCBpc0Z1bmN0aW9uLCBpc09uLCBpc01vZGVsTGlzdGVuZXIsIGNhbWVsaXplIGFzIGNhbWVsaXplJDEsIGlzUGxhaW5PYmplY3QsIGhhc093biwgRU1QVFlfT0JKLCBsb29zZVRvTnVtYmVyLCBsb29zZUluZGV4T2YsIGlzU2V0LCBsb29zZUVxdWFsLCBpbnZva2VBcnJheUZucywgaXNIVE1MVGFnLCBpc1NWR1RhZywgaXNNYXRoTUxUYWcgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmxldCBwb2xpY3kgPSB2b2lkIDA7XG5jb25zdCB0dCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnRydXN0ZWRUeXBlcztcbmlmICh0dCkge1xuICB0cnkge1xuICAgIHBvbGljeSA9IC8qIEBfX1BVUkVfXyAqLyB0dC5jcmVhdGVQb2xpY3koXCJ2dWVcIiwge1xuICAgICAgY3JlYXRlSFRNTDogKHZhbCkgPT4gdmFsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4oYEVycm9yIGNyZWF0aW5nIHRydXN0ZWQgdHlwZXMgcG9saWN5OiAke2V9YCk7XG4gIH1cbn1cbmNvbnN0IHVuc2FmZVRvVHJ1c3RlZEhUTUwgPSBwb2xpY3kgPyAodmFsKSA9PiBwb2xpY3kuY3JlYXRlSFRNTCh2YWwpIDogKHZhbCkgPT4gdmFsO1xuY29uc3Qgc3ZnTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5jb25zdCBtYXRobWxOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiO1xuY29uc3QgZG9jID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQgOiBudWxsO1xuY29uc3QgdGVtcGxhdGVDb250YWluZXIgPSBkb2MgJiYgLyogQF9fUFVSRV9fICovIGRvYy5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG5jb25zdCBub2RlT3BzID0ge1xuICBpbnNlcnQ6IChjaGlsZCwgcGFyZW50LCBhbmNob3IpID0+IHtcbiAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBhbmNob3IgfHwgbnVsbCk7XG4gIH0sXG4gIHJlbW92ZTogKGNoaWxkKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gY2hpbGQucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgfSxcbiAgY3JlYXRlRWxlbWVudDogKHRhZywgbmFtZXNwYWNlLCBpcywgcHJvcHMpID0+IHtcbiAgICBjb25zdCBlbCA9IG5hbWVzcGFjZSA9PT0gXCJzdmdcIiA/IGRvYy5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIHRhZykgOiBuYW1lc3BhY2UgPT09IFwibWF0aG1sXCIgPyBkb2MuY3JlYXRlRWxlbWVudE5TKG1hdGhtbE5TLCB0YWcpIDogaXMgPyBkb2MuY3JlYXRlRWxlbWVudCh0YWcsIHsgaXMgfSkgOiBkb2MuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgIGlmICh0YWcgPT09IFwic2VsZWN0XCIgJiYgcHJvcHMgJiYgcHJvcHMubXVsdGlwbGUgIT0gbnVsbCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFwibXVsdGlwbGVcIiwgcHJvcHMubXVsdGlwbGUpO1xuICAgIH1cbiAgICByZXR1cm4gZWw7XG4gIH0sXG4gIGNyZWF0ZVRleHQ6ICh0ZXh0KSA9PiBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCksXG4gIGNyZWF0ZUNvbW1lbnQ6ICh0ZXh0KSA9PiBkb2MuY3JlYXRlQ29tbWVudCh0ZXh0KSxcbiAgc2V0VGV4dDogKG5vZGUsIHRleHQpID0+IHtcbiAgICBub2RlLm5vZGVWYWx1ZSA9IHRleHQ7XG4gIH0sXG4gIHNldEVsZW1lbnRUZXh0OiAoZWwsIHRleHQpID0+IHtcbiAgICBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH0sXG4gIHBhcmVudE5vZGU6IChub2RlKSA9PiBub2RlLnBhcmVudE5vZGUsXG4gIG5leHRTaWJsaW5nOiAobm9kZSkgPT4gbm9kZS5uZXh0U2libGluZyxcbiAgcXVlcnlTZWxlY3RvcjogKHNlbGVjdG9yKSA9PiBkb2MucXVlcnlTZWxlY3RvcihzZWxlY3RvciksXG4gIHNldFNjb3BlSWQoZWwsIGlkKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKGlkLCBcIlwiKTtcbiAgfSxcbiAgLy8gX19VTlNBRkVfX1xuICAvLyBSZWFzb246IGlubmVySFRNTC5cbiAgLy8gU3RhdGljIGNvbnRlbnQgaGVyZSBjYW4gb25seSBjb21lIGZyb20gY29tcGlsZWQgdGVtcGxhdGVzLlxuICAvLyBBcyBsb25nIGFzIHRoZSB1c2VyIG9ubHkgdXNlcyB0cnVzdGVkIHRlbXBsYXRlcywgdGhpcyBpcyBzYWZlLlxuICBpbnNlcnRTdGF0aWNDb250ZW50KGNvbnRlbnQsIHBhcmVudCwgYW5jaG9yLCBuYW1lc3BhY2UsIHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBiZWZvcmUgPSBhbmNob3IgPyBhbmNob3IucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Lmxhc3RDaGlsZDtcbiAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0ID09PSBlbmQgfHwgc3RhcnQubmV4dFNpYmxpbmcpKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHN0YXJ0LmNsb25lTm9kZSh0cnVlKSwgYW5jaG9yKTtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQgfHwgIShzdGFydCA9IHN0YXJ0Lm5leHRTaWJsaW5nKSkgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBsYXRlQ29udGFpbmVyLmlubmVySFRNTCA9IHVuc2FmZVRvVHJ1c3RlZEhUTUwoXG4gICAgICAgIG5hbWVzcGFjZSA9PT0gXCJzdmdcIiA/IGA8c3ZnPiR7Y29udGVudH08L3N2Zz5gIDogbmFtZXNwYWNlID09PSBcIm1hdGhtbFwiID8gYDxtYXRoPiR7Y29udGVudH08L21hdGg+YCA6IGNvbnRlbnRcbiAgICAgICk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlQ29udGFpbmVyLmNvbnRlbnQ7XG4gICAgICBpZiAobmFtZXNwYWNlID09PSBcInN2Z1wiIHx8IG5hbWVzcGFjZSA9PT0gXCJtYXRobWxcIikge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gdGVtcGxhdGUuZmlyc3RDaGlsZDtcbiAgICAgICAgd2hpbGUgKHdyYXBwZXIuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHRlbXBsYXRlLmFwcGVuZENoaWxkKHdyYXBwZXIuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG4gICAgICB9XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHRlbXBsYXRlLCBhbmNob3IpO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgLy8gZmlyc3RcbiAgICAgIGJlZm9yZSA/IGJlZm9yZS5uZXh0U2libGluZyA6IHBhcmVudC5maXJzdENoaWxkLFxuICAgICAgLy8gbGFzdFxuICAgICAgYW5jaG9yID8gYW5jaG9yLnByZXZpb3VzU2libGluZyA6IHBhcmVudC5sYXN0Q2hpbGRcbiAgICBdO1xuICB9XG59O1xuXG5jb25zdCBUUkFOU0lUSU9OID0gXCJ0cmFuc2l0aW9uXCI7XG5jb25zdCBBTklNQVRJT04gPSBcImFuaW1hdGlvblwiO1xuY29uc3QgdnRjS2V5ID0gU3ltYm9sKFwiX3Z0Y1wiKTtcbmNvbnN0IERPTVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMgPSB7XG4gIG5hbWU6IFN0cmluZyxcbiAgdHlwZTogU3RyaW5nLFxuICBjc3M6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfSxcbiAgZHVyYXRpb246IFtTdHJpbmcsIE51bWJlciwgT2JqZWN0XSxcbiAgZW50ZXJGcm9tQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyRnJvbUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVGcm9tQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICBsZWF2ZVRvQ2xhc3M6IFN0cmluZ1xufTtcbmNvbnN0IFRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMgPSAvKiBAX19QVVJFX18gKi8gZXh0ZW5kKFxuICB7fSxcbiAgQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMsXG4gIERPTVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnNcbik7XG5jb25zdCBkZWNvcmF0ZSQxID0gKHQpID0+IHtcbiAgdC5kaXNwbGF5TmFtZSA9IFwiVHJhbnNpdGlvblwiO1xuICB0LnByb3BzID0gVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycztcbiAgcmV0dXJuIHQ7XG59O1xuY29uc3QgVHJhbnNpdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWNvcmF0ZSQxKFxuICAocHJvcHMsIHsgc2xvdHMgfSkgPT4gaChCYXNlVHJhbnNpdGlvbiwgcmVzb2x2ZVRyYW5zaXRpb25Qcm9wcyhwcm9wcyksIHNsb3RzKVxuKTtcbmNvbnN0IGNhbGxIb29rID0gKGhvb2ssIGFyZ3MgPSBbXSkgPT4ge1xuICBpZiAoaXNBcnJheShob29rKSkge1xuICAgIGhvb2suZm9yRWFjaCgoaDIpID0+IGgyKC4uLmFyZ3MpKTtcbiAgfSBlbHNlIGlmIChob29rKSB7XG4gICAgaG9vayguLi5hcmdzKTtcbiAgfVxufTtcbmNvbnN0IGhhc0V4cGxpY2l0Q2FsbGJhY2sgPSAoaG9vaykgPT4ge1xuICByZXR1cm4gaG9vayA/IGlzQXJyYXkoaG9vaykgPyBob29rLnNvbWUoKGgyKSA9PiBoMi5sZW5ndGggPiAxKSA6IGhvb2subGVuZ3RoID4gMSA6IGZhbHNlO1xufTtcbmZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uUHJvcHMocmF3UHJvcHMpIHtcbiAgY29uc3QgYmFzZVByb3BzID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCEoa2V5IGluIERPTVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMpKSB7XG4gICAgICBiYXNlUHJvcHNba2V5XSA9IHJhd1Byb3BzW2tleV07XG4gICAgfVxuICB9XG4gIGlmIChyYXdQcm9wcy5jc3MgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGJhc2VQcm9wcztcbiAgfVxuICBjb25zdCB7XG4gICAgbmFtZSA9IFwidlwiLFxuICAgIHR5cGUsXG4gICAgZHVyYXRpb24sXG4gICAgZW50ZXJGcm9tQ2xhc3MgPSBgJHtuYW1lfS1lbnRlci1mcm9tYCxcbiAgICBlbnRlckFjdGl2ZUNsYXNzID0gYCR7bmFtZX0tZW50ZXItYWN0aXZlYCxcbiAgICBlbnRlclRvQ2xhc3MgPSBgJHtuYW1lfS1lbnRlci10b2AsXG4gICAgYXBwZWFyRnJvbUNsYXNzID0gZW50ZXJGcm9tQ2xhc3MsXG4gICAgYXBwZWFyQWN0aXZlQ2xhc3MgPSBlbnRlckFjdGl2ZUNsYXNzLFxuICAgIGFwcGVhclRvQ2xhc3MgPSBlbnRlclRvQ2xhc3MsXG4gICAgbGVhdmVGcm9tQ2xhc3MgPSBgJHtuYW1lfS1sZWF2ZS1mcm9tYCxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzID0gYCR7bmFtZX0tbGVhdmUtYWN0aXZlYCxcbiAgICBsZWF2ZVRvQ2xhc3MgPSBgJHtuYW1lfS1sZWF2ZS10b2BcbiAgfSA9IHJhd1Byb3BzO1xuICBjb25zdCBkdXJhdGlvbnMgPSBub3JtYWxpemVEdXJhdGlvbihkdXJhdGlvbik7XG4gIGNvbnN0IGVudGVyRHVyYXRpb24gPSBkdXJhdGlvbnMgJiYgZHVyYXRpb25zWzBdO1xuICBjb25zdCBsZWF2ZUR1cmF0aW9uID0gZHVyYXRpb25zICYmIGR1cmF0aW9uc1sxXTtcbiAgY29uc3Qge1xuICAgIG9uQmVmb3JlRW50ZXIsXG4gICAgb25FbnRlcixcbiAgICBvbkVudGVyQ2FuY2VsbGVkLFxuICAgIG9uTGVhdmUsXG4gICAgb25MZWF2ZUNhbmNlbGxlZCxcbiAgICBvbkJlZm9yZUFwcGVhciA9IG9uQmVmb3JlRW50ZXIsXG4gICAgb25BcHBlYXIgPSBvbkVudGVyLFxuICAgIG9uQXBwZWFyQ2FuY2VsbGVkID0gb25FbnRlckNhbmNlbGxlZFxuICB9ID0gYmFzZVByb3BzO1xuICBjb25zdCBmaW5pc2hFbnRlciA9IChlbCwgaXNBcHBlYXIsIGRvbmUsIGlzQ2FuY2VsbGVkKSA9PiB7XG4gICAgZWwuX2VudGVyQ2FuY2VsbGVkID0gaXNDYW5jZWxsZWQ7XG4gICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBpc0FwcGVhciA/IGFwcGVhclRvQ2xhc3MgOiBlbnRlclRvQ2xhc3MpO1xuICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgaXNBcHBlYXIgPyBhcHBlYXJBY3RpdmVDbGFzcyA6IGVudGVyQWN0aXZlQ2xhc3MpO1xuICAgIGRvbmUgJiYgZG9uZSgpO1xuICB9O1xuICBjb25zdCBmaW5pc2hMZWF2ZSA9IChlbCwgZG9uZSkgPT4ge1xuICAgIGVsLl9pc0xlYXZpbmcgPSBmYWxzZTtcbiAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlRnJvbUNsYXNzKTtcbiAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICBkb25lICYmIGRvbmUoKTtcbiAgfTtcbiAgY29uc3QgbWFrZUVudGVySG9vayA9IChpc0FwcGVhcikgPT4ge1xuICAgIHJldHVybiAoZWwsIGRvbmUpID0+IHtcbiAgICAgIGNvbnN0IGhvb2sgPSBpc0FwcGVhciA/IG9uQXBwZWFyIDogb25FbnRlcjtcbiAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBmaW5pc2hFbnRlcihlbCwgaXNBcHBlYXIsIGRvbmUpO1xuICAgICAgY2FsbEhvb2soaG9vaywgW2VsLCByZXNvbHZlXSk7XG4gICAgICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGlzQXBwZWFyID8gYXBwZWFyRnJvbUNsYXNzIDogZW50ZXJGcm9tQ2xhc3MpO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGlzQXBwZWFyID8gYXBwZWFyVG9DbGFzcyA6IGVudGVyVG9DbGFzcyk7XG4gICAgICAgIGlmICghaGFzRXhwbGljaXRDYWxsYmFjayhob29rKSkge1xuICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgZW50ZXJEdXJhdGlvbiwgcmVzb2x2ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG4gIHJldHVybiBleHRlbmQoYmFzZVByb3BzLCB7XG4gICAgb25CZWZvcmVFbnRlcihlbCkge1xuICAgICAgY2FsbEhvb2sob25CZWZvcmVFbnRlciwgW2VsXSk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGVudGVyRnJvbUNsYXNzKTtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgZW50ZXJBY3RpdmVDbGFzcyk7XG4gICAgfSxcbiAgICBvbkJlZm9yZUFwcGVhcihlbCkge1xuICAgICAgY2FsbEhvb2sob25CZWZvcmVBcHBlYXIsIFtlbF0pO1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhcHBlYXJGcm9tQ2xhc3MpO1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhcHBlYXJBY3RpdmVDbGFzcyk7XG4gICAgfSxcbiAgICBvbkVudGVyOiBtYWtlRW50ZXJIb29rKGZhbHNlKSxcbiAgICBvbkFwcGVhcjogbWFrZUVudGVySG9vayh0cnVlKSxcbiAgICBvbkxlYXZlKGVsLCBkb25lKSB7XG4gICAgICBlbC5faXNMZWF2aW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBmaW5pc2hMZWF2ZShlbCwgZG9uZSk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlRnJvbUNsYXNzKTtcbiAgICAgIGlmICghZWwuX2VudGVyQ2FuY2VsbGVkKSB7XG4gICAgICAgIGZvcmNlUmVmbG93KGVsKTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICAgIGZvcmNlUmVmbG93KGVsKTtcbiAgICAgIH1cbiAgICAgIG5leHRGcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmICghZWwuX2lzTGVhdmluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlRnJvbUNsYXNzKTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgICBpZiAoIWhhc0V4cGxpY2l0Q2FsbGJhY2sob25MZWF2ZSkpIHtcbiAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGxlYXZlRHVyYXRpb24sIHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNhbGxIb29rKG9uTGVhdmUsIFtlbCwgcmVzb2x2ZV0pO1xuICAgIH0sXG4gICAgb25FbnRlckNhbmNlbGxlZChlbCkge1xuICAgICAgZmluaXNoRW50ZXIoZWwsIGZhbHNlLCB2b2lkIDAsIHRydWUpO1xuICAgICAgY2FsbEhvb2sob25FbnRlckNhbmNlbGxlZCwgW2VsXSk7XG4gICAgfSxcbiAgICBvbkFwcGVhckNhbmNlbGxlZChlbCkge1xuICAgICAgZmluaXNoRW50ZXIoZWwsIHRydWUsIHZvaWQgMCwgdHJ1ZSk7XG4gICAgICBjYWxsSG9vayhvbkFwcGVhckNhbmNlbGxlZCwgW2VsXSk7XG4gICAgfSxcbiAgICBvbkxlYXZlQ2FuY2VsbGVkKGVsKSB7XG4gICAgICBmaW5pc2hMZWF2ZShlbCk7XG4gICAgICBjYWxsSG9vayhvbkxlYXZlQ2FuY2VsbGVkLCBbZWxdKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChpc09iamVjdChkdXJhdGlvbikpIHtcbiAgICByZXR1cm4gW051bWJlck9mKGR1cmF0aW9uLmVudGVyKSwgTnVtYmVyT2YoZHVyYXRpb24ubGVhdmUpXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBuID0gTnVtYmVyT2YoZHVyYXRpb24pO1xuICAgIHJldHVybiBbbiwgbl07XG4gIH1cbn1cbmZ1bmN0aW9uIE51bWJlck9mKHZhbCkge1xuICBjb25zdCByZXMgPSB0b051bWJlcih2YWwpO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGFzc2VydE51bWJlcihyZXMsIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IGR1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xuICBjbHMuc3BsaXQoL1xccysvKS5mb3JFYWNoKChjKSA9PiBjICYmIGVsLmNsYXNzTGlzdC5hZGQoYykpO1xuICAoZWxbdnRjS2V5XSB8fCAoZWxbdnRjS2V5XSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpKS5hZGQoY2xzKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgY2xzKSB7XG4gIGNscy5zcGxpdCgvXFxzKy8pLmZvckVhY2goKGMpID0+IGMgJiYgZWwuY2xhc3NMaXN0LnJlbW92ZShjKSk7XG4gIGNvbnN0IF92dGMgPSBlbFt2dGNLZXldO1xuICBpZiAoX3Z0Yykge1xuICAgIF92dGMuZGVsZXRlKGNscyk7XG4gICAgaWYgKCFfdnRjLnNpemUpIHtcbiAgICAgIGVsW3Z0Y0tleV0gPSB2b2lkIDA7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBuZXh0RnJhbWUoY2IpIHtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2IpO1xuICB9KTtcbn1cbmxldCBlbmRJZCA9IDA7XG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIGV4cGVjdGVkVHlwZSwgZXhwbGljaXRUaW1lb3V0LCByZXNvbHZlKSB7XG4gIGNvbnN0IGlkID0gZWwuX2VuZElkID0gKytlbmRJZDtcbiAgY29uc3QgcmVzb2x2ZUlmTm90U3RhbGUgPSAoKSA9PiB7XG4gICAgaWYgKGlkID09PSBlbC5fZW5kSWQpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH07XG4gIGlmIChleHBsaWNpdFRpbWVvdXQgIT0gbnVsbCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmVJZk5vdFN0YWxlLCBleHBsaWNpdFRpbWVvdXQpO1xuICB9XG4gIGNvbnN0IHsgdHlwZSwgdGltZW91dCwgcHJvcENvdW50IH0gPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgfVxuICBjb25zdCBlbmRFdmVudCA9IHR5cGUgKyBcImVuZFwiO1xuICBsZXQgZW5kZWQgPSAwO1xuICBjb25zdCBlbmQgPSAoKSA9PiB7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbmRFdmVudCwgb25FbmQpO1xuICAgIHJlc29sdmVJZk5vdFN0YWxlKCk7XG4gIH07XG4gIGNvbnN0IG9uRW5kID0gKGUpID0+IHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGVsICYmICsrZW5kZWQgPj0gcHJvcENvdW50KSB7XG4gICAgICBlbmQoKTtcbiAgICB9XG4gIH07XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xuICAgICAgZW5kKCk7XG4gICAgfVxuICB9LCB0aW1lb3V0ICsgMSk7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZW5kRXZlbnQsIG9uRW5kKTtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgY29uc3Qgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICBjb25zdCBnZXRTdHlsZVByb3BlcnRpZXMgPSAoa2V5KSA9PiAoc3R5bGVzW2tleV0gfHwgXCJcIikuc3BsaXQoXCIsIFwiKTtcbiAgY29uc3QgdHJhbnNpdGlvbkRlbGF5cyA9IGdldFN0eWxlUHJvcGVydGllcyhgJHtUUkFOU0lUSU9OfURlbGF5YCk7XG4gIGNvbnN0IHRyYW5zaXRpb25EdXJhdGlvbnMgPSBnZXRTdHlsZVByb3BlcnRpZXMoYCR7VFJBTlNJVElPTn1EdXJhdGlvbmApO1xuICBjb25zdCB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIGNvbnN0IGFuaW1hdGlvbkRlbGF5cyA9IGdldFN0eWxlUHJvcGVydGllcyhgJHtBTklNQVRJT059RGVsYXlgKTtcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb25zID0gZ2V0U3R5bGVQcm9wZXJ0aWVzKGAke0FOSU1BVElPTn1EdXJhdGlvbmApO1xuICBjb25zdCBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG4gIGxldCB0eXBlID0gbnVsbDtcbiAgbGV0IHRpbWVvdXQgPSAwO1xuICBsZXQgcHJvcENvdW50ID0gMDtcbiAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gVFJBTlNJVElPTikge1xuICAgIGlmICh0cmFuc2l0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBUUkFOU0lUSU9OO1xuICAgICAgdGltZW91dCA9IHRyYW5zaXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gQU5JTUFUSU9OKSB7XG4gICAgaWYgKGFuaW1hdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gQU5JTUFUSU9OO1xuICAgICAgdGltZW91dCA9IGFuaW1hdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aW1lb3V0ID0gTWF0aC5tYXgodHJhbnNpdGlvblRpbWVvdXQsIGFuaW1hdGlvblRpbWVvdXQpO1xuICAgIHR5cGUgPSB0aW1lb3V0ID4gMCA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dCA/IFRSQU5TSVRJT04gOiBBTklNQVRJT04gOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGUgPyB0eXBlID09PSBUUkFOU0lUSU9OID8gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGggOiBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoIDogMDtcbiAgfVxuICBjb25zdCBoYXNUcmFuc2Zvcm0gPSB0eXBlID09PSBUUkFOU0lUSU9OICYmIC9cXGIoPzp0cmFuc2Zvcm18YWxsKSg/Oix8JCkvLnRlc3QoXG4gICAgZ2V0U3R5bGVQcm9wZXJ0aWVzKGAke1RSQU5TSVRJT059UHJvcGVydHlgKS50b1N0cmluZygpXG4gICk7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICB0aW1lb3V0LFxuICAgIHByb3BDb3VudCxcbiAgICBoYXNUcmFuc2Zvcm1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFRpbWVvdXQoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICB9XG4gIHJldHVybiBNYXRoLm1heCguLi5kdXJhdGlvbnMubWFwKChkLCBpKSA9PiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pKSk7XG59XG5mdW5jdGlvbiB0b01zKHMpIHtcbiAgaWYgKHMgPT09IFwiYXV0b1wiKSByZXR1cm4gMDtcbiAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKFwiLFwiLCBcIi5cIikpICogMWUzO1xufVxuZnVuY3Rpb24gZm9yY2VSZWZsb3coZWwpIHtcbiAgY29uc3QgdGFyZ2V0RG9jdW1lbnQgPSBlbCA/IGVsLm93bmVyRG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgcmV0dXJuIHRhcmdldERvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xufVxuXG5mdW5jdGlvbiBwYXRjaENsYXNzKGVsLCB2YWx1ZSwgaXNTVkcpIHtcbiAgY29uc3QgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbFt2dGNLZXldO1xuICBpZiAodHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSA/IFt2YWx1ZSwgLi4udHJhbnNpdGlvbkNsYXNzZXNdIDogWy4uLnRyYW5zaXRpb25DbGFzc2VzXSkuam9pbihcIiBcIik7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgfSBlbHNlIGlmIChpc1NWRykge1xuICAgIGVsLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5jbGFzc05hbWUgPSB2YWx1ZTtcbiAgfVxufVxuXG5jb25zdCB2U2hvd09yaWdpbmFsRGlzcGxheSA9IFN5bWJvbChcIl92b2RcIik7XG5jb25zdCB2U2hvd0hpZGRlbiA9IFN5bWJvbChcIl92c2hcIik7XG5jb25zdCB2U2hvdyA9IHtcbiAgLy8gdXNlZCBmb3IgcHJvcCBtaXNtYXRjaCBjaGVjayBkdXJpbmcgaHlkcmF0aW9uXG4gIG5hbWU6IFwic2hvd1wiLFxuICBiZWZvcmVNb3VudChlbCwgeyB2YWx1ZSB9LCB7IHRyYW5zaXRpb24gfSkge1xuICAgIGVsW3ZTaG93T3JpZ2luYWxEaXNwbGF5XSA9IGVsLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHRyYW5zaXRpb24gJiYgdmFsdWUpIHtcbiAgICAgIHRyYW5zaXRpb24uYmVmb3JlRW50ZXIoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXREaXNwbGF5KGVsLCB2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkKGVsLCB7IHZhbHVlIH0sIHsgdHJhbnNpdGlvbiB9KSB7XG4gICAgaWYgKHRyYW5zaXRpb24gJiYgdmFsdWUpIHtcbiAgICAgIHRyYW5zaXRpb24uZW50ZXIoZWwpO1xuICAgIH1cbiAgfSxcbiAgdXBkYXRlZChlbCwgeyB2YWx1ZSwgb2xkVmFsdWUgfSwgeyB0cmFuc2l0aW9uIH0pIHtcbiAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpIHJldHVybjtcbiAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRyYW5zaXRpb24uYmVmb3JlRW50ZXIoZWwpO1xuICAgICAgICBzZXREaXNwbGF5KGVsLCB0cnVlKTtcbiAgICAgICAgdHJhbnNpdGlvbi5lbnRlcihlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uLmxlYXZlKGVsLCAoKSA9PiB7XG4gICAgICAgICAgc2V0RGlzcGxheShlbCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RGlzcGxheShlbCwgdmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlVW5tb3VudChlbCwgeyB2YWx1ZSB9KSB7XG4gICAgc2V0RGlzcGxheShlbCwgdmFsdWUpO1xuICB9XG59O1xuZnVuY3Rpb24gc2V0RGlzcGxheShlbCwgdmFsdWUpIHtcbiAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWxbdlNob3dPcmlnaW5hbERpc3BsYXldIDogXCJub25lXCI7XG4gIGVsW3ZTaG93SGlkZGVuXSA9ICF2YWx1ZTtcbn1cbmZ1bmN0aW9uIGluaXRWU2hvd0ZvclNTUigpIHtcbiAgdlNob3cuZ2V0U1NSUHJvcHMgPSAoeyB2YWx1ZSB9KSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHsgc3R5bGU6IHsgZGlzcGxheTogXCJub25lXCIgfSB9O1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgQ1NTX1ZBUl9URVhUID0gU3ltYm9sKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBcIkNTU19WQVJfVEVYVFwiIDogXCJcIik7XG5mdW5jdGlvbiB1c2VDc3NWYXJzKGdldHRlcikge1xuICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBpZiAoIWluc3RhbmNlKSB7XG4gICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuKGB1c2VDc3NWYXJzIGlzIGNhbGxlZCB3aXRob3V0IGN1cnJlbnQgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZS5gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdXBkYXRlVGVsZXBvcnRzID0gaW5zdGFuY2UudXQgPSAodmFycyA9IGdldHRlcihpbnN0YW5jZS5wcm94eSkpID0+IHtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtdi1vd25lcj1cIiR7aW5zdGFuY2UudWlkfVwiXWApXG4gICAgKS5mb3JFYWNoKChub2RlKSA9PiBzZXRWYXJzT25Ob2RlKG5vZGUsIHZhcnMpKTtcbiAgfTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBpbnN0YW5jZS5nZXRDc3NWYXJzID0gKCkgPT4gZ2V0dGVyKGluc3RhbmNlLnByb3h5KTtcbiAgfVxuICBjb25zdCBzZXRWYXJzID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhcnMgPSBnZXR0ZXIoaW5zdGFuY2UucHJveHkpO1xuICAgIGlmIChpbnN0YW5jZS5jZSkge1xuICAgICAgc2V0VmFyc09uTm9kZShpbnN0YW5jZS5jZSwgdmFycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZhcnNPblZOb2RlKGluc3RhbmNlLnN1YlRyZWUsIHZhcnMpO1xuICAgIH1cbiAgICB1cGRhdGVUZWxlcG9ydHModmFycyk7XG4gIH07XG4gIG9uQmVmb3JlVXBkYXRlKCgpID0+IHtcbiAgICBxdWV1ZVBvc3RGbHVzaENiKHNldFZhcnMpO1xuICB9KTtcbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICB3YXRjaChzZXRWYXJzLCBOT09QLCB7IGZsdXNoOiBcInBvc3RcIiB9KTtcbiAgICBjb25zdCBvYiA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHNldFZhcnMpO1xuICAgIG9iLm9ic2VydmUoaW5zdGFuY2Uuc3ViVHJlZS5lbC5wYXJlbnROb2RlLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBvblVubW91bnRlZCgoKSA9PiBvYi5kaXNjb25uZWN0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHNldFZhcnNPblZOb2RlKHZub2RlLCB2YXJzKSB7XG4gIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxMjgpIHtcbiAgICBjb25zdCBzdXNwZW5zZSA9IHZub2RlLnN1c3BlbnNlO1xuICAgIHZub2RlID0gc3VzcGVuc2UuYWN0aXZlQnJhbmNoO1xuICAgIGlmIChzdXNwZW5zZS5wZW5kaW5nQnJhbmNoICYmICFzdXNwZW5zZS5pc0h5ZHJhdGluZykge1xuICAgICAgc3VzcGVuc2UuZWZmZWN0cy5wdXNoKCgpID0+IHtcbiAgICAgICAgc2V0VmFyc09uVk5vZGUoc3VzcGVuc2UuYWN0aXZlQnJhbmNoLCB2YXJzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICB3aGlsZSAodm5vZGUuY29tcG9uZW50KSB7XG4gICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnQuc3ViVHJlZTtcbiAgfVxuICBpZiAodm5vZGUuc2hhcGVGbGFnICYgMSAmJiB2bm9kZS5lbCkge1xuICAgIHNldFZhcnNPbk5vZGUodm5vZGUuZWwsIHZhcnMpO1xuICB9IGVsc2UgaWYgKHZub2RlLnR5cGUgPT09IEZyYWdtZW50KSB7XG4gICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoYykgPT4gc2V0VmFyc09uVk5vZGUoYywgdmFycykpO1xuICB9IGVsc2UgaWYgKHZub2RlLnR5cGUgPT09IFN0YXRpYykge1xuICAgIGxldCB7IGVsLCBhbmNob3IgfSA9IHZub2RlO1xuICAgIHdoaWxlIChlbCkge1xuICAgICAgc2V0VmFyc09uTm9kZShlbCwgdmFycyk7XG4gICAgICBpZiAoZWwgPT09IGFuY2hvcikgYnJlYWs7XG4gICAgICBlbCA9IGVsLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0VmFyc09uTm9kZShlbCwgdmFycykge1xuICBpZiAoZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICBjb25zdCBzdHlsZSA9IGVsLnN0eWxlO1xuICAgIGxldCBjc3NUZXh0ID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YXJzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG5vcm1hbGl6ZUNzc1ZhclZhbHVlKHZhcnNba2V5XSk7XG4gICAgICBzdHlsZS5zZXRQcm9wZXJ0eShgLS0ke2tleX1gLCB2YWx1ZSk7XG4gICAgICBjc3NUZXh0ICs9IGAtLSR7a2V5fTogJHt2YWx1ZX07YDtcbiAgICB9XG4gICAgc3R5bGVbQ1NTX1ZBUl9URVhUXSA9IGNzc1RleHQ7XG4gIH1cbn1cblxuY29uc3QgZGlzcGxheVJFID0gLyg/Ol58OylcXHMqZGlzcGxheVxccyo6LztcbmZ1bmN0aW9uIHBhdGNoU3R5bGUoZWwsIHByZXYsIG5leHQpIHtcbiAgY29uc3Qgc3R5bGUgPSBlbC5zdHlsZTtcbiAgY29uc3QgaXNDc3NTdHJpbmcgPSBpc1N0cmluZyhuZXh0KTtcbiAgbGV0IGhhc0NvbnRyb2xsZWREaXNwbGF5ID0gZmFsc2U7XG4gIGlmIChuZXh0ICYmICFpc0Nzc1N0cmluZykge1xuICAgIGlmIChwcmV2KSB7XG4gICAgICBpZiAoIWlzU3RyaW5nKHByZXYpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByZXYpIHtcbiAgICAgICAgICBpZiAobmV4dFtrZXldID09IG51bGwpIHtcbiAgICAgICAgICAgIHNldFN0eWxlKHN0eWxlLCBrZXksIFwiXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBwcmV2U3R5bGUgb2YgcHJldi5zcGxpdChcIjtcIikpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBwcmV2U3R5bGUuc2xpY2UoMCwgcHJldlN0eWxlLmluZGV4T2YoXCI6XCIpKS50cmltKCk7XG4gICAgICAgICAgaWYgKG5leHRba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRTdHlsZShzdHlsZSwga2V5LCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKGtleSA9PT0gXCJkaXNwbGF5XCIpIHtcbiAgICAgICAgaGFzQ29udHJvbGxlZERpc3BsYXkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc2V0U3R5bGUoc3R5bGUsIGtleSwgbmV4dFtrZXldKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzQ3NzU3RyaW5nKSB7XG4gICAgICBpZiAocHJldiAhPT0gbmV4dCkge1xuICAgICAgICBjb25zdCBjc3NWYXJUZXh0ID0gc3R5bGVbQ1NTX1ZBUl9URVhUXTtcbiAgICAgICAgaWYgKGNzc1ZhclRleHQpIHtcbiAgICAgICAgICBuZXh0ICs9IFwiO1wiICsgY3NzVmFyVGV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdHlsZS5jc3NUZXh0ID0gbmV4dDtcbiAgICAgICAgaGFzQ29udHJvbGxlZERpc3BsYXkgPSBkaXNwbGF5UkUudGVzdChuZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByZXYpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgIH1cbiAgfVxuICBpZiAodlNob3dPcmlnaW5hbERpc3BsYXkgaW4gZWwpIHtcbiAgICBlbFt2U2hvd09yaWdpbmFsRGlzcGxheV0gPSBoYXNDb250cm9sbGVkRGlzcGxheSA/IHN0eWxlLmRpc3BsYXkgOiBcIlwiO1xuICAgIGlmIChlbFt2U2hvd0hpZGRlbl0pIHtcbiAgICAgIHN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG4gIH1cbn1cbmNvbnN0IHNlbWljb2xvblJFID0gL1teXFxcXF07XFxzKiQvO1xuY29uc3QgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbmZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlLCBuYW1lLCB2YWwpIHtcbiAgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgIHZhbC5mb3JFYWNoKCh2KSA9PiBzZXRTdHlsZShzdHlsZSwgbmFtZSwgdikpO1xuICB9IGVsc2Uge1xuICAgIGlmICh2YWwgPT0gbnVsbCkgdmFsID0gXCJcIjtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgaWYgKHNlbWljb2xvblJFLnRlc3QodmFsKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGBVbmV4cGVjdGVkIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mICcke25hbWV9JyBzdHlsZSB2YWx1ZTogJyR7dmFsfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJlZml4ZWQgPSBhdXRvUHJlZml4KHN0eWxlLCBuYW1lKTtcbiAgICAgIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgaHlwaGVuYXRlKHByZWZpeGVkKSxcbiAgICAgICAgICB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgXCJcIiksXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVbcHJlZml4ZWRdID0gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuY29uc3QgcHJlZml4ZXMgPSBbXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiXTtcbmNvbnN0IHByZWZpeENhY2hlID0ge307XG5mdW5jdGlvbiBhdXRvUHJlZml4KHN0eWxlLCByYXdOYW1lKSB7XG4gIGNvbnN0IGNhY2hlZCA9IHByZWZpeENhY2hlW3Jhd05hbWVdO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBsZXQgbmFtZSA9IGNhbWVsaXplKHJhd05hbWUpO1xuICBpZiAobmFtZSAhPT0gXCJmaWx0ZXJcIiAmJiBuYW1lIGluIHN0eWxlKSB7XG4gICAgcmV0dXJuIHByZWZpeENhY2hlW3Jhd05hbWVdID0gbmFtZTtcbiAgfVxuICBuYW1lID0gY2FwaXRhbGl6ZShuYW1lKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByZWZpeGVkID0gcHJlZml4ZXNbaV0gKyBuYW1lO1xuICAgIGlmIChwcmVmaXhlZCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeENhY2hlW3Jhd05hbWVdID0gcHJlZml4ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByYXdOYW1lO1xufVxuXG5jb25zdCB4bGlua05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG5mdW5jdGlvbiBwYXRjaEF0dHIoZWwsIGtleSwgdmFsdWUsIGlzU1ZHLCBpbnN0YW5jZSwgaXNCb29sZWFuID0gaXNTcGVjaWFsQm9vbGVhbkF0dHIoa2V5KSkge1xuICBpZiAoaXNTVkcgJiYga2V5LnN0YXJ0c1dpdGgoXCJ4bGluazpcIikpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywga2V5LnNsaWNlKDYsIGtleS5sZW5ndGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IGlzQm9vbGVhbiAmJiAhaW5jbHVkZUJvb2xlYW5BdHRyKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAga2V5LFxuICAgICAgICBpc0Jvb2xlYW4gPyBcIlwiIDogaXNTeW1ib2wodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXRjaERPTVByb3AoZWwsIGtleSwgdmFsdWUsIHBhcmVudENvbXBvbmVudCwgYXR0ck5hbWUpIHtcbiAgaWYgKGtleSA9PT0gXCJpbm5lckhUTUxcIiB8fCBrZXkgPT09IFwidGV4dENvbnRlbnRcIikge1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBlbFtrZXldID0ga2V5ID09PSBcImlubmVySFRNTFwiID8gdW5zYWZlVG9UcnVzdGVkSFRNTCh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWU7XG4gIGlmIChrZXkgPT09IFwidmFsdWVcIiAmJiB0YWcgIT09IFwiUFJPR1JFU1NcIiAmJiAvLyBjdXN0b20gZWxlbWVudHMgbWF5IHVzZSBfdmFsdWUgaW50ZXJuYWxseVxuICAhdGFnLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGFnID09PSBcIk9QVElPTlwiID8gZWwuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikgfHwgXCJcIiA6IGVsLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUgPT0gbnVsbCA/IChcbiAgICAgIC8vICMxMTY0NzogdmFsdWUgc2hvdWxkIGJlIHNldCBhcyBlbXB0eSBzdHJpbmcgZm9yIG51bGwgYW5kIHVuZGVmaW5lZCxcbiAgICAgIC8vIGJ1dCA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCI+IHNob3VsZCBiZSBzZXQgYXMgJ29uJy5cbiAgICAgIGVsLnR5cGUgPT09IFwiY2hlY2tib3hcIiA/IFwib25cIiA6IFwiXCJcbiAgICApIDogU3RyaW5nKHZhbHVlKTtcbiAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlIHx8ICEoXCJfdmFsdWVcIiBpbiBlbCkpIHtcbiAgICAgIGVsLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9XG4gICAgZWwuX3ZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBuZWVkUmVtb3ZlID0gZmFsc2U7XG4gIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBlbFtrZXldO1xuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSBpbmNsdWRlQm9vbGVhbkF0dHIodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gbnVsbCAmJiB0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICBuZWVkUmVtb3ZlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICAgIG5lZWRSZW1vdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIGVsW2tleV0gPSB2YWx1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFuZWVkUmVtb3ZlKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBgRmFpbGVkIHNldHRpbmcgcHJvcCBcIiR7a2V5fVwiIG9uIDwke3RhZy50b0xvd2VyQ2FzZSgpfT46IHZhbHVlICR7dmFsdWV9IGlzIGludmFsaWQuYCxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgbmVlZFJlbW92ZSAmJiBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUgfHwga2V5KTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGVsLCBldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xuICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbn1cbmNvbnN0IHZlaUtleSA9IFN5bWJvbChcIl92ZWlcIik7XG5mdW5jdGlvbiBwYXRjaEV2ZW50KGVsLCByYXdOYW1lLCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgaW5zdGFuY2UgPSBudWxsKSB7XG4gIGNvbnN0IGludm9rZXJzID0gZWxbdmVpS2V5XSB8fCAoZWxbdmVpS2V5XSA9IHt9KTtcbiAgY29uc3QgZXhpc3RpbmdJbnZva2VyID0gaW52b2tlcnNbcmF3TmFtZV07XG4gIGlmIChuZXh0VmFsdWUgJiYgZXhpc3RpbmdJbnZva2VyKSB7XG4gICAgZXhpc3RpbmdJbnZva2VyLnZhbHVlID0gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHNhbml0aXplRXZlbnRWYWx1ZShuZXh0VmFsdWUsIHJhd05hbWUpIDogbmV4dFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFtuYW1lLCBvcHRpb25zXSA9IHBhcnNlTmFtZShyYXdOYW1lKTtcbiAgICBpZiAobmV4dFZhbHVlKSB7XG4gICAgICBjb25zdCBpbnZva2VyID0gaW52b2tlcnNbcmF3TmFtZV0gPSBjcmVhdGVJbnZva2VyKFxuICAgICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gc2FuaXRpemVFdmVudFZhbHVlKG5leHRWYWx1ZSwgcmF3TmFtZSkgOiBuZXh0VmFsdWUsXG4gICAgICAgIGluc3RhbmNlXG4gICAgICApO1xuICAgICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgbmFtZSwgaW52b2tlciwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChleGlzdGluZ0ludm9rZXIpIHtcbiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZWwsIG5hbWUsIGV4aXN0aW5nSW52b2tlciwgb3B0aW9ucyk7XG4gICAgICBpbnZva2Vyc1tyYXdOYW1lXSA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbn1cbmNvbnN0IG9wdGlvbnNNb2RpZmllclJFID0gLyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO1xuZnVuY3Rpb24gcGFyc2VOYW1lKG5hbWUpIHtcbiAgbGV0IG9wdGlvbnM7XG4gIGlmIChvcHRpb25zTW9kaWZpZXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICAgIGxldCBtO1xuICAgIHdoaWxlIChtID0gbmFtZS5tYXRjaChvcHRpb25zTW9kaWZpZXJSRSkpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIG5hbWUubGVuZ3RoIC0gbVswXS5sZW5ndGgpO1xuICAgICAgb3B0aW9uc1ttWzBdLnRvTG93ZXJDYXNlKCldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZXZlbnQgPSBuYW1lWzJdID09PSBcIjpcIiA/IG5hbWUuc2xpY2UoMykgOiBoeXBoZW5hdGUobmFtZS5zbGljZSgyKSk7XG4gIHJldHVybiBbZXZlbnQsIG9wdGlvbnNdO1xufVxubGV0IGNhY2hlZE5vdyA9IDA7XG5jb25zdCBwID0gLyogQF9fUFVSRV9fICovIFByb21pc2UucmVzb2x2ZSgpO1xuY29uc3QgZ2V0Tm93ID0gKCkgPT4gY2FjaGVkTm93IHx8IChwLnRoZW4oKCkgPT4gY2FjaGVkTm93ID0gMCksIGNhY2hlZE5vdyA9IERhdGUubm93KCkpO1xuZnVuY3Rpb24gY3JlYXRlSW52b2tlcihpbml0aWFsVmFsdWUsIGluc3RhbmNlKSB7XG4gIGNvbnN0IGludm9rZXIgPSAoZSkgPT4ge1xuICAgIGlmICghZS5fdnRzKSB7XG4gICAgICBlLl92dHMgPSBEYXRlLm5vdygpO1xuICAgIH0gZWxzZSBpZiAoZS5fdnRzIDw9IGludm9rZXIuYXR0YWNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoXG4gICAgICBwYXRjaFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbihlLCBpbnZva2VyLnZhbHVlKSxcbiAgICAgIGluc3RhbmNlLFxuICAgICAgNSxcbiAgICAgIFtlXVxuICAgICk7XG4gIH07XG4gIGludm9rZXIudmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIGludm9rZXIuYXR0YWNoZWQgPSBnZXROb3coKTtcbiAgcmV0dXJuIGludm9rZXI7XG59XG5mdW5jdGlvbiBzYW5pdGl6ZUV2ZW50VmFsdWUodmFsdWUsIHByb3BOYW1lKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB3YXJuKFxuICAgIGBXcm9uZyB0eXBlIHBhc3NlZCBhcyBldmVudCBoYW5kbGVyIHRvICR7cHJvcE5hbWV9IC0gZGlkIHlvdSBmb3JnZXQgQCBvciA6IGluIGZyb250IG9mIHlvdXIgcHJvcD9cbkV4cGVjdGVkIGZ1bmN0aW9uIG9yIGFycmF5IG9mIGZ1bmN0aW9ucywgcmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB2YWx1ZX0uYFxuICApO1xuICByZXR1cm4gTk9PUDtcbn1cbmZ1bmN0aW9uIHBhdGNoU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKGUsIHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IG9yaWdpbmFsU3RvcCA9IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gKCkgPT4ge1xuICAgICAgb3JpZ2luYWxTdG9wLmNhbGwoZSk7XG4gICAgICBlLl9zdG9wcGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIHJldHVybiB2YWx1ZS5tYXAoXG4gICAgICAoZm4pID0+IChlMikgPT4gIWUyLl9zdG9wcGVkICYmIGZuICYmIGZuKGUyKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmNvbnN0IGlzTmF0aXZlT24gPSAoa2V5KSA9PiBrZXkuY2hhckNvZGVBdCgwKSA9PT0gMTExICYmIGtleS5jaGFyQ29kZUF0KDEpID09PSAxMTAgJiYgLy8gbG93ZXJjYXNlIGxldHRlclxua2V5LmNoYXJDb2RlQXQoMikgPiA5NiAmJiBrZXkuY2hhckNvZGVBdCgyKSA8IDEyMztcbmNvbnN0IHBhdGNoUHJvcCA9IChlbCwga2V5LCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgbmFtZXNwYWNlLCBwYXJlbnRDb21wb25lbnQpID0+IHtcbiAgY29uc3QgaXNTVkcgPSBuYW1lc3BhY2UgPT09IFwic3ZnXCI7XG4gIGlmIChrZXkgPT09IFwiY2xhc3NcIikge1xuICAgIHBhdGNoQ2xhc3MoZWwsIG5leHRWYWx1ZSwgaXNTVkcpO1xuICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgcGF0Y2hTdHlsZShlbCwgcHJldlZhbHVlLCBuZXh0VmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzT24oa2V5KSkge1xuICAgIGlmICghaXNNb2RlbExpc3RlbmVyKGtleSkpIHtcbiAgICAgIHBhdGNoRXZlbnQoZWwsIGtleSwgcHJldlZhbHVlLCBuZXh0VmFsdWUsIHBhcmVudENvbXBvbmVudCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGtleVswXSA9PT0gXCIuXCIgPyAoa2V5ID0ga2V5LnNsaWNlKDEpLCB0cnVlKSA6IGtleVswXSA9PT0gXCJeXCIgPyAoa2V5ID0ga2V5LnNsaWNlKDEpLCBmYWxzZSkgOiBzaG91bGRTZXRBc1Byb3AoZWwsIGtleSwgbmV4dFZhbHVlLCBpc1NWRykpIHtcbiAgICBwYXRjaERPTVByb3AoZWwsIGtleSwgbmV4dFZhbHVlKTtcbiAgICBpZiAoIWVsLnRhZ05hbWUuaW5jbHVkZXMoXCItXCIpICYmIChrZXkgPT09IFwidmFsdWVcIiB8fCBrZXkgPT09IFwiY2hlY2tlZFwiIHx8IGtleSA9PT0gXCJzZWxlY3RlZFwiKSkge1xuICAgICAgcGF0Y2hBdHRyKGVsLCBrZXksIG5leHRWYWx1ZSwgaXNTVkcsIHBhcmVudENvbXBvbmVudCwga2V5ICE9PSBcInZhbHVlXCIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICAvLyAjMTEwODEgZm9yY2Ugc2V0IHByb3BzIGZvciBwb3NzaWJsZSBhc3luYyBjdXN0b20gZWxlbWVudFxuICAgIGVsLl9pc1Z1ZUNFICYmICgvW0EtWl0vLnRlc3Qoa2V5KSB8fCAhaXNTdHJpbmcobmV4dFZhbHVlKSlcbiAgKSB7XG4gICAgcGF0Y2hET01Qcm9wKGVsLCBjYW1lbGl6ZSQxKGtleSksIG5leHRWYWx1ZSwgcGFyZW50Q29tcG9uZW50LCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIGlmIChrZXkgPT09IFwidHJ1ZS12YWx1ZVwiKSB7XG4gICAgICBlbC5fdHJ1ZVZhbHVlID0gbmV4dFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImZhbHNlLXZhbHVlXCIpIHtcbiAgICAgIGVsLl9mYWxzZVZhbHVlID0gbmV4dFZhbHVlO1xuICAgIH1cbiAgICBwYXRjaEF0dHIoZWwsIGtleSwgbmV4dFZhbHVlLCBpc1NWRyk7XG4gIH1cbn07XG5mdW5jdGlvbiBzaG91bGRTZXRBc1Byb3AoZWwsIGtleSwgdmFsdWUsIGlzU1ZHKSB7XG4gIGlmIChpc1NWRykge1xuICAgIGlmIChrZXkgPT09IFwiaW5uZXJIVE1MXCIgfHwga2V5ID09PSBcInRleHRDb250ZW50XCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoa2V5IGluIGVsICYmIGlzTmF0aXZlT24oa2V5KSAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoa2V5ID09PSBcInNwZWxsY2hlY2tcIiB8fCBrZXkgPT09IFwiZHJhZ2dhYmxlXCIgfHwga2V5ID09PSBcInRyYW5zbGF0ZVwiIHx8IGtleSA9PT0gXCJhdXRvY29ycmVjdFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChrZXkgPT09IFwic2FuZGJveFwiICYmIGVsLnRhZ05hbWUgPT09IFwiSUZSQU1FXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGtleSA9PT0gXCJmb3JtXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGtleSA9PT0gXCJsaXN0XCIgJiYgZWwudGFnTmFtZSA9PT0gXCJJTlBVVFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChrZXkgPT09IFwidHlwZVwiICYmIGVsLnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoa2V5ID09PSBcIndpZHRoXCIgfHwga2V5ID09PSBcImhlaWdodFwiKSB7XG4gICAgY29uc3QgdGFnID0gZWwudGFnTmFtZTtcbiAgICBpZiAodGFnID09PSBcIklNR1wiIHx8IHRhZyA9PT0gXCJWSURFT1wiIHx8IHRhZyA9PT0gXCJDQU5WQVNcIiB8fCB0YWcgPT09IFwiU09VUkNFXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzTmF0aXZlT24oa2V5KSAmJiBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGtleSBpbiBlbDtcbn1cblxuY29uc3QgUkVNT1ZBTCA9IHt9O1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmZ1bmN0aW9uIGRlZmluZUN1c3RvbUVsZW1lbnQob3B0aW9ucywgZXh0cmFPcHRpb25zLCBfY3JlYXRlQXBwKSB7XG4gIGxldCBDb21wID0gZGVmaW5lQ29tcG9uZW50KG9wdGlvbnMsIGV4dHJhT3B0aW9ucyk7XG4gIGlmIChpc1BsYWluT2JqZWN0KENvbXApKSBDb21wID0gZXh0ZW5kKHt9LCBDb21wLCBleHRyYU9wdGlvbnMpO1xuICBjbGFzcyBWdWVDdXN0b21FbGVtZW50IGV4dGVuZHMgVnVlRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoaW5pdGlhbFByb3BzKSB7XG4gICAgICBzdXBlcihDb21wLCBpbml0aWFsUHJvcHMsIF9jcmVhdGVBcHApO1xuICAgIH1cbiAgfVxuICBWdWVDdXN0b21FbGVtZW50LmRlZiA9IENvbXA7XG4gIHJldHVybiBWdWVDdXN0b21FbGVtZW50O1xufVxuY29uc3QgZGVmaW5lU1NSQ3VzdG9tRWxlbWVudCA9ICgvKiBAX19OT19TSURFX0VGRkVDVFNfXyAqLyAob3B0aW9ucywgZXh0cmFPcHRpb25zKSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ3VzdG9tRWxlbWVudChvcHRpb25zLCBleHRyYU9wdGlvbnMsIGNyZWF0ZVNTUkFwcCk7XG59KTtcbmNvbnN0IEJhc2VDbGFzcyA9IHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiA/IEhUTUxFbGVtZW50IDogY2xhc3Mge1xufTtcbmNsYXNzIFZ1ZUVsZW1lbnQgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuICBjb25zdHJ1Y3RvcihfZGVmLCBfcHJvcHMgPSB7fSwgX2NyZWF0ZUFwcCA9IGNyZWF0ZUFwcCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGVmID0gX2RlZjtcbiAgICB0aGlzLl9wcm9wcyA9IF9wcm9wcztcbiAgICB0aGlzLl9jcmVhdGVBcHAgPSBfY3JlYXRlQXBwO1xuICAgIHRoaXMuX2lzVnVlQ0UgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl9hcHAgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuX25vbmNlID0gdGhpcy5fZGVmLm5vbmNlO1xuICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3Jlc29sdmVkID0gZmFsc2U7XG4gICAgdGhpcy5fcGF0Y2hpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuX251bWJlclByb3BzID0gbnVsbDtcbiAgICB0aGlzLl9zdHlsZUNoaWxkcmVuID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7XG4gICAgdGhpcy5fb2IgPSBudWxsO1xuICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QgJiYgX2NyZWF0ZUFwcCAhPT0gY3JlYXRlQXBwKSB7XG4gICAgICB0aGlzLl9yb290ID0gdGhpcy5zaGFkb3dSb290O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBgQ3VzdG9tIGVsZW1lbnQgaGFzIHByZS1yZW5kZXJlZCBkZWNsYXJhdGl2ZSBzaGFkb3cgcm9vdCBidXQgaXMgbm90IGRlZmluZWQgYXMgaHlkcmF0YWJsZS4gVXNlIFxcYGRlZmluZVNTUkN1c3RvbUVsZW1lbnRcXGAuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKF9kZWYuc2hhZG93Um9vdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coXG4gICAgICAgICAgZXh0ZW5kKHt9LCBfZGVmLnNoYWRvd1Jvb3RPcHRpb25zLCB7XG4gICAgICAgICAgICBtb2RlOiBcIm9wZW5cIlxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB0aGlzLnNoYWRvd1Jvb3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yb290ID0gdGhpcztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QgJiYgIXRoaXMuX3Jlc29sdmVkKSB7XG4gICAgICB0aGlzLl9wYXJzZVNsb3RzKCk7XG4gICAgfVxuICAgIHRoaXMuX2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgbGV0IHBhcmVudCA9IHRoaXM7XG4gICAgd2hpbGUgKHBhcmVudCA9IHBhcmVudCAmJiAocGFyZW50LnBhcmVudE5vZGUgfHwgcGFyZW50Lmhvc3QpKSB7XG4gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVnVlRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICBpZiAodGhpcy5fcmVzb2x2ZWQpIHtcbiAgICAgICAgdGhpcy5fbW91bnQodGhpcy5fZGVmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nUmVzb2x2ZSkge1xuICAgICAgICAgIHRoaXMuX3BlbmRpbmdSZXNvbHZlID0gcGFyZW50Ll9wZW5kaW5nUmVzb2x2ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdSZXNvbHZlID0gdm9pZCAwO1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZURlZigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3Jlc29sdmVEZWYoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBfc2V0UGFyZW50KHBhcmVudCA9IHRoaXMuX3BhcmVudCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHRoaXMuX2luc3RhbmNlLnBhcmVudCA9IHBhcmVudC5faW5zdGFuY2U7XG4gICAgICB0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dChwYXJlbnQpO1xuICAgIH1cbiAgfVxuICBfaW5oZXJpdFBhcmVudENvbnRleHQocGFyZW50ID0gdGhpcy5fcGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCAmJiB0aGlzLl9hcHApIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihcbiAgICAgICAgdGhpcy5fYXBwLl9jb250ZXh0LnByb3ZpZGVzLFxuICAgICAgICBwYXJlbnQuX2luc3RhbmNlLnByb3ZpZGVzXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgICBpZiAodGhpcy5fb2IpIHtcbiAgICAgICAgICB0aGlzLl9vYi5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5fb2IgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcCAmJiB0aGlzLl9hcHAudW5tb3VudCgpO1xuICAgICAgICBpZiAodGhpcy5faW5zdGFuY2UpIHRoaXMuX2luc3RhbmNlLmNlID0gdm9pZCAwO1xuICAgICAgICB0aGlzLl9hcHAgPSB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl90ZWxlcG9ydFRhcmdldHMpIHtcbiAgICAgICAgICB0aGlzLl90ZWxlcG9ydFRhcmdldHMuY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLl90ZWxlcG9ydFRhcmdldHMgPSB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBfcHJvY2Vzc011dGF0aW9ucyhtdXRhdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IG0gb2YgbXV0YXRpb25zKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyKG0uYXR0cmlidXRlTmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiByZXNvbHZlIGlubmVyIGNvbXBvbmVudCBkZWZpbml0aW9uIChoYW5kbGUgcG9zc2libGUgYXN5bmMgY29tcG9uZW50KVxuICAgKi9cbiAgX3Jlc29sdmVEZWYoKSB7XG4gICAgaWYgKHRoaXMuX3BlbmRpbmdSZXNvbHZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyKHRoaXMuYXR0cmlidXRlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy5fb2IgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLl9wcm9jZXNzTXV0YXRpb25zLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX29iLm9ic2VydmUodGhpcywgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuICAgIGNvbnN0IHJlc29sdmUgPSAoZGVmLCBpc0FzeW5jID0gZmFsc2UpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3BlbmRpbmdSZXNvbHZlID0gdm9pZCAwO1xuICAgICAgY29uc3QgeyBwcm9wcywgc3R5bGVzIH0gPSBkZWY7XG4gICAgICBsZXQgbnVtYmVyUHJvcHM7XG4gICAgICBpZiAocHJvcHMgJiYgIWlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgY29uc3Qgb3B0ID0gcHJvcHNba2V5XTtcbiAgICAgICAgICBpZiAob3B0ID09PSBOdW1iZXIgfHwgb3B0ICYmIG9wdC50eXBlID09PSBOdW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gdGhpcy5fcHJvcHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJvcHNba2V5XSA9IHRvTnVtYmVyKHRoaXMuX3Byb3BzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKG51bWJlclByb3BzIHx8IChudW1iZXJQcm9wcyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKSlbY2FtZWxpemUkMShrZXkpXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9udW1iZXJQcm9wcyA9IG51bWJlclByb3BzO1xuICAgICAgdGhpcy5fcmVzb2x2ZVByb3BzKGRlZik7XG4gICAgICBpZiAodGhpcy5zaGFkb3dSb290KSB7XG4gICAgICAgIHRoaXMuX2FwcGx5U3R5bGVzKHN0eWxlcyk7XG4gICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc3R5bGVzKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJDdXN0b20gZWxlbWVudCBzdHlsZSBpbmplY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIHNoYWRvd1Jvb3Q6IGZhbHNlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX21vdW50KGRlZik7XG4gICAgfTtcbiAgICBjb25zdCBhc3luY0RlZiA9IHRoaXMuX2RlZi5fX2FzeW5jTG9hZGVyO1xuICAgIGlmIChhc3luY0RlZikge1xuICAgICAgdGhpcy5fcGVuZGluZ1Jlc29sdmUgPSBhc3luY0RlZigpLnRoZW4oKGRlZikgPT4ge1xuICAgICAgICBkZWYuY29uZmlndXJlQXBwID0gdGhpcy5fZGVmLmNvbmZpZ3VyZUFwcDtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9kZWYgPSBkZWYsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUodGhpcy5fZGVmKTtcbiAgICB9XG4gIH1cbiAgX21vdW50KGRlZikge1xuICAgIGlmICgoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pICYmICFkZWYubmFtZSkge1xuICAgICAgZGVmLm5hbWUgPSBcIlZ1ZUVsZW1lbnRcIjtcbiAgICB9XG4gICAgdGhpcy5fYXBwID0gdGhpcy5fY3JlYXRlQXBwKGRlZik7XG4gICAgdGhpcy5faW5oZXJpdFBhcmVudENvbnRleHQoKTtcbiAgICBpZiAoZGVmLmNvbmZpZ3VyZUFwcCkge1xuICAgICAgZGVmLmNvbmZpZ3VyZUFwcCh0aGlzLl9hcHApO1xuICAgIH1cbiAgICB0aGlzLl9hcHAuX2NlVk5vZGUgPSB0aGlzLl9jcmVhdGVWTm9kZSgpO1xuICAgIHRoaXMuX2FwcC5tb3VudCh0aGlzLl9yb290KTtcbiAgICBjb25zdCBleHBvc2VkID0gdGhpcy5faW5zdGFuY2UgJiYgdGhpcy5faW5zdGFuY2UuZXhwb3NlZDtcbiAgICBpZiAoIWV4cG9zZWQpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBleHBvc2VkKSB7XG4gICAgICBpZiAoIWhhc093bih0aGlzLCBrZXkpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgICAvLyB1bndyYXAgcmVmIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBwdWJsaWMgaW5zdGFuY2UgYmVoYXZpb3JcbiAgICAgICAgICBnZXQ6ICgpID0+IHVucmVmKGV4cG9zZWRba2V5XSlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgd2FybihgRXhwb3NlZCBwcm9wZXJ0eSBcIiR7a2V5fVwiIGFscmVhZHkgZXhpc3RzIG9uIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfcmVzb2x2ZVByb3BzKGRlZikge1xuICAgIGNvbnN0IHsgcHJvcHMgfSA9IGRlZjtcbiAgICBjb25zdCBkZWNsYXJlZFByb3BLZXlzID0gaXNBcnJheShwcm9wcykgPyBwcm9wcyA6IE9iamVjdC5rZXlzKHByb3BzIHx8IHt9KTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzKSkge1xuICAgICAgaWYgKGtleVswXSAhPT0gXCJfXCIgJiYgZGVjbGFyZWRQcm9wS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuX3NldFByb3Aoa2V5LCB0aGlzW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBkZWNsYXJlZFByb3BLZXlzLm1hcChjYW1lbGl6ZSQxKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3Aoa2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHZhbCkge1xuICAgICAgICAgIHRoaXMuX3NldFByb3Aoa2V5LCB2YWwsIHRydWUsICF0aGlzLl9wYXRjaGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfc2V0QXR0cihrZXkpIHtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoXCJkYXRhLXYtXCIpKSByZXR1cm47XG4gICAgY29uc3QgaGFzID0gdGhpcy5oYXNBdHRyaWJ1dGUoa2V5KTtcbiAgICBsZXQgdmFsdWUgPSBoYXMgPyB0aGlzLmdldEF0dHJpYnV0ZShrZXkpIDogUkVNT1ZBTDtcbiAgICBjb25zdCBjYW1lbEtleSA9IGNhbWVsaXplJDEoa2V5KTtcbiAgICBpZiAoaGFzICYmIHRoaXMuX251bWJlclByb3BzICYmIHRoaXMuX251bWJlclByb3BzW2NhbWVsS2V5XSkge1xuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldFByb3AoY2FtZWxLZXksIHZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2dldFByb3Aoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BzW2tleV07XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3NldFByb3Aoa2V5LCB2YWwsIHNob3VsZFJlZmxlY3QgPSB0cnVlLCBzaG91bGRVcGRhdGUgPSBmYWxzZSkge1xuICAgIGlmICh2YWwgIT09IHRoaXMuX3Byb3BzW2tleV0pIHtcbiAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIGlmICh2YWwgPT09IFJFTU9WQUwpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Byb3BzW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wcm9wc1trZXldID0gdmFsO1xuICAgICAgICBpZiAoa2V5ID09PSBcImtleVwiICYmIHRoaXMuX2FwcCkge1xuICAgICAgICAgIHRoaXMuX2FwcC5fY2VWTm9kZS5rZXkgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVcGRhdGUgJiYgdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkUmVmbGVjdCkge1xuICAgICAgICBjb25zdCBvYiA9IHRoaXMuX29iO1xuICAgICAgICBpZiAob2IpIHtcbiAgICAgICAgICB0aGlzLl9wcm9jZXNzTXV0YXRpb25zKG9iLnRha2VSZWNvcmRzKCkpO1xuICAgICAgICAgIG9iLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoaHlwaGVuYXRlKGtleSksIFwiXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGh5cGhlbmF0ZShrZXkpLCB2YWwgKyBcIlwiKTtcbiAgICAgICAgfSBlbHNlIGlmICghdmFsKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoaHlwaGVuYXRlKGtleSkpO1xuICAgICAgICB9XG4gICAgICAgIG9iICYmIG9iLm9ic2VydmUodGhpcywgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfdXBkYXRlKCkge1xuICAgIGNvbnN0IHZub2RlID0gdGhpcy5fY3JlYXRlVk5vZGUoKTtcbiAgICBpZiAodGhpcy5fYXBwKSB2bm9kZS5hcHBDb250ZXh0ID0gdGhpcy5fYXBwLl9jb250ZXh0O1xuICAgIHJlbmRlcih2bm9kZSwgdGhpcy5fcm9vdCk7XG4gIH1cbiAgX2NyZWF0ZVZOb2RlKCkge1xuICAgIGNvbnN0IGJhc2VQcm9wcyA9IHt9O1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KSB7XG4gICAgICBiYXNlUHJvcHMub25Wbm9kZU1vdW50ZWQgPSBiYXNlUHJvcHMub25Wbm9kZVVwZGF0ZWQgPSB0aGlzLl9yZW5kZXJTbG90cy5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKHRoaXMuX2RlZiwgZXh0ZW5kKGJhc2VQcm9wcywgdGhpcy5fcHJvcHMpKTtcbiAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICB2bm9kZS5jZSA9IChpbnN0YW5jZSkgPT4ge1xuICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5jZSA9IHRoaXM7XG4gICAgICAgIGluc3RhbmNlLmlzQ0UgPSB0cnVlO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIGluc3RhbmNlLmNlUmVsb2FkID0gKG5ld1N0eWxlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0eWxlcykge1xuICAgICAgICAgICAgICB0aGlzLl9zdHlsZXMuZm9yRWFjaCgocykgPT4gdGhpcy5fcm9vdC5yZW1vdmVDaGlsZChzKSk7XG4gICAgICAgICAgICAgIHRoaXMuX3N0eWxlcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYXBwbHlTdHlsZXMobmV3U3R5bGVzKTtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZXZlbnQsIGFyZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KGFyZ3NbMF0pID8gZXh0ZW5kKHsgZGV0YWlsOiBhcmdzIH0sIGFyZ3NbMF0pIDogeyBkZXRhaWw6IGFyZ3MgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIGluc3RhbmNlLmVtaXQgPSAoZXZlbnQsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBkaXNwYXRjaChldmVudCwgYXJncyk7XG4gICAgICAgICAgaWYgKGh5cGhlbmF0ZShldmVudCkgIT09IGV2ZW50KSB7XG4gICAgICAgICAgICBkaXNwYXRjaChoeXBoZW5hdGUoZXZlbnQpLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3NldFBhcmVudCgpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHZub2RlO1xuICB9XG4gIF9hcHBseVN0eWxlcyhzdHlsZXMsIG93bmVyKSB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybjtcbiAgICBpZiAob3duZXIpIHtcbiAgICAgIGlmIChvd25lciA9PT0gdGhpcy5fZGVmIHx8IHRoaXMuX3N0eWxlQ2hpbGRyZW4uaGFzKG93bmVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9zdHlsZUNoaWxkcmVuLmFkZChvd25lcik7XG4gICAgfVxuICAgIGNvbnN0IG5vbmNlID0gdGhpcy5fbm9uY2U7XG4gICAgZm9yIChsZXQgaSA9IHN0eWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgIGlmIChub25jZSkgcy5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gICAgICBzLnRleHRDb250ZW50ID0gc3R5bGVzW2ldO1xuICAgICAgdGhpcy5zaGFkb3dSb290LnByZXBlbmQocyk7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgICBpZiAob3duZXIuX19obXJJZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFN0eWxlcykgdGhpcy5fY2hpbGRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5fY2hpbGRTdHlsZXMuZ2V0KG93bmVyLl9faG1ySWQpO1xuICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICB0aGlzLl9jaGlsZFN0eWxlcy5zZXQob3duZXIuX19obXJJZCwgZW50cnkgPSBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyeS5wdXNoKHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAodGhpcy5fc3R5bGVzIHx8ICh0aGlzLl9zdHlsZXMgPSBbXSkpLnB1c2gocyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE9ubHkgY2FsbGVkIHdoZW4gc2hhZG93Um9vdCBpcyBmYWxzZVxuICAgKi9cbiAgX3BhcnNlU2xvdHMoKSB7XG4gICAgY29uc3Qgc2xvdHMgPSB0aGlzLl9zbG90cyA9IHt9O1xuICAgIGxldCBuO1xuICAgIHdoaWxlIChuID0gdGhpcy5maXJzdENoaWxkKSB7XG4gICAgICBjb25zdCBzbG90TmFtZSA9IG4ubm9kZVR5cGUgPT09IDEgJiYgbi5nZXRBdHRyaWJ1dGUoXCJzbG90XCIpIHx8IFwiZGVmYXVsdFwiO1xuICAgICAgKHNsb3RzW3Nsb3ROYW1lXSB8fCAoc2xvdHNbc2xvdE5hbWVdID0gW10pKS5wdXNoKG4pO1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZChuKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE9ubHkgY2FsbGVkIHdoZW4gc2hhZG93Um9vdCBpcyBmYWxzZVxuICAgKi9cbiAgX3JlbmRlclNsb3RzKCkge1xuICAgIGNvbnN0IG91dGxldHMgPSB0aGlzLl9nZXRTbG90cygpO1xuICAgIGNvbnN0IHNjb3BlSWQgPSB0aGlzLl9pbnN0YW5jZS50eXBlLl9fc2NvcGVJZDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dGxldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG8gPSBvdXRsZXRzW2ldO1xuICAgICAgY29uc3Qgc2xvdE5hbWUgPSBvLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgfHwgXCJkZWZhdWx0XCI7XG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fc2xvdHNbc2xvdE5hbWVdO1xuICAgICAgY29uc3QgcGFyZW50ID0gby5wYXJlbnROb2RlO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGNvbnRlbnQpIHtcbiAgICAgICAgICBpZiAoc2NvcGVJZCAmJiBuLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHNjb3BlSWQgKyBcIi1zXCI7XG4gICAgICAgICAgICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKG4sIDEpO1xuICAgICAgICAgICAgbi5zZXRBdHRyaWJ1dGUoaWQsIFwiXCIpO1xuICAgICAgICAgICAgbGV0IGNoaWxkO1xuICAgICAgICAgICAgd2hpbGUgKGNoaWxkID0gd2Fsa2VyLm5leHROb2RlKCkpIHtcbiAgICAgICAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKGlkLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShuLCBvKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKG8uZmlyc3RDaGlsZCkgcGFyZW50Lmluc2VydEJlZm9yZShvLmZpcnN0Q2hpbGQsIG8pO1xuICAgICAgfVxuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKG8pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfZ2V0U2xvdHMoKSB7XG4gICAgY29uc3Qgcm9vdHMgPSBbdGhpc107XG4gICAgaWYgKHRoaXMuX3RlbGVwb3J0VGFyZ2V0cykge1xuICAgICAgcm9vdHMucHVzaCguLi50aGlzLl90ZWxlcG9ydFRhcmdldHMpO1xuICAgIH1cbiAgICBjb25zdCBzbG90cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCByb290IG9mIHJvb3RzKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvdW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNsb3RzLmFkZChmb3VuZFtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHNsb3RzKTtcbiAgfVxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaW5qZWN0Q2hpbGRTdHlsZShjb21wKSB7XG4gICAgdGhpcy5fYXBwbHlTdHlsZXMoY29tcC5zdHlsZXMsIGNvbXApO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9iZWdpblBhdGNoKCkge1xuICAgIHRoaXMuX3BhdGNoaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9lbmRQYXRjaCgpIHtcbiAgICB0aGlzLl9wYXRjaGluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLl9kaXJ0eSAmJiB0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yZW1vdmVDaGlsZFN0eWxlKGNvbXApIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgdGhpcy5fc3R5bGVDaGlsZHJlbi5kZWxldGUoY29tcCk7XG4gICAgICBpZiAodGhpcy5fY2hpbGRTdHlsZXMgJiYgY29tcC5fX2htcklkKSB7XG4gICAgICAgIGNvbnN0IG9sZFN0eWxlcyA9IHRoaXMuX2NoaWxkU3R5bGVzLmdldChjb21wLl9faG1ySWQpO1xuICAgICAgICBpZiAob2xkU3R5bGVzKSB7XG4gICAgICAgICAgb2xkU3R5bGVzLmZvckVhY2goKHMpID0+IHRoaXMuX3Jvb3QucmVtb3ZlQ2hpbGQocykpO1xuICAgICAgICAgIG9sZFN0eWxlcy5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1c2VIb3N0KGNhbGxlcikge1xuICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBjb25zdCBlbCA9IGluc3RhbmNlICYmIGluc3RhbmNlLmNlO1xuICBpZiAoZWwpIHtcbiAgICByZXR1cm4gZWw7XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGAke2NhbGxlciB8fCBcInVzZUhvc3RcIn0gY2FsbGVkIHdpdGhvdXQgYW4gYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZS5gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuKFxuICAgICAgICBgJHtjYWxsZXIgfHwgXCJ1c2VIb3N0XCJ9IGNhbiBvbmx5IGJlIHVzZWQgaW4gY29tcG9uZW50cyBkZWZpbmVkIHZpYSBkZWZpbmVDdXN0b21FbGVtZW50LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gdXNlU2hhZG93Um9vdCgpIHtcbiAgY29uc3QgZWwgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gdXNlSG9zdChcInVzZVNoYWRvd1Jvb3RcIikgOiB1c2VIb3N0KCk7XG4gIHJldHVybiBlbCAmJiBlbC5zaGFkb3dSb290O1xufVxuXG5mdW5jdGlvbiB1c2VDc3NNb2R1bGUobmFtZSA9IFwiJHN0eWxlXCIpIHtcbiAge1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuKGB1c2VDc3NNb2R1bGUgbXVzdCBiZSBjYWxsZWQgaW5zaWRlIHNldHVwKClgKTtcbiAgICAgIHJldHVybiBFTVBUWV9PQko7XG4gICAgfVxuICAgIGNvbnN0IG1vZHVsZXMgPSBpbnN0YW5jZS50eXBlLl9fY3NzTW9kdWxlcztcbiAgICBpZiAoIW1vZHVsZXMpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybihgQ3VycmVudCBpbnN0YW5jZSBkb2VzIG5vdCBoYXZlIENTUyBtb2R1bGVzIGluamVjdGVkLmApO1xuICAgICAgcmV0dXJuIEVNUFRZX09CSjtcbiAgICB9XG4gICAgY29uc3QgbW9kID0gbW9kdWxlc1tuYW1lXTtcbiAgICBpZiAoIW1vZCkge1xuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuKGBDdXJyZW50IGluc3RhbmNlIGRvZXMgbm90IGhhdmUgQ1NTIG1vZHVsZSBuYW1lZCBcIiR7bmFtZX1cIi5gKTtcbiAgICAgIHJldHVybiBFTVBUWV9PQko7XG4gICAgfVxuICAgIHJldHVybiBtb2Q7XG4gIH1cbn1cblxuY29uc3QgcG9zaXRpb25NYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IG5ld1Bvc2l0aW9uTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5jb25zdCBtb3ZlQ2JLZXkgPSBTeW1ib2woXCJfbW92ZUNiXCIpO1xuY29uc3QgZW50ZXJDYktleSA9IFN5bWJvbChcIl9lbnRlckNiXCIpO1xuY29uc3QgZGVjb3JhdGUgPSAodCkgPT4ge1xuICBkZWxldGUgdC5wcm9wcy5tb2RlO1xuICByZXR1cm4gdDtcbn07XG5jb25zdCBUcmFuc2l0aW9uR3JvdXBJbXBsID0gLyogQF9fUFVSRV9fICovIGRlY29yYXRlKHtcbiAgbmFtZTogXCJUcmFuc2l0aW9uR3JvdXBcIixcbiAgcHJvcHM6IC8qIEBfX1BVUkVfXyAqLyBleHRlbmQoe30sIFRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMsIHtcbiAgICB0YWc6IFN0cmluZyxcbiAgICBtb3ZlQ2xhc3M6IFN0cmluZ1xuICB9KSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgY29uc3Qgc3RhdGUgPSB1c2VUcmFuc2l0aW9uU3RhdGUoKTtcbiAgICBsZXQgcHJldkNoaWxkcmVuO1xuICAgIGxldCBjaGlsZHJlbjtcbiAgICBvblVwZGF0ZWQoKCkgPT4ge1xuICAgICAgaWYgKCFwcmV2Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vdmVDbGFzcyA9IHByb3BzLm1vdmVDbGFzcyB8fCBgJHtwcm9wcy5uYW1lIHx8IFwidlwifS1tb3ZlYDtcbiAgICAgIGlmICghaGFzQ1NTVHJhbnNmb3JtKFxuICAgICAgICBwcmV2Q2hpbGRyZW5bMF0uZWwsXG4gICAgICAgIGluc3RhbmNlLnZub2RlLmVsLFxuICAgICAgICBtb3ZlQ2xhc3NcbiAgICAgICkpIHtcbiAgICAgICAgcHJldkNoaWxkcmVuID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByZXZDaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICAgIHByZXZDaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IG1vdmVkQ2hpbGRyZW4gPSBwcmV2Q2hpbGRyZW4uZmlsdGVyKGFwcGx5VHJhbnNsYXRpb24pO1xuICAgICAgZm9yY2VSZWZsb3coaW5zdGFuY2Uudm5vZGUuZWwpO1xuICAgICAgbW92ZWRDaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gYy5lbDtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBlbC5zdHlsZTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBzdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBcIlwiO1xuICAgICAgICBjb25zdCBjYiA9IGVsW21vdmVDYktleV0gPSAoZSkgPT4ge1xuICAgICAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWUgfHwgZS5wcm9wZXJ0eU5hbWUuZW5kc1dpdGgoXCJ0cmFuc2Zvcm1cIikpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIGNiKTtcbiAgICAgICAgICAgIGVsW21vdmVDYktleV0gPSBudWxsO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgY2IpO1xuICAgICAgfSk7XG4gICAgICBwcmV2Q2hpbGRyZW4gPSBbXTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XG4gICAgICBjb25zdCBjc3NUcmFuc2l0aW9uUHJvcHMgPSByZXNvbHZlVHJhbnNpdGlvblByb3BzKHJhd1Byb3BzKTtcbiAgICAgIGxldCB0YWcgPSByYXdQcm9wcy50YWcgfHwgRnJhZ21lbnQ7XG4gICAgICBwcmV2Q2hpbGRyZW4gPSBbXTtcbiAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICBpZiAoY2hpbGQuZWwgJiYgY2hpbGQuZWwgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICBwcmV2Q2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICBzZXRUcmFuc2l0aW9uSG9va3MoXG4gICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICByZXNvbHZlVHJhbnNpdGlvbkhvb2tzKFxuICAgICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICAgIGNzc1RyYW5zaXRpb25Qcm9wcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KGNoaWxkLCB7XG4gICAgICAgICAgICAgIGxlZnQ6IGNoaWxkLmVsLm9mZnNldExlZnQsXG4gICAgICAgICAgICAgIHRvcDogY2hpbGQuZWwub2Zmc2V0VG9wXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuID0gc2xvdHMuZGVmYXVsdCA/IGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihzbG90cy5kZWZhdWx0KCkpIDogW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChjaGlsZC5rZXkgIT0gbnVsbCkge1xuICAgICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyhcbiAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhjaGlsZCwgY3NzVHJhbnNpdGlvblByb3BzLCBzdGF0ZSwgaW5zdGFuY2UpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNoaWxkLnR5cGUgIT09IFRleHQpIHtcbiAgICAgICAgICB3YXJuKGA8VHJhbnNpdGlvbkdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlVk5vZGUodGFnLCBudWxsLCBjaGlsZHJlbik7XG4gICAgfTtcbiAgfVxufSk7XG5jb25zdCBUcmFuc2l0aW9uR3JvdXAgPSBUcmFuc2l0aW9uR3JvdXBJbXBsO1xuZnVuY3Rpb24gY2FsbFBlbmRpbmdDYnMoYykge1xuICBjb25zdCBlbCA9IGMuZWw7XG4gIGlmIChlbFttb3ZlQ2JLZXldKSB7XG4gICAgZWxbbW92ZUNiS2V5XSgpO1xuICB9XG4gIGlmIChlbFtlbnRlckNiS2V5XSkge1xuICAgIGVsW2VudGVyQ2JLZXldKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlY29yZFBvc2l0aW9uKGMpIHtcbiAgbmV3UG9zaXRpb25NYXAuc2V0KGMsIHtcbiAgICBsZWZ0OiBjLmVsLm9mZnNldExlZnQsXG4gICAgdG9wOiBjLmVsLm9mZnNldFRvcFxuICB9KTtcbn1cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24oYykge1xuICBjb25zdCBvbGRQb3MgPSBwb3NpdGlvbk1hcC5nZXQoYyk7XG4gIGNvbnN0IG5ld1BvcyA9IG5ld1Bvc2l0aW9uTWFwLmdldChjKTtcbiAgY29uc3QgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICBjb25zdCBkeSA9IG9sZFBvcy50b3AgLSBuZXdQb3MudG9wO1xuICBpZiAoZHggfHwgZHkpIHtcbiAgICBjb25zdCBzID0gYy5lbC5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMud2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2R4fXB4LCR7ZHl9cHgpYDtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9IFwiMHNcIjtcbiAgICByZXR1cm4gYztcbiAgfVxufVxuZnVuY3Rpb24gaGFzQ1NTVHJhbnNmb3JtKGVsLCByb290LCBtb3ZlQ2xhc3MpIHtcbiAgY29uc3QgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcbiAgY29uc3QgX3Z0YyA9IGVsW3Z0Y0tleV07XG4gIGlmIChfdnRjKSB7XG4gICAgX3Z0Yy5mb3JFYWNoKChjbHMpID0+IHtcbiAgICAgIGNscy5zcGxpdCgvXFxzKy8pLmZvckVhY2goKGMpID0+IGMgJiYgY2xvbmUuY2xhc3NMaXN0LnJlbW92ZShjKSk7XG4gICAgfSk7XG4gIH1cbiAgbW92ZUNsYXNzLnNwbGl0KC9cXHMrLykuZm9yRWFjaCgoYykgPT4gYyAmJiBjbG9uZS5jbGFzc0xpc3QuYWRkKGMpKTtcbiAgY2xvbmUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBjb25zdCBjb250YWluZXIgPSByb290Lm5vZGVUeXBlID09PSAxID8gcm9vdCA6IHJvb3QucGFyZW50Tm9kZTtcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgY29uc3QgeyBoYXNUcmFuc2Zvcm0gfSA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcbiAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgcmV0dXJuIGhhc1RyYW5zZm9ybTtcbn1cblxuY29uc3QgZ2V0TW9kZWxBc3NpZ25lciA9ICh2bm9kZSkgPT4ge1xuICBjb25zdCBmbiA9IHZub2RlLnByb3BzW1wib25VcGRhdGU6bW9kZWxWYWx1ZVwiXSB8fCBmYWxzZTtcbiAgcmV0dXJuIGlzQXJyYXkoZm4pID8gKHZhbHVlKSA9PiBpbnZva2VBcnJheUZucyhmbiwgdmFsdWUpIDogZm47XG59O1xuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0KGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQoZSkge1xuICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgaWYgKHRhcmdldC5jb21wb3NpbmcpIHtcbiAgICB0YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIikpO1xuICB9XG59XG5jb25zdCBhc3NpZ25LZXkgPSBTeW1ib2woXCJfYXNzaWduXCIpO1xuZnVuY3Rpb24gY2FzdFZhbHVlKHZhbHVlLCB0cmltLCBudW1iZXIpIHtcbiAgaWYgKHRyaW0pIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICBpZiAobnVtYmVyKSB2YWx1ZSA9IGxvb3NlVG9OdW1iZXIodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5jb25zdCB2TW9kZWxUZXh0ID0ge1xuICBjcmVhdGVkKGVsLCB7IG1vZGlmaWVyczogeyBsYXp5LCB0cmltLCBudW1iZXIgfSB9LCB2bm9kZSkge1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgICBjb25zdCBjYXN0VG9OdW1iZXIgPSBudW1iZXIgfHwgdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMudHlwZSA9PT0gXCJudW1iZXJcIjtcbiAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBsYXp5ID8gXCJjaGFuZ2VcIiA6IFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgIGlmIChlLnRhcmdldC5jb21wb3NpbmcpIHJldHVybjtcbiAgICAgIGVsW2Fzc2lnbktleV0oY2FzdFZhbHVlKGVsLnZhbHVlLCB0cmltLCBjYXN0VG9OdW1iZXIpKTtcbiAgICB9KTtcbiAgICBpZiAodHJpbSB8fCBjYXN0VG9OdW1iZXIpIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgZWwudmFsdWUgPSBjYXN0VmFsdWUoZWwudmFsdWUsIHRyaW0sIGNhc3RUb051bWJlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFsYXp5KSB7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBcImNvbXBvc2l0aW9uc3RhcnRcIiwgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIFwiY29tcG9zaXRpb25lbmRcIiwgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBcImNoYW5nZVwiLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICB9XG4gIH0sXG4gIC8vIHNldCB2YWx1ZSBvbiBtb3VudGVkIHNvIGl0J3MgYWZ0ZXIgbWluL21heCBmb3IgdHlwZT1cInJhbmdlXCJcbiAgbW91bnRlZChlbCwgeyB2YWx1ZSB9KSB7XG4gICAgZWwudmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBiZWZvcmVVcGRhdGUoZWwsIHsgdmFsdWUsIG9sZFZhbHVlLCBtb2RpZmllcnM6IHsgbGF6eSwgdHJpbSwgbnVtYmVyIH0gfSwgdm5vZGUpIHtcbiAgICBlbFthc3NpZ25LZXldID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XG4gICAgaWYgKGVsLmNvbXBvc2luZykgcmV0dXJuO1xuICAgIGNvbnN0IGVsVmFsdWUgPSAobnVtYmVyIHx8IGVsLnR5cGUgPT09IFwibnVtYmVyXCIpICYmICEvXjBcXGQvLnRlc3QoZWwudmFsdWUpID8gbG9vc2VUb051bWJlcihlbC52YWx1ZSkgOiBlbC52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gICAgaWYgKGVsVmFsdWUgPT09IG5ld1ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlbCAmJiBlbC50eXBlICE9PSBcInJhbmdlXCIpIHtcbiAgICAgIGlmIChsYXp5ICYmIHZhbHVlID09PSBvbGRWYWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHJpbSAmJiBlbC52YWx1ZS50cmltKCkgPT09IG5ld1ZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgZWwudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxufTtcbmNvbnN0IHZNb2RlbENoZWNrYm94ID0ge1xuICAvLyAjNDA5NiBhcnJheSBjaGVja2JveGVzIG5lZWQgdG8gYmUgZGVlcCB0cmF2ZXJzZWRcbiAgZGVlcDogdHJ1ZSxcbiAgY3JlYXRlZChlbCwgXywgdm5vZGUpIHtcbiAgICBlbFthc3NpZ25LZXldID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IGVsLl9tb2RlbFZhbHVlO1xuICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gZ2V0VmFsdWUoZWwpO1xuICAgICAgY29uc3QgY2hlY2tlZCA9IGVsLmNoZWNrZWQ7XG4gICAgICBjb25zdCBhc3NpZ24gPSBlbFthc3NpZ25LZXldO1xuICAgICAgaWYgKGlzQXJyYXkobW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBsb29zZUluZGV4T2YobW9kZWxWYWx1ZSwgZWxlbWVudFZhbHVlKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBpbmRleCAhPT0gLTE7XG4gICAgICAgIGlmIChjaGVja2VkICYmICFmb3VuZCkge1xuICAgICAgICAgIGFzc2lnbihtb2RlbFZhbHVlLmNvbmNhdChlbGVtZW50VmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmICghY2hlY2tlZCAmJiBmb3VuZCkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gWy4uLm1vZGVsVmFsdWVdO1xuICAgICAgICAgIGZpbHRlcmVkLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgYXNzaWduKGZpbHRlcmVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1NldChtb2RlbFZhbHVlKSkge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgU2V0KG1vZGVsVmFsdWUpO1xuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgIGNsb25lZC5hZGQoZWxlbWVudFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbG9uZWQuZGVsZXRlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzaWduKGNsb25lZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NpZ24oZ2V0Q2hlY2tib3hWYWx1ZShlbCwgY2hlY2tlZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAvLyBzZXQgaW5pdGlhbCBjaGVja2VkIG9uIG1vdW50IHRvIHdhaXQgZm9yIHRydWUtdmFsdWUvZmFsc2UtdmFsdWVcbiAgbW91bnRlZDogc2V0Q2hlY2tlZCxcbiAgYmVmb3JlVXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgICBzZXRDaGVja2VkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gIH1cbn07XG5mdW5jdGlvbiBzZXRDaGVja2VkKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSB9LCB2bm9kZSkge1xuICBlbC5fbW9kZWxWYWx1ZSA9IHZhbHVlO1xuICBsZXQgY2hlY2tlZDtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgY2hlY2tlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgdm5vZGUucHJvcHMudmFsdWUpID4gLTE7XG4gIH0gZWxzZSBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgY2hlY2tlZCA9IHZhbHVlLmhhcyh2bm9kZS5wcm9wcy52YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHZhbHVlID09PSBvbGRWYWx1ZSkgcmV0dXJuO1xuICAgIGNoZWNrZWQgPSBsb29zZUVxdWFsKHZhbHVlLCBnZXRDaGVja2JveFZhbHVlKGVsLCB0cnVlKSk7XG4gIH1cbiAgaWYgKGVsLmNoZWNrZWQgIT09IGNoZWNrZWQpIHtcbiAgICBlbC5jaGVja2VkID0gY2hlY2tlZDtcbiAgfVxufVxuY29uc3Qgdk1vZGVsUmFkaW8gPSB7XG4gIGNyZWF0ZWQoZWwsIHsgdmFsdWUgfSwgdm5vZGUpIHtcbiAgICBlbC5jaGVja2VkID0gbG9vc2VFcXVhbCh2YWx1ZSwgdm5vZGUucHJvcHMudmFsdWUpO1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICBlbFthc3NpZ25LZXldKGdldFZhbHVlKGVsKSk7XG4gICAgfSk7XG4gIH0sXG4gIGJlZm9yZVVwZGF0ZShlbCwgeyB2YWx1ZSwgb2xkVmFsdWUgfSwgdm5vZGUpIHtcbiAgICBlbFthc3NpZ25LZXldID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XG4gICAgaWYgKHZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgZWwuY2hlY2tlZCA9IGxvb3NlRXF1YWwodmFsdWUsIHZub2RlLnByb3BzLnZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCB2TW9kZWxTZWxlY3QgPSB7XG4gIC8vIDxzZWxlY3QgbXVsdGlwbGU+IHZhbHVlIG5lZWQgdG8gYmUgZGVlcCB0cmF2ZXJzZWRcbiAgZGVlcDogdHJ1ZSxcbiAgY3JlYXRlZChlbCwgeyB2YWx1ZSwgbW9kaWZpZXJzOiB7IG51bWJlciB9IH0sIHZub2RlKSB7XG4gICAgY29uc3QgaXNTZXRNb2RlbCA9IGlzU2V0KHZhbHVlKTtcbiAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlbC5vcHRpb25zLCAobykgPT4gby5zZWxlY3RlZCkubWFwKFxuICAgICAgICAobykgPT4gbnVtYmVyID8gbG9vc2VUb051bWJlcihnZXRWYWx1ZShvKSkgOiBnZXRWYWx1ZShvKVxuICAgICAgKTtcbiAgICAgIGVsW2Fzc2lnbktleV0oXG4gICAgICAgIGVsLm11bHRpcGxlID8gaXNTZXRNb2RlbCA/IG5ldyBTZXQoc2VsZWN0ZWRWYWwpIDogc2VsZWN0ZWRWYWwgOiBzZWxlY3RlZFZhbFswXVxuICAgICAgKTtcbiAgICAgIGVsLl9hc3NpZ25pbmcgPSB0cnVlO1xuICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBlbC5fYXNzaWduaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlbFthc3NpZ25LZXldID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XG4gIH0sXG4gIC8vIHNldCB2YWx1ZSBpbiBtb3VudGVkICYgdXBkYXRlZCBiZWNhdXNlIDxzZWxlY3Q+IHJlbGllcyBvbiBpdHMgY2hpbGRyZW5cbiAgLy8gPG9wdGlvbj5zLlxuICBtb3VudGVkKGVsLCB7IHZhbHVlIH0pIHtcbiAgICBzZXRTZWxlY3RlZChlbCwgdmFsdWUpO1xuICB9LFxuICBiZWZvcmVVcGRhdGUoZWwsIF9iaW5kaW5nLCB2bm9kZSkge1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgfSxcbiAgdXBkYXRlZChlbCwgeyB2YWx1ZSB9KSB7XG4gICAgaWYgKCFlbC5fYXNzaWduaW5nKSB7XG4gICAgICBzZXRTZWxlY3RlZChlbCwgdmFsdWUpO1xuICAgIH1cbiAgfVxufTtcbmZ1bmN0aW9uIHNldFNlbGVjdGVkKGVsLCB2YWx1ZSkge1xuICBjb25zdCBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGNvbnN0IGlzQXJyYXlWYWx1ZSA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNNdWx0aXBsZSAmJiAhaXNBcnJheVZhbHVlICYmICFpc1NldCh2YWx1ZSkpIHtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4oXG4gICAgICBgPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPiBleHBlY3RzIGFuIEFycmF5IG9yIFNldCB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgJHtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKX0uYFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAobGV0IGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xuICAgIGNvbnN0IG9wdGlvblZhbHVlID0gZ2V0VmFsdWUob3B0aW9uKTtcbiAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKGlzQXJyYXlWYWx1ZSkge1xuICAgICAgICBjb25zdCBvcHRpb25UeXBlID0gdHlwZW9mIG9wdGlvblZhbHVlO1xuICAgICAgICBpZiAob3B0aW9uVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBvcHRpb25UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdmFsdWUuc29tZSgodikgPT4gU3RyaW5nKHYpID09PSBTdHJpbmcob3B0aW9uVmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIG9wdGlvblZhbHVlKSA+IC0xO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZS5oYXMob3B0aW9uVmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcbiAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSBlbC5zZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc011bHRpcGxlICYmIGVsLnNlbGVjdGVkSW5kZXggIT09IC0xKSB7XG4gICAgZWwuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG59XG5mdW5jdGlvbiBnZXRWYWx1ZShlbCkge1xuICByZXR1cm4gXCJfdmFsdWVcIiBpbiBlbCA/IGVsLl92YWx1ZSA6IGVsLnZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0Q2hlY2tib3hWYWx1ZShlbCwgY2hlY2tlZCkge1xuICBjb25zdCBrZXkgPSBjaGVja2VkID8gXCJfdHJ1ZVZhbHVlXCIgOiBcIl9mYWxzZVZhbHVlXCI7XG4gIHJldHVybiBrZXkgaW4gZWwgPyBlbFtrZXldIDogY2hlY2tlZDtcbn1cbmNvbnN0IHZNb2RlbER5bmFtaWMgPSB7XG4gIGNyZWF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgY2FsbE1vZGVsSG9vayhlbCwgYmluZGluZywgdm5vZGUsIG51bGwsIFwiY3JlYXRlZFwiKTtcbiAgfSxcbiAgbW91bnRlZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgbnVsbCwgXCJtb3VudGVkXCIpO1xuICB9LFxuICBiZWZvcmVVcGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlLCBwcmV2Vk5vZGUpIHtcbiAgICBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgcHJldlZOb2RlLCBcImJlZm9yZVVwZGF0ZVwiKTtcbiAgfSxcbiAgdXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSkge1xuICAgIGNhbGxNb2RlbEhvb2soZWwsIGJpbmRpbmcsIHZub2RlLCBwcmV2Vk5vZGUsIFwidXBkYXRlZFwiKTtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVEeW5hbWljTW9kZWwodGFnTmFtZSwgdHlwZSkge1xuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICBjYXNlIFwiU0VMRUNUXCI6XG4gICAgICByZXR1cm4gdk1vZGVsU2VsZWN0O1xuICAgIGNhc2UgXCJURVhUQVJFQVwiOlxuICAgICAgcmV0dXJuIHZNb2RlbFRleHQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjpcbiAgICAgICAgICByZXR1cm4gdk1vZGVsQ2hlY2tib3g7XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOlxuICAgICAgICAgIHJldHVybiB2TW9kZWxSYWRpbztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdk1vZGVsVGV4dDtcbiAgICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY2FsbE1vZGVsSG9vayhlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSwgaG9vaykge1xuICBjb25zdCBtb2RlbFRvVXNlID0gcmVzb2x2ZUR5bmFtaWNNb2RlbChcbiAgICBlbC50YWdOYW1lLFxuICAgIHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLnR5cGVcbiAgKTtcbiAgY29uc3QgZm4gPSBtb2RlbFRvVXNlW2hvb2tdO1xuICBmbiAmJiBmbihlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSk7XG59XG5mdW5jdGlvbiBpbml0Vk1vZGVsRm9yU1NSKCkge1xuICB2TW9kZWxUZXh0LmdldFNTUlByb3BzID0gKHsgdmFsdWUgfSkgPT4gKHsgdmFsdWUgfSk7XG4gIHZNb2RlbFJhZGlvLmdldFNTUlByb3BzID0gKHsgdmFsdWUgfSwgdm5vZGUpID0+IHtcbiAgICBpZiAodm5vZGUucHJvcHMgJiYgbG9vc2VFcXVhbCh2bm9kZS5wcm9wcy52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XG4gICAgfVxuICB9O1xuICB2TW9kZWxDaGVja2JveC5nZXRTU1JQcm9wcyA9ICh7IHZhbHVlIH0sIHZub2RlKSA9PiB7XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAodm5vZGUucHJvcHMgJiYgbG9vc2VJbmRleE9mKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSkgPiAtMSkge1xuICAgICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2bm9kZS5wcm9wcyAmJiB2YWx1ZS5oYXModm5vZGUucHJvcHMudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IGNoZWNrZWQ6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XG4gICAgfVxuICB9O1xuICB2TW9kZWxEeW5hbWljLmdldFNTUlByb3BzID0gKGJpbmRpbmcsIHZub2RlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2bm9kZS50eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsVG9Vc2UgPSByZXNvbHZlRHluYW1pY01vZGVsKFxuICAgICAgLy8gcmVzb2x2ZUR5bmFtaWNNb2RlbCBleHBlY3RzIGFuIHVwcGVyY2FzZSB0YWcgbmFtZSwgYnV0IHZub2RlLnR5cGUgaXMgbG93ZXJjYXNlXG4gICAgICB2bm9kZS50eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgICB2bm9kZS5wcm9wcyAmJiB2bm9kZS5wcm9wcy50eXBlXG4gICAgKTtcbiAgICBpZiAobW9kZWxUb1VzZS5nZXRTU1JQcm9wcykge1xuICAgICAgcmV0dXJuIG1vZGVsVG9Vc2UuZ2V0U1NSUHJvcHMoYmluZGluZywgdm5vZGUpO1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3Qgc3lzdGVtTW9kaWZpZXJzID0gW1wiY3RybFwiLCBcInNoaWZ0XCIsIFwiYWx0XCIsIFwibWV0YVwiXTtcbmNvbnN0IG1vZGlmaWVyR3VhcmRzID0ge1xuICBzdG9wOiAoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSxcbiAgcHJldmVudDogKGUpID0+IGUucHJldmVudERlZmF1bHQoKSxcbiAgc2VsZjogKGUpID0+IGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQsXG4gIGN0cmw6IChlKSA9PiAhZS5jdHJsS2V5LFxuICBzaGlmdDogKGUpID0+ICFlLnNoaWZ0S2V5LFxuICBhbHQ6IChlKSA9PiAhZS5hbHRLZXksXG4gIG1ldGE6IChlKSA9PiAhZS5tZXRhS2V5LFxuICBsZWZ0OiAoZSkgPT4gXCJidXR0b25cIiBpbiBlICYmIGUuYnV0dG9uICE9PSAwLFxuICBtaWRkbGU6IChlKSA9PiBcImJ1dHRvblwiIGluIGUgJiYgZS5idXR0b24gIT09IDEsXG4gIHJpZ2h0OiAoZSkgPT4gXCJidXR0b25cIiBpbiBlICYmIGUuYnV0dG9uICE9PSAyLFxuICBleGFjdDogKGUsIG1vZGlmaWVycykgPT4gc3lzdGVtTW9kaWZpZXJzLnNvbWUoKG0pID0+IGVbYCR7bX1LZXlgXSAmJiAhbW9kaWZpZXJzLmluY2x1ZGVzKG0pKVxufTtcbmNvbnN0IHdpdGhNb2RpZmllcnMgPSAoZm4sIG1vZGlmaWVycykgPT4ge1xuICBjb25zdCBjYWNoZSA9IGZuLl93aXRoTW9kcyB8fCAoZm4uX3dpdGhNb2RzID0ge30pO1xuICBjb25zdCBjYWNoZUtleSA9IG1vZGlmaWVycy5qb2luKFwiLlwiKTtcbiAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XSB8fCAoY2FjaGVbY2FjaGVLZXldID0gKChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBndWFyZCA9IG1vZGlmaWVyR3VhcmRzW21vZGlmaWVyc1tpXV07XG4gICAgICBpZiAoZ3VhcmQgJiYgZ3VhcmQoZXZlbnQsIG1vZGlmaWVycykpIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGZuKGV2ZW50LCAuLi5hcmdzKTtcbiAgfSkpO1xufTtcbmNvbnN0IGtleU5hbWVzID0ge1xuICBlc2M6IFwiZXNjYXBlXCIsXG4gIHNwYWNlOiBcIiBcIixcbiAgdXA6IFwiYXJyb3ctdXBcIixcbiAgbGVmdDogXCJhcnJvdy1sZWZ0XCIsXG4gIHJpZ2h0OiBcImFycm93LXJpZ2h0XCIsXG4gIGRvd246IFwiYXJyb3ctZG93blwiLFxuICBkZWxldGU6IFwiYmFja3NwYWNlXCJcbn07XG5jb25zdCB3aXRoS2V5cyA9IChmbiwgbW9kaWZpZXJzKSA9PiB7XG4gIGNvbnN0IGNhY2hlID0gZm4uX3dpdGhLZXlzIHx8IChmbi5fd2l0aEtleXMgPSB7fSk7XG4gIGNvbnN0IGNhY2hlS2V5ID0gbW9kaWZpZXJzLmpvaW4oXCIuXCIpO1xuICByZXR1cm4gY2FjaGVbY2FjaGVLZXldIHx8IChjYWNoZVtjYWNoZUtleV0gPSAoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCEoXCJrZXlcIiBpbiBldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRLZXkgPSBoeXBoZW5hdGUoZXZlbnQua2V5KTtcbiAgICBpZiAobW9kaWZpZXJzLnNvbWUoXG4gICAgICAoaykgPT4gayA9PT0gZXZlbnRLZXkgfHwga2V5TmFtZXNba10gPT09IGV2ZW50S2V5XG4gICAgKSkge1xuICAgICAgcmV0dXJuIGZuKGV2ZW50KTtcbiAgICB9XG4gIH0pKTtcbn07XG5cbmNvbnN0IHJlbmRlcmVyT3B0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBleHRlbmQoeyBwYXRjaFByb3AgfSwgbm9kZU9wcyk7XG5sZXQgcmVuZGVyZXI7XG5sZXQgZW5hYmxlZEh5ZHJhdGlvbiA9IGZhbHNlO1xuZnVuY3Rpb24gZW5zdXJlUmVuZGVyZXIoKSB7XG4gIHJldHVybiByZW5kZXJlciB8fCAocmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihyZW5kZXJlck9wdGlvbnMpKTtcbn1cbmZ1bmN0aW9uIGVuc3VyZUh5ZHJhdGlvblJlbmRlcmVyKCkge1xuICByZW5kZXJlciA9IGVuYWJsZWRIeWRyYXRpb24gPyByZW5kZXJlciA6IGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyKHJlbmRlcmVyT3B0aW9ucyk7XG4gIGVuYWJsZWRIeWRyYXRpb24gPSB0cnVlO1xuICByZXR1cm4gcmVuZGVyZXI7XG59XG5jb25zdCByZW5kZXIgPSAoKC4uLmFyZ3MpID0+IHtcbiAgZW5zdXJlUmVuZGVyZXIoKS5yZW5kZXIoLi4uYXJncyk7XG59KTtcbmNvbnN0IGh5ZHJhdGUgPSAoKC4uLmFyZ3MpID0+IHtcbiAgZW5zdXJlSHlkcmF0aW9uUmVuZGVyZXIoKS5oeWRyYXRlKC4uLmFyZ3MpO1xufSk7XG5jb25zdCBjcmVhdGVBcHAgPSAoKC4uLmFyZ3MpID0+IHtcbiAgY29uc3QgYXBwID0gZW5zdXJlUmVuZGVyZXIoKS5jcmVhdGVBcHAoLi4uYXJncyk7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgaW5qZWN0TmF0aXZlVGFnQ2hlY2soYXBwKTtcbiAgICBpbmplY3RDb21waWxlck9wdGlvbnNDaGVjayhhcHApO1xuICB9XG4gIGNvbnN0IHsgbW91bnQgfSA9IGFwcDtcbiAgYXBwLm1vdW50ID0gKGNvbnRhaW5lck9yU2VsZWN0b3IpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBub3JtYWxpemVDb250YWluZXIoY29udGFpbmVyT3JTZWxlY3Rvcik7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICBjb25zdCBjb21wb25lbnQgPSBhcHAuX2NvbXBvbmVudDtcbiAgICBpZiAoIWlzRnVuY3Rpb24oY29tcG9uZW50KSAmJiAhY29tcG9uZW50LnJlbmRlciAmJiAhY29tcG9uZW50LnRlbXBsYXRlKSB7XG4gICAgICBjb21wb25lbnQudGVtcGxhdGUgPSBjb250YWluZXIuaW5uZXJIVE1MO1xuICAgIH1cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICBjb250YWluZXIudGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBwcm94eSA9IG1vdW50KGNvbnRhaW5lciwgZmFsc2UsIHJlc29sdmVSb290TmFtZXNwYWNlKGNvbnRhaW5lcikpO1xuICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlQXR0cmlidXRlKFwidi1jbG9ha1wiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXYtYXBwXCIsIFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcHJveHk7XG4gIH07XG4gIHJldHVybiBhcHA7XG59KTtcbmNvbnN0IGNyZWF0ZVNTUkFwcCA9ICgoLi4uYXJncykgPT4ge1xuICBjb25zdCBhcHAgPSBlbnN1cmVIeWRyYXRpb25SZW5kZXJlcigpLmNyZWF0ZUFwcCguLi5hcmdzKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBpbmplY3ROYXRpdmVUYWdDaGVjayhhcHApO1xuICAgIGluamVjdENvbXBpbGVyT3B0aW9uc0NoZWNrKGFwcCk7XG4gIH1cbiAgY29uc3QgeyBtb3VudCB9ID0gYXBwO1xuICBhcHAubW91bnQgPSAoY29udGFpbmVyT3JTZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5vcm1hbGl6ZUNvbnRhaW5lcihjb250YWluZXJPclNlbGVjdG9yKTtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gbW91bnQoY29udGFpbmVyLCB0cnVlLCByZXNvbHZlUm9vdE5hbWVzcGFjZShjb250YWluZXIpKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBhcHA7XG59KTtcbmZ1bmN0aW9uIHJlc29sdmVSb290TmFtZXNwYWNlKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkge1xuICAgIHJldHVybiBcInN2Z1wiO1xuICB9XG4gIGlmICh0eXBlb2YgTWF0aE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIGNvbnRhaW5lciBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJtYXRobWxcIjtcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0TmF0aXZlVGFnQ2hlY2soYXBwKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcHAuY29uZmlnLCBcImlzTmF0aXZlVGFnXCIsIHtcbiAgICB2YWx1ZTogKHRhZykgPT4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkdUYWcodGFnKSB8fCBpc01hdGhNTFRhZyh0YWcpLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbn1cbmZ1bmN0aW9uIGluamVjdENvbXBpbGVyT3B0aW9uc0NoZWNrKGFwcCkge1xuICBpZiAoaXNSdW50aW1lT25seSgpKSB7XG4gICAgY29uc3QgaXNDdXN0b21FbGVtZW50ID0gYXBwLmNvbmZpZy5pc0N1c3RvbUVsZW1lbnQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwcC5jb25maWcsIFwiaXNDdXN0b21FbGVtZW50XCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGlzQ3VzdG9tRWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBzZXQoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgYFRoZSBcXGBpc0N1c3RvbUVsZW1lbnRcXGAgY29uZmlnIG9wdGlvbiBpcyBkZXByZWNhdGVkLiBVc2UgXFxgY29tcGlsZXJPcHRpb25zLmlzQ3VzdG9tRWxlbWVudFxcYCBpbnN0ZWFkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSBhcHAuY29uZmlnLmNvbXBpbGVyT3B0aW9ucztcbiAgICBjb25zdCBtc2cgPSBgVGhlIFxcYGNvbXBpbGVyT3B0aW9uc1xcYCBjb25maWcgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgYSBidWlsZCBvZiBWdWUuanMgdGhhdCBpbmNsdWRlcyB0aGUgcnVudGltZSBjb21waWxlciAoYWthIFwiZnVsbCBidWlsZFwiKS4gU2luY2UgeW91IGFyZSB1c2luZyB0aGUgcnVudGltZS1vbmx5IGJ1aWxkLCBcXGBjb21waWxlck9wdGlvbnNcXGAgbXVzdCBiZSBwYXNzZWQgdG8gXFxgQHZ1ZS9jb21waWxlci1kb21cXGAgaW4gdGhlIGJ1aWxkIHNldHVwIGluc3RlYWQuXG4tIEZvciB2dWUtbG9hZGVyOiBwYXNzIGl0IHZpYSB2dWUtbG9hZGVyJ3MgXFxgY29tcGlsZXJPcHRpb25zXFxgIGxvYWRlciBvcHRpb24uXG4tIEZvciB2dWUtY2xpOiBzZWUgaHR0cHM6Ly9jbGkudnVlanMub3JnL2d1aWRlL3dlYnBhY2suaHRtbCNtb2RpZnlpbmctb3B0aW9ucy1vZi1hLWxvYWRlclxuLSBGb3Igdml0ZTogcGFzcyBpdCB2aWEgQHZpdGVqcy9wbHVnaW4tdnVlIG9wdGlvbnMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUtcGx1Z2luLXZ1ZS90cmVlL21haW4vcGFja2FnZXMvcGx1Z2luLXZ1ZSNleGFtcGxlLWZvci1wYXNzaW5nLW9wdGlvbnMtdG8tdnVlY29tcGlsZXItc2ZjYDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwLmNvbmZpZywgXCJjb21waWxlck9wdGlvbnNcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgIHJldHVybiBjb21waWxlck9wdGlvbnM7XG4gICAgICB9LFxuICAgICAgc2V0KCkge1xuICAgICAgICB3YXJuKG1zZyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKGlzU3RyaW5nKGNvbnRhaW5lcikpIHtcbiAgICBjb25zdCByZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIXJlcykge1xuICAgICAgd2FybihcbiAgICAgICAgYEZhaWxlZCB0byBtb3VudCBhcHA6IG1vdW50IHRhcmdldCBzZWxlY3RvciBcIiR7Y29udGFpbmVyfVwiIHJldHVybmVkIG51bGwuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3aW5kb3cuU2hhZG93Um9vdCAmJiBjb250YWluZXIgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCAmJiBjb250YWluZXIubW9kZSA9PT0gXCJjbG9zZWRcIikge1xuICAgIHdhcm4oXG4gICAgICBgbW91bnRpbmcgb24gYSBTaGFkb3dSb290IHdpdGggXFxge21vZGU6IFwiY2xvc2VkXCJ9XFxgIG1heSBsZWFkIHRvIHVucHJlZGljdGFibGUgYnVnc2BcbiAgICApO1xuICB9XG4gIHJldHVybiBjb250YWluZXI7XG59XG5sZXQgc3NyRGlyZWN0aXZlSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmNvbnN0IGluaXREaXJlY3RpdmVzRm9yU1NSID0gKCkgPT4ge1xuICBpZiAoIXNzckRpcmVjdGl2ZUluaXRpYWxpemVkKSB7XG4gICAgc3NyRGlyZWN0aXZlSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIGluaXRWTW9kZWxGb3JTU1IoKTtcbiAgICBpbml0VlNob3dGb3JTU1IoKTtcbiAgfVxufSA7XG5cbmV4cG9ydCB7IFRyYW5zaXRpb24sIFRyYW5zaXRpb25Hcm91cCwgVnVlRWxlbWVudCwgY3JlYXRlQXBwLCBjcmVhdGVTU1JBcHAsIGRlZmluZUN1c3RvbUVsZW1lbnQsIGRlZmluZVNTUkN1c3RvbUVsZW1lbnQsIGh5ZHJhdGUsIGluaXREaXJlY3RpdmVzRm9yU1NSLCByZW5kZXIsIHVzZUNzc01vZHVsZSwgdXNlQ3NzVmFycywgdXNlSG9zdCwgdXNlU2hhZG93Um9vdCwgdk1vZGVsQ2hlY2tib3gsIHZNb2RlbER5bmFtaWMsIHZNb2RlbFJhZGlvLCB2TW9kZWxTZWxlY3QsIHZNb2RlbFRleHQsIHZTaG93LCB3aXRoS2V5cywgd2l0aE1vZGlmaWVycyB9O1xuIiwiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBub3JtYWxpemVDbGFzcyBhcyBfbm9ybWFsaXplQ2xhc3MsIGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlLCByZW5kZXJMaXN0IGFzIF9yZW5kZXJMaXN0LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jaywgdG9EaXNwbGF5U3RyaW5nIGFzIF90b0Rpc3BsYXlTdHJpbmcsIHZTaG93IGFzIF92U2hvdywgd2l0aERpcmVjdGl2ZXMgYXMgX3dpdGhEaXJlY3RpdmVzIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSB7IGNsYXNzOiBcInJlbGF0aXZlIGZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIHctZnVsbCBnYXAtMlwiIH1cbmNvbnN0IF9ob2lzdGVkXzIgPSB7IGNsYXNzOiBcInJlbGF0aXZlIGZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIHctZnVsbCBnYXAtMlwiIH1cbmNvbnN0IF9ob2lzdGVkXzMgPSBbXCJvbkNsaWNrXCJdXG5cbmltcG9ydCB7IHJlZiB9IGZyb20gXCJ2dWVcIlxuaW1wb3J0IHR5cGUgeyBQbHVnaW5JbmZvIH0gZnJvbSBcIkAvdHlwZXMvcGx1Z2luXCJcbmludGVyZmFjZSBQcm9wcyB7XG4gICAgcGx1Z2luTGlzdDogUGx1Z2luSW5mb1tdXG4gICAgcGx1Z2luVGFnczpzdHJpbmdbXVxuICAgIGFjdGl2ZUNhdGVnb3J5OiBzdHJpbmdcbn1cblxuXG5leHBvcnQgZGVmYXVsdCAvKkBfX1BVUkVfXyovX2RlZmluZUNvbXBvbmVudCh7XG4gIF9fbmFtZTogJ1Rvb2xiYXInLFxuICBwcm9wczoge1xuICAgIHBsdWdpbkxpc3Q6IHt9LFxuICAgIHBsdWdpblRhZ3M6IHt9LFxuICAgIGFjdGl2ZUNhdGVnb3J5OiB7fVxuICB9LFxuICBlbWl0czogW1widXBkYXRlLWFjdGl2ZS1jYXRlZ29yeVwiXSxcbiAgc2V0dXAoX19wcm9wczogYW55KSB7XG5cbmNvbnN0IHByb3BzID0gX19wcm9wc1xuXG5cbmNvbnN0IHNob3dDYXRlZ29yaWVzID0gcmVmKGZhbHNlKVxuLy8gY29uc3QgY2F0ZWdvcmllcyA9IGNvbXB1dGVkKCgpID0+IHtcbi8vICAgICBsZXQgdGFnc0FycmF5OiBzdHJpbmdbXSA9IFtdXG4vLyAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMucGx1Z2luTGlzdCkpIHtcbi8vICAgICAgICAgcHJvcHMucGx1Z2luTGlzdC5mb3JFYWNoKChvYmopID0+IHtcbi8vICAgICAgICAgICAgIGlmIChvYmoudGFncyAmJiB0eXBlb2Ygb2JqLnRhZ3MgPT09IFwic3RyaW5nXCIpIHtcbi8vICAgICAgICAgICAgICAgICBsZXQgdGFncyA9IG9iai50YWdzLnNwbGl0KFwiLFwiKS5tYXAoKHRhZykgPT4gdGFnLnRyaW0oKSlcbi8vICAgICAgICAgICAgICAgICB0YWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gdGFnICE9PSBcIlwiKSAvLyDov4fmu6TmjonnqbrlrZfnrKbkuLJcbi8vICAgICAgICAgICAgICAgICBpZiAodGFncy5sZW5ndGggPiAwKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgIHRhZ3NBcnJheS5wdXNoKHRhZ3NbMF0pXG4vLyAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICB9KVxuLy8gICAgIH1cbi8vICAgICByZXR1cm4gdGFnc0FycmF5XG4vLyB9KVxuXG4vLyBjb25zdCB1bmlxdWVDYXRlZ29yaWVzID0gY29tcHV0ZWQoKCkgPT4ge1xuLy8gICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoY2F0ZWdvcmllcy52YWx1ZSkpXG4vLyB9KVxuY29uc3QgSXNTaG93Q2F0ZWdvcmllcyA9ICgpID0+IHtcbiAgICBzaG93Q2F0ZWdvcmllcy52YWx1ZSA9ICFzaG93Q2F0ZWdvcmllcy52YWx1ZVxufVxuXG5yZXR1cm4gKF9jdHg6IGFueSxfY2FjaGU6IGFueSkgPT4ge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImRpdlwiLCBfaG9pc3RlZF8xLCBbXG4gICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBib3JkZXItMiBzaGFkb3ctbWQganVzdGlmeS1jZW50ZXIgcHgtNCBweS0yIGZvbnQtc2FucyB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCByb3VuZGVkLWxnIGJnLW11dGVkLTIwMCBkYXJrOmJnLW11dGVkLTgwMCB0ZXh0LW11dGVkLTUwMCBob3ZlcjpiZy1tdXRlZC0zMDAgZGFyazpob3ZlcjpiZy1tdXRlZC03MDAgZGFyazpob3Zlcjp0ZXh0LW11dGVkLTIwMCB0dy1hY2Nlc3NpYmlsaXR5XCIsIFxuICAgICAgICAgICAgICAgIF9fcHJvcHMuYWN0aXZlQ2F0ZWdvcnkgPT09ICdhbGwnXG4gICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1wcmltYXJ5LTUwMCBiZy1tdXRlZC01MCBkYXJrOmJnLW11dGVkLTcwMCdcbiAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLXRyYW5zcGFyZW50ICdcbiAgICAgICAgICAgIF0pLFxuICAgICAgb25DbGljazogX2NhY2hlWzBdIHx8IChfY2FjaGVbMF0gPSAoJGV2ZW50OiBhbnkpID0+IChfY3R4LiRlbWl0KCd1cGRhdGUtYWN0aXZlLWNhdGVnb3J5JywgJ2FsbCcpKSlcbiAgICB9LCBcIiBBbGwgXCIsIDIpLFxuICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgY2xhc3M6IFwiaW5saW5lLWZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBzaGFkb3ctbWQganVzdGlmeS1jZW50ZXIgcHgtNCBweS0yIGZvbnQtc2FucyB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCByb3VuZGVkLWxnIGJnLW11dGVkLTIwMCBkYXJrOmJnLW11dGVkLTgwMCB0ZXh0LW11dGVkLTUwMCBob3ZlcjpiZy1tdXRlZC0zMDAgZGFyazpob3ZlcjpiZy1tdXRlZC03MDAgZGFyazpob3Zlcjp0ZXh0LW11dGVkLTIwMCB0dy1hY2Nlc3NpYmlsaXR5XCIsXG4gICAgICBvbkNsaWNrOiBJc1Nob3dDYXRlZ29yaWVzXG4gICAgfSwgXCIg5oyJ5YiG57G7562b6YCJIOKHoyBcIiksXG4gICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMiwgW1xuICAgICAgKF9vcGVuQmxvY2sodHJ1ZSksIF9jcmVhdGVFbGVtZW50QmxvY2soX0ZyYWdtZW50LCBudWxsLCBfcmVuZGVyTGlzdChwcm9wcy5wbHVnaW5UYWdzLCAoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzOiBcInBsdWdpbi1pdGVtXCIsXG4gICAgICAgICAga2V5OiBjYXRlZ29yeVxuICAgICAgICB9LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImgtNiBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLTIgc2hhZG93LW1kIGp1c3RpZnktY2VudGVyIGZsZXgtMSBweC00IHB5LTIgZm9udC1zYW5zIHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIHJvdW5kZWQtbGcgYmctbXV0ZWQtMjAwIGRhcms6YmctbXV0ZWQtODAwIHRleHQtbXV0ZWQtNTAwIGhvdmVyOmJnLW11dGVkLTMwMCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMCBkYXJrOmhvdmVyOnRleHQtbXV0ZWQtMjAwIHR3LWFjY2Vzc2liaWxpdHlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLmFjdGl2ZUNhdGVnb3J5ID09PSBjYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1wcmltYXJ5LTUwMCBiZy1tdXRlZC01MCBkYXJrOmJnLW11dGVkLTcwMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItdHJhbnNwYXJlbnQnXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgb25DbGljazogXG4gICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eC4kZW1pdCgndXBkYXRlLWFjdGl2ZS1jYXRlZ29yeScsIGNhdGVnb3J5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICB9LCBfdG9EaXNwbGF5U3RyaW5nKGNhdGVnb3J5KSwgMTEsIF9ob2lzdGVkXzMpXG4gICAgICAgIF0pKVxuICAgICAgfSksIDEyOCkpXG4gICAgXSwgNTEyKSwgW1xuICAgICAgW192U2hvdywgc2hvd0NhdGVnb3JpZXMudmFsdWVdXG4gICAgXSlcbiAgXSkpXG59XG59XG5cbn0pIiwiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyB1bnJlZiBhcyBfdW5yZWYsIHRvRGlzcGxheVN0cmluZyBhcyBfdG9EaXNwbGF5U3RyaW5nLCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrLCB2U2hvdyBhcyBfdlNob3csIHdpdGhEaXJlY3RpdmVzIGFzIF93aXRoRGlyZWN0aXZlcywgbm9ybWFsaXplU3R5bGUgYXMgX25vcm1hbGl6ZVN0eWxlLCB3aXRoTW9kaWZpZXJzIGFzIF93aXRoTW9kaWZpZXJzLCBjcmVhdGVDb21tZW50Vk5vZGUgYXMgX2NyZWF0ZUNvbW1lbnRWTm9kZSwgY3JlYXRlVGV4dFZOb2RlIGFzIF9jcmVhdGVUZXh0Vk5vZGUgfSBmcm9tIFwidnVlXCJcblxuY29uc3QgX2hvaXN0ZWRfMSA9IHsgY2xhc3M6IFwicmVsYXRpdmVcIiB9XG5jb25zdCBfaG9pc3RlZF8yID0geyBjbGFzczogXCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGgtZnVsbCBnYXAtNCBwLTZcIiB9XG5jb25zdCBfaG9pc3RlZF8zID0geyBjbGFzczogXCJyZWxhdGl2ZSB3LWZ1bGwgc3BhY2UteS0yXCIgfVxuY29uc3QgX2hvaXN0ZWRfNCA9IHsgY2xhc3M6IFwicmVsYXRpdmVcIiB9XG5jb25zdCBfaG9pc3RlZF81ID0geyBjbGFzczogXCJhYnNvbHV0ZSB6LTEgdG9wLTMgbGVmdC0zIGlubGluZS1ibG9jayBmb250LXNhbnMgdGV4dC14cyBweS0xLjUgcHgtMyBtLTEgcm91bmRlZC1sZyBiZy1wcmltYXJ5LTUwMCB0ZXh0LXdoaXRlIHNoYWRvdy14bCBzaGFkb3ctcHJpbWFyeS01MDAvMjBcIiB9XG5jb25zdCBfaG9pc3RlZF82ID0ge1xuICB0b29sdGlwOiBcIuWumOaWueWVhuWfjuaPkuS7tlwiLFxuICBjbGFzczogXCJ0ZXh0LXdoaXRlIGFic29sdXRlIHJpZ2h0LTIgdG9wLTIgei0xMFwiXG59XG5jb25zdCBfaG9pc3RlZF83ID0ge1xuICB0b29sdGlwOiBcIuekvuWMuuS4k+S+m+aPkuS7tlwiLFxuICBjbGFzczogXCJhYnNvbHV0ZSByaWdodC0yIHRvcC0yIHotMTBcIlxufVxuY29uc3QgX2hvaXN0ZWRfOCA9IFtcImRhdGEtbmFtZVwiXVxuY29uc3QgX2hvaXN0ZWRfOSA9IFtcImRhdGEtbmFtZVwiLCBcImFsdFwiLCBcInNyY1wiXVxuY29uc3QgX2hvaXN0ZWRfMTAgPSBbXCJzcmNcIl1cbmNvbnN0IF9ob2lzdGVkXzExID0geyBjbGFzczogXCJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBoLTEwIG92ZXJmbG93LWhpZGRlbiBwbHVnaW5fbmFtZVwiIH1cbmNvbnN0IF9ob2lzdGVkXzEyID0ge1xuICBcImRhdGEtcGFnZWZpbmQtbWV0YVwiOiBcInRpdGxlXCIsXG4gIGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIHRleHQtbGcgZm9udC1tZWRpdW0gbGVhZGluZy02IHBsdWdpbl9uYW1lIGZvbnQtaGVhZGluZyB0ZXh0LW11dGVkLTgwMCBkYXJrOnRleHQtd2hpdGVcIlxufVxuY29uc3QgX2hvaXN0ZWRfMTMgPSBbXCJocmVmXCJdXG5jb25zdCBfaG9pc3RlZF8xNCA9IHsgY2xhc3M6IFwiLW10LTIgbWwtMiBweC0yIHJvdW5kZWQgdGV4dC1tdXRlZC0xMDAgYmctZ3JlZW4tNjAwIHRleHQteHNcIiB9XG5jb25zdCBfaG9pc3RlZF8xNSA9IHsgY2xhc3M6IFwiLW10LTIgdGV4dC1vcmFuZ2UtNTAwIG1sLTIgdGV4dC1sZyBmb250LXNlcmlmIGZvbnQtYm9sZCBpdGFsaWNcIiB9XG5jb25zdCBfaG9pc3RlZF8xNiA9IHsgY2xhc3M6IFwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGxlYWRpbmctNiB0ZXh0LW11dGVkLTYwMCBkYXJrOnRleHQtbXV0ZWQtNDAwXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTcgPSBbXCJzcmNcIl1cbmNvbnN0IF9ob2lzdGVkXzE4ID0gW1wic3JjXCJdXG5jb25zdCBfaG9pc3RlZF8xOSA9IFtcImhyZWZcIl1cbmNvbnN0IF9ob2lzdGVkXzIwID0gW1wiaHJlZlwiXVxuY29uc3QgX2hvaXN0ZWRfMjEgPSB7IGNsYXNzOiBcInBsdWdpbl9kZXNjIHRleHQtYmFzZSBtdC1hdXRvIG1pbi1oLVszcmVtXSB0ZXh0LW11dGVkLTYwMCBkYXJrOnRleHQtbXV0ZWQtNDAwIGxlYWRpbmctNlwiIH1cbmNvbnN0IF9ob2lzdGVkXzIyID0geyBjbGFzczogXCJ3LWZ1bGwgbXQtYXV0byBzcGFjZS15LTZcIiB9XG5jb25zdCBfaG9pc3RlZF8yMyA9IHsgY2xhc3M6IFwicmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCB3LWZ1bGxcIiB9XG5jb25zdCBfaG9pc3RlZF8yNCA9IFtcInNyY1wiLCBcIm9uZXJyb3JcIl1cbmNvbnN0IF9ob2lzdGVkXzI1ID0gW1wiaHJlZlwiXVxuY29uc3QgX2hvaXN0ZWRfMjYgPSB7IGNsYXNzOiBcInBsLTJcIiB9XG5jb25zdCBfaG9pc3RlZF8yNyA9IFtcInRvb2x0aXBcIl1cbmNvbnN0IF9ob2lzdGVkXzI4ID0geyBjbGFzczogXCJmb250LXNhbnMgdGV4dC1zbSB0ZXh0LW11dGVkLTQwMFwiIH1cbmNvbnN0IF9ob2lzdGVkXzI5ID0geyBjbGFzczogXCJibG9jayBtbC1hdXRvIGZvbnQtc2FucyB0ZXh0LXNtIHRleHQtbXV0ZWQtNDAwXCIgfVxuY29uc3QgX2hvaXN0ZWRfMzAgPSBbXCJ0b29sdGlwXCJdXG5jb25zdCBfaG9pc3RlZF8zMSA9IHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCIsXG4gIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbn1cbmNvbnN0IF9ob2lzdGVkXzMyID0gW1wiZmlsbFwiXVxuXG5pbXBvcnQgeyByZWYgfSBmcm9tIFwidnVlXCJcbmltcG9ydCB0eXBlIHsgUGx1Z2luSW5mbyB9IGZyb20gXCJAL3R5cGVzL3BsdWdpblwiXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIlxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICBhcHA6IEFwcFxuICAgIHBsdWdpbkluZm86IFBsdWdpbkluZm9cbiAgICBpc0xvZ2luOiBib29sZWFuXG59XG5cbmV4cG9ydCBkZWZhdWx0IC8qQF9fUFVSRV9fKi9fZGVmaW5lQ29tcG9uZW50KHtcbiAgX19uYW1lOiAnUGx1Z2luQ2FyZCcsXG4gIHByb3BzOiB7XG4gICAgYXBwOiB7fSxcbiAgICBwbHVnaW5JbmZvOiB7fSxcbiAgICBpc0xvZ2luOiB7IHR5cGU6IEJvb2xlYW4gfVxuICB9LFxuICBlbWl0czogW1wiZG93bmxvYWQtdXBkYXRlLXBsdWdpblwiXSxcbiAgc2V0dXAoX19wcm9wczogYW55KSB7XG5cbmNvbnN0IHByb3AgPSBfX3Byb3BzXG5cbmNvbnN0IGlzVXNlckxvZ2luID0gcHJvcC5pc0xvZ2luXG5cbmNvbnN0IHNob3dJbWFnZSA9IHJlZihmYWxzZSlcbmNvbnN0IFBsdWdpblN0YXR1cyA9IHJlZihcIlwiKVxuY29uc3Qgc3RhdHVzQ29sb3IgPSByZWYoXCJyZ2JhKDI1NSwgNTEsIDY4LCAwLjgpXCIpXG5cblxuZnVuY3Rpb24gZ2V0VXNlcm5hbWVGcm9tUmVwbygpIHtcbiAgICBpZiAoXG4gICAgICAgIHByb3AucGx1Z2luSW5mby5hdXRob3JBdmF0YXIgJiZcbiAgICAgICAgcHJvcC5wbHVnaW5JbmZvLmF1dGhvckF2YXRhci5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAgIC8vIGxldCByZWdleCA9IC9eKFteXFwvXSopXFwvLztcbiAgICAgICAgLy8gbGV0IHVzZXJuYW1lTWF0Y2ggPSByZXBvLm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgLy8gcmV0dXJuIHVzZXJuYW1lTWF0Y2ggPyB1c2VybmFtZU1hdGNoWzFdIDogbnVsbDtcblxuICAgICAgICByZXR1cm4gcHJvcC5wbHVnaW5JbmZvLmF1dGhvckF2YXRhclxuICAgIH0gZWxzZSByZXR1cm4gZ2V0RGVmYXVsdEF2YXRhKHByb3AucGx1Z2luSW5mby5hdXRob3IpXG59XG5cbi8vIGxldCB1cmwgPSBwcm9wLnBsdWdpbkluZm8udXJsID8/ICcnO1xuLy8gbGV0IHJlZ2V4ID0gL2h0dHBzOlxcL1xcL2dpdGh1YlxcLmNvbVxcLyguKilcXC8vO1xuXG4vLyBsZXQgdXNlcm5hbWVNYXRjaCA9IHVybC5tYXRjaChyZWdleCk7XG4vLyBsZXQgdXNlcm5hbWUgPSB1c2VybmFtZU1hdGNoID8gdXNlcm5hbWVNYXRjaFsxXSA6IG51bGw7XG5cbmxldCB0YWdzOiBzdHJpbmdbXSA9IFtdXG5pZiAocHJvcC5wbHVnaW5JbmZvLnRhZ3MgJiYgcHJvcC5wbHVnaW5JbmZvLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgIHRhZ3MgPSBwcm9wLnBsdWdpbkluZm8udGFncy5zcGxpdChcIixcIilcbn1cblxuLy8gZnVuY3Rpb24gZm9ybWF0RGF0ZSh0aW1lc3RhbXA6IHN0cmluZykge1xuLy8gXHRpZiAodGltZXN0YW1wKSB7XG4vLyBcdFx0Ly8g5Yib5bu6IERhdGUg5a+56LGh5bm25qC85byP5YyW5pel5pyfXG4vLyBcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XG4vLyBcdFx0Y29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbi8vIFx0XHRjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4vLyBcdFx0Y29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCk7XG4vLyBcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGAke21vbnRofeaciCR7ZGF5fSwgJHt5ZWFyfWA7XG4vLyBcdFx0cmV0dXJuIGZvcm1hdHRlZERhdGU7XG4vLyBcdH0gZWxzZSByZXR1cm4gJyAtIC0gLSc7XG4vLyB9XG5mdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtOiBudW1iZXIpIHtcbiAgICAvLyDovazmjaLmlbDlrZdcbiAgICBpZiAobnVtID49IDEwMDAwMDApIHtcbiAgICAgICAgcmV0dXJuIChudW0gLyAxMDAwMDAwKS50b0ZpeGVkKDApICsgXCJNXCJcbiAgICB9IGVsc2UgaWYgKG51bSA+PSAxMDAwKSB7XG4gICAgICAgIHJldHVybiAobnVtIC8gMTAwMCkudG9GaXhlZCgwKSArIFwiS1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bS50b1N0cmluZygpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaWZmRGF5cyh0aW1lc3RhbXA6IHN0cmluZykge1xuICAgIC8vIOiuoeeul+i3neemu+S7iuWkqeWkmuWwkeWkqe+8jOW5tui9rOWMluS4uuaciOS7veWSjOW5tOS7vVxuICAgIGlmICh0aW1lc3RhbXApIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcClcbiAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICAgIGNvbnN0IG9uZURheSA9IDI0ICogNjAgKiA2MCAqIDEwMDAgLy8g5LiA5aSp55qE5q+r56eS5pWwXG4gICAgICAgIGNvbnN0IGRheXNEaWZmID0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgIE1hdGguYWJzKCh0b2RheS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKSkgLyBvbmVEYXkpXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgbW9udGhzRGlmZiA9IE1hdGgucm91bmQoZGF5c0RpZmYgLyAzMClcbiAgICAgICAgY29uc3QgeWVhcnNEaWZmID0gTWF0aC5yb3VuZChkYXlzRGlmZiAvIDM2NSlcblxuICAgICAgICAvLyDmoLnmja7ml7bpl7Tlt67lhrPlrprmmL7npLrmloflrZdcbiAgICAgICAgaWYgKGRheXNEaWZmIDw9IDMwKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZGF5c0RpZmZ95aSp5YmNYFxuICAgICAgICB9IGVsc2UgaWYgKG1vbnRoc0RpZmYgPD0gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHttb250aHNEaWZmfeaciOWJjWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt5ZWFyc0RpZmZ95bm05YmNYFxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGDmnKrnn6VgXG4gICAgfVxufVxuY29uc3QgZ2V0VG9vbHRpcCA9ICgpID0+IHtcbiAgICBpZiAoUGx1Z2luU3RhdHVzLnZhbHVlID09IFwi5pyq5ZCv55SoXCIpIHJldHVybiBcIuW9k+WJjeaPkuS7tuacquWQr+eUqO+8jOeCueWHu+WQr+eUqFwiXG4gICAgaWYgKFBsdWdpblN0YXR1cy52YWx1ZSA9PSBcIuW3suWQr+eUqFwiKSByZXR1cm4gXCLlvZPliY3mj5Lku7blt7LlkK/liqjvvIzngrnlh7vnpoHnlKhcIlxuICAgIGVsc2UgcmV0dXJuIFwi5pyq5oiQ5Yqf5ZCv55So44CC6K+35p+l55yL5o6n5Yi25Y+w6ZSZ6K+v5L+h5oGv44CCXCJcbn1cbmNvbnN0IGVuYWJsZVBsdWdpbiA9IGFzeW5jIChpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKFBsdWdpblN0YXR1cy52YWx1ZSA9PSBcIuW3suWQr+eUqFwiKSB7XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBhd2FpdCBwcm9wLmFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW5BbmRTYXZlKGlkKVxuICAgICAgICBQbHVnaW5TdGF0dXMudmFsdWUgPSBcIuacquWQr+eUqFwiXG4gICAgICAgIHN0YXR1c0NvbG9yLnZhbHVlID0gXCJyZ2JhKDI1NSwgNTEsIDY4LCAwLjgpXCJcbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGlmIChhd2FpdCBwcm9wLmFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUoaWQpKSB7XG4gICAgICAgICAgICBQbHVnaW5TdGF0dXMudmFsdWUgPSBcIuW3suWQr+eUqFwiXG4gICAgICAgICAgICBzdGF0dXNDb2xvci52YWx1ZSA9IFwiIzJhYTMzMFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBQbHVnaW5TdGF0dXMudmFsdWUgPSBcIuacquaIkOWKn1wiXG4gICAgICAgIH1cbiAgICB9XG59XG4vL0B0cy1pZ25vcmVcbmlmIChcbiAgICBBcnJheS5mcm9tKHByb3AuYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMpLmluZGV4T2YocHJvcC5wbHVnaW5JbmZvLmlkKSAhPSAtMSAmJlxuICAgIHByb3AucGx1Z2luSW5mby5pc0luc3RhbGxlZFxuKSB7XG4gICAgUGx1Z2luU3RhdHVzLnZhbHVlID0gXCLlt7LlkK/nlKhcIlxuICAgIHN0YXR1c0NvbG9yLnZhbHVlID0gXCIjMmFhMzMwXCJcbn1cbi8vQHRzLWlnbm9yZVxuaWYgKFxuICAgIEFycmF5LmZyb20ocHJvcC5hcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucykuaW5kZXhPZihwcm9wLnBsdWdpbkluZm8uaWQpID09IC0xICYmXG4gICAgcHJvcC5wbHVnaW5JbmZvLmlzSW5zdGFsbGVkXG4pIHtcbiAgICBQbHVnaW5TdGF0dXMudmFsdWUgPSBcIuacquWQr+eUqFwiXG4gICAgc3RhdHVzQ29sb3IudmFsdWUgPSBcInJnYmEoMjU1LCA1MSwgNjgsIDAuOClcIlxufVxuLy/lkI3np7DnmoTpppblrZfmr43lpKflhplcbmZ1bmN0aW9uIGdldEluaXRpYWxzKG5hbWU6IHN0cmluZykge1xuICAgIGxldCBpbml0aWFscyA9IG5hbWUubWF0Y2goL1xcYlxcdy9nKSB8fCBbXVxuICAgIHJldHVybiBpbml0aWFscy5qb2luKFwiXCIpLnRvVXBwZXJDYXNlKClcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRBdmF0YShuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgdXJsID0gXCJcIlxuICAgIGlmIChuYW1lKSB7XG4gICAgICAgIC8v55So5oi36aaW5a2X5aS05YOPXG4gICAgICAgIGNvbnN0IGZpcnN0Q2hhciA9IGdldEluaXRpYWxzKG5hbWUpXG4gICAgICAgIGlmICgvXlthLXpBLVpdKyQvLnRlc3QoZmlyc3RDaGFyKSkge1xuICAgICAgICAgICAgdXJsID0gYGh0dHBzOi8vZHVtbXlpbWFnZS5jb20vMTAweDEwMC81NTUvZmZmJnRleHQ9JHtmaXJzdENoYXIudG9VcHBlckNhc2UoKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly9kdW1teWltYWdlLmNvbS8xMDB4MTAwLzU1NS9mZmZmJnRleHQ9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgZmlyc3RDaGFyXG4gICAgICAgICAgICApfWBcbiAgICAgICAgfVxuICAgIH0gZWxzZSB1cmwgPSBgaHR0cHM6Ly9jZG4ucGttZXIuY24vY292ZXJzL2xvZ28ucG5nIW5vbWFya2BcbiAgICByZXR1cm4gdXJsXG59XG5cbmNvbnN0IGdldFJhZG9tSW1hZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcGttZXIuY24vaW1nL2NvdmVyLyR7TWF0aC5mbG9vcihcbiAgICAgICAgTWF0aC5yYW5kb20oKSAqIDExXG4gICAgKX0uanBnYFxuXG4gICAgcmV0dXJuIGBiYWNrZ3JvdW5kLWltYWdlOnVybCgke3VybH0pO2Bcbn1cblxuY29uc3QgaGFuZGxlT3BlblNldHRpbmdzID0gKCkgPT4ge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHByb3AuYXBwLnNldHRpbmcub3BlbigpXG4gICAgLy9AdHMtaWdub3JlXG4gICAgcHJvcC5hcHAuc2V0dGluZy5vcGVuVGFiQnlJZChcInBrbWVyXCIpXG59XG5cbnJldHVybiAoX2N0eDogYW55LF9jYWNoZTogYW55KSA9PiB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIF9ob2lzdGVkXzEsIFtcbiAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIsIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMywgW1xuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzQsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCBfaG9pc3RlZF81LCBfdG9EaXNwbGF5U3RyaW5nKF91bnJlZih0YWdzKVswXSksIDEpLFxuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwidmlld1wiLCBfaG9pc3RlZF82LCBbLi4uKF9jYWNoZVs2XSB8fCAoX2NhY2hlWzZdID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBcImZpbGwtY3VycmVudCB3LTUgaC01XCIsXG4gICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsXG4gICAgICAgICAgICAgIFwiZGF0YS12LWZjOGExNTkwXCI6IFwiXCIsXG4gICAgICAgICAgICAgIFwiZGF0YS1pY29uXCI6IFwiYXJjdGljb25zOm9ic2lkaWFuXCJcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgZDogXCJNMTcuMTMzIDQwLjkxMmMzLjE1NS02LjM5NCAzLjA3MS0xMC45ODIgMS43MjItMTQuMjRjLTEuMjI5LTMuMDE0LTMuNTI3LTQuOTEzLTUuMzMzLTYuMDk1YTIuMyAyLjMgMCAwIDEtLjE2Ny41MDNMOS4xMSAzMC41MjZjLS40NC45NzUtLjIzNyAyLjEyLjUxMiAyLjg4NWw2Ljc4NCA2Ljk4Yy4yMTQuMjEzLjQ2Ni4zOS43MjYuNTJabTguNTgxLTEyLjk3M2MuODQ3LjA4MyAxLjY3NS4yNyAyLjQ5NC41NjdjMi41ODcuOTY4IDQuOTQyIDMuMTQ2IDYuODg3IDcuMzQzYy4xNC0uMjQyLjI3OS0uNDc0LjQyOC0uNjk4YTExNCAxMTQgMCAwIDAgMy40MTUtNS4zODhhMS4zIDEuMyAwIDAgMC0uMDkzLTEuNDYxYTI4LjIgMjguMiAwIDAgMS0zLjMyMi01LjQ0NWMtLjg5NC0yLjE0LTEuMDI0LTUuNDgxLTEuMDMzLTcuMWMwLS42MTUtLjE5Ni0xLjIyLS41NzctMS43MDRsLTYuNzQ3LTguNTYxbC0uMTEyLS4xNGMuNDkzIDEuNjI5LjQ2NSAyLjkzMS4xNTggNC4xMTNjLS4yOCAxLjA5OS0uOCAyLjA5NC0xLjM1IDMuMTQ2Yy0uMTg1LjM1NC0uMzcyLjcxNy0uNTQ4IDEuMDg5YTEzIDEzIDAgMCAwLTEuNDcgNS4zOThjLS4wOTQgMi4yNTIuMzYyIDUuMDcyIDEuODYgOC44NHpcIlxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgZDogXCJNMjUuNzA0IDI3LjkzOWMtMS40OTgtMy43Ny0xLjk1NC02LjU5LTEuODYtOC44NDFjLjA5Mi0yLjIzNC43NDQtMy45MSAxLjQ3LTUuMzk4bC41NTgtMS4wOWMuNTQtMS4wNSAxLjA1Mi0yLjA0NyAxLjM0LTMuMTQ1YTcuMyA3LjMgMCAwIDAtLjE1OC00LjExM2EyLjYwNiAyLjYwNiAwIDAgMC0zLjY2Ny0uMTg2bC04LjAyMiA3LjIxMmMtLjQ1LjQwMy0uNzQ2Ljk0OS0uODM4IDEuNTQ1TDEzLjU1IDIwLjRjMCAuMDY1LS4wMTkuMTIxLS4wMjguMTg2YzEuODA2IDEuMTczIDQuMDk1IDMuMDcyIDUuMzMzIDYuMDc4Yy4yNDIuNTk1LjQ0NyAxLjIxOS41OTUgMS44OThhMTguNiAxOC42IDAgMCAxIDYuMjU0LS42MzN6XCJcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWpvaW5cIjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgIGQ6IFwiTTI5LjkxIDQzLjQwNmMxLjczMi40NzUgMy40NzItLjkxMiAzLjcxNC0yLjY5OWMuMTk4LTEuNjk1LjctMy4zNCAxLjQ4LTQuODU4Yy0xLjk1NC00LjE5Ny00LjMwOS02LjM3NS02Ljg4Ny03LjM0M2MtMi43NDUtMS4wMjMtNS43MzMtLjY4LTguNzY3LjA1NmMuNjggMy4wOC4yOCA3LjExLTIuMzA4IDEyLjM1Yy4yODkuMTQ5LjYxNS4yMzIuOTQuMjZsNC4wODYuMzA3YzIuMjE1LjE1OSA1LjUxOSAxLjMwMyA3Ljc0MyAxLjkyN1pcIlxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSwgLTEpXG4gICAgICAgICAgXSkpXSwgNTEyKSwgW1xuICAgICAgICAgICAgW192U2hvdywgX19wcm9wcy5wbHVnaW5JbmZvLnNvdXJjZSA9PSAnb2ZmaWNpYWwnXVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwidmlld1wiLCBfaG9pc3RlZF83LCBbLi4uKF9jYWNoZVs3XSB8fCAoX2NhY2hlWzddID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBcImZpbGwtY3VycmVudCB3LTUgaC01XCIsXG4gICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgIHZlcnNpb246IFwiMS4xXCIsXG4gICAgICAgICAgICAgIFwieG1sbnM6eGxpbmtcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICAgICAgICAgIFwieG1sbnM6c3ZnanNcIjogXCJodHRwOi8vc3ZnanMuY29tL3N2Z2pzXCIsXG4gICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDUxMiA1MTJcIixcbiAgICAgICAgICAgICAgXCJ4bWw6c3BhY2VcIjogXCJwcmVzZXJ2ZVwiXG4gICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJnXCIsIG51bGwsIFtcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICBkOiBcIk0zOTUuNjMxIDk4LjgzN0MzNTguNzgzIDQ1Ljg2NyAzMDkuMTk1IDE2LjY5NiAyNTYgMTYuNjk2UzE1My4yMTcgNDUuODY3IDExNi4zNjkgOTguODM3Yy0zNS41NjUgNTEuMTI0LTU1LjE1MSAxMTguNzk3LTU1LjE1MSAxOTAuNTU0IDAgMTEzLjU0IDg3LjM3OSAyMDUuOTEzIDE5NC43ODMgMjA1LjkxM3MxOTQuNzgzLTkyLjM3MyAxOTQuNzgzLTIwNS45MTNjLS4wMDEtNzEuNzU2LTE5LjU4OC0xMzkuNDMtNTUuMTUzLTE5MC41NTR6XCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZToge30sXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIiNmZmMxNzBcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIlwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgZDogXCJNMjU2IDQ5NS4zMDRjMTA3LjQwMyAwIDE5NC43ODMtOTIuMzczIDE5NC43ODMtMjA1LjkxMyAwLTcxLjc1Ny0xOS41ODYtMTM5LjQzLTU1LjE1MS0xOTAuNTU0QzM1OC43ODMgNDUuODY3IDMwOS4xOTUgMTYuNjk2IDI1NiAxNi42OTZcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiB7fSxcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwiI2UxYTA1YVwiLFxuICAgICAgICAgICAgICAgICAgXCJkYXRhLW9yaWdpbmFsXCI6IFwiI2ZmZDZhMFwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiXCJcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICBkOiBcIk0wIDEyOGg1NS42NTJ2MzMuMzkxSDB6XCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZToge30sXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIiNhMGJkZDRcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIlwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgZDogXCJNMTMuMDUzIDUxLjk0aDU1LjY1djMzLjM5MWgtNTUuNjV6XCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZToge30sXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwicm90YXRlKC0xNjAuNTI3IDQwLjg3OCA2OC42MzYpXCIsXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIiNhMGJkZDRcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIlwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgZDogXCJNNDU2LjM0OCAxMjhINTEydjMzLjM5MWgtNTUuNjUyelwiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjYTBiZGQ0XCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogXCJcIlxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgIGQ6IFwiTTQ1NC40MTEgNDAuODA3aDMzLjM5MXY1NS42NWgtMzMuMzkxelwiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBcInJvdGF0ZSgtMTA5LjQ2OSA0NzEuMTExIDY4LjYzNilcIixcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwiI2EwYmRkNFwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiXCJcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICBkOiBcIm0xODcuNzE5IDI3Ny4zMTUgMTQuOTQ5LTI5Ljg5Ni00Ny41OTgtMjEuMTU0LTkzLjY1OSA1MS4wODVjLS4xMjQgNC0uMTk0IDguMDEzLS4xOTQgMTIuMDQxIDAgOC41NjQuNTA1IDE3LjAwNSAxLjQ3MSAyNS4yOThsOTMuODkyLTUxLjIxNCAzMS4xMzkgMTMuODR6TTQ1MC42MyAyNzguOTk3bC0xMDUuNTg3LTUyLjc5NC04OS40NjMgNDQuNzMxLTIyLjM2OS05Ljk0Mi0xNC45NDggMjkuODk2IDM4LjE1NSAxNi45NTggODguNjI1LTQ0LjMxIDEwNC4xNjYgNTIuMDgzYTIxOC41OTIgMjE4LjU5MiAwIDAgMCAxLjU3My0yNi4yMjhjLjAwMS0zLjQ3Ni0uMDU5LTYuOTM4LS4xNTItMTAuMzk0elwiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjZjhmOGY4XCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogXCJcIlxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgIGQ6IFwibTQ1MC42MyAyNzguOTk3LTEwNS41ODctNTIuNzk0LTg5LjQ2MyA0NC43MzEuODM5IDM2LjkxMyA4OC42MjQtNDQuMzEgMTA0LjE2NiA1Mi4wODNhMjE4LjU5MiAyMTguNTkyIDAgMCAwIDEuNTczLTI2LjIyOCAzODIuMDcgMzgyLjA3IDAgMCAwLS4xNTItMTAuMzk1elwiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjZmVmNWVhXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogXCJcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICBdKSldLCA1MTIpLCBbXG4gICAgICAgICAgICBbX3ZTaG93LCBfX3Byb3BzLnBsdWdpbkluZm8uc291cmNlID09ICdjb21tdW5pdHknXVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIFwiZGF0YS1uYW1lXCI6IF9fcHJvcHMucGx1Z2luSW5mby5iYW5uZXIgPyAnJyA6IF9fcHJvcHMucGx1Z2luSW5mby5uYW1lLFxuICAgICAgICAgICAgY2xhc3M6IFwibm9pbWcgaC00MCBtZDpoLTUyXCIsXG4gICAgICAgICAgICBzdHlsZTogX25vcm1hbGl6ZVN0eWxlKGdldFJhZG9tSW1hZ2UoKSlcbiAgICAgICAgICB9LCBbXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgXCJkYXRhLW5hbWVcIjogX19wcm9wcy5wbHVnaW5JbmZvLm5hbWUsXG4gICAgICAgICAgICAgIGFsdDogX19wcm9wcy5wbHVnaW5JbmZvLm5hbWUsXG4gICAgICAgICAgICAgIGNsYXNzOiBcImJvcmRlci0wIGFic29sdXRlIHJvdW5kZWQtbGcgdy1bMjAwcHhdIG1kOnctWzMwMHB4XSBtYXgtaC1bMTQ4cHhdIG9iamVjdC1jb250YWluIGN1cnNvci1wb2ludGVyXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjM0OFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMjA4XCIsXG4gICAgICAgICAgICAgIHNyYzogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMucGx1Z2luSW5mby5iYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX19wcm9wcy5wbHVnaW5JbmZvLmJhbm5lci5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyFwa21lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIW5vbWFyaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgbG9hZGluZzogXCJsYXp5XCIsXG4gICAgICAgICAgICAgIGRlY29kaW5nOiBcImFzeW5jXCIsXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gKCRldmVudDogYW55KSA9PiAoc2hvd0ltYWdlLnZhbHVlID0gdHJ1ZSkpXG4gICAgICAgICAgICB9LCBudWxsLCA4LCBfaG9pc3RlZF85KVxuICAgICAgICAgIF0sIDEyLCBfaG9pc3RlZF84KSxcbiAgICAgICAgICAoc2hvd0ltYWdlLnZhbHVlKVxuICAgICAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwib3ZlcmxheVwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVsyXSB8fCAoX2NhY2hlWzJdID0gKCRldmVudDogYW55KSA9PiAoc2hvd0ltYWdlLnZhbHVlID0gZmFsc2UpKVxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBzcmM6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnBsdWdpbkluZm8uYmFubmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnJlcGxhY2UoJyFub21hcmsnLCAnIXBrbWVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdnaWYhcGttZXInLCAnZ2lmJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgICBhbHQ6IFwi5Y6f5Zu+XCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBfY2FjaGVbMV0gfHwgKF9jYWNoZVsxXSA9IF93aXRoTW9kaWZpZXJzKCgpID0+IHt9LCBbXCJzdG9wXCJdKSlcbiAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBfaG9pc3RlZF8xMClcbiAgICAgICAgICAgICAgXSkpXG4gICAgICAgICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJcIiwgdHJ1ZSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTEsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaDNcIiwgX2hvaXN0ZWRfMTIsIFtcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJhXCIsIHtcbiAgICAgICAgICAgICAgaHJlZjogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMucGx1Z2luSW5mby5jb250ZW50VXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fcHJvcHMucGx1Z2luSW5mby5jb250ZW50VXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fcHJvcHMucGx1Z2luSW5mby5yZWFkbWVfemhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX19wcm9wcy5wbHVnaW5JbmZvLnJlYWRtZV96aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnIydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0sIF90b0Rpc3BsYXlTdHJpbmcoX19wcm9wcy5wbHVnaW5JbmZvLm5hbWUpLCA5LCBfaG9pc3RlZF8xMyksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCBfaG9pc3RlZF8xNCwgX3RvRGlzcGxheVN0cmluZyhfX3Byb3BzLnBsdWdpbkluZm8udmVyc2lvbiksIDEpLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgX2hvaXN0ZWRfMTUsIF90b0Rpc3BsYXlTdHJpbmcoZm9ybWF0TnVtYmVyKF9fcHJvcHMucGx1Z2luSW5mby5wa21lckRvd25sb2FkQ291bnQpKSwgMSksXG4gICAgICAgICAgICBfY2FjaGVbOF0gfHwgKF9jYWNoZVs4XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzdmdcIiwge1xuICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFlbVwiLFxuICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICBcImRhdGEtdi0zNTk3NDczN1wiOiBcIlwiLFxuICAgICAgICAgICAgICBcImRhdGEtaWNvblwiOiBcIm1kaTp0ZW1wZXJhdHVyZS1jZWxzaXVzXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBcIi1tdC0yIHRleHQtb3JhbmdlLTUwMCBpY29uaWZ5IHctNCBoLTQgaWNvbmlmeS0tbWRpXCJcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgZDogXCJNMTYuNSA1YzEuNTUgMCAzIC40NyA0LjE5IDEuMjhsLTEuMTYgMi44OUE0LjQ3IDQuNDcgMCAwIDAgMTYuNSA4QzE0IDggMTIgMTAgMTIgMTIuNXMyIDQuNSA0LjUgNC41YzEuMDMgMCAxLjk3LS4zNCAyLjczLS45MmwxLjE0IDIuODVBNy40NyA3LjQ3IDAgMCAxIDE2LjUgMjBBNy41IDcuNSAwIDAgMSA5IDEyLjVBNy41IDcuNSAwIDAgMSAxNi41IDVNNiAzYTMgMyAwIDAgMSAzIDNhMyAzIDAgMCAxLTMgM2EzIDMgMCAwIDEtMy0zYTMgMyAwIDAgMSAzLTNtMCAyYTEgMSAwIDAgMC0xIDFhMSAxIDAgMCAwIDEgMWExIDEgMCAwIDAgMS0xYTEgMSAwIDAgMC0xLTFaXCJcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sIC0xKSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBcIiwgX2hvaXN0ZWRfMTYsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW1nXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImgtZnVsbFwiLFxuICAgICAgICAgICAgYWx0OiBcIkdpdEh1YiBzdGFyc1wiLFxuICAgICAgICAgICAgc3JjOiBgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvc3RhcnMvJHtfX3Byb3BzLnBsdWdpbkluZm8ucmVwb30/c3R5bGU9cGxhc3RpYyZjb2xvcj00RjQ2RTUmbGFiZWw95YWz5rOo6YePYFxuICAgICAgICAgIH0sIG51bGwsIDgsIF9ob2lzdGVkXzE3KSxcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW1nXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImgtZnVsbCBtbC0yXCIsXG4gICAgICAgICAgICBhbHQ6IFwi5LiL6L295pWw6YePXCIsXG4gICAgICAgICAgICBzcmM6IGBodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL+S4i+i9veaAu+aVsC0ke2Zvcm1hdE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnBsdWdpbkluZm8uZG93bmxvYWRDb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgKX0teWVsbG93YFxuICAgICAgICAgIH0sIG51bGwsIDgsIF9ob2lzdGVkXzE4KSxcbiAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcImFcIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwibWwtMlwiLFxuICAgICAgICAgICAgaHJlZjogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy5wbHVnaW5JbmZvLmNvbnRlbnRVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3Byb3BzLnBsdWdpbkluZm8uY29udGVudFVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdqYXZhc2NyaXB0OnZvaWQoMCknXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICB9LCBbLi4uKF9jYWNoZVs5XSB8fCAoX2NhY2hlWzldID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJ0ZXh0LXdoaXRlIGZvbnQtc2FucyB0ZXh0LXhzIHB5LTEgcHgtMyBtLTEgcm91bmRlZC1sZyBiZy15ZWxsb3ctNTAwXCIgfSwgXCIg5pWZ56iLIFwiLCAtMSlcbiAgICAgICAgICBdKSldLCA4LCBfaG9pc3RlZF8xOSksIFtcbiAgICAgICAgICAgIFtfdlNob3csIF9fcHJvcHMucGx1Z2luSW5mby5jb250ZW50VXJsXVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiYVwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJtbC0yXCIsXG4gICAgICAgICAgICBocmVmOiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnBsdWdpbkluZm8ucmVhZG1lX3poXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX19wcm9wcy5wbHVnaW5JbmZvLnJlYWRtZV96aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdqYXZhc2NyaXB0OnZvaWQoMCknXG4gICAgICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICB0b29sdGlwOiBcIlJlYWRtZeaWh+aho1wiXG4gICAgICAgICAgfSwgWy4uLihfY2FjaGVbMTBdIHx8IChfY2FjaGVbMTBdID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgICAgICAgICAgIFwiZGF0YS12LTVkZjJhMDM3XCI6IFwiXCIsXG4gICAgICAgICAgICAgIFwiZGF0YS1pY29uXCI6IFwibGE6cmVhZG1lXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBcInRleHQtZ3JlZW4tNTAwIGJsb2NrIG14LWF1dG8gaWNvbmlmeSB3LTYgaC02IGljb25pZnktLWxhXCJcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgZDogXCJNNSA2QzMuMzQ2IDYgMiA3LjM0NiAyIDl2MTJjMCAxLjY1NCAxLjM0NiAzIDMgM2w2LjE4NC0uMDJjLjk5IDAgMS45NDkuMzEgMi43NzMuODZMMTYgMjYuMmwyLjA0My0xLjM2MWE0Ljk4OCA0Ljk4OCAwIDAgMSAyLjc3My0uODRIMjdjMS42NTQgMCAzLTEuMzQ2IDMtM1Y5YzAtMS42NTQtMS4zNDYtMy0zLTNoLTYuMTg0Yy0xLjM4NiAwLTIuNzMuNDA4LTMuODgyIDEuMTc2TDE2IDcuNzk5bC0uOTM0LS42MjNBNi45NzggNi45NzggMCAwIDAgMTEuMTg0IDZINXptMCAyaDYuMTg0Yy45OSAwIDEuOTQ5LjI5IDIuNzczLjg0TDE2IDEwLjJsMi4wNDMtMS4zNjFBNC45ODggNC45ODggMCAwIDEgMjAuODE2IDhIMjdjLjU1MiAwIDEgLjQ0OSAxIDF2MTJjMCAuNTUxLS40NDggMS0xIDFoLTYuMTg0Yy0xLjM4NiAwLTIuNzMuNDA4LTMuODgyIDEuMTc2bC0uOTM0LjYyM2wtLjkzNC0uNjIzQTYuOTc4IDYuOTc4IDAgMCAwIDExLjE4NCAyMkg1Yy0uNTUyIDAtMS0uNDQ5LTEtMVY5YzAtLjU1MS40NDgtMSAxLTF6bTEgNHYyaDh2LTJINnptMTIgMHYyaDh2LTJoLTh6TTYgMTZ2Mmg4di0ySDZ6bTEyIDB2Mmg4di0yaC04elwiXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICBdKSldLCA4LCBfaG9pc3RlZF8yMCksIFtcbiAgICAgICAgICAgIFtfdlNob3csIF9fcHJvcHMucGx1Z2luSW5mby5yZWFkbWVfemhdXG4gICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwXCIsIF9ob2lzdGVkXzIxLCBfdG9EaXNwbGF5U3RyaW5nKF9fcHJvcHMucGx1Z2luSW5mby5jaGluZXNlRGVzY3JpcHRpb24/LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCLjgJDmnLrnv7vjgJFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApIHx8IF9fcHJvcHMucGx1Z2luSW5mby5kZXNjcmlwdGlvbiksIDEpXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjIsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yMywgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJpbWdcIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwidy0xMiBtYXNrIG1hc2stYmxvYlwiLFxuICAgICAgICAgICAgc3JjOiBnZXRVc2VybmFtZUZyb21SZXBvKCksXG4gICAgICAgICAgICBvbmVycm9yOiBgamF2YXNjcmlwdDp0aGlzLnNyYz0nJHtnZXREZWZhdWx0QXZhdGEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy5wbHVnaW5JbmZvLmF1dGhvclxuICAgICAgICAgICAgICAgICAgICAgICAgKX0nYCxcbiAgICAgICAgICAgIGFsdDogXCJhdmF0YXJcIlxuICAgICAgICAgIH0sIG51bGwsIDgsIF9ob2lzdGVkXzI0KSxcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYVwiLCB7XG4gICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tLycgKyBfX3Byb3BzLnBsdWdpbkluZm8ucmVwb1xuICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjYsIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImgzXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogXCJ3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzIG92ZXJmbG93LWhpZGRlbiBtYXgtdy1bMTQwcHhdIGZvbnQtaGVhZGluZyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLTgwMCBkYXJrOnRleHQtbXV0ZWQtNTBcIixcbiAgICAgICAgICAgICAgICB0b29sdGlwOiBfX3Byb3BzLnBsdWdpbkluZm8uYXV0aG9yXG4gICAgICAgICAgICAgIH0sIF90b0Rpc3BsYXlTdHJpbmcoX19wcm9wcy5wbHVnaW5JbmZvLmF1dGhvciksIDksIF9ob2lzdGVkXzI3KSxcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBcIiwgX2hvaXN0ZWRfMjgsIF90b0Rpc3BsYXlTdHJpbmcoZGlmZkRheXMoX19wcm9wcy5wbHVnaW5JbmZvLnBsdWdpblVwZGF0ZWRUaW1lKSksIDEpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0sIDgsIF9ob2lzdGVkXzI1KSxcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI5LCBbXG4gICAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZU9wZW5TZXR0aW5ncyxcbiAgICAgICAgICAgICAgY2xhc3M6IFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGgtOCBweC0yIHB5LTEgdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgYm9yZGVyLTAgcm91bmRlZCBzaGFkb3cteGwgd2hpdGVzcGFjZS1ub3dyYXAgYmctcHJpbWFyeS01MDAgaG92ZXI6YmctcHJpbWFyeS02MDAgc2hhZG93LXByaW1hcnktNTAwLzIwIHR3LWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgfSwgXCIg6K+355m75b2VIFwiLCA1MTIpLCBbXG4gICAgICAgICAgICAgIFtfdlNob3csICFfdW5yZWYoaXNVc2VyTG9naW4pXVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBudWxsLCBbXG4gICAgICAgICAgICAgICghX19wcm9wcy5wbHVnaW5JbmZvLmlzSW5zdGFsbGVkKVxuICAgICAgICAgICAgICAgID8gX3dpdGhEaXJlY3RpdmVzKChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBoLTggcHgtMiBweS0xIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGJvcmRlci0wIHJvdW5kZWQgc2hhZG93LXhsIHdoaXRlc3BhY2Utbm93cmFwIGJnLXByaW1hcnktNTAwIGhvdmVyOmJnLXByaW1hcnktNjAwIHNoYWRvdy1wcmltYXJ5LTUwMC8yMCB0dy1hY2Nlc3NpYmlsaXR5XCIsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVszXSB8fCAoX2NhY2hlWzNdID0gKCRldmVudDogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R4LiRlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZC11cGRhdGUtcGx1Z2luJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMucGx1Z2luSW5mby5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnBsdWdpbkluZm8udmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnBsdWdpbkluZm8uc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVsxMV0gfHwgKF9jYWNoZVsxMV0gPSBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwic3ZnLWljb24gbHVjaWRlLWRvd25sb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHsgZDogXCJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNFwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwb2x5bGluZVwiLCB7IHBvaW50czogXCI3IDEwIDEyIDE1IDE3IDEwXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDE6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBcIjE1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB4MjogXCIxMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTI6IFwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSwgLTEpLFxuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKFwiIOS4i+i9vSBcIiwgLTEpXG4gICAgICAgICAgICAgICAgICBdKSldLCA1MTIpKSwgW1xuICAgICAgICAgICAgICAgICAgICBbX3ZTaG93LCBfdW5yZWYoaXNVc2VyTG9naW4pXVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMucGx1Z2luSW5mby5pc0luc3RhbGxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy5wbHVnaW5JbmZvLmlzT3V0ZGF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGgtOCBweC0yIHB5LTEgdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgYm9yZGVyLTAgcm91bmRlZCBzaGFkb3cteGwgd2hpdGVzcGFjZS1ub3dyYXAgYmctcHJpbWFyeS01MDAgaG92ZXI6YmctcHJpbWFyeS02MDAgc2hhZG93LXByaW1hcnktNTAwLzIwIHR3LWFjY2Vzc2liaWxpdHlcIixcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBfY2FjaGVbNF0gfHwgKF9jYWNoZVs0XSA9ICgkZXZlbnQ6IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eC4kZW1pdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWQtdXBkYXRlLXBsdWdpbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy5wbHVnaW5JbmZvLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMucGx1Z2luSW5mby52ZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMucGx1Z2luSW5mby5zb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgfSwgWy4uLihfY2FjaGVbMTJdIHx8IChfY2FjaGVbMTJdID0gW1xuICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXYtNWFkZTY4ZGFcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1pY29uXCI6IFwiZGFzaGljb25zOnVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiYmxvY2sgdy00IGgtNCBteC1hdXRvIGljb25pZnkgaWNvbmlmeS0tZGFzaGljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTEwLjIgMy4yOGMzLjUzIDAgNi40MyAyLjYxIDYuOTIgNmgyLjA4bC0zLjUgNGwtMy41LTRoMi4zMmE0LjQzOSA0LjQzOSAwIDAgMC00LjMyLTMuNDVjLTEuNDUgMC0yLjczLjcxLTMuNTQgMS43OEw0Ljk1IDUuNjZhNi45NjUgNi45NjUgMCAwIDEgNS4yNS0yLjM4em0tLjQgMTMuNDRjLTMuNTIgMC02LjQzLTIuNjEtNi45Mi02SC44bDMuNS00YzEuMTcgMS4zMyAyLjMzIDIuNjcgMy41IDRINS40OGE0LjQzOSA0LjQzOSAwIDAgMCA0LjMyIDMuNDVjMS40NSAwIDIuNzMtLjcxIDMuNTQtMS43OGwxLjcxIDEuOTVhNi45NSA2Ljk1IDAgMCAxLTUuMjUgMi4zOHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICBdLCAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVRleHRWTm9kZShcIiDmm7TmlrAgXCIsIC0xKVxuICAgICAgICAgICAgICAgICAgICBdKSldKSlcbiAgICAgICAgICAgICAgICAgIDogKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiAyLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVs1XSB8fCAoX2NhY2hlWzVdID0gKCRldmVudDogYW55KSA9PiAoZW5hYmxlUGx1Z2luKF9fcHJvcHMucGx1Z2luSW5mby5pZCkpKSxcbiAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiBnZXRUb29sdGlwKCksXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGgtOCBweC0yIHB5LTEgdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgYm9yZGVyLTAgcm91bmRlZCBzaGFkb3cteGwgd2hpdGVzcGFjZS1ub3dyYXAgYmctcHJpbWFyeS01MDAgaG92ZXI6YmctcHJpbWFyeS02MDAgc2hhZG93LXByaW1hcnktNTAwLzIwIHR3LWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCBfaG9pc3RlZF8zMSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBzdGF0dXNDb2xvci52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNOCA0Yy4zNjcgMCAuNzIxLjA0OCAxLjA2My4xNDVhMy45NDMgMy45NDMgMCAwIDEgMS43NjIgMS4wMzFhMy45NDQgMy45NDQgMCAwIDEgMS4wMyAxLjc2MmMuMDk3LjM0LjE0NS42OTUuMTQ1IDEuMDYyYzAgLjM2Ny0uMDQ4LjcyMS0uMTQ1IDEuMDYzYTMuOTQgMy45NCAwIDAgMS0xLjAzIDEuNzY1YTQuMDE3IDQuMDE3IDAgMCAxLTEuNzYyIDEuMDMxQzguNzIgMTEuOTUzIDguMzY3IDEyIDggMTJzLS43MjEtLjA0Ny0xLjA2My0uMTRhNC4wNTYgNC4wNTYgMCAwIDEtMS43NjUtMS4wMzJBNC4wNTUgNC4wNTUgMCAwIDEgNC4xNCA5LjA2MkEzLjk5MiAzLjk5MiAwIDAgMSA0IDhjMC0uMzY3LjA0Ny0uNzIxLjE0LTEuMDYzYTQuMDIgNC4wMiAwIDAgMSAuNDA3LS45NTNBNC4wODkgNC4wODkgMCAwIDEgNS45OCA0LjU0NmEzLjk0IDMuOTQgMCAwIDEgLjk1Ny0uNDAxQTMuODkgMy44OSAwIDAgMSA4IDR6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIF9ob2lzdGVkXzMyKVxuICAgICAgICAgICAgICAgICAgICAgIF0pKSxcbiAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVbMTNdIHx8IChfY2FjaGVbMTNdID0gX2NyZWF0ZVRleHRWTm9kZShcIiDlt7Llronoo4UgXCIsIC0xKSlcbiAgICAgICAgICAgICAgICAgICAgXSwgOCwgX2hvaXN0ZWRfMzApKVxuICAgICAgICAgICAgXSwgNTEyKSwgW1xuICAgICAgICAgICAgICBbX3ZTaG93LCBfdW5yZWYoaXNVc2VyTG9naW4pXVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgXSlcbiAgICBdKVxuICBdKSlcbn1cbn1cblxufSkiLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IHVucmVmIGFzIF91bnJlZiwgdG9EaXNwbGF5U3RyaW5nIGFzIF90b0Rpc3BsYXlTdHJpbmcsIHZTaG93IGFzIF92U2hvdywgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUsIHdpdGhEaXJlY3RpdmVzIGFzIF93aXRoRGlyZWN0aXZlcywgbm9ybWFsaXplU3R5bGUgYXMgX25vcm1hbGl6ZVN0eWxlLCB3aXRoTW9kaWZpZXJzIGFzIF93aXRoTW9kaWZpZXJzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jaywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2ssIGNyZWF0ZUNvbW1lbnRWTm9kZSBhcyBfY3JlYXRlQ29tbWVudFZOb2RlLCBjcmVhdGVUZXh0Vk5vZGUgYXMgX2NyZWF0ZVRleHRWTm9kZSwgbm9ybWFsaXplQ2xhc3MgYXMgX25vcm1hbGl6ZUNsYXNzIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSB7IGNsYXNzOiBcInJlbGF0aXZlXCIgfVxuY29uc3QgX2hvaXN0ZWRfMiA9IHsgY2xhc3M6IFwiaC1mdWxsIGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQgZ2FwLTQgcC02XCIgfVxuY29uc3QgX2hvaXN0ZWRfMyA9IHsgY2xhc3M6IFwicmVsYXRpdmUgdy1mdWxsIHNwYWNlLXktMlwiIH1cbmNvbnN0IF9ob2lzdGVkXzQgPSB7IGNsYXNzOiBcInJlbGF0aXZlXCIgfVxuY29uc3QgX2hvaXN0ZWRfNSA9IHsgY2xhc3M6IFwibWFya1wiIH1cbmNvbnN0IF9ob2lzdGVkXzYgPSBbXCJkYXRhLW5hbWVcIl1cbmNvbnN0IF9ob2lzdGVkXzcgPSBbXCJzcmNcIiwgXCJhbHRcIl1cbmNvbnN0IF9ob2lzdGVkXzggPSBbXCJzcmNcIl1cbmNvbnN0IF9ob2lzdGVkXzkgPSB7IGNsYXNzOiBcInBsdWdpbl9uYW1lIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGgtMTAgb3ZlcmZsb3ctaGlkZGVuXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTAgPSB7XG4gIFwiZGF0YS1wYWdlZmluZC1tZXRhXCI6IFwidGl0bGVcIixcbiAgY2xhc3M6IFwiZmxleCBpdGVtcy1jZW50ZXIgZm9udC1oZWFkaW5nIHRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC04MDAgZGFyazp0ZXh0LXdoaXRlIGxlYWRpbmctNlwiXG59XG5jb25zdCBfaG9pc3RlZF8xMSA9IFtcInNyY1wiXVxuY29uc3QgX2hvaXN0ZWRfMTIgPSB7IGNsYXNzOiBcIi1tdC0yIHRleHQtb3JhbmdlLTUwMCBtbC0yIHRleHQtbGcgZm9udC1zZXJpZiBmb250LWJvbGQgaXRhbGljXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTMgPSB7IGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIGZsZXgtd3JhcCBsZWFkaW5nLTYgdGV4dC1tdXRlZC02MDAgZGFyazp0ZXh0LW11dGVkLTQwMFwiIH1cbmNvbnN0IF9ob2lzdGVkXzE0ID0gW1wic3JjXCJdXG5jb25zdCBfaG9pc3RlZF8xNSA9IFtcInNyY1wiXVxuY29uc3QgX2hvaXN0ZWRfMTYgPSBbXCJocmVmXCJdXG5jb25zdCBfaG9pc3RlZF8xNyA9IHsgY2xhc3M6IFwidy1mdWxsIG10LWF1dG8gc3BhY2UteS02XCIgfVxuY29uc3QgX2hvaXN0ZWRfMTggPSB7IGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgdy1mdWxsIHJlbGF0aXZlXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTkgPSBbXCJzcmNcIiwgXCJvbmVycm9yXCJdXG5jb25zdCBfaG9pc3RlZF8yMCA9IFtcImhyZWZcIl1cbmNvbnN0IF9ob2lzdGVkXzIxID0geyBjbGFzczogXCJwbC0yXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjIgPSBbXCJ0b29sdGlwXCJdXG5jb25zdCBfaG9pc3RlZF8yMyA9IHsgY2xhc3M6IFwiYmxvY2sgbWwtYXV0byBmb250LXNhbnMgdGV4dC1zbSB0ZXh0LW11dGVkLTQwMFwiIH1cblxuaW1wb3J0IHsgcmVmIH0gZnJvbSBcInZ1ZVwiXG5pbXBvcnQgdHlwZSB7IFRoZW1lSW5mbyB9IGZyb20gXCJAL3R5cGVzL3RoZW1lXCJcbmltcG9ydCB7IEFwcCB9IGZyb20gXCJvYnNpZGlhblwiXG5pbnRlcmZhY2UgUHJvcHMge1xuICAgIGFwcDogQXBwXG4gICAgdGhlbWVJbmZvOiBUaGVtZUluZm9cbiAgICBpc0xvZ2luOiBib29sZWFuXG59XG5cbmV4cG9ydCBkZWZhdWx0IC8qQF9fUFVSRV9fKi9fZGVmaW5lQ29tcG9uZW50KHtcbiAgX19uYW1lOiAnVGhlbWVDYXJkJyxcbiAgcHJvcHM6IHtcbiAgICBhcHA6IHt9LFxuICAgIHRoZW1lSW5mbzoge30sXG4gICAgaXNMb2dpbjogeyB0eXBlOiBCb29sZWFuIH1cbiAgfSxcbiAgZW1pdHM6IFtcImRvd25sb2FkLXVwZGF0ZS10aGVtZVwiXSxcbiAgc2V0dXAoX19wcm9wczogYW55KSB7XG5cbmNvbnN0IHByb3AgPSBfX3Byb3BzXG5jb25zdCBpc1VzZXJMb2dpbiA9IHByb3AuaXNMb2dpblxuXG5cbmZ1bmN0aW9uIGdldFVzZXJuYW1lRnJvbVJlcG8oKSB7XG4gICAgaWYgKHByb3AudGhlbWVJbmZvLmF1dGhvckF2YXRhciAmJiBwcm9wLnRoZW1lSW5mby5hdXRob3JBdmF0YXIubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBsZXQgcmVnZXggPSAvXihbXlxcL10qKVxcLy87XG4gICAgICAgIC8vIGxldCB1c2VybmFtZU1hdGNoID0gcmVwby5tYXRjaChyZWdleCk7XG4gICAgICAgIC8vIHJldHVybiB1c2VybmFtZU1hdGNoID8gdXNlcm5hbWVNYXRjaFsxXSA6IG51bGw7XG4gICAgICAgIHJldHVybiBwcm9wLnRoZW1lSW5mby5hdXRob3JBdmF0YXJcbiAgICB9IGVsc2UgcmV0dXJuIGdldERlZmF1bHRBdmF0YShwcm9wLnRoZW1lSW5mby5hdXRob3IpXG59XG5cbmNvbnN0IHNob3dJbWFnZSA9IHJlZihmYWxzZSlcbi8vIGxldCB1cmwgPSBwcm9wLnRoZW1lSW5mby51cmwgPz8gJyc7XG4vLyBsZXQgcmVnZXggPSAvaHR0cHM6XFwvXFwvZ2l0aHViXFwuY29tXFwvKC4qKVxcLy87XG5cbi8vIGxldCB1c2VybmFtZU1hdGNoID0gdXJsLm1hdGNoKHJlZ2V4KTtcbi8vIGxldCB1c2VybmFtZSA9IHVzZXJuYW1lTWF0Y2ggPyB1c2VybmFtZU1hdGNoWzFdIDogbnVsbDtcblxubGV0IHRhZ3M6IHN0cmluZ1tdID0gW11cbmlmIChwcm9wLnRoZW1lSW5mby50YWdzICYmIHByb3AudGhlbWVJbmZvLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgIHRhZ3MgPSBwcm9wLnRoZW1lSW5mby50YWdzLnNwbGl0KFwiLFwiKVxufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtOiBudW1iZXIpIHtcbiAgICAvLyDovazmjaLmlbDlrZdcbiAgICBpZiAobnVtID49IDEwMDAwMDApIHtcbiAgICAgICAgcmV0dXJuIChudW0gLyAxMDAwMDAwKS50b0ZpeGVkKDApICsgXCJNXCJcbiAgICB9IGVsc2UgaWYgKG51bSA+PSAxMDAwKSB7XG4gICAgICAgIHJldHVybiAobnVtIC8gMTAwMCkudG9GaXhlZCgwKSArIFwiS1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bS50b1N0cmluZygpXG4gICAgfVxufVxuXG4vL+WQjeensOeahOmmluWtl+avjeWkp+WGmVxuZnVuY3Rpb24gZ2V0SW5pdGlhbHMobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGluaXRpYWxzID0gbmFtZS5tYXRjaCgvXFxiXFx3L2cpIHx8IFtdXG4gICAgcmV0dXJuIGluaXRpYWxzLmpvaW4oXCJcIikudG9VcHBlckNhc2UoKVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEF2YXRhKG5hbWU6IHN0cmluZykge1xuICAgIGxldCB1cmwgPSBcIlwiXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgICAgLy/nlKjmiLfpppblrZflpLTlg49cbiAgICAgICAgY29uc3QgZmlyc3RDaGFyID0gZ2V0SW5pdGlhbHMobmFtZSlcbiAgICAgICAgaWYgKC9eW2EtekEtWl0rJC8udGVzdChmaXJzdENoYXIpKSB7XG4gICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly9kdW1teWltYWdlLmNvbS8xMDB4MTAwLzU1NS9mZmYmdGV4dD0ke2ZpcnN0Q2hhci50b1VwcGVyQ2FzZSgpfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybCA9IGBodHRwczovL2R1bW15aW1hZ2UuY29tLzEwMHgxMDAvNTU1L2ZmZmYmdGV4dD0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICBmaXJzdENoYXJcbiAgICAgICAgICAgICl9YFxuICAgICAgICB9XG4gICAgfSBlbHNlIHVybCA9IGBodHRwczovL2Nkbi5wa21lci5jbi9jb3ZlcnMvbG9nby5wbmchbm9tYXJrYFxuICAgIHJldHVybiB1cmxcbn0gXG5jb25zdCBjaGFuZ2VUaGVtZT1hc3luYyh0aGVtZU5hbWU6IHN0cmluZyk9PntcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgIGF3YWl0IHByb3AuYXBwLmN1c3RvbUNzcy5zZXRUaGVtZSh0aGVtZU5hbWUpO1xuXG59XG5jb25zdCBnZXRSYWRvbUltYWdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3BrbWVyLmNuL2ltZy9jb3Zlci8ke01hdGguZmxvb3IoXG4gICAgICAgIE1hdGgucmFuZG9tKCkgKiAxMVxuICAgICl9LmpwZ2BcblxuICAgIHJldHVybiBgYmFja2dyb3VuZC1pbWFnZTp1cmwoJHt1cmx9KTtgXG59XG5cbmNvbnN0IGhhbmRsZU9wZW5TZXR0aW5ncyA9ICgpID0+IHtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBwcm9wLmFwcC5zZXR0aW5nLm9wZW4oKVxuICAgIC8vQHRzLWlnbm9yZVxuICAgIHByb3AuYXBwLnNldHRpbmcub3BlblRhYkJ5SWQoXCJwa21lclwiKVxufVxuXG5yZXR1cm4gKF9jdHg6IGFueSxfY2FjaGU6IGFueSkgPT4ge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImRpdlwiLCBfaG9pc3RlZF8xLCBbXG4gICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yLCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzMsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF80LCBbXG4gICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiYWJzb2x1dGUgdG9wLTMgbGVmdC0zIGlubGluZS1ibG9jayBmb250LXNhbnMgdGV4dC14cyBweS0xLjUgcHgtMyBtLTEgcm91bmRlZC1sZyBiZy1wcmltYXJ5LTUwMCB0ZXh0LXdoaXRlIHNoYWRvdy14bCBzaGFkb3ctcHJpbWFyeS01MDAvMjBcIiB9LCBfdG9EaXNwbGF5U3RyaW5nKF91bnJlZih0YWdzKVswXSksIDUxMyksIFtcbiAgICAgICAgICAgIFtfdlNob3csIF91bnJlZih0YWdzKVswXV1cbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcInZpZXdcIiwgX2hvaXN0ZWRfNSwgWy4uLihfY2FjaGVbNl0gfHwgKF9jYWNoZVs2XSA9IFtcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwibGVhcm5cIiB9LCBcIlRpcHMgXCIsIC0xKVxuICAgICAgICAgIF0pKV0sIDUxMiksIFtcbiAgICAgICAgICAgIFtfdlNob3csIF9fcHJvcHMudGhlbWVJbmZvLmNvbnRlbnRVcmxdXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwibm9pbWcgaC00MCBtZDpoLTUyXCIsXG4gICAgICAgICAgICBcImRhdGEtbmFtZVwiOiBfX3Byb3BzLnRoZW1lSW5mby5uYW1lLFxuICAgICAgICAgICAgc3R5bGU6IF9ub3JtYWxpemVTdHlsZShnZXRSYWRvbUltYWdlKCkpXG4gICAgICAgICAgfSwgbnVsbCwgMTIsIF9ob2lzdGVkXzYpLCBbXG4gICAgICAgICAgICBbX3ZTaG93LCAhX19wcm9wcy50aGVtZUluZm8uYmFubmVyXVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW1nXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcInctZnVsbCBoLTUyIG9iamVjdC1jb250YWluIGFzcGVjdC12aWRlbyByb3VuZGVkLXhsIGN1cnNvci1wb2ludGVyXCIsXG4gICAgICAgICAgICBzcmM6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMudGhlbWVJbmZvLmJhbm5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnJlcGxhY2UoJ2dpZiFwa21lcicsICdnaWYnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnIXBrbWVyJywgJyFub21hcmsnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLFxuICAgICAgICAgICAgYWx0OiBfX3Byb3BzLnRoZW1lSW5mby5uYW1lLFxuICAgICAgICAgICAgd2lkdGg6IFwiMzQ4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMjA4XCIsXG4gICAgICAgICAgICBvbmVycm9yOiBcImphdmFzY3JpcHQ6dGhpcy5zcmM9J2h0dHBzOi8vY2RuLnBrbWVyLmNuL2NvdmVycy9wa21lcjIucG5nIW5vbWFyayc7dGhpcy7Ov25lcnLOv3I9bnVsbDtcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gKCRldmVudDogYW55KSA9PiAoc2hvd0ltYWdlLnZhbHVlID0gdHJ1ZSkpXG4gICAgICAgICAgfSwgbnVsbCwgOCwgX2hvaXN0ZWRfNyksIFtcbiAgICAgICAgICAgIFtfdlNob3csIF9fcHJvcHMudGhlbWVJbmZvLmJhbm5lcl1cbiAgICAgICAgICBdKSxcbiAgICAgICAgICAoc2hvd0ltYWdlLnZhbHVlKVxuICAgICAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwib3ZlcmxheVwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVsyXSB8fCAoX2NhY2hlWzJdID0gKCRldmVudDogYW55KSA9PiAoc2hvd0ltYWdlLnZhbHVlID0gZmFsc2UpKVxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBzcmM6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnRoZW1lSW5mby5iYW5uZXI/LnJlcGxhY2UoJyFub21hcmsnLCAnIXBrbWVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgICBhbHQ6IFwi5Y6f5Zu+XCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBfY2FjaGVbMV0gfHwgKF9jYWNoZVsxXSA9IF93aXRoTW9kaWZpZXJzKCgpID0+IHt9LCBbXCJzdG9wXCJdKSlcbiAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBfaG9pc3RlZF84KVxuICAgICAgICAgICAgICBdKSlcbiAgICAgICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcIlwiLCB0cnVlKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF85LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImgzXCIsIF9ob2lzdGVkXzEwLCBbXG4gICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKF90b0Rpc3BsYXlTdHJpbmcoX19wcm9wcy50aGVtZUluZm8ubmFtZSkgKyBcIiBcIiwgMSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFwiLW10LTIgbWwtMlwiLFxuICAgICAgICAgICAgICBhbHQ6IFwidmVyc2lvblwiLFxuICAgICAgICAgICAgICBzcmM6IGBodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlLyR7X19wcm9wcy50aGVtZUluZm8udmVyc2lvbn0tYnJpZ2h0Z3JlZW5gXG4gICAgICAgICAgICB9LCBudWxsLCA4LCBfaG9pc3RlZF8xMSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCBfaG9pc3RlZF8xMiwgX3RvRGlzcGxheVN0cmluZyhmb3JtYXROdW1iZXIoX19wcm9wcy50aGVtZUluZm8ucGttZXJEb3dubG9hZENvdW50KSksIDEpLFxuICAgICAgICAgICAgX2NhY2hlWzddIHx8IChfY2FjaGVbN10gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxZW1cIixcbiAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgXCJkYXRhLXYtMzU5NzQ3MzdcIjogXCJcIixcbiAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJtZGk6dGVtcGVyYXR1cmUtY2Vsc2l1c1wiLFxuICAgICAgICAgICAgICBjbGFzczogXCItbXQtMiB0ZXh0LW9yYW5nZS01MDAgaWNvbmlmeSB3LTQgaC00IGljb25pZnktLW1kaVwiXG4gICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgIGQ6IFwiTTE2LjUgNWMxLjU1IDAgMyAuNDcgNC4xOSAxLjI4bC0xLjE2IDIuODlBNC40NyA0LjQ3IDAgMCAwIDE2LjUgOEMxNCA4IDEyIDEwIDEyIDEyLjVzMiA0LjUgNC41IDQuNWMxLjAzIDAgMS45Ny0uMzQgMi43My0uOTJsMS4xNCAyLjg1QTcuNDcgNy40NyAwIDAgMSAxNi41IDIwQTcuNSA3LjUgMCAwIDEgOSAxMi41QTcuNSA3LjUgMCAwIDEgMTYuNSA1TTYgM2EzIDMgMCAwIDEgMyAzYTMgMyAwIDAgMS0zIDNhMyAzIDAgMCAxLTMtM2EzIDMgMCAwIDEgMy0zbTAgMmExIDEgMCAwIDAtMSAxYTEgMSAwIDAgMCAxIDFhMSAxIDAgMCAwIDEtMWExIDEgMCAwIDAtMS0xWlwiXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLCAtMSkpXG4gICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwXCIsIF9ob2lzdGVkXzEzLCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImltZ1wiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJoLWZ1bFwiLFxuICAgICAgICAgICAgYWx0OiBcIkdpdEh1YiBzdGFyc1wiLFxuICAgICAgICAgICAgc3JjOiBgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvc3RhcnMvJHtfX3Byb3BzLnRoZW1lSW5mby5yZXBvfT9zdHlsZT1wbGFzdGljJmNvbG9yPTRGNDZFNSZsYWJlbD3lhbPms6jph49gXG4gICAgICAgICAgfSwgbnVsbCwgOCwgX2hvaXN0ZWRfMTQpLFxuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJpbWdcIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwiaC1mdWwgbWwtMlwiLFxuICAgICAgICAgICAgYWx0OiBcIuS4i+i9veaVsOmHj1wiLFxuICAgICAgICAgICAgc3JjOiBgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS/kuIvovb3mgLvmlbAtJHtmb3JtYXROdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy50aGVtZUluZm8uZG93bmxvYWRDb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgKX0teWVsbG93YFxuICAgICAgICAgIH0sIG51bGwsIDgsIF9ob2lzdGVkXzE1KSxcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYVwiLCB7XG4gICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcIm1sLTJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IF9fcHJvcHMudGhlbWVJbmZvLmNvbnRlbnRVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52aXNpYmxlOiAhX19wcm9wcy50aGVtZUluZm8uY29udGVudFVybFxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pLFxuICAgICAgICAgICAgaHJlZjogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy50aGVtZUluZm8uY29udGVudFVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fcHJvcHMudGhlbWVJbmZvLmNvbnRlbnRVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnamF2YXNjcmlwdDp2b2lkKDApJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgfSwgWy4uLihfY2FjaGVbOF0gfHwgKF9jYWNoZVs4XSA9IFtcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwidGV4dC13aGl0ZSBmb250LXNhbnMgdGV4dC14cyBweS0xIHB4LTMgbS0xIHJvdW5kZWQtbGcgYmcteWVsbG93LTUwMFwiIH0sIFwiIOaVmeeoiyBcIiwgLTEpXG4gICAgICAgICAgXSkpXSwgMTAsIF9ob2lzdGVkXzE2KVxuICAgICAgICBdKSxcbiAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwXCIsIHsgY2xhc3M6IFwicGx1Z2luX2Rlc2MgdGV4dC1iYXNlIG10LWF1dG8gbWluLWgtWzNyZW1dIHRleHQtbXV0ZWQtNjAwIGRhcms6dGV4dC1tdXRlZC00MDAgbGVhZGluZy02XCIgfSwgX3RvRGlzcGxheVN0cmluZyhfX3Byb3BzLnRoZW1lSW5mby5jaGluZXNlRGVzY3JpcHRpb24/LnJlcGxhY2UoXCLjgJDmnLrnv7vjgJFcIiwgXCJcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMudGhlbWVJbmZvLmRlc2NyaXB0aW9uKSwgNTEzKSwgW1xuICAgICAgICAgIFtfdlNob3csIF9fcHJvcHMudGhlbWVJbmZvLmRlc2NyaXB0aW9uXVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzE3LCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTgsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW1nXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcInctMTIgbWFzayBtYXNrLWJsb2JcIixcbiAgICAgICAgICAgIHNyYzogZ2V0VXNlcm5hbWVGcm9tUmVwbygpLFxuICAgICAgICAgICAgb25lcnJvcjogYGphdmFzY3JpcHQ6dGhpcy5zcmM9JyR7Z2V0RGVmYXVsdEF2YXRhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMudGhlbWVJbmZvLmF1dGhvclxuICAgICAgICAgICAgICAgICAgICAgICAgKX0nYCxcbiAgICAgICAgICAgIGFsdDogXCJhdmF0YXJcIlxuICAgICAgICAgIH0sIG51bGwsIDgsIF9ob2lzdGVkXzE5KSxcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYVwiLCB7XG4gICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tLycgKyBfX3Byb3BzLnRoZW1lSW5mby5yZXBvXG4gICAgICAgICAgfSwgW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yMSwgW1xuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaDNcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcIndoaXRlc3BhY2Utbm93cmFwIHRleHQtZWxsaXBzaXMgb3ZlcmZsb3ctaGlkZGVuIG1heC13LVsxNDBweF0gZm9udC1oZWFkaW5nIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtODAwIGRhcms6dGV4dC1tdXRlZC01MFwiLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IF9fcHJvcHMudGhlbWVJbmZvLmF1dGhvclxuICAgICAgICAgICAgICB9LCBfdG9EaXNwbGF5U3RyaW5nKF9fcHJvcHMudGhlbWVJbmZvLmF1dGhvciksIDksIF9ob2lzdGVkXzIyKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdLCA4LCBfaG9pc3RlZF8yMCksXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yMywgW1xuICAgICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICBvbkNsaWNrOiBoYW5kbGVPcGVuU2V0dGluZ3MsXG4gICAgICAgICAgICAgIGNsYXNzOiBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBoLTggcHgtMiBweS0xIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGJvcmRlci0wIHJvdW5kZWQgc2hhZG93LXhsIHdoaXRlc3BhY2Utbm93cmFwIGJnLXByaW1hcnktNTAwIGhvdmVyOmJnLXByaW1hcnktNjAwIHNoYWRvdy1wcmltYXJ5LTUwMC8yMCB0dy1hY2Nlc3NpYmlsaXR5XCJcbiAgICAgICAgICAgIH0sIFwiIOivt+eZu+W9lSBcIiwgNTEyKSwgW1xuICAgICAgICAgICAgICBbX3ZTaG93LCAhX3VucmVmKGlzVXNlckxvZ2luKV1cbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgICAgICAoIV9fcHJvcHMudGhlbWVJbmZvLmlzSW5zdGFsbGVkKVxuICAgICAgICAgICAgICAgID8gX3dpdGhEaXJlY3RpdmVzKChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBoLTggcHgtMiBweS0xIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGJvcmRlci0wIHJvdW5kZWQgc2hhZG93LXhsIHdoaXRlc3BhY2Utbm93cmFwIGJnLXByaW1hcnktNTAwIGhvdmVyOmJnLXByaW1hcnktNjAwIHNoYWRvdy1wcmltYXJ5LTUwMC8yMCB0dy1hY2Nlc3NpYmlsaXR5XCIsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVszXSB8fCAoX2NhY2hlWzNdID0gKCRldmVudDogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R4LiRlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZC11cGRhdGUtdGhlbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy50aGVtZUluZm8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnRoZW1lSW5mby52ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVs5XSB8fCAoX2NhY2hlWzldID0gW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWpvaW5cIjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInN2Zy1pY29uIGx1Y2lkZS1kb3dubG9hZFwiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7IGQ6IFwiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTRcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicG9seWxpbmVcIiwgeyBwb2ludHM6IFwiNyAxMCAxMiAxNSAxNyAxMFwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxOiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MTogXCIxNVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDI6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjNcIlxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0sIC0xKSxcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVRleHRWTm9kZShcIiDkuIvovb0gXCIsIC0xKVxuICAgICAgICAgICAgICAgICAgXSkpXSwgNTEyKSksIFtcbiAgICAgICAgICAgICAgICAgICAgW192U2hvdywgX3VucmVmKGlzVXNlckxvZ2luKV1cbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb3BzLnRoZW1lSW5mby5pc0luc3RhbGxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy50aGVtZUluZm8uaXNPdXRkYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgaC04IHB4LTIgcHktMSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCBib3JkZXItMCByb3VuZGVkIHNoYWRvdy14bCB3aGl0ZXNwYWNlLW5vd3JhcCBiZy1wcmltYXJ5LTUwMCBob3ZlcjpiZy1wcmltYXJ5LTYwMCBzaGFkb3ctcHJpbWFyeS01MDAvMjAgdHctYWNjZXNzaWJpbGl0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVs0XSB8fCAoX2NhY2hlWzRdID0gKCRldmVudDogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R4LiRlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZC11cGRhdGUtdGhlbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cGRhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJvcHMudGhlbWVJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9wcy50aGVtZUluZm8udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVsxMF0gfHwgKF9jYWNoZVsxMF0gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDIwIDIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdi01YWRlNjhkYVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJkYXNoaWNvbnM6dXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJibG9jayB3LTQgaC00IG14LWF1dG8gaWNvbmlmeSBpY29uaWZ5LS1kYXNoaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMTAuMiAzLjI4YzMuNTMgMCA2LjQzIDIuNjEgNi45MiA2aDIuMDhsLTMuNSA0bC0zLjUtNGgyLjMyYTQuNDM5IDQuNDM5IDAgMCAwLTQuMzItMy40NWMtMS40NSAwLTIuNzMuNzEtMy41NCAxLjc4TDQuOTUgNS42NmE2Ljk2NSA2Ljk2NSAwIDAgMSA1LjI1LTIuMzh6bS0uNCAxMy40NGMtMy41MiAwLTYuNDMtMi42MS02LjkyLTZILjhsMy41LTRjMS4xNyAxLjMzIDIuMzMgMi42NyAzLjUgNEg1LjQ4YTQuNDM5IDQuNDM5IDAgMCAwIDQuMzIgMy40NWMxLjQ1IDAgMi43My0uNzEgMy41NC0xLjc4bDEuNzEgMS45NWE2Ljk1IDYuOTUgMCAwIDEtNS4yNSAyLjM4elwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIF0sIC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKFwiIOabtOaWsCBcIiwgLTEpXG4gICAgICAgICAgICAgICAgICAgIF0pKV0pKVxuICAgICAgICAgICAgICAgICAgOiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljazogX2NhY2hlWzVdIHx8IChfY2FjaGVbNV0gPSAoJGV2ZW50OiBhbnkpID0+IChjaGFuZ2VUaGVtZShfX3Byb3BzLnRoZW1lSW5mby5uYW1lKSkpLFxuICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6IFwi5Li76aKY5bey5a6J6KOF77yM5bqU55So5b2T5YmN5Li76aKYXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZmxvdzogXCJkb3duXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGgtOCBweC0yIHB5LTEgdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgYm9yZGVyLTAgcm91bmRlZCBzaGFkb3cteGwgd2hpdGVzcGFjZS1ub3dyYXAgYmctcHJpbWFyeS01MDAgaG92ZXI6YmctcHJpbWFyeS02MDAgc2hhZG93LXByaW1hcnktNTAwLzIwIHR3LWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVsxMV0gfHwgKF9jYWNoZVsxMV0gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdi01YWRlNjhkYVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJpY29uLXBhcmstb3V0bGluZTpsaW5rLWNsb3VkLXN1Y2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiYmxvY2sgdy00IGgtNCBteC1hdXRvIGljb25pZnkgaWNvbmlmeS0taWNvbi1wYXJrLW91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWxpbmVqb2luXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk0xMiAzM2MtMy4zMzMgMC04LTEuNS04LTcuNWMwLTcgNy04LjUgOS04LjVjMS0zLjUgMy05IDExLTljNyAwIDEwIDQgMTEgNy41YzAgMCA5IDEgOSA5LjVjMCA2LTQgOC04IDhcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIm0xOCAzM2w2IDVsOC0xMFwiIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIF0sIC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKFwiIOW6lOeUqCBcIiwgLTEpXG4gICAgICAgICAgICAgICAgICAgIF0pKV0pKVxuICAgICAgICAgICAgXSwgNTEyKSwgW1xuICAgICAgICAgICAgICBbX3ZTaG93LCBfdW5yZWYoaXNVc2VyTG9naW4pXVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgXSlcbiAgICBdKVxuICBdKSlcbn1cbn1cblxufSkiLCIvKlxyXG4gKiBAQXV0aG9yOiBjdW1hbnkgY3VtYW5AcXEuY29tXHJcbiAqIEBEYXRlOiAyMDIzLTA3LTI1IDIzOjU4OjI4XHJcbiAqIEBMYXN0RWRpdG9yczogY3VtYW55IGN1bWFuQHFxLmNvbVxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDI0LTA1LTMwIDEyOjI4OjE4XHJcbiAqIEBEZXNjcmlwdGlvbjogXHJcbiAqL1xyXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB0eXBlIHsgVGhlbWVJbmZvIH0gZnJvbSBcIkAvdHlwZXMvdGhlbWVcIlxyXG5cclxuY29uc3QgQkFTRV9BUElfVVJMID0gJ2h0dHBzOi8vYXBpLnBrbWVyLmNuL2FwaS92MS9kb3dubG9hZC9vYnNpZGlhbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuUGx1Z2luSW5mbyB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHJlcG86IHN0cmluZztcclxuICAgIGF1dGhvcjogc3RyaW5nO1xyXG4gICAgdmVyc2lvbjogc3RyaW5nO1xyXG4gICAgZG93bmxvYWRDb3VudDogbnVtYmVyO1xyXG4gICAgaXNEZXNrdG9wT25seTogYm9vbGVhbjtcclxuICAgIHVwZGF0ZWRUaW1lOiBzdHJpbmc7XHJcbiAgICBwbHVnaW5VcGRhdGVkVGltZTogc3RyaW5nO1xyXG4gICAgYmFubmVyOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgY2F0ZWdvcnk6IHN0cmluZyB8IG51bGw7XHJcbiAgICBzY29yZTogbnVtYmVyIHwgbnVsbDtcclxuICAgIGlzSW5zdGFsbGVkOiBib29sZWFuO1xyXG4gICAgaXNPdXRkYXRlZDogYm9vbGVhbjtcclxuXHJcbn1cclxuXHJcbi8vIGV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5UaGVtZUluZm8ge1xyXG4vLyAgICAgaWQ6IHN0cmluZztcclxuLy8gICAgIG5hbWU6IHN0cmluZztcclxuLy8gICAgIHJlcG86IHN0cmluZztcclxuLy8gICAgIGF1dGhvcjogc3RyaW5nO1xyXG4vLyAgICAgYXV0aG9yQXZhdGFyOiBzdHJpbmcgfCBudWxsO1xyXG4vLyAgICAgYmFubmVyOiBzdHJpbmcgfCBudWxsO1xyXG4vLyAgICAgbW9kZXM6IHN0cmluZztcclxuLy8gICAgIHRhZ3M6IHN0cmluZyB8IG51bGw7XHJcbi8vICAgICBzY29yZTogbnVtYmVyIHwgbnVsbDtcclxuLy8gICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbi8vICAgICBjaGluZXNlRGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XHJcbi8vICAgICB2ZXJzaW9uOiBzdHJpbmc7XHJcbi8vICAgICB1cGRhdGVkVGltZTogc3RyaW5nO1xyXG4vLyAgICAgZG93bmxvYWRDb3VudDogbnVtYmVyO1xyXG4vLyAgICAgcGttZXJEb3dubG9hZENvdW50OiBudW1iZXI7XHJcbi8vICAgICBkb3dubG9hZFVybDogc3RyaW5nO1xyXG4vLyAgICAgc291cmNlOiBzdHJpbmcgfCBudWxsO1xyXG4vLyAgICAgY29udGVudFVybDogc3RyaW5nIHwgbnVsbDtcclxuLy8gICAgIGlzSW5zdGFsbGVkOiBib29sZWFuIHwgbnVsbDtcclxuLy8gICAgIGlzT3V0ZGF0ZWQ6IGJvb2xlYW4gfCBudWxsO1xyXG4vLyAgICAgX19lbnRpdHk6IHN0cmluZyB8IG51bGw7XHJcbi8vIH1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGttZXJEb2NzSW5mbyB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgc2x1Zzogc3RyaW5nO1xyXG4gICAgdWlkOiBudW1iZXI7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcclxuICAgIGF1dGhvcjogc3RyaW5nO1xyXG4gICAgYXV0aG9yQXZhdGFyOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB0YWdzOiBzdHJpbmdbXTtcclxuICAgIG1vZGlmaWVkOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQa21lckFwaSB7XHJcbiAgICB0b2tlbjogc3RyaW5nXHJcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hXaXRoVG9rZW4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gZmV0Y2godXJsLCB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiAnQmVhcmVyICcgKyB0aGlzLnRva2VuLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvLyBhc3luYyBpc1VzZXJMb2dpbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuXHJcbiAgICAvLyAgICAgcmV0dXJuICEhdGhpcy50b2tlblxyXG4gICAgLy8gfVxyXG4gICAgaXNUb2tlbkV4cGlyZWQodG9rZW46IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lc3RhbXAgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTsgLy8g5b2T5YmN5pe26Ze055qE5pe26Ze05oizXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lc3RhbXAgPiB0b2tlbi5leHA7XHJcbiAgICB9XHJcblxyXG4gICBcclxuICAgIGFzeW5jIGlzVXNlckxvZ2luKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbjtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIC8vIE5vIHRva2VuIHByZXNlbnRcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHRva2VuLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgLy8gQSB2YWxpZCBKV1QgbXVzdCBoYXZlIDMgcGFydHMsIGJ1dCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgcGF5bG9hZCAoc2Vjb25kIHBhcnQpXHJcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyIHx8ICFwYXJ0c1sxXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlBrbWVyIFRva2VuIGlzIG1hbGZvcm1lZDogZG9lcyBub3QgY29udGFpbiBlbm91Z2ggcGFydHMuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYSB2YWxpZCBKV1Qgc3RydWN0dXJlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZEJhc2U2NFVybCA9IHBhcnRzWzFdO1xyXG4gICAgICAgICAgICAvLyBSZXBsYWNlIEJhc2U2NCBVUkwgc3BlY2lmaWMgY2hhcmFjdGVyc1xyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkQmFzZTY0ID0gcGF5bG9hZEJhc2U2NFVybC5yZXBsYWNlKC8tL2csIFwiK1wiKS5yZXBsYWNlKC9fL2csIFwiL1wiKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFBhZCB3aXRoICc9JyBpZiBuZWNlc3NhcnkgZm9yIGF0b2JcclxuICAgICAgICAgICAgY29uc3QgZGVjb2RlZFBheWxvYWRKc29uID0gd2luZG93LmF0b2IocGF5bG9hZEJhc2U2NCk7XHJcbiAgICAgICAgICAgIGlmICghZGVjb2RlZFBheWxvYWRKc29uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUGttZXIgVG9rZW4gaXMgbWFsZm9ybWVkOiBwYXlsb2FkIGNvdWxkIG5vdCBiZSBiYXNlNjQgZGVjb2RlZC5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZFRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGRlY29kZWRQYXlsb2FkSnNvbikpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWQoZGVjcnlwdGVkVG9rZW4pKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlBrbWVyIFRva2VuIGhhcyBleHBpcmVkLiBQbGVhc2UgbG9nIGluIGFnYWluIHRvIGdldCBhIG5ldyB0b2tlbi5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUb2tlbiBpcyBwcmVzZW50LCBhcHBlYXJzIHN0cnVjdHVyYWxseSB2YWxpZCwgYW5kIGlzIG5vdCBleHBpcmVkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBjYXRjaCBlcnJvcnMgZnJvbTpcclxuICAgICAgICAgICAgLy8gLSB3aW5kb3cuYXRvYiBpZiBwYXlsb2FkQmFzZTY0IGlzIG5vdCB2YWxpZCBiYXNlNjRcclxuICAgICAgICAgICAgLy8gLSBKU09OLnBhcnNlIGlmIGRlY29kZWRQYXlsb2FkSnNvbiBpcyBub3QgdmFsaWQgSlNPTlxyXG4gICAgICAgICAgICAvLyAtIE90aGVyIHVuZXhwZWN0ZWQgZXJyb3JzIGR1cmluZyB0aGUgcHJvY2Vzc1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcHJvY2Vzc2luZyBQa21lciBUb2tlbiAobGlrZWx5IG1hbGZvcm1lZCBvciBjb3JydXB0ZWQpOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVHJlYXQgYW55IGVycm9yIGR1cmluZyBwYXJzaW5nL2RlY29kaW5nIGFzIG5vdCBsb2dnZWQgaW5cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBnZXRQa21lckRvY3MoKTogUHJvbWlzZTwoeyBzbHVnOiBzdHJpbmcsIHVpZDogbnVtYmVyLGF1dGhvckF2YXRhcjpzdHJpbmcsZGVzY3JpcHRpb246c3RyaW5nLHRhZ3M6c3RyaW5nIH0pW10+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoXCJodHRwczovL3BrbWVyLmNuL2dldFBvc3QuanNvblwiKVxyXG4gICAgIFxyXG4gICAgICAgIGNvbnN0IHBrbWVyRG9jc0luZm8gPSBKU09OLnBhcnNlKHJlc3BvbnNlLnRleHQpIGFzIFBrbWVyRG9jc0luZm9bXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBrbWVyRG9jc0luZm8ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBzbHVnOiBpdGVtLnNsdWcuc3BsaXQoJy8nKS5wb3AoKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICB1aWQ6IGl0ZW0udWlkLFxyXG4gICAgICAgICAgICAgICAgYXV0aG9yQXZhdGFyOiBpdGVtLmF1dGhvckF2YXRhcixcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGFnczogQXJyYXkuaXNBcnJheShpdGVtLnRhZ3MpID8gaXRlbS50YWdzLmpvaW4oJywgJykgOiBpdGVtLnRhZ3NcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGFzeW5jIGdldERvd25sb2FkVXJsKHBsdWdpbklkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgaWYgKHBsdWdpbklkID09IFwib2JzaWRpYW4tcGttZXJcIikgcmV0dXJuICdodHRwczovL3BrbWVyLmNuL19yZWxlYXNlL29ic2lkaWFuLXBrbWVyLnppcCcgKyBgP3Y9JHt2ZXJzaW9ufWA7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFRva2VuKEJBU0VfQVBJX1VSTCArICcvZ2V0UGx1Z2luRG93bmxvYWRVcmwvJyArIHBsdWdpbklkICsgJy8nICsgdmVyc2lvbiwge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLnRleHQoKSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBnZXREb3dubG9hZFVybEJ5VmVyc2lvbihwbHVnaW5JZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmIChwbHVnaW5JZCA9PSBcIm9ic2lkaWFuLXBrbWVyXCIpIHJldHVybiAnaHR0cHM6Ly9wa21lci5jbi9fcmVsZWFzZS9vYnNpZGlhbi1wa21lci56aXAnICsgYD92PSR7dmVyc2lvbn1gO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUb2tlbihcclxuICAgICAgICAgICAgICAgIEJBU0VfQVBJX1VSTCArIGAvZ2V0UGx1Z2luRG93bmxvYWRVcmwvJHtwbHVnaW5JZH0vJHt2ZXJzaW9ufT91c2VWZXJzaW9uPXRydWVgXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKSA7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGRvd25sb2FkIFVSTCBmb3IgcGx1Z2luICR7cGx1Z2luSWR9IHZlcnNpb24gJHt2ZXJzaW9ufTpgLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yOyAvLyDmiJbogIXmoLnmja7pnIDmsYLov5Tlm57nqbrlrZfnrKbkuLLvvJpyZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgYXN5bmMgZ2V0UGx1Z2luVmVyc2lvbnMocGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyDkvb/nlKggZmV0Y2hXaXRoVG9rZW4g6I635Y+W5ZON5bqUXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUb2tlbihgaHR0cHM6Ly9hcGkucGttZXIuY24vYXBpL3YxL2Rvd25sb2FkLyR7cGx1Z2luSWR9L3ZlcnNpb25zYCk7XHJcbiAgICAgICAgICAgIC8vIOajgOafpeWTjeW6lOaYr+WQpuaIkOWKn1xyXG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIFN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8g6Kej5p6Q5ZON5bqU5Li6IEpTT05cclxuICAgICAgICAgICAgY29uc3QganNvblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgXHJcbiAgICAgICAgICAgIC8vIOWBh+iuviByZXNwb25zZSDnmoTnu5PmnoTmmK8geyBkYXRhOiBzdHJpbmdbXSwgbWV0YTogeyBwYWdlOiBudW1iZXIsIGxpbWl0OiBudW1iZXIsIHRvdGFsOiBudW1iZXIsIHRvdGFsUGFnZXM6IG51bWJlciB9IH1cclxuICAgICAgICAgICAgY29uc3QgdXJscyA9IGpzb25SZXNwb25zZS5kYXRhIHx8IGpzb25SZXNwb25zZTsgLy8g5aaC5p6c5rKh5pyJIGRhdGEg5a2X5q6177yM55u05o6l5L2/55SoIGpzb25SZXNwb25zZVxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDku44gVVJMIOS4reaPkOWPlueJiOacrOWPt1xyXG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9ucyA9IHVybHNcclxuICAgICAgICAgICAgICAgIC5tYXAoKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShgaHR0cHM6Ly9kb3dubG9hZC5wa21lci5jbi9vYnNpZGlhbi1wbHVnaW5zLyR7cGx1Z2luSWR9LWAsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLnppcCcsICcnKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh2ZXJzaW9uOiBzdHJpbmcpID0+IHZlcnNpb24gIT09ICcnKTsgLy8g6L+H5ruk5o6J5peg5rOV6Kej5p6Q55qE54mI5pys5Y+3XHJcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9ucztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggdmVyc2lvbnMgZm9yIHBsdWdpbiAke3BsdWdpbklkfTpgLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yOyAvLyDmiJbogIXmoLnmja7pnIDmsYLov5Tlm57nqbrmlbDnu4TvvJpyZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFRoZW1lRG93bmxvYWRVcmxCeVZlcnNpb24gKHRoZW1lSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ICB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFRva2VuKFxyXG4gICAgICAgICAgICAgICAgQkFTRV9BUElfVVJMICsgYC9nZXRUaGVtZURvd25sb2FkVXJsLyR7dGhlbWVJZH0vJHt2ZXJzaW9ufT91c2VWZXJzaW9uPXRydWVgXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkgO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBkb3dubG9hZCBVUkwgZm9yIHRoZW1lICR7dGhlbWVJZH0gdmVyc2lvbiAke3ZlcnNpb259OmAsIGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7IC8vIOaIluiAheagueaNrumcgOaxgui/lOWbnuepuuWtl+espuS4su+8mnJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICBhc3luYyAgZ2V0VGhlbWVWZXJzaW9ucyh0aGVtZUlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiAge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUb2tlbihgaHR0cHM6Ly9hcGkucGttZXIuY24vYXBpL3YxL2Rvd25sb2FkLyR7dGhlbWVJZH0vdGhlbWV2ZXJzaW9uc2ApO1xyXG4gICAgICAgICAgICAvLyDlgYforr4gcmVzcG9uc2Ug55qE57uT5p6E5pivIHsgZGF0YTogc3RyaW5nW10sIG1ldGE6IHsgcGFnZTogbnVtYmVyLCBsaW1pdDogbnVtYmVyLCB0b3RhbDogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXIgfSB9XHJcbiAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgY29uc3QgdXJscyA9IGpzb25SZXNwb25zZS5kYXRhIHx8IGpzb25SZXNwb25zZTsgLy8g5aaC5p6c5rKh5pyJIGRhdGEg5a2X5q6177yM55u05o6l5L2/55SoIGpzb25SZXNwb25zZVxyXG4gICAgICAgICAgICAvLyDku44gVVJMIOS4reaPkOWPlueJiOacrOWPt1xyXG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9ucyA9IHVybHNcclxuICAgICAgICAgICAgICAgIC5tYXAoKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShgaHR0cHM6Ly9kb3dubG9hZC5wa21lci5jbi9vYnNpZGlhbi10aGVtZXMvJHt0aGVtZUlkfS1gLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJy56aXAnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodmVyc2lvbjogc3RyaW5nKSA9PiB2ZXJzaW9uICE9PSAnJyk7IC8vIOi/h+a7pOaOieaXoOazleino+aekOeahOeJiOacrOWPt1xyXG4gICAgICAgICAgICByZXR1cm4gdmVyc2lvbnM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIHZlcnNpb25zIGZvciB0aGVtZSAke3RoZW1lSWR9OmAsIGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7IC8vIOaIluiAheagueaNrumcgOaxgui/lOWbnuepuuaVsOe7hO+8mnJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICBhc3luYyBnZXREb3dubG9hZENvdW50KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFRva2VuKEJBU0VfQVBJX1VSTCArICcvZ2V0UGx1Z2luRG93bmxvYWRDb3VudCcpXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGF3YWl0IHJlc3BvbnNlLnRleHQoKSkgKyAxIGFzIHVua25vd24gYXMgbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFRvcDIwUGx1Z2lucygpOiBQcm9taXNlPE9ic2lkaWFuUGx1Z2luSW5mb1tdPiB7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b3AyMFBsdWdpbnMnKTtcclxuICAgICAgICBjb25zdCBjYWNoZWRFeHBpcnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9wMjBQbHVnaW5zRXhwaXJ5Jyk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNhY2hlZERhdGEgJiYgY2FjaGVkRXhwaXJ5ICYmIGN1cnJlbnRUaW1lIDwgK2NhY2hlZEV4cGlyeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShjYWNoZWREYXRhKSBhcyBPYnNpZGlhblBsdWdpbkluZm9bXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoVG9rZW4oQkFTRV9BUElfVVJMICsgJy9nZXRUb3AyMFBsdWdpbnMnKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBPYnNpZGlhblBsdWdpbkluZm9bXTtcclxuXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b3AyMFBsdWdpbnMnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b3AyMFBsdWdpbnNFeHBpcnknLCBTdHJpbmcoY3VycmVudFRpbWUgKyA4ICogNjAgKiA2MCAqIDEwMDApKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIHNlYXJjaFBsdWdpbnMoa2V5d29yZDogc3RyaW5nKTogUHJvbWlzZTxPYnNpZGlhblBsdWdpbkluZm9bXT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUb2tlbihCQVNFX0FQSV9VUkwgKyAnL3NlYXJjaFBsdWdpbnMnICsgJz9rZXl3b3JkPScgKyBrZXl3b3JkICsgJyZsaW1pdD0xMCcsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgT2JzaWRpYW5QbHVnaW5JbmZvW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXN5bmMgZ2V0UGx1Z2luTGlzdChjYWNoZUV4cGlyeVRpbWVJbk1zOiBudW1iZXIgPSAxICogNjAgKiA2MCAqIDEwMDApOiBQcm9taXNlPE9ic2lkaWFuUGx1Z2luSW5mb1tdPiB7XHJcbiAgICAvLyAgICAgY29uc3QgY2FjaGVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwbHVnaW5MaXN0Jyk7XHJcbiAgICAvLyAgICAgY29uc3QgY2FjaGVkRXhwaXJ5ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BsdWdpbkxpc3RFeHBpcnknKTtcclxuICAgIC8vICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIC8vICAgICBpZiAoY2FjaGVkRGF0YSAmJiBjYWNoZWRFeHBpcnkpIHtcclxuICAgIC8vICAgICAgICAgY29uc3QgZXhwaXJ5VGltZSA9IHBhcnNlSW50KGNhY2hlZEV4cGlyeSk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjdXJyZW50VGltZSA8IGV4cGlyeVRpbWUpIHtcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGNhY2hlZERhdGEpIGFzIE9ic2lkaWFuUGx1Z2luSW5mb1tdO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICB0cnkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoVG9rZW4oQkFTRV9BUElfVVJMICsgJy9nZXRBbGxQbHVnaW5zJywge1xyXG4gICAgLy8gICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIC8vICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgT2JzaWRpYW5QbHVnaW5JbmZvW107XHJcblxyXG4gICAgLy8gICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGx1Z2luTGlzdCcsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIC8vICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BsdWdpbkxpc3RFeHBpcnknLCBTdHJpbmcoY3VycmVudFRpbWUgKyBjYWNoZUV4cGlyeVRpbWVJbk1zKSk7XHJcblxyXG4gICAgLy8gICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIC8vICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8gICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwbHVnaW4gbGlzdDonLCBlcnJvcik7XHJcbiAgICAvLyAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyDmlrDlop7liIbpobXojrflj5bmj5Lku7bmlrnms5VcclxuICAgIGFzeW5jIGdldFBsdWdpbkxpc3RQYWdpbmF0ZWQocGFnZTogbnVtYmVyID0gMSwgcGFnZVNpemU6IG51bWJlciA9IDI0LCBzb3J0Qnk6IHN0cmluZyA9IFwiZG93bmxvYWRDb3VudFwiLCBzb3J0T3JkZXI6IHN0cmluZyA9IFwiREVTQ1wiKTogUHJvbWlzZTx7cGx1Z2luczogT2JzaWRpYW5QbHVnaW5JbmZvW10sIHRvdGFsOiBudW1iZXIsIHRvdGFsUGFnZXM6IG51bWJlcn0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoVG9rZW4oYCR7QkFTRV9BUElfVVJMfS9nZXRQbHVnaW5zUGFnaW5hdGVkP3BhZ2U9JHtwYWdlfSZsaW1pdD0ke3BhZ2VTaXplfSZzb3J0Qnk9JHtzb3J0Qnl9JnNvcnRPcmRlcj0ke3NvcnRPcmRlcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luczogcmVzdWx0LmRhdGEsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogcmVzdWx0Lm1ldGEudG90YWwsXHJcbiAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzOiByZXN1bHQubWV0YS50b3RhbFBhZ2VzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGFnaW5hdGVkIHBsdWdpbiBsaXN0OicsIGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOaWsOWinuaQnOe0ouW4puWIhumhteWKn+iDveeahOaWueazlVxyXG4gICAgYXN5bmMgc2VhcmNoUGx1Z2luc1BhZ2luYXRlZChzZWFyY2hUZXh0OiBzdHJpbmcsIHBhZ2U6IG51bWJlciA9IDEsIHBhZ2VTaXplOiBudW1iZXIgPSAyNCwgc29ydEJ5OiBzdHJpbmcgPSBcImRvd25sb2FkQ291bnRcIiwgc29ydE9yZGVyOiBzdHJpbmcgPSBcIkRFU0NcIik6IFByb21pc2U8e3BsdWdpbnM6IE9ic2lkaWFuUGx1Z2luSW5mb1tdLCB0b3RhbDogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXJ9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFRva2VuKGAke0JBU0VfQVBJX1VSTH0vc2VhcmNoUGx1Z2luc1BhZ2luYXRlZD9zZWFyY2hUZXh0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaFRleHQpfSZwYWdlPSR7cGFnZX0mbGltaXQ9JHtwYWdlU2l6ZX0mc29ydEJ5PSR7c29ydEJ5fSZzb3J0T3JkZXI9JHtzb3J0T3JkZXJ9YCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbnM6IHJlc3VsdC5kYXRhLFxyXG4gICAgICAgICAgICAgICAgdG90YWw6IHJlc3VsdC5tZXRhLnRvdGFsLFxyXG4gICAgICAgICAgICAgICAgdG90YWxQYWdlczogcmVzdWx0Lm1ldGEudG90YWxQYWdlc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlYXJjaGluZyBwbHVnaW5zIHdpdGggcGFnaW5hdGlvbjonLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRUb3AyMFRoZW1lcygpOiBQcm9taXNlPFRoZW1lSW5mb1tdPiB7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b3AyMFRoZW1lcycpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEV4cGlyeSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b3AyMFRoZW1lc0V4cGlyeScpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZWREYXRhICYmIGNhY2hlZEV4cGlyeSAmJiBjdXJyZW50VGltZSA8ICtjYWNoZWRFeHBpcnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY2FjaGVkRGF0YSkgYXMgVGhlbWVJbmZvW107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFRva2VuKEJBU0VfQVBJX1VSTCArICcvZ2V0VG9wMjBUaGVtZXMnKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBUaGVtZUluZm9bXTtcclxuXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b3AyMFRoZW1lcycsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RvcDIwVGhlbWVzRXhwaXJ5JywgU3RyaW5nKGN1cnJlbnRUaW1lICsgOCAqIDYwICogNjAgKiAxMDAwKSk7IC8vIFNldCB0aGUgZXhwaXJ5IHRpbWUgYWNjb3JkaW5nIHRvIHlvdXIgcmVxdWlyZW1lbnRzXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0VGhlbWVMaXN0KGNhY2hlRXhwaXJ5VGltZUluTXM6IG51bWJlciA9IDEgKiA2MCAqIDYwICogMTAwMCk6IFByb21pc2U8VGhlbWVJbmZvW10+IHtcclxuICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lTGlzdCcpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEV4cGlyeSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0aGVtZUxpc3RFeHBpcnknKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGVkRGF0YSAmJiBjYWNoZWRFeHBpcnkgJiYgY3VycmVudFRpbWUgPCArY2FjaGVkRXhwaXJ5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGNhY2hlZERhdGEpIGFzIFRoZW1lSW5mb1tdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoVG9rZW4oQkFTRV9BUElfVVJMICsgJy9nZXRBbGxUaGVtZXMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBUaGVtZUluZm9bXTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGhlbWVMaXN0JywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RoZW1lTGlzdEV4cGlyeScsIFN0cmluZyhjdXJyZW50VGltZSArIGNhY2hlRXhwaXJ5VGltZUluTXMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHRoZW1lIGxpc3Q6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5paw5aKe5YiG6aG16I635Y+W5Li76aKY5pa55rOVXHJcbiAgICBhc3luYyBnZXRUaGVtZUxpc3RQYWdpbmF0ZWQocGFnZTogbnVtYmVyID0gMSwgcGFnZVNpemU6IG51bWJlciA9IDI0LCBzb3J0Qnk6IHN0cmluZyA9IFwiZG93bmxvYWRDb3VudFwiLCBzb3J0T3JkZXI6IHN0cmluZyA9IFwiREVTQ1wiKTogUHJvbWlzZTx7dGhlbWVzOiBUaGVtZUluZm9bXSwgdG90YWw6IG51bWJlciwgdG90YWxQYWdlczogbnVtYmVyfT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUb2tlbihgJHtCQVNFX0FQSV9VUkx9L2dldFRoZW1lc1BhZ2luYXRlZD9wYWdlPSR7cGFnZX0mbGltaXQ9JHtwYWdlU2l6ZX0mc29ydEJ5PSR7c29ydEJ5fSZzb3J0T3JkZXI9JHtzb3J0T3JkZXJ9YCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHRoZW1lczogcmVzdWx0LmRhdGEsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogcmVzdWx0Lm1ldGEudG90YWwsXHJcbiAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzOiByZXN1bHQubWV0YS50b3RhbFBhZ2VzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGFnaW5hdGVkIHRoZW1lIGxpc3Q6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5paw5aKe5pCc57Si5Li76aKY5bim5YiG6aG15Yqf6IO955qE5pa55rOVXHJcbiAgICBhc3luYyBzZWFyY2hUaGVtZXNQYWdpbmF0ZWQoc2VhcmNoVGV4dDogc3RyaW5nLCBwYWdlOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gMjQsIHNvcnRCeTogc3RyaW5nID0gXCJkb3dubG9hZENvdW50XCIsIHNvcnRPcmRlcjogc3RyaW5nID0gXCJERVNDXCIpOiBQcm9taXNlPHt0aGVtZXM6IFRoZW1lSW5mb1tdLCB0b3RhbDogbnVtYmVyLCB0b3RhbFBhZ2VzOiBudW1iZXJ9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFRva2VuKGAke0JBU0VfQVBJX1VSTH0vc2VhcmNoVGhlbWVzUGFnaW5hdGVkP3NlYXJjaFRleHQ9JHtlbmNvZGVVUklDb21wb25lbnQoc2VhcmNoVGV4dCl9JnBhZ2U9JHtwYWdlfSZsaW1pdD0ke3BhZ2VTaXplfSZzb3J0Qnk9JHtzb3J0Qnl9JnNvcnRPcmRlcj0ke3NvcnRPcmRlcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdGhlbWVzOiByZXN1bHQuZGF0YSxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiByZXN1bHQubWV0YS50b3RhbCxcclxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXM6IHJlc3VsdC5tZXRhLnRvdGFsUGFnZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZWFyY2hpbmcgdGhlbWVzIHdpdGggcGFnaW5hdGlvbjonLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRUaGVtZURvd25sb2FkVXJsKHRoZW1lTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUb2tlbihCQVNFX0FQSV9VUkwgKyAnL2dldFRoZW1lRG93bmxvYWRVcmwvJyArIHRoZW1lTmFtZSArICcvJyArIHZlcnNpb24sIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS50ZXh0KCkgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgZ2V0UGttZXJWZXJzaW9uKCk6IFByb21pc2U8KHN0cmluZyB8IHVuZGVmaW5lZClbXT4ge1xyXG4gICAgICAgIGNvbnN0IHJhbmRvbVBhcmFtID0gTWF0aC5yYW5kb20oKTtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoXCJodHRwczovL3BrbWVyLmNuL19yZWxlYXNlL21hbmlmZXN0Lmpzb25cIiArIGA/Xz0ke3JhbmRvbVBhcmFtfWApXHJcbiAgICAgICAgY29uc3QgbWFpbmZlc3RJbmZvID0gSlNPTi5wYXJzZShyZXNwb25zZS50ZXh0KTtcclxuICAgICAgICByZXR1cm4gbWFpbmZlc3RJbmZvLnZlcnNpb247XHJcbiAgICB9XHJcbiAgICAvLyBhc3luYyBnZXRQbHVnaW5JbmZvKGlkOiBzdHJpbmcpOiBQcm9taXNlPE9ic2lkaWFuUGx1Z2luSW5mbz4ge1xyXG4gICAgLy8gICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhUb2tlbihCQVNFX0FQSV9VUkwgKyAnL2dldFBsdWdpbkluZm8vJyArIGlkLCB7XHJcbiAgICAvLyAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAvLyAgICAgfSlcclxuICAgIC8vICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIE9ic2lkaWFuUGx1Z2luSW5mbztcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyDmlrDlop7ojrflj5bmj5Lku7bmoIfnrb7nmoTmlrnms5VcclxuICAgIGFzeW5jIGdldFBsdWdpblRhZ3MoKTogUHJvbWlzZTx7dGFnOiBzdHJpbmcsIGNvdW50OiBudW1iZXJ9W10+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoVG9rZW4oYCR7QkFTRV9BUElfVVJMfS9nZXRQbHVnaW5UYWdzYCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGx1Z2luIHRhZ3M6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOaWsOWinuiOt+WPluW3suWuieijheaPkuS7tueahOaWueazlVxyXG4gICAgYXN5bmMgZ2V0SW5zdGFsbGVkUGx1Z2luc1BhZ2luYXRlZChcclxuICAgICAgICBwbHVnaW5JZHM6IHN0cmluZ1tdLFxyXG4gICAgICAgIHBhZ2U6IG51bWJlciA9IDEsXHJcbiAgICAgICAgcGFnZVNpemU6IG51bWJlciA9IDI0LFxyXG4gICAgICAgIHNvcnRCeTogc3RyaW5nID0gXCJkb3dubG9hZENvdW50XCIsXHJcbiAgICAgICAgc29ydE9yZGVyOiBzdHJpbmcgPSBcIkRFU0NcIlxyXG4gICAgKTogUHJvbWlzZTx7cGx1Z2luczogT2JzaWRpYW5QbHVnaW5JbmZvW10sIHRvdGFsOiBudW1iZXIsIHRvdGFsUGFnZXM6IG51bWJlcn0+IHtcclxuICAgICAgICBpZiAoIXBsdWdpbklkcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuaPkuS7tklE5YiX6KGo5LiN6IO95Li656m6XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoVG9rZW4oXHJcbiAgICAgICAgICAgICAgICBgJHtCQVNFX0FQSV9VUkx9L2dldEluc3RhbGxlZFBsdWdpbnNQYWdpbmF0ZWQ/cGFnZT0ke3BhZ2V9JnBhZ2VTaXplPSR7cGFnZVNpemV9JnNvcnRCeT0ke3NvcnRCeX0mc29ydE9yZGVyPSR7c29ydE9yZGVyfWAsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwbHVnaW5JZHMgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSB8fCAn6K+35rGC5aSx6LSlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbnM6IHJlc3VsdD8uZGF0YSxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiByZXN1bHQubWV0YT8udG90YWx8fDAsXHJcbiAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzOiByZXN1bHQubWV0YT8udG90YWxQYWdlc3x8MVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGluc3RhbGxlZCBwbHVnaW5zOicsIGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsIi8qIVxuXG5KU1ppcCB2My4xMC4xIC0gQSBKYXZhU2NyaXB0IGNsYXNzIGZvciBnZW5lcmF0aW5nIGFuZCByZWFkaW5nIHppcCBmaWxlc1xuPGh0dHA6Ly9zdHVhcnRrLmNvbS9qc3ppcD5cblxuKGMpIDIwMDktMjAxNiBTdHVhcnQgS25pZ2h0bGV5IDxzdHVhcnQgW2F0XSBzdHVhcnRrLmNvbT5cbkR1YWwgbGljZW5jZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIG9yIEdQTHYzLiBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9TdHVrL2pzemlwL21haW4vTElDRU5TRS5tYXJrZG93bi5cblxuSlNaaXAgdXNlcyB0aGUgbGlicmFyeSBwYWtvIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSA6XG5odHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28vYmxvYi9tYWluL0xJQ0VOU0VcbiovXG5cbiFmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGUpO2Vsc2V7KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuSlNaaXA9ZSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gcyhhLG8saCl7ZnVuY3Rpb24gdShyLGUpe2lmKCFvW3JdKXtpZighYVtyXSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZSYmdClyZXR1cm4gdChyLCEwKTtpZihsKXJldHVybiBsKHIsITApO3ZhciBuPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrcitcIidcIik7dGhyb3cgbi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLG59dmFyIGk9b1tyXT17ZXhwb3J0czp7fX07YVtyXVswXS5jYWxsKGkuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgdD1hW3JdWzFdW2VdO3JldHVybiB1KHR8fGUpfSxpLGkuZXhwb3J0cyxzLGEsbyxoKX1yZXR1cm4gb1tyXS5leHBvcnRzfWZvcih2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGgubGVuZ3RoO2UrKyl1KGhbZV0pO3JldHVybiB1fSh7MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBkPWUoXCIuL3V0aWxzXCIpLGM9ZShcIi4vc3VwcG9ydFwiKSxwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtyLmVuY29kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGkscyxhLG8saD1bXSx1PTAsbD1lLmxlbmd0aCxmPWwsYz1cInN0cmluZ1wiIT09ZC5nZXRUeXBlT2YoZSk7dTxlLmxlbmd0aDspZj1sLXUsbj1jPyh0PWVbdSsrXSxyPXU8bD9lW3UrK106MCx1PGw/ZVt1KytdOjApOih0PWUuY2hhckNvZGVBdCh1KyspLHI9dTxsP2UuY2hhckNvZGVBdCh1KyspOjAsdTxsP2UuY2hhckNvZGVBdCh1KyspOjApLGk9dD4+MixzPSgzJnQpPDw0fHI+PjQsYT0xPGY/KDE1JnIpPDwyfG4+PjY6NjQsbz0yPGY/NjMmbjo2NCxoLnB1c2gocC5jaGFyQXQoaSkrcC5jaGFyQXQocykrcC5jaGFyQXQoYSkrcC5jaGFyQXQobykpO3JldHVybiBoLmpvaW4oXCJcIil9LHIuZGVjb2RlPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLHMsYSxvPTAsaD0wLHU9XCJkYXRhOlwiO2lmKGUuc3Vic3RyKDAsdS5sZW5ndGgpPT09dSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBpbnB1dCwgaXQgbG9va3MgbGlrZSBhIGRhdGEgdXJsLlwiKTt2YXIgbCxmPTMqKGU9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOSsvPV0vZyxcIlwiKSkubGVuZ3RoLzQ7aWYoZS5jaGFyQXQoZS5sZW5ndGgtMSk9PT1wLmNoYXJBdCg2NCkmJmYtLSxlLmNoYXJBdChlLmxlbmd0aC0yKT09PXAuY2hhckF0KDY0KSYmZi0tLGYlMSE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBpbnB1dCwgYmFkIGNvbnRlbnQgbGVuZ3RoLlwiKTtmb3IobD1jLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoMHxmKTpuZXcgQXJyYXkoMHxmKTtvPGUubGVuZ3RoOyl0PXAuaW5kZXhPZihlLmNoYXJBdChvKyspKTw8MnwoaT1wLmluZGV4T2YoZS5jaGFyQXQobysrKSkpPj40LHI9KDE1JmkpPDw0fChzPXAuaW5kZXhPZihlLmNoYXJBdChvKyspKSk+PjIsbj0oMyZzKTw8NnwoYT1wLmluZGV4T2YoZS5jaGFyQXQobysrKSkpLGxbaCsrXT10LDY0IT09cyYmKGxbaCsrXT1yKSw2NCE9PWEmJihsW2grK109bik7cmV0dXJuIGx9fSx7XCIuL3N1cHBvcnRcIjozMCxcIi4vdXRpbHNcIjozMn1dLDI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9leHRlcm5hbFwiKSxpPWUoXCIuL3N0cmVhbS9EYXRhV29ya2VyXCIpLHM9ZShcIi4vc3RyZWFtL0NyYzMyUHJvYmVcIiksYT1lKFwiLi9zdHJlYW0vRGF0YUxlbmd0aFByb2JlXCIpO2Z1bmN0aW9uIG8oZSx0LHIsbixpKXt0aGlzLmNvbXByZXNzZWRTaXplPWUsdGhpcy51bmNvbXByZXNzZWRTaXplPXQsdGhpcy5jcmMzMj1yLHRoaXMuY29tcHJlc3Npb249bix0aGlzLmNvbXByZXNzZWRDb250ZW50PWl9by5wcm90b3R5cGU9e2dldENvbnRlbnRXb3JrZXI6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgaShuLlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXByZXNzZWRDb250ZW50KSkucGlwZSh0aGlzLmNvbXByZXNzaW9uLnVuY29tcHJlc3NXb3JrZXIoKSkucGlwZShuZXcgYShcImRhdGFfbGVuZ3RoXCIpKSx0PXRoaXM7cmV0dXJuIGUub24oXCJlbmRcIixmdW5jdGlvbigpe2lmKHRoaXMuc3RyZWFtSW5mby5kYXRhX2xlbmd0aCE9PXQudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoXCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoXCIpfSksZX0sZ2V0Q29tcHJlc3NlZFdvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgaShuLlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXByZXNzZWRDb250ZW50KSkud2l0aFN0cmVhbUluZm8oXCJjb21wcmVzc2VkU2l6ZVwiLHRoaXMuY29tcHJlc3NlZFNpemUpLndpdGhTdHJlYW1JbmZvKFwidW5jb21wcmVzc2VkU2l6ZVwiLHRoaXMudW5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oXCJjcmMzMlwiLHRoaXMuY3JjMzIpLndpdGhTdHJlYW1JbmZvKFwiY29tcHJlc3Npb25cIix0aGlzLmNvbXByZXNzaW9uKX19LG8uY3JlYXRlV29ya2VyRnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUucGlwZShuZXcgcykucGlwZShuZXcgYShcInVuY29tcHJlc3NlZFNpemVcIikpLnBpcGUodC5jb21wcmVzc1dvcmtlcihyKSkucGlwZShuZXcgYShcImNvbXByZXNzZWRTaXplXCIpKS53aXRoU3RyZWFtSW5mbyhcImNvbXByZXNzaW9uXCIsdCl9LHQuZXhwb3J0cz1vfSx7XCIuL2V4dGVybmFsXCI6NixcIi4vc3RyZWFtL0NyYzMyUHJvYmVcIjoyNSxcIi4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZVwiOjI2LFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiOjI3fV0sMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpO3IuU1RPUkU9e21hZ2ljOlwiXFwwXFwwXCIsY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oXCJTVE9SRSBjb21wcmVzc2lvblwiKX0sdW5jb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgbihcIlNUT1JFIGRlY29tcHJlc3Npb25cIil9fSxyLkRFRkxBVEU9ZShcIi4vZmxhdGVcIil9LHtcIi4vZmxhdGVcIjo3LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4fV0sNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL3V0aWxzXCIpO3ZhciBvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10scj0wO3I8MjU2O3IrKyl7ZT1yO2Zvcih2YXIgbj0wO248ODtuKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W3JdPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUmJmUubGVuZ3RoP1wic3RyaW5nXCIhPT1uLmdldFR5cGVPZihlKT9mdW5jdGlvbihlLHQscixuKXt2YXIgaT1vLHM9bityO2VePS0xO2Zvcih2YXIgYT1uO2E8czthKyspZT1lPj4+OF5pWzI1NSYoZV50W2FdKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgsMCk6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9byxzPW4rcjtlXj0tMTtmb3IodmFyIGE9bjthPHM7YSsrKWU9ZT4+PjheaVsyNTUmKGVedC5jaGFyQ29kZUF0KGEpKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgsMCk6MH19LHtcIi4vdXRpbHNcIjozMn1dLDU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLmJhc2U2ND0hMSxyLmJpbmFyeT0hMSxyLmRpcj0hMSxyLmNyZWF0ZUZvbGRlcnM9ITAsci5kYXRlPW51bGwsci5jb21wcmVzc2lvbj1udWxsLHIuY29tcHJlc3Npb25PcHRpb25zPW51bGwsci5jb21tZW50PW51bGwsci51bml4UGVybWlzc2lvbnM9bnVsbCxyLmRvc1Blcm1pc3Npb25zPW51bGx9LHt9XSw2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49bnVsbDtuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlP1Byb21pc2U6ZShcImxpZVwiKSx0LmV4cG9ydHM9e1Byb21pc2U6bn19LHtsaWU6Mzd9XSw3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQzMkFycmF5LGk9ZShcInBha29cIikscz1lKFwiLi91dGlsc1wiKSxhPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLG89bj9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7ZnVuY3Rpb24gaChlLHQpe2EuY2FsbCh0aGlzLFwiRmxhdGVXb3JrZXIvXCIrZSksdGhpcy5fcGFrbz1udWxsLHRoaXMuX3Bha29BY3Rpb249ZSx0aGlzLl9wYWtvT3B0aW9ucz10LHRoaXMubWV0YT17fX1yLm1hZ2ljPVwiXFxiXFwwXCIscy5pbmhlcml0cyhoLGEpLGgucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLm1ldGE9ZS5tZXRhLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKHMudHJhbnNmb3JtVG8obyxlLmRhdGEpLCExKX0saC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXthLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKFtdLCEwKX0saC5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2EucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLl9wYWtvPW51bGx9LGgucHJvdG90eXBlLl9jcmVhdGVQYWtvPWZ1bmN0aW9uKCl7dGhpcy5fcGFrbz1uZXcgaVt0aGlzLl9wYWtvQWN0aW9uXSh7cmF3OiEwLGxldmVsOnRoaXMuX3Bha29PcHRpb25zLmxldmVsfHwtMX0pO3ZhciB0PXRoaXM7dGhpcy5fcGFrby5vbkRhdGE9ZnVuY3Rpb24oZSl7dC5wdXNoKHtkYXRhOmUsbWV0YTp0Lm1ldGF9KX19LHIuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoKFwiRGVmbGF0ZVwiLGUpfSxyLnVuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgoXCJJbmZsYXRlXCIse30pfX0se1wiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi91dGlsc1wiOjMyLHBha286Mzh9XSw4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gQShlLHQpe3ZhciByLG49XCJcIjtmb3Iocj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmZSksZT4+Pj04O3JldHVybiBufWZ1bmN0aW9uIG4oZSx0LHIsbixpLHMpe3ZhciBhLG8saD1lLmZpbGUsdT1lLmNvbXByZXNzaW9uLGw9cyE9PU8udXRmOGVuY29kZSxmPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGgubmFtZSkpLGM9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLE8udXRmOGVuY29kZShoLm5hbWUpKSxkPWguY29tbWVudCxwPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGQpKSxtPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixPLnV0ZjhlbmNvZGUoZCkpLF89Yy5sZW5ndGghPT1oLm5hbWUubGVuZ3RoLGc9bS5sZW5ndGghPT1kLmxlbmd0aCxiPVwiXCIsdj1cIlwiLHk9XCJcIix3PWguZGlyLGs9aC5kYXRlLHg9e2NyYzMyOjAsY29tcHJlc3NlZFNpemU6MCx1bmNvbXByZXNzZWRTaXplOjB9O3QmJiFyfHwoeC5jcmMzMj1lLmNyYzMyLHguY29tcHJlc3NlZFNpemU9ZS5jb21wcmVzc2VkU2l6ZSx4LnVuY29tcHJlc3NlZFNpemU9ZS51bmNvbXByZXNzZWRTaXplKTt2YXIgUz0wO3QmJihTfD04KSxsfHwhXyYmIWd8fChTfD0yMDQ4KTt2YXIgej0wLEM9MDt3JiYoenw9MTYpLFwiVU5JWFwiPT09aT8oQz03OTgsenw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lO3JldHVybiBlfHwocj10PzE2ODkzOjMzMjA0KSwoNjU1MzUmcik8PDE2fShoLnVuaXhQZXJtaXNzaW9ucyx3KSk6KEM9MjAsenw9ZnVuY3Rpb24oZSl7cmV0dXJuIDYzJihlfHwwKX0oaC5kb3NQZXJtaXNzaW9ucykpLGE9ay5nZXRVVENIb3VycygpLGE8PD02LGF8PWsuZ2V0VVRDTWludXRlcygpLGE8PD01LGF8PWsuZ2V0VVRDU2Vjb25kcygpLzIsbz1rLmdldFVUQ0Z1bGxZZWFyKCktMTk4MCxvPDw9NCxvfD1rLmdldFVUQ01vbnRoKCkrMSxvPDw9NSxvfD1rLmdldFVUQ0RhdGUoKSxfJiYodj1BKDEsMSkrQShCKGYpLDQpK2MsYis9XCJ1cFwiK0Eodi5sZW5ndGgsMikrdiksZyYmKHk9QSgxLDEpK0EoQihwKSw0KSttLGIrPVwidWNcIitBKHkubGVuZ3RoLDIpK3kpO3ZhciBFPVwiXCI7cmV0dXJuIEUrPVwiXFxuXFwwXCIsRSs9QShTLDIpLEUrPXUubWFnaWMsRSs9QShhLDIpLEUrPUEobywyKSxFKz1BKHguY3JjMzIsNCksRSs9QSh4LmNvbXByZXNzZWRTaXplLDQpLEUrPUEoeC51bmNvbXByZXNzZWRTaXplLDQpLEUrPUEoZi5sZW5ndGgsMiksRSs9QShiLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpSLkxPQ0FMX0ZJTEVfSEVBREVSK0UrZitiLGRpclJlY29yZDpSLkNFTlRSQUxfRklMRV9IRUFERVIrQShDLDIpK0UrQShwLmxlbmd0aCwyKStcIlxcMFxcMFxcMFxcMFwiK0Eoeiw0KStBKG4sNCkrZitiK3B9fXZhciBJPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxPPWUoXCIuLi91dGY4XCIpLEI9ZShcIi4uL2NyYzMyXCIpLFI9ZShcIi4uL3NpZ25hdHVyZVwiKTtmdW5jdGlvbiBzKGUsdCxyLG4pe2kuY2FsbCh0aGlzLFwiWmlwRmlsZVdvcmtlclwiKSx0aGlzLmJ5dGVzV3JpdHRlbj0wLHRoaXMuemlwQ29tbWVudD10LHRoaXMuemlwUGxhdGZvcm09cix0aGlzLmVuY29kZUZpbGVOYW1lPW4sdGhpcy5zdHJlYW1GaWxlcz1lLHRoaXMuYWNjdW11bGF0ZT0hMSx0aGlzLmNvbnRlbnRCdWZmZXI9W10sdGhpcy5kaXJSZWNvcmRzPVtdLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldD0wLHRoaXMuZW50cmllc0NvdW50PTAsdGhpcy5jdXJyZW50RmlsZT1udWxsLHRoaXMuX3NvdXJjZXM9W119SS5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRhLnBlcmNlbnR8fDAscj10aGlzLmVudHJpZXNDb3VudCxuPXRoaXMuX3NvdXJjZXMubGVuZ3RoO3RoaXMuYWNjdW11bGF0ZT90aGlzLmNvbnRlbnRCdWZmZXIucHVzaChlKToodGhpcy5ieXRlc1dyaXR0ZW4rPWUuZGF0YS5sZW5ndGgsaS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMse2RhdGE6ZS5kYXRhLG1ldGE6e2N1cnJlbnRGaWxlOnRoaXMuY3VycmVudEZpbGUscGVyY2VudDpyPyh0KzEwMCooci1uLTEpKS9yOjEwMH19KSl9LHMucHJvdG90eXBlLm9wZW5lZFNvdXJjZT1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQ9dGhpcy5ieXRlc1dyaXR0ZW4sdGhpcy5jdXJyZW50RmlsZT1lLmZpbGUubmFtZTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcjtpZih0KXt2YXIgcj1uKGUsdCwhMSx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6ci5maWxlUmVjb3JkLG1ldGE6e3BlcmNlbnQ6MH19KX1lbHNlIHRoaXMuYWNjdW11bGF0ZT0hMH0scy5wcm90b3R5cGUuY2xvc2VkU291cmNlPWZ1bmN0aW9uKGUpe3RoaXMuYWNjdW11bGF0ZT0hMTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcixyPW4oZSx0LCEwLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO2lmKHRoaXMuZGlyUmVjb3Jkcy5wdXNoKHIuZGlyUmVjb3JkKSx0KXRoaXMucHVzaCh7ZGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gUi5EQVRBX0RFU0NSSVBUT1IrQShlLmNyYzMyLDQpK0EoZS5jb21wcmVzc2VkU2l6ZSw0KStBKGUudW5jb21wcmVzc2VkU2l6ZSw0KX0oZSksbWV0YTp7cGVyY2VudDoxMDB9fSk7ZWxzZSBmb3IodGhpcy5wdXNoKHtkYXRhOnIuZmlsZVJlY29yZCxtZXRhOntwZXJjZW50OjB9fSk7dGhpcy5jb250ZW50QnVmZmVyLmxlbmd0aDspdGhpcy5wdXNoKHRoaXMuY29udGVudEJ1ZmZlci5zaGlmdCgpKTt0aGlzLmN1cnJlbnRGaWxlPW51bGx9LHMucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuYnl0ZXNXcml0dGVuLHQ9MDt0PHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGg7dCsrKXRoaXMucHVzaCh7ZGF0YTp0aGlzLmRpclJlY29yZHNbdF0sbWV0YTp7cGVyY2VudDoxMDB9fSk7dmFyIHI9dGhpcy5ieXRlc1dyaXR0ZW4tZSxuPWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIHM9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLGkobikpO3JldHVybiBSLkNFTlRSQUxfRElSRUNUT1JZX0VORCtcIlxcMFxcMFxcMFxcMFwiK0EoZSwyKStBKGUsMikrQSh0LDQpK0Eociw0KStBKHMubGVuZ3RoLDIpK3N9KHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGgscixlLHRoaXMuemlwQ29tbWVudCx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6bixtZXRhOntwZXJjZW50OjEwMH19KX0scy5wcm90b3R5cGUucHJlcGFyZU5leHRTb3VyY2U9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuX3NvdXJjZXMuc2hpZnQoKSx0aGlzLm9wZW5lZFNvdXJjZSh0aGlzLnByZXZpb3VzLnN0cmVhbUluZm8pLHRoaXMuaXNQYXVzZWQ/dGhpcy5wcmV2aW91cy5wYXVzZSgpOnRoaXMucHJldmlvdXMucmVzdW1lKCl9LHMucHJvdG90eXBlLnJlZ2lzdGVyUHJldmlvdXM9ZnVuY3Rpb24oZSl7dGhpcy5fc291cmNlcy5wdXNoKGUpO3ZhciB0PXRoaXM7cmV0dXJuIGUub24oXCJkYXRhXCIsZnVuY3Rpb24oZSl7dC5wcm9jZXNzQ2h1bmsoZSl9KSxlLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXt0LmNsb3NlZFNvdXJjZSh0LnByZXZpb3VzLnN0cmVhbUluZm8pLHQuX3NvdXJjZXMubGVuZ3RoP3QucHJlcGFyZU5leHRTb3VyY2UoKTp0LmVuZCgpfSksZS5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0pLHRoaXN9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5wcmV2aW91cyYmdGhpcy5fc291cmNlcy5sZW5ndGg/KHRoaXMucHJlcGFyZU5leHRTb3VyY2UoKSwhMCk6dGhpcy5wcmV2aW91c3x8dGhpcy5fc291cmNlcy5sZW5ndGh8fHRoaXMuZ2VuZXJhdGVkRXJyb3I/dm9pZCAwOih0aGlzLmVuZCgpLCEwKSl9LHMucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NvdXJjZXM7aWYoIWkucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyxlKSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0cnl7dFtyXS5lcnJvcihlKX1jYXRjaChlKXt9cmV0dXJuITB9LHMucHJvdG90eXBlLmxvY2s9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5sb2NrLmNhbGwodGhpcyk7Zm9yKHZhciBlPXRoaXMuX3NvdXJjZXMsdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0ubG9jaygpfSx0LmV4cG9ydHM9c30se1wiLi4vY3JjMzJcIjo0LFwiLi4vc2lnbmF0dXJlXCI6MjMsXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi4vdXRmOFwiOjMxLFwiLi4vdXRpbHNcIjozMn1dLDk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgdT1lKFwiLi4vY29tcHJlc3Npb25zXCIpLG49ZShcIi4vWmlwRmlsZVdvcmtlclwiKTtyLmdlbmVyYXRlV29ya2VyPWZ1bmN0aW9uKGUsYSx0KXt2YXIgbz1uZXcgbihhLnN0cmVhbUZpbGVzLHQsYS5wbGF0Zm9ybSxhLmVuY29kZUZpbGVOYW1lKSxoPTA7dHJ5e2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe2grKzt2YXIgcj1mdW5jdGlvbihlLHQpe3ZhciByPWV8fHQsbj11W3JdO2lmKCFuKXRocm93IG5ldyBFcnJvcihyK1wiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhXCIpO3JldHVybiBufSh0Lm9wdGlvbnMuY29tcHJlc3Npb24sYS5jb21wcmVzc2lvbiksbj10Lm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zfHxhLmNvbXByZXNzaW9uT3B0aW9uc3x8e30saT10LmRpcixzPXQuZGF0ZTt0Ll9jb21wcmVzc1dvcmtlcihyLG4pLndpdGhTdHJlYW1JbmZvKFwiZmlsZVwiLHtuYW1lOmUsZGlyOmksZGF0ZTpzLGNvbW1lbnQ6dC5jb21tZW50fHxcIlwiLHVuaXhQZXJtaXNzaW9uczp0LnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczp0LmRvc1Blcm1pc3Npb25zfSkucGlwZShvKX0pLG8uZW50cmllc0NvdW50PWh9Y2F0Y2goZSl7by5lcnJvcihlKX1yZXR1cm4gb319LHtcIi4uL2NvbXByZXNzaW9uc1wiOjMsXCIuL1ppcEZpbGVXb3JrZXJcIjo4fV0sMTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuO2lmKGFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbnN0cnVjdG9yIHdpdGggcGFyYW1ldGVycyBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKTt0aGlzLmZpbGVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PVwiXCIsdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyBuO2Zvcih2YXIgdCBpbiB0aGlzKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbdF0mJihlW3RdPXRoaXNbdF0pO3JldHVybiBlfX0obi5wcm90b3R5cGU9ZShcIi4vb2JqZWN0XCIpKS5sb2FkQXN5bmM9ZShcIi4vbG9hZFwiKSxuLnN1cHBvcnQ9ZShcIi4vc3VwcG9ydFwiKSxuLmRlZmF1bHRzPWUoXCIuL2RlZmF1bHRzXCIpLG4udmVyc2lvbj1cIjMuMTAuMVwiLG4ubG9hZEFzeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG5ldyBuKS5sb2FkQXN5bmMoZSx0KX0sbi5leHRlcm5hbD1lKFwiLi9leHRlcm5hbFwiKSx0LmV4cG9ydHM9bn0se1wiLi9kZWZhdWx0c1wiOjUsXCIuL2V4dGVybmFsXCI6NixcIi4vbG9hZFwiOjExLFwiLi9vYmplY3RcIjoxNSxcIi4vc3VwcG9ydFwiOjMwfV0sMTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgdT1lKFwiLi91dGlsc1wiKSxpPWUoXCIuL2V4dGVybmFsXCIpLG49ZShcIi4vdXRmOFwiKSxzPWUoXCIuL3ppcEVudHJpZXNcIiksYT1lKFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiKSxsPWUoXCIuL25vZGVqc1V0aWxzXCIpO2Z1bmN0aW9uIGYobil7cmV0dXJuIG5ldyBpLlByb21pc2UoZnVuY3Rpb24oZSx0KXt2YXIgcj1uLmRlY29tcHJlc3NlZC5nZXRDb250ZW50V29ya2VyKCkucGlwZShuZXcgYSk7ci5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7dChlKX0pLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtyLnN0cmVhbUluZm8uY3JjMzIhPT1uLmRlY29tcHJlc3NlZC5jcmMzMj90KG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaFwiKSk6ZSgpfSkucmVzdW1lKCl9KX10LmV4cG9ydHM9ZnVuY3Rpb24oZSxvKXt2YXIgaD10aGlzO3JldHVybiBvPXUuZXh0ZW5kKG98fHt9LHtiYXNlNjQ6ITEsY2hlY2tDUkMzMjohMSxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITEsY3JlYXRlRm9sZGVyczohMSxkZWNvZGVGaWxlTmFtZTpuLnV0ZjhkZWNvZGV9KSxsLmlzTm9kZSYmbC5pc1N0cmVhbShlKT9pLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkpTWmlwIGNhbid0IGFjY2VwdCBhIHN0cmVhbSB3aGVuIGxvYWRpbmcgYSB6aXAgZmlsZS5cIikpOnUucHJlcGFyZUNvbnRlbnQoXCJ0aGUgbG9hZGVkIHppcCBmaWxlXCIsZSwhMCxvLm9wdGltaXplZEJpbmFyeVN0cmluZyxvLmJhc2U2NCkudGhlbihmdW5jdGlvbihlKXt2YXIgdD1uZXcgcyhvKTtyZXR1cm4gdC5sb2FkKGUpLHR9KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PVtpLlByb21pc2UucmVzb2x2ZShlKV0scj1lLmZpbGVzO2lmKG8uY2hlY2tDUkMzMilmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0LnB1c2goZihyW25dKSk7cmV0dXJuIGkuUHJvbWlzZS5hbGwodCl9KS50aGVuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNoaWZ0KCkscj10LmZpbGVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPWkuZmlsZU5hbWVTdHIsYT11LnJlc29sdmUoaS5maWxlTmFtZVN0cik7aC5maWxlKGEsaS5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTppLmRhdGUsZGlyOmkuZGlyLGNvbW1lbnQ6aS5maWxlQ29tbWVudFN0ci5sZW5ndGg/aS5maWxlQ29tbWVudFN0cjpudWxsLHVuaXhQZXJtaXNzaW9uczppLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczppLmRvc1Blcm1pc3Npb25zLGNyZWF0ZUZvbGRlcnM6by5jcmVhdGVGb2xkZXJzfSksaS5kaXJ8fChoLmZpbGUoYSkudW5zYWZlT3JpZ2luYWxOYW1lPXMpfXJldHVybiB0LnppcENvbW1lbnQubGVuZ3RoJiYoaC5jb21tZW50PXQuemlwQ29tbWVudCksaH0pfX0se1wiLi9leHRlcm5hbFwiOjYsXCIuL25vZGVqc1V0aWxzXCI6MTQsXCIuL3N0cmVhbS9DcmMzMlByb2JlXCI6MjUsXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwRW50cmllc1wiOjMzfV0sMTI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyhlLHQpe2kuY2FsbCh0aGlzLFwiTm9kZWpzIHN0cmVhbSBpbnB1dCBhZGFwdGVyIGZvciBcIitlKSx0aGlzLl91cHN0cmVhbUVuZGVkPSExLHRoaXMuX2JpbmRTdHJlYW0odCl9bi5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLl9iaW5kU3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7KHRoaXMuX3N0cmVhbT1lKS5wYXVzZSgpLGUub24oXCJkYXRhXCIsZnVuY3Rpb24oZSl7dC5wdXNoKHtkYXRhOmUsbWV0YTp7cGVyY2VudDowfX0pfSkub24oXCJlcnJvclwiLGZ1bmN0aW9uKGUpe3QuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1lOnQuZXJyb3IoZSl9KS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7dC5pc1BhdXNlZD90Ll91cHN0cmVhbUVuZGVkPSEwOnQuZW5kKCl9KX0scy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWkucHJvdG90eXBlLnBhdXNlLmNhbGwodGhpcykmJih0aGlzLl9zdHJlYW0ucGF1c2UoKSwhMCl9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJih0aGlzLl91cHN0cmVhbUVuZGVkP3RoaXMuZW5kKCk6dGhpcy5fc3RyZWFtLnJlc3VtZSgpLCEwKX0sdC5leHBvcnRzPXN9LHtcIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuLi91dGlsc1wiOjMyfV0sMTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1lKFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlO2Z1bmN0aW9uIG4oZSx0LHIpe2kuY2FsbCh0aGlzLHQpLHRoaXMuX2hlbHBlcj1lO3ZhciBuPXRoaXM7ZS5vbihcImRhdGFcIixmdW5jdGlvbihlLHQpe24ucHVzaChlKXx8bi5faGVscGVyLnBhdXNlKCksciYmcih0KX0pLm9uKFwiZXJyb3JcIixmdW5jdGlvbihlKXtuLmVtaXQoXCJlcnJvclwiLGUpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe24ucHVzaChudWxsKX0pfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhuLGkpLG4ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dGhpcy5faGVscGVyLnJlc3VtZSgpfSx0LmV4cG9ydHM9bn0se1wiLi4vdXRpbHNcIjozMixcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e2lzTm9kZTpcInVuZGVmaW5lZFwiIT10eXBlb2YgQnVmZmVyLG5ld0J1ZmZlckZyb206ZnVuY3Rpb24oZSx0KXtpZihCdWZmZXIuZnJvbSYmQnVmZmVyLmZyb20hPT1VaW50OEFycmF5LmZyb20pcmV0dXJuIEJ1ZmZlci5mcm9tKGUsdCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJkYXRhXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4gbmV3IEJ1ZmZlcihlLHQpfSxhbGxvY0J1ZmZlcjpmdW5jdGlvbihlKXtpZihCdWZmZXIuYWxsb2MpcmV0dXJuIEJ1ZmZlci5hbGxvYyhlKTt2YXIgdD1uZXcgQnVmZmVyKGUpO3JldHVybiB0LmZpbGwoMCksdH0saXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKX0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUub24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUucGF1c2UmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVzdW1lfX19LHt9XSwxNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHMoZSx0LHIpe3ZhciBuLGk9dS5nZXRUeXBlT2YodCkscz11LmV4dGVuZChyfHx7fSxmKTtzLmRhdGU9cy5kYXRlfHxuZXcgRGF0ZSxudWxsIT09cy5jb21wcmVzc2lvbiYmKHMuY29tcHJlc3Npb249cy5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxcInN0cmluZ1wiPT10eXBlb2Ygcy51bml4UGVybWlzc2lvbnMmJihzLnVuaXhQZXJtaXNzaW9ucz1wYXJzZUludChzLnVuaXhQZXJtaXNzaW9ucyw4KSkscy51bml4UGVybWlzc2lvbnMmJjE2Mzg0JnMudW5peFBlcm1pc3Npb25zJiYocy5kaXI9ITApLHMuZG9zUGVybWlzc2lvbnMmJjE2JnMuZG9zUGVybWlzc2lvbnMmJihzLmRpcj0hMCkscy5kaXImJihlPWcoZSkpLHMuY3JlYXRlRm9sZGVycyYmKG49XyhlKSkmJmIuY2FsbCh0aGlzLG4sITApO3ZhciBhPVwic3RyaW5nXCI9PT1pJiYhMT09PXMuYmluYXJ5JiYhMT09PXMuYmFzZTY0O3ImJnZvaWQgMCE9PXIuYmluYXJ5fHwocy5iaW5hcnk9IWEpLCh0IGluc3RhbmNlb2YgYyYmMD09PXQudW5jb21wcmVzc2VkU2l6ZXx8cy5kaXJ8fCF0fHwwPT09dC5sZW5ndGgpJiYocy5iYXNlNjQ9ITEscy5iaW5hcnk9ITAsdD1cIlwiLHMuY29tcHJlc3Npb249XCJTVE9SRVwiLGk9XCJzdHJpbmdcIik7dmFyIG89bnVsbDtvPXQgaW5zdGFuY2VvZiBjfHx0IGluc3RhbmNlb2YgbD90OnAuaXNOb2RlJiZwLmlzU3RyZWFtKHQpP25ldyBtKGUsdCk6dS5wcmVwYXJlQ29udGVudChlLHQscy5iaW5hcnkscy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcscy5iYXNlNjQpO3ZhciBoPW5ldyBkKGUsbyxzKTt0aGlzLmZpbGVzW2VdPWh9dmFyIGk9ZShcIi4vdXRmOFwiKSx1PWUoXCIuL3V0aWxzXCIpLGw9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIiksYT1lKFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCIpLGY9ZShcIi4vZGVmYXVsdHNcIiksYz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGQ9ZShcIi4vemlwT2JqZWN0XCIpLG89ZShcIi4vZ2VuZXJhdGVcIikscD1lKFwiLi9ub2RlanNVdGlsc1wiKSxtPWUoXCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXJcIiksXz1mdW5jdGlvbihlKXtcIi9cIj09PWUuc2xpY2UoLTEpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKTt2YXIgdD1lLmxhc3RJbmRleE9mKFwiL1wiKTtyZXR1cm4gMDx0P2Uuc3Vic3RyaW5nKDAsdCk6XCJcIn0sZz1mdW5jdGlvbihlKXtyZXR1cm5cIi9cIiE9PWUuc2xpY2UoLTEpJiYoZSs9XCIvXCIpLGV9LGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD12b2lkIDAhPT10P3Q6Zi5jcmVhdGVGb2xkZXJzLGU9ZyhlKSx0aGlzLmZpbGVzW2VdfHxzLmNhbGwodGhpcyxlLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOnR9KSx0aGlzLmZpbGVzW2VdfTtmdW5jdGlvbiBoKGUpe3JldHVyblwiW29iamVjdCBSZWdFeHBdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9dmFyIG49e2xvYWQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZm9yRWFjaDpmdW5jdGlvbihlKXt2YXIgdCxyLG47Zm9yKHQgaW4gdGhpcy5maWxlcyluPXRoaXMuZmlsZXNbdF0sKHI9dC5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLHQubGVuZ3RoKSkmJnQuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmZShyLG4pfSxmaWx0ZXI6ZnVuY3Rpb24ocil7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3IoZSx0KSYmbi5wdXNoKHQpfSksbn0sZmlsZTpmdW5jdGlvbihlLHQscil7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9dGhpcy5yb290K2Uscy5jYWxsKHRoaXMsZSx0LHIpLHRoaXM7aWYoaChlKSl7dmFyIG49ZTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4hdC5kaXImJm4udGVzdChlKX0pfXZhciBpPXRoaXMuZmlsZXNbdGhpcy5yb290K2VdO3JldHVybiBpJiYhaS5kaXI/aTpudWxsfSxmb2xkZXI6ZnVuY3Rpb24ocil7aWYoIXIpcmV0dXJuIHRoaXM7aWYoaChyKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5kaXImJnIudGVzdChlKX0pO3ZhciBlPXRoaXMucm9vdCtyLHQ9Yi5jYWxsKHRoaXMsZSksbj10aGlzLmNsb25lKCk7cmV0dXJuIG4ucm9vdD10Lm5hbWUsbn0scmVtb3ZlOmZ1bmN0aW9uKHIpe3I9dGhpcy5yb290K3I7dmFyIGU9dGhpcy5maWxlc1tyXTtpZihlfHwoXCIvXCIhPT1yLnNsaWNlKC0xKSYmKHIrPVwiL1wiKSxlPXRoaXMuZmlsZXNbcl0pLGUmJiFlLmRpcilkZWxldGUgdGhpcy5maWxlc1tyXTtlbHNlIGZvcih2YXIgdD10aGlzLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiB0Lm5hbWUuc2xpY2UoMCxyLmxlbmd0aCk9PT1yfSksbj0wO248dC5sZW5ndGg7bisrKWRlbGV0ZSB0aGlzLmZpbGVzW3Rbbl0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS5cIil9LGdlbmVyYXRlSW50ZXJuYWxTdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHQscj17fTt0cnl7aWYoKHI9dS5leHRlbmQoZXx8e30se3N0cmVhbUZpbGVzOiExLGNvbXByZXNzaW9uOlwiU1RPUkVcIixjb21wcmVzc2lvbk9wdGlvbnM6bnVsbCx0eXBlOlwiXCIscGxhdGZvcm06XCJET1NcIixjb21tZW50Om51bGwsbWltZVR5cGU6XCJhcHBsaWNhdGlvbi96aXBcIixlbmNvZGVGaWxlTmFtZTppLnV0ZjhlbmNvZGV9KSkudHlwZT1yLnR5cGUudG9Mb3dlckNhc2UoKSxyLmNvbXByZXNzaW9uPXIuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxcImJpbmFyeXN0cmluZ1wiPT09ci50eXBlJiYoci50eXBlPVwic3RyaW5nXCIpLCFyLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiTm8gb3V0cHV0IHR5cGUgc3BlY2lmaWVkLlwiKTt1LmNoZWNrU3VwcG9ydChyLnR5cGUpLFwiZGFyd2luXCIhPT1yLnBsYXRmb3JtJiZcImZyZWVic2RcIiE9PXIucGxhdGZvcm0mJlwibGludXhcIiE9PXIucGxhdGZvcm0mJlwic3Vub3NcIiE9PXIucGxhdGZvcm18fChyLnBsYXRmb3JtPVwiVU5JWFwiKSxcIndpbjMyXCI9PT1yLnBsYXRmb3JtJiYoci5wbGF0Zm9ybT1cIkRPU1wiKTt2YXIgbj1yLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8XCJcIjt0PW8uZ2VuZXJhdGVXb3JrZXIodGhpcyxyLG4pfWNhdGNoKGUpeyh0PW5ldyBsKFwiZXJyb3JcIikpLmVycm9yKGUpfXJldHVybiBuZXcgYSh0LHIudHlwZXx8XCJzdHJpbmdcIixyLm1pbWVUeXBlKX0sZ2VuZXJhdGVBc3luYzpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdlbmVyYXRlSW50ZXJuYWxTdHJlYW0oZSkuYWNjdW11bGF0ZSh0KX0sZ2VuZXJhdGVOb2RlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9ZXx8e30pLnR5cGV8fChlLnR5cGU9XCJub2RlYnVmZmVyXCIpLHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFN0cmVhbShlKS50b05vZGVqc1N0cmVhbSh0KX19O3QuZXhwb3J0cz1ufSx7XCIuL2NvbXByZXNzZWRPYmplY3RcIjoyLFwiLi9kZWZhdWx0c1wiOjUsXCIuL2dlbmVyYXRlXCI6OSxcIi4vbm9kZWpzL05vZGVqc1N0cmVhbUlucHV0QWRhcHRlclwiOjEyLFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCI6MjksXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwT2JqZWN0XCI6MzV9XSwxNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lKFwic3RyZWFtXCIpfSx7c3RyZWFtOnZvaWQgMH1dLDE3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vRGF0YVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5kYXRhLmxlbmd0aDt0KyspZVt0XT0yNTUmZVt0XX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxuKSxpLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnplcm8rZV19LGkucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNoYXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSksbj1lLmNoYXJDb2RlQXQoMiksaT1lLmNoYXJDb2RlQXQoMykscz10aGlzLmxlbmd0aC00OzA8PXM7LS1zKWlmKHRoaXMuZGF0YVtzXT09PXQmJnRoaXMuZGF0YVtzKzFdPT09ciYmdGhpcy5kYXRhW3MrMl09PT1uJiZ0aGlzLmRhdGFbcyszXT09PWkpcmV0dXJuIHMtdGhpcy56ZXJvO3JldHVybi0xfSxpLnByb3RvdHlwZS5yZWFkQW5kQ2hlY2tTaWduYXR1cmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApLHI9ZS5jaGFyQ29kZUF0KDEpLG49ZS5jaGFyQ29kZUF0KDIpLGk9ZS5jaGFyQ29kZUF0KDMpLHM9dGhpcy5yZWFkRGF0YSg0KTtyZXR1cm4gdD09PXNbMF0mJnI9PT1zWzFdJiZuPT09c1syXSYmaT09PXNbM119LGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hlY2tPZmZzZXQoZSksMD09PWUpcmV0dXJuW107dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9EYXRhUmVhZGVyXCI6MTh9XSwxODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKTtmdW5jdGlvbiBpKGUpe3RoaXMuZGF0YT1lLHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuaW5kZXg9MCx0aGlzLnplcm89MH1pLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrZSl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5sZW5ndGg8dGhpcy56ZXJvK2V8fGU8MCl0aHJvdyBuZXcgRXJyb3IoXCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9IFwiK3RoaXMubGVuZ3RoK1wiLCBhc2tlZCBpbmRleCA9IFwiK2UrXCIpLiBDb3JydXB0ZWQgemlwID9cIil9LHNldEluZGV4OmZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tJbmRleChlKSx0aGlzLmluZGV4PWV9LHNraXA6ZnVuY3Rpb24oZSl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K2UpfSxieXRlQXQ6ZnVuY3Rpb24oKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oZSl7dmFyIHQscj0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KGUpLHQ9dGhpcy5pbmRleCtlLTE7dD49dGhpcy5pbmRleDt0LS0pcj0ocjw8OCkrdGhpcy5ieXRlQXQodCk7cmV0dXJuIHRoaXMuaW5kZXgrPWUscn0scmVhZFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gbi50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHRoaXMucmVhZERhdGEoZSkpfSxyZWFkRGF0YTpmdW5jdGlvbigpe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24oKXt9LHJlYWRBbmRDaGVja1NpZ25hdHVyZTpmdW5jdGlvbigpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKDE5ODArKGU+PjI1JjEyNyksKGU+PjIxJjE1KS0xLGU+PjE2JjMxLGU+PjExJjMxLGU+PjUmNjMsKDMxJmUpPDwxKSl9fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMn1dLDE5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vVWludDhBcnJheVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLGUpfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhpLG4pLGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tPZmZzZXQoZSk7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9VaW50OEFycmF5UmVhZGVyXCI6MjF9XSwyMDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0RhdGFSZWFkZXJcIik7ZnVuY3Rpb24gaShlKXtuLmNhbGwodGhpcyxlKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxuKSxpLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuemVybytlKX0saS5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihlKS10aGlzLnplcm99LGkucHJvdG90eXBlLnJlYWRBbmRDaGVja1NpZ25hdHVyZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMucmVhZERhdGEoNCl9LGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tPZmZzZXQoZSk7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9EYXRhUmVhZGVyXCI6MTh9XSwyMTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0FycmF5UmVhZGVyXCIpO2Z1bmN0aW9uIGkoZSl7bi5jYWxsKHRoaXMsZSl9ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksbiksaS5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oZSl7aWYodGhpcy5jaGVja09mZnNldChlKSwwPT09ZSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHQ9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9BcnJheVJlYWRlclwiOjE3fV0sMjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vc3VwcG9ydFwiKSxzPWUoXCIuL0FycmF5UmVhZGVyXCIpLGE9ZShcIi4vU3RyaW5nUmVhZGVyXCIpLG89ZShcIi4vTm9kZUJ1ZmZlclJlYWRlclwiKSxoPWUoXCIuL1VpbnQ4QXJyYXlSZWFkZXJcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4uZ2V0VHlwZU9mKGUpO3JldHVybiBuLmNoZWNrU3VwcG9ydCh0KSxcInN0cmluZ1wiIT09dHx8aS51aW50OGFycmF5P1wibm9kZWJ1ZmZlclwiPT09dD9uZXcgbyhlKTppLnVpbnQ4YXJyYXk/bmV3IGgobi50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIixlKSk6bmV3IHMobi50cmFuc2Zvcm1UbyhcImFycmF5XCIsZSkpOm5ldyBhKGUpfX0se1wiLi4vc3VwcG9ydFwiOjMwLFwiLi4vdXRpbHNcIjozMixcIi4vQXJyYXlSZWFkZXJcIjoxNyxcIi4vTm9kZUJ1ZmZlclJlYWRlclwiOjE5LFwiLi9TdHJpbmdSZWFkZXJcIjoyMCxcIi4vVWludDhBcnJheVJlYWRlclwiOjIxfV0sMjM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLkxPQ0FMX0ZJTEVfSEVBREVSPVwiUEtcdTAwMDNcdTAwMDRcIixyLkNFTlRSQUxfRklMRV9IRUFERVI9XCJQS1x1MDAwMVx1MDAwMlwiLHIuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPVwiUEtcdTAwMDVcdTAwMDZcIixyLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9XCJQS1x1MDAwNlx1MDAwN1wiLHIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPVwiUEtcdTAwMDZcdTAwMDZcIixyLkRBVEFfREVTQ1JJUFRPUj1cIlBLXHUwMDA3XFxiXCJ9LHt9XSwyNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksaT1lKFwiLi4vdXRpbHNcIik7ZnVuY3Rpb24gcyhlKXtuLmNhbGwodGhpcyxcIkNvbnZlcnRXb3JrZXIgdG8gXCIrZSksdGhpcy5kZXN0VHlwZT1lfWkuaW5oZXJpdHMocyxuKSxzLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHtkYXRhOmkudHJhbnNmb3JtVG8odGhpcy5kZXN0VHlwZSxlLmRhdGEpLG1ldGE6ZS5tZXRhfSl9LHQuZXhwb3J0cz1zfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksaT1lKFwiLi4vY3JjMzJcIik7ZnVuY3Rpb24gcygpe24uY2FsbCh0aGlzLFwiQ3JjMzJQcm9iZVwiKSx0aGlzLndpdGhTdHJlYW1JbmZvKFwiY3JjMzJcIiwwKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMocyxuKSxzLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZSl7dGhpcy5zdHJlYW1JbmZvLmNyYzMyPWkoZS5kYXRhLHRoaXMuc3RyZWFtSW5mby5jcmMzMnx8MCksdGhpcy5wdXNoKGUpfSx0LmV4cG9ydHM9c30se1wiLi4vY3JjMzJcIjo0LFwiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi9HZW5lcmljV29ya2VyXCIpO2Z1bmN0aW9uIHMoZSl7aS5jYWxsKHRoaXMsXCJEYXRhTGVuZ3RoUHJvYmUgZm9yIFwiK2UpLHRoaXMucHJvcE5hbWU9ZSx0aGlzLndpdGhTdHJlYW1JbmZvKGUsMCl9bi5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV18fDA7dGhpcy5zdHJlYW1JbmZvW3RoaXMucHJvcE5hbWVdPXQrZS5kYXRhLmxlbmd0aH1pLnByb3RvdHlwZS5wcm9jZXNzQ2h1bmsuY2FsbCh0aGlzLGUpfSx0LmV4cG9ydHM9c30se1wiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi9HZW5lcmljV29ya2VyXCIpO2Z1bmN0aW9uIHMoZSl7aS5jYWxsKHRoaXMsXCJEYXRhV29ya2VyXCIpO3ZhciB0PXRoaXM7dGhpcy5kYXRhSXNSZWFkeT0hMSx0aGlzLmluZGV4PTAsdGhpcy5tYXg9MCx0aGlzLmRhdGE9bnVsbCx0aGlzLnR5cGU9XCJcIix0aGlzLl90aWNrU2NoZWR1bGVkPSExLGUudGhlbihmdW5jdGlvbihlKXt0LmRhdGFJc1JlYWR5PSEwLHQuZGF0YT1lLHQubWF4PWUmJmUubGVuZ3RofHwwLHQudHlwZT1uLmdldFR5cGVPZihlKSx0LmlzUGF1c2VkfHx0Ll90aWNrQW5kUmVwZWF0KCl9LGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KX1uLmluaGVyaXRzKHMsaSkscy5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2kucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLmRhdGE9bnVsbH0scy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuISFpLnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSYmKCF0aGlzLl90aWNrU2NoZWR1bGVkJiZ0aGlzLmRhdGFJc1JlYWR5JiYodGhpcy5fdGlja1NjaGVkdWxlZD0hMCxuLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcykpLCEwKX0scy5wcm90b3R5cGUuX3RpY2tBbmRSZXBlYXQ9ZnVuY3Rpb24oKXt0aGlzLl90aWNrU2NoZWR1bGVkPSExLHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZHx8KHRoaXMuX3RpY2soKSx0aGlzLmlzRmluaXNoZWR8fChuLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcyksdGhpcy5fdGlja1NjaGVkdWxlZD0hMCkpfSxzLnByb3RvdHlwZS5fdGljaz1mdW5jdGlvbigpe2lmKHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt2YXIgZT1udWxsLHQ9TWF0aC5taW4odGhpcy5tYXgsdGhpcy5pbmRleCsxNjM4NCk7aWYodGhpcy5pbmRleD49dGhpcy5tYXgpcmV0dXJuIHRoaXMuZW5kKCk7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVwic3RyaW5nXCI6ZT10aGlzLmRhdGEuc3Vic3RyaW5nKHRoaXMuaW5kZXgsdCk7YnJlYWs7Y2FzZVwidWludDhhcnJheVwiOmU9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdCk7YnJlYWs7Y2FzZVwiYXJyYXlcIjpjYXNlXCJub2RlYnVmZmVyXCI6ZT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0KX1yZXR1cm4gdGhpcy5pbmRleD10LHRoaXMucHVzaCh7ZGF0YTplLG1ldGE6e3BlcmNlbnQ6dGhpcy5tYXg/dGhpcy5pbmRleC90aGlzLm1heCoxMDA6MH19KX0sdC5leHBvcnRzPXN9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDI4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXt0aGlzLm5hbWU9ZXx8XCJkZWZhdWx0XCIsdGhpcy5zdHJlYW1JbmZvPXt9LHRoaXMuZ2VuZXJhdGVkRXJyb3I9bnVsbCx0aGlzLmV4dHJhU3RyZWFtSW5mbz17fSx0aGlzLmlzUGF1c2VkPSEwLHRoaXMuaXNGaW5pc2hlZD0hMSx0aGlzLmlzTG9ja2VkPSExLHRoaXMuX2xpc3RlbmVycz17ZGF0YTpbXSxlbmQ6W10sZXJyb3I6W119LHRoaXMucHJldmlvdXM9bnVsbH1uLnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbihlKXt0aGlzLmVtaXQoXCJkYXRhXCIsZSl9LGVuZDpmdW5jdGlvbigpe2lmKHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt0aGlzLmZsdXNoKCk7dHJ5e3RoaXMuZW1pdChcImVuZFwiKSx0aGlzLmNsZWFuVXAoKSx0aGlzLmlzRmluaXNoZWQ9ITB9Y2F0Y2goZSl7dGhpcy5lbWl0KFwiZXJyb3JcIixlKX1yZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaXNGaW5pc2hlZCYmKHRoaXMuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1lOih0aGlzLmlzRmluaXNoZWQ9ITAsdGhpcy5lbWl0KFwiZXJyb3JcIixlKSx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmVycm9yKGUpLHRoaXMuY2xlYW5VcCgpKSwhMCl9LG9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2xpc3RlbmVyc1tlXS5wdXNoKHQpLHRoaXN9LGNsZWFuVXA6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbUluZm89dGhpcy5nZW5lcmF0ZWRFcnJvcj10aGlzLmV4dHJhU3RyZWFtSW5mbz1udWxsLHRoaXMuX2xpc3RlbmVycz1bXX0sZW1pdDpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX2xpc3RlbmVyc1tlXSlmb3IodmFyIHI9MDtyPHRoaXMuX2xpc3RlbmVyc1tlXS5sZW5ndGg7cisrKXRoaXMuX2xpc3RlbmVyc1tlXVtyXS5jYWxsKHRoaXMsdCl9LHBpcGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVnaXN0ZXJQcmV2aW91cyh0aGlzKX0scmVnaXN0ZXJQcmV2aW91czpmdW5jdGlvbihlKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcihcIlRoZSBzdHJlYW0gJ1wiK3RoaXMrXCInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cIik7dGhpcy5zdHJlYW1JbmZvPWUuc3RyZWFtSW5mbyx0aGlzLm1lcmdlU3RyZWFtSW5mbygpLHRoaXMucHJldmlvdXM9ZTt2YXIgdD10aGlzO3JldHVybiBlLm9uKFwiZGF0YVwiLGZ1bmN0aW9uKGUpe3QucHJvY2Vzc0NodW5rKGUpfSksZS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7dC5lbmQoKX0pLGUub24oXCJlcnJvclwiLGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KSx0aGlzfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzUGF1c2VkJiYhdGhpcy5pc0ZpbmlzaGVkJiYodGhpcy5pc1BhdXNlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLnBhdXNlKCksITApfSxyZXN1bWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3ZhciBlPXRoaXMuaXNQYXVzZWQ9ITE7cmV0dXJuIHRoaXMuZ2VuZXJhdGVkRXJyb3ImJih0aGlzLmVycm9yKHRoaXMuZ2VuZXJhdGVkRXJyb3IpLGU9ITApLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMucmVzdW1lKCksIWV9LGZsdXNoOmZ1bmN0aW9uKCl7fSxwcm9jZXNzQ2h1bms6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKGUpfSx3aXRoU3RyZWFtSW5mbzpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmV4dHJhU3RyZWFtSW5mb1tlXT10LHRoaXMubWVyZ2VTdHJlYW1JbmZvKCksdGhpc30sbWVyZ2VTdHJlYW1JbmZvOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuZXh0cmFTdHJlYW1JbmZvKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmV4dHJhU3RyZWFtSW5mbyxlKSYmKHRoaXMuc3RyZWFtSW5mb1tlXT10aGlzLmV4dHJhU3RyZWFtSW5mb1tlXSl9LGxvY2s6ZnVuY3Rpb24oKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcihcIlRoZSBzdHJlYW0gJ1wiK3RoaXMrXCInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cIik7dGhpcy5pc0xvY2tlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmxvY2soKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1cIldvcmtlciBcIit0aGlzLm5hbWU7cmV0dXJuIHRoaXMucHJldmlvdXM/dGhpcy5wcmV2aW91cytcIiAtPiBcIitlOmV9fSx0LmV4cG9ydHM9bn0se31dLDI5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGg9ZShcIi4uL3V0aWxzXCIpLGk9ZShcIi4vQ29udmVydFdvcmtlclwiKSxzPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksdT1lKFwiLi4vYmFzZTY0XCIpLG49ZShcIi4uL3N1cHBvcnRcIiksYT1lKFwiLi4vZXh0ZXJuYWxcIiksbz1udWxsO2lmKG4ubm9kZXN0cmVhbSl0cnl7bz1lKFwiLi4vbm9kZWpzL05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXJcIil9Y2F0Y2goZSl7fWZ1bmN0aW9uIGwoZSxvKXtyZXR1cm4gbmV3IGEuUHJvbWlzZShmdW5jdGlvbih0LHIpe3ZhciBuPVtdLGk9ZS5faW50ZXJuYWxUeXBlLHM9ZS5fb3V0cHV0VHlwZSxhPWUuX21pbWVUeXBlO2Uub24oXCJkYXRhXCIsZnVuY3Rpb24oZSx0KXtuLnB1c2goZSksbyYmbyh0KX0pLm9uKFwiZXJyb3JcIixmdW5jdGlvbihlKXtuPVtdLHIoZSl9KS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7dHJ5e3ZhciBlPWZ1bmN0aW9uKGUsdCxyKXtzd2l0Y2goZSl7Y2FzZVwiYmxvYlwiOnJldHVybiBoLm5ld0Jsb2IoaC50cmFuc2Zvcm1UbyhcImFycmF5YnVmZmVyXCIsdCkscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIHUuZW5jb2RlKHQpO2RlZmF1bHQ6cmV0dXJuIGgudHJhbnNmb3JtVG8oZSx0KX19KHMsZnVuY3Rpb24oZSx0KXt2YXIgcixuPTAsaT1udWxsLHM9MDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXMrPXRbcl0ubGVuZ3RoO3N3aXRjaChlKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gdC5qb2luKFwiXCIpO2Nhc2VcImFycmF5XCI6cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sdCk7Y2FzZVwidWludDhhcnJheVwiOmZvcihpPW5ldyBVaW50OEFycmF5KHMpLHI9MDtyPHQubGVuZ3RoO3IrKylpLnNldCh0W3JdLG4pLG4rPXRbcl0ubGVuZ3RoO3JldHVybiBpO2Nhc2VcIm5vZGVidWZmZXJcIjpyZXR1cm4gQnVmZmVyLmNvbmNhdCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImNvbmNhdCA6IHVuc3VwcG9ydGVkIHR5cGUgJ1wiK2UrXCInXCIpfX0oaSxuKSxhKTt0KGUpfWNhdGNoKGUpe3IoZSl9bj1bXX0pLnJlc3VtZSgpfSl9ZnVuY3Rpb24gZihlLHQscil7dmFyIG49dDtzd2l0Y2godCl7Y2FzZVwiYmxvYlwiOmNhc2VcImFycmF5YnVmZmVyXCI6bj1cInVpbnQ4YXJyYXlcIjticmVhaztjYXNlXCJiYXNlNjRcIjpuPVwic3RyaW5nXCJ9dHJ5e3RoaXMuX2ludGVybmFsVHlwZT1uLHRoaXMuX291dHB1dFR5cGU9dCx0aGlzLl9taW1lVHlwZT1yLGguY2hlY2tTdXBwb3J0KG4pLHRoaXMuX3dvcmtlcj1lLnBpcGUobmV3IGkobikpLGUubG9jaygpfWNhdGNoKGUpe3RoaXMuX3dvcmtlcj1uZXcgcyhcImVycm9yXCIpLHRoaXMuX3dvcmtlci5lcnJvcihlKX19Zi5wcm90b3R5cGU9e2FjY3VtdWxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGwodGhpcyxlKX0sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3JldHVyblwiZGF0YVwiPT09ZT90aGlzLl93b3JrZXIub24oZSxmdW5jdGlvbihlKXt0LmNhbGwocixlLmRhdGEsZS5tZXRhKX0pOnRoaXMuX3dvcmtlci5vbihlLGZ1bmN0aW9uKCl7aC5kZWxheSh0LGFyZ3VtZW50cyxyKX0pLHRoaXN9LHJlc3VtZTpmdW5jdGlvbigpe3JldHVybiBoLmRlbGF5KHRoaXMuX3dvcmtlci5yZXN1bWUsW10sdGhpcy5fd29ya2VyKSx0aGlzfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3JrZXIucGF1c2UoKSx0aGlzfSx0b05vZGVqc1N0cmVhbTpmdW5jdGlvbihlKXtpZihoLmNoZWNrU3VwcG9ydChcIm5vZGVzdHJlYW1cIiksXCJub2RlYnVmZmVyXCIhPT10aGlzLl9vdXRwdXRUeXBlKXRocm93IG5ldyBFcnJvcih0aGlzLl9vdXRwdXRUeXBlK1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBtZXRob2RcIik7cmV0dXJuIG5ldyBvKHRoaXMse29iamVjdE1vZGU6XCJub2RlYnVmZmVyXCIhPT10aGlzLl9vdXRwdXRUeXBlfSxlKX19LHQuZXhwb3J0cz1mfSx7XCIuLi9iYXNlNjRcIjoxLFwiLi4vZXh0ZXJuYWxcIjo2LFwiLi4vbm9kZWpzL05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXJcIjoxMyxcIi4uL3N1cHBvcnRcIjozMCxcIi4uL3V0aWxzXCI6MzIsXCIuL0NvbnZlcnRXb3JrZXJcIjoyNCxcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMzA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtpZihyLmJhc2U2ND0hMCxyLmFycmF5PSEwLHIuc3RyaW5nPSEwLHIuYXJyYXlidWZmZXI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheSxyLm5vZGVidWZmZXI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEJ1ZmZlcixyLnVpbnQ4YXJyYXk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXksXCJ1bmRlZmluZWRcIj09dHlwZW9mIEFycmF5QnVmZmVyKXIuYmxvYj0hMTtlbHNle3ZhciBuPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7ci5ibG9iPTA9PT1uZXcgQmxvYihbbl0se3R5cGU6XCJhcHBsaWNhdGlvbi96aXBcIn0pLnNpemV9Y2F0Y2goZSl7dHJ5e3ZhciBpPW5ldyhzZWxmLkJsb2JCdWlsZGVyfHxzZWxmLldlYktpdEJsb2JCdWlsZGVyfHxzZWxmLk1vekJsb2JCdWlsZGVyfHxzZWxmLk1TQmxvYkJ1aWxkZXIpO2kuYXBwZW5kKG4pLHIuYmxvYj0wPT09aS5nZXRCbG9iKFwiYXBwbGljYXRpb24vemlwXCIpLnNpemV9Y2F0Y2goZSl7ci5ibG9iPSExfX19dHJ5e3Iubm9kZXN0cmVhbT0hIWUoXCJyZWFkYWJsZS1zdHJlYW1cIikuUmVhZGFibGV9Y2F0Y2goZSl7ci5ub2Rlc3RyZWFtPSExfX0se1wicmVhZGFibGUtc3RyZWFtXCI6MTZ9XSwzMTpbZnVuY3Rpb24oZSx0LHMpe1widXNlIHN0cmljdFwiO2Zvcih2YXIgbz1lKFwiLi91dGlsc1wiKSxoPWUoXCIuL3N1cHBvcnRcIikscj1lKFwiLi9ub2RlanNVdGlsc1wiKSxuPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLHU9bmV3IEFycmF5KDI1NiksaT0wO2k8MjU2O2krKyl1W2ldPTI1Mjw9aT82OjI0ODw9aT81OjI0MDw9aT80OjIyNDw9aT8zOjE5Mjw9aT8yOjE7dVsyNTRdPXVbMjU0XT0xO2Z1bmN0aW9uIGEoKXtuLmNhbGwodGhpcyxcInV0Zi04IGRlY29kZVwiKSx0aGlzLmxlZnRPdmVyPW51bGx9ZnVuY3Rpb24gbCgpe24uY2FsbCh0aGlzLFwidXRmLTggZW5jb2RlXCIpfXMudXRmOGVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gaC5ub2RlYnVmZmVyP3IubmV3QnVmZmVyRnJvbShlLFwidXRmLThcIik6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGkscyxhPWUubGVuZ3RoLG89MDtmb3IoaT0wO2k8YTtpKyspNTUyOTY9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQoaSkpKSYmaSsxPGEmJjU2MzIwPT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KGkrMSkpKSYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsobi01NjMyMCksaSsrKSxvKz1yPDEyOD8xOnI8MjA0OD8yOnI8NjU1MzY/Mzo0O2Zvcih0PWgudWludDhhcnJheT9uZXcgVWludDhBcnJheShvKTpuZXcgQXJyYXkobyksaT1zPTA7czxvO2krKyk1NTI5Nj09KDY0NTEyJihyPWUuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQoaSsxKSkpJiYocj02NTUzNisoci01NTI5Njw8MTApKyhuLTU2MzIwKSxpKyspLHI8MTI4P3RbcysrXT1yOihyPDIwNDg/dFtzKytdPTE5MnxyPj4+Njoocjw2NTUzNj90W3MrK109MjI0fHI+Pj4xMjoodFtzKytdPTI0MHxyPj4+MTgsdFtzKytdPTEyOHxyPj4+MTImNjMpLHRbcysrXT0xMjh8cj4+PjYmNjMpLHRbcysrXT0xMjh8NjMmcik7cmV0dXJuIHR9KGUpfSxzLnV0ZjhkZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGgubm9kZWJ1ZmZlcj9vLnRyYW5zZm9ybVRvKFwibm9kZWJ1ZmZlclwiLGUpLnRvU3RyaW5nKFwidXRmLThcIik6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGkscz1lLmxlbmd0aCxhPW5ldyBBcnJheSgyKnMpO2Zvcih0PXI9MDt0PHM7KWlmKChuPWVbdCsrXSk8MTI4KWFbcisrXT1uO2Vsc2UgaWYoNDwoaT11W25dKSlhW3IrK109NjU1MzMsdCs9aS0xO2Vsc2V7Zm9yKG4mPTI9PT1pPzMxOjM9PT1pPzE1Ojc7MTxpJiZ0PHM7KW49bjw8Nnw2MyZlW3QrK10saS0tOzE8aT9hW3IrK109NjU1MzM6bjw2NTUzNj9hW3IrK109bjoobi09NjU1MzYsYVtyKytdPTU1Mjk2fG4+PjEwJjEwMjMsYVtyKytdPTU2MzIwfDEwMjMmbil9cmV0dXJuIGEubGVuZ3RoIT09ciYmKGEuc3ViYXJyYXk/YT1hLnN1YmFycmF5KDAscik6YS5sZW5ndGg9ciksby5hcHBseUZyb21DaGFyQ29kZShhKX0oZT1vLnRyYW5zZm9ybVRvKGgudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIsZSkpfSxvLmluaGVyaXRzKGEsbiksYS5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKGUpe3ZhciB0PW8udHJhbnNmb3JtVG8oaC51aW50OGFycmF5P1widWludDhhcnJheVwiOlwiYXJyYXlcIixlLmRhdGEpO2lmKHRoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoKXtpZihoLnVpbnQ4YXJyYXkpe3ZhciByPXQ7KHQ9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrdGhpcy5sZWZ0T3Zlci5sZW5ndGgpKS5zZXQodGhpcy5sZWZ0T3ZlciwwKSx0LnNldChyLHRoaXMubGVmdE92ZXIubGVuZ3RoKX1lbHNlIHQ9dGhpcy5sZWZ0T3Zlci5jb25jYXQodCk7dGhpcy5sZWZ0T3Zlcj1udWxsfXZhciBuPWZ1bmN0aW9uKGUsdCl7dmFyIHI7Zm9yKCh0PXR8fGUubGVuZ3RoKT5lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHI9dC0xOzA8PXImJjEyOD09KDE5MiZlW3JdKTspci0tO3JldHVybiByPDA/dDowPT09cj90OnIrdVtlW3JdXT50P3I6dH0odCksaT10O24hPT10Lmxlbmd0aCYmKGgudWludDhhcnJheT8oaT10LnN1YmFycmF5KDAsbiksdGhpcy5sZWZ0T3Zlcj10LnN1YmFycmF5KG4sdC5sZW5ndGgpKTooaT10LnNsaWNlKDAsbiksdGhpcy5sZWZ0T3Zlcj10LnNsaWNlKG4sdC5sZW5ndGgpKSksdGhpcy5wdXNoKHtkYXRhOnMudXRmOGRlY29kZShpKSxtZXRhOmUubWV0YX0pfSxhLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoJiYodGhpcy5wdXNoKHtkYXRhOnMudXRmOGRlY29kZSh0aGlzLmxlZnRPdmVyKSxtZXRhOnt9fSksdGhpcy5sZWZ0T3Zlcj1udWxsKX0scy5VdGY4RGVjb2RlV29ya2VyPWEsby5pbmhlcml0cyhsLG4pLGwucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnB1c2goe2RhdGE6cy51dGY4ZW5jb2RlKGUuZGF0YSksbWV0YTplLm1ldGF9KX0scy5VdGY4RW5jb2RlV29ya2VyPWx9LHtcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyfV0sMzI6W2Z1bmN0aW9uKGUsdCxhKXtcInVzZSBzdHJpY3RcIjt2YXIgbz1lKFwiLi9zdXBwb3J0XCIpLGg9ZShcIi4vYmFzZTY0XCIpLHI9ZShcIi4vbm9kZWpzVXRpbHNcIiksdT1lKFwiLi9leHRlcm5hbFwiKTtmdW5jdGlvbiBuKGUpe3JldHVybiBlfWZ1bmN0aW9uIGwoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPTI1NSZlLmNoYXJDb2RlQXQocik7cmV0dXJuIHR9ZShcInNldGltbWVkaWF0ZVwiKSxhLm5ld0Jsb2I9ZnVuY3Rpb24odCxyKXthLmNoZWNrU3VwcG9ydChcImJsb2JcIik7dHJ5e3JldHVybiBuZXcgQmxvYihbdF0se3R5cGU6cn0pfWNhdGNoKGUpe3RyeXt2YXIgbj1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gbi5hcHBlbmQodCksbi5nZXRCbG9iKHIpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi5cIil9fX07dmFyIGk9e3N0cmluZ2lmeUJ5Q2h1bms6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdLGk9MCxzPWUubGVuZ3RoO2lmKHM8PXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IoO2k8czspXCJhcnJheVwiPT09dHx8XCJub2RlYnVmZmVyXCI9PT10P24ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zbGljZShpLE1hdGgubWluKGkrcixzKSkpKTpuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkoaSxNYXRoLm1pbihpK3IscykpKSksaSs9cjtyZXR1cm4gbi5qb2luKFwiXCIpfSxzdHJpbmdpZnlCeUNoYXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVwiXCIscj0wO3I8ZS5sZW5ndGg7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHR9LGFwcGx5Q2FuQmVVc2VkOnt1aW50OGFycmF5OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBvLnVpbnQ4YXJyYXkmJjE9PT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCksbm9kZWJ1ZmZlcjpmdW5jdGlvbigpe3RyeXtyZXR1cm4gby5ub2RlYnVmZmVyJiYxPT09U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHIuYWxsb2NCdWZmZXIoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCl9fTtmdW5jdGlvbiBzKGUpe3ZhciB0PTY1NTM2LHI9YS5nZXRUeXBlT2YoZSksbj0hMDtpZihcInVpbnQ4YXJyYXlcIj09PXI/bj1pLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk6XCJub2RlYnVmZmVyXCI9PT1yJiYobj1pLmFwcGx5Q2FuQmVVc2VkLm5vZGVidWZmZXIpLG4pZm9yKDsxPHQ7KXRyeXtyZXR1cm4gaS5zdHJpbmdpZnlCeUNodW5rKGUscix0KX1jYXRjaChlKXt0PU1hdGguZmxvb3IodC8yKX1yZXR1cm4gaS5zdHJpbmdpZnlCeUNoYXIoZSl9ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtyZXR1cm4gdH1hLmFwcGx5RnJvbUNoYXJDb2RlPXM7dmFyIGM9e307Yy5zdHJpbmc9e3N0cmluZzpuLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBjLnN0cmluZy51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbChlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxyLmFsbG9jQnVmZmVyKGUubGVuZ3RoKSl9fSxjLmFycmF5PXtzdHJpbmc6cyxhcnJheTpuLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiByLm5ld0J1ZmZlckZyb20oZSl9fSxjLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHMobmV3IFVpbnQ4QXJyYXkoZSkpfSxhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZihuZXcgVWludDhBcnJheShlKSxuZXcgQXJyYXkoZS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOm4sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHIubmV3QnVmZmVyRnJvbShuZXcgVWludDhBcnJheShlKSl9fSxjLnVpbnQ4YXJyYXk9e3N0cmluZzpzLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBmKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJ1ZmZlcn0sdWludDhhcnJheTpuLG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHIubmV3QnVmZmVyRnJvbShlKX19LGMubm9kZWJ1ZmZlcj17c3RyaW5nOnMsYXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSxuZXcgQXJyYXkoZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGMubm9kZWJ1ZmZlci51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZihlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6bn0sYS50cmFuc2Zvcm1Ubz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8XCJcIiwhZSlyZXR1cm4gdDthLmNoZWNrU3VwcG9ydChlKTt2YXIgcj1hLmdldFR5cGVPZih0KTtyZXR1cm4gY1tyXVtlXSh0KX0sYS5yZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KFwiL1wiKSxyPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtcIi5cIj09PWl8fFwiXCI9PT1pJiYwIT09biYmbiE9PXQubGVuZ3RoLTF8fChcIi4uXCI9PT1pP3IucG9wKCk6ci5wdXNoKGkpKX1yZXR1cm4gci5qb2luKFwiL1wiKX0sYS5nZXRUeXBlT2Y9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/XCJzdHJpbmdcIjpcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk/XCJhcnJheVwiOm8ubm9kZWJ1ZmZlciYmci5pc0J1ZmZlcihlKT9cIm5vZGVidWZmZXJcIjpvLnVpbnQ4YXJyYXkmJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5P1widWludDhhcnJheVwiOm8uYXJyYXlidWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9cImFycmF5YnVmZmVyXCI6dm9pZCAwfSxhLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihlKXtpZighb1tlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybVwiKX0sYS5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LGEuTUFYX1ZBTFVFXzMyQklUUz0tMSxhLnByZXR0eT1mdW5jdGlvbihlKXt2YXIgdCxyLG49XCJcIjtmb3Iocj0wO3I8KGV8fFwiXCIpLmxlbmd0aDtyKyspbis9XCJcXFxceFwiKygodD1lLmNoYXJDb2RlQXQocikpPDE2P1wiMFwiOlwiXCIpK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG59LGEuZGVsYXk9ZnVuY3Rpb24oZSx0LHIpe3NldEltbWVkaWF0ZShmdW5jdGlvbigpe2UuYXBwbHkocnx8bnVsbCx0fHxbXSl9KX0sYS5pbmhlcml0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IHJ9LGEuZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxyPXt9O2ZvcihlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylmb3IodCBpbiBhcmd1bWVudHNbZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3VtZW50c1tlXSx0KSYmdm9pZCAwPT09clt0XSYmKHJbdF09YXJndW1lbnRzW2VdW3RdKTtyZXR1cm4gcn0sYS5wcmVwYXJlQ29udGVudD1mdW5jdGlvbihyLGUsbixpLHMpe3JldHVybiB1LlByb21pc2UucmVzb2x2ZShlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiBvLmJsb2ImJihuIGluc3RhbmNlb2YgQmxvYnx8LTEhPT1bXCJbb2JqZWN0IEZpbGVdXCIsXCJbb2JqZWN0IEJsb2JdXCJdLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyP25ldyB1LlByb21pc2UoZnVuY3Rpb24odCxyKXt2YXIgZT1uZXcgRmlsZVJlYWRlcjtlLm9ubG9hZD1mdW5jdGlvbihlKXt0KGUudGFyZ2V0LnJlc3VsdCl9LGUub25lcnJvcj1mdW5jdGlvbihlKXtyKGUudGFyZ2V0LmVycm9yKX0sZS5yZWFkQXNBcnJheUJ1ZmZlcihuKX0pOm59KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PWEuZ2V0VHlwZU9mKGUpO3JldHVybiB0PyhcImFycmF5YnVmZmVyXCI9PT10P2U9YS50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIixlKTpcInN0cmluZ1wiPT09dCYmKHM/ZT1oLmRlY29kZShlKTpuJiYhMCE9PWkmJihlPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsby51aW50OGFycmF5P25ldyBVaW50OEFycmF5KGUubGVuZ3RoKTpuZXcgQXJyYXkoZS5sZW5ndGgpKX0oZSkpKSxlKTp1LlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlYWQgdGhlIGRhdGEgb2YgJ1wiK3IrXCInLiBJcyBpdCBpbiBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IHR5cGUgKFN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIGV0YykgP1wiKSl9KX19LHtcIi4vYmFzZTY0XCI6MSxcIi4vZXh0ZXJuYWxcIjo2LFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdXBwb3J0XCI6MzAsc2V0aW1tZWRpYXRlOjU0fV0sMzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLGk9ZShcIi4vdXRpbHNcIikscz1lKFwiLi9zaWduYXR1cmVcIiksYT1lKFwiLi96aXBFbnRyeVwiKSxvPWUoXCIuL3N1cHBvcnRcIik7ZnVuY3Rpb24gaChlKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9ZX1oLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVhZGVyLnJlYWRBbmRDaGVja1NpZ25hdHVyZShlKSl7dGhpcy5yZWFkZXIuaW5kZXgtPTQ7dmFyIHQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTt0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIG9yIGJ1ZzogdW5leHBlY3RlZCBzaWduYXR1cmUgKFwiK2kucHJldHR5KHQpK1wiLCBleHBlY3RlZCBcIitpLnByZXR0eShlKStcIilcIil9fSxpc1NpZ25hdHVyZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMucmVhZGVyLmluZGV4O3RoaXMucmVhZGVyLnNldEluZGV4KGUpO3ZhciBuPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT10O3JldHVybiB0aGlzLnJlYWRlci5zZXRJbmRleChyKSxufSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpO3ZhciBlPXRoaXMucmVhZGVyLnJlYWREYXRhKHRoaXMuemlwQ29tbWVudExlbmd0aCksdD1vLnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiLHI9aS50cmFuc2Zvcm1Ubyh0LGUpO3RoaXMuemlwQ29tbWVudD10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKHIpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5yZWFkZXIuc2tpcCg0KSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGUsdCxyLG49dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxuOyllPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHI9dGhpcy5yZWFkZXIucmVhZERhdGEodCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2VdPXtpZDplLGxlbmd0aDp0LHZhbHVlOnJ9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSwxPHRoaXMuZGlza3NDb3VudCl0aHJvdyBuZXcgRXJyb3IoXCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZFwiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgZSx0O2ZvcihlPTA7ZTx0aGlzLmZpbGVzLmxlbmd0aDtlKyspdD10aGlzLmZpbGVzW2VdLHRoaXMucmVhZGVyLnNldEluZGV4KHQubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUocy5MT0NBTF9GSUxFX0hFQURFUiksdC5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSx0LmhhbmRsZVVURjgoKSx0LnByb2Nlc3NBdHRyaWJ1dGVzKCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIGU7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKHMuQ0VOVFJBTF9GSUxFX0hFQURFUik7KShlPW5ldyBhKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goZSk7aWYodGhpcy5jZW50cmFsRGlyUmVjb3JkcyE9PXRoaXMuZmlsZXMubGVuZ3RoJiYwIT09dGhpcy5jZW50cmFsRGlyUmVjb3JkcyYmMD09PXRoaXMuZmlsZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiBleHBlY3RlZCBcIit0aGlzLmNlbnRyYWxEaXJSZWNvcmRzK1wiIHJlY29yZHMgaW4gY2VudHJhbCBkaXIsIGdvdCBcIit0aGlzLmZpbGVzLmxlbmd0aCl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoZTwwKXRocm93IXRoaXMuaXNTaWduYXR1cmUoMCxzLkxPQ0FMX0ZJTEVfSEVBREVSKT9uZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSA6IGlzIHRoaXMgYSB6aXAgZmlsZSA/IElmIGl0IGlzLCBzZWUgaHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWxcIik6bmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoZSk7dmFyIHQ9ZTtpZih0aGlzLmNoZWNrU2lnbmF0dXJlKHMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1pLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PWkuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwoZT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKTwwKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yXCIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KGUpLHRoaXMuY2hlY2tTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLCF0aGlzLmlzU2lnbmF0dXJlKHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcixzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCkmJih0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcjwwKSl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9dmFyIHI9dGhpcy5jZW50cmFsRGlyT2Zmc2V0K3RoaXMuY2VudHJhbERpclNpemU7dGhpcy56aXA2NCYmKHIrPTIwLHIrPTEyK3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplKTt2YXIgbj10LXI7aWYoMDxuKXRoaXMuaXNTaWduYXR1cmUodCxzLkNFTlRSQUxfRklMRV9IRUFERVIpfHwodGhpcy5yZWFkZXIuemVybz1uKTtlbHNlIGlmKG48MCl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBtaXNzaW5nIFwiK01hdGguYWJzKG4pK1wiIGJ5dGVzLlwiKX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihlKXt0aGlzLnJlYWRlcj1uKGUpfSxsb2FkOmZ1bmN0aW9uKGUpe3RoaXMucHJlcGFyZVJlYWRlcihlKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sdC5leHBvcnRzPWh9LHtcIi4vcmVhZGVyL3JlYWRlckZvclwiOjIyLFwiLi9zaWduYXR1cmVcIjoyMyxcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyLFwiLi96aXBFbnRyeVwiOjM0fV0sMzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLHM9ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGE9ZShcIi4vY3JjMzJcIiksbz1lKFwiLi91dGY4XCIpLGg9ZShcIi4vY29tcHJlc3Npb25zXCIpLHU9ZShcIi4vc3VwcG9ydFwiKTtmdW5jdGlvbiBsKGUsdCl7dGhpcy5vcHRpb25zPWUsdGhpcy5sb2FkT3B0aW9ucz10fWwucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuIDIwNDg9PSgyMDQ4JnRoaXMuYml0RmxhZyl9LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQscjtpZihlLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9ZS5yZWFkSW50KDIpLHI9ZS5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9ZS5yZWFkRGF0YSh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxlLnNraXAociksLTE9PT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoXCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PT0gLTEpXCIpO2lmKG51bGw9PT0odD1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gaClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCx0KSYmaFt0XS5tYWdpYz09PWUpcmV0dXJuIGhbdF07cmV0dXJuIG51bGx9KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gXCIrcy5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrXCIgdW5rbm93biAoaW5uZXIgZmlsZSA6IFwiK3MudHJhbnNmb3JtVG8oXCJzdHJpbmdcIix0aGlzLmZpbGVOYW1lKStcIilcIik7dGhpcy5kZWNvbXByZXNzZWQ9bmV3IGkodGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5jcmMzMix0LGUucmVhZERhdGEodGhpcy5jb21wcmVzc2VkU2l6ZSkpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oZSl7dGhpcy52ZXJzaW9uTWFkZUJ5PWUucmVhZEludCgyKSxlLnNraXAoMiksdGhpcy5iaXRGbGFnPWUucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPWUucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9ZS5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9ZS5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9ZS5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1lLnJlYWRJbnQoNCk7dmFyIHQ9ZS5yZWFkSW50KDIpO2lmKHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9ZS5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9ZS5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PWUucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9ZS5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1lLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1lLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcihcIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWRcIik7ZS5za2lwKHQpLHRoaXMucmVhZEV4dHJhRmllbGRzKGUpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoZSksdGhpcy5maWxlQ29tbWVudD1lLnJlYWREYXRhKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpfSxwcm9jZXNzQXR0cmlidXRlczpmdW5jdGlvbigpe3RoaXMudW5peFBlcm1pc3Npb25zPW51bGwsdGhpcy5kb3NQZXJtaXNzaW9ucz1udWxsO3ZhciBlPXRoaXMudmVyc2lvbk1hZGVCeT4+ODt0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpLDA9PWUmJih0aGlzLmRvc1Blcm1pc3Npb25zPTYzJnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksMz09ZSYmKHRoaXMudW5peFBlcm1pc3Npb25zPXRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz4+MTYmNjU1MzUpLHRoaXMuZGlyfHxcIi9cIiE9PXRoaXMuZmlsZU5hbWVTdHIuc2xpY2UoLTEpfHwodGhpcy5kaXI9ITApfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbigpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBlPW4odGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPWUucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PXMuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9ZS5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1lLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9ZS5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saT1lLmluZGV4K3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7Zm9yKHRoaXMuZXh0cmFGaWVsZHN8fCh0aGlzLmV4dHJhRmllbGRzPXt9KTtlLmluZGV4KzQ8aTspdD1lLnJlYWRJbnQoMikscj1lLnJlYWRJbnQoMiksbj1lLnJlYWREYXRhKHIpLHRoaXMuZXh0cmFGaWVsZHNbdF09e2lkOnQsbGVuZ3RoOnIsdmFsdWU6bn07ZS5zZXRJbmRleChpKX0saGFuZGxlVVRGODpmdW5jdGlvbigpe3ZhciBlPXUudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZVN0cj1vLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudFN0cj1vLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgdD10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtpZihudWxsIT09dCl0aGlzLmZpbGVOYW1lU3RyPXQ7ZWxzZXt2YXIgcj1zLnRyYW5zZm9ybVRvKGUsdGhpcy5maWxlTmFtZSk7dGhpcy5maWxlTmFtZVN0cj10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKHIpfXZhciBuPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO2lmKG51bGwhPT1uKXRoaXMuZmlsZUNvbW1lbnRTdHI9bjtlbHNle3ZhciBpPXMudHJhbnNmb3JtVG8oZSx0aGlzLmZpbGVDb21tZW50KTt0aGlzLmZpbGVDb21tZW50U3RyPXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUoaSl9fX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKGUpe3ZhciB0PW4oZS52YWx1ZSk7cmV0dXJuIDEhPT10LnJlYWRJbnQoMSk/bnVsbDphKHRoaXMuZmlsZU5hbWUpIT09dC5yZWFkSW50KDQpP251bGw6by51dGY4ZGVjb2RlKHQucmVhZERhdGEoZS5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoZSl7dmFyIHQ9bihlLnZhbHVlKTtyZXR1cm4gMSE9PXQucmVhZEludCgxKT9udWxsOmEodGhpcy5maWxlQ29tbWVudCkhPT10LnJlYWRJbnQoNCk/bnVsbDpvLnV0ZjhkZWNvZGUodC5yZWFkRGF0YShlLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSx0LmV4cG9ydHM9bH0se1wiLi9jb21wcmVzc2VkT2JqZWN0XCI6MixcIi4vY29tcHJlc3Npb25zXCI6MyxcIi4vY3JjMzJcIjo0LFwiLi9yZWFkZXIvcmVhZGVyRm9yXCI6MjIsXCIuL3N1cHBvcnRcIjozMCxcIi4vdXRmOFwiOjMxLFwiLi91dGlsc1wiOjMyfV0sMzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxyKXt0aGlzLm5hbWU9ZSx0aGlzLmRpcj1yLmRpcix0aGlzLmRhdGU9ci5kYXRlLHRoaXMuY29tbWVudD1yLmNvbW1lbnQsdGhpcy51bml4UGVybWlzc2lvbnM9ci51bml4UGVybWlzc2lvbnMsdGhpcy5kb3NQZXJtaXNzaW9ucz1yLmRvc1Blcm1pc3Npb25zLHRoaXMuX2RhdGE9dCx0aGlzLl9kYXRhQmluYXJ5PXIuYmluYXJ5LHRoaXMub3B0aW9ucz17Y29tcHJlc3Npb246ci5jb21wcmVzc2lvbixjb21wcmVzc2lvbk9wdGlvbnM6ci5jb21wcmVzc2lvbk9wdGlvbnN9fXZhciBzPWUoXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIiksaT1lKFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiKSxhPWUoXCIuL3V0ZjhcIiksbz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGg9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7bi5wcm90b3R5cGU9e2ludGVybmFsU3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciB0PW51bGwscj1cInN0cmluZ1wiO3RyeXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuXCIpO3ZhciBuPVwic3RyaW5nXCI9PT0ocj1lLnRvTG93ZXJDYXNlKCkpfHxcInRleHRcIj09PXI7XCJiaW5hcnlzdHJpbmdcIiE9PXImJlwidGV4dFwiIT09cnx8KHI9XCJzdHJpbmdcIiksdD10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7dmFyIGk9IXRoaXMuX2RhdGFCaW5hcnk7aSYmIW4mJih0PXQucGlwZShuZXcgYS5VdGY4RW5jb2RlV29ya2VyKSksIWkmJm4mJih0PXQucGlwZShuZXcgYS5VdGY4RGVjb2RlV29ya2VyKSl9Y2F0Y2goZSl7KHQ9bmV3IGgoXCJlcnJvclwiKSkuZXJyb3IoZSl9cmV0dXJuIG5ldyBzKHQscixcIlwiKX0sYXN5bmM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmVhbShlKS5hY2N1bXVsYXRlKHQpfSxub2RlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxTdHJlYW0oZXx8XCJub2RlYnVmZmVyXCIpLnRvTm9kZWpzU3RyZWFtKHQpfSxfY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgbyYmdGhpcy5fZGF0YS5jb21wcmVzc2lvbi5tYWdpYz09PWUubWFnaWMpcmV0dXJuIHRoaXMuX2RhdGEuZ2V0Q29tcHJlc3NlZFdvcmtlcigpO3ZhciByPXRoaXMuX2RlY29tcHJlc3NXb3JrZXIoKTtyZXR1cm4gdGhpcy5fZGF0YUJpbmFyeXx8KHI9ci5waXBlKG5ldyBhLlV0ZjhFbmNvZGVXb3JrZXIpKSxvLmNyZWF0ZVdvcmtlckZyb20ocixlLHQpfSxfZGVjb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhIGluc3RhbmNlb2Ygbz90aGlzLl9kYXRhLmdldENvbnRlbnRXb3JrZXIoKTp0aGlzLl9kYXRhIGluc3RhbmNlb2YgaD90aGlzLl9kYXRhOm5ldyBpKHRoaXMuX2RhdGEpfX07Zm9yKHZhciB1PVtcImFzVGV4dFwiLFwiYXNCaW5hcnlcIixcImFzTm9kZUJ1ZmZlclwiLFwiYXNVaW50OEFycmF5XCIsXCJhc0FycmF5QnVmZmVyXCJdLGw9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZj0wO2Y8dS5sZW5ndGg7ZisrKW4ucHJvdG90eXBlW3VbZl1dPWw7dC5leHBvcnRzPW59LHtcIi4vY29tcHJlc3NlZE9iamVjdFwiOjIsXCIuL3N0cmVhbS9EYXRhV29ya2VyXCI6MjcsXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIjoyOSxcIi4vdXRmOFwiOjMxfV0sMzY6W2Z1bmN0aW9uKGUsbCx0KXsoZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbixlPXQuTXV0YXRpb25PYnNlcnZlcnx8dC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKGUpe3ZhciBpPTAscz1uZXcgZSh1KSxhPXQuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7cy5vYnNlcnZlKGEse2NoYXJhY3RlckRhdGE6ITB9KSxyPWZ1bmN0aW9uKCl7YS5kYXRhPWk9KytpJTJ9fWVsc2UgaWYodC5zZXRJbW1lZGlhdGV8fHZvaWQgMD09PXQuTWVzc2FnZUNoYW5uZWwpcj1cImRvY3VtZW50XCJpbiB0JiZcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiaW4gdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpP2Z1bmN0aW9uKCl7dmFyIGU9dC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO2Uub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dSgpLGUub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGU9bnVsbH0sdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dCh1LDApfTtlbHNle3ZhciBvPW5ldyB0Lk1lc3NhZ2VDaGFubmVsO28ucG9ydDEub25tZXNzYWdlPXUscj1mdW5jdGlvbigpe28ucG9ydDIucG9zdE1lc3NhZ2UoMCl9fXZhciBoPVtdO2Z1bmN0aW9uIHUoKXt2YXIgZSx0O249ITA7Zm9yKHZhciByPWgubGVuZ3RoO3I7KXtmb3IodD1oLGg9W10sZT0tMTsrK2U8cjspdFtlXSgpO3I9aC5sZW5ndGh9bj0hMX1sLmV4cG9ydHM9ZnVuY3Rpb24oZSl7MSE9PWgucHVzaChlKXx8bnx8cigpfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDM3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcImltbWVkaWF0ZVwiKTtmdW5jdGlvbiB1KCl7fXZhciBsPXt9LHM9W1wiUkVKRUNURURcIl0sYT1bXCJGVUxGSUxMRURcIl0sbj1bXCJQRU5ESU5HXCJdO2Z1bmN0aW9uIG8oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3RoaXMuc3RhdGU9bix0aGlzLnF1ZXVlPVtdLHRoaXMub3V0Y29tZT12b2lkIDAsZSE9PXUmJmQodGhpcyxlKX1mdW5jdGlvbiBoKGUsdCxyKXt0aGlzLnByb21pc2U9ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodGhpcy5vbkZ1bGZpbGxlZD10LHRoaXMuY2FsbEZ1bGZpbGxlZD10aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZCksXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKHRoaXMub25SZWplY3RlZD1yLHRoaXMuY2FsbFJlamVjdGVkPXRoaXMub3RoZXJDYWxsUmVqZWN0ZWQpfWZ1bmN0aW9uIGYodCxyLG4pe2koZnVuY3Rpb24oKXt2YXIgZTt0cnl7ZT1yKG4pfWNhdGNoKGUpe3JldHVybiBsLnJlamVjdCh0LGUpfWU9PT10P2wucmVqZWN0KHQsbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGZcIikpOmwucmVzb2x2ZSh0LGUpfSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lJiZlLnRoZW47aWYoZSYmKFwib2JqZWN0XCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24oKXt0LmFwcGx5KGUsYXJndW1lbnRzKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPSExO2Z1bmN0aW9uIG4oZSl7cnx8KHI9ITAsbC5yZWplY3QodCxlKSl9ZnVuY3Rpb24gaShlKXtyfHwocj0hMCxsLnJlc29sdmUodCxlKSl9dmFyIHM9cChmdW5jdGlvbigpe2UoaSxuKX0pO1wiZXJyb3JcIj09PXMuc3RhdHVzJiZuKHMudmFsdWUpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj17fTt0cnl7ci52YWx1ZT1lKHQpLHIuc3RhdHVzPVwic3VjY2Vzc1wifWNhdGNoKGUpe3Iuc3RhdHVzPVwiZXJyb3JcIixyLnZhbHVlPWV9cmV0dXJuIHJ9KHQuZXhwb3J0cz1vKS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzO3ZhciByPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlfSl9LGZ1bmN0aW9uKGUpe3JldHVybiByLnJlc29sdmUodCgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfSl9LG8ucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4obnVsbCxlKX0sby5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJnRoaXMuc3RhdGU9PT1hfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZ0aGlzLnN0YXRlPT09cylyZXR1cm4gdGhpczt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih1KTt0aGlzLnN0YXRlIT09bj9mKHIsdGhpcy5zdGF0ZT09PWE/ZTp0LHRoaXMub3V0Y29tZSk6dGhpcy5xdWV1ZS5wdXNoKG5ldyBoKHIsZSx0KSk7cmV0dXJuIHJ9LGgucHJvdG90eXBlLmNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oZSl7bC5yZXNvbHZlKHRoaXMucHJvbWlzZSxlKX0saC5wcm90b3R5cGUub3RoZXJDYWxsRnVsZmlsbGVkPWZ1bmN0aW9uKGUpe2YodGhpcy5wcm9taXNlLHRoaXMub25GdWxmaWxsZWQsZSl9LGgucHJvdG90eXBlLmNhbGxSZWplY3RlZD1mdW5jdGlvbihlKXtsLnJlamVjdCh0aGlzLnByb21pc2UsZSl9LGgucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkPWZ1bmN0aW9uKGUpe2YodGhpcy5wcm9taXNlLHRoaXMub25SZWplY3RlZCxlKX0sbC5yZXNvbHZlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9cChjLHQpO2lmKFwiZXJyb3JcIj09PXIuc3RhdHVzKXJldHVybiBsLnJlamVjdChlLHIudmFsdWUpO3ZhciBuPXIudmFsdWU7aWYobilkKGUsbik7ZWxzZXtlLnN0YXRlPWEsZS5vdXRjb21lPXQ7Zm9yKHZhciBpPS0xLHM9ZS5xdWV1ZS5sZW5ndGg7KytpPHM7KWUucXVldWVbaV0uY2FsbEZ1bGZpbGxlZCh0KX1yZXR1cm4gZX0sbC5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtlLnN0YXRlPXMsZS5vdXRjb21lPXQ7Zm9yKHZhciByPS0xLG49ZS5xdWV1ZS5sZW5ndGg7KytyPG47KWUucXVldWVbcl0uY2FsbFJlamVjdGVkKHQpO3JldHVybiBlfSxvLnJlc29sdmU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHRoaXMpcmV0dXJuIGU7cmV0dXJuIGwucmVzb2x2ZShuZXcgdGhpcyh1KSxlKX0sby5yZWplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHRoaXModSk7cmV0dXJuIGwucmVqZWN0KHQsZSl9LG8uYWxsPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoXCJbb2JqZWN0IEFycmF5XVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKFwibXVzdCBiZSBhbiBhcnJheVwiKSk7dmFyIG49ZS5sZW5ndGgsaT0hMTtpZighbilyZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTt2YXIgcz1uZXcgQXJyYXkobiksYT0wLHQ9LTEsbz1uZXcgdGhpcyh1KTtmb3IoOysrdDxuOyloKGVbdF0sdCk7cmV0dXJuIG87ZnVuY3Rpb24gaChlLHQpe3IucmVzb2x2ZShlKS50aGVuKGZ1bmN0aW9uKGUpe3NbdF09ZSwrK2EhPT1ufHxpfHwoaT0hMCxsLnJlc29sdmUobyxzKSl9LGZ1bmN0aW9uKGUpe2l8fChpPSEwLGwucmVqZWN0KG8sZSkpfSl9fSxvLnJhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJtdXN0IGJlIGFuIGFycmF5XCIpKTt2YXIgcj1lLmxlbmd0aCxuPSExO2lmKCFyKXJldHVybiB0aGlzLnJlc29sdmUoW10pO3ZhciBpPS0xLHM9bmV3IHRoaXModSk7Zm9yKDsrK2k8cjspYT1lW2ldLHQucmVzb2x2ZShhKS50aGVuKGZ1bmN0aW9uKGUpe258fChuPSEwLGwucmVzb2x2ZShzLGUpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsbC5yZWplY3QocyxlKSl9KTt2YXIgYTtyZXR1cm4gc319LHtpbW1lZGlhdGU6MzZ9XSwzODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9OygwLGUoXCIuL2xpYi91dGlscy9jb21tb25cIikuYXNzaWduKShuLGUoXCIuL2xpYi9kZWZsYXRlXCIpLGUoXCIuL2xpYi9pbmZsYXRlXCIpLGUoXCIuL2xpYi96bGliL2NvbnN0YW50c1wiKSksdC5leHBvcnRzPW59LHtcIi4vbGliL2RlZmxhdGVcIjozOSxcIi4vbGliL2luZmxhdGVcIjo0MCxcIi4vbGliL3V0aWxzL2NvbW1vblwiOjQxLFwiLi9saWIvemxpYi9jb25zdGFudHNcIjo0NH1dLDM5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZShcIi4vemxpYi9kZWZsYXRlXCIpLG89ZShcIi4vdXRpbHMvY29tbW9uXCIpLGg9ZShcIi4vdXRpbHMvc3RyaW5nc1wiKSxpPWUoXCIuL3psaWIvbWVzc2FnZXNcIikscz1lKFwiLi96bGliL3pzdHJlYW1cIiksdT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGw9MCxmPS0xLGM9MCxkPTg7ZnVuY3Rpb24gcChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5vcHRpb25zPW8uYXNzaWduKHtsZXZlbDpmLG1ldGhvZDpkLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6Yyx0bzpcIlwifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO3QucmF3JiYwPHQud2luZG93Qml0cz90LndpbmRvd0JpdHM9LXQud2luZG93Qml0czp0Lmd6aXAmJjA8dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IHMsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPWEuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx0LmxldmVsLHQubWV0aG9kLHQud2luZG93Qml0cyx0Lm1lbUxldmVsLHQuc3RyYXRlZ3kpO2lmKHIhPT1sKXRocm93IG5ldyBFcnJvcihpW3JdKTtpZih0LmhlYWRlciYmYS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx0LmhlYWRlciksdC5kaWN0aW9uYXJ5KXt2YXIgbjtpZihuPVwic3RyaW5nXCI9PXR5cGVvZiB0LmRpY3Rpb25hcnk/aC5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09dS5jYWxsKHQuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTp0LmRpY3Rpb25hcnksKHI9YS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sbikpIT09bCl0aHJvdyBuZXcgRXJyb3IoaVtyXSk7dGhpcy5fZGljdF9zZXQ9ITB9fWZ1bmN0aW9uIG4oZSx0KXt2YXIgcj1uZXcgcCh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fGlbci5lcnJdO3JldHVybiByLnJlc3VsdH1wLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpPXRoaXMuc3RybSxzPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtuPXQ9PT1+fnQ/dDohMD09PXQ/NDowLFwic3RyaW5nXCI9PXR5cGVvZiBlP2kuaW5wdXQ9aC5zdHJpbmcyYnVmKGUpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PXUuY2FsbChlKT9pLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOmkuaW5wdXQ9ZSxpLm5leHRfaW49MCxpLmF2YWlsX2luPWkuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1pLmF2YWlsX291dCYmKGkub3V0cHV0PW5ldyBvLkJ1ZjgocyksaS5uZXh0X291dD0wLGkuYXZhaWxfb3V0PXMpLDEhPT0ocj1hLmRlZmxhdGUoaSxuKSkmJnIhPT1sKXJldHVybiB0aGlzLm9uRW5kKHIpLCEodGhpcy5lbmRlZD0hMCk7MCE9PWkuYXZhaWxfb3V0JiYoMCE9PWkuYXZhaWxfaW58fDQhPT1uJiYyIT09bil8fChcInN0cmluZ1wiPT09dGhpcy5vcHRpb25zLnRvP3RoaXMub25EYXRhKGguYnVmMmJpbnN0cmluZyhvLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKG8uc2hyaW5rQnVmKGkub3V0cHV0LGkubmV4dF9vdXQpKSl9d2hpbGUoKDA8aS5hdmFpbF9pbnx8MD09PWkuYXZhaWxfb3V0KSYmMSE9PXIpO3JldHVybiA0PT09bj8ocj1hLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAscj09PWwpOjIhPT1ufHwodGhpcy5vbkVuZChsKSwhKGkuYXZhaWxfb3V0PTApKX0scC5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LHAucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe2U9PT1sJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PW8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5EZWZsYXRlPXAsci5kZWZsYXRlPW4sci5kZWZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxuKGUsdCl9LHIuZ3ppcD1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nemlwPSEwLG4oZSx0KX19LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9kZWZsYXRlXCI6NDYsXCIuL3psaWIvbWVzc2FnZXNcIjo1MSxcIi4vemxpYi96c3RyZWFtXCI6NTN9XSw0MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBjPWUoXCIuL3psaWIvaW5mbGF0ZVwiKSxkPWUoXCIuL3V0aWxzL2NvbW1vblwiKSxwPWUoXCIuL3V0aWxzL3N0cmluZ3NcIiksbT1lKFwiLi96bGliL2NvbnN0YW50c1wiKSxuPWUoXCIuL3psaWIvbWVzc2FnZXNcIiksaT1lKFwiLi96bGliL3pzdHJlYW1cIikscz1lKFwiLi96bGliL2d6aGVhZGVyXCIpLF89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBhKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGEpKXJldHVybiBuZXcgYShlKTt0aGlzLm9wdGlvbnM9ZC5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86XCJcIn0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHM9LXQud2luZG93Qml0cywwPT09dC53aW5kb3dCaXRzJiYodC53aW5kb3dCaXRzPS0xNSkpLCEoMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYpfHxlJiZlLndpbmRvd0JpdHN8fCh0LndpbmRvd0JpdHMrPTMyKSwxNTx0LndpbmRvd0JpdHMmJnQud2luZG93Qml0czw0OCYmMD09KDE1JnQud2luZG93Qml0cykmJih0LndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGksdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPWMuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSx0LndpbmRvd0JpdHMpO2lmKHIhPT1tLlpfT0spdGhyb3cgbmV3IEVycm9yKG5bcl0pO3RoaXMuaGVhZGVyPW5ldyBzLGMuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj1uZXcgYSh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fG5bci5lcnJdO3JldHVybiByLnJlc3VsdH1hLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGg9dGhpcy5zdHJtLHU9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxsPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGY9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtuPXQ9PT1+fnQ/dDohMD09PXQ/bS5aX0ZJTklTSDptLlpfTk9fRkxVU0gsXCJzdHJpbmdcIj09dHlwZW9mIGU/aC5pbnB1dD1wLmJpbnN0cmluZzJidWYoZSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09Xy5jYWxsKGUpP2guaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6aC5pbnB1dD1lLGgubmV4dF9pbj0wLGguYXZhaWxfaW49aC5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWguYXZhaWxfb3V0JiYoaC5vdXRwdXQ9bmV3IGQuQnVmOCh1KSxoLm5leHRfb3V0PTAsaC5hdmFpbF9vdXQ9dSksKHI9Yy5pbmZsYXRlKGgsbS5aX05PX0ZMVVNIKSk9PT1tLlpfTkVFRF9ESUNUJiZsJiYobz1cInN0cmluZ1wiPT10eXBlb2YgbD9wLnN0cmluZzJidWYobCk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09Xy5jYWxsKGwpP25ldyBVaW50OEFycmF5KGwpOmwscj1jLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxvKSkscj09PW0uWl9CVUZfRVJST1ImJiEwPT09ZiYmKHI9bS5aX09LLGY9ITEpLHIhPT1tLlpfU1RSRUFNX0VORCYmciE9PW0uWl9PSylyZXR1cm4gdGhpcy5vbkVuZChyKSwhKHRoaXMuZW5kZWQ9ITApO2gubmV4dF9vdXQmJigwIT09aC5hdmFpbF9vdXQmJnIhPT1tLlpfU1RSRUFNX0VORCYmKDAhPT1oLmF2YWlsX2lufHxuIT09bS5aX0ZJTklTSCYmbiE9PW0uWl9TWU5DX0ZMVVNIKXx8KFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/KGk9cC51dGY4Ym9yZGVyKGgub3V0cHV0LGgubmV4dF9vdXQpLHM9aC5uZXh0X291dC1pLGE9cC5idWYyc3RyaW5nKGgub3V0cHV0LGkpLGgubmV4dF9vdXQ9cyxoLmF2YWlsX291dD11LXMscyYmZC5hcnJheVNldChoLm91dHB1dCxoLm91dHB1dCxpLHMsMCksdGhpcy5vbkRhdGEoYSkpOnRoaXMub25EYXRhKGQuc2hyaW5rQnVmKGgub3V0cHV0LGgubmV4dF9vdXQpKSkpLDA9PT1oLmF2YWlsX2luJiYwPT09aC5hdmFpbF9vdXQmJihmPSEwKX13aGlsZSgoMDxoLmF2YWlsX2lufHwwPT09aC5hdmFpbF9vdXQpJiZyIT09bS5aX1NUUkVBTV9FTkQpO3JldHVybiByPT09bS5aX1NUUkVBTV9FTkQmJihuPW0uWl9GSU5JU0gpLG49PT1tLlpfRklOSVNIPyhyPWMuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQociksdGhpcy5lbmRlZD0hMCxyPT09bS5aX09LKTpuIT09bS5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKG0uWl9PSyksIShoLmF2YWlsX291dD0wKSl9LGEucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxhLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09bS5aX09LJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PWQuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5JbmZsYXRlPWEsci5pbmZsYXRlPW8sci5pbmZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxvKGUsdCl9LHIudW5nemlwPW99LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9jb25zdGFudHNcIjo0NCxcIi4vemxpYi9nemhlYWRlclwiOjQ3LFwiLi96bGliL2luZmxhdGVcIjo0OSxcIi4vemxpYi9tZXNzYWdlc1wiOjUxLFwiLi96bGliL3pzdHJlYW1cIjo1M31dLDQxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEludDMyQXJyYXk7ci5hc3NpZ249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt0Lmxlbmd0aDspe3ZhciByPXQuc2hpZnQoKTtpZihyKXtpZihcIm9iamVjdFwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKHIrXCJtdXN0IGJlIG5vbi1vYmplY3RcIik7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09cltuXSl9fXJldHVybiBlfSxyLnNocmlua0J1Zj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD09PXQ/ZTplLnN1YmFycmF5P2Uuc3ViYXJyYXkoMCx0KTooZS5sZW5ndGg9dCxlKX07dmFyIGk9e2FycmF5U2V0OmZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodC5zdWJhcnJheSYmZS5zdWJhcnJheSllLnNldCh0LnN1YmFycmF5KHIscituKSxpKTtlbHNlIGZvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxzLGE7Zm9yKHQ9bj0wLHI9ZS5sZW5ndGg7dDxyO3QrKyluKz1lW3RdLmxlbmd0aDtmb3IoYT1uZXcgVWludDhBcnJheShuKSx0PWk9MCxyPWUubGVuZ3RoO3Q8cjt0Kyspcz1lW3RdLGEuc2V0KHMsaSksaSs9cy5sZW5ndGg7cmV0dXJuIGF9fSxzPXthcnJheVNldDpmdW5jdGlvbihlLHQscixuLGkpe2Zvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZSl9fTtyLnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KHIuQnVmOD1VaW50OEFycmF5LHIuQnVmMTY9VWludDE2QXJyYXksci5CdWYzMj1JbnQzMkFycmF5LHIuYXNzaWduKHIsaSkpOihyLkJ1Zjg9QXJyYXksci5CdWYxNj1BcnJheSxyLkJ1ZjMyPUFycmF5LHIuYXNzaWduKHIscykpfSxyLnNldFR5cGVkKG4pfSx7fV0sNDI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaD1lKFwiLi9jb21tb25cIiksaT0hMCxzPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaChlKXtpPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGUpe3M9ITF9Zm9yKHZhciB1PW5ldyBoLkJ1ZjgoMjU2KSxuPTA7bjwyNTY7bisrKXVbbl09MjUyPD1uPzY6MjQ4PD1uPzU6MjQwPD1uPzQ6MjI0PD1uPzM6MTkyPD1uPzI6MTtmdW5jdGlvbiBsKGUsdCl7aWYodDw2NTUzNyYmKGUuc3ViYXJyYXkmJnN8fCFlLnN1YmFycmF5JiZpKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGguc2hyaW5rQnVmKGUsdCkpO2Zvcih2YXIgcj1cIlwiLG49MDtuPHQ7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIHJ9dVsyNTRdPXVbMjU0XT0xLHIuc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxzLGE9ZS5sZW5ndGgsbz0wO2ZvcihpPTA7aTxhO2krKyk1NTI5Nj09KDY0NTEyJihyPWUuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQoaSsxKSkpJiYocj02NTUzNisoci01NTI5Njw8MTApKyhuLTU2MzIwKSxpKyspLG8rPXI8MTI4PzE6cjwyMDQ4PzI6cjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IGguQnVmOChvKSxpPXM9MDtzPG87aSsrKTU1Mjk2PT0oNjQ1MTImKHI9ZS5jaGFyQ29kZUF0KGkpKSkmJmkrMTxhJiY1NjMyMD09KDY0NTEyJihuPWUuY2hhckNvZGVBdChpKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKG4tNTYzMjApLGkrKykscjwxMjg/dFtzKytdPXI6KHI8MjA0OD90W3MrK109MTkyfHI+Pj42OihyPDY1NTM2P3RbcysrXT0yMjR8cj4+PjEyOih0W3MrK109MjQwfHI+Pj4xOCx0W3MrK109MTI4fHI+Pj4xMiY2MyksdFtzKytdPTEyOHxyPj4+NiY2MyksdFtzKytdPTEyOHw2MyZyKTtyZXR1cm4gdH0sci5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsZS5sZW5ndGgpfSxyLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBoLkJ1ZjgoZS5sZW5ndGgpLHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspdFtyXT1lLmNoYXJDb2RlQXQocik7cmV0dXJuIHR9LHIuYnVmMnN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxzLGE9dHx8ZS5sZW5ndGgsbz1uZXcgQXJyYXkoMiphKTtmb3Iocj1uPTA7cjxhOylpZigoaT1lW3IrK10pPDEyOClvW24rK109aTtlbHNlIGlmKDQ8KHM9dVtpXSkpb1tuKytdPTY1NTMzLHIrPXMtMTtlbHNle2ZvcihpJj0yPT09cz8zMTozPT09cz8xNTo3OzE8cyYmcjxhOylpPWk8PDZ8NjMmZVtyKytdLHMtLTsxPHM/b1tuKytdPTY1NTMzOmk8NjU1MzY/b1tuKytdPWk6KGktPTY1NTM2LG9bbisrXT01NTI5NnxpPj4xMCYxMDIzLG9bbisrXT01NjMyMHwxMDIzJmkpfXJldHVybiBsKG8sbil9LHIudXRmOGJvcmRlcj1mdW5jdGlvbihlLHQpe3ZhciByO2ZvcigodD10fHxlLmxlbmd0aCk+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxyPXQtMTswPD1yJiYxMjg9PSgxOTImZVtyXSk7KXItLTtyZXR1cm4gcjwwP3Q6MD09PXI/dDpyK3VbZVtyXV0+dD9yOnR9fSx7XCIuL2NvbW1vblwiOjQxfV0sNDM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBpPTY1NTM1JmV8MCxzPWU+Pj4xNiY2NTUzNXwwLGE9MDswIT09cjspe2ZvcihyLT1hPTJlMzxyPzJlMzpyO3M9cysoaT1pK3RbbisrXXwwKXwwLC0tYTspO2klPTY1NTIxLHMlPTY1NTIxfXJldHVybiBpfHM8PDE2fDB9fSx7fV0sNDQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw0NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10scj0wO3I8MjU2O3IrKyl7ZT1yO2Zvcih2YXIgbj0wO248ODtuKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W3JdPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPW8scz1uK3I7ZV49LTE7Zm9yKHZhciBhPW47YTxzO2ErKyllPWU+Pj44XmlbMjU1JihlXnRbYV0pXTtyZXR1cm4tMV5lfX0se31dLDQ2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGgsYz1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLHU9ZShcIi4vdHJlZXNcIiksZD1lKFwiLi9hZGxlcjMyXCIpLHA9ZShcIi4vY3JjMzJcIiksbj1lKFwiLi9tZXNzYWdlc1wiKSxsPTAsZj00LG09MCxfPS0yLGc9LTEsYj00LGk9Mix2PTgseT05LHM9Mjg2LGE9MzAsbz0xOSx3PTIqcysxLGs9MTUseD0zLFM9MjU4LHo9Uyt4KzEsQz00MixFPTExMyxBPTEsST0yLE89MyxCPTQ7ZnVuY3Rpb24gUihlLHQpe3JldHVybiBlLm1zZz1uW3RdLHR9ZnVuY3Rpb24gVChlKXtyZXR1cm4oZTw8MSktKDQ8ZT85OjApfWZ1bmN0aW9uIEQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS5zdGF0ZSxyPXQucGVuZGluZztyPmUuYXZhaWxfb3V0JiYocj1lLmF2YWlsX291dCksMCE9PXImJihjLmFycmF5U2V0KGUub3V0cHV0LHQucGVuZGluZ19idWYsdC5wZW5kaW5nX291dCxyLGUubmV4dF9vdXQpLGUubmV4dF9vdXQrPXIsdC5wZW5kaW5nX291dCs9cixlLnRvdGFsX291dCs9cixlLmF2YWlsX291dC09cix0LnBlbmRpbmctPXIsMD09PXQucGVuZGluZyYmKHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIE4oZSx0KXt1Ll90cl9mbHVzaF9ibG9jayhlLDA8PWUuYmxvY2tfc3RhcnQ/ZS5ibG9ja19zdGFydDotMSxlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQsdCksZS5ibG9ja19zdGFydD1lLnN0cnN0YXJ0LEYoZS5zdHJtKX1mdW5jdGlvbiBVKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dH1mdW5jdGlvbiBQKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0fWZ1bmN0aW9uIEwoZSx0KXt2YXIgcixuLGk9ZS5tYXhfY2hhaW5fbGVuZ3RoLHM9ZS5zdHJzdGFydCxhPWUucHJldl9sZW5ndGgsbz1lLm5pY2VfbWF0Y2gsaD1lLnN0cnN0YXJ0PmUud19zaXplLXo/ZS5zdHJzdGFydC0oZS53X3NpemUteik6MCx1PWUud2luZG93LGw9ZS53X21hc2ssZj1lLnByZXYsYz1lLnN0cnN0YXJ0K1MsZD11W3MrYS0xXSxwPXVbcythXTtlLnByZXZfbGVuZ3RoPj1lLmdvb2RfbWF0Y2gmJihpPj49Miksbz5lLmxvb2thaGVhZCYmKG89ZS5sb29rYWhlYWQpO2Rve2lmKHVbKHI9dCkrYV09PT1wJiZ1W3IrYS0xXT09PWQmJnVbcl09PT11W3NdJiZ1Wysrcl09PT11W3MrMV0pe3MrPTIscisrO2Rve313aGlsZSh1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmczxjKTtpZihuPVMtKGMtcykscz1jLVMsYTxuKXtpZihlLm1hdGNoX3N0YXJ0PXQsbzw9KGE9bikpYnJlYWs7ZD11W3MrYS0xXSxwPXVbcythXX19fXdoaWxlKCh0PWZbdCZsXSk+aCYmMCE9LS1pKTtyZXR1cm4gYTw9ZS5sb29rYWhlYWQ/YTplLmxvb2thaGVhZH1mdW5jdGlvbiBqKGUpe3ZhciB0LHIsbixpLHMsYSxvLGgsdSxsLGY9ZS53X3NpemU7ZG97aWYoaT1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49ZisoZi16KSl7Zm9yKGMuYXJyYXlTZXQoZS53aW5kb3csZS53aW5kb3csZixmLDApLGUubWF0Y2hfc3RhcnQtPWYsZS5zdHJzdGFydC09ZixlLmJsb2NrX3N0YXJ0LT1mLHQ9cj1lLmhhc2hfc2l6ZTtuPWUuaGVhZFstLXRdLGUuaGVhZFt0XT1mPD1uP24tZjowLC0tcjspO2Zvcih0PXI9ZjtuPWUucHJldlstLXRdLGUucHJldlt0XT1mPD1uP24tZjowLC0tcjspO2krPWZ9aWYoMD09PWUuc3RybS5hdmFpbF9pbilicmVhaztpZihhPWUuc3RybSxvPWUud2luZG93LGg9ZS5zdHJzdGFydCtlLmxvb2thaGVhZCx1PWksbD12b2lkIDAsbD1hLmF2YWlsX2luLHU8bCYmKGw9dSkscj0wPT09bD8wOihhLmF2YWlsX2luLT1sLGMuYXJyYXlTZXQobyxhLmlucHV0LGEubmV4dF9pbixsLGgpLDE9PT1hLnN0YXRlLndyYXA/YS5hZGxlcj1kKGEuYWRsZXIsbyxsLGgpOjI9PT1hLnN0YXRlLndyYXAmJihhLmFkbGVyPXAoYS5hZGxlcixvLGwsaCkpLGEubmV4dF9pbis9bCxhLnRvdGFsX2luKz1sLGwpLGUubG9va2FoZWFkKz1yLGUubG9va2FoZWFkK2UuaW5zZXJ0Pj14KWZvcihzPWUuc3Ryc3RhcnQtZS5pbnNlcnQsZS5pbnNfaD1lLndpbmRvd1tzXSxlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbcysxXSkmZS5oYXNoX21hc2s7ZS5pbnNlcnQmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbcyt4LTFdKSZlLmhhc2hfbWFzayxlLnByZXZbcyZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1zLHMrKyxlLmluc2VydC0tLCEoZS5sb29rYWhlYWQrZS5pbnNlcnQ8eCkpOyk7fXdoaWxlKGUubG9va2FoZWFkPHomJjAhPT1lLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFooZSx0KXtmb3IodmFyIHIsbjs7KXtpZihlLmxvb2thaGVhZDx6KXtpZihqKGUpLGUubG9va2FoZWFkPHomJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihyPTAsZS5sb29rYWhlYWQ+PXgmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCt4LTFdKSZlLmhhc2hfbWFzayxyPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLDAhPT1yJiZlLnN0cnN0YXJ0LXI8PWUud19zaXplLXomJihlLm1hdGNoX2xlbmd0aD1MKGUscikpLGUubWF0Y2hfbGVuZ3RoPj14KWlmKG49dS5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGgteCksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPD1lLm1heF9sYXp5X21hdGNoJiZlLmxvb2thaGVhZD49eCl7Zm9yKGUubWF0Y2hfbGVuZ3RoLS07ZS5zdHJzdGFydCsrLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K3gtMV0pJmUuaGFzaF9tYXNrLHI9ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCwwIT0tLWUubWF0Y2hfbGVuZ3RoOyk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIG49dS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKztpZihuJiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEF9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8eC0xP2Uuc3Ryc3RhcnQ6eC0xLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX1mdW5jdGlvbiBXKGUsdCl7Zm9yKHZhciByLG4saTs7KXtpZihlLmxvb2thaGVhZDx6KXtpZihqKGUpLGUubG9va2FoZWFkPHomJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihyPTAsZS5sb29rYWhlYWQ+PXgmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCt4LTFdKSZlLmhhc2hfbWFzayxyPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9eC0xLDAhPT1yJiZlLnByZXZfbGVuZ3RoPGUubWF4X2xhenlfbWF0Y2gmJmUuc3Ryc3RhcnQtcjw9ZS53X3NpemUteiYmKGUubWF0Y2hfbGVuZ3RoPUwoZSxyKSxlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1lLnN0cmF0ZWd5fHxlLm1hdGNoX2xlbmd0aD09PXgmJjQwOTY8ZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0KSYmKGUubWF0Y2hfbGVuZ3RoPXgtMSkpLGUucHJldl9sZW5ndGg+PXgmJmUubWF0Y2hfbGVuZ3RoPD1lLnByZXZfbGVuZ3RoKXtmb3IoaT1lLnN0cnN0YXJ0K2UubG9va2FoZWFkLXgsbj11Ll90cl90YWxseShlLGUuc3Ryc3RhcnQtMS1lLnByZXZfbWF0Y2gsZS5wcmV2X2xlbmd0aC14KSxlLmxvb2thaGVhZC09ZS5wcmV2X2xlbmd0aC0xLGUucHJldl9sZW5ndGgtPTI7KytlLnN0cnN0YXJ0PD1pJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQreC0xXSkmZS5oYXNoX21hc2sscj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSwwIT0tLWUucHJldl9sZW5ndGg7KTtpZihlLm1hdGNoX2F2YWlsYWJsZT0wLGUubWF0Y2hfbGVuZ3RoPXgtMSxlLnN0cnN0YXJ0KyssbiYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfWVsc2UgaWYoZS5tYXRjaF9hdmFpbGFibGUpe2lmKChuPXUuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0LTFdKSkmJk4oZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sMD09PWUuc3RybS5hdmFpbF9vdXQpcmV0dXJuIEF9ZWxzZSBlLm1hdGNoX2F2YWlsYWJsZT0xLGUuc3Ryc3RhcnQrKyxlLmxvb2thaGVhZC0tfXJldHVybiBlLm1hdGNoX2F2YWlsYWJsZSYmKG49dS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pLGUubWF0Y2hfYXZhaWxhYmxlPTApLGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8eC0xP2Uuc3Ryc3RhcnQ6eC0xLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX1mdW5jdGlvbiBNKGUsdCxyLG4saSl7dGhpcy5nb29kX2xlbmd0aD1lLHRoaXMubWF4X2xhenk9dCx0aGlzLm5pY2VfbGVuZ3RoPXIsdGhpcy5tYXhfY2hhaW49bix0aGlzLmZ1bmM9aX1mdW5jdGlvbiBIKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9dix0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgYy5CdWYxNigyKncpLHRoaXMuZHluX2R0cmVlPW5ldyBjLkJ1ZjE2KDIqKDIqYSsxKSksdGhpcy5ibF90cmVlPW5ldyBjLkJ1ZjE2KDIqKDIqbysxKSksRCh0aGlzLmR5bl9sdHJlZSksRCh0aGlzLmR5bl9kdHJlZSksRCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBjLkJ1ZjE2KGsrMSksdGhpcy5oZWFwPW5ldyBjLkJ1ZjE2KDIqcysxKSxEKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBjLkJ1ZjE2KDIqcysxKSxEKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIEcoZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KGUudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1pLCh0PWUuc3RhdGUpLnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwP0M6RSxlLmFkbGVyPTI9PT10LndyYXA/MDoxLHQubGFzdF9mbHVzaD1sLHUuX3RyX2luaXQodCksbSk6UihlLF8pfWZ1bmN0aW9uIEsoZSl7dmFyIHQ9RyhlKTtyZXR1cm4gdD09PW0mJmZ1bmN0aW9uKGUpe2Uud2luZG93X3NpemU9MiplLndfc2l6ZSxEKGUuaGVhZCksZS5tYXhfbGF6eV9tYXRjaD1oW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1oW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD1oW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLGUubWF4X2NoYWluX2xlbmd0aD1oW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPXgtMSxlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MH0oZS5zdGF0ZSksdH1mdW5jdGlvbiBZKGUsdCxyLG4saSxzKXtpZighZSlyZXR1cm4gXzt2YXIgYT0xO2lmKHQ9PT1nJiYodD02KSxuPDA/KGE9MCxuPS1uKToxNTxuJiYoYT0yLG4tPTE2KSxpPDF8fHk8aXx8ciE9PXZ8fG48OHx8MTU8bnx8dDwwfHw5PHR8fHM8MHx8YjxzKXJldHVybiBSKGUsXyk7OD09PW4mJihuPTkpO3ZhciBvPW5ldyBIO3JldHVybihlLnN0YXRlPW8pLnN0cm09ZSxvLndyYXA9YSxvLmd6aGVhZD1udWxsLG8ud19iaXRzPW4sby53X3NpemU9MTw8by53X2JpdHMsby53X21hc2s9by53X3NpemUtMSxvLmhhc2hfYml0cz1pKzcsby5oYXNoX3NpemU9MTw8by5oYXNoX2JpdHMsby5oYXNoX21hc2s9by5oYXNoX3NpemUtMSxvLmhhc2hfc2hpZnQ9fn4oKG8uaGFzaF9iaXRzK3gtMSkveCksby53aW5kb3c9bmV3IGMuQnVmOCgyKm8ud19zaXplKSxvLmhlYWQ9bmV3IGMuQnVmMTYoby5oYXNoX3NpemUpLG8ucHJldj1uZXcgYy5CdWYxNihvLndfc2l6ZSksby5saXRfYnVmc2l6ZT0xPDxpKzYsby5wZW5kaW5nX2J1Zl9zaXplPTQqby5saXRfYnVmc2l6ZSxvLnBlbmRpbmdfYnVmPW5ldyBjLkJ1Zjgoby5wZW5kaW5nX2J1Zl9zaXplKSxvLmRfYnVmPTEqby5saXRfYnVmc2l6ZSxvLmxfYnVmPTMqby5saXRfYnVmc2l6ZSxvLmxldmVsPXQsby5zdHJhdGVneT1zLG8ubWV0aG9kPXIsSyhlKX1oPVtuZXcgTSgwLDAsMCwwLGZ1bmN0aW9uKGUsdCl7dmFyIHI9NjU1MzU7Zm9yKHI+ZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihyPWUucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihlLmxvb2thaGVhZDw9MSl7aWYoaihlKSwwPT09ZS5sb29rYWhlYWQmJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31lLnN0cnN0YXJ0Kz1lLmxvb2thaGVhZCxlLmxvb2thaGVhZD0wO3ZhciBuPWUuYmxvY2tfc3RhcnQrcjtpZigoMD09PWUuc3Ryc3RhcnR8fGUuc3Ryc3RhcnQ+PW4pJiYoZS5sb29rYWhlYWQ9ZS5zdHJzdGFydC1uLGUuc3Ryc3RhcnQ9bixOKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQTtpZihlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQ+PWUud19zaXplLXomJihOKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQX1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09Zj8oTihlLCEwKSwwPT09ZS5zdHJtLmF2YWlsX291dD9POkIpOihlLnN0cnN0YXJ0PmUuYmxvY2tfc3RhcnQmJihOKGUsITEpLGUuc3RybS5hdmFpbF9vdXQpLEEpfSksbmV3IE0oNCw0LDgsNCxaKSxuZXcgTSg0LDUsMTYsOCxaKSxuZXcgTSg0LDYsMzIsMzIsWiksbmV3IE0oNCw0LDE2LDE2LFcpLG5ldyBNKDgsMTYsMzIsMzIsVyksbmV3IE0oOCwxNiwxMjgsMTI4LFcpLG5ldyBNKDgsMzIsMTI4LDI1NixXKSxuZXcgTSgzMiwxMjgsMjU4LDEwMjQsVyksbmV3IE0oMzIsMjU4LDI1OCw0MDk2LFcpXSxyLmRlZmxhdGVJbml0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFkoZSx0LHYsMTUsOCwwKX0sci5kZWZsYXRlSW5pdDI9WSxyLmRlZmxhdGVSZXNldD1LLHIuZGVmbGF0ZVJlc2V0S2VlcD1HLHIuZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLnN0YXRlPzIhPT1lLnN0YXRlLndyYXA/XzooZS5zdGF0ZS5nemhlYWQ9dCxtKTpffSxyLmRlZmxhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGkscztpZighZXx8IWUuc3RhdGV8fDU8dHx8dDwwKXJldHVybiBlP1IoZSxfKTpfO2lmKG49ZS5zdGF0ZSwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbnx8NjY2PT09bi5zdGF0dXMmJnQhPT1mKXJldHVybiBSKGUsMD09PWUuYXZhaWxfb3V0Py01Ol8pO2lmKG4uc3RybT1lLHI9bi5sYXN0X2ZsdXNoLG4ubGFzdF9mbHVzaD10LG4uc3RhdHVzPT09QylpZigyPT09bi53cmFwKWUuYWRsZXI9MCxVKG4sMzEpLFUobiwxMzkpLFUobiw4KSxuLmd6aGVhZD8oVShuLChuLmd6aGVhZC50ZXh0PzE6MCkrKG4uZ3poZWFkLmhjcmM/MjowKSsobi5nemhlYWQuZXh0cmE/NDowKSsobi5nemhlYWQubmFtZT84OjApKyhuLmd6aGVhZC5jb21tZW50PzE2OjApKSxVKG4sMjU1Jm4uZ3poZWFkLnRpbWUpLFUobixuLmd6aGVhZC50aW1lPj44JjI1NSksVShuLG4uZ3poZWFkLnRpbWU+PjE2JjI1NSksVShuLG4uZ3poZWFkLnRpbWU+PjI0JjI1NSksVShuLDk9PT1uLmxldmVsPzI6Mjw9bi5zdHJhdGVneXx8bi5sZXZlbDwyPzQ6MCksVShuLDI1NSZuLmd6aGVhZC5vcyksbi5nemhlYWQuZXh0cmEmJm4uZ3poZWFkLmV4dHJhLmxlbmd0aCYmKFUobiwyNTUmbi5nemhlYWQuZXh0cmEubGVuZ3RoKSxVKG4sbi5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLG4uZ3poZWFkLmhjcmMmJihlLmFkbGVyPXAoZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZywwKSksbi5nemluZGV4PTAsbi5zdGF0dXM9NjkpOihVKG4sMCksVShuLDApLFUobiwwKSxVKG4sMCksVShuLDApLFUobiw5PT09bi5sZXZlbD8yOjI8PW4uc3RyYXRlZ3l8fG4ubGV2ZWw8Mj80OjApLFUobiwzKSxuLnN0YXR1cz1FKTtlbHNle3ZhciBhPXYrKG4ud19iaXRzLTg8PDQpPDw4O2F8PSgyPD1uLnN0cmF0ZWd5fHxuLmxldmVsPDI/MDpuLmxldmVsPDY/MTo2PT09bi5sZXZlbD8yOjMpPDw2LDAhPT1uLnN0cnN0YXJ0JiYoYXw9MzIpLGErPTMxLWElMzEsbi5zdGF0dXM9RSxQKG4sYSksMCE9PW4uc3Ryc3RhcnQmJihQKG4sZS5hZGxlcj4+PjE2KSxQKG4sNjU1MzUmZS5hZGxlcikpLGUuYWRsZXI9MX1pZig2OT09PW4uc3RhdHVzKWlmKG4uZ3poZWFkLmV4dHJhKXtmb3IoaT1uLnBlbmRpbmc7bi5nemluZGV4PCg2NTUzNSZuLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYobi5wZW5kaW5nIT09bi5wZW5kaW5nX2J1Zl9zaXplfHwobi5nemhlYWQuaGNyYyYmbi5wZW5kaW5nPmkmJihlLmFkbGVyPXAoZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZy1pLGkpKSxGKGUpLGk9bi5wZW5kaW5nLG4ucGVuZGluZyE9PW4ucGVuZGluZ19idWZfc2l6ZSkpOylVKG4sMjU1Jm4uZ3poZWFkLmV4dHJhW24uZ3ppbmRleF0pLG4uZ3ppbmRleCsrO24uZ3poZWFkLmhjcmMmJm4ucGVuZGluZz5pJiYoZS5hZGxlcj1wKGUuYWRsZXIsbi5wZW5kaW5nX2J1ZixuLnBlbmRpbmctaSxpKSksbi5nemluZGV4PT09bi5nemhlYWQuZXh0cmEubGVuZ3RoJiYobi5nemluZGV4PTAsbi5zdGF0dXM9NzMpfWVsc2Ugbi5zdGF0dXM9NzM7aWYoNzM9PT1uLnN0YXR1cylpZihuLmd6aGVhZC5uYW1lKXtpPW4ucGVuZGluZztkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUmJihuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLEYoZSksaT1uLnBlbmRpbmcsbi5wZW5kaW5nPT09bi5wZW5kaW5nX2J1Zl9zaXplKSl7cz0xO2JyZWFrfXM9bi5nemluZGV4PG4uZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZuLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQobi5nemluZGV4KyspOjAsVShuLHMpfXdoaWxlKDAhPT1zKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLDA9PT1zJiYobi5nemluZGV4PTAsbi5zdGF0dXM9OTEpfWVsc2Ugbi5zdGF0dXM9OTE7aWYoOTE9PT1uLnN0YXR1cylpZihuLmd6aGVhZC5jb21tZW50KXtpPW4ucGVuZGluZztkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUmJihuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLEYoZSksaT1uLnBlbmRpbmcsbi5wZW5kaW5nPT09bi5wZW5kaW5nX2J1Zl9zaXplKSl7cz0xO2JyZWFrfXM9bi5nemluZGV4PG4uZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZuLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQobi5nemluZGV4KyspOjAsVShuLHMpfXdoaWxlKDAhPT1zKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLDA9PT1zJiYobi5zdGF0dXM9MTAzKX1lbHNlIG4uc3RhdHVzPTEwMztpZigxMDM9PT1uLnN0YXR1cyYmKG4uZ3poZWFkLmhjcmM/KG4ucGVuZGluZysyPm4ucGVuZGluZ19idWZfc2l6ZSYmRihlKSxuLnBlbmRpbmcrMjw9bi5wZW5kaW5nX2J1Zl9zaXplJiYoVShuLDI1NSZlLmFkbGVyKSxVKG4sZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MCxuLnN0YXR1cz1FKSk6bi5zdGF0dXM9RSksMCE9PW4ucGVuZGluZyl7aWYoRihlKSwwPT09ZS5hdmFpbF9vdXQpcmV0dXJuIG4ubGFzdF9mbHVzaD0tMSxtfWVsc2UgaWYoMD09PWUuYXZhaWxfaW4mJlQodCk8PVQocikmJnQhPT1mKXJldHVybiBSKGUsLTUpO2lmKDY2Nj09PW4uc3RhdHVzJiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gUihlLC01KTtpZigwIT09ZS5hdmFpbF9pbnx8MCE9PW4ubG9va2FoZWFkfHx0IT09bCYmNjY2IT09bi5zdGF0dXMpe3ZhciBvPTI9PT1uLnN0cmF0ZWd5P2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByOzspe2lmKDA9PT1lLmxvb2thaGVhZCYmKGooZSksMD09PWUubG9va2FoZWFkKSl7aWYodD09PWwpcmV0dXJuIEE7YnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxyPXUuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyssciYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfXJldHVybiBlLmluc2VydD0wLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX0obix0KTozPT09bi5zdHJhdGVneT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGkscyxhPWUud2luZG93Ozspe2lmKGUubG9va2FoZWFkPD1TKXtpZihqKGUpLGUubG9va2FoZWFkPD1TJiZ0PT09bClyZXR1cm4gQTtpZigwPT09ZS5sb29rYWhlYWQpYnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxlLmxvb2thaGVhZD49eCYmMDxlLnN0cnN0YXJ0JiYobj1hW2k9ZS5zdHJzdGFydC0xXSk9PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0pe3M9ZS5zdHJzdGFydCtTO2Rve313aGlsZShuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZpPHMpO2UubWF0Y2hfbGVuZ3RoPVMtKHMtaSksZS5tYXRjaF9sZW5ndGg+ZS5sb29rYWhlYWQmJihlLm1hdGNoX2xlbmd0aD1lLmxvb2thaGVhZCl9aWYoZS5tYXRjaF9sZW5ndGg+PXg/KHI9dS5fdHJfdGFsbHkoZSwxLGUubWF0Y2hfbGVuZ3RoLXgpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wKToocj11Ll90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydF0pLGUubG9va2FoZWFkLS0sZS5zdHJzdGFydCsrKSxyJiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEF9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWY/KE4oZSwhMCksMD09PWUuc3RybS5hdmFpbF9vdXQ/TzpCKTplLmxhc3RfbGl0JiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCk/QTpJfShuLHQpOmhbbi5sZXZlbF0uZnVuYyhuLHQpO2lmKG8hPT1PJiZvIT09Qnx8KG4uc3RhdHVzPTY2Niksbz09PUF8fG89PT1PKXJldHVybiAwPT09ZS5hdmFpbF9vdXQmJihuLmxhc3RfZmx1c2g9LTEpLG07aWYobz09PUkmJigxPT09dD91Ll90cl9hbGlnbihuKTo1IT09dCYmKHUuX3RyX3N0b3JlZF9ibG9jayhuLDAsMCwhMSksMz09PXQmJihEKG4uaGVhZCksMD09PW4ubG9va2FoZWFkJiYobi5zdHJzdGFydD0wLG4uYmxvY2tfc3RhcnQ9MCxuLmluc2VydD0wKSkpLEYoZSksMD09PWUuYXZhaWxfb3V0KSlyZXR1cm4gbi5sYXN0X2ZsdXNoPS0xLG19cmV0dXJuIHQhPT1mP206bi53cmFwPD0wPzE6KDI9PT1uLndyYXA/KFUobiwyNTUmZS5hZGxlciksVShuLGUuYWRsZXI+PjgmMjU1KSxVKG4sZS5hZGxlcj4+MTYmMjU1KSxVKG4sZS5hZGxlcj4+MjQmMjU1KSxVKG4sMjU1JmUudG90YWxfaW4pLFUobixlLnRvdGFsX2luPj44JjI1NSksVShuLGUudG90YWxfaW4+PjE2JjI1NSksVShuLGUudG90YWxfaW4+PjI0JjI1NSkpOihQKG4sZS5hZGxlcj4+PjE2KSxQKG4sNjU1MzUmZS5hZGxlcikpLEYoZSksMDxuLndyYXAmJihuLndyYXA9LW4ud3JhcCksMCE9PW4ucGVuZGluZz9tOjEpfSxyLmRlZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KHQ9ZS5zdGF0ZS5zdGF0dXMpIT09QyYmNjkhPT10JiY3MyE9PXQmJjkxIT09dCYmMTAzIT09dCYmdCE9PUUmJjY2NiE9PXQ/UihlLF8pOihlLnN0YXRlPW51bGwsdD09PUU/UihlLC0zKTptKTpffSxyLmRlZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsPXQubGVuZ3RoO2lmKCFlfHwhZS5zdGF0ZSlyZXR1cm4gXztpZigyPT09KHM9KHI9ZS5zdGF0ZSkud3JhcCl8fDE9PT1zJiZyLnN0YXR1cyE9PUN8fHIubG9va2FoZWFkKXJldHVybiBfO2ZvcigxPT09cyYmKGUuYWRsZXI9ZChlLmFkbGVyLHQsbCwwKSksci53cmFwPTAsbD49ci53X3NpemUmJigwPT09cyYmKEQoci5oZWFkKSxyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApLHU9bmV3IGMuQnVmOChyLndfc2l6ZSksYy5hcnJheVNldCh1LHQsbC1yLndfc2l6ZSxyLndfc2l6ZSwwKSx0PXUsbD1yLndfc2l6ZSksYT1lLmF2YWlsX2luLG89ZS5uZXh0X2luLGg9ZS5pbnB1dCxlLmF2YWlsX2luPWwsZS5uZXh0X2luPTAsZS5pbnB1dD10LGoocik7ci5sb29rYWhlYWQ+PXg7KXtmb3Iobj1yLnN0cnN0YXJ0LGk9ci5sb29rYWhlYWQtKHgtMSk7ci5pbnNfaD0oci5pbnNfaDw8ci5oYXNoX3NoaWZ0XnIud2luZG93W24reC0xXSkmci5oYXNoX21hc2ssci5wcmV2W24mci53X21hc2tdPXIuaGVhZFtyLmluc19oXSxyLmhlYWRbci5pbnNfaF09bixuKyssLS1pOyk7ci5zdHJzdGFydD1uLHIubG9va2FoZWFkPXgtMSxqKHIpfXJldHVybiByLnN0cnN0YXJ0Kz1yLmxvb2thaGVhZCxyLmJsb2NrX3N0YXJ0PXIuc3Ryc3RhcnQsci5pbnNlcnQ9ci5sb29rYWhlYWQsci5sb29rYWhlYWQ9MCxyLm1hdGNoX2xlbmd0aD1yLnByZXZfbGVuZ3RoPXgtMSxyLm1hdGNoX2F2YWlsYWJsZT0wLGUubmV4dF9pbj1vLGUuaW5wdXQ9aCxlLmF2YWlsX2luPWEsci53cmFwPXMsbX0sci5kZWZsYXRlSW5mbz1cInBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcIn0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL2FkbGVyMzJcIjo0MyxcIi4vY3JjMzJcIjo0NSxcIi4vbWVzc2FnZXNcIjo1MSxcIi4vdHJlZXNcIjo1Mn1dLDQ3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPVwiXCIsdGhpcy5jb21tZW50PVwiXCIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDQ4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsLGYsYyxkLHAsbSxfLGcsYix2LHksdyxrLHgsUyx6LEM7cj1lLnN0YXRlLG49ZS5uZXh0X2luLHo9ZS5pbnB1dCxpPW4rKGUuYXZhaWxfaW4tNSkscz1lLm5leHRfb3V0LEM9ZS5vdXRwdXQsYT1zLSh0LWUuYXZhaWxfb3V0KSxvPXMrKGUuYXZhaWxfb3V0LTI1NyksaD1yLmRtYXgsdT1yLndzaXplLGw9ci53aGF2ZSxmPXIud25leHQsYz1yLndpbmRvdyxkPXIuaG9sZCxwPXIuYml0cyxtPXIubGVuY29kZSxfPXIuZGlzdGNvZGUsZz0oMTw8ci5sZW5iaXRzKS0xLGI9KDE8PHIuZGlzdGJpdHMpLTE7ZTpkb3twPDE1JiYoZCs9eltuKytdPDxwLHArPTgsZCs9eltuKytdPDxwLHArPTgpLHY9bVtkJmddO3Q6Zm9yKDs7KXtpZihkPj4+PXk9dj4+PjI0LHAtPXksMD09PSh5PXY+Pj4xNiYyNTUpKUNbcysrXT02NTUzNSZ2O2Vsc2V7aWYoISgxNiZ5KSl7aWYoMD09KDY0JnkpKXt2PW1bKDY1NTM1JnYpKyhkJigxPDx5KS0xKV07Y29udGludWUgdH1pZigzMiZ5KXtyLm1vZGU9MTI7YnJlYWsgZX1lLm1zZz1cImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZVwiLHIubW9kZT0zMDticmVhayBlfXc9NjU1MzUmdiwoeSY9MTUpJiYocDx5JiYoZCs9eltuKytdPDxwLHArPTgpLHcrPWQmKDE8PHkpLTEsZD4+Pj15LHAtPXkpLHA8MTUmJihkKz16W24rK108PHAscCs9OCxkKz16W24rK108PHAscCs9OCksdj1fW2QmYl07cjpmb3IoOzspe2lmKGQ+Pj49eT12Pj4+MjQscC09eSwhKDE2Jih5PXY+Pj4xNiYyNTUpKSl7aWYoMD09KDY0JnkpKXt2PV9bKDY1NTM1JnYpKyhkJigxPDx5KS0xKV07Y29udGludWUgcn1lLm1zZz1cImludmFsaWQgZGlzdGFuY2UgY29kZVwiLHIubW9kZT0zMDticmVhayBlfWlmKGs9NjU1MzUmdixwPCh5Jj0xNSkmJihkKz16W24rK108PHAsKHArPTgpPHkmJihkKz16W24rK108PHAscCs9OCkpLGg8KGsrPWQmKDE8PHkpLTEpKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrIGV9aWYoZD4+Pj15LHAtPXksKHk9cy1hKTxrKXtpZihsPCh5PWsteSkmJnIuc2FuZSl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVhayBlfWlmKFM9YywoeD0wKT09PWYpe2lmKHgrPXUteSx5PHcpe2Zvcih3LT15O0NbcysrXT1jW3grK10sLS15Oyk7eD1zLWssUz1DfX1lbHNlIGlmKGY8eSl7aWYoeCs9dStmLXksKHktPWYpPHcpe2Zvcih3LT15O0NbcysrXT1jW3grK10sLS15Oyk7aWYoeD0wLGY8dyl7Zm9yKHctPXk9ZjtDW3MrK109Y1t4KytdLC0teTspO3g9cy1rLFM9Q319fWVsc2UgaWYoeCs9Zi15LHk8dyl7Zm9yKHctPXk7Q1tzKytdPWNbeCsrXSwtLXk7KTt4PXMtayxTPUN9Zm9yKDsyPHc7KUNbcysrXT1TW3grK10sQ1tzKytdPVNbeCsrXSxDW3MrK109U1t4KytdLHctPTM7dyYmKENbcysrXT1TW3grK10sMTx3JiYoQ1tzKytdPVNbeCsrXSkpfWVsc2V7Zm9yKHg9cy1rO0NbcysrXT1DW3grK10sQ1tzKytdPUNbeCsrXSxDW3MrK109Q1t4KytdLDI8KHctPTMpOyk7dyYmKENbcysrXT1DW3grK10sMTx3JiYoQ1tzKytdPUNbeCsrXSkpfWJyZWFrfX1icmVha319d2hpbGUobjxpJiZzPG8pO24tPXc9cD4+MyxkJj0oMTw8KHAtPXc8PDMpKS0xLGUubmV4dF9pbj1uLGUubmV4dF9vdXQ9cyxlLmF2YWlsX2luPW48aT9pLW4rNTo1LShuLWkpLGUuYXZhaWxfb3V0PXM8bz9vLXMrMjU3OjI1Ny0ocy1vKSxyLmhvbGQ9ZCxyLmJpdHM9cH19LHt9XSw0OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBJPWUoXCIuLi91dGlscy9jb21tb25cIiksTz1lKFwiLi9hZGxlcjMyXCIpLEI9ZShcIi4vY3JjMzJcIiksUj1lKFwiLi9pbmZmYXN0XCIpLFQ9ZShcIi4vaW5mdHJlZXNcIiksRD0xLEY9MixOPTAsVT0tMixQPTEsbj04NTIsaT01OTI7ZnVuY3Rpb24gTChlKXtyZXR1cm4oZT4+PjI0JjI1NSkrKGU+Pj44JjY1MjgwKSsoKDY1MjgwJmUpPDw4KSsoKDI1NSZlKTw8MjQpfWZ1bmN0aW9uIHMoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IEkuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IEkuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gYShlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8odD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPVwiXCIsdC53cmFwJiYoZS5hZGxlcj0xJnQud3JhcCksdC5tb2RlPVAsdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IEkuQnVmMzIobiksdC5kaXN0Y29kZT10LmRpc3RkeW49bmV3IEkuQnVmMzIoaSksdC5zYW5lPTEsdC5iYWNrPS0xLE4pOlV9ZnVuY3Rpb24gbyhlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8oKHQ9ZS5zdGF0ZSkud3NpemU9MCx0LndoYXZlPTAsdC53bmV4dD0wLGEoZSkpOlV9ZnVuY3Rpb24gaChlLHQpe3ZhciByLG47cmV0dXJuIGUmJmUuc3RhdGU/KG49ZS5zdGF0ZSx0PDA/KHI9MCx0PS10KToocj0xKyh0Pj40KSx0PDQ4JiYodCY9MTUpKSx0JiYodDw4fHwxNTx0KT9VOihudWxsIT09bi53aW5kb3cmJm4ud2JpdHMhPT10JiYobi53aW5kb3c9bnVsbCksbi53cmFwPXIsbi53Yml0cz10LG8oZSkpKTpVfWZ1bmN0aW9uIHUoZSx0KXt2YXIgcixuO3JldHVybiBlPyhuPW5ldyBzLChlLnN0YXRlPW4pLndpbmRvdz1udWxsLChyPWgoZSx0KSkhPT1OJiYoZS5zdGF0ZT1udWxsKSxyKTpVfXZhciBsLGYsYz0hMDtmdW5jdGlvbiBqKGUpe2lmKGMpe3ZhciB0O2ZvcihsPW5ldyBJLkJ1ZjMyKDUxMiksZj1uZXcgSS5CdWYzMigzMiksdD0wO3Q8MTQ0OyllLmxlbnNbdCsrXT04O2Zvcig7dDwyNTY7KWUubGVuc1t0KytdPTk7Zm9yKDt0PDI4MDspZS5sZW5zW3QrK109Nztmb3IoO3Q8Mjg4OyllLmxlbnNbdCsrXT04O2ZvcihUKEQsZS5sZW5zLDAsMjg4LGwsMCxlLndvcmsse2JpdHM6OX0pLHQ9MDt0PDMyOyllLmxlbnNbdCsrXT01O1QoRixlLmxlbnMsMCwzMixmLDAsZS53b3JrLHtiaXRzOjV9KSxjPSExfWUubGVuY29kZT1sLGUubGVuYml0cz05LGUuZGlzdGNvZGU9ZixlLmRpc3RiaXRzPTV9ZnVuY3Rpb24gWihlLHQscixuKXt2YXIgaSxzPWUuc3RhdGU7cmV0dXJuIG51bGw9PT1zLndpbmRvdyYmKHMud3NpemU9MTw8cy53Yml0cyxzLnduZXh0PTAscy53aGF2ZT0wLHMud2luZG93PW5ldyBJLkJ1Zjgocy53c2l6ZSkpLG4+PXMud3NpemU/KEkuYXJyYXlTZXQocy53aW5kb3csdCxyLXMud3NpemUscy53c2l6ZSwwKSxzLnduZXh0PTAscy53aGF2ZT1zLndzaXplKToobjwoaT1zLndzaXplLXMud25leHQpJiYoaT1uKSxJLmFycmF5U2V0KHMud2luZG93LHQsci1uLGkscy53bmV4dCksKG4tPWkpPyhJLmFycmF5U2V0KHMud2luZG93LHQsci1uLG4sMCkscy53bmV4dD1uLHMud2hhdmU9cy53c2l6ZSk6KHMud25leHQrPWkscy53bmV4dD09PXMud3NpemUmJihzLnduZXh0PTApLHMud2hhdmU8cy53c2l6ZSYmKHMud2hhdmUrPWkpKSksMH1yLmluZmxhdGVSZXNldD1vLHIuaW5mbGF0ZVJlc2V0Mj1oLHIuaW5mbGF0ZVJlc2V0S2VlcD1hLHIuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNSl9LHIuaW5mbGF0ZUluaXQyPXUsci5pbmZsYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsLGYsYyxkLHAsbSxfLGcsYix2LHksdyxrLHgsUyx6LEM9MCxFPW5ldyBJLkJ1ZjgoNCksQT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIWV8fCFlLnN0YXRlfHwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gVTsxMj09PShyPWUuc3RhdGUpLm1vZGUmJihyLm1vZGU9MTMpLGE9ZS5uZXh0X291dCxpPWUub3V0cHV0LGg9ZS5hdmFpbF9vdXQscz1lLm5leHRfaW4sbj1lLmlucHV0LG89ZS5hdmFpbF9pbix1PXIuaG9sZCxsPXIuYml0cyxmPW8sYz1oLHg9TjtlOmZvcig7Oylzd2l0Y2goci5tb2RlKXtjYXNlIFA6aWYoMD09PXIud3JhcCl7ci5tb2RlPTEzO2JyZWFrfWZvcig7bDwxNjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKDImci53cmFwJiYzNTYxNT09PXUpe0Vbci5jaGVjaz0wXT0yNTUmdSxFWzFdPXU+Pj44JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDIsMCksbD11PTAsci5tb2RlPTI7YnJlYWt9aWYoci5mbGFncz0wLHIuaGVhZCYmKHIuaGVhZC5kb25lPSExKSwhKDEmci53cmFwKXx8KCgoMjU1JnUpPDw4KSsodT4+OCkpJTMxKXtlLm1zZz1cImluY29ycmVjdCBoZWFkZXIgY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9aWYoOCE9KDE1JnUpKXtlLm1zZz1cInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kXCIsci5tb2RlPTMwO2JyZWFrfWlmKGwtPTQsaz04KygxNSYodT4+Pj00KSksMD09PXIud2JpdHMpci53Yml0cz1rO2Vsc2UgaWYoaz5yLndiaXRzKXtlLm1zZz1cImludmFsaWQgd2luZG93IHNpemVcIixyLm1vZGU9MzA7YnJlYWt9ci5kbWF4PTE8PGssZS5hZGxlcj1yLmNoZWNrPTEsci5tb2RlPTUxMiZ1PzEwOjEyLGw9dT0wO2JyZWFrO2Nhc2UgMjpmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZihyLmZsYWdzPXUsOCE9KDI1NSZyLmZsYWdzKSl7ZS5tc2c9XCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFwiLHIubW9kZT0zMDticmVha31pZig1NzM0NCZyLmZsYWdzKXtlLm1zZz1cInVua25vd24gaGVhZGVyIGZsYWdzIHNldFwiLHIubW9kZT0zMDticmVha31yLmhlYWQmJihyLmhlYWQudGV4dD11Pj44JjEpLDUxMiZyLmZsYWdzJiYoRVswXT0yNTUmdSxFWzFdPXU+Pj44JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDIsMCkpLGw9dT0wLHIubW9kZT0zO2Nhc2UgMzpmb3IoO2w8MzI7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmhlYWQmJihyLmhlYWQudGltZT11KSw1MTImci5mbGFncyYmKEVbMF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsRVsyXT11Pj4+MTYmMjU1LEVbM109dT4+PjI0JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDQsMCkpLGw9dT0wLHIubW9kZT00O2Nhc2UgNDpmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmhlYWQmJihyLmhlYWQueGZsYWdzPTI1NSZ1LHIuaGVhZC5vcz11Pj44KSw1MTImci5mbGFncyYmKEVbMF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsci5jaGVjaz1CKHIuY2hlY2ssRSwyLDApKSxsPXU9MCxyLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZyLmZsYWdzKXtmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmxlbmd0aD11LHIuaGVhZCYmKHIuaGVhZC5leHRyYV9sZW49dSksNTEyJnIuZmxhZ3MmJihFWzBdPTI1NSZ1LEVbMV09dT4+PjgmMjU1LHIuY2hlY2s9QihyLmNoZWNrLEUsMiwwKSksbD11PTB9ZWxzZSByLmhlYWQmJihyLmhlYWQuZXh0cmE9bnVsbCk7ci5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmci5mbGFncyYmKG88KGQ9ci5sZW5ndGgpJiYoZD1vKSxkJiYoci5oZWFkJiYoaz1yLmhlYWQuZXh0cmFfbGVuLXIubGVuZ3RoLHIuaGVhZC5leHRyYXx8KHIuaGVhZC5leHRyYT1uZXcgQXJyYXkoci5oZWFkLmV4dHJhX2xlbikpLEkuYXJyYXlTZXQoci5oZWFkLmV4dHJhLG4scyxkLGspKSw1MTImci5mbGFncyYmKHIuY2hlY2s9QihyLmNoZWNrLG4sZCxzKSksby09ZCxzKz1kLHIubGVuZ3RoLT1kKSxyLmxlbmd0aCkpYnJlYWsgZTtyLmxlbmd0aD0wLHIubW9kZT03O2Nhc2UgNzppZigyMDQ4JnIuZmxhZ3Mpe2lmKDA9PT1vKWJyZWFrIGU7Zm9yKGQ9MDtrPW5bcytkKytdLHIuaGVhZCYmayYmci5sZW5ndGg8NjU1MzYmJihyLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSksayYmZDxvOyk7aWYoNTEyJnIuZmxhZ3MmJihyLmNoZWNrPUIoci5jaGVjayxuLGQscykpLG8tPWQscys9ZCxrKWJyZWFrIGV9ZWxzZSByLmhlYWQmJihyLmhlYWQubmFtZT1udWxsKTtyLmxlbmd0aD0wLHIubW9kZT04O2Nhc2UgODppZig0MDk2JnIuZmxhZ3Mpe2lmKDA9PT1vKWJyZWFrIGU7Zm9yKGQ9MDtrPW5bcytkKytdLHIuaGVhZCYmayYmci5sZW5ndGg8NjU1MzYmJihyLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSksayYmZDxvOyk7aWYoNTEyJnIuZmxhZ3MmJihyLmNoZWNrPUIoci5jaGVjayxuLGQscykpLG8tPWQscys9ZCxrKWJyZWFrIGV9ZWxzZSByLmhlYWQmJihyLmhlYWQuY29tbWVudD1udWxsKTtyLm1vZGU9OTtjYXNlIDk6aWYoNTEyJnIuZmxhZ3Mpe2Zvcig7bDwxNjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKHUhPT0oNjU1MzUmci5jaGVjaykpe2UubXNnPVwiaGVhZGVyIGNyYyBtaXNtYXRjaFwiLHIubW9kZT0zMDticmVha31sPXU9MH1yLmhlYWQmJihyLmhlYWQuaGNyYz1yLmZsYWdzPj45JjEsci5oZWFkLmRvbmU9ITApLGUuYWRsZXI9ci5jaGVjaz0wLHIubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7bDwzMjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWUuYWRsZXI9ci5jaGVjaz1MKHUpLGw9dT0wLHIubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1yLmhhdmVkaWN0KXJldHVybiBlLm5leHRfb3V0PWEsZS5hdmFpbF9vdXQ9aCxlLm5leHRfaW49cyxlLmF2YWlsX2luPW8sci5ob2xkPXUsci5iaXRzPWwsMjtlLmFkbGVyPXIuY2hlY2s9MSxyLm1vZGU9MTI7Y2FzZSAxMjppZig1PT09dHx8Nj09PXQpYnJlYWsgZTtjYXNlIDEzOmlmKHIubGFzdCl7dT4+Pj03JmwsbC09NyZsLHIubW9kZT0yNzticmVha31mb3IoO2w8Mzspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXN3aXRjaChyLmxhc3Q9MSZ1LGwtPTEsMyYodT4+Pj0xKSl7Y2FzZSAwOnIubW9kZT0xNDticmVhaztjYXNlIDE6aWYoaihyKSxyLm1vZGU9MjAsNiE9PXQpYnJlYWs7dT4+Pj0yLGwtPTI7YnJlYWsgZTtjYXNlIDI6ci5tb2RlPTE3O2JyZWFrO2Nhc2UgMzplLm1zZz1cImludmFsaWQgYmxvY2sgdHlwZVwiLHIubW9kZT0zMH11Pj4+PTIsbC09MjticmVhaztjYXNlIDE0OmZvcih1Pj4+PTcmbCxsLT03Jmw7bDwzMjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKCg2NTUzNSZ1KSE9KHU+Pj4xNl42NTUzNSkpe2UubXNnPVwiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Roc1wiLHIubW9kZT0zMDticmVha31pZihyLmxlbmd0aD02NTUzNSZ1LGw9dT0wLHIubW9kZT0xNSw2PT09dClicmVhayBlO2Nhc2UgMTU6ci5tb2RlPTE2O2Nhc2UgMTY6aWYoZD1yLmxlbmd0aCl7aWYobzxkJiYoZD1vKSxoPGQmJihkPWgpLDA9PT1kKWJyZWFrIGU7SS5hcnJheVNldChpLG4scyxkLGEpLG8tPWQscys9ZCxoLT1kLGErPWQsci5sZW5ndGgtPWQ7YnJlYWt9ci5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtsPDE0Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9aWYoci5ubGVuPTI1NysoMzEmdSksdT4+Pj01LGwtPTUsci5uZGlzdD0xKygzMSZ1KSx1Pj4+PTUsbC09NSxyLm5jb2RlPTQrKDE1JnUpLHU+Pj49NCxsLT00LDI4NjxyLm5sZW58fDMwPHIubmRpc3Qpe2UubXNnPVwidG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHNcIixyLm1vZGU9MzA7YnJlYWt9ci5oYXZlPTAsci5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtyLmhhdmU8ci5uY29kZTspe2Zvcig7bDwzOyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9ci5sZW5zW0Fbci5oYXZlKytdXT03JnUsdT4+Pj0zLGwtPTN9Zm9yKDtyLmhhdmU8MTk7KXIubGVuc1tBW3IuaGF2ZSsrXV09MDtpZihyLmxlbmNvZGU9ci5sZW5keW4sci5sZW5iaXRzPTcsUz17Yml0czpyLmxlbmJpdHN9LHg9VCgwLHIubGVucywwLDE5LHIubGVuY29kZSwwLHIud29yayxTKSxyLmxlbmJpdHM9Uy5iaXRzLHgpe2UubXNnPVwiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0XCIsci5tb2RlPTMwO2JyZWFrfXIuaGF2ZT0wLHIubW9kZT0xOTtjYXNlIDE5OmZvcig7ci5oYXZlPHIubmxlbityLm5kaXN0Oyl7Zm9yKDtnPShDPXIubGVuY29kZVt1JigxPDxyLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxiPTY1NTM1JkMsISgoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKGI8MTYpdT4+Pj1fLGwtPV8sci5sZW5zW3IuaGF2ZSsrXT1iO2Vsc2V7aWYoMTY9PT1iKXtmb3Ioej1fKzI7bDx6Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9aWYodT4+Pj1fLGwtPV8sMD09PXIuaGF2ZSl7ZS5tc2c9XCJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0XCIsci5tb2RlPTMwO2JyZWFrfWs9ci5sZW5zW3IuaGF2ZS0xXSxkPTMrKDMmdSksdT4+Pj0yLGwtPTJ9ZWxzZSBpZigxNz09PWIpe2Zvcih6PV8rMztsPHo7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1sLT1fLGs9MCxkPTMrKDcmKHU+Pj49XykpLHU+Pj49MyxsLT0zfWVsc2V7Zm9yKHo9Xys3O2w8ejspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWwtPV8saz0wLGQ9MTErKDEyNyYodT4+Pj1fKSksdT4+Pj03LGwtPTd9aWYoci5oYXZlK2Q+ci5ubGVuK3IubmRpc3Qpe2UubXNnPVwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFwiLHIubW9kZT0zMDticmVha31mb3IoO2QtLTspci5sZW5zW3IuaGF2ZSsrXT1rfX1pZigzMD09PXIubW9kZSlicmVhaztpZigwPT09ci5sZW5zWzI1Nl0pe2UubXNnPVwiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrXCIsci5tb2RlPTMwO2JyZWFrfWlmKHIubGVuYml0cz05LFM9e2JpdHM6ci5sZW5iaXRzfSx4PVQoRCxyLmxlbnMsMCxyLm5sZW4sci5sZW5jb2RlLDAsci53b3JrLFMpLHIubGVuYml0cz1TLmJpdHMseCl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5kaXN0Yml0cz02LHIuZGlzdGNvZGU9ci5kaXN0ZHluLFM9e2JpdHM6ci5kaXN0Yml0c30seD1UKEYsci5sZW5zLHIubmxlbixyLm5kaXN0LHIuZGlzdGNvZGUsMCxyLndvcmssUyksci5kaXN0Yml0cz1TLmJpdHMseCl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlcyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5tb2RlPTIwLDY9PT10KWJyZWFrIGU7Y2FzZSAyMDpyLm1vZGU9MjE7Y2FzZSAyMTppZig2PD1vJiYyNTg8PWgpe2UubmV4dF9vdXQ9YSxlLmF2YWlsX291dD1oLGUubmV4dF9pbj1zLGUuYXZhaWxfaW49byxyLmhvbGQ9dSxyLmJpdHM9bCxSKGUsYyksYT1lLm5leHRfb3V0LGk9ZS5vdXRwdXQsaD1lLmF2YWlsX291dCxzPWUubmV4dF9pbixuPWUuaW5wdXQsbz1lLmF2YWlsX2luLHU9ci5ob2xkLGw9ci5iaXRzLDEyPT09ci5tb2RlJiYoci5iYWNrPS0xKTticmVha31mb3Ioci5iYWNrPTA7Zz0oQz1yLmxlbmNvZGVbdSYoMTw8ci5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEoKF89Qz4+PjI0KTw9bCk7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZihnJiYwPT0oMjQwJmcpKXtmb3Iodj1fLHk9Zyx3PWI7Zz0oQz1yLmxlbmNvZGVbdysoKHUmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEodisoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXU+Pj49dixsLT12LHIuYmFjays9dn1pZih1Pj4+PV8sbC09XyxyLmJhY2srPV8sci5sZW5ndGg9YiwwPT09Zyl7ci5tb2RlPTI2O2JyZWFrfWlmKDMyJmcpe3IuYmFjaz0tMSxyLm1vZGU9MTI7YnJlYWt9aWYoNjQmZyl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGVcIixyLm1vZGU9MzA7YnJlYWt9ci5leHRyYT0xNSZnLHIubW9kZT0yMjtjYXNlIDIyOmlmKHIuZXh0cmEpe2Zvcih6PXIuZXh0cmE7bDx6Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9ci5sZW5ndGgrPXUmKDE8PHIuZXh0cmEpLTEsdT4+Pj1yLmV4dHJhLGwtPXIuZXh0cmEsci5iYWNrKz1yLmV4dHJhfXIud2FzPXIubGVuZ3RoLHIubW9kZT0yMztjYXNlIDIzOmZvcig7Zz0oQz1yLmRpc3Rjb2RlW3UmKDE8PHIuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxiPTY1NTM1JkMsISgoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKDA9PSgyNDAmZykpe2Zvcih2PV8seT1nLHc9YjtnPShDPXIuZGlzdGNvZGVbdysoKHUmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEodisoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXU+Pj49dixsLT12LHIuYmFjays9dn1pZih1Pj4+PV8sbC09XyxyLmJhY2srPV8sNjQmZyl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIGNvZGVcIixyLm1vZGU9MzA7YnJlYWt9ci5vZmZzZXQ9YixyLmV4dHJhPTE1Jmcsci5tb2RlPTI0O2Nhc2UgMjQ6aWYoci5leHRyYSl7Zm9yKHo9ci5leHRyYTtsPHo7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLm9mZnNldCs9dSYoMTw8ci5leHRyYSktMSx1Pj4+PXIuZXh0cmEsbC09ci5leHRyYSxyLmJhY2srPXIuZXh0cmF9aWYoci5vZmZzZXQ+ci5kbWF4KXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrfXIubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1oKWJyZWFrIGU7aWYoZD1jLWgsci5vZmZzZXQ+ZCl7aWYoKGQ9ci5vZmZzZXQtZCk+ci53aGF2ZSYmci5zYW5lKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrfXA9ZD5yLnduZXh0PyhkLT1yLnduZXh0LHIud3NpemUtZCk6ci53bmV4dC1kLGQ+ci5sZW5ndGgmJihkPXIubGVuZ3RoKSxtPXIud2luZG93fWVsc2UgbT1pLHA9YS1yLm9mZnNldCxkPXIubGVuZ3RoO2ZvcihoPGQmJihkPWgpLGgtPWQsci5sZW5ndGgtPWQ7aVthKytdPW1bcCsrXSwtLWQ7KTswPT09ci5sZW5ndGgmJihyLm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWgpYnJlYWsgZTtpW2ErK109ci5sZW5ndGgsaC0tLHIubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKHIud3JhcCl7Zm9yKDtsPDMyOyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdXw9bltzKytdPDxsLGwrPTh9aWYoYy09aCxlLnRvdGFsX291dCs9YyxyLnRvdGFsKz1jLGMmJihlLmFkbGVyPXIuY2hlY2s9ci5mbGFncz9CKHIuY2hlY2ssaSxjLGEtYyk6TyhyLmNoZWNrLGksYyxhLWMpKSxjPWgsKHIuZmxhZ3M/dTpMKHUpKSE9PXIuY2hlY2spe2UubXNnPVwiaW5jb3JyZWN0IGRhdGEgY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9bD11PTB9ci5tb2RlPTI4O2Nhc2UgMjg6aWYoci53cmFwJiZyLmZsYWdzKXtmb3IoO2w8MzI7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZih1IT09KDQyOTQ5NjcyOTUmci50b3RhbCkpe2UubXNnPVwiaW5jb3JyZWN0IGxlbmd0aCBjaGVja1wiLHIubW9kZT0zMDticmVha31sPXU9MH1yLm1vZGU9Mjk7Y2FzZSAyOTp4PTE7YnJlYWsgZTtjYXNlIDMwOng9LTM7YnJlYWsgZTtjYXNlIDMxOnJldHVybi00O2Nhc2UgMzI6ZGVmYXVsdDpyZXR1cm4gVX1yZXR1cm4gZS5uZXh0X291dD1hLGUuYXZhaWxfb3V0PWgsZS5uZXh0X2luPXMsZS5hdmFpbF9pbj1vLHIuaG9sZD11LHIuYml0cz1sLChyLndzaXplfHxjIT09ZS5hdmFpbF9vdXQmJnIubW9kZTwzMCYmKHIubW9kZTwyN3x8NCE9PXQpKSYmWihlLGUub3V0cHV0LGUubmV4dF9vdXQsYy1lLmF2YWlsX291dCk/KHIubW9kZT0zMSwtNCk6KGYtPWUuYXZhaWxfaW4sYy09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9ZixlLnRvdGFsX291dCs9YyxyLnRvdGFsKz1jLHIud3JhcCYmYyYmKGUuYWRsZXI9ci5jaGVjaz1yLmZsYWdzP0Ioci5jaGVjayxpLGMsZS5uZXh0X291dC1jKTpPKHIuY2hlY2ssaSxjLGUubmV4dF9vdXQtYykpLGUuZGF0YV90eXBlPXIuYml0cysoci5sYXN0PzY0OjApKygxMj09PXIubW9kZT8xMjg6MCkrKDIwPT09ci5tb2RlfHwxNT09PXIubW9kZT8yNTY6MCksKDA9PWYmJjA9PT1jfHw0PT09dCkmJng9PT1OJiYoeD0tNSkseCl9LHIuaW5mbGF0ZUVuZD1mdW5jdGlvbihlKXtpZighZXx8IWUuc3RhdGUpcmV0dXJuIFU7dmFyIHQ9ZS5zdGF0ZTtyZXR1cm4gdC53aW5kb3cmJih0LndpbmRvdz1udWxsKSxlLnN0YXRlPW51bGwsTn0sci5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIGUmJmUuc3RhdGU/MD09KDImKHI9ZS5zdGF0ZSkud3JhcCk/VTooKHIuaGVhZD10KS5kb25lPSExLE4pOlV9LHIuaW5mbGF0ZVNldERpY3Rpb25hcnk9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXQubGVuZ3RoO3JldHVybiBlJiZlLnN0YXRlPzAhPT0ocj1lLnN0YXRlKS53cmFwJiYxMSE9PXIubW9kZT9VOjExPT09ci5tb2RlJiZPKDEsdCxuLDApIT09ci5jaGVjaz8tMzpaKGUsdCxuLG4pPyhyLm1vZGU9MzEsLTQpOihyLmhhdmVkaWN0PTEsTik6VX0sci5pbmZsYXRlSW5mbz1cInBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcIn0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL2FkbGVyMzJcIjo0MyxcIi4vY3JjMzJcIjo0NSxcIi4vaW5mZmFzdFwiOjQ4LFwiLi9pbmZ0cmVlc1wiOjUwfV0sNTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgRD1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLEY9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxOPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sUD1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuLGkscyxhLG8pe3ZhciBoLHUsbCxmLGMsZCxwLG0sXyxnPW8uYml0cyxiPTAsdj0wLHk9MCx3PTAsaz0wLHg9MCxTPTAsej0wLEM9MCxFPTAsQT1udWxsLEk9MCxPPW5ldyBELkJ1ZjE2KDE2KSxCPW5ldyBELkJ1ZjE2KDE2KSxSPW51bGwsVD0wO2ZvcihiPTA7Yjw9MTU7YisrKU9bYl09MDtmb3Iodj0wO3Y8bjt2KyspT1t0W3Irdl1dKys7Zm9yKGs9Zyx3PTE1OzE8PXcmJjA9PT1PW3ddO3ctLSk7aWYodzxrJiYoaz13KSwwPT09dylyZXR1cm4gaVtzKytdPTIwOTcxNTIwLGlbcysrXT0yMDk3MTUyMCxvLmJpdHM9MSwwO2Zvcih5PTE7eTx3JiYwPT09T1t5XTt5KyspO2ZvcihrPHkmJihrPXkpLGI9ej0xO2I8PTE1O2IrKylpZih6PDw9MSwoei09T1tiXSk8MClyZXR1cm4tMTtpZigwPHomJigwPT09ZXx8MSE9PXcpKXJldHVybi0xO2ZvcihCWzFdPTAsYj0xO2I8MTU7YisrKUJbYisxXT1CW2JdK09bYl07Zm9yKHY9MDt2PG47disrKTAhPT10W3Irdl0mJihhW0JbdFtyK3ZdXSsrXT12KTtpZihkPTA9PT1lPyhBPVI9YSwxOSk6MT09PWU/KEE9RixJLT0yNTcsUj1OLFQtPTI1NywyNTYpOihBPVUsUj1QLC0xKSxiPXksYz1zLFM9dj1FPTAsbD0tMSxmPShDPTE8PCh4PWspKS0xLDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2Zvcig7Oyl7Zm9yKHA9Yi1TLF89YVt2XTxkPyhtPTAsYVt2XSk6YVt2XT5kPyhtPVJbVCthW3ZdXSxBW0krYVt2XV0pOihtPTk2LDApLGg9MTw8Yi1TLHk9dT0xPDx4O2lbYysoRT4+UykrKHUtPWgpXT1wPDwyNHxtPDwxNnxffDAsMCE9PXU7KTtmb3IoaD0xPDxiLTE7RSZoOyloPj49MTtpZigwIT09aD8oRSY9aC0xLEUrPWgpOkU9MCx2KyssMD09LS1PW2JdKXtpZihiPT09dylicmVhaztiPXRbcithW3ZdXX1pZihrPGImJihFJmYpIT09bCl7Zm9yKDA9PT1TJiYoUz1rKSxjKz15LHo9MTw8KHg9Yi1TKTt4K1M8dyYmISgoei09T1t4K1NdKTw9MCk7KXgrKyx6PDw9MTtpZihDKz0xPDx4LDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2lbbD1FJmZdPWs8PDI0fHg8PDE2fGMtc3wwfX1yZXR1cm4gMCE9PUUmJihpW2MrRV09Yi1TPDwyNHw2NDw8MTZ8MCksby5iaXRzPWssMH19LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxfV0sNTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ezI6XCJuZWVkIGRpY3Rpb25hcnlcIiwxOlwic3RyZWFtIGVuZFwiLDA6XCJcIixcIi0xXCI6XCJmaWxlIGVycm9yXCIsXCItMlwiOlwic3RyZWFtIGVycm9yXCIsXCItM1wiOlwiZGF0YSBlcnJvclwiLFwiLTRcIjpcImluc3VmZmljaWVudCBtZW1vcnlcIixcIi01XCI6XCJidWZmZXIgZXJyb3JcIixcIi02XCI6XCJpbmNvbXBhdGlibGUgdmVyc2lvblwifX0se31dLDUyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcIi4uL3V0aWxzL2NvbW1vblwiKSxvPTAsaD0xO2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfXZhciBzPTAsYT0yOSx1PTI1NixsPXUrMSthLGY9MzAsYz0xOSxfPTIqbCsxLGc9MTUsZD0xNixwPTcsbT0yNTYsYj0xNix2PTE3LHk9MTgsdz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxrPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSx4PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxTPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSx6PW5ldyBBcnJheSgyKihsKzIpKTtuKHopO3ZhciBDPW5ldyBBcnJheSgyKmYpO24oQyk7dmFyIEU9bmV3IEFycmF5KDUxMik7bihFKTt2YXIgQT1uZXcgQXJyYXkoMjU2KTtuKEEpO3ZhciBJPW5ldyBBcnJheShhKTtuKEkpO3ZhciBPLEIsUixUPW5ldyBBcnJheShmKTtmdW5jdGlvbiBEKGUsdCxyLG4saSl7dGhpcy5zdGF0aWNfdHJlZT1lLHRoaXMuZXh0cmFfYml0cz10LHRoaXMuZXh0cmFfYmFzZT1yLHRoaXMuZWxlbXM9bix0aGlzLm1heF9sZW5ndGg9aSx0aGlzLmhhc19zdHJlZT1lJiZlLmxlbmd0aH1mdW5jdGlvbiBGKGUsdCl7dGhpcy5keW5fdHJlZT1lLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz10fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGU8MjU2P0VbZV06RVsyNTYrKGU+Pj43KV19ZnVuY3Rpb24gVShlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQ+Pj44JjI1NX1mdW5jdGlvbiBQKGUsdCxyKXtlLmJpX3ZhbGlkPmQtcj8oZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsVShlLGUuYmlfYnVmKSxlLmJpX2J1Zj10Pj5kLWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9ci1kKTooZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsZS5iaV92YWxpZCs9cil9ZnVuY3Rpb24gTChlLHQscil7UChlLHJbMip0XSxyWzIqdCsxXSl9ZnVuY3Rpb24gaihlLHQpe2Zvcih2YXIgcj0wO3J8PTEmZSxlPj4+PTEscjw8PTEsMDwtLXQ7KTtyZXR1cm4gcj4+PjF9ZnVuY3Rpb24gWihlLHQscil7dmFyIG4saSxzPW5ldyBBcnJheShnKzEpLGE9MDtmb3Iobj0xO248PWc7bisrKXNbbl09YT1hK3Jbbi0xXTw8MTtmb3IoaT0wO2k8PXQ7aSsrKXt2YXIgbz1lWzIqaSsxXTswIT09byYmKGVbMippXT1qKHNbb10rKyxvKSl9fWZ1bmN0aW9uIFcoZSl7dmFyIHQ7Zm9yKHQ9MDt0PGw7dCsrKWUuZHluX2x0cmVlWzIqdF09MDtmb3IodD0wO3Q8Zjt0KyspZS5keW5fZHRyZWVbMip0XT0wO2Zvcih0PTA7dDxjO3QrKyllLmJsX3RyZWVbMip0XT0wO2UuZHluX2x0cmVlWzIqbV09MSxlLm9wdF9sZW49ZS5zdGF0aWNfbGVuPTAsZS5sYXN0X2xpdD1lLm1hdGNoZXM9MH1mdW5jdGlvbiBNKGUpezg8ZS5iaV92YWxpZD9VKGUsZS5iaV9idWYpOjA8ZS5iaV92YWxpZCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH1mdW5jdGlvbiBIKGUsdCxyLG4pe3ZhciBpPTIqdCxzPTIqcjtyZXR1cm4gZVtpXTxlW3NdfHxlW2ldPT09ZVtzXSYmblt0XTw9bltyXX1mdW5jdGlvbiBHKGUsdCxyKXtmb3IodmFyIG49ZS5oZWFwW3JdLGk9cjw8MTtpPD1lLmhlYXBfbGVuJiYoaTxlLmhlYXBfbGVuJiZIKHQsZS5oZWFwW2krMV0sZS5oZWFwW2ldLGUuZGVwdGgpJiZpKyssIUgodCxuLGUuaGVhcFtpXSxlLmRlcHRoKSk7KWUuaGVhcFtyXT1lLmhlYXBbaV0scj1pLGk8PD0xO2UuaGVhcFtyXT1ufWZ1bmN0aW9uIEsoZSx0LHIpe3ZhciBuLGkscyxhLG89MDtpZigwIT09ZS5sYXN0X2xpdClmb3IoO249ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqb108PDh8ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqbysxXSxpPWUucGVuZGluZ19idWZbZS5sX2J1ZitvXSxvKyssMD09PW4/TChlLGksdCk6KEwoZSwocz1BW2ldKSt1KzEsdCksMCE9PShhPXdbc10pJiZQKGUsaS09SVtzXSxhKSxMKGUscz1OKC0tbiksciksMCE9PShhPWtbc10pJiZQKGUsbi09VFtzXSxhKSksbzxlLmxhc3RfbGl0Oyk7TChlLG0sdCl9ZnVuY3Rpb24gWShlLHQpe3ZhciByLG4saSxzPXQuZHluX3RyZWUsYT10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxvPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxoPXQuc3RhdF9kZXNjLmVsZW1zLHU9LTE7Zm9yKGUuaGVhcF9sZW49MCxlLmhlYXBfbWF4PV8scj0wO3I8aDtyKyspMCE9PXNbMipyXT8oZS5oZWFwWysrZS5oZWFwX2xlbl09dT1yLGUuZGVwdGhbcl09MCk6c1syKnIrMV09MDtmb3IoO2UuaGVhcF9sZW48Mjspc1syKihpPWUuaGVhcFsrK2UuaGVhcF9sZW5dPXU8Mj8rK3U6MCldPTEsZS5kZXB0aFtpXT0wLGUub3B0X2xlbi0tLG8mJihlLnN0YXRpY19sZW4tPWFbMippKzFdKTtmb3IodC5tYXhfY29kZT11LHI9ZS5oZWFwX2xlbj4+MTsxPD1yO3ItLSlHKGUscyxyKTtmb3IoaT1oO3I9ZS5oZWFwWzFdLGUuaGVhcFsxXT1lLmhlYXBbZS5oZWFwX2xlbi0tXSxHKGUscywxKSxuPWUuaGVhcFsxXSxlLmhlYXBbLS1lLmhlYXBfbWF4XT1yLGUuaGVhcFstLWUuaGVhcF9tYXhdPW4sc1syKmldPXNbMipyXStzWzIqbl0sZS5kZXB0aFtpXT0oZS5kZXB0aFtyXT49ZS5kZXB0aFtuXT9lLmRlcHRoW3JdOmUuZGVwdGhbbl0pKzEsc1syKnIrMV09c1syKm4rMV09aSxlLmhlYXBbMV09aSsrLEcoZSxzLDEpLDI8PWUuaGVhcF9sZW47KTtlLmhlYXBbLS1lLmhlYXBfbWF4XT1lLmhlYXBbMV0sZnVuY3Rpb24oZSx0KXt2YXIgcixuLGkscyxhLG8saD10LmR5bl90cmVlLHU9dC5tYXhfY29kZSxsPXQuc3RhdF9kZXNjLnN0YXRpY190cmVlLGY9dC5zdGF0X2Rlc2MuaGFzX3N0cmVlLGM9dC5zdGF0X2Rlc2MuZXh0cmFfYml0cyxkPXQuc3RhdF9kZXNjLmV4dHJhX2Jhc2UscD10LnN0YXRfZGVzYy5tYXhfbGVuZ3RoLG09MDtmb3Iocz0wO3M8PWc7cysrKWUuYmxfY291bnRbc109MDtmb3IoaFsyKmUuaGVhcFtlLmhlYXBfbWF4XSsxXT0wLHI9ZS5oZWFwX21heCsxO3I8XztyKyspcDwocz1oWzIqaFsyKihuPWUuaGVhcFtyXSkrMV0rMV0rMSkmJihzPXAsbSsrKSxoWzIqbisxXT1zLHU8bnx8KGUuYmxfY291bnRbc10rKyxhPTAsZDw9biYmKGE9Y1tuLWRdKSxvPWhbMipuXSxlLm9wdF9sZW4rPW8qKHMrYSksZiYmKGUuc3RhdGljX2xlbis9byoobFsyKm4rMV0rYSkpKTtpZigwIT09bSl7ZG97Zm9yKHM9cC0xOzA9PT1lLmJsX2NvdW50W3NdOylzLS07ZS5ibF9jb3VudFtzXS0tLGUuYmxfY291bnRbcysxXSs9MixlLmJsX2NvdW50W3BdLS0sbS09Mn13aGlsZSgwPG0pO2ZvcihzPXA7MCE9PXM7cy0tKWZvcihuPWUuYmxfY291bnRbc107MCE9PW47KXU8KGk9ZS5oZWFwWy0tcl0pfHwoaFsyKmkrMV0hPT1zJiYoZS5vcHRfbGVuKz0ocy1oWzIqaSsxXSkqaFsyKmldLGhbMippKzFdPXMpLG4tLSl9fShlLHQpLFoocyx1LGUuYmxfY291bnQpfWZ1bmN0aW9uIFgoZSx0LHIpe3ZhciBuLGkscz0tMSxhPXRbMV0sbz0wLGg9Nyx1PTQ7Zm9yKDA9PT1hJiYoaD0xMzgsdT0zKSx0WzIqKHIrMSkrMV09NjU1MzUsbj0wO248PXI7bisrKWk9YSxhPXRbMioobisxKSsxXSwrK288aCYmaT09PWF8fChvPHU/ZS5ibF90cmVlWzIqaV0rPW86MCE9PWk/KGkhPT1zJiZlLmJsX3RyZWVbMippXSsrLGUuYmxfdHJlZVsyKmJdKyspOm88PTEwP2UuYmxfdHJlZVsyKnZdKys6ZS5ibF90cmVlWzIqeV0rKyxzPWksdT0obz0wKT09PWE/KGg9MTM4LDMpOmk9PT1hPyhoPTYsMyk6KGg9Nyw0KSl9ZnVuY3Rpb24gVihlLHQscil7dmFyIG4saSxzPS0xLGE9dFsxXSxvPTAsaD03LHU9NDtmb3IoMD09PWEmJihoPTEzOCx1PTMpLG49MDtuPD1yO24rKylpZihpPWEsYT10WzIqKG4rMSkrMV0sISgrK288aCYmaT09PWEpKXtpZihvPHUpZm9yKDtMKGUsaSxlLmJsX3RyZWUpLDAhPS0tbzspO2Vsc2UgMCE9PWk/KGkhPT1zJiYoTChlLGksZS5ibF90cmVlKSxvLS0pLEwoZSxiLGUuYmxfdHJlZSksUChlLG8tMywyKSk6bzw9MTA/KEwoZSx2LGUuYmxfdHJlZSksUChlLG8tMywzKSk6KEwoZSx5LGUuYmxfdHJlZSksUChlLG8tMTEsNykpO3M9aSx1PShvPTApPT09YT8oaD0xMzgsMyk6aT09PWE/KGg9NiwzKTooaD03LDQpfX1uKFQpO3ZhciBxPSExO2Z1bmN0aW9uIEooZSx0LHIsbil7UChlLChzPDwxKSsobj8xOjApLDMpLGZ1bmN0aW9uKGUsdCxyLG4pe00oZSksbiYmKFUoZSxyKSxVKGUsfnIpKSxpLmFycmF5U2V0KGUucGVuZGluZ19idWYsZS53aW5kb3csdCxyLGUucGVuZGluZyksZS5wZW5kaW5nKz1yfShlLHQsciwhMCl9ci5fdHJfaW5pdD1mdW5jdGlvbihlKXtxfHwoZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpLHM9bmV3IEFycmF5KGcrMSk7Zm9yKG49cj0wO248YS0xO24rKylmb3IoSVtuXT1yLGU9MDtlPDE8PHdbbl07ZSsrKUFbcisrXT1uO2ZvcihBW3ItMV09bixuPWk9MDtuPDE2O24rKylmb3IoVFtuXT1pLGU9MDtlPDE8PGtbbl07ZSsrKUVbaSsrXT1uO2ZvcihpPj49NztuPGY7bisrKWZvcihUW25dPWk8PDcsZT0wO2U8MTw8a1tuXS03O2UrKylFWzI1NitpKytdPW47Zm9yKHQ9MDt0PD1nO3QrKylzW3RdPTA7Zm9yKGU9MDtlPD0xNDM7KXpbMiplKzFdPTgsZSsrLHNbOF0rKztmb3IoO2U8PTI1NTspelsyKmUrMV09OSxlKyssc1s5XSsrO2Zvcig7ZTw9Mjc5Oyl6WzIqZSsxXT03LGUrKyxzWzddKys7Zm9yKDtlPD0yODc7KXpbMiplKzFdPTgsZSsrLHNbOF0rKztmb3IoWih6LGwrMSxzKSxlPTA7ZTxmO2UrKylDWzIqZSsxXT01LENbMiplXT1qKGUsNSk7Tz1uZXcgRCh6LHcsdSsxLGwsZyksQj1uZXcgRChDLGssMCxmLGcpLFI9bmV3IEQobmV3IEFycmF5KDApLHgsMCxjLHApfSgpLHE9ITApLGUubF9kZXNjPW5ldyBGKGUuZHluX2x0cmVlLE8pLGUuZF9kZXNjPW5ldyBGKGUuZHluX2R0cmVlLEIpLGUuYmxfZGVzYz1uZXcgRihlLmJsX3RyZWUsUiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTAsVyhlKX0sci5fdHJfc3RvcmVkX2Jsb2NrPUosci5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGkscyxhPTA7MDxlLmxldmVsPygyPT09ZS5zdHJtLmRhdGFfdHlwZSYmKGUuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24oZSl7dmFyIHQscj00MDkzNjI0NDQ3O2Zvcih0PTA7dDw9MzE7dCsrLHI+Pj49MSlpZigxJnImJjAhPT1lLmR5bl9sdHJlZVsyKnRdKXJldHVybiBvO2lmKDAhPT1lLmR5bl9sdHJlZVsxOF18fDAhPT1lLmR5bl9sdHJlZVsyMF18fDAhPT1lLmR5bl9sdHJlZVsyNl0pcmV0dXJuIGg7Zm9yKHQ9MzI7dDx1O3QrKylpZigwIT09ZS5keW5fbHRyZWVbMip0XSlyZXR1cm4gaDtyZXR1cm4gb30oZSkpLFkoZSxlLmxfZGVzYyksWShlLGUuZF9kZXNjKSxhPWZ1bmN0aW9uKGUpe3ZhciB0O2ZvcihYKGUsZS5keW5fbHRyZWUsZS5sX2Rlc2MubWF4X2NvZGUpLFgoZSxlLmR5bl9kdHJlZSxlLmRfZGVzYy5tYXhfY29kZSksWShlLGUuYmxfZGVzYyksdD1jLTE7Mzw9dCYmMD09PWUuYmxfdHJlZVsyKlNbdF0rMV07dC0tKTtyZXR1cm4gZS5vcHRfbGVuKz0zKih0KzEpKzUrNSs0LHR9KGUpLGk9ZS5vcHRfbGVuKzMrNz4+PjMsKHM9ZS5zdGF0aWNfbGVuKzMrNz4+PjMpPD1pJiYoaT1zKSk6aT1zPXIrNSxyKzQ8PWkmJi0xIT09dD9KKGUsdCxyLG4pOjQ9PT1lLnN0cmF0ZWd5fHxzPT09aT8oUChlLDIrKG4/MTowKSwzKSxLKGUseixDKSk6KFAoZSw0KyhuPzE6MCksMyksZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk7Zm9yKFAoZSx0LTI1Nyw1KSxQKGUsci0xLDUpLFAoZSxuLTQsNCksaT0wO2k8bjtpKyspUChlLGUuYmxfdHJlZVsyKlNbaV0rMV0sMyk7VihlLGUuZHluX2x0cmVlLHQtMSksVihlLGUuZHluX2R0cmVlLHItMSl9KGUsZS5sX2Rlc2MubWF4X2NvZGUrMSxlLmRfZGVzYy5tYXhfY29kZSsxLGErMSksSyhlLGUuZHluX2x0cmVlLGUuZHluX2R0cmVlKSksVyhlKSxuJiZNKGUpfSxyLl90cl90YWxseT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUucGVuZGluZ19idWZbZS5kX2J1ZisyKmUubGFzdF9saXRdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UuZF9idWYrMiplLmxhc3RfbGl0KzFdPTI1NSZ0LGUucGVuZGluZ19idWZbZS5sX2J1ZitlLmxhc3RfbGl0XT0yNTUmcixlLmxhc3RfbGl0KyssMD09PXQ/ZS5keW5fbHRyZWVbMipyXSsrOihlLm1hdGNoZXMrKyx0LS0sZS5keW5fbHRyZWVbMiooQVtyXSt1KzEpXSsrLGUuZHluX2R0cmVlWzIqTih0KV0rKyksZS5sYXN0X2xpdD09PWUubGl0X2J1ZnNpemUtMX0sci5fdHJfYWxpZ249ZnVuY3Rpb24oZSl7UChlLDIsMyksTChlLG0seiksZnVuY3Rpb24oZSl7MTY9PT1lLmJpX3ZhbGlkPyhVKGUsZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wKTo4PD1lLmJpX3ZhbGlkJiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109MjU1JmUuYmlfYnVmLGUuYmlfYnVmPj49OCxlLmJpX3ZhbGlkLT04KX0oZSl9fSx7XCIuLi91dGlscy9jb21tb25cIjo0MX1dLDUzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPVwiXCIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dLDU0OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihyLG4pe1widXNlIHN0cmljdFwiO2lmKCFyLnNldEltbWVkaWF0ZSl7dmFyIGkscyx0LGEsbz0xLGg9e30sdT0hMSxsPXIuZG9jdW1lbnQsZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtlPWUmJmUuc2V0VGltZW91dD9lOnIsaT1cIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwoci5wcm9jZXNzKT9mdW5jdGlvbihlKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7YyhlKX0pfTpmdW5jdGlvbigpe2lmKHIucG9zdE1lc3NhZ2UmJiFyLmltcG9ydFNjcmlwdHMpe3ZhciBlPSEwLHQ9ci5vbm1lc3NhZ2U7cmV0dXJuIHIub25tZXNzYWdlPWZ1bmN0aW9uKCl7ZT0hMX0sci5wb3N0TWVzc2FnZShcIlwiLFwiKlwiKSxyLm9ubWVzc2FnZT10LGV9fSgpPyhhPVwic2V0SW1tZWRpYXRlJFwiK01hdGgucmFuZG9tKCkrXCIkXCIsci5hZGRFdmVudExpc3RlbmVyP3IuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixkLCExKTpyLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsZCksZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZShhK2UsXCIqXCIpfSk6ci5NZXNzYWdlQ2hhbm5lbD8oKHQ9bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7YyhlLmRhdGEpfSxmdW5jdGlvbihlKXt0LnBvcnQyLnBvc3RNZXNzYWdlKGUpfSk6bCYmXCJvbnJlYWR5c3RhdGVjaGFuZ2VcImluIGwuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT8ocz1sLmRvY3VtZW50RWxlbWVudCxmdW5jdGlvbihlKXt2YXIgdD1sLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7dC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjKGUpLHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwscy5yZW1vdmVDaGlsZCh0KSx0PW51bGx9LHMuYXBwZW5kQ2hpbGQodCl9KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGMsMCxlKX0sZS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7XCJmdW5jdGlvblwiIT10eXBlb2YgZSYmKGU9bmV3IEZ1bmN0aW9uKFwiXCIrZSkpO2Zvcih2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj17Y2FsbGJhY2s6ZSxhcmdzOnR9O3JldHVybiBoW29dPW4saShvKSxvKyt9LGUuY2xlYXJJbW1lZGlhdGU9Zn1mdW5jdGlvbiBmKGUpe2RlbGV0ZSBoW2VdfWZ1bmN0aW9uIGMoZSl7aWYodSlzZXRUaW1lb3V0KGMsMCxlKTtlbHNle3ZhciB0PWhbZV07aWYodCl7dT0hMDt0cnl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2FsbGJhY2sscj1lLmFyZ3M7c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDA6dCgpO2JyZWFrO2Nhc2UgMTp0KHJbMF0pO2JyZWFrO2Nhc2UgMjp0KHJbMF0sclsxXSk7YnJlYWs7Y2FzZSAzOnQoclswXSxyWzFdLHJbMl0pO2JyZWFrO2RlZmF1bHQ6dC5hcHBseShuLHIpfX0odCl9ZmluYWxseXtmKGUpLHU9ITF9fX19ZnVuY3Rpb24gZChlKXtlLnNvdXJjZT09PXImJlwic3RyaW5nXCI9PXR5cGVvZiBlLmRhdGEmJjA9PT1lLmRhdGEuaW5kZXhPZihhKSYmYygrZS5kYXRhLnNsaWNlKGEubGVuZ3RoKSl9fShcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZj92b2lkIDA9PT1lP3RoaXM6ZTpzZWxmKX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dfSx7fSxbMTBdKSgxMCl9KTsiLCJpbXBvcnQgeyBBcHAsIE5vdGljZSwgbm9ybWFsaXplUGF0aCwgcmVxdWVzdFVybCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0ICogYXMgSlNaaXAgZnJvbSAnanN6aXAnO1xyXG5pbXBvcnQgeyBQa21lckFwaSB9IGZyb20gJy4uL2FwaS9hcGknO1xyXG5pbXBvcnQgeyBQa21lclNldHRpbmdzIH0gZnJvbSAnLi4vbWFpbic7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpblByb2Nlc3NvciB7XHJcbiAgICBzZXR0aW5nczogUGttZXJTZXR0aW5nc1xyXG4gICAgYXBwOiBBcHBcclxuICAgIGFwaTogUGttZXJBcGlcclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBzZXR0aW5nczogUGttZXJTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuYXBwID0gYXBwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzXHJcbiAgICAgICAgdGhpcy5hcGkgPSBuZXcgUGttZXJBcGkoc2V0dGluZ3MudG9rZW4pXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRQbHVnaW5VcmwocGx1Z2luTmFtZTogc3RyaW5nLCBwbHVnaW5WZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkUGx1Z2luVXJsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BsdWdpblVybCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGNhY2hlZFBsdWdpblVybCwgXCJjYWNoZWRQbHVnaW5VcmxcIik7XHJcbiAgICAgICAgLy8g5aaC5p6c5pyJ57yT5a2Y55qE5Zyw5Z2A77yM5bm25LiU5o+S5Lu25ZCN56ew5ZKM54mI5pys5Y+36YO95LiO57yT5a2Y5LiA6Ie0XHJcbiAgICAgICAgaWYgKGNhY2hlZFBsdWdpblVybCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZWRJbmZvID0gSlNPTi5wYXJzZShjYWNoZWRQbHVnaW5VcmwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgY2FjaGVkSW5mby5uYW1lID09PSBwbHVnaW5OYW1lICYmXHJcbiAgICAgICAgICAgICAgICBjYWNoZWRJbmZvLnZlcnNpb24gPT09IHBsdWdpblZlcnNpb24gJiZcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lIDwgY2FjaGVkSW5mby5leHBpcnlUaW1lXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8g6L+U5Zue57yT5a2Y55qE5Zyw5Z2AXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSW5mby51cmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOiwg+eUqOWQjuerr+aOpeWPo+iOt+WPluaWsOeahOWcsOWdgFxyXG4gICAgICAgIGNvbnN0IG5ld1BsdWdpblVybCA9IGF3YWl0IHRoaXMuZ2V0UGx1Z2luRG93bmxvYWRVcmwocGx1Z2luTmFtZSwgcGx1Z2luVmVyc2lvbilcclxuXHJcbiAgICAgICAgLy8g5L+d5a2Y5paw55qE5Zyw5Z2A5YiwIGxvY2FsU3RvcmFnZe+8jOW5tuiusOW9leacieaViOacn+S4uiAxNSDliIbpkp9cclxuICAgICAgICBjb25zdCBleHBpcnlUaW1lID0gY3VycmVudFRpbWUgKyAxNSAqIDYwICogMTAwMDtcclxuICAgICAgICBjb25zdCBjYWNoZUluZm8gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHBsdWdpbk5hbWUsXHJcbiAgICAgICAgICAgIHZlcnNpb246IHBsdWdpblZlcnNpb24sXHJcbiAgICAgICAgICAgIHVybDogbmV3UGx1Z2luVXJsLFxyXG4gICAgICAgICAgICBleHBpcnlUaW1lOiBleHBpcnlUaW1lLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BsdWdpblVybCcsIEpTT04uc3RyaW5naWZ5KGNhY2hlSW5mbykpO1xyXG5cclxuICAgICAgICAvLyDov5Tlm57mlrDnmoTlnLDlnYBcclxuICAgICAgICByZXR1cm4gbmV3UGx1Z2luVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0UGx1Z2luRG93bmxvYWRVcmwocGx1Z2luSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBkb3dubG9hZFVybCA9IGF3YWl0IHRoaXMuYXBpLmdldERvd25sb2FkVXJsQnlWZXJzaW9uKHBsdWdpbklkLCB2ZXJzaW9uKVxyXG4gICAgICAgIGlmIChkb3dubG9hZFVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRvd25sb2FkVXJsXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3IE5vdGljZShgJHtKU09OLnBhcnNlKGRvd25sb2FkVXJsKS5tZXNzYWdlfWApXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnBhcnNlKGRvd25sb2FkVXJsKS5tZXNzYWdlfWApXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb3dubG9hZFBsdWdpblRvUGx1Z2luRm9sZGVyKHBsdWdpbklkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gYXdhaXQgdGhpcy5nZXRQbHVnaW5VcmwocGx1Z2luSWQsIHZlcnNpb24pXHJcblxyXG4gICAgICAgIGlmICghZG93bmxvYWRVcmwpIHtcclxuICAgICAgICAgICAgbmV3IE5vdGljZShg6I635Y+WJHtwbHVnaW5JZH3mj5Lku7bkuIvovb3lnLDlnYDlpLHotKXvvIFgKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIGlmIChhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdKSB7XHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYOaPkuS7tiR7cGx1Z2luSWR95bey57uP5a6J6KOF77yM5peg6ZyA6YeN5aSN5a6J6KOF77yBYClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiBkb3dubG9hZFVybCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCdcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpblRhcmdldEZvbGRlclBhdGggPSBub3JtYWxpemVQYXRoKHRoaXMuYXBwLnZhdWx0LmNvbmZpZ0RpciArIFwiL3BsdWdpbnMvXCIgKyBwbHVnaW5JZCkgKyBcIi9cIjtcclxuICAgICAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXJcclxuICAgICAgICAgICAgY29uc3QgemlwID0gYXdhaXQgSlNaaXAubG9hZEFzeW5jKHJlc3BvbnNlLmFycmF5QnVmZmVyKTtcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoYXdhaXQgYWRhcHRlci5leGlzdHMocGx1Z2luVGFyZ2V0Rm9sZGVyUGF0aCkgPT09IGZhbHNlIHx8XHJcbiAgICAgICAgICAgICAgICAhKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHBsdWdpblRhcmdldEZvbGRlclBhdGggKyBcIm1hbmlmZXN0Lmpzb25cIikpKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHBsdWdpblRhcmdldEZvbGRlclBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyB6aXAuZm9yRWFjaChhc3luYyAocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBsdWdpblRhcmdldEZvbGRlclBhdGggKyByZWxhdGl2ZVBhdGg7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZpbGUuYXN5bmMoJ25vZGVidWZmZXInKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICBhd2FpdCBhZGFwdGVyLndyaXRlKGFic29sdXRlUGF0aCwgY29udGVudClcclxuICAgICAgICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAgICAgICAvL+WinuWKoOWvueWOi+e8qeWMheWMheWQq+ebruW9leeahOaUr+aMgVxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbcmVsYXRpdmVQYXRoLCBmaWxlXSBvZiBPYmplY3QuZW50cmllcyh6aXAuZmlsZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGx1Z2luVGFyZ2V0Rm9sZGVyUGF0aCArIHJlbGF0aXZlUGF0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yib5bu65paH5Lu25omA5bGe55uu5b2VXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gYWJzb2x1dGVQYXRoLnN1YnN0cmluZygwLCBhYnNvbHV0ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKGRpcmVjdG9yeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWwhuaWh+S7tuino+WOi+WIsOWvueW6lOeahOebruW9lVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZS5kaXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudDogYW55ID0gYXdhaXQgZmlsZS5hc3luYygnc3RyaW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGFkYXB0ZXIud3JpdGUoYWJzb2x1dGVQYXRoLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoYOaPkuS7tiR7cGx1Z2luSWR96Kej5Y6L5aSx6LSl77yB6K+36IGU57O75byA5Y+R6ICF5aSE55CG77yBYCwgNTAwMClcclxuICAgICAgICAgICAgICAgIGFkYXB0ZXIucm1kaXIocGx1Z2luVGFyZ2V0Rm9sZGVyUGF0aCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGDmj5Lku7Yke3BsdWdpbklkfeino+WOi+Wksei0pe+8gWApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYOaPkuS7tiR7cGx1Z2luSWR9KCR7dmVyc2lvbn0p5a6J6KOF5oiQ5Yqf77yBXFxu6K+35Zyo5o+S5Lu25YiX6KGo5Lit5ZCv55SoYCwgNTAwMClcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmxvYWRNYW5pZmVzdHMoKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZWxvYWQtc3RhdHVzYmFyXCIpKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkb3dubG9hZFVybCxlcnJvcilcclxuICAgICAgICAgICAgbmV3IE5vdGljZShg5o+S5Lu2JHtwbHVnaW5JZH3lronoo4XlpLHotKXvvIEke2Vycm9yfWAsIDUwMDApXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVQbHVnaW5Ub0V4aXN0UGx1Z2luRm9sZGVyKHBsdWdpbklkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gYXdhaXQgdGhpcy5nZXRQbHVnaW5Eb3dubG9hZFVybChwbHVnaW5JZCwgdmVyc2lvbilcclxuXHJcbiAgICAgICAgaWYgKCFkb3dubG9hZFVybCkge1xyXG4gICAgICAgICAgICBuZXcgTm90aWNlKGDojrflj5Yke3BsdWdpbklkfeaPkuS7tuS4i+i9veWcsOWdgOWksei0pe+8gWApXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6I635Y+WJHtwbHVnaW5JZH3mj5Lku7bkuIvovb3lnLDlnYDlpLHotKXvvIFgKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL3BrbWVy5o+S5Lu25LiN5Yik5pat5piv5ZCm5a6J6KOF77yM5Zug5Li65Zyo5biC5Zy66YeM5pu05paw6IKv5a6a5piv5a6J6KOF55qE44CCXHJcbiAgICAgICAgaWYgKHBsdWdpbklkICE9ICdvYnNpZGlhbi1wa21lcicpIHtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGlmICghYXBwLnBsdWdpbnMubWFuaWZlc3RzW3BsdWdpbklkXSkge1xyXG4gICAgICAgICAgICAgICAgbmV3IE5vdGljZShg5o+S5Lu2JHtwbHVnaW5JZH3mnKrlronoo4XvvIFgKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgcGx1Z2luVGFyZ2V0Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZVBhdGgodGhpcy5hcHAudmF1bHQuY29uZmlnRGlyICsgXCIvcGx1Z2lucy9cIiArIHBsdWdpbklkKSArIFwiL1wiO1xyXG4gICAgICAgICAgICAvL3BrbWVy5Y6L57yp5YyF5pys6Lqr5bey57uP5pyJ55uu5b2VXHJcbiAgICAgICAgICAgIGlmIChwbHVnaW5JZCA9PSAnb2JzaWRpYW4tcGttZXInKVxyXG4gICAgICAgICAgICAgICAgcGx1Z2luVGFyZ2V0Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZVBhdGgodGhpcy5hcHAudmF1bHQuY29uZmlnRGlyICsgXCIvcGx1Z2lucy9cIikgKyBcIi9cIjtcclxuICAgICAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXJcclxuXHJcbiAgICAgICAgICAgIGlmIChhd2FpdCBhZGFwdGVyLmV4aXN0cyhwbHVnaW5UYXJnZXRGb2xkZXJQYXRoKSA9PT0gZmFsc2UgJiYgIShhd2FpdCBhZGFwdGVyLmV4aXN0cyhwbHVnaW5UYXJnZXRGb2xkZXJQYXRoICsgXCJtYW5pZmVzdC5qc29uXCIpKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmj5Lku7Yke3BsdWdpbklkfeacquWuieijhe+8gWApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGRvd25sb2FkVXJsLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJ1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3QgemlwID0gYXdhaXQgSlNaaXAubG9hZEFzeW5jKHJlc3BvbnNlLmFycmF5QnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLy8vIHppcC5mb3JFYWNoKGFzeW5jIChyZWxhdGl2ZVBhdGg6IHN0cmluZywgZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGx1Z2luVGFyZ2V0Rm9sZGVyUGF0aCArIHJlbGF0aXZlUGF0aDtcclxuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZmlsZS5hc3luYygnbm9kZWJ1ZmZlcicpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGF3YWl0IGFkYXB0ZXIud3JpdGUoYWJzb2x1dGVQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIC8v5aKe5Yqg5a+55Y6L57yp5YyF5YyF5ZCr55uu5b2V55qE5pSv5oyBXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtyZWxhdGl2ZVBhdGgsIGZpbGVdIG9mIE9iamVjdC5lbnRyaWVzKHppcC5maWxlcykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwbHVnaW5UYXJnZXRGb2xkZXJQYXRoICsgcmVsYXRpdmVQYXRoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDliJvlu7rmlofku7bmiYDlsZ7nm67lvZVcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RvcnkgPSBhYnNvbHV0ZVBhdGguc3Vic3RyaW5nKDAsIGFic29sdXRlUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFkYXB0ZXIubWtkaXIoZGlyZWN0b3J5KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5bCG5paH5Lu26Kej5Y6L5Yiw5a+55bqU55qE55uu5b2VXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlLmRpcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50OiBhbnkgPSBhd2FpdCBmaWxlLmFzeW5jKCdzdHJpbmcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYWRhcHRlci53cml0ZShhYnNvbHV0ZVBhdGgsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoYOaPkuS7tiR7cGx1Z2luSWR96Kej5Y6L5aSx6LSl77yB5b6X5omL5Yqo5riF6Zmk5q6L55WZ5paH5Lu277yBYClcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGDmj5Lku7Yke3BsdWdpbklkfeino+WOi+Wksei0pe+8gWApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYOaPkuS7tiR7cGx1Z2luSWR9KCR7dmVyc2lvbn0p5pu05paw5oiQ5Yqf77yBXFxuIOivt+WcqOaPkuS7tuWIl+ihqOS4remHjeaWsOWQr+eUqGApXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBhd2FpdCBhcHAucGx1Z2lucy5sb2FkTWFuaWZlc3RzKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZWxvYWQtc3RhdHVzYmFyXCIpKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBuZXcgTm90aWNlKGDmj5Lku7Yke3BsdWdpbklkfeabtOaWsOWksei0pe+8gSR7ZXJyb3J9YClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgdG9EaXNwbGF5U3RyaW5nIGFzIF90b0Rpc3BsYXlTdHJpbmcsIGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlLCB2U2hvdyBhcyBfdlNob3csIHdpdGhEaXJlY3RpdmVzIGFzIF93aXRoRGlyZWN0aXZlcywgY3JlYXRlVGV4dFZOb2RlIGFzIF9jcmVhdGVUZXh0Vk5vZGUsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSB7IGNsYXNzOiBcInRleHQtcmlnaHQgcGttZXItdG9vbGJhclwiIH1cbmNvbnN0IF9ob2lzdGVkXzIgPSBbXCJ0b29sdGlwXCJdXG5jb25zdCBfaG9pc3RlZF8zID0geyBjbGFzczogXCJ6LTEwIGZsZXggdy0zLzQgcC00IG0tYXV0byBteS00IHRvcC0yMCBiZy15ZWxsb3ctMjAwLzUwXCIgfVxuXG5pbXBvcnQgeyAgd2F0Y2gsIGNvbXB1dGVkLCByZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgUGttZXJTZXR0aW5ncyB9IGZyb20gXCJAL21haW5cIlxuaW1wb3J0IFBsdWdpblByb2Nlc3NvciBmcm9tIFwiQC91dGlscy9kb3dubG9hZGVyXCJcbmltcG9ydCB7IEFwcCwgTm90aWNlIH0gZnJvbSBcIm9ic2lkaWFuXCJcbmltcG9ydCB7IFBrbWVyQXBpIH0gZnJvbSBcIkAvYXBpL2FwaVwiXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gICAgaXNMb2dpbjogYm9vbGVhblxuICAgIHNldHRpbmdzOiBQa21lclNldHRpbmdzXG4gICAgYXBwOiBBcHBcbn1cblxuXG5leHBvcnQgZGVmYXVsdCAvKkBfX1BVUkVfXyovX2RlZmluZUNvbXBvbmVudCh7XG4gIF9fbmFtZTogJ0hlYWQnLFxuICBwcm9wczoge1xuICAgIGlzTG9naW46IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgIHNldHRpbmdzOiB7fSxcbiAgICBhcHA6IHt9XG4gIH0sXG4gIHNldHVwKF9fcHJvcHM6IGFueSkge1xuXG5jb25zdCBwcm9wcyA9IF9fcHJvcHNcbmNvbnN0IGRvd25sb2FkQ291bnQgPSByZWYoMClcbmNvbnN0IHBrbWVyVmVyID0gcmVmKFwiXCIpXG5jb25zdCByZW1vdGVWZXJzaW9uID0gcmVmKClcbi8vIGNvbnN0IGlzVXNlckxvZ2luID0gcHJvcHMuaXNMb2dpbiAvLyA8LS0tIOenu+mZpOi/meS4gOihjFxuXG5jb25zdCBhcGkgPSBuZXcgUGttZXJBcGkocHJvcHMuc2V0dGluZ3MudG9rZW4pIC8vIHRva2VuIOW6lOivpeS5n+aYr+WTjeW6lOW8j+eahO+8jOWmguaenCBzZXR0aW5ncyDmmK/lk43lupTlvI8gcHJvcFxuY29uc3QgcGx1Z2luUHJvY2Vzc29yID0gbmV3IFBsdWdpblByb2Nlc3Nvcihwcm9wcy5hcHAsIHByb3BzLnNldHRpbmdzKVxuXG4vLyDkvb/nlKggd2F0Y2gg5p2l5ZON5bqUIHByb3BzLmlzTG9naW4g55qE5Y+Y5YyW5Y676I635Y+W5LiL6L295qyh5pWwXG53YXRjaCgoKSA9PiBwcm9wcy5pc0xvZ2luLCBhc3luYyAobmV3SXNMb2dpbikgPT4ge1xuIFxuICAgIGlmIChuZXdJc0xvZ2luKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkb3dubG9hZENvdW50LnZhbHVlID0gYXdhaXQgYXBpLmdldERvd25sb2FkQ291bnQoKTtcbiAgICAgICAgIFxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgXG4gICAgICAgICAgICAvLyDlj6/ku6XpgInmi6norr7nva7kuIDkuKrpu5jorqTlgLzmiJbmmL7npLrplJnor69cbiAgICAgICAgICAgIGRvd25sb2FkQ291bnQudmFsdWUgPSAwOyAvLyDmiJbogIXkv53mjIHkuIrkuIDmrKHnmoTlgLzvvIzmiJbmmL7npLrplJnor6/kv6Hmga9cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvd25sb2FkQ291bnQudmFsdWUgPSAwOyAvLyDnlKjmiLfmnKrnmbvlvZXmiJbnmbvlh7rml7bph43nva5cbiAgICB9XG59LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTsgLy8gaW1tZWRpYXRlOiB0cnVlIOehruS/neWcqOe7hOS7tuWIneWni+WMluaXtuS5n+aJp+ihjOS4gOasoe+8jOiOt+WPluWIneWni+S4i+i9veasoeaVsFxuXG4gXG4oYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIHJlbW90ZVZlcnNpb24udmFsdWUgPSBhd2FpdCBhcGkuZ2V0UGttZXJWZXJzaW9uKCk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdIZWFkLnZ1ZTogRXJyb3IgZmV0Y2hpbmcgUEtNZXIgdmVyc2lvbjonLCBlcnJvcik7XG4gICAgICAgIC8vIOWkhOeQhuiOt+WPlueJiOacrOWksei0peeahOaDheWGtVxuICAgIH1cbn0pKCk7XG5cbi8vQHRzLWlnbm9yZVxucGttZXJWZXIudmFsdWUgPSBwcm9wcy5hcHAucGx1Z2lucy5tYW5pZmVzdHNbXCJwa21lclwiXS52ZXJzaW9uO1xuIFxuXG5cbmNvbnN0IGlzVXBkYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChyZW1vdGVWZXJzaW9uLnZhbHVlICYmIHBrbWVyVmVyLnZhbHVlICYmIHJlbW90ZVZlcnNpb24udmFsdWUgIT09IHBrbWVyVmVyLnZhbHVlKSB7IC8vIOWinuWKoOajgOafpSByZW1vdGVWZXJzaW9uLnZhbHVlIOWSjCBwa21lclZlci52YWx1ZSDmmK/lkKbmnInlgLxcbiAgICAgICAgcmV0dXJuIFwi5Y+R546w5paw54mI5pysOlwiICsgcmVtb3RlVmVyc2lvbi52YWx1ZSArIFwiKOeCueaIkeabtOaWsClcIjtcbiAgICB9XG4gICAgaWYgKHJlbW90ZVZlcnNpb24udmFsdWUgJiYgcGttZXJWZXIudmFsdWUgJiYgcmVtb3RlVmVyc2lvbi52YWx1ZSA9PT0gcGttZXJWZXIudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFwiVmVyOlwiICsgcGttZXJWZXIudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBcIueJiOacrOajgOafpeS4rS4uLlwiOyAvLyDmiJbogIXlhbbku5bpu5jorqQv5Yqg6L295Lit54q25oCBXG59KTtcblxuY29uc3QgaGFuZGxlVXBkYXRlUGx1Z2luID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghcmVtb3RlVmVyc2lvbi52YWx1ZSB8fCByZW1vdGVWZXJzaW9uLnZhbHVlID09PSBwa21lclZlci52YWx1ZSkgcmV0dXJuOyAvLyDlop7liqDmo4Dmn6VcbiAgICBuZXcgTm90aWNlKFwi5q2j5Zyo5pu05paw5o+S5Lu277yM6K+356iN5ZCOLi4uXCIsIDMwMDApO1xuICAgIGNvbnN0IHVwZGF0ZVN0YXR1cyA9IGF3YWl0IHBsdWdpblByb2Nlc3Nvci51cGRhdGVQbHVnaW5Ub0V4aXN0UGx1Z2luRm9sZGVyKFxuICAgICAgICBcIm9ic2lkaWFuLXBrbWVyXCIsXG4gICAgICAgIHJlbW90ZVZlcnNpb24udmFsdWVcbiAgICApO1xuICAgIGlmICghdXBkYXRlU3RhdHVzKSByZXR1cm47XG4gICAgLy9AdHMtaWdub3JlXG4gICAgcHJvcHMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmLnJlYnVpbGRWaWV3KCk7XG59O1xuXG5jb25zdCBoYW5kbGVSZWZyZXNoUGx1Z2luID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChwcm9wcy5pc0xvZ2luKSB7IC8vIOS9v+eUqCBwcm9wcy5pc0xvZ2luXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwbHVnaW5MaXN0Jyk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwbHVnaW5MaXN0RXhwaXJ5Jyk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0aGVtZUxpc3QnKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3RoZW1lTGlzdEV4cGlyeScpO1xuICAgIH1cbiAgICAvL0B0cy1pZ25vcmVcbiAgICBwcm9wcy5hcHAud29ya3NwYWNlLmFjdGl2ZUxlYWYucmVidWlsZFZpZXcoKTtcbn07XG5cbmNvbnN0IGhhbmRsZU9wZW5TZXR0aW5ncyA9ICgpID0+IHtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBwcm9wcy5hcHAuc2V0dGluZy5vcGVuKCk7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgcHJvcHMuYXBwLnNldHRpbmcub3BlblRhYkJ5SWQoXCJwa21lclwiKTtcbn07XG5cbiBcblxucmV0dXJuIChfY3R4OiBhbnksX2NhY2hlOiBhbnkpID0+IHtcbiAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soX0ZyYWdtZW50LCBudWxsLCBbXG4gICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xLCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZVVwZGF0ZVBsdWdpbixcbiAgICAgICAgY2xhc3M6IFwiaW5saW5lLWJsb2NrIGZvbnQtc2FucyB0ZXh0LXhzIHB5LTEuNSBweC0zIG0tMSByb3VuZGVkLWxnIGJnLXllbGxvdy02MDAgdGV4dC13aGl0ZSBzaGFkb3cteGwgc2hhZG93LXByaW1hcnktNTAwLzIwXCJcbiAgICAgIH0sIF90b0Rpc3BsYXlTdHJpbmcoaXNVcGRhdGUudmFsdWUpLCAxKSxcbiAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgIHRvb2x0aXA6IGRvd25sb2FkQ291bnQudmFsdWUgPD0gNSA/ICfor7flnKhQa21lcuS4quS6uuS4reW/g+e7keWumuW+ruS/oeWQjuWPr+iOt+WPluabtOWkmuasoeaVsCcgOiBudWxsLFxuICAgICAgICBjbGFzczogXCJpbmxpbmUtYmxvY2sgZm9udC1zYW5zIHRleHQteHMgcHktMS41IHB4LTMgbS0xIHJvdW5kZWQtbGcgYmcteWVsbG93LTYwMCB0ZXh0LXdoaXRlIHNoYWRvdy14bCBzaGFkb3ctcHJpbWFyeS01MDAvMjBcIlxuICAgICAgfSwgXCIg5Ymp5L2Z5qyh5pWwIFwiICsgX3RvRGlzcGxheVN0cmluZyhkb3dubG9hZENvdW50LnZhbHVlKSwgOSwgX2hvaXN0ZWRfMiksIFtcbiAgICAgICAgW192U2hvdywgcHJvcHMuaXNMb2dpbl1cbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICBvbkNsaWNrOiBoYW5kbGVSZWZyZXNoUGx1Z2luLFxuICAgICAgICBjbGFzczogXCJpbmxpbmUtYmxvY2sgZm9udC1zYW5zIHRleHQteHMgcHktMS41IHB4LTMgbS0xIHJvdW5kZWQtbGcgYmctZ3JlZW4tNTAwIHRleHQtd2hpdGUgc2hhZG93LXhsIHNoYWRvdy1wcmltYXJ5LTUwMC8yMFwiXG4gICAgICB9LCBcIiDliLfmlrAgXCIpLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICBjbGFzczogXCJpbmxpbmUtYmxvY2sgZm9udC1zYW5zIHRleHQteHMgcHktMS41IHB4LTMgbS0xIHJvdW5kZWQtbGcgYmctcHJpbWFyeS01MDAgdGV4dC13aGl0ZSBzaGFkb3cteGwgc2hhZG93LXByaW1hcnktNTAwLzIwXCIsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZU9wZW5TZXR0aW5nc1xuICAgICAgfSwgXCIg6K6+572uIFwiKVxuICAgIF0pLFxuICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzMsIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJmbGV4IGl0ZW1zLWNlbnRlclwiIH0sIFtcbiAgICAgICAgX2NhY2hlWzNdIHx8IChfY2FjaGVbM10gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHsgY2xhc3M6IFwibXItMlwiIH0sIFwi4pqg77iPXCIsIC0xKSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgIF9jYWNoZVsyXSB8fCAoX2NhY2hlWzJdID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJmb250LWJvbGRcIiB9LCBcIuaPkOekuu+8mlwiLCAtMSkpLFxuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIG51bGwsIFtcbiAgICAgICAgICAgIF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gX2NyZWF0ZVRleHRWTm9kZShcIuW9k+WJjeaYr+acqueZu+W9leeKtuaAge+8jOS7heWxleekuuS4i+i9veWJjTIw55qE54Ot6Zeo5YaF5a6577yM6K+3XCIsIC0xKSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFwiYmcteWVsbG93LTYwMCB3LTIwIGgtNiBpbmxpbmUtYmxvY2sgcHgtMSBweS0xIG0tMSBmb250LXNhbnMgdGV4dC14cyByb3VuZGVkLWxnXCIsXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZU9wZW5TZXR0aW5nc1xuICAgICAgICAgICAgfSwgXCIg54K55q2k55m75b2VXCIpLFxuICAgICAgICAgICAgX2NhY2hlWzFdIHx8IChfY2FjaGVbMV0gPSBfY3JlYXRlVGV4dFZOb2RlKFwi5ZCO6I635Y+W5YWo6YOo5YaF5a6544CCXCIsIC0xKSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgXSlcbiAgICBdLCA1MTIpLCBbXG4gICAgICBbX3ZTaG93LCAhcHJvcHMuaXNMb2dpbl1cbiAgICBdKVxuICBdLCA2NCkpXG59XG59XG5cbn0pIiwiaW1wb3J0IHsgQXBwLCBOb3RpY2UsIG5vcm1hbGl6ZVBhdGgsIHJlcXVlc3RVcmwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIEpTWmlwIGZyb20gJ2pzemlwJztcclxuaW1wb3J0IHsgUGttZXJBcGkgfSBmcm9tICcuLi9hcGkvYXBpJztcclxuaW1wb3J0IHsgUGttZXJTZXR0aW5ncyB9IGZyb20gJy4uL21haW4nO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaGVtZVByb2Nlc3NvciB7XHJcbiAgICBzZXR0aW5nczogUGttZXJTZXR0aW5nc1xyXG4gICAgYXBwOiBBcHBcclxuICAgIGFwaTogUGttZXJBcGlcclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBzZXR0aW5nczogUGttZXJTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuYXBwID0gYXBwXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzXHJcbiAgICAgICAgdGhpcy5hcGkgPSBuZXcgUGttZXJBcGkoc2V0dGluZ3MudG9rZW4pXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRUaGVtZVVybCh0aGVtZU5hbWU6IHN0cmluZywgdGhlbWVWZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkVGhlbWVVcmwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWVVcmwnKTtcclxuICAgICAgICAvLyDlpoLmnpzmnInnvJPlrZjnmoTlnLDlnYDvvIzlubbkuJTkuLvpopjlkI3np7DlkozniYjmnKzlj7fpg73kuI7nvJPlrZjkuIDoh7RcclxuICAgICAgICBpZiAoY2FjaGVkVGhlbWVVcmwpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FjaGVkSW5mbyA9IEpTT04ucGFyc2UoY2FjaGVkVGhlbWVVcmwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgY2FjaGVkSW5mby5uYW1lID09PSB0aGVtZU5hbWUgJiZcclxuICAgICAgICAgICAgICAgIGNhY2hlZEluZm8udmVyc2lvbiA9PT0gdGhlbWVWZXJzaW9uICYmXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA8IGNhY2hlZEluZm8uZXhwaXJ5VGltZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vIOi/lOWbnue8k+WtmOeahOWcsOWdgFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEluZm8udXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDosIPnlKjlkI7nq6/mjqXlj6Pojrflj5bmlrDnmoTlnLDlnYBcclxuICAgICAgICBjb25zdCBuZXdUaGVtZVVybCA9IGF3YWl0IHRoaXMuZ2V0VGhlbWVEb3dubG9hZFVybCh0aGVtZU5hbWUsIHRoZW1lVmVyc2lvbilcclxuXHJcbiAgICAgICAgLy8g5L+d5a2Y5paw55qE5Zyw5Z2A5YiwIGxvY2FsU3RvcmFnZe+8jOW5tuiusOW9leacieaViOacn+S4uiAxNSDliIbpkp9cclxuICAgICAgICBjb25zdCBleHBpcnlUaW1lID0gY3VycmVudFRpbWUgKyAxNSAqIDYwICogMTAwMDtcclxuICAgICAgICBjb25zdCBjYWNoZUluZm8gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoZW1lTmFtZSxcclxuICAgICAgICAgICAgdmVyc2lvbjogdGhlbWVWZXJzaW9uLFxyXG4gICAgICAgICAgICB1cmw6IG5ld1RoZW1lVXJsLFxyXG4gICAgICAgICAgICBleHBpcnlUaW1lOiBleHBpcnlUaW1lLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RoZW1lVXJsJywgSlNPTi5zdHJpbmdpZnkoY2FjaGVJbmZvKSk7XHJcblxyXG4gICAgICAgIC8vIOi/lOWbnuaWsOeahOWcsOWdgFxyXG4gICAgICAgIHJldHVybiBuZXdUaGVtZVVybDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldFRoZW1lRG93bmxvYWRVcmwodGhlbWVOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSBhd2FpdCB0aGlzLmFwaS5nZXRUaGVtZURvd25sb2FkVXJsQnlWZXJzaW9uKHRoZW1lTmFtZSwgdmVyc2lvbilcclxuICAgICAgICBpZiAoZG93bmxvYWRVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb3dubG9hZFVybFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYCR7SlNPTi5wYXJzZShkb3dubG9hZFVybCkubWVzc2FnZX1gKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7SlNPTi5wYXJzZShkb3dubG9hZFVybCkubWVzc2FnZX1gKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkVGhlbWVUb1RoZW1lRm9sZGVyKHRoZW1lTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBkb3dubG9hZFVybCA9IGF3YWl0IHRoaXMuZ2V0VGhlbWVVcmwodGhlbWVOYW1lLCB2ZXJzaW9uKVxyXG5cclxuICAgICAgICBpZiAoIWRvd25sb2FkVXJsKSB7XHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYOiOt+WPliR7dGhlbWVOYW1lfeS4u+mimOS4i+i9veWcsOWdgOWksei0pe+8gWApXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgaWYgKGFwcC5jdXN0b21Dc3MudGhlbWVzW3RoZW1lTmFtZV0pIHtcclxuICAgICAgICAgICAgbmV3IE5vdGljZShg5Li76aKYJHt0aGVtZU5hbWV95bey57uP5a6J6KOF77yM5peg6ZyA6YeN5aSN5a6J6KOF77yBYClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiBkb3dubG9hZFVybCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCdcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRoZW1lVGFyZ2V0Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZVBhdGgodGhpcy5hcHAudmF1bHQuY29uZmlnRGlyICsgXCIvdGhlbWVzL1wiICsgdGhlbWVOYW1lKSArIFwiL1wiO1xyXG4gICAgICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlclxyXG4gICAgICAgICAgICBjb25zdCB6aXAgPSBhd2FpdCBKU1ppcC5sb2FkQXN5bmMocmVzcG9uc2UuYXJyYXlCdWZmZXIpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChhd2FpdCBhZGFwdGVyLmV4aXN0cyh0aGVtZVRhcmdldEZvbGRlclBhdGgpID09PSBmYWxzZSB8fFxyXG4gICAgICAgICAgICAgICAgIShhd2FpdCBhZGFwdGVyLmV4aXN0cyh0aGVtZVRhcmdldEZvbGRlclBhdGggKyBcIm1hbmlmZXN0Lmpzb25cIikpKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoZW1lVGFyZ2V0Rm9sZGVyUGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHppcC5mb3JFYWNoKGFzeW5jIChyZWxhdGl2ZVBhdGg6IHN0cmluZywgZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gdGhlbWVUYXJnZXRGb2xkZXJQYXRoICsgcmVsYXRpdmVQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLmFzeW5jKCdzdHJpbmcnKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZGFwdGVyLndyaXRlKGFic29sdXRlUGF0aCwgY29udGVudClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoYOS4u+mimCR7dGhlbWVOYW1lfeino+WOi+Wksei0pe+8geW+l+aJi+WKqOa4hemZpOaui+eVmeaWh+S7tu+8gWAsIDUwMDApXHJcbiAgICAgICAgICAgICAgICBhZGFwdGVyLnJtZGlyKHRoZW1lVGFyZ2V0Rm9sZGVyUGF0aCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGDkuLvpopgke3RoZW1lTmFtZX3op6PljovlpLHotKXvvIFgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBuZXcgTm90aWNlKGDkuLvpopgke3RoZW1lTmFtZX0oJHt2ZXJzaW9ufSnlronoo4XlubblkK/nlKjmiJDlip/vvIFcXG5gLCA1MDAwKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgYXdhaXQgYXBwLmN1c3RvbUNzcy5zZXRUaGVtZSh0aGVtZU5hbWUpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVsb2FkLXN0YXR1c2JhclwiKSk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZG93bmxvYWRVcmwsZXJyb3IpXHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYOS4u+mimCR7dGhlbWVOYW1lfeWuieijheWksei0pe+8gSR7ZXJyb3J9YCwgNTAwMClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZVRoZW1lVG9FeGlzdFRoZW1lRm9sZGVyKHRoZW1lTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBkb3dubG9hZFVybCA9IGF3YWl0IHRoaXMuZ2V0VGhlbWVEb3dubG9hZFVybCh0aGVtZU5hbWUsIHZlcnNpb24pXHJcblxyXG4gICAgICAgIGlmICghZG93bmxvYWRVcmwpIHtcclxuICAgICAgICAgICAgbmV3IE5vdGljZShg6I635Y+WJHt0aGVtZU5hbWV95Li76aKY5LiL6L295Zyw5Z2A5aSx6LSl77yBYClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDojrflj5Yke3RoZW1lTmFtZX3kuLvpopjkuIvovb3lnLDlnYDlpLHotKXvvIFgKVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIGlmICghYXBwLmN1c3RvbUNzcy50aGVtZXNbdGhlbWVOYW1lXSkge1xyXG4gICAgICAgICAgICBuZXcgTm90aWNlKGDkuLvpopgke3RoZW1lTmFtZX3mnKrlronoo4XvvIFgKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoZW1lVGFyZ2V0Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZVBhdGgodGhpcy5hcHAudmF1bHQuY29uZmlnRGlyICsgXCIvdGhlbWVzL1wiICsgdGhlbWVOYW1lKSArIFwiL1wiO1xyXG4gICAgICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlclxyXG5cclxuICAgICAgICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoZW1lVGFyZ2V0Rm9sZGVyUGF0aCkgPT09IGZhbHNlICYmICEoYXdhaXQgYWRhcHRlci5leGlzdHModGhlbWVUYXJnZXRGb2xkZXJQYXRoICsgXCJtYW5pZmVzdC5qc29uXCIpKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuLvpopgke3RoZW1lTmFtZX3mnKrlronoo4XvvIFgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiBkb3dubG9hZFVybCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCdcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHppcCA9IGF3YWl0IEpTWmlwLmxvYWRBc3luYyhyZXNwb25zZS5hcnJheUJ1ZmZlcik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgemlwLmZvckVhY2goYXN5bmMgKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBmaWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSB0aGVtZVRhcmdldEZvbGRlclBhdGggKyByZWxhdGl2ZVBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZpbGUuYXN5bmMoJ3N0cmluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFkYXB0ZXIud3JpdGUoYWJzb2x1dGVQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbmV3IE5vdGljZShg5Li76aKYJHt0aGVtZU5hbWV96Kej5Y6L5aSx6LSl77yB5b6X5omL5Yqo5riF6Zmk5q6L55WZ5paH5Lu277yBYClcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGDkuLvpopgke3RoZW1lTmFtZX3op6PljovlpLHotKXvvIFgKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBuZXcgTm90aWNlKGDkuLvpopgke3RoZW1lTmFtZX0oJHt2ZXJzaW9ufSnmm7TmlrDmiJDlip/vvIFcXG4g5paw5Li76aKY5bey55Sf5pWIYClcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGF3YWl0IGFwcC5jdXN0b21Dc3Muc2V0VGhlbWUodGhlbWVOYW1lKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlbG9hZC1zdGF0dXNiYXJcIikpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYOS4u+mimCR7dGhlbWVOYW1lfeabtOaWsOWksei0pe+8gSR7ZXJyb3J9YClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUgYXMgX2NyZWF0ZVZOb2RlLCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrLCBub3JtYWxpemVDbGFzcyBhcyBfbm9ybWFsaXplQ2xhc3MsIHRvRGlzcGxheVN0cmluZyBhcyBfdG9EaXNwbGF5U3RyaW5nLCB2TW9kZWxTZWxlY3QgYXMgX3ZNb2RlbFNlbGVjdCwgd2l0aERpcmVjdGl2ZXMgYXMgX3dpdGhEaXJlY3RpdmVzLCB2TW9kZWxUZXh0IGFzIF92TW9kZWxUZXh0LCB3aXRoTW9kaWZpZXJzIGFzIF93aXRoTW9kaWZpZXJzLCBjcmVhdGVUZXh0Vk5vZGUgYXMgX2NyZWF0ZVRleHRWTm9kZSwgdlNob3cgYXMgX3ZTaG93LCBjcmVhdGVDb21tZW50Vk5vZGUgYXMgX2NyZWF0ZUNvbW1lbnRWTm9kZSwgcmVuZGVyTGlzdCBhcyBfcmVuZGVyTGlzdCwgRnJhZ21lbnQgYXMgX0ZyYWdtZW50LCBjcmVhdGVCbG9jayBhcyBfY3JlYXRlQmxvY2ssIHVucmVmIGFzIF91bnJlZiwgY3JlYXRlU3RhdGljVk5vZGUgYXMgX2NyZWF0ZVN0YXRpY1ZOb2RlIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSB7XG4gIFwiZGF0YS1wYWdlZmluZC1ib2R5XCI6IFwiXCIsXG4gIGNsYXNzOiBcInctZnVsbFwiXG59XG5jb25zdCBfaG9pc3RlZF8yID0geyBjbGFzczogXCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIHB4LTIgcHktNCBteC1hdXRvIGZvbnQtc2FucyBzZWFyY2ggZmlyc3QtbGV0dGVyOlwiIH1cbmNvbnN0IF9ob2lzdGVkXzMgPSB7IGNsYXNzOiBcImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgZmlyc3QtbGV0dGVyOm14LWF1dG9cIiB9XG5jb25zdCBfaG9pc3RlZF80ID0geyBjbGFzczogXCJ3LWZ1bGwgbGc6bWF4LXctWzYwdnddIG14LWF1dG8gcHktMyBtZDpweC02XCIgfVxuY29uc3QgX2hvaXN0ZWRfNSA9IHsgY2xhc3M6IFwiZmxleC13cmFwIHJlbGF0aXZlIHRvcC0wIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIG92ZXJmbG93LXgtYXV0byBkaXZpZGUteCByb3VuZGVkIGRhcms6YmctbXV0ZWQtODAwIGJvcmRlci1tdXRlZC0yMDAgZGFyazpib3JkZXItbXV0ZWQtNzAwIGRpdmlkZS1tdXRlZC0yMDAgZGFyazpkaXZpZGUtbXV0ZWQtNzAwIGRhcms6c2hhZG93LW11dGVkLTkwMC8zMCBtZDpvdmVyZmxvdy14LXZpc2libGVcIiB9XG5jb25zdCBfaG9pc3RlZF82ID0geyBjbGFzczogXCJ3aWRnZXQtaXRlbVwiIH1cbmNvbnN0IF9ob2lzdGVkXzcgPSB7IGNsYXNzOiBcIndpZGdldC1pdGVtXCIgfVxuY29uc3QgX2hvaXN0ZWRfOCA9IHsgY2xhc3M6IFwid2lkZ2V0LWl0ZW1cIiB9XG5jb25zdCBfaG9pc3RlZF85ID0geyBjbGFzczogXCJ3aWRnZXQtaXRlbVwiIH1cbmNvbnN0IF9ob2lzdGVkXzEwID0geyBjbGFzczogXCJ3aWRnZXQtaXRlbVwiIH1cbmNvbnN0IF9ob2lzdGVkXzExID0geyBjbGFzczogXCJudW1cIiB9XG5jb25zdCBfaG9pc3RlZF8xMiA9IFtcInRvb2x0aXBcIl1cbmNvbnN0IF9ob2lzdGVkXzEzID0geyBjbGFzczogXCJyZWxhdGl2ZSB3LWZ1bGxcIiB9XG5jb25zdCBfaG9pc3RlZF8xNCA9IHsgY2xhc3M6IFwicmVsYXRpdmUgZ3JvdXBcIiB9XG5jb25zdCBfaG9pc3RlZF8xNSA9IHsgY2xhc3M6IFwidGV4dC1yaWdodFwiIH1cbmNvbnN0IF9ob2lzdGVkXzE2ID0geyBjbGFzczogXCJ3LWZ1bGwgYmctbXV0ZWQtMTAwIGRhcms6YmctbXV0ZWQtMTAwMFwiIH1cbmNvbnN0IF9ob2lzdGVkXzE3ID0geyBjbGFzczogXCJ3LWZ1bGwgbXgtYXV0byBtYXgtdy03eGxcIiB9XG5jb25zdCBfaG9pc3RlZF8xOCA9IHsgY2xhc3M6IFwiZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIG92ZXJmbG93LWhpZGRlblwiIH1cbmNvbnN0IF9ob2lzdGVkXzE5ID0geyBjbGFzczogXCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwgaC1mdWxsIG1kOnB4LTYgcHQtNCBwYi0xNlwiIH1cbmNvbnN0IF9ob2lzdGVkXzIwID0geyBjbGFzczogXCJ3LWZ1bGwgbWF4LXctWzkwdnddIG14LWF1dG8gc3BhY2UteS00IHRleHQtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjEgPSB7IGNsYXNzOiBcImZsZXggZmxleC1jb2wgZ2FwLTEyIHB5LTEyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjIgPSB7XG4gIGtleTogMCxcbiAgY2xhc3M6IFwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcHktMTBcIlxufVxuY29uc3QgX2hvaXN0ZWRfMjMgPSB7XG4gIGtleTogMCxcbiAgY2xhc3M6IFwiY29sLXNwYW4tZnVsbCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0yMFwiXG59XG5jb25zdCBfaG9pc3RlZF8yNCA9IHsgY2xhc3M6IFwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIHAtNiAtbS0zXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjUgPSB7IGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBtYi00XCIgfVxuY29uc3QgX2hvaXN0ZWRfMjYgPSB7IGNsYXNzOiBcImZsZXggc3BhY2UteC0yXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjcgPSB7IGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIHB4LTMgcHktMVwiIH1cbmNvbnN0IF9ob2lzdGVkXzI4ID0geyBjbGFzczogXCJmaXhlZCBpbnNldC0wIHotMzAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctYXV0byBiZy1ibGFjayBiZy1vcGFjaXR5LTUwXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjkgPSB7IGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiIH1cbmNvbnN0IF9ob2lzdGVkXzMwID0geyBjbGFzczogXCJjb250YWluZXIgcHgtNSBweS00IG14LWF1dG9cIiB9XG5jb25zdCBfaG9pc3RlZF8zMSA9IHsgY2xhc3M6IFwibWItNiB0ZXh0LTJ4bCBmb250LW1lZGl1bSB0ZXh0LWNlbnRlciB0aXRsZS1mb250XCIgfVxuY29uc3QgX2hvaXN0ZWRfMzIgPSB7IGNsYXNzOiBcIm1iLTJcIiB9XG5jb25zdCBfaG9pc3RlZF8zMyA9IHsgY2xhc3M6IFwiYm9sZGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMzQgPSB7IGNsYXNzOiBcIm1iLTRcIiB9XG5jb25zdCBfaG9pc3RlZF8zNSA9IFtcInZhbHVlXCJdXG5jb25zdCBfaG9pc3RlZF8zNiA9IHsgY2xhc3M6IFwiZmxleC13cmFwIGJsb2NrIC1teC00IC1tdC00IHNwYWNlLXktNiBtZDpmbGV4IHNtOi1tLTQgbWQ6LW1iLTEwIG1kOnNwYWNlLXktMFwiIH1cbmNvbnN0IF9ob2lzdGVkXzM3ID0geyBjbGFzczogXCJmbGV4IG1kOnAtNCBtZDp3LTEvMlwiIH1cbmNvbnN0IF9ob2lzdGVkXzM4ID0geyBjbGFzczogXCJmbGV4LWdyb3dcIiB9XG5cbmltcG9ydCB7IGNvbXB1dGVkLCBvbk1vdW50ZWQsIG9uVW5tb3VudGVkLCByZWYsIHdhdGNoIH0gZnJvbSBcInZ1ZVwiXG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiQC9jb21wb25lbnRzL3BsdWdpbi9Ub29sYmFyLnZ1ZVwiXG5pbXBvcnQgUGx1Z2luQ2FyZCBmcm9tIFwiQC9jb21wb25lbnRzL3BsdWdpbi9QbHVnaW5DYXJkLnZ1ZVwiXG5pbXBvcnQgVGhlbWVDYXJkIGZyb20gXCJAL2NvbXBvbmVudHMvdGhlbWUvVGhlbWVDYXJkLnZ1ZVwiXG5pbXBvcnQgeyBQa21lckFwaSB9IGZyb20gXCJAL2FwaS9hcGlcIlxuaW1wb3J0IHsgUGttZXJTZXR0aW5ncyB9IGZyb20gXCJAL21haW5cIlxuaW1wb3J0IEhlYWQgZnJvbSBcIkAvY29tcG9uZW50cy9jb21tb24vSGVhZC52dWVcIlxuaW1wb3J0IHR5cGUgeyBQbHVnaW5JbmZvIH0gZnJvbSBcIkAvdHlwZXMvcGx1Z2luXCJcbiBcbmltcG9ydCBQbHVnaW5Qcm9jZXNzb3IgZnJvbSBcIkAvdXRpbHMvZG93bmxvYWRlclwiXG5pbXBvcnQgVGhlbWVQcm9jZXNzb3IgZnJvbSBcIkAvdXRpbHMvdGRvd25sb2FkZXJcIlxuaW1wb3J0IHsgQXBwLCBOb3RpY2UsIGRlYm91bmNlIH0gZnJvbSBcIm9ic2lkaWFuXCJcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICBzZXR0aW5nczogUGttZXJTZXR0aW5nc1xuICAgIGFwcDogQXBwXG4gICAgdGFiOiBzdHJpbmdcbiAgICBjdXJyZW50VGFiPzogc3RyaW5nICAvLyDmt7vliqDlvZPliY3moIfnrb7lj4LmlbBcbn1cblxuXG5leHBvcnQgZGVmYXVsdCAvKkBfX1BVUkVfXyovX2RlZmluZUNvbXBvbmVudCh7XG4gIF9fbmFtZTogJ1BsdWdpbk1hcmtldCcsXG4gIHByb3BzOiB7XG4gICAgc2V0dGluZ3M6IHt9LFxuICAgIGFwcDoge30sXG4gICAgdGFiOiB7fSxcbiAgICBjdXJyZW50VGFiOiB7fVxuICB9LFxuICBzZXR1cChfX3Byb3BzOiBhbnkpIHtcblxuY29uc3QgcHJvcHMgPSBfX3Byb3BzXG5jb25zdCBwbHVnaW5WZXJzaW9ucyA9IHJlZjxzdHJpbmdbXT4oW10pOyAvLyDniYjmnKzlj7fliJfooahcbmNvbnN0IG9yaWdpblZlcnNpb24gPSByZWYoJycpO1xuY29uc3Qgc29ydEJ5ID0gcmVmKFwiXCIpXG5jb25zdCBzb3J0T3JkZXIgPSByZWYoXCJcIikgLy8g5o6S5bqP5pON5L2cXG5jb25zdCBzaG93TW9kYWwgPSByZWYoZmFsc2UpXG5jb25zdCBBbGxQbHVnaW5MaXN0ID0gcmVmKClcbmxldCBwZXJQYWdlQ291bnQgPSByZWYoMjQpXG5sZXQgY3VycmVudFBhZ2UgPSByZWYoMSlcbmNvbnN0IGlzRG93bmxvYWQgPSByZWYodHJ1ZSlcbmNvbnN0IGZpbHRlckRldmljZU9wdGlvbiA9IHJlZihcImRlZmF1bHRcIilcbmNvbnN0IGFwaSA9IG5ldyBQa21lckFwaShwcm9wcy5zZXR0aW5ncy50b2tlbilcbmNvbnN0IHBsdWdpblByb2Nlc3NvciA9IG5ldyBQbHVnaW5Qcm9jZXNzb3IocHJvcHMuYXBwLCBwcm9wcy5zZXR0aW5ncylcbmNvbnN0IGlzQ2xvc2UgPSByZWYoZmFsc2UpXG4gXG5jb25zdCBpc1VzZXJMb2dpbiA9IHJlZihmYWxzZSkgLy8gUmVhY3RpdmUgbG9naW4gc3RhdHVzXG5cbmNvbnN0IGFwaUVycm9yID0gcmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuLy8g5re75Yqg5YiG6aG15Y+Y6YePXG5jb25zdCB0b3RhbFBsdWdpbnMgPSByZWYoMClcbmNvbnN0IHRvdGFsUGFnZXMgPSByZWYoMSlcbmNvbnN0IGlzTG9hZGluZyA9IHJlZihmYWxzZSlcblxuLy8g5re75Yqg5o+S5Lu25qCH562+5Y+Y6YePXG5jb25zdCBwbHVnaW5UYWdzOiBSZWY8c3RyaW5nW10+ID0gcmVmKFtdKTtcblxuLy8g5re75Yqg5o+S5Lu257uf6K6h5L+h5oGv55qE54q25oCB5Y+Y6YePXG5jb25zdCBpbnN0YWxsZWRQbHVnaW5zQ291bnQgPSByZWYoMCk7XG5jb25zdCBvdXRkYXRlZFBsdWdpbnNDb3VudCA9IHJlZigwKTtcblxuLy8g5re75Yqg5oeS5Yqg6L295qCH5b+XXG5jb25zdCBuZWVkc0xvYWQgPSByZWYodHJ1ZSk7XG5cbi8vIOS/ruaUueiuoeeul+WxnuaAp+S4uuebtOaOpeS9v+eUqOeKtuaAgeWPmOmHj1xuY29uc3QgY291bnRJbnN0YWxsZWRQbHVnaW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBpbnN0YWxsZWRQbHVnaW5zQ291bnQudmFsdWU7XG59KTtcblxuY29uc3QgY291bnRVcGRhdGVkUGx1Z2lucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gb3V0ZGF0ZWRQbHVnaW5zQ291bnQudmFsdWU7XG59KTtcblxuY29uc3QgaGFuZGxlQXBpRXJyb3IgPSAoZXJyb3I6IGFueSwgY29udGV4dE1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoYCR7Y29udGV4dE1lc3NhZ2V9OmAsIGVycm9yKTtcbiAgICBpc0xvYWRpbmcudmFsdWUgPSBmYWxzZTsgXG4gICAgLy8gQ2hlY2sgZm9yIDQwMSBvciBzcGVjaWZpYyBhdXRoIGVycm9yIGluZGljYXRvcnNcbiAgICBjb25zdCBpc0F1dGhFcnJvciA9IGVycm9yLnN0YXR1c0NvZGUgPT09IDQwMXx8IGVycm9yLm1lc3NhZ2UgPT09IFwiVW5hdXRob3JpemVkXCIgIHx8IGVycm9yLm5hbWUgPT09IFwiVW5hdXRob3JpemVkRXJyb3JcIiB8fCAoZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpO1xuICAgIGlmIChpc0F1dGhFcnJvcikge1xuICAgICAgICBhcGlFcnJvci52YWx1ZSA9IFwi6aqM6K+B5aSx6LSl44CC5oKo55qE5Luk54mM5Y+v6IO95peg5pWI5oiW6L+H5pyf44CC6K+36YeN5paw5ZyoIFBLTWVyIOaPkuS7tuiuvue9ruS4reabtOaWsOaCqOeahOS7pOeJjOOAglwiO1xuICAgICAgICBuZXcgTm90aWNlKGFwaUVycm9yLnZhbHVlLCAxMDAwMCk7IC8vIExvbmdlciBub3RpY2UgZm9yIGF1dGggZXJyb3JzXG4gICAgICAgIGlzVXNlckxvZ2luLnZhbHVlID0gZmFsc2U7IC8vIENyaXRpY2FsOiB1cGRhdGUgbG9naW4gc3RhdHVzXG4gICAgICAgIC8vIFJlc2V0IGRhdGEgdGhhdCBtaWdodCBiZSB1c2VyLXNwZWNpZmljIG9yIGZldGNoZWQgYmFzZWQgb24gYXV0aFxuICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gW107XG4gICAgICAgIHBsdWdpblRhZ3MudmFsdWUgPSBbXTtcbiAgICAgICAgdG90YWxQbHVnaW5zLnZhbHVlID0gMDtcbiAgICAgICAgdG90YWxQYWdlcy52YWx1ZSA9IDE7XG4gICAgICAgIC8vIEtlZXAgbG9jYWwgY291bnRzIGlmIHBvc3NpYmxlLCBvciByZXNldCBpZiB0aGV5IGRlcGVuZCBvbiBBUElcbiAgICAgICAgLy8gaW5zdGFsbGVkUGx1Z2luc0NvdW50LnZhbHVlID0gMDsgLy8gT3IgcmVjYWxjdWxhdGUgZnJvbSBsb2NhbCBpZiBwb3NzaWJsZVxuICAgICAgICBvdXRkYXRlZFBsdWdpbnNDb3VudC52YWx1ZSA9IDA7IFxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkZXRhaWwgPSBlcnJvci5tZXNzYWdlIHx8IFwiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC5cIjtcbiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgdHlwZW9mIGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRldGFpbCA9IGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBhcGlFcnJvci52YWx1ZSA9IGAke2NvbnRleHRNZXNzYWdlfS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4gRGV0YWlsczogJHtkZXRhaWx9YDtcbiAgICAgICAgbmV3IE5vdGljZShhcGlFcnJvci52YWx1ZSwgNzAwMCk7XG4gICAgfVxufTtcblxuXG4vLyAtLS0gQ29yZSBMb2dpYyBNZXRob2RzIC0tLVxuLy8g5oeS5Yqg6L295pWw5o2uXG5jb25zdCBsb2FkRGF0YUlmTmVlZGVkID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChuZWVkc0xvYWQudmFsdWUpIHtcbiAgICAgICAgYXdhaXQgbG9hZEFsbFBsdWdpbnMoKTtcbiAgICB9XG59O1xuXG4vLyDmiYvliqjliLfmlrDmlbDmja5cbmNvbnN0IGxvYWRBbGxQbHVnaW5zID0gYXN5bmMgKCkgPT4ge1xuICAgIGlzTG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgYXBpRXJyb3IudmFsdWUgPSBudWxsOyAvLyBDbGVhciBwcmV2aW91cyBzcGVjaWZpYyBlcnJvciBmb3IgdGhpcyBhY3Rpb25cblxuICAgIC8vIOagh+iusOW3suWKoOi9ve+8jOmBv+WFjemHjeWkjeWKoOi9vVxuICAgIG5lZWRzTG9hZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGttZXJEb2NzID0gYXdhaXQgYXBpLmdldFBrbWVyRG9jcygpOyAvLyBVc2UgYXBpLnZhbHVlXG4gICAgICAgIFxuICAgICAgICBpZiAoaXNVc2VyTG9naW4udmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGx1Z2lucywgdG90YWwsIHRvdGFsUGFnZXM6IHBhZ2VzIH0gPSBhd2FpdCBhcGkuZ2V0UGx1Z2luTGlzdFBhZ2luYXRlZChcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZS52YWx1ZSwgXG4gICAgICAgICAgICAgICAgcGVyUGFnZUNvdW50LnZhbHVlLCBcbiAgICAgICAgICAgICAgICBzb3J0QnkudmFsdWUgfHwgXCJkb3dubG9hZENvdW50XCIsIFxuICAgICAgICAgICAgICAgIHNvcnRPcmRlci52YWx1ZT8udG9VcHBlckNhc2UoKSB8fCBcIkRFU0NcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIEFsbFBsdWdpbkxpc3QudmFsdWUgPSBwbHVnaW5zIHx8IFtdO1xuICAgICAgICAgICAgdG90YWxQbHVnaW5zLnZhbHVlID0gdG90YWwgfHwgMDtcbiAgICAgICAgICAgIHRvdGFsUGFnZXMudmFsdWUgPSBwYWdlcyB8fCAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm9uLWxvZ2dlZC1pbiBwYXRoXG4gICAgICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gYXdhaXQgYXBpLmdldFRvcDIwUGx1Z2lucygpIHx8IFtdO1xuICAgICAgICAgICAgdG90YWxQbHVnaW5zLnZhbHVlID0gQWxsUGx1Z2luTGlzdC52YWx1ZS5sZW5ndGg7IC8vIE9yIGdldCBmcm9tIEFQSSBpZiBpdCBwcm92aWRlcyB0b3RhbFxuICAgICAgICAgICAgdG90YWxQYWdlcy52YWx1ZSA9IE1hdGguY2VpbCh0b3RhbFBsdWdpbnMudmFsdWUgLyBwZXJQYWdlQ291bnQudmFsdWUpIHx8IDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21tb24gcHJvY2Vzc2luZyBsb2dpYyBmb3IgcGx1Z2luc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShBbGxQbHVnaW5MaXN0LnZhbHVlKSkge1xuICAgICAgICAgICAgQWxsUGx1Z2luTGlzdC52YWx1ZS5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BrbWVyRG9jID0gcGttZXJEb2NzLmZpbmQoZG9jID0+IGRvYy5zbHVnID09IHBsdWdpbi5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGttZXJEb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmNvbnRlbnRVcmwgPSBgaHR0cHM6Ly9wa21lci5jbi9zaG93LyR7bWF0Y2hpbmdQa21lckRvYy51aWR9YDtcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLnRhZ3MgPSBtYXRjaGluZ1BrbWVyRG9jLnRhZ3M7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5jaGluZXNlRGVzY3JpcHRpb24gPSBtYXRjaGluZ1BrbWVyRG9jLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uYXV0aG9yQXZhdGFyID0gbWF0Y2hpbmdQa21lckRvYy5hdXRob3JBdmF0YXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nUmVhZG1lID0gcGttZXJEb2NzLmZpbmQoZG9jID0+IGRvYy5zbHVnLmluY2x1ZGVzKHBsdWdpbi5pZCArIFwiX3JlYWRtZVwiKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUmVhZG1lKSBwbHVnaW4ucmVhZG1lX3poID0gYGh0dHBzOi8vcGttZXIuY24vc2hvdy8ke21hdGNoaW5nUmVhZG1lLnVpZH1gO1xuXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2luTWFuaWZlc3RzID0gcHJvcHMuYXBwLnBsdWdpbnMubWFuaWZlc3RzO1xuICAgICAgICAgICAgICAgIHBsdWdpbi5pc0luc3RhbGxlZCA9IHBsdWdpbk1hbmlmZXN0c1twbHVnaW4uaWRdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcGx1Z2luLmlzT3V0ZGF0ZWQgPSBwbHVnaW4uaXNJbnN0YWxsZWQgJiYgcGx1Z2luTWFuaWZlc3RzW3BsdWdpbi5pZF0udmVyc2lvbiAhPT0gcGx1Z2luLnZlcnNpb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEFsbFBsdWdpbkxpc3QudmFsdWUgPSBbXTsgLy8gRW5zdXJlIGl0J3MgYW4gYXJyYXlcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgaGFuZGxlQXBpRXJyb3IoZXJyb3IsIFwiRXJyb3I6XCIpO1xuICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gW107IC8vIEVuc3VyZSByZXNldCBvbiBlcnJvclxuICAgICAgICB0b3RhbFBsdWdpbnMudmFsdWUgPSAwO1xuICAgICAgICB0b3RhbFBhZ2VzLnZhbHVlID0gMTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0xvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB9XG59O1xuXG5cblxuY29uc3QgY2xvc2VOb3RpZmljYXRpb24gPSAoKSA9PiB7XG4gICAgaXNDbG9zZS52YWx1ZSA9IHRydWVcbiAgICBzb3J0QnlEb3dubG9hZENvdW50KClcbn1cbmNvbnN0IHNlYXJjaFRleHRSZWYgPSByZWYoXCJcIilcbmNvbnN0IGFjdGl2ZUNhdGVnb3J5ID0gcmVmKFwiYWxsXCIpXG5jb25zdCBzZWxlY3RQbHVnaW4gPSByZWYoXCJcIilcbmNvbnN0IHNlbGVjdFBsdWdpblZlcnNpb24gPSByZWYoXCJcIilcbmNvbnN0IHNlbGVjdFBsdWdpblNjb3VyY2UgPSByZWYoXCJcIilcblxuLy8g5re75Yqg6YeN5paw5Yqg6L2954q25oCB5qCP55qE5pa55rOVXG5cbmNvbnN0IHJlbG9hZFN0YXR1c0JhckhhbmRsZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgYXBpRXJyb3IudmFsdWUgPSBudWxsO1xuICAgIC8vIEFsd2F5cyB1cGRhdGUgbG9jYWwgaW5zdGFsbGVkIGNvdW50XG4gICAgLy9AdHMtaWdub3JlXG4gICAgY29uc3QgbG9jYWxJbnN0YWxsZWRJZHMgPSBPYmplY3Qua2V5cyhwcm9wcy5hcHAucGx1Z2lucy5tYW5pZmVzdHMpO1xuICAgIGluc3RhbGxlZFBsdWdpbnNDb3VudC52YWx1ZSA9IGxvY2FsSW5zdGFsbGVkSWRzLmxlbmd0aDtcblxuICAgIGlmICghaXNVc2VyTG9naW4udmFsdWUpIHsgLy8gSWYgbm90IGxvZ2dlZCBpbiwgY2Fubm90IGFjY3VyYXRlbHkgZGV0ZXJtaW5lIG91dGRhdGVkIHBsdWdpbnMgZnJvbSBzZXJ2ZXJcbiAgICAgICAgb3V0ZGF0ZWRQbHVnaW5zQ291bnQudmFsdWUgPSAwO1xuICAgICAgICAvLyBPcHRpb25hbGx5LCBub3RpZnkgdXNlciBsb2dpbiBpcyBuZWVkZWQgZm9yIHVwZGF0ZSBjaGVja3NcbiAgICAgICAgLy8gbmV3IE5vdGljZShcIkxvZ2luIHRvIFBLTWVyIHRvIGNoZWNrIGZvciBwbHVnaW4gdXBkYXRlcy5cIiwgMzAwMCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAobG9jYWxJbnN0YWxsZWRJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8g5L2/55So6L6D5aSn55qEcGFnZVNpemXojrflj5bmiYDmnInmj5Lku7bvvIznoa7kv53kuI5zb3J0QnlVcGRhdGVk5LiA6Ie0XG4gICAgICAgICAgICBjb25zdCB7IHBsdWdpbnMgfSA9IGF3YWl0IGFwaS5nZXRJbnN0YWxsZWRQbHVnaW5zUGFnaW5hdGVkKFxuICAgICAgICAgICAgICAgIGxvY2FsSW5zdGFsbGVkSWRzLCAxLCAxMDAwMCwgXCJkb3dubG9hZENvdW50XCIsIFwiREVTQ1wiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBvdXRkYXRlZFBsdWdpbnMgPSBwbHVnaW5zLmZpbHRlcigocGx1Z2luOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHByb3BzLmFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW4uaWRdO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdCAmJiBtYW5pZmVzdC52ZXJzaW9uICE9PSBwbHVnaW4udmVyc2lvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3V0ZGF0ZWRQbHVnaW5zQ291bnQudmFsdWUgPSBvdXRkYXRlZFBsdWdpbnMubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ZGF0ZWRQbHVnaW5zQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBoYW5kbGVBcGlFcnJvcihlcnJvciwgXCJFcnJvciBsb2FkaW5nIHBsdWdpbiB1cGRhdGUgc3RhdHVzXCIpO1xuICAgICAgICBvdXRkYXRlZFBsdWdpbnNDb3VudC52YWx1ZSA9IDA7IC8vIFJlc2V0IG9uIGVycm9yXG4gICAgfVxufTtcblxuXG5cbi8vIOS/ruaUueS4i+i9veaPkuS7tuaWueazle+8jOa3u+WKoOeKtuaAgeabtOaWsFxuY29uc3QgaGFuZGxlRG93bmxvYWRQbHVnaW4gPSBhc3luYyAoKSA9PiB7XG4gICAgc2hvd01vZGFsLnZhbHVlID0gZmFsc2U7XG4gICAgbmV3IE5vdGljZShcIuato+WcqOS4i+i9veaPkuS7tu+8jOivt+eojeWQji4uLlwiLCAzMDAwKTtcbiAgICBjb25zdCBkb3dubG9hZFN0YXR1cyA9IGF3YWl0IHBsdWdpblByb2Nlc3Nvci5kb3dubG9hZFBsdWdpblRvUGx1Z2luRm9sZGVyKFxuICAgICAgICBzZWxlY3RQbHVnaW4udmFsdWUsXG4gICAgICAgIHNlbGVjdFBsdWdpblZlcnNpb24udmFsdWVcbiAgICApO1xuXG4gICAgaWYgKCFkb3dubG9hZFN0YXR1cykgcmV0dXJuO1xuXG4gICAgQWxsUGx1Z2luTGlzdC52YWx1ZSA9IEFsbFBsdWdpbkxpc3QudmFsdWUubWFwKChwbHVnaW46IGFueSkgPT4ge1xuICAgICAgICBpZiAocGx1Z2luLmlkID09IHNlbGVjdFBsdWdpbi52YWx1ZSkge1xuICAgICAgICAgICAgcGx1Z2luLmlzSW5zdGFsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGx1Z2luO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIOabtOaWsOaPkuS7tueKtuaAgeaVsOaNrlxuICAgIGF3YWl0IHJlbG9hZFN0YXR1c0JhckhhbmRsZXIoKTtcbn07XG5cbi8vIOS/ruaUueabtOaWsOaPkuS7tuaWueazle+8jOa3u+WKoOeKtuaAgeabtOaWsFxuY29uc3QgaGFuZGxlVXBkYXRlUGx1Z2luID0gYXN5bmMgKCkgPT4ge1xuICAgIHNob3dNb2RhbC52YWx1ZSA9IGZhbHNlO1xuICAgIG5ldyBOb3RpY2UoXCLmraPlnKjmm7TmlrDmj5Lku7bvvIzor7fnqI3lkI4uLi5cIiwgMzAwMCk7XG4gICAgY29uc3QgdXBkYXRlU3RhdHVzID0gYXdhaXQgcGx1Z2luUHJvY2Vzc29yLnVwZGF0ZVBsdWdpblRvRXhpc3RQbHVnaW5Gb2xkZXIoXG4gICAgICAgIHNlbGVjdFBsdWdpbi52YWx1ZSxcbiAgICAgICAgc2VsZWN0UGx1Z2luVmVyc2lvbi52YWx1ZVxuICAgICk7XG4gICAgaWYgKCF1cGRhdGVTdGF0dXMpIHJldHVybjtcblxuICAgIEFsbFBsdWdpbkxpc3QudmFsdWUgPSBBbGxQbHVnaW5MaXN0LnZhbHVlLm1hcCgocGx1Z2luOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHBsdWdpbi5pZCA9PSBzZWxlY3RQbHVnaW4udmFsdWUpIHtcbiAgICAgICAgICAgIHBsdWdpbi5pc091dGRhdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBsdWdpbjtcbiAgICB9KTtcbiAgICBcbiAgICAvLyDmm7TmlrDmj5Lku7bnirbmgIHmlbDmja5cbiAgICBhd2FpdCByZWxvYWRTdGF0dXNCYXJIYW5kbGVyKCk7XG59O1xuXG5jb25zdCBjYW5jZWxNb2RhbCA9ICgpID0+IHtcbiAgICBzaG93TW9kYWwudmFsdWUgPSBmYWxzZVxufVxuXG5jb25zdCBoYW5kbGVVcGRhdGVBY3RpdmVDYXRlZ29yeSA9IGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgYWN0aXZlQ2F0ZWdvcnkudmFsdWUgPSB2YWx1ZTtcbiAgICBjdXJyZW50UGFnZS52YWx1ZSA9IDE7IC8vIOmHjee9rumhteeggVxuXG4gICAgLy8g56Gu5L+d5pWw5o2u5bey5Yqg6L29XG4gICAgYXdhaXQgbG9hZERhdGFJZk5lZWRlZCgpO1xuXG4gICAgLy8g5aaC5p6c5pyJ5pCc57Si5p2h5Lu277yM5L+d5oyB5pCc57Si5bm25bqU55So5paw5YiG57G777yb5ZCm5YiZ5qC55o2u5YiG57G75Yqg6L29XG4gICAgaWYgKHNlYXJjaFRleHRSZWYudmFsdWUudHJpbSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVNlYXJjaCgpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgLy8g5omA5pyJ5YiG57G75L2/55SoQVBJ5Yqg6L29XG4gICAgICAgIGF3YWl0IGxvYWRBbGxQbHVnaW5zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8g54m55a6a5YiG57G75YWI5Yqg6L295omA5pyJ5pWw5o2u77yM54S25ZCO5Zyo5YmN56uv6L+H5rukXG4gICAgICAgIC8vIOazqOaEj++8muWmguaenOWQjuerr0FQSeaUr+aMgeaMieWIhuexu+i/h+a7pO+8jOW6lOivpeS9v+eUqEFQSVxuICAgICAgICBhd2FpdCBsb2FkQWxsUGx1Z2lucygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8g5YmN56uv6L+H5ruk54m55a6a5YiG57G7XG4gICAgICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gQWxsUGx1Z2luTGlzdC52YWx1ZS5maWx0ZXIoKHBsdWdpbjogUGx1Z2luSW5mbykgPT5cbiAgICAgICAgICAgICAgICBwbHVnaW4udGFncz8uaW5jbHVkZXModmFsdWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vLyDojrflj5bmj5Lku7bniYjmnKzlj7fliJfooahcbmNvbnN0IGZldGNoUGx1Z2luVmVyc2lvbnMgPSBhc3luYyAocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XG4gXG4gdHJ5IHtcbiAgICAgLy8g5YGH6K6+IGFwaS5wbHVnaW5zLmdldFBsdWdpblZlcnNpb25zIOaYr+iOt+WPlueJiOacrOWPt+WIl+ihqOeahOaOpeWPo1xuICAgICBjb25zdCB2ZXJzaW9ucyA9IGF3YWl0IGFwaS5nZXRQbHVnaW5WZXJzaW9ucyhwbHVnaW5OYW1lKTtcbiAgICAgcGx1Z2luVmVyc2lvbnMudmFsdWUgPSB2ZXJzaW9ucztcbiAgICAgaWYgKCFzZWxlY3RQbHVnaW5WZXJzaW9uLnZhbHVlIHx8ICF2ZXJzaW9ucy5pbmNsdWRlcyhzZWxlY3RQbHVnaW5WZXJzaW9uLnZhbHVlKSkge1xuXHRcdFx0Ly8g5aaC5p6c5Li656m65oiW5LiN5Zyo5YiX6KGo5Lit77yM6buY6K6k6YCJ5oup56ys5LiA5Liq54mI5pys77yI5aaC5p6cIHZlcnNpb25zIOS4jeS4uuepuu+8iVxuXHRcdFx0aWYgKHZlcnNpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0c2VsZWN0UGx1Z2luVmVyc2lvbi52YWx1ZSA9IHZlcnNpb25zWzBdO1xuXHRcdFx0fVxuXHRcdH1cblxuIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCB2ZXJzaW9ucyBmb3IgcGx1Z2luICR7cGx1Z2luTmFtZX06YCwgZXJyb3IpO1xuICAgICBwbHVnaW5WZXJzaW9ucy52YWx1ZSA9IFtdO1xuIH1cbn07XG5cbmNvbnN0IGhhbmRsZVNob3dQbHVnaW5Nb2RhbCA9IChcbiAgICBhY3Rpb246IFwiZG93bmxvYWRcIiB8IFwidXBkYXRlXCIsXG4gICAgcGx1Z2luSWQ6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgc291cmNlOiBzdHJpbmdcbikgPT4ge1xuICAgIHNob3dNb2RhbC52YWx1ZSA9IHRydWVcbiAgICBzZWxlY3RQbHVnaW4udmFsdWUgPSBwbHVnaW5JZFxuICAgIHNlbGVjdFBsdWdpblZlcnNpb24udmFsdWUgPSB2ZXJzaW9uXG4gICAgb3JpZ2luVmVyc2lvbi52YWx1ZT12ZXJzaW9uXG4gICAgc2VsZWN0UGx1Z2luU2NvdXJjZS52YWx1ZSA9IHNvdXJjZVxuICAgIGlmIChzZWxlY3RQbHVnaW4udmFsdWUpIHtcblx0XHRcdGZldGNoUGx1Z2luVmVyc2lvbnMoc2VsZWN0UGx1Z2luLnZhbHVlKTtcblx0XHR9XG4gICAgaWYgKGFjdGlvbiA9PT0gXCJkb3dubG9hZFwiKSB7XG4gICAgICAgIGlzRG93bmxvYWQudmFsdWUgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgICAgaXNEb3dubG9hZC52YWx1ZSA9IGZhbHNlXG4gICAgfVxufVxuXG4vLyBjb25zb2xlLmxvZyhwcm9wcy5wbHVnaW5MaXN0KTtcbi8vIOS7jmxvY2F0aW9uLmhhc2jmj5Dlj5bliIbnsbvlkI3np7DlubbotYvlgLznu5lhY3RpdmVDYXRlZ29yeVxuY29uc3QgZXh0cmFjdENhdGVnb3J5RnJvbUhhc2ggPSAoKSA9PiB7XG4gICAgY29uc3QgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpIC8vIOiOt+WPluexu+S8vOS6jlwid2lkZ2V0L3dpZGdldE1hcmtldCPlgJLorqHml7ZcIueahOWtl+espuS4su+8jOWOu+aOieWJjemdoueahCNcbiAgICBpZiAoaGFzaCkge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGRlY29kZVVSSUNvbXBvbmVudChoYXNoKVxuICAgICAgICBhY3RpdmVDYXRlZ29yeS52YWx1ZSA9IGNhdGVnb3J5XG4gICAgfVxufVxuY29uc3QgcGttZXJTaXplID0gcmVmKClcbmNvbnN0IGxvYWRQbHVnaW5UYWdzID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNVc2VyTG9naW4udmFsdWUpIHtcbiAgICAgICAgcGx1Z2luVGFncy52YWx1ZSA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXHR0cnkge1xuICAgICAgICBhcGlFcnJvci52YWx1ZSA9IG51bGw7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZ2V0UGx1Z2luVGFncygpO1xuXHRcdGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlIHx8IFtdO1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZURhdGEpKSB7XG4gICAgICAgICAgICBwbHVnaW5UYWdzLnZhbHVlID0gW107IFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cdFx0cGx1Z2luVGFncy52YWx1ZSA9IHJlc3BvbnNlRGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS50YWcpO1xuXHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0aGFuZGxlQXBpRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gbG9hZCBwbHVnaW4gdGFncycpO1xuICAgICAgICBwbHVnaW5UYWdzLnZhbHVlID0gW107XG5cdH1cbn07XG5vbk1vdW50ZWQoYXN5bmMgKCkgPT4ge1xuICAgIGFwaUVycm9yLnZhbHVlID0gbnVsbDsgLy8gQ2xlYXIgYW55IGdsb2JhbCBlcnJvciBvbiBtb3VudFxuICAgIHRyeSB7XG4gICAgICAgIGlzVXNlckxvZ2luLnZhbHVlID0gYXdhaXQgYXBpLmlzVXNlckxvZ2luKCk7XG4gICAgICAgIGlmICghaXNVc2VyTG9naW4udmFsdWUgJiYgcHJvcHMuc2V0dGluZ3MudG9rZW4pIHsgLy8gSGFzIHRva2VuIGJ1dCBBUEkgc2F5cyBub3QgbG9nZ2VkIGluXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcIlBLTWVyIOeZu+W9lemqjOivgeWksei0peOAguaCqOeahOS7pOeJjOWPr+iDveaXoOaViOaIlui/h+acn+OAguivt+mHjeaWsOeZu+W9leiOt+WPllwiO1xuICAgICAgICAgICAgYXBpRXJyb3IudmFsdWUgPSBtc2c7IC8vIERpc3BsYXkgYXMgcGVyc2lzdGVudCBlcnJvclxuICAgICAgICAgICAgbmV3IE5vdGljZShtc2csIDEwMDAwKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNVc2VyTG9naW4udmFsdWUgJiYgIXByb3BzLnNldHRpbmdzLnRva2VuKSB7IC8vIE5vIHRva2VuXG4gICAgICAgICAgICBuZXcgTm90aWNlKFwi5pyq55m75b2VIFBLTWVy77yM5p+Q5Lqb5Yqf6IO95LiN5Y+v55So77yM6K+35Zyo6K6+572u5Lit6K6+572u5oKo55qEVG9rZW7vvIzku6Xkvr/lrozlhajorr/pl67jgIJcIiwgNzAwMCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAvLyBUaGlzIGNhdGNoIGlzIGZvciBhcGkudmFsdWUuaXNVc2VyTG9naW4oKSBpdHNlbGYgZmFpbGluZyAoZS5nLiBuZXR3b3JrLCBvciA0MDEgb24gdGhpcyBzcGVjaWZpYyBjYWxsKVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIGluaXRpYWwgbG9naW4gY2hlY2s6XCIsIGVycik7XG4gICAgICAgIGlzVXNlckxvZ2luLnZhbHVlID0gZmFsc2U7IC8vIEFzc3VtZSBub3QgbG9nZ2VkIGluIGlmIGNoZWNrIGZhaWxzXG4gICAgICAgIGNvbnN0IGlzQXV0aEVycm9yID0gZXJyLnN0YXR1cyA9PT0gNDAxIHx8IGVyci5uYW1lID09PSBcIlVuYXV0aG9yaXplZEVycm9yXCIgfHwgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpO1xuICAgICAgICBpZiAoaXNBdXRoRXJyb3IpIHtcbiAgICAgICAgICAgIGFwaUVycm9yLnZhbHVlID0gXCLpqozor4HplJnor6/vvJog5peg5rOV6YCa6L+HIFBLTWVyIOmqjOivgeeZu+W9leeKtuaAgeOAguaCqOeahOS7pOeJjOWPr+iDveaXoOaViOOAglwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBpRXJyb3IudmFsdWUgPSBcIue9kee7nOmUmeivr++8miDml6Dms5Xov57mjqXliLAgUEtNZXIg5Lul6aqM6K+B55m75b2V54q25oCB44CCXCI7XG4gICAgICAgIH1cbiAgICAgICAgbmV3IE5vdGljZShhcGlFcnJvci52YWx1ZSEsIDEwMDAwKTtcbiAgICB9XG5cbiAgICBpc0Nsb3NlLnZhbHVlID0gZmFsc2U7XG4gICAgZXh0cmFjdENhdGVnb3J5RnJvbUhhc2goKTsgXG4gICAgXG4gICAgc29ydEJ5LnZhbHVlID0gXCJkb3dubG9hZENvdW50XCI7XG4gICAgc29ydE9yZGVyLnZhbHVlID0gXCJkZXNjXCI7XG4gICAgXG4gICAgaWYgKHByb3BzLmN1cnJlbnRUYWIpIGN1cnJlbnRUYWIudmFsdWUgPSBwcm9wcy5jdXJyZW50VGFiO1xuXG4gICAgcHJvcHMuYXBwLndvcmtzcGFjZS5vbihcInJlc2l6ZVwiLCBoYW5kbGVXaW5kb3dSZXNpemUpO1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHBrbWVyU2l6ZS52YWx1ZSA9IHByb3BzLmFwcC53b3Jrc3BhY2UuYWN0aXZlTGVhZj8udmlldz8ubGVhZj8ud2lkdGggfHwgMDtcblxuICAgIC8vIOWPquWKoOi9veacrOWcsOaVsOaNru+8jOS4jeWPkei1t+e9kee7nOivt+axglxuICAgIGlmIChpc1VzZXJMb2dpbi52YWx1ZSkge1xuICAgICAgICAvLyDlr7nkuo7lt7LnmbvlvZXnlKjmiLfvvIzlhYjliqDovb3moIfnrb7vvIjkuI3pmLvloZ7vvIlcbiAgICAgICAgbG9hZFBsdWdpblRhZ3MoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+WKoOi9veaPkuS7tuagh+etvuWksei0pTonLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyDlu7bov5/liqDovb3nirbmgIHmoI/kv6Hmga9cbiAgICAgICAgcmVsb2FkU3RhdHVzQmFySGFuZGxlcigpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5Yqg6L2954q25oCB5qCP5L+h5oGv5aSx6LSlOicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG5vbi1sb2dnZWQtaW4gdXNlcnMsIHNvbWUgZGF0YSB3b24ndCBiZSBhdmFpbGFibGVcbiAgICAgICAgcGx1Z2luVGFncy52YWx1ZSA9IFtdO1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgaW5zdGFsbGVkUGx1Z2luc0NvdW50LnZhbHVlID0gT2JqZWN0LmtleXMocHJvcHMuYXBwLnBsdWdpbnMubWFuaWZlc3RzKS5sZW5ndGg7IC8vIExvY2FsIGNvdW50XG4gICAgICAgIG91dGRhdGVkUGx1Z2luc0NvdW50LnZhbHVlID0gMDsgLy8gQ2Fubm90IGRldGVybWluZSB3aXRob3V0IEFQSVxuICAgIH1cblxuICAgIGlmIChwcm9wcy50YWIpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IEpTT04ucGFyc2UocHJvcHMudGFiKTtcbiAgICAgICAgaWYgKHBhcnNlZERhdGEudHlwZSA9PSBcInVwZGF0ZWRcIikge1xuICAgICAgICAgICAgc29ydEJ5LnZhbHVlID0gXCJ1cGRhdGVUaW1lXCI7IC8vIFRoaXMgbWlnaHQgbmVlZCB0byBtYXAgdG8gJ3BsdWdpblVwZGF0ZWRUaW1lJyBmb3IgQVBJXG4gICAgICAgICAgICAvLyDlu7bov5/liqDovb3mlbDmja5cbiAgICAgICAgICAgIG5lZWRzTG9hZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlZERhdGEudHlwZSA9PSBcImluc3RhbGxlZFwiKSB7XG4gICAgICAgICAgICAvLyDlu7bov5/liqDovb3mlbDmja5cbiAgICAgICAgICAgIG5lZWRzTG9hZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8g5LiN5YaN6Ieq5Yqo5Yqg6L295pWw5o2u77yM562J5b6F55So5oi35Li75Yqo6Kem5Y+RXG59KTtcblxuY29uc3QgaGFuZGxlV2luZG93UmVzaXplID0gKCkgPT4ge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHBrbWVyU2l6ZS52YWx1ZSA9IHByb3BzLmFwcC53b3Jrc3BhY2UuYWN0aXZlTGVhZi52aWV3LmxlYWYud2lkdGhcbn1cbm9uVW5tb3VudGVkKCgpID0+IHtcbiAgICAvLyBlbGUudmFsdWUgJiYgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGVsZS52YWx1ZSlcbiAgICAvLyB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVXaW5kb3dSZXNpemUpXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJwa21lci11cGRhdGUtdGFiXCIpXG59KVxuXG4vLyBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4vLyAgICAgaGFuZGxlV2luZG93UmVzaXplKClcbi8vIH0pXG5cblxuY29uc3QgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2UoKCkgPT4ge1xuICAgIGhhbmRsZVNlYXJjaCgpO1xufSwgODAwKTtcbi8vIOebkeWQrCBzZWFyY2hUZXh0UmVmIOWPmOWMlu+8jOinpuWPkemYsuaKluaQnOe0olxud2F0Y2goc2VhcmNoVGV4dFJlZiwgKCkgPT4ge1xuICAgIGRlYm91bmNlZFNlYXJjaCgpO1xufSk7XG5jb25zdCBmaWx0ZXJlZExpc3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8g56e75Yqo56uvL+ahjOmdouerr+i/h+a7pOmAu+i+keS7jemcgOimgeWcqOWJjeerr+WkhOeQhlxuICAgIGlmIChmaWx0ZXJEZXZpY2VPcHRpb24udmFsdWUgPT09IFwibW9iaWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIEFsbFBsdWdpbkxpc3QudmFsdWU/LmZpbHRlcigocGx1Z2luOiBQbHVnaW5JbmZvKSA9PiAhcGx1Z2luLmlzRGVza3RvcE9ubHkpIHx8IFtdO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyRGV2aWNlT3B0aW9uLnZhbHVlID09PSBcImRlc2t0b3BcIikge1xuICAgICAgICByZXR1cm4gQWxsUGx1Z2luTGlzdC52YWx1ZT8uZmlsdGVyKChwbHVnaW46IFBsdWdpbkluZm8pID0+IHBsdWdpbi5pc0Rlc2t0b3BPbmx5KSB8fCBbXTtcbiAgICB9XG4gICAgcmV0dXJuIEFsbFBsdWdpbkxpc3QudmFsdWUgfHwgW107XG59KTtcblxuY29uc3QgY29tcHV0ZWRUb3RhbFBhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChhY3RpdmVDYXRlZ29yeS52YWx1ZSA9PT0gXCJhbGxcIikge1xuICAgICAgICByZXR1cm4gdG90YWxQYWdlcy52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyDlr7nkuo7liIbnsbvvvIzlj6/og73ku43pnIDopoHliY3nq6/orqHnrpdcbiAgICAgICAgY29uc3QgZmlsdGVyZWRCeUNhdGVnb3J5ID0gZmlsdGVyZWRMaXN0LnZhbHVlLmZpbHRlcigocGx1Z2luOiBQbHVnaW5JbmZvKSA9PiBcbiAgICAgICAgICAgIHBsdWdpbi50YWdzPy5pbmNsdWRlcyhhY3RpdmVDYXRlZ29yeS52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChmaWx0ZXJlZEJ5Q2F0ZWdvcnkubGVuZ3RoIC8gcGVyUGFnZUNvdW50LnZhbHVlKTtcbiAgICB9XG59KTtcblxuXG5cbi8vIOe7n+S4gOWkhOeQhuaOkuW6j+mAu+i+kVxuY29uc3QgaGFuZGxlU29ydCA9IGFzeW5jICgpID0+IHtcbiAgICAvLyDnoa7kv53mlbDmja7lt7LliqDovb1cbiAgICBhd2FpdCBsb2FkRGF0YUlmTmVlZGVkKCk7XG5cbiAgICAvLyDlpoLmnpzmnInmkJzntKLmnaHku7bvvIzkv53mjIHmkJzntKLlubblupTnlKjmlrDmjpLluo/vvJvlkKbliJnliqDovb3miYDmnInmj5Lku7ZcbiAgICBpZiAoc2VhcmNoVGV4dFJlZi52YWx1ZS50cmltKCkpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlU2VhcmNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbG9hZEFsbFBsdWdpbnMoKTtcbiAgICB9XG59O1xuXG5hc3luYyBmdW5jdGlvbiBzb3J0QnlQa21lckRvd25sb2FkQ291bnQoKSB7XG4gICAgc29ydEJ5LnZhbHVlID0gXCJwa21lckRvd25sb2FkQ291bnRcIjtcbiAgICBzb3J0T3JkZXIudmFsdWUgPSBzb3J0T3JkZXIudmFsdWUgPT09IFwiZGVzY1wiID8gXCJhc2NcIiA6IFwiZGVzY1wiO1xuICAgIGN1cnJlbnRQYWdlLnZhbHVlID0gMTsgLy8g6YeN572u5Yiw56ys5LiA6aG1XG4gICAgYXdhaXQgaGFuZGxlU29ydCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzb3J0QnlEb3dubG9hZENvdW50KCkge1xuICAgIHNvcnRCeS52YWx1ZSA9IFwiZG93bmxvYWRDb3VudFwiO1xuICAgIHNvcnRPcmRlci52YWx1ZSA9IHNvcnRPcmRlci52YWx1ZSA9PT0gXCJkZXNjXCIgPyBcImFzY1wiIDogXCJkZXNjXCI7XG4gICAgY3VycmVudFBhZ2UudmFsdWUgPSAxOyAvLyDph43nva7liLDnrKzkuIDpobVcbiAgICBhd2FpdCBoYW5kbGVTb3J0KCk7XG59XG5cbi8vIOeCueWHu+aMieabtOaWsOaXtumXtOaOkuW6j+aMiemSrlxuYXN5bmMgZnVuY3Rpb24gc29ydEJ5VXBkYXRlVGltZSgpIHtcbiAgICBzb3J0QnkudmFsdWUgPSBcInBsdWdpblVwZGF0ZWRUaW1lXCI7IC8vIOS/ruaUueS4uuS4juWQjuerr0FQSeWvueW6lOeahOWtl+auteWQjVxuICAgIHNvcnRPcmRlci52YWx1ZSA9IHNvcnRPcmRlci52YWx1ZSA9PT0gXCJkZXNjXCIgPyBcImFzY1wiIDogXCJkZXNjXCI7XG4gICAgY3VycmVudFBhZ2UudmFsdWUgPSAxOyAvLyDph43nva7liLDnrKzkuIDpobVcbiAgICBhd2FpdCBoYW5kbGVTb3J0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNvcnRCeUZpbGVuYW1lKCkge1xuICAgIHNvcnRCeS52YWx1ZSA9IFwibmFtZVwiOyAvLyDnoa7kv53kuI7lkI7nq69BUEnlr7nlupTnmoTlrZfmrrXlkI3kuIDoh7RcbiAgICBzb3J0T3JkZXIudmFsdWUgPSBzb3J0T3JkZXIudmFsdWUgPT09IFwiZGVzY1wiID8gXCJhc2NcIiA6IFwiZGVzY1wiO1xuICAgIGN1cnJlbnRQYWdlLnZhbHVlID0gMTsgLy8g6YeN572u5Yiw56ys5LiA6aG1XG4gICAgYXdhaXQgaGFuZGxlU29ydCgpO1xufVxuXG4vLyDkv67mlLnlt7Llronoo4Xmj5Lku7bnrZvpgInlh73mlbBcbmFzeW5jIGZ1bmN0aW9uIHNvcnRCeUluc3RhbGxlZCgpIHtcbiAgICAvLyDmuIXpmaTmjpLluo/lj4LmlbDvvIzlm6DkuLrov5nmmK/liY3nq6/ov4fmu6RcbiAgICBzb3J0QnkudmFsdWUgPSBcImluc3RhbGxlZFwiO1xuICAgIHNvcnRPcmRlci52YWx1ZSA9IFwiZGVzY1wiO1xuICAgIGN1cnJlbnRQYWdlLnZhbHVlID0gMTtcbiAgICBhY3RpdmVDYXRlZ29yeS52YWx1ZSA9IFwiYWxsXCI7IC8vIOmHjee9ruagh+etvuetm+mAiVxuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8g6I635Y+W5bey5a6J6KOF5o+S5Lu255qEIElEIOWIl+ihqFxuICAgICAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5JZHMgPSBPYmplY3Qua2V5cyhwcm9wcy5hcHAucGx1Z2lucy5tYW5pZmVzdHMpO1xuXG4gICAgICAgIGlmIChpbnN0YWxsZWRQbHVnaW5JZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gW107XG4gICAgICAgICAgICB0b3RhbFBsdWdpbnMudmFsdWUgPSAwO1xuICAgICAgICAgICAgdG90YWxQYWdlcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zQ291bnQudmFsdWUgPSAwO1xuICAgICAgICAgICAgb3V0ZGF0ZWRQbHVnaW5zQ291bnQudmFsdWUgPSAwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g5L2/55SoIEFQSSDojrflj5bmiYDmnInlt7Llronoo4Xmj5Lku7bvvIjkuI3liIbpobXvvIlcbiAgICAgICAgY29uc3QgeyBwbHVnaW5zLCB0b3RhbCB9ID0gYXdhaXQgYXBpLmdldEluc3RhbGxlZFBsdWdpbnNQYWdpbmF0ZWQoXG4gICAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5JZHMsXG4gICAgICAgICAgICAxLCAvLyDmgLvmmK/ku47nrKzkuIDpobXlvIDlp4tcbiAgICAgICAgICAgIDEwMDAwLCAvLyDkvb/nlKjovoPlpKfnmoTlgLznoa7kv53ojrflj5bmiYDmnInmj5Lku7ZcbiAgICAgICAgICAgIHNvcnRCeS52YWx1ZSxcbiAgICAgICAgICAgIHNvcnRPcmRlci52YWx1ZT8udG9VcHBlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIOabtOaWsOaPkuS7tuWIl+ihqOWSjOWIhumhteS/oeaBr1xuICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gcGx1Z2lucztcbiAgICAgICAgdG90YWxQbHVnaW5zLnZhbHVlID0gdG90YWw7XG4gICAgICAgIHRvdGFsUGFnZXMudmFsdWUgPSBNYXRoLmNlaWwodG90YWwgLyBwZXJQYWdlQ291bnQudmFsdWUpO1xuXG4gICAgICAgIC8vIOabtOaWsOeKtuaAgeagj+e7n+iuoeS/oeaBr++8iOS4juWIl+ihqOS/neaMgeS4gOiHtO+8iVxuICAgICAgICBpbnN0YWxsZWRQbHVnaW5zQ291bnQudmFsdWUgPSB0b3RhbDtcbiAgICAgICAgY29uc3Qgb3V0ZGF0ZWRQbHVnaW5zID0gcGx1Z2lucy5maWx0ZXIocGx1Z2luID0+IHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBwcm9wcy5hcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luLmlkXTtcbiAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdCAmJiBtYW5pZmVzdC52ZXJzaW9uICE9PSBwbHVnaW4udmVyc2lvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIG91dGRhdGVkUGx1Z2luc0NvdW50LnZhbHVlID0gb3V0ZGF0ZWRQbHVnaW5zLmxlbmd0aDtcblxuICAgICAgICAvLyDlpITnkIbmj5Lku7bpop3lpJbkv6Hmga9cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoQWxsUGx1Z2luTGlzdC52YWx1ZSkpIHtcbiAgICAgICAgICAgIEFsbFBsdWdpbkxpc3QudmFsdWUuZm9yRWFjaCgocGx1Z2luKSA9PiB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2luTWFuaWZlc3RzID0gcHJvcHMuYXBwLnBsdWdpbnMubWFuaWZlc3RzO1xuICAgICAgICAgICAgICAgIHBsdWdpbi5pc0luc3RhbGxlZCA9IHBsdWdpbk1hbmlmZXN0c1twbHVnaW4uaWRdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcGx1Z2luLmlzT3V0ZGF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaXNJbnN0YWxsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWFuaWZlc3RzW3BsdWdpbi5pZF0udmVyc2lvbiAhPT0gcGx1Z2luLnZlcnNpb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBpbnN0YWxsZWQgcGx1Z2luczpcIiwgZXJyb3IpO1xuICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gW107XG4gICAgICAgIHRvdGFsUGx1Z2lucy52YWx1ZSA9IDA7XG4gICAgICAgIHRvdGFsUGFnZXMudmFsdWUgPSAxO1xuICAgICAgICBpbnN0YWxsZWRQbHVnaW5zQ291bnQudmFsdWUgPSAwO1xuICAgICAgICBvdXRkYXRlZFBsdWdpbnNDb3VudC52YWx1ZSA9IDA7XG4gICAgfVxufVxuXG4vLyDkv67mlLnpnIDopoHmm7TmlrDnmoTmj5Lku7bnrZvpgInlh73mlbBcbmFzeW5jIGZ1bmN0aW9uIHNvcnRCeVVwZGF0ZWQoKSB7XG4gICAgc29ydEJ5LnZhbHVlID0gXCJkb3dubG9hZENvdW50XCI7XG4gICAgc29ydE9yZGVyLnZhbHVlID0gXCJkZXNjXCI7XG4gICAgY3VycmVudFBhZ2UudmFsdWUgPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8g6I635Y+W5bey5a6J6KOF5o+S5Lu255qEIElEIOWIl+ihqFxuICAgICAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5JZHMgPSBPYmplY3Qua2V5cyhwcm9wcy5hcHAucGx1Z2lucy5tYW5pZmVzdHMpO1xuXG4gICAgICAgIGlmIChpbnN0YWxsZWRQbHVnaW5JZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gW107XG4gICAgICAgICAgICB0b3RhbFBsdWdpbnMudmFsdWUgPSAwO1xuICAgICAgICAgICAgdG90YWxQYWdlcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyDkvb/nlKggQVBJIOiOt+WPluaJgOacieW3suWuieijheaPkuS7tu+8iOS4jeWIhumhte+8jOS7peiOt+WPluWujOaVtOWIl+ihqO+8iVxuICAgICAgICAvLyDov5nmoLflj6/ku6Xnoa7kv53nirbmgIHmoI/lkozliJfooajmmL7npLrnmoTmlbDph4/kuIDoh7RcbiAgICAgICAgY29uc3QgeyBwbHVnaW5zfSA9IGF3YWl0IGFwaS5nZXRJbnN0YWxsZWRQbHVnaW5zUGFnaW5hdGVkKFxuICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luSWRzLFxuICAgICAgICAgICAgMSwgLy8g5oC75piv5LuO56ys5LiA6aG15byA5aeLXG4gICAgICAgICAgICAxMDAwMCwgLy8g5L2/55So6L6D5aSn55qE5YC856Gu5L+d6I635Y+W5omA5pyJ5o+S5Lu2XG4gICAgICAgICAgICBzb3J0QnkudmFsdWUsXG4gICAgICAgICAgICBzb3J0T3JkZXIudmFsdWU/LnRvVXBwZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDlnKjliY3nq6/ov4fmu6Tlh7rpnIDopoHmm7TmlrDnmoTmj5Lku7ZcbiAgICAgICAgY29uc3Qgb3V0ZGF0ZWRQbHVnaW5zID0gcGx1Z2lucy5maWx0ZXIocGx1Z2luID0+IHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBwcm9wcy5hcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luLmlkXTtcbiAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdCAmJiBtYW5pZmVzdC52ZXJzaW9uICE9PSBwbHVnaW4udmVyc2lvbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g5pu05paw54q25oCB5qCP55qE6L+H5pe25o+S5Lu25pWw6YeP77yI5LiO5YiX6KGo5L+d5oyB5LiA6Ie077yJXG4gICAgICAgIG91dGRhdGVkUGx1Z2luc0NvdW50LnZhbHVlID0gb3V0ZGF0ZWRQbHVnaW5zLmxlbmd0aDtcblxuICAgICAgICAvLyDmm7TmlrDmj5Lku7bliJfooajlkozliIbpobXkv6Hmga9cbiAgICAgICAgQWxsUGx1Z2luTGlzdC52YWx1ZSA9IG91dGRhdGVkUGx1Z2lucztcbiAgICAgICAgdG90YWxQbHVnaW5zLnZhbHVlID0gb3V0ZGF0ZWRQbHVnaW5zLmxlbmd0aDtcbiAgICAgICAgdG90YWxQYWdlcy52YWx1ZSA9IE1hdGguY2VpbChvdXRkYXRlZFBsdWdpbnMubGVuZ3RoIC8gcGVyUGFnZUNvdW50LnZhbHVlKTtcblxuICAgICAgICAvLyDlpITnkIbmj5Lku7bpop3lpJbkv6Hmga9cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoQWxsUGx1Z2luTGlzdC52YWx1ZSkpIHtcbiAgICAgICAgICAgIEFsbFBsdWdpbkxpc3QudmFsdWUuZm9yRWFjaCgocGx1Z2luKSA9PiB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2luTWFuaWZlc3RzID0gcHJvcHMuYXBwLnBsdWdpbnMubWFuaWZlc3RzO1xuICAgICAgICAgICAgICAgIHBsdWdpbi5pc0luc3RhbGxlZCA9IHBsdWdpbk1hbmlmZXN0c1twbHVnaW4uaWRdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcGx1Z2luLmlzT3V0ZGF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaXNJbnN0YWxsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWFuaWZlc3RzW3BsdWdpbi5pZF0udmVyc2lvbiAhPT0gcGx1Z2luLnZlcnNpb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBvdXRkYXRlZCBwbHVnaW5zOlwiLCBlcnJvcik7XG4gICAgICAgIEFsbFBsdWdpbkxpc3QudmFsdWUgPSBbXTtcbiAgICAgICAgdG90YWxQbHVnaW5zLnZhbHVlID0gMDtcbiAgICAgICAgdG90YWxQYWdlcy52YWx1ZSA9IDE7XG4gICAgfVxufVxuXG5jb25zdCBkaXNwbGF5ZWRQbHVnaW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChhY3RpdmVDYXRlZ29yeS52YWx1ZSA9PT0gXCJhbGxcIikge1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRMaXN0LnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOWIhuexu+etm+mAieS7jemcgOimgeWcqOWJjeerr+i/m+ihjFxuICAgICAgICByZXR1cm4gZmlsdGVyZWRMaXN0LnZhbHVlLmZpbHRlcigocGx1Z2luOiBQbHVnaW5JbmZvKSA9PiBcbiAgICAgICAgICAgIHBsdWdpbi50YWdzPy5pbmNsdWRlcyhhY3RpdmVDYXRlZ29yeS52YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG59KTtcbmNvbnN0IHZhbGlkUGx1Z2luTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShBbGxQbHVnaW5MaXN0LnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gQWxsUGx1Z2luTGlzdC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufSk7XG5cblxuLy8g5re75Yqg5YiG6aG15aSE55CG5Ye95pWwXG5jb25zdCBoYW5kbGVQYWdlQ2hhbmdlID0gYXN5bmMgKHBhZ2U6IG51bWJlcikgPT4ge1xuICAgIGN1cnJlbnRQYWdlLnZhbHVlID0gcGFnZTtcbiAgICAvLyDnoa7kv53mlbDmja7lt7LliqDovb1cbiAgICBhd2FpdCBsb2FkRGF0YUlmTmVlZGVkKCk7XG4gICAgLy8g5aaC5p6c5pyJ5pCc57Si5p2h5Lu277yM5L+d5oyB5pCc57Si77yb5ZCm5YiZ5Yqg6L295omA5pyJ5o+S5Lu2XG4gICAgaWYgKHNlYXJjaFRleHRSZWYudmFsdWUudHJpbSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVNlYXJjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvYWRBbGxQbHVnaW5zKCk7XG4gICAgfVxufVxuXG4vLyDkv67mlLnmkJzntKLlip/og71cbmNvbnN0IGhhbmRsZVNlYXJjaCA9IGFzeW5jICgpID0+IHtcbiAgICBpc0xvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgIGN1cnJlbnRQYWdlLnZhbHVlID0gMTsgLy8g5pCc57Si5pe26YeN572u5Yiw56ys5LiA6aG1XG4gICAgYWN0aXZlQ2F0ZWdvcnkudmFsdWUgPSBcImFsbFwiOyAvLyDmkJzntKLml7bph43nva7moIfnrb7nrZvpgIlcbiAgICBcbiAgICB0cnkge1xuICAgICAgICBpZiAoc2VhcmNoVGV4dFJlZi52YWx1ZS50cmltKCkpIHtcbiAgICAgICAgICAgIC8vIOS9v+eUqOWQjuerr+aQnOe0okFQSVxuICAgICAgICAgICAgY29uc3QgeyBwbHVnaW5zLCB0b3RhbCwgdG90YWxQYWdlczogcGFnZXMgfSA9IGF3YWl0IGFwaS5zZWFyY2hQbHVnaW5zUGFnaW5hdGVkKFxuICAgICAgICAgICAgICAgIHNlYXJjaFRleHRSZWYudmFsdWUsXG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UudmFsdWUsXG4gICAgICAgICAgICAgICAgcGVyUGFnZUNvdW50LnZhbHVlLFxuICAgICAgICAgICAgICAgIHNvcnRCeS52YWx1ZSB8fCBcImRvd25sb2FkQ291bnRcIixcbiAgICAgICAgICAgICAgICBzb3J0T3JkZXIudmFsdWU/LnRvVXBwZXJDYXNlKCkgfHwgXCJERVNDXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEFsbFBsdWdpbkxpc3QudmFsdWUgPSBwbHVnaW5zO1xuICAgICAgICAgICAgdG90YWxQbHVnaW5zLnZhbHVlID0gdG90YWw7XG4gICAgICAgICAgICB0b3RhbFBhZ2VzLnZhbHVlID0gcGFnZXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIOWkhOeQhuaPkuS7tumineWkluS/oeaBr1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoQWxsUGx1Z2luTGlzdC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyDkvb/nlKjotoXml7bpgb/lhY3nvZHnu5zljaHpob9cbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCfor7fmsYLotoXml7YnKSksIDEwMDAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwa21lckRvY3NQcm9taXNlID0gYXBpLmdldFBrbWVyRG9jcygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBrbWVyRG9jcyA9IGF3YWl0IFByb21pc2UucmFjZShbcGttZXJEb2NzUHJvbWlzZSwgdGltZW91dFByb21pc2VdKSBhcyBBd2FpdGVkPFJldHVyblR5cGU8UGttZXJBcGlbJ2dldFBrbWVyRG9jcyddPj47XG4gICAgICAgICAgICAgICAgQWxsUGx1Z2luTGlzdC52YWx1ZS5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdQa21lckRvYyA9IHBrbWVyRG9jcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvYykgPT4gZG9jLnNsdWcgPT0gcGx1Z2luLmlkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ1BrbWVyRG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uY29udGVudFVybCA9IGBodHRwczovL3BrbWVyLmNuL3Nob3cvJHttYXRjaGluZ1BrbWVyRG9jLnVpZH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLnRhZ3MgPSBtYXRjaGluZ1BrbWVyRG9jLnRhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uY2hpbmVzZURlc2NyaXB0aW9uID0gbWF0Y2hpbmdQa21lckRvYy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5hdXRob3JBdmF0YXIgPSBtYXRjaGluZ1BrbWVyRG9jLmF1dGhvckF2YXRhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdSZWFkbWUgPSBwa21lckRvY3MuZmluZCgoZG9jKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jLnNsdWcuaW5jbHVkZXMocGx1Z2luLmlkICsgXCJfcmVhZG1lXCIpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ1JlYWRtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLnJlYWRtZV96aCA9IGBodHRwczovL3BrbWVyLmNuL3Nob3cvJHttYXRjaGluZ1JlYWRtZS51aWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbHVnaW5NYW5pZmVzdHMgPSBwcm9wcy5hcHAucGx1Z2lucy5tYW5pZmVzdHM7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5pc0luc3RhbGxlZCA9IHBsdWdpbk1hbmlmZXN0c1twbHVnaW4uaWRdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5pc091dGRhdGVkID0gXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaXNJbnN0YWxsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk1hbmlmZXN0c1twbHVnaW4uaWRdLnZlcnNpb24gIT09IHBsdWdpbi52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g56Gu5L+d5pWw5o2u5bey5Yqg6L29XG4gICAgICAgICAgICBhd2FpdCBsb2FkRGF0YUlmTmVlZGVkKCk7XG4gICAgICAgICAgICBhd2FpdCBsb2FkQWxsUGx1Z2lucygpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNlYXJjaGluZyBwbHVnaW5zOlwiLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNMb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxufVxuXG4vLyDmt7vliqDlvZPliY3moIfnrb7lj5jph49cbmNvbnN0IGN1cnJlbnRUYWIgPSByZWYoJ3BsdWdpbicpO1xuXG4gXG5cbi8vIOa3u+WKoOWKoOi9veS4u+mimOeahOWHveaVsFxuY29uc3QgbG9hZEFsbFRoZW1lcyA9IGFzeW5jICgpID0+IHtcbiAgICBpc0xvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgIGNvbnN0IHBrbWVyRG9jcyA9IGF3YWl0IGFwaS5nZXRQa21lckRvY3MoKTtcbiAgICBcbiAgICBpZiAoaXNVc2VyTG9naW4pIHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyDkvb/nlKjluKbliIbpobXlkozmjpLluo/nmoRBUEnliqDovb3kuLvpophcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWVzLCB0b3RhbCwgdG90YWxQYWdlczogcGFnZXMgfSA9IGF3YWl0IGFwaS5nZXRUaGVtZUxpc3RQYWdpbmF0ZWQoXG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UudmFsdWUsIFxuICAgICAgICAgICAgICAgIHBlclBhZ2VDb3VudC52YWx1ZSwgXG4gICAgICAgICAgICAgICAgc29ydEJ5LnZhbHVlIHx8IFwiZG93bmxvYWRDb3VudFwiLCBcbiAgICAgICAgICAgICAgICBzb3J0T3JkZXIudmFsdWU/LnRvVXBwZXJDYXNlKCkgfHwgXCJERVNDXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEFsbFBsdWdpbkxpc3QudmFsdWUgPSB0aGVtZXM7XG4gICAgICAgICAgICB0b3RhbFBsdWdpbnMudmFsdWUgPSB0b3RhbDtcbiAgICAgICAgICAgIHRvdGFsUGFnZXMudmFsdWUgPSBwYWdlcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoQWxsUGx1Z2luTGlzdC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlLmZvckVhY2goKHRoZW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8v5oqK5Li76aKY5ZCN56ew5Lit55qE56m65qC85pu/5o2i5Li65LiL5YiS57q/XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nUGttZXJEb2MgPSBwa21lckRvY3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChkb2MpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jLnNsdWcgPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZS5uYW1lLnJlcGxhY2UoL1xccysvZywgXCItXCIpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdQa21lckRvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUuY29udGVudFVybCA9IGBodHRwczovL3BrbWVyLmNuL3Nob3cvJHttYXRjaGluZ1BrbWVyRG9jLnVpZH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUudGFncyA9IG1hdGNoaW5nUGttZXJEb2MudGFncztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lLmNoaW5lc2VEZXNjcmlwdGlvbiA9IG1hdGNoaW5nUGttZXJEb2MuZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVtZS5hdXRob3JBdmF0YXIgPSBtYXRjaGluZ1BrbWVyRG9jLmF1dGhvckF2YXRhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGVtZU1hbmlmZXN0cyA9IHByb3BzLmFwcC5jdXN0b21Dc3MudGhlbWVzO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lLmlzSW5zdGFsbGVkID0gdGhlbWVNYW5pZmVzdHNbdGhlbWUubmFtZV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhlbWUuaXNPdXRkYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVtZS5pc0luc3RhbGxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVNYW5pZmVzdHNbdGhlbWUubmFtZV0udmVyc2lvbiAhPT0gdGhlbWUudmVyc2lvbjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgQWxsUGx1Z2luTGlzdC52YWx1ZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgdGhlbWVzOlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlID0gYXdhaXQgYXBpLmdldFRvcDIwVGhlbWVzKCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KEFsbFBsdWdpbkxpc3QudmFsdWUpKSB7XG4gICAgICAgICAgICBBbGxQbHVnaW5MaXN0LnZhbHVlLmZvckVhY2goKHRoZW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgLy/miorkuLvpopjlkI3np7DkuK3nmoTnqbrmoLzmm7/mjaLkuLrkuIvliJLnur9cbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BrbWVyRG9jID0gcGttZXJEb2NzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChkb2MpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2Muc2x1ZyA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUubmFtZS5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ1BrbWVyRG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoZW1lLmNvbnRlbnRVcmwgPSBgaHR0cHM6Ly9wa21lci5jbi9zaG93LyR7bWF0Y2hpbmdQa21lckRvYy51aWR9YDtcbiAgICAgICAgICAgICAgICAgICAgdGhlbWUudGFncyA9IG1hdGNoaW5nUGttZXJEb2MudGFncztcbiAgICAgICAgICAgICAgICAgICAgdGhlbWUuY2hpbmVzZURlc2NyaXB0aW9uID0gbWF0Y2hpbmdQa21lckRvYy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhlbWUuYXV0aG9yQXZhdGFyID0gbWF0Y2hpbmdQa21lckRvYy5hdXRob3JBdmF0YXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgY29uc3QgdGhlbWVNYW5pZmVzdHMgPSBwcm9wcy5hcHAuY3VzdG9tQ3NzLnRoZW1lcztcblxuICAgICAgICAgICAgICAgIHRoZW1lLmlzSW5zdGFsbGVkID0gdGhlbWVNYW5pZmVzdHNbdGhlbWUubmFtZV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGVtZS5pc091dGRhdGVkID1cbiAgICAgICAgICAgICAgICAgICAgdGhlbWUuaXNJbnN0YWxsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhlbWVNYW5pZmVzdHNbdGhlbWUubmFtZV0udmVyc2lvbiAhPT0gdGhlbWUudmVyc2lvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQWxsUGx1Z2luTGlzdC52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzTG9hZGluZy52YWx1ZSA9IGZhbHNlO1xufTtcblxuLy8g55uR5ZCsIHByb3BzLmN1cnJlbnRUYWIg5Y+Y5YyWXG53YXRjaCgoKSA9PiBwcm9wcy5jdXJyZW50VGFiLCAobmV3VGFiKSA9PiB7XG4gICAgaWYgKG5ld1RhYikge1xuICAgICAgICBjdXJyZW50VGFiLnZhbHVlID0gbmV3VGFiO1xuICAgICAgICBcbiAgICAgICAgLy8g5Y+q5pyJ5Zyo5qCH562+5LuO5o+S5Lu25YiH5o2i5Yiw5Li76aKY5pe25omN6ZyA6KaB5Yqg6L295Li76aKY5pWw5o2uXG4gICAgICAgIGlmIChuZXdUYWIgPT09ICd0aGVtZScgJiYgQWxsUGx1Z2luTGlzdC52YWx1ZT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBsb2FkVGhlbWVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcblxuLy8g5re75Yqg5Yqg6L295Li76aKY5pWw5o2u55qE5Ye95pWwXG5hc3luYyBmdW5jdGlvbiBsb2FkVGhlbWVEYXRhKCkge1xuICAgIGlmIChjdXJyZW50VGFiLnZhbHVlICE9PSAndGhlbWUnKSByZXR1cm47XG4gICAgXG4gICAgaXNMb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICAvLyDojrflj5bkuLvpopjmlbDmja7nmoTpgLvovpFcbiAgICAgICAgYXdhaXQgbG9hZEFsbFRoZW1lcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBsb2FkaW5nIHRoZW1lIGRhdGE6XCIsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0xvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB9XG59XG5cbi8vIOW8leWFpeS4u+mimOS4i+i9veWkhOeQhuWZqFxuY29uc3QgdGhlbWVQcm9jZXNzb3IgPSBuZXcgVGhlbWVQcm9jZXNzb3IocHJvcHMuYXBwLCBwcm9wcy5zZXR0aW5ncylcblxuLy8g5re75Yqg5Li76aKY5qih5oCB5qGG5aSE55CG5Ye95pWwXG5jb25zdCBzZWxlY3RUaGVtZU5hbWUgPSByZWYoXCJcIik7XG5jb25zdCBzZWxlY3RUaGVtZVZlcnNpb24gPSByZWYoXCJcIik7XG5cbmNvbnN0IGhhbmRsZVNob3dUaGVtZU1vZGFsID0gKFxuICAgIGFjdGlvbjogXCJkb3dubG9hZFwiIHwgXCJ1cGRhdGVcIixcbiAgICB0aGVtZU5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmdcbikgPT4ge1xuICAgIHNob3dNb2RhbC52YWx1ZSA9IHRydWU7XG4gICAgc2VsZWN0VGhlbWVOYW1lLnZhbHVlID0gdGhlbWVOYW1lO1xuICAgIHNlbGVjdFRoZW1lVmVyc2lvbi52YWx1ZSA9IHZlcnNpb247XG4gICAgaWYgKGFjdGlvbiA9PT0gXCJkb3dubG9hZFwiKSB7XG4gICAgICAgIGlzRG93bmxvYWQudmFsdWUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlzRG93bmxvYWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG59O1xuXG4vLyDmt7vliqDkuIvovb3kuLvpopjmlrnms5VcbmNvbnN0IGhhbmRsZURvd25sb2FkVGhlbWUgPSBhc3luYyAoKSA9PiB7XG4gICAgc2hvd01vZGFsLnZhbHVlID0gZmFsc2U7XG4gICAgbmV3IE5vdGljZShcIuato+WcqOS4i+i9veS4u+mimO+8jOivt+eojeWQji4uLlwiLCAzMDAwKTtcbiAgICBcbiAgICBjb25zdCBkb3dubG9hZFN0YXR1cyA9IGF3YWl0IHRoZW1lUHJvY2Vzc29yLmRvd25sb2FkVGhlbWVUb1RoZW1lRm9sZGVyKFxuICAgICAgICBzZWxlY3RUaGVtZU5hbWUudmFsdWUsXG4gICAgICAgIHNlbGVjdFRoZW1lVmVyc2lvbi52YWx1ZVxuICAgICk7XG5cbiAgICBpZiAoIWRvd25sb2FkU3RhdHVzKSByZXR1cm47XG5cbiAgICAvLyDkvb/nlKjnsbvlnovmlq3oqIBcbiAgICAoQWxsUGx1Z2luTGlzdC52YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaCgodGhlbWUpID0+IHtcbiAgICAgICAgaWYgKHRoZW1lLm5hbWUgPT09IHNlbGVjdFRoZW1lTmFtZS52YWx1ZSkge1xuICAgICAgICAgICAgdGhlbWUuaXNJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4vLyDmt7vliqDmm7TmlrDkuLvpopjmlrnms5VcbmNvbnN0IGhhbmRsZVVwZGF0ZVRoZW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIHNob3dNb2RhbC52YWx1ZSA9IGZhbHNlO1xuICAgIG5ldyBOb3RpY2UoXCLmraPlnKjmm7TmlrDkuLvpopjvvIzor7fnqI3lkI4uLi5cIiwgMzAwMCk7XG4gICAgXG4gICAgY29uc3QgdXBkYXRlU3RhdHVzID0gYXdhaXQgdGhlbWVQcm9jZXNzb3IudXBkYXRlVGhlbWVUb0V4aXN0VGhlbWVGb2xkZXIoXG4gICAgICAgIHNlbGVjdFRoZW1lTmFtZS52YWx1ZSxcbiAgICAgICAgc2VsZWN0VGhlbWVWZXJzaW9uLnZhbHVlXG4gICAgKTtcblxuICAgIGlmICghdXBkYXRlU3RhdHVzKSByZXR1cm47XG5cbiAgICAvLyDkvb/nlKjnsbvlnovmlq3oqIBcbiAgICAoQWxsUGx1Z2luTGlzdC52YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaCgodGhlbWUpID0+IHtcbiAgICAgICAgaWYgKHRoZW1lLm5hbWUgPT09IHNlbGVjdFRoZW1lTmFtZS52YWx1ZSkge1xuICAgICAgICAgICAgdGhlbWUuaXNPdXRkYXRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5yZXR1cm4gKF9jdHg6IGFueSxfY2FjaGU6IGFueSkgPT4ge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhfRnJhZ21lbnQsIG51bGwsIFtcbiAgICBfY3JlYXRlVk5vZGUoSGVhZCwge1xuICAgICAgc2V0dGluZ3M6IHByb3BzLnNldHRpbmdzLFxuICAgICAgaXNMb2dpbjogaXNVc2VyTG9naW4udmFsdWUsXG4gICAgICBhcHA6IHByb3BzLmFwcFxuICAgIH0sIG51bGwsIDgsIFtcInNldHRpbmdzXCIsIFwiaXNMb2dpblwiLCBcImFwcFwiXSksXG4gICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcIm1haW5cIiwgX2hvaXN0ZWRfMSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yLCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMywgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfNCwgW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF81LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfNiwgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF9ub3JtYWxpemVDbGFzcyhbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBzb3J0QnkudmFsdWUgPT0gJ2Rvd25sb2FkQ291bnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFwiZmxleCBpdGVtcy1jZW50ZXIgcHgtMiBmb250LXNhbnMgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGdyb3VwIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbXV0ZWQtODAwIGRhcms6dGV4dC1tdXRlZC0xMDAgaG92ZXI6YmctbXV0ZWQtNTAgZGFyazpob3ZlcjpiZy1tdXRlZC03MDBcIl0pLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogXCLmjInkuIvovb3ph49cIixcbiAgICAgICAgICAgICAgICAgIGZsb3c6IFwiZG93blwiLFxuICAgICAgICAgICAgICAgICAgb25DbGljazogc29ydEJ5RG93bmxvYWRDb3VudFxuICAgICAgICAgICAgICAgIH0sIFsuLi4oX2NhY2hlWzldIHx8IChfY2FjaGVbOV0gPSBbXG4gICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcIml0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIGgtMTAgd2hpdGVzcGFjZS1wcmUtd3JhcCBmbGV4IHRleHQtbXV0ZWQtNDAwIGdyb3VwLWhvdmVyOnRleHQtcHJpbWFyeS01MDBcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1pY29uXCI6IFwic29sYXI6cm91bmQtc29ydC12ZXJ0aWNhbC1saW5lLWR1b3RvbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ3LTYgaC02IGljb25pZnkgaWNvbmlmeS0tc29sYXJcIlxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImNpcmNsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN4OiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN5OiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHI6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogXCIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWxpbmVqb2luXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNOS41IDh2OG0wIDBMNyAxMy4yNU05LjUgMTZsMi41LTIuNzVNMTQuNSAxNlY4bTAgMEwxMiAxMC43NU0xNC41IDhsMi41IDIuNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSwgLTEpXG4gICAgICAgICAgICAgICAgXSkpXSwgMilcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfNywgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF9ub3JtYWxpemVDbGFzcyhbeyBhY3RpdmU6IHNvcnRCeS52YWx1ZSA9PSAncGx1Z2luVXBkYXRlZFRpbWUnIH0sIFwiaXRlbXMtY2VudGVyIGZsZXgtMSBweC0yIGZvbnQtc2FucyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgZ3JvdXAgbWQ6ZmxleC1hdXRvIG1kOmZsZXggd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1tdXRlZC04MDAgZGFyazp0ZXh0LW11dGVkLTEwMCBob3ZlcjpiZy1tdXRlZC01MCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMFwiXSksXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBcIuaMieabtOaWsOaXtumXtFwiLFxuICAgICAgICAgICAgICAgICAgZmxvdzogXCJkb3duXCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzb3J0QnlVcGRhdGVUaW1lXG4gICAgICAgICAgICAgICAgfSwgWy4uLihfY2FjaGVbMTBdIHx8IChfY2FjaGVbMTBdID0gW1xuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBoLTEwIHdoaXRlc3BhY2UtcHJlLXdyYXAgZmxleCB0ZXh0LW11dGVkLTQwMCBncm91cC1ob3Zlcjp0ZXh0LXByaW1hcnktNTAwXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtaWNvblwiOiBcImljOnNoYXJwLXVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInctNiBoLTYgaWNvbmlmeSBpY29uaWZ5LS1pY1wiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMTEgOHY1bDQuMjUgMi41MmwuNzctMS4yOGwtMy41Mi0yLjA5VjhIMTF6bTEwIDJWM2wtMi42NCAyLjY0QTguOTM3IDguOTM3IDAgMCAwIDEyIDNhOSA5IDAgMSAwIDkgOWgtMmMwIDMuODYtMy4xNCA3LTcgN3MtNy0zLjE0LTctN3MzLjE0LTcgNy03YzEuOTMgMCAzLjY4Ljc5IDQuOTUgMi4wNUwxNCAxMGg3elwiXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF0sIC0xKVxuICAgICAgICAgICAgICAgIF0pKV0sIDIpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzgsIFtcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfbm9ybWFsaXplQ2xhc3MoW3sgYWN0aXZlOiBzb3J0QnkudmFsdWUgPT0gJ25hbWUnIH0sIFwiaXRlbXMtY2VudGVyIGZsZXgtMSBweC0yIGZvbnQtc2FucyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgZ3JvdXAgbWQ6ZmxleC1hdXRvIG1kOmZsZXggd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1tdXRlZC04MDAgZGFyazp0ZXh0LW11dGVkLTEwMCBob3ZlcjpiZy1tdXRlZC01MCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMFwiXSksXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBcIuaMieaWh+S7tuWQjeaOkuW6j1wiLFxuICAgICAgICAgICAgICAgICAgZmxvdzogXCJkb3duXCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzb3J0QnlGaWxlbmFtZVxuICAgICAgICAgICAgICAgIH0sIFsuLi4oX2NhY2hlWzExXSB8fCAoX2NhY2hlWzExXSA9IFtcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgaC0xMCB3aGl0ZXNwYWNlLXByZS13cmFwIGZsZXggdGV4dC1tdXRlZC00MDAgZ3JvdXAtaG92ZXI6dGV4dC1wcmltYXJ5LTUwMFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJtYXRlcmlhbC1zeW1ib2xzOnNvcnQtYnktYWxwaGFcIixcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ3LTYgaC02IGljb25pZnkgaWNvbmlmeS0tbWF0ZXJpYWwtc3ltYm9sc1wiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMiAxN0w1Ljc1IDdINy45bDMuNzUgMTBIOS42bC0uODUtMi40SDQuOUw0LjEgMTdIMlptMy41LTQuMWgyLjZMNi45IDkuMTVoLS4xNUw1LjUgMTIuOVptOC4yIDQuMXYtMS45bDUuMDUtNi4zSDEzLjlWN2g3LjA1djEuOWwtNSA2LjNIMjFWMTdoLTcuM1pNOSA1bDMtM2wzIDNIOVptMyAxN2wtMy0zaDZsLTMgM1pcIlxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICAgICAgICBdKSldLCAyKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF85LCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImFjdGl2ZSBpdGVtcy1jZW50ZXIgZmxleC0xIHB4LTIgZm9udC1zYW5zIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCBncm91cCBtZDpmbGV4LWF1dG8gbWQ6ZmxleCB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LW11dGVkLTgwMCBkYXJrOnRleHQtbXV0ZWQtMTAwIGhvdmVyOmJnLW11dGVkLTUwIGRhcms6aG92ZXI6YmctbXV0ZWQtNzAwXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogc29ydEJ5LnZhbHVlID09ICdwa21lckRvd25sb2FkQ291bnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKSxcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA6IFwi5oyJ5o+S5Lu254Ot5bqmXCIsXG4gICAgICAgICAgICAgICAgICBmbG93OiBcImRvd25cIixcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHNvcnRCeVBrbWVyRG93bmxvYWRDb3VudFxuICAgICAgICAgICAgICAgIH0sIFsuLi4oX2NhY2hlWzEyXSB8fCAoX2NhY2hlWzEyXSA9IFtcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgaC0xMCB3aGl0ZXNwYWNlLXByZS13cmFwIGZsZXggdGV4dC1tdXRlZC00MDAgZ3JvdXAtaG92ZXI6dGV4dC1wcmltYXJ5LTUwMFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJtYXRlcmlhbC1zeW1ib2xzOndoYXRzaG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiaWNvbmlmeSB3LTYgaC02IGljb25pZnktLW1hdGVyaWFsLXN5bWJvbHNcIlxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTEyIDIycS0yLjUgMC00LjU4OC0xLjFUMy45NSAxNy45NWw0LjEtNC4xbDMgMi41TDE2IDExLjRWMTRoMlY4aC02djJoMi42bC0zLjY1IDMuNjVsLTMtMi41TDIuOSAxNi4ycS0uNDI1LS45NS0uNjYyLTIuMDEzVDIgMTJxMC0yLjA3NS43ODgtMy45dDIuMTM3LTMuMTc1cTEuMzUtMS4zNSAzLjE3NS0yLjEzN1QxMiAycTIuMDc1IDAgMy45Ljc4OHQzLjE3NSAyLjEzN3ExLjM1IDEuMzUgMi4xMzggMy4xNzVUMjIgMTJxMCAyLjA3NS0uNzg4IDMuOXQtMi4xMzcgMy4xNzVxLTEuMzUgMS4zNS0zLjE3NSAyLjEzOFQxMiAyMlpcIlxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICAgICAgICBdKSldLCAyKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xMCwgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF9ub3JtYWxpemVDbGFzcyhbeyBhY3RpdmU6IHNvcnRCeS52YWx1ZSA9PSAnaW5zdGFsbGVkJyB9LCBcIml0ZW1zLWNlbnRlciBmbGV4LTEgcHgtMiBmb250LXNhbnMgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGdyb3VwIG1kOmZsZXgtYXV0byBtZDpmbGV4IHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbXV0ZWQtODAwIGRhcms6dGV4dC1tdXRlZC0xMDAgaG92ZXI6YmctbXV0ZWQtNTAgZGFyazpob3ZlcjpiZy1tdXRlZC03MDBcIl0pLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogXCLnrZvpgInlt7Llronoo4Xmj5Lku7ZcIixcbiAgICAgICAgICAgICAgICAgIGZsb3c6IFwiZG93blwiLFxuICAgICAgICAgICAgICAgICAgb25DbGljazogc29ydEJ5SW5zdGFsbGVkXG4gICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgX2NhY2hlWzEzXSB8fCAoX2NhY2hlWzEzXSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgaC0xMCB3aGl0ZXNwYWNlLXByZS13cmFwIGZsZXggdGV4dC1tdXRlZC00MDAgZ3JvdXAtaG92ZXI6dGV4dC1wcmltYXJ5LTUwMFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJtYXRlcmlhbC1zeW1ib2xzOnNvcnQtYnktYWxwaGFcIixcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ3LTUgaC01IGljb25pZnkgaWNvbmlmeS0tbWF0ZXJpYWwtc3ltYm9sc1wiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNNC41IDExYTguNSA4LjUgMCAxIDEgOC4xODggOC40OTRhNi40NyA2LjQ3IDAgMCAxLS42OCAxLjQ1N2MuMzI3LjAzMy42NTguMDQ5Ljk5Mi4wNDljNS41MjMgMCAxMC00LjQ3NyAxMC0xMFMxOC41MjMgMSAxMyAxUzMgNS40NzcgMyAxMWMwIC4zMzQuMDE2LjY2NS4wNDguOTkxYTYuNTEgNi41MSAwIDAgMSAxLjQ1OC0uNjhBOC42NSA4LjY1IDAgMCAxIDQuNSAxMVptOC40OTMtNS4zNTJhLjc1Ljc1IDAgMCAwLTEuNDkzLjEwMnY2bC4wMDcuMTAyYS43NS43NSAwIDAgMCAuNzQzLjY0OGg0bC4xMDItLjAwN0EuNzUuNzUgMCAwIDAgMTYuMjUgMTFIMTNWNS43NWwtLjAwNy0uMTAyWk0xIDE3LjVhNS41IDUuNSAwIDAgMSA1LTUuNDc3djUuNzdsLTEuNjQ2LTEuNjQ3YS41LjUgMCAwIDAtLjcwOC43MDhsMi41IDIuNWEuNS41IDAgMCAwIC43MDggMGwyLjUtMi41YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcgMTcuNzkzdi01Ljc3QTUuNSA1LjUgMCAxIDEgMSAxNy41Wm04LjUgM0EuNS41IDAgMCAwIDkgMjBINGEuNS41IDAgMCAwIDAgMWg1YS41LjUgMCAwIDAgLjUtLjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSwgLTEpKSxcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIF9ob2lzdGVkXzExLCBfdG9EaXNwbGF5U3RyaW5nKGNvdW50SW5zdGFsbGVkUGx1Z2lucy52YWx1ZSksIDEpXG4gICAgICAgICAgICAgICAgXSwgMilcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcIndpZGdldC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRldmljZU9wdGlvbi52YWx1ZSA9PSAnbW9iaWxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAn5pSv5oyB56e75Yqo56uv55qE5o+S5Lu2J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaWx0ZXJEZXZpY2VPcHRpb24udmFsdWUgPT0gJ2Rlc2t0b3AnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICfku4XmlK/mjIHmoYzpnaLnq6/nmoTmj5Lku7YnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICfmiYDmnInnu4jnq68nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNlbGVjdFwiLCB7XG4gICAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogX2NhY2hlWzBdIHx8IChfY2FjaGVbMF0gPSAoJGV2ZW50OiBhbnkpID0+ICgoZmlsdGVyRGV2aWNlT3B0aW9uKS52YWx1ZSA9ICRldmVudCkpLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiYmxvY2sgYm9yZGVyIHB4LTIgdy0xOCB0ZXh0LW11dGVkLTgwMCBkYXJrOnRleHQtbXV0ZWQtMTAwIGJnLXdoaXRlIGRhcms6YmctbXV0ZWQtODAwIHJvdW5kZWQtbWQgc2hhZG93LXNtIGZvY3VzOm91dGxpbmUtbm9uZVwiXG4gICAgICAgICAgICAgICAgfSwgWy4uLihfY2FjaGVbMTRdIHx8IChfY2FjaGVbMTRdID0gW1xuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcIm9wdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInRleHQtbXV0ZWQtODAwIGRhcms6dGV4dC1tdXRlZC0xMDAgYmctd2hpdGUgZGFyazpiZy1tdXRlZC04MDBcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICB9LCBcIiDpu5jorqQgXCIsIC0xKSxcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJvcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ0ZXh0LW11dGVkLTgwMCBkYXJrOnRleHQtbXV0ZWQtMTAwIGJnLXdoaXRlIGRhcms6YmctbXV0ZWQtODAwXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICB9LCBcIiDnp7vliqjnq68gXCIsIC0xKSxcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJvcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ0ZXh0LW11dGVkLTgwMCBkYXJrOnRleHQtbXV0ZWQtMTAwIGJnLXdoaXRlIGRhcms6YmctbXV0ZWQtODAwXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImRlc2t0b3BcIlxuICAgICAgICAgICAgICAgICAgfSwgXCIg5LuF5qGM6Z2i56uvIFwiLCAtMSlcbiAgICAgICAgICAgICAgICBdKSldLCA1MTIpLCBbXG4gICAgICAgICAgICAgICAgICBbX3ZNb2RlbFNlbGVjdCwgZmlsdGVyRGV2aWNlT3B0aW9uLnZhbHVlXVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0sIDgsIF9ob2lzdGVkXzEyKSxcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xMywgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTQsIFtcbiAgICAgICAgICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidy1mdWxsIGgtOCBwbC0yIG1kOnBsLTE2IHByLTUgZm9udC1zYW5zIHRleHQtYmFzZSBsZWFkaW5nLTUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIHRleHQtbXV0ZWQtNjAwIGZvY3VzOmJvcmRlci1tdXRlZC0zMDAgZm9jdXM6c2hhZG93LWxnIGZvY3VzOnNoYWRvdy1tdXRlZC0zMDAvNTAgZGFyazpmb2N1czpzaGFkb3ctbXV0ZWQtODAwLzUwIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtMzAwIGRhcms6cGxhY2Vob2xkZXI6dGV4dC1tdXRlZC01MDAgZGFyazpiZy1tdXRlZC04MDAgZGFyazp0ZXh0LW11dGVkLTIwMCBkYXJrOmJvcmRlci1tdXRlZC03MDAgZGFyazpmb2N1czpib3JkZXItbXV0ZWQtNjAwIHR3LWFjY2Vzc2liaWxpdHlcIixcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiU2VhcmNoIHBsdWdpbnMuLi5cIixcbiAgICAgICAgICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVsxXSB8fCAoX2NhY2hlWzFdID0gKCRldmVudDogYW55KSA9PiAoKHNlYXJjaFRleHRSZWYpLnZhbHVlID0gJGV2ZW50KSlcbiAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDUxMiksIFtcbiAgICAgICAgICAgICAgICAgICAgW192TW9kZWxUZXh0LCBzZWFyY2hUZXh0UmVmLnZhbHVlXVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfY2FjaGVbMTVdIHx8IChfY2FjaGVbMTVdID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImFic29sdXRlIHRvcC0wIGxlZnQtMCBoaWRkZW4gbWQ6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xNiBoLTggdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIHRleHQtbXV0ZWQtNDAwIGdyb3VwLWZvY3VzLXdpdGhpbjp0ZXh0LXByaW1hcnktNTAwXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtaWNvblwiOiBcImx1Y2lkZTpzZWFyY2hcIixcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ3LTQgaC00IGljb25pZnkgaWNvbmlmeS0tbHVjaWRlXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjJcIlxuICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJjaXJjbGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjeDogXCIxMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjeTogXCIxMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByOiBcIjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7IGQ6IFwibTIxIDIxbC00LjMtNC4zXCIgfSlcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSwgLTEpKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTUsIFtcbiAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgIG9uQ2xpY2s6IHNvcnRCeVVwZGF0ZWQsXG4gICAgICAgICAgY2xhc3M6IFwiaW5saW5lLWJsb2NrIHctZnVsbCBmb250LXNhbnMgdGV4dC14cyBweC0zIG0tMSByb3VuZGVkLWxnIGJnLWdyZWVuLTYwMCB0ZXh0LXdoaXRlIHNoYWRvdy14bCBzaGFkb3ctcHJpbWFyeS01MDAvMjBcIlxuICAgICAgICB9LCBbXG4gICAgICAgICAgX2NyZWF0ZVRleHRWTm9kZShcIiDlj5HnjrAgXCIgKyBfdG9EaXNwbGF5U3RyaW5nKGNvdW50VXBkYXRlZFBsdWdpbnMudmFsdWUpICsgXCIg5Liq5o+S5Lu25pu05paw77yB44CQ54K55oiR5p+l55yL44CRIFwiLCAxKSxcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IF93aXRoTW9kaWZpZXJzKGNsb3NlTm90aWZpY2F0aW9uLCBbXCJzdG9wXCJdKSxcbiAgICAgICAgICAgIGNsYXNzOiBcIm1sLTIgcHgtMyBzaGFkb3ctbm9uZVwiXG4gICAgICAgICAgfSwgWy4uLihfY2FjaGVbMTZdIHx8IChfY2FjaGVbMTZdID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCJcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICBkOiBcIk0xNiAyQzguMiAyIDIgOC4yIDIgMTZzNi4yIDE0IDE0IDE0czE0LTYuMiAxNC0xNFMyMy44IDIgMTYgMm01LjQgMjFMMTYgMTcuNkwxMC42IDIzTDkgMjEuNGw1LjQtNS40TDkgMTAuNkwxMC42IDlsNS40IDUuNEwyMS40IDlsMS42IDEuNmwtNS40IDUuNGw1LjQgNS40elwiXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICBdKSldKVxuICAgICAgICBdLCA1MTIpLCBbXG4gICAgICAgICAgW192U2hvdywgY291bnRVcGRhdGVkUGx1Z2lucy52YWx1ZSAmJiAhaXNDbG9zZS52YWx1ZV1cbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNlY3Rpb25cIiwgX2hvaXN0ZWRfMTYsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xNywgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTgsIFtcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTksIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yMCwgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVWTm9kZShUb29sYmFyLCB7XG4gICAgICAgICAgICAgICAgICBcImFjdGl2ZS1jYXRlZ29yeVwiOiBhY3RpdmVDYXRlZ29yeS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHBsdWdpbkxpc3Q6IHZhbGlkUGx1Z2luTGlzdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHBsdWdpblRhZ3M6IHBsdWdpblRhZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgICBvblVwZGF0ZUFjdGl2ZUNhdGVnb3J5OiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVwZGF0ZUFjdGl2ZUNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImFjdGl2ZS1jYXRlZ29yeVwiLCBcInBsdWdpbkxpc3RcIiwgXCJwbHVnaW5UYWdzXCIsIFwib25VcGRhdGVBY3RpdmVDYXRlZ29yeVwiXSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjEsIFtcbiAgICAgICAgICAgICAgICAoaXNMb2FkaW5nLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIF9ob2lzdGVkXzIyLCBbLi4uKF9jYWNoZVsxN10gfHwgKF9jYWNoZVsxN10gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcInctMTIgaC0xMiBib3JkZXItNCBib3JkZXItdC00IGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1zcGluIGRhcms6Ym9yZGVyLWdyYXktNzAwIGRhcms6Ym9yZGVyLXQtcHJpbWFyeS01MDBcIiB9LCBudWxsLCAtMSlcbiAgICAgICAgICAgICAgICAgICAgXSkpXSkpXG4gICAgICAgICAgICAgICAgICA6IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImdyaWQgZ2FwLTYgLW0tMyBwdGFibGV0OmdyaWQtY29scy0yIGx0YWJsZXQ6Z3JpZC1jb2xzLTMgbGc6Z3JpZC1jb2xzLTNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyFncmlkLWNvbHMtMSc6IHBrbWVyU2l6ZS52YWx1ZSA8PSA3NjggJiYgcGttZXJTaXplLnZhbHVlID4gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICchZ3JpZC1jb2xzLTInOiBwa21lclNpemUudmFsdWUgPiA3NjggJiYgcGttZXJTaXplLnZhbHVlIDwgMTAyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICchZ3JpZC1jb2xzLTMnOiBwa21lclNpemUudmFsdWUgPiAxMDI0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKVxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgKG5lZWRzTG9hZC52YWx1ZSAmJiAoIWRpc3BsYXllZFBsdWdpbnMudmFsdWUgfHwgZGlzcGxheWVkUGx1Z2lucy52YWx1ZS5sZW5ndGggPT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIF9ob2lzdGVkXzIzLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlWzE5XSB8fCAoX2NhY2hlWzE5XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJ0ZXh0LW11dGVkLTQwMCBkYXJrOnRleHQtbXV0ZWQtNTAwIG1iLTQgdGV4dC1jZW50ZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiNjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjY0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWpvaW5cIjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJsdWNpZGUgbHVjaWRlLXBhY2thZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7IGQ6IFwiTTEyIDJsMy4wOSA2LjI2TDIyIDkuMjdsLTUgNC44NyAxLjE4IDYuODhMMTIgMTcuNzdsLTYuMTggMy4yNUw3IDE0LjE0IDIgOS4yN2w2LjkxLTEuMDFMMTIgMnpcIiB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCAtMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZVsyMF0gfHwgKF9jYWNoZVsyMF0gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwicFwiLCB7IGNsYXNzOiBcInRleHQtbXV0ZWQtNjAwIGRhcms6dGV4dC1tdXRlZC0zMDAgbWItNCB0ZXh0LWNlbnRlclwiIH0sIFwi5o+S5Lu25biC5Zy65bCa5pyq5Yqg6L29XCIsIC0xKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBsb2FkQWxsUGx1Z2lucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBmb250LXNhbnMgZm9udC1zZW1pYm9sZCBiZy1wcmltYXJ5LTUwMCB0ZXh0LXdoaXRlIHJlbGF0aXZlIHB4LTYgcHktMyByb3VuZGVkLWxnIHR3LWFjY2Vzc2liaWxpdHkgaG92ZXI6YmctcHJpbWFyeS02MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVsxOF0gfHwgKF9jYWNoZVsxOF0gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlU3RhdGljVk5vZGUoXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgd2lkdGg9XFxcIjIwXFxcIiBoZWlnaHQ9XFxcIjIwXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2Utd2lkdGg9XFxcIjJcXFwiIHN0cm9rZS1saW5lY2FwPVxcXCJyb3VuZFxcXCIgc3Ryb2tlLWxpbmVqb2luPVxcXCJyb3VuZFxcXCIgY2xhc3M9XFxcImx1Y2lkZSBsdWNpZGUtcmVmcmVzaC1jd1xcXCI+PHBhdGggZD1cXFwiTTMgMTJhOSA5IDAgMCAxIDktOSA5Ljc1IDkuNzUgMCAwIDEgNi43NCAyLjc0TDIxIDhcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNMjEgM3Y1aC01XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTIxIDEyYTkgOSAwIDAgMS05IDkgOS43NSA5Ljc1IDAgMCAxLTYuNzQtMi43NEwzIDE2XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTMgMjF2LTVoNVxcXCI+PC9wYXRoPjwvc3ZnPjxzcGFuPueCueWHu+WKoOi9veaPkuS7tuWIl+ihqDwvc3Bhbj5cIiwgMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcIlwiLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAoX29wZW5CbG9jayh0cnVlKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhfRnJhZ21lbnQsIG51bGwsIF9yZW5kZXJMaXN0KGRpc3BsYXllZFBsdWdpbnMudmFsdWUsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY3VycmVudFRhYi52YWx1ZSA9PT0gJ3RoZW1lJyA/IGl0ZW0ubmFtZSA6IGl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYWIudmFsdWUgPT09ICdwbHVnaW4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKFBsdWdpbkNhcmQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IHByb3BzLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwbHVnaW4taW5mb1wiOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvZ2luOiBpc1VzZXJMb2dpbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZFVwZGF0ZVBsdWdpbjogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNob3dQbHVnaW5Nb2RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgOCwgW1wiYXBwXCIsIFwicGx1Z2luLWluZm9cIiwgXCJpc0xvZ2luXCIsIFwib25Eb3dubG9hZFVwZGF0ZVBsdWdpblwiXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3VycmVudFRhYi52YWx1ZSA9PT0gJ3RoZW1lJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKFRoZW1lQ2FyZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IHByb3BzLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRoZW1lLWluZm9cIjogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvZ2luOiBpc1VzZXJMb2dpbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRvd25sb2FkVXBkYXRlVGhlbWU6IGhhbmRsZVNob3dUaGVtZU1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImFwcFwiLCBcInRoZW1lLWluZm9cIiwgXCJpc0xvZ2luXCJdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcIlwiLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSkpXG4gICAgICAgICAgICAgICAgICAgICAgfSksIDEyOCkpXG4gICAgICAgICAgICAgICAgICAgIF0sIDIpKSxcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI0LCBbXG4gICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI1LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjYsIFtcbiAgICAgICAgICAgICAgICAgICAgICAoX3VucmVmKGN1cnJlbnRQYWdlKSA+IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBfY2FjaGVbMl0gfHwgKF9jYWNoZVsyXSA9ICgkZXZlbnQ6IGFueSkgPT4gKGhhbmRsZVBhZ2VDaGFuZ2UoX3VucmVmKGN1cnJlbnRQYWdlKSAtIDEpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwicHgtMyBweS0xIGJvcmRlciByb3VuZGVkIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctbXV0ZWQtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCIg5LiK5LiA6aG1IFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcIlwiLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCBfaG9pc3RlZF8yNywgXCIg56ysIFwiICsgX3RvRGlzcGxheVN0cmluZyhfdW5yZWYoY3VycmVudFBhZ2UpKSArIFwiIOmhtSAvIOWFsSBcIiArIF90b0Rpc3BsYXlTdHJpbmcoY29tcHV0ZWRUb3RhbFBhZ2VzLnZhbHVlKSArIFwiIOmhtSBcIiwgMSksXG4gICAgICAgICAgICAgICAgICAgICAgKF91bnJlZihjdXJyZW50UGFnZSkgPCBjb21wdXRlZFRvdGFsUGFnZXMudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBfY2FjaGVbM10gfHwgKF9jYWNoZVszXSA9ICgkZXZlbnQ6IGFueSkgPT4gKGhhbmRsZVBhZ2VDaGFuZ2UoX3VucmVmKGN1cnJlbnRQYWdlKSArIDEpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwicHgtMyBweS0xIGJvcmRlciByb3VuZGVkIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctbXV0ZWQtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCIg5LiL5LiA6aG1IFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcIlwiLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yOCwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBcIm1heC13LTN4bCBweC02IHB5LTQgbXgtYXV0byB0ZXh0LWxlZnQgYmctd2hpdGUgcm91bmRlZCBzaGFkb3ctbGcgZGFyazpiZy1tdXRlZC03MDBcIixcbiAgICAgICAgb25DbGljazogX2NhY2hlWzhdIHx8IChfY2FjaGVbOF0gPSAoJGV2ZW50OiBhbnkpID0+IChzaG93TW9kYWwudmFsdWUgPSBmYWxzZSkpLFxuICAgICAgICBcIngtdHJhbnNpdGlvbjplbnRlclwiOiBcIm1vdGlvbi1zYWZlOmVhc2Utb3V0IGR1cmF0aW9uLTMwMFwiLFxuICAgICAgICBcIngtdHJhbnNpdGlvbjplbnRlci1zdGFydFwiOiBcIm9wYWNpdHktMCBzY2FsZS05MFwiLFxuICAgICAgICBcIngtdHJhbnNpdGlvbjplbnRlci1lbmRcIjogXCJvcGFjaXR5LTEwMCBzY2FsZS0xMDBcIlxuICAgICAgfSwgW1xuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI5LCBbXG4gICAgICAgICAgX2NhY2hlWzIyXSB8fCAoX2NhY2hlWzIyXSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJoNVwiLCB7IGNsYXNzOiBcIm1yLTMgbWF4LXctbm9uZVwiIH0sIG51bGwsIC0xKSksXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgY2xhc3M6IFwiei01MCBjdXJzb3ItcG9pbnRlclwiLFxuICAgICAgICAgICAgb25DbGljazogX2NhY2hlWzRdIHx8IChfY2FjaGVbNF0gPSAoJGV2ZW50OiBhbnkpID0+IChzaG93TW9kYWwudmFsdWUgPSBmYWxzZSkpXG4gICAgICAgICAgfSwgWy4uLihfY2FjaGVbMjFdIHx8IChfY2FjaGVbMjFdID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIyNFwiLFxuICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIyXCIsXG4gICAgICAgICAgICAgICAgZDogXCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICBdKSldKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNlY3Rpb25cIiwge1xuICAgICAgICAgIGNsYXNzOiBcImJvZHktZm9udFwiLFxuICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVs3XSB8fCAoX2NhY2hlWzddID0gX3dpdGhNb2RpZmllcnMoKCkgPT4ge30sIFtcInN0b3BcIl0pKVxuICAgICAgICB9LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zMCwgW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImgzXCIsIF9ob2lzdGVkXzMxLCBbXG4gICAgICAgICAgICAgIF9jYWNoZVsyM10gfHwgKF9jYWNoZVsyM10gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICBcImRhdGEtaWNvblwiOiBcImxpbmUtbWQ6ZG93bmxvYWRpbmctbG9vcFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInctNiBoLTYgaWNvbmlmeSBpY29uaWZ5LS1saW5lLW1kXCJcbiAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJnXCIsIHtcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IFwiMiA0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiTTEyIDNDMTYuOTcwNiAzIDIxIDcuMDI5NDQgMjEgMTJDMjEgMTYuOTcwNiAxNi45NzA2IDIxIDEyIDIxXCJcbiAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImFuaW1hdGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IFwic3Ryb2tlLWRhc2hvZmZzZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICBkdXI6IFwiMC42c1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdENvdW50OiBcImluZGVmaW5pdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IFwiNjswXCJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1kYXNoYXJyYXlcIjogXCIzMFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1kYXNob2Zmc2V0XCI6IFwiMzBcIixcbiAgICAgICAgICAgICAgICAgICAgZDogXCJNMTIgMjFDNy4wMjk0NCAyMSAzIDE2Ljk3MDYgMyAxMkMzIDcuMDI5NDQgNy4wMjk0NCAzIDEyIDNcIlxuICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYW5pbWF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJmcmVlemVcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBcInN0cm9rZS1kYXNob2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgYmVnaW46IFwiMC4xc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGR1cjogXCIwLjNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBcIjMwOzBcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogXCIxMFwiLFxuICAgICAgICAgICAgICAgICAgICBkOiBcIk0xMiA4djcuNVwiXG4gICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJhbmltYXRlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImZyZWV6ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IFwic3Ryb2tlLWRhc2hvZmZzZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogXCIwLjVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZHVyOiBcIjAuMnNcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IFwiMTA7MFwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1kYXNob2Zmc2V0XCI6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBkOiBcIk0xMiAxNS41bDMuNSAtMy41TTEyIDE1LjVsLTMuNSAtMy41XCJcbiAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImFuaW1hdGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiZnJlZXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogXCJzdHJva2UtZGFzaG9mZnNldFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBcIjAuN3NcIixcbiAgICAgICAgICAgICAgICAgICAgICBkdXI6IFwiMC4yc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogXCI2OzBcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdLCAtMSkpLFxuICAgICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKFwiIOWNs+WwhuWuieijhS4uLi5cIiArIF90b0Rpc3BsYXlTdHJpbmcoc2VsZWN0UGx1Z2luLnZhbHVlLnRvVXBwZXJDYXNlKCkpLCAxKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIG51bGwsIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBcIiwgX2hvaXN0ZWRfMzIsIFtcbiAgICAgICAgICAgICAgICBfY2FjaGVbMjRdIHx8IChfY2FjaGVbMjRdID0gX2NyZWF0ZVRleHRWTm9kZShcIiDmj5Lku7bmnaXmupDvvJogXCIsIC0xKSksXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgX2hvaXN0ZWRfMzMsIF90b0Rpc3BsYXlTdHJpbmcoc2VsZWN0UGx1Z2luU2NvdXJjZS52YWx1ZSA9PT0gXCJvZmZpY2lhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIk9ic2lkaWFu5a6Y5pa55ZWG5Z+OXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwi56S+5Yy65LiT5L6bXCIpLCAxKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2NhY2hlWzI1XSB8fCAoX2NhY2hlWzI1XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwXCIsIHsgY2xhc3M6IFwibWItMiB0ZXh0LWJhc2UgbGVhZGluZy1yZWxheGVkXCIgfSwgXCIg5rOo5oSP77yM5a6J6KOF5ZKM5pu05paw5pON5L2c5LiN5Y+v6YCG77yM6K+356Gu6K6k5ZCO5YaN5pON5L2c44CCIFwiLCAtMSkpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMzQsIFtcbiAgICAgICAgICAgICAgX2NhY2hlWzI2XSB8fCAoX2NhY2hlWzI2XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJsYWJlbFwiLCB7XG4gICAgICAgICAgICAgICAgZm9yOiBcInZlcnNpb24tc2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBtci0yXCJcbiAgICAgICAgICAgICAgfSwgXCLpgInmi6nniYjmnKzlj7fvvIjpu5jorqTmnIDmlrDniYjmnKzvvInvvJpcIiwgLTEpKSxcbiAgICAgICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzZWxlY3RcIiwge1xuICAgICAgICAgICAgICAgIGlkOiBcInZlcnNpb24tc2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVs1XSB8fCAoX2NhY2hlWzVdID0gKCRldmVudDogYW55KSA9PiAoKHNlbGVjdFBsdWdpblZlcnNpb24pLnZhbHVlID0gJGV2ZW50KSksXG4gICAgICAgICAgICAgICAgb25DbGljazogX2NhY2hlWzZdIHx8IChfY2FjaGVbNl0gPSBfd2l0aE1vZGlmaWVycygoKSA9PiB7fSwgW1wic3RvcFwiXSkpLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcIm10LTEgYmxvY2sgdy1mdWxsIHB4LTMgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCBiZy13aGl0ZSBkYXJrOmJnLWdyYXktODAwIHJvdW5kZWQtbWQgc2hhZG93LXNtIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLWdyZWVuLTUwMCBmb2N1czpib3JkZXItZ3JlZW4tNTAwIHNtOnRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBcIlxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgKF9vcGVuQmxvY2sodHJ1ZSksIF9jcmVhdGVFbGVtZW50QmxvY2soX0ZyYWdtZW50LCBudWxsLCBfcmVuZGVyTGlzdChwbHVnaW5WZXJzaW9ucy52YWx1ZSwgKHZlcnNpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwib3B0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmVyc2lvblxuICAgICAgICAgICAgICAgICAgfSwgX3RvRGlzcGxheVN0cmluZyh2ZXJzaW9uKSArIFwiIFwiICsgX3RvRGlzcGxheVN0cmluZyh2ZXJzaW9uID09PSBvcmlnaW5WZXJzaW9uLnZhbHVlID8gJ++8iOacgOaWsOeJiOacrO+8iScgOiAnJyksIDksIF9ob2lzdGVkXzM1KSlcbiAgICAgICAgICAgICAgICB9KSwgMTI4KSlcbiAgICAgICAgICAgICAgXSwgNTEyKSwgW1xuICAgICAgICAgICAgICAgIFtfdk1vZGVsU2VsZWN0LCBzZWxlY3RQbHVnaW5WZXJzaW9uLnZhbHVlXVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzM2LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMzcsIFtcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzM4LCBbXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFRhYi52YWx1ZSA9PT0gJ3BsdWdpbicpXG4gICAgICAgICAgICAgICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhfRnJhZ21lbnQsIHsga2V5OiAwIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0Rvd25sb2FkLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBoYW5kbGVEb3dubG9hZFBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImJsb2NrIHB5LTQgbXktMSBmb250LXNhbnMgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtZ3JlZW4tNTAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBib3JkZXIgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBkYXJrOmhvdmVyOmJnLWdyZWVuLTMwMC8yMCBob3ZlcjpiZy1ncmVlbi0xMDAgYm9yZGVyLWdyZWVuLTcwMC8yNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCIg56GuIOiupCBcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZVVwZGF0ZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImJsb2NrIHB5LTQgbXktMSBmb250LXNhbnMgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtZ3JlZW4tNTAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBib3JkZXIgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBkYXJrOmhvdmVyOmJnLWdyZWVuLTMwMC8yMCBob3ZlcjpiZy1ncmVlbi0xMDAgYm9yZGVyLWdyZWVuLTcwMC8yNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCIg5pu0IOaWsCBcIikpXG4gICAgICAgICAgICAgICAgICAgICAgXSwgNjQpKVxuICAgICAgICAgICAgICAgICAgICA6IChjdXJyZW50VGFiLnZhbHVlID09PSAndGhlbWUnKVxuICAgICAgICAgICAgICAgICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhfRnJhZ21lbnQsIHsga2V5OiAxIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRG93bmxvYWQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiaDJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZURvd25sb2FkVGhlbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImJsb2NrIHB5LTQgbXktMSBmb250LXNhbnMgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtZ3JlZW4tNTAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBib3JkZXIgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBkYXJrOmhvdmVyOmJnLWdyZWVuLTMwMC8yMCBob3ZlcjpiZy1ncmVlbi0xMDAgYm9yZGVyLWdyZWVuLTcwMC8yNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBcIiDnoa4g6K6kIFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogaGFuZGxlVXBkYXRlVGhlbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImJsb2NrIHB5LTQgbXktMSBmb250LXNhbnMgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtZ3JlZW4tNTAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBib3JkZXIgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBkYXJrOmhvdmVyOmJnLWdyZWVuLTMwMC8yMCBob3ZlcjpiZy1ncmVlbi0xMDAgYm9yZGVyLWdyZWVuLTcwMC8yNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBcIiDmm7Qg5pawIFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sIDY0KSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJcIiwgdHJ1ZSlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImZsZXggbWQ6cC00IG1kOnctMS8yXCIgfSwgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJmbGV4LWdyb3dcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaDJcIiwge1xuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBjYW5jZWxNb2RhbCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiYmxvY2sgcHktNCBteS0xIGZvbnQtc2FucyB0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1jZW50ZXIgdGV4dC1ncmVlbi01MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGJvcmRlciByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIGRhcms6aG92ZXI6YmctZ3JlZW4tMzAwLzIwIGhvdmVyOmJnLWdyZWVuLTEwMCBib3JkZXItZ3JlZW4tNzAwLzI1XCJcbiAgICAgICAgICAgICAgICAgIH0sIFwiIOWPliDmtoggXCIpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICAgIF0pXG4gICAgXSwgNTEyKSwgW1xuICAgICAgW192U2hvdywgc2hvd01vZGFsLnZhbHVlXVxuICAgIF0pXG4gIF0sIDY0KSlcbn1cbn1cblxufSkiLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IG5vcm1hbGl6ZUNsYXNzIGFzIF9ub3JtYWxpemVDbGFzcywgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUsIHJlbmRlckxpc3QgYXMgX3JlbmRlckxpc3QsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrLCB0b0Rpc3BsYXlTdHJpbmcgYXMgX3RvRGlzcGxheVN0cmluZyB9IGZyb20gXCJ2dWVcIlxuXG5jb25zdCBfaG9pc3RlZF8xID0geyBjbGFzczogXCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtMiBmbGV4LXdyYXBcIiB9XG5jb25zdCBfaG9pc3RlZF8yID0gW1wib25DbGlja1wiXVxuXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7IFRoZW1lSW5mbyB9IGZyb20gJ0AvdHlwZXMvdGhlbWUnO1xuaW50ZXJmYWNlIFByb3BzIHtcblx0dGhlbWVMaXN0OiBUaGVtZUluZm9bXTtcblx0YWN0aXZlQ2F0ZWdvcnk6IHN0cmluZztcbn1cblxuXG5leHBvcnQgZGVmYXVsdCAvKkBfX1BVUkVfXyovX2RlZmluZUNvbXBvbmVudCh7XG4gIF9fbmFtZTogJ1RoZW1lVG9vbGJhcicsXG4gIHByb3BzOiB7XG4gICAgdGhlbWVMaXN0OiB7fSxcbiAgICBhY3RpdmVDYXRlZ29yeToge31cbiAgfSxcbiAgZW1pdHM6IFsndXBkYXRlLWFjdGl2ZS1jYXRlZ29yeSddLFxuICBzZXR1cChfX3Byb3BzOiBhbnkpIHtcblxuY29uc3QgcHJvcHMgPSBfX3Byb3BzO1xuXG5cblxubGV0IHRhZ3NBcnJheTogc3RyaW5nW10gPSBbXVxuY29uc3QgY2F0ZWdvcmllcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0aWYgKEFycmF5LmlzQXJyYXkocHJvcHMudGhlbWVMaXN0KSkge1xuXHRcdHByb3BzLnRoZW1lTGlzdC5mb3JFYWNoKChvYmopID0+IHtcblx0XHRcdGlmIChvYmoudGFncyAmJiB0eXBlb2Ygb2JqLnRhZ3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGxldCB0YWdzID0gb2JqLnRhZ3Muc3BsaXQoJywnKS5tYXAoKHRhZykgPT4gdGFnLnRyaW0oKSk7XG5cdFx0XHRcdHRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcgIT09ICcnKTsgLy8g6L+H5ruk5o6J56m65a2X56ym5LiyXG5cdFx0XHRcdGlmICh0YWdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0YWdzQXJyYXkucHVzaCh0YWdzWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0bGV0IGNhdGVBcnJheTogc3RyaW5nW10gPSBbXVxuXHRpZiAoQXJyYXkuaXNBcnJheShwcm9wcy50aGVtZUxpc3QpKSB7XG5cdFx0cHJvcHMudGhlbWVMaXN0LmZvckVhY2goKG9iaikgPT4ge1xuXHRcdFx0aWYgKG9iai5tb2RlcyAmJiB0eXBlb2Ygb2JqLm1vZGVzID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRsZXQgbW9kZXMgPSBvYmoubW9kZXMuc3BsaXQoJywnKS5tYXAoKG1vZGUpID0+IG1vZGUudHJpbSgpKTtcblx0XHRcdFx0bW9kZXMgPSBtb2Rlcy5maWx0ZXIoKG1vZGUpID0+IG1vZGUgIT09ICcnKTsgLy8g6L+H5ruk5o6J56m65a2X56ym5LiyXG5cdFx0XHRcdGlmIChtb2Rlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Y2F0ZUFycmF5LnB1c2gobW9kZXNbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHRhZ3NBcnJheS5jb25jYXQoY2F0ZUFycmF5KTtcbn0pO1xuXG5jb25zdCB1bmlxdWVDYXRlZ29yaWVzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGNhdGVnb3JpZXMudmFsdWUpKTtcbn0pO1xuXG5yZXR1cm4gKF9jdHg6IGFueSxfY2FjaGU6IGFueSkgPT4ge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImRpdlwiLCBfaG9pc3RlZF8xLCBbXG4gICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImgtNiBpbmxpbmUtZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcHktMiBweC00IGZvbnQtc2FucyB0ZXh0LXNtIHJvdW5kZWQtbGcgYmctbXV0ZWQtMjAwIGRhcms6YmctbXV0ZWQtODAwIHRleHQtbXV0ZWQtNTAwIGhvdmVyOmJnLW11dGVkLTMwMCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMCBkYXJrOmhvdmVyOnRleHQtbXV0ZWQtMjAwIGJvcmRlci0yIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCB0dy1hY2Nlc3NpYmlsaXR5XCIsIFxuXHRcdFx0XHRfX3Byb3BzLmFjdGl2ZUNhdGVnb3J5ID09PSAnYWxsJ1xuXHRcdFx0XHRcdD8gJ2JvcmRlci1wcmltYXJ5LTUwMCBiZy1tdXRlZC01MCBkYXJrOmJnLW11dGVkLTcwMCdcblx0XHRcdFx0XHQ6ICdib3JkZXItdHJhbnNwYXJlbnQgJ1xuXHRcdFx0XSksXG4gICAgICBvbkNsaWNrOiBfY2FjaGVbMF0gfHwgKF9jYWNoZVswXSA9ICgkZXZlbnQ6IGFueSkgPT4gKF9jdHguJGVtaXQoJ3VwZGF0ZS1hY3RpdmUtY2F0ZWdvcnknLCAnYWxsJykpKVxuICAgIH0sIFwiIEFsbCBcIiwgMiksXG4gICAgKF9vcGVuQmxvY2sodHJ1ZSksIF9jcmVhdGVFbGVtZW50QmxvY2soX0ZyYWdtZW50LCBudWxsLCBfcmVuZGVyTGlzdCh1bmlxdWVDYXRlZ29yaWVzLnZhbHVlLCAoY2F0ZWdvcnkpID0+IHtcbiAgICAgIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IFwicGx1Z2luLWl0ZW1cIixcbiAgICAgICAga2V5OiBjYXRlZ29yeVxuICAgICAgfSwgW1xuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImZsZXgtMSBpbmxpbmUtZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcHktMiBweC00IGZvbnQtc2FucyB0ZXh0LXNtIHJvdW5kZWQtbGcgYmctbXV0ZWQtMjAwIGRhcms6YmctbXV0ZWQtODAwIHRleHQtbXV0ZWQtNTAwIGhvdmVyOmJnLW11dGVkLTMwMCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMCBkYXJrOmhvdmVyOnRleHQtbXV0ZWQtMjAwIGJvcmRlci0yIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCB0dy1hY2Nlc3NpYmlsaXR5XCIsIFxuXHRcdFx0XHRcdF9fcHJvcHMuYWN0aXZlQ2F0ZWdvcnkgPT09IGNhdGVnb3J5XG5cdFx0XHRcdFx0XHQ/ICdib3JkZXItcHJpbWFyeS01MDAgYmctbXV0ZWQtNTAgZGFyazpiZy1tdXRlZC03MDAnXG5cdFx0XHRcdFx0XHQ6ICdib3JkZXItdHJhbnNwYXJlbnQnXG5cdFx0XHRcdF0pLFxuICAgICAgICAgIG9uQ2xpY2s6IFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdF9jdHguJGVtaXQoJ3VwZGF0ZS1hY3RpdmUtY2F0ZWdvcnknLCBjYXRlZ29yeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcbiAgICAgICAgfSwgX3RvRGlzcGxheVN0cmluZyhjYXRlZ29yeSksIDExLCBfaG9pc3RlZF8yKVxuICAgICAgXSkpXG4gICAgfSksIDEyOCkpXG4gIF0pKVxufVxufVxuXG59KSIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUgYXMgX2NyZWF0ZVZOb2RlLCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrLCBub3JtYWxpemVDbGFzcyBhcyBfbm9ybWFsaXplQ2xhc3MsIHRvRGlzcGxheVN0cmluZyBhcyBfdG9EaXNwbGF5U3RyaW5nLCB3aXRoTW9kaWZpZXJzIGFzIF93aXRoTW9kaWZpZXJzLCBjcmVhdGVUZXh0Vk5vZGUgYXMgX2NyZWF0ZVRleHRWTm9kZSwgdlNob3cgYXMgX3ZTaG93LCB3aXRoRGlyZWN0aXZlcyBhcyBfd2l0aERpcmVjdGl2ZXMsIGNyZWF0ZUNvbW1lbnRWTm9kZSBhcyBfY3JlYXRlQ29tbWVudFZOb2RlLCByZW5kZXJMaXN0IGFzIF9yZW5kZXJMaXN0LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQsIHZNb2RlbFNlbGVjdCBhcyBfdk1vZGVsU2VsZWN0LCBjcmVhdGVTdGF0aWNWTm9kZSBhcyBfY3JlYXRlU3RhdGljVk5vZGUgfSBmcm9tIFwidnVlXCJcblxuY29uc3QgX2hvaXN0ZWRfMSA9IHtcbiAgXCJkYXRhLXBhZ2VmaW5kLWJvZHlcIjogXCJcIixcbiAgY2xhc3M6IFwidy1mdWxsXCJcbn1cbmNvbnN0IF9ob2lzdGVkXzIgPSB7IGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwgcHgtMiBweS00IG14LWF1dG8gZm9udC1zYW5zIHNlYXJjaCBmaXJzdC1sZXR0ZXI6XCIgfVxuY29uc3QgX2hvaXN0ZWRfMyA9IHsgY2xhc3M6IFwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBmaXJzdC1sZXR0ZXI6bXgtYXV0b1wiIH1cbmNvbnN0IF9ob2lzdGVkXzQgPSB7IGNsYXNzOiBcInctZnVsbCBsZzptYXgtdy1bNjB2d10gbXgtYXV0byBweS0zIG1kOnB4LTZcIiB9XG5jb25zdCBfaG9pc3RlZF81ID0geyBjbGFzczogXCJmbGV4LXdyYXAgcmVsYXRpdmUgdG9wLTAgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvIGRpdmlkZS14IHJvdW5kZWQgZGFyazpiZy1tdXRlZC04MDAgYm9yZGVyLW11dGVkLTIwMCBkYXJrOmJvcmRlci1tdXRlZC03MDAgZGl2aWRlLW11dGVkLTIwMCBkYXJrOmRpdmlkZS1tdXRlZC03MDAgZGFyazpzaGFkb3ctbXV0ZWQtOTAwLzMwIG1kOm92ZXJmbG93LXgtdmlzaWJsZVwiIH1cbmNvbnN0IF9ob2lzdGVkXzYgPSB7IGNsYXNzOiBcIndpZGdldC1pdGVtXCIgfVxuY29uc3QgX2hvaXN0ZWRfNyA9IHsgY2xhc3M6IFwid2lkZ2V0LWl0ZW1cIiB9XG5jb25zdCBfaG9pc3RlZF84ID0geyBjbGFzczogXCJ3aWRnZXQtaXRlbVwiIH1cbmNvbnN0IF9ob2lzdGVkXzkgPSB7IGNsYXNzOiBcIndpZGdldC1pdGVtXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTAgPSB7IGNsYXNzOiBcIndpZGdldC1pdGVtXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTEgPSB7IGNsYXNzOiBcIm51bVwiIH1cbmNvbnN0IF9ob2lzdGVkXzEyID0geyBjbGFzczogXCJyZWxhdGl2ZSB3LWZ1bGxcIiB9XG5jb25zdCBfaG9pc3RlZF8xMyA9IHsgY2xhc3M6IFwicmVsYXRpdmUgZ3JvdXBcIiB9XG5jb25zdCBfaG9pc3RlZF8xNCA9IFtcInZhbHVlXCJdXG5jb25zdCBfaG9pc3RlZF8xNSA9IHsgY2xhc3M6IFwidGV4dC1yaWdodFwiIH1cbmNvbnN0IF9ob2lzdGVkXzE2ID0geyBjbGFzczogXCJ3LWZ1bGwgYmctbXV0ZWQtMTAwIGRhcms6YmctbXV0ZWQtMTAwMFwiIH1cbmNvbnN0IF9ob2lzdGVkXzE3ID0geyBjbGFzczogXCJ3LWZ1bGwgbWF4LXctN3hsIG14LWF1dG9cIiB9XG5jb25zdCBfaG9pc3RlZF8xOCA9IHsgY2xhc3M6IFwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiIH1cbmNvbnN0IF9ob2lzdGVkXzE5ID0geyBjbGFzczogXCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIG1kOnB4LTYgcGItMTYgcHQtNFwiIH1cbmNvbnN0IF9ob2lzdGVkXzIwID0geyBjbGFzczogXCJ3LWZ1bGwgbWF4LXctWzkwdnddIG14LWF1dG8gc3BhY2UteS00IHRleHQtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjEgPSB7IGNsYXNzOiBcImZsZXggZmxleC1jb2wgZ2FwLTEyIHB5LTEyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjIgPSB7XG4gIGtleTogMCxcbiAgY2xhc3M6IFwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMTJcIlxufVxuY29uc3QgX2hvaXN0ZWRfMjMgPSB7IGNsYXNzOiBcInctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgLW0tM1wiIH1cbmNvbnN0IF9ob2lzdGVkXzI0ID0geyBjbGFzczogXCJ3LWZ1bGwgbWF4LXctWzIxMHB4XSBwdC0xNlwiIH1cbmNvbnN0IF9ob2lzdGVkXzI1ID0geyBjbGFzczogXCJmaXhlZCBpbnNldC0wIHotMzAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctYXV0byBiZy1ibGFjayBiZy1vcGFjaXR5LTUwXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjYgPSB7IGNsYXNzOiBcImJvZHktZm9udFwiIH1cbmNvbnN0IF9ob2lzdGVkXzI3ID0geyBjbGFzczogXCJjb250YWluZXIgbWQ6cHgtNSBweS00IG14LWF1dG9cIiB9XG5jb25zdCBfaG9pc3RlZF8yOCA9IHsgY2xhc3M6IFwidGV4dC0yeGwgZm9udC1tZWRpdW0gdGl0bGUtZm9udCB0ZXh0LWNlbnRlciBtYi02XCIgfVxuY29uc3QgX2hvaXN0ZWRfMjkgPSB7IGNsYXNzOiBcIm1iLTRcIiB9XG5jb25zdCBfaG9pc3RlZF8zMCA9IFtcInZhbHVlXCJdXG5jb25zdCBfaG9pc3RlZF8zMSA9IHsgY2xhc3M6IFwiYmxvY2sgbWQ6ZmxleCBmbGV4LXdyYXAgc206LW0tNCAtbXgtNCBtZDotbWItMTAgbWQ6LW10LTQgbWQ6c3BhY2UteS0wXCIgfVxuY29uc3QgX2hvaXN0ZWRfMzIgPSB7IGNsYXNzOiBcIm1kOnAtNCBtZDp3LTEvMiBmbGV4XCIgfVxuY29uc3QgX2hvaXN0ZWRfMzMgPSB7IGNsYXNzOiBcImZsZXgtZ3Jvd1wiIH1cblxuaW1wb3J0IHsgcmVmLCBvbk1vdW50ZWQsIG9uVW5tb3VudGVkLCBjb21wdXRlZCB9IGZyb20gXCJ2dWVcIlxuaW1wb3J0IFRoZW1lQ2FyZCBmcm9tIFwiLi9UaGVtZUNhcmQudnVlXCJcbmltcG9ydCBUaGVtZVRvb2xiYXIgZnJvbSBcIi4vVGhlbWVUb29sYmFyLnZ1ZVwiXG5pbXBvcnQgeyBQa21lckFwaSB9IGZyb20gXCJAL2FwaS9hcGlcIlxuaW1wb3J0IHsgUGttZXJTZXR0aW5ncyB9IGZyb20gXCJAL21haW5cIlxuaW1wb3J0IEhlYWQgZnJvbSBcIkAvY29tcG9uZW50cy9jb21tb24vSGVhZC52dWVcIlxuaW1wb3J0IHR5cGUgeyBUaGVtZUluZm8gfSBmcm9tIFwiQC90eXBlcy90aGVtZVwiXG5pbXBvcnQgVGhlbWVQcm9jZXNzb3IgZnJvbSBcIkAvdXRpbHMvdGRvd25sb2FkZXJcIlxuaW1wb3J0IHsgQXBwLCBOb3RpY2UsIGRlYm91bmNlIH0gZnJvbSBcIm9ic2lkaWFuXCJcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICBzZXR0aW5nczogUGttZXJTZXR0aW5nc1xuICAgIGFwcDogQXBwXG4gICAgdGFiOiBzdHJpbmdcbn1cblxuXG5leHBvcnQgZGVmYXVsdCAvKkBfX1BVUkVfXyovX2RlZmluZUNvbXBvbmVudCh7XG4gIF9fbmFtZTogJ1RoZW1lTWFya2V0JyxcbiAgcHJvcHM6IHtcbiAgICBzZXR0aW5nczoge30sXG4gICAgYXBwOiB7fSxcbiAgICB0YWI6IHt9XG4gIH0sXG4gIHNldHVwKF9fcHJvcHM6IGFueSkge1xuXG5jb25zdCBwcm9wcyA9IF9fcHJvcHNcbmNvbnN0IHRoZW1lVmVyc2lvbnMgPSByZWY8c3RyaW5nW10+KFtdKTsgLy8g54mI5pys5Y+35YiX6KGoXG5jb25zdCBvcmlnaW5WZXJzaW9uID0gcmVmKCcnKTtcbmNvbnN0IHNvcnRCeSA9IHJlZihcIlwiKVxuY29uc3Qgc2hvd01vZGFsID0gcmVmKGZhbHNlKVxuY29uc3QgQWxsVGhlbWVMaXN0ID0gcmVmPFRoZW1lSW5mb1tdPihbXSlcbmxldCBwZXJQYWdlQ291bnQgPSByZWYoMjQpXG5sZXQgY3VycmVudFBhZ2UgPSByZWYoMSlcbmNvbnN0IGlzQ2xvc2UgPSByZWYoZmFsc2UpXG5jb25zdCBpc0Rvd25sb2FkID0gcmVmKHRydWUpXG5jb25zdCBhcGkgPSBuZXcgUGttZXJBcGkocHJvcHMuc2V0dGluZ3MudG9rZW4pXG5jb25zdCB0aGVtZVByb2Nlc3NvciA9IG5ldyBUaGVtZVByb2Nlc3Nvcihwcm9wcy5hcHAsIHByb3BzLnNldHRpbmdzKVxuXG5jb25zdCBpc1VzZXJMb2dpbiA9IHJlZihmYWxzZSkgLy8g5pS55Li65ZON5bqU5byPXG5jb25zdCBuZWVkc0xvYWQgPSByZWYodHJ1ZSk7IC8vIOa3u+WKoOaHkuWKoOi9veagh+W/l1xuY29uc3QgY2xvc2VOb3RpZmljYXRpb24gPSAoKSA9PiB7XG4gICAgaXNDbG9zZS52YWx1ZSA9IHRydWVcbiAgICBzb3J0QnlEb3dubG9hZENvdW50KClcbn1cbi8vIOaHkuWKoOi9veaVsOaNrlxuY29uc3QgbG9hZERhdGFJZk5lZWRlZCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAobmVlZHNMb2FkLnZhbHVlKSB7XG4gICAgICAgIGF3YWl0IGxvYWRBbGxUaGVtZXMoKTtcbiAgICB9XG59O1xuXG4vLyDmiYvliqjliLfmlrDmlbDmja5cbmNvbnN0IGxvYWRBbGxUaGVtZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8g5qCH6K6w5bey5Yqg6L2977yM6YG/5YWN6YeN5aSN5Yqg6L29XG4gICAgbmVlZHNMb2FkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAvLyDkvb/nlKjotoXml7bpgb/lhY3nvZHnu5zljaHpob9cbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCfor7fmsYLotoXml7YnKSksIDEwMDAwKTtcbiAgICB9KTtcbiAgICBjb25zdCBwa21lckRvY3NQcm9taXNlID0gYXBpLmdldFBrbWVyRG9jcygpO1xuICAgIGNvbnN0IHBrbWVyRG9jcyA9IGF3YWl0IFByb21pc2UucmFjZShbcGttZXJEb2NzUHJvbWlzZSwgdGltZW91dFByb21pc2VdKSBhcyBBd2FpdGVkPFJldHVyblR5cGU8UGttZXJBcGlbJ2dldFBrbWVyRG9jcyddPj47XG5cbiAgICBpZiAoaXNVc2VyTG9naW4udmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEFsbFRoZW1lTGlzdC52YWx1ZSA9IGF3YWl0IGFwaS5nZXRUaGVtZUxpc3QoKVxuICAgICAgICAgICAgQWxsVGhlbWVMaXN0LnZhbHVlID0gQWxsVGhlbWVMaXN0LnZhbHVlLnNvcnQoXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+IGIuZG93bmxvYWRDb3VudCAtIGEuZG93bmxvYWRDb3VudFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoQWxsVGhlbWVMaXN0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIEFsbFRoZW1lTGlzdC52YWx1ZS5mb3JFYWNoKCh0aGVtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvL+aKiuS4u+mimOWQjeensOS4reeahOepuuagvOabv+aNouS4uuS4i+WIkue6v1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BrbWVyRG9jID0gcGttZXJEb2NzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG9jKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5zbHVnID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUubmFtZS5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdQa21lckRvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUuY29udGVudFVybCA9IGBodHRwczovL3BrbWVyLmNuL3Nob3cvJHttYXRjaGluZ1BrbWVyRG9jLnVpZH1gXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhlbWVNYW5pZmVzdHMgPSBwcm9wcy5hcHAuY3VzdG9tQ3NzLnRoZW1lc1xuXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lLmlzSW5zdGFsbGVkID0gdGhlbWVNYW5pZmVzdHNbdGhlbWUubmFtZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB0aGVtZS5pc091dGRhdGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lLmlzSW5zdGFsbGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVtZU1hbmlmZXN0c1t0aGVtZS5uYW1lXS52ZXJzaW9uICE9PSB0aGVtZS52ZXJzaW9uXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgQWxsVGhlbWVMaXN0LnZhbHVlID0gW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBsb2FkaW5nIHRoZW1lczpcIiwgZXJyb3IpXG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBBbGxUaGVtZUxpc3QudmFsdWUgPSBhd2FpdCBhcGkuZ2V0VG9wMjBUaGVtZXMoKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShBbGxUaGVtZUxpc3QudmFsdWUpKSB7XG4gICAgICAgICAgICBBbGxUaGVtZUxpc3QudmFsdWUuZm9yRWFjaCgodGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAvL+aKiuS4u+mimOWQjeensOS4reeahOepuuagvOabv+aNouS4uuS4i+WIkue6v1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nUGttZXJEb2MgPSBwa21lckRvY3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGRvYykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5zbHVnID09XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVtZS5uYW1lLnJlcGxhY2UoL1xccysvZywgXCItXCIpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdQa21lckRvYykge1xuICAgICAgICAgICAgICAgICAgICB0aGVtZS5jb250ZW50VXJsID0gYGh0dHBzOi8vcGttZXIuY24vc2hvdy8ke21hdGNoaW5nUGttZXJEb2MudWlkfWBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZU1hbmlmZXN0cyA9IHByb3BzLmFwcC5jdXN0b21Dc3MudGhlbWVzXG5cbiAgICAgICAgICAgICAgICB0aGVtZS5pc0luc3RhbGxlZCA9IHRoZW1lTWFuaWZlc3RzW3RoZW1lLm5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB0aGVtZS5pc091dGRhdGVkID1cbiAgICAgICAgICAgICAgICAgICAgdGhlbWUuaXNJbnN0YWxsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhlbWVNYW5pZmVzdHNbdGhlbWUubmFtZV0udmVyc2lvbiAhPT0gdGhlbWUudmVyc2lvblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEFsbFRoZW1lTGlzdC52YWx1ZSA9IFtdXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGNvdW50SW5zdGFsbGVkVGhlbWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8g5L2/55SoIGZpbHRlciDmlrnms5XnrZvpgIkgaXNJbnN0YWxsZWQg5Li6IHRydWUg55qE6K6w5b2VXG4gICAgaWYgKEFsbFRoZW1lTGlzdC52YWx1ZSkge1xuICAgICAgICBsZXQgaW5zdGFsbGVkVGhlbWUgPSBBbGxUaGVtZUxpc3QudmFsdWUuZmlsdGVyKFxuICAgICAgICAgICAgKHRoZW1lKSA9PiB0aGVtZS5pc0luc3RhbGxlZCA9PT0gdHJ1ZVxuICAgICAgICApXG5cbiAgICAgICAgLy8g57uf6K6h562b6YCJ5ZCO6K6w5b2V55qE5pWw6YePXG4gICAgICAgIGxldCBjb3VudCA9IGluc3RhbGxlZFRoZW1lLmxlbmd0aFxuICAgICAgICByZXR1cm4gY291bnRcbiAgICB9XG59KVxuY29uc3QgY291bnRVcGRhdGVkVGhlbWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8g5L2/55SoIGZpbHRlciDmlrnms5XnrZvpgIkgaXNJbnN0YWxsZWQg5Li6IHRydWUg55qE6K6w5b2VXG4gICAgaWYgKEFsbFRoZW1lTGlzdC52YWx1ZSkge1xuICAgICAgICBsZXQgdXBkYXRlZFRoZW1lID0gQWxsVGhlbWVMaXN0LnZhbHVlLmZpbHRlcihcbiAgICAgICAgICAgICh0aGVtZSkgPT4gdGhlbWUuaXNPdXRkYXRlZCA9PT0gdHJ1ZVxuICAgICAgICApXG5cbiAgICAgICAgLy8g57uf6K6h562b6YCJ5ZCO6K6w5b2V55qE5pWw6YePXG4gICAgICAgIGxldCBjb3VudCA9IHVwZGF0ZWRUaGVtZS5sZW5ndGhcbiAgICAgICAgcmV0dXJuIGNvdW50XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxufSlcbmNvbnN0IHNlYXJjaFRleHRSZWYgPSByZWYoXCJcIilcbmNvbnN0IGFjdGl2ZUNhdGVnb3J5ID0gcmVmKFwiYWxsXCIpXG5jb25zdCBzZWxlY3RUaGVtZSA9IHJlZihcIlwiKVxuY29uc3Qgc2VsZWN0VGhlbWVWZXJzaW9uID0gcmVmKFwiXCIpXG5jb25zdCBkb3dubG9hZENvdW50ID0gcmVmKDApXG5cbmNvbnN0IGhhbmRsZVNldFNlYXJjaFRleHQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgc2VhcmNoVGV4dFJlZi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgIH0sIDgwMCkoKVxufVxuXG5jb25zdCBjYW5jZWxNb2RhbCA9ICgpID0+IHtcbiAgICBzaG93TW9kYWwudmFsdWUgPSBmYWxzZVxufVxuXG5jb25zdCBoYW5kbGVVcGRhdGVBY3RpdmVDYXRlZ29yeSA9IGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgYWN0aXZlQ2F0ZWdvcnkudmFsdWUgPSB2YWx1ZVxuICAgIC8vIOehruS/neaVsOaNruW3suWKoOi9vVxuICAgIGF3YWl0IGxvYWREYXRhSWZOZWVkZWQoKTtcbn1cbmNvbnN0IGZldGNoVGhlbWVWZXJzaW9ucyA9IGFzeW5jICh0aGVtZU5hbWU6IHN0cmluZykgPT4ge1xuIFxuIHRyeSB7XG4gXG5cdCBjb25zdCB2ZXJzaW9ucyA9IGF3YWl0IGFwaS5nZXRUaGVtZVZlcnNpb25zKHRoZW1lTmFtZSk7XG5cdCB0aGVtZVZlcnNpb25zLnZhbHVlID0gdmVyc2lvbnM7XG4gIFxuICAgICBpZiAoIXNlbGVjdFRoZW1lVmVyc2lvbi52YWx1ZSB8fCAhdmVyc2lvbnMuaW5jbHVkZXMoc2VsZWN0VGhlbWVWZXJzaW9uLnZhbHVlKSkge1xuXHRcdFx0Ly8g5aaC5p6c5Li656m65oiW5LiN5Zyo5YiX6KGo5Lit77yM6buY6K6k6YCJ5oup56ys5LiA5Liq54mI5pys77yI5aaC5p6cIHZlcnNpb25zIOS4jeS4uuepuu+8iVxuXHRcdFx0aWYgKHZlcnNpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0c2VsZWN0VGhlbWVWZXJzaW9uLnZhbHVlID0gdmVyc2lvbnNbMF07XG5cdFx0XHR9XG5cdFx0fVxuIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggdmVyc2lvbnMgZm9yIHRoZW1lICR7dGhlbWVOYW1lfTpgLCBlcnJvcik7XG5cdHRoZW1lVmVyc2lvbnMudmFsdWUgPSBbXTtcbiB9XG59O1xuY29uc3QgaGFuZGxlU2hvd1RoZW1lTW9kYWwgPSAoXG4gICAgYWN0aW9uOiBcImRvd25sb2FkXCIgfCBcInVwZGF0ZVwiLFxuICAgIHRoZW1lTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZ1xuKSA9PiB7XG4gICAgc2hvd01vZGFsLnZhbHVlID0gdHJ1ZVxuICAgIHNlbGVjdFRoZW1lLnZhbHVlID0gdGhlbWVOYW1lXG4gICAgc2VsZWN0VGhlbWVWZXJzaW9uLnZhbHVlID0gdmVyc2lvblxuICAgIG9yaWdpblZlcnNpb24udmFsdWU9IHZlcnNpb25cbiAgICBpZiAoc2VsZWN0VGhlbWUudmFsdWUpIHtcblx0XHRcdGZldGNoVGhlbWVWZXJzaW9ucyhzZWxlY3RUaGVtZS52YWx1ZSk7XG5cdFx0fVxuICAgIGlmIChhY3Rpb24gPT09IFwiZG93bmxvYWRcIikge1xuICAgICAgICBpc0Rvd25sb2FkLnZhbHVlID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlzRG93bmxvYWQudmFsdWUgPSBmYWxzZVxuICAgIH1cbn1cblxuY29uc3QgaGFuZGxlVXBkYXRlVGhlbWUgPSBhc3luYyAoKSA9PiB7XG4gICAgc2hvd01vZGFsLnZhbHVlID0gZmFsc2VcbiAgICBuZXcgTm90aWNlKFwi5q2j5Zyo5pu05paw5Li76aKY77yM6K+356iN5ZCOLi4uXCIsIDMwMDApXG4gICAgY29uc3QgdXBkYXRlU3RhdHVzID0gYXdhaXQgdGhlbWVQcm9jZXNzb3IudXBkYXRlVGhlbWVUb0V4aXN0VGhlbWVGb2xkZXIoXG4gICAgICAgIHNlbGVjdFRoZW1lLnZhbHVlLFxuICAgICAgICBzZWxlY3RUaGVtZVZlcnNpb24udmFsdWVcbiAgICApXG4gICAgaWYgKCF1cGRhdGVTdGF0dXMpIHJldHVyblxuXG4gICAgQWxsVGhlbWVMaXN0LnZhbHVlID0gQWxsVGhlbWVMaXN0LnZhbHVlLm1hcCgodGhlbWU6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhlbWUubmFtZSA9PSBzZWxlY3RUaGVtZS52YWx1ZSkge1xuICAgICAgICAgICAgdGhlbWUuaXNPdXRkYXRlZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoZW1lXG4gICAgfSlcbn1cblxuY29uc3QgaGFuZGxlRG93bmxvYWRUaGVtZSA9IGFzeW5jICgpID0+IHtcbiAgICBzaG93TW9kYWwudmFsdWUgPSBmYWxzZVxuICAgIG5ldyBOb3RpY2UoXCLmraPlnKjkuIvovb3kuLvpopjvvIzor7fnqI3lkI4uLi5cIiwgMzAwMClcblxuICAgIGNvbnN0IGRvd25sb2FkU3RhdHVzID0gYXdhaXQgdGhlbWVQcm9jZXNzb3IuZG93bmxvYWRUaGVtZVRvVGhlbWVGb2xkZXIoXG4gICAgICAgIHNlbGVjdFRoZW1lLnZhbHVlLFxuICAgICAgICBzZWxlY3RUaGVtZVZlcnNpb24udmFsdWVcbiAgICApXG5cbiAgICBpZiAoIWRvd25sb2FkU3RhdHVzKSByZXR1cm5cblxuICAgIEFsbFRoZW1lTGlzdC52YWx1ZSA9IEFsbFRoZW1lTGlzdC52YWx1ZS5tYXAoKHRoZW1lOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoZW1lLm5hbWUgPT0gc2VsZWN0VGhlbWUudmFsdWUpIHtcbiAgICAgICAgICAgIHRoZW1lLmlzSW5zdGFsbGVkID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGVtZVxuICAgIH0pXG59XG5cbmNvbnN0IGhpZGVNb2RhbCA9ICgpID0+IHtcbiAgICBzaG93TW9kYWwudmFsdWUgPSBmYWxzZVxufVxuXG4vLyBjb25zb2xlLmxvZyhwcm9wcy5wbHVnaW5MaXN0KTtcbi8vIOS7jmxvY2F0aW9uLmhhc2jmj5Dlj5bliIbnsbvlkI3np7DlubbotYvlgLznu5lhY3RpdmVDYXRlZ29yeVxuY29uc3QgZXh0cmFjdENhdGVnb3J5RnJvbUhhc2ggPSAoKSA9PiB7XG4gICAgY29uc3QgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpIC8vIOiOt+WPluexu+S8vOS6juKAnHdpZGdldC93aWRnZXRNYXJrZXQj5YCS6K6h5pe24oCd55qE5a2X56ym5Liy77yM5Y675o6J5YmN6Z2i55qEI1xuICAgIGlmIChoYXNoKSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGhhc2gpXG4gICAgICAgIGFjdGl2ZUNhdGVnb3J5LnZhbHVlID0gY2F0ZWdvcnlcbiAgICB9XG59XG5jb25zdCBwa21lclNpemUgPSByZWYoKVxuXG5vbk1vdW50ZWQoYXN5bmMgKCkgPT4ge1xuICAgIGV4dHJhY3RDYXRlZ29yeUZyb21IYXNoKCkgLy8g5Yid5aeL5YyW5pe25o+Q5Y+W5YiG57G75ZCN56ewXG4gICAgc29ydEJ5LnZhbHVlID0gXCJwa21lckRvd25sb2FkQ291bnRcIlxuICAgIHNvcnRPcmRlci52YWx1ZSA9IFwiYXNjXCJcbiAgICAvLyBlbGUudmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIC8vICAgICAnLndvcmtzcGFjZS1sZWFmLWNvbnRlbnRbZGF0YS10eXBlPVwicGttZXItZG93bmxvYWRlclwiXSdcbiAgICAvLyApIGFzIEhUTUxFbGVtZW50XG4gICAgcHJvcHMuYXBwLndvcmtzcGFjZS5vbihcInJlc2l6ZVwiLCBoYW5kbGVXaW5kb3dSZXNpemUpXG4gICAgLy9AdHMtaWdub3JlXG4gICAgcGttZXJTaXplLnZhbHVlID0gcHJvcHMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmLnZpZXcubGVhZi53aWR0aFxuXG4gICAgLy8g5qOA5p+l55m75b2V54q25oCB77yI5LiN6Zi75aGe77yJXG4gICAgdHJ5IHtcbiAgICAgICAgaXNVc2VyTG9naW4udmFsdWUgPSBhd2FpdCBhcGkuaXNVc2VyTG9naW4oKTtcbiAgICAgICAgaWYgKGlzVXNlckxvZ2luLnZhbHVlKSB7XG4gICAgICAgICAgICBkb3dubG9hZENvdW50LnZhbHVlID0gYXdhaXQgYXBpLmdldERvd25sb2FkQ291bnQoKS5jYXRjaCgoKSA9PiAwKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybign5qOA5p+l55m75b2V54q25oCB5aSx6LSlOicsIGVycm9yKTtcbiAgICAgICAgaXNVc2VyTG9naW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGFiKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKHByb3BzLnRhYilcbiAgICAgICAgaWYgKHBhcnNlZERhdGEudHlwZSA9PSBcInR1cGRhdGVkXCIpIHtcbiAgICAgICAgICAgIC8vIOagh+iusOmcgOimgeWKoOi9veaVsOaNrlxuICAgICAgICAgICAgbmVlZHNMb2FkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkRGF0YS50eXBlID09IFwidHVwZGF0ZWRcIikge1xuICAgICAgICAgICAgbmVlZHNMb2FkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyDkuI3lho3oh6rliqjliqDovb3mlbDmja7vvIznrYnlvoXnlKjmiLfkuLvliqjop6blj5Fcbn0pXG5jb25zdCBoYW5kbGVXaW5kb3dSZXNpemUgPSAoKSA9PiB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgcGttZXJTaXplLnZhbHVlID0gcHJvcHMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmLnZpZXcubGVhZi53aWR0aFxufVxuXG5vblVubW91bnRlZCgoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGFuZGxlV2luZG93UmVzaXplKVxufSlcblxuY29uc3QgZmlsdGVyZWRMaXN0ID0gY29tcHV0ZWQ8VGhlbWVJbmZvW10+KCgpID0+IHtcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dFJlZi52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSAvLyDlsIbmkJzntKLlhbPplK7lrZfovazkuLrlsI/lhplcbiAgICBpZiAoc2VhcmNoVGV4dC5sZW5ndGggPCAxKSByZXR1cm4gQWxsVGhlbWVMaXN0LnZhbHVlXG4gICAgcmV0dXJuIEFsbFRoZW1lTGlzdC52YWx1ZS5maWx0ZXIoXG4gICAgICAgICh0aGVtZTogVGhlbWVJbmZvKSA9PlxuICAgICAgICAgICAgdGhlbWUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQpIHx8IC8vIOaPkuS7tuWQjeensOS4reWMheWQq+aQnOe0ouWFs+mUruWtl1xuICAgICAgICAgICAgdGhlbWUuYXV0aG9yLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dCkgfHwgLy8g5o+S5Lu25L2c6ICF5Lit5YyF5ZCr5pCc57Si5YWz6ZSu5a2XXG4gICAgICAgICAgICB0aGVtZS5jaGluZXNlRGVzY3JpcHRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dCkgfHwgLy8g5o+S5Lu25o+P6L+w5Lit5YyF5ZCr5pCc57Si5YWz6ZSu5a2XXG4gICAgICAgICAgICB0aGVtZS50YWdzPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQpXG4gICAgKSAvLyDmj5Lku7bmoIfnrb7kuK3ljIXlkKvmkJzntKLlhbPplK7lrZdcbn0pXG5cbmNvbnN0IHRvdGFsUGFnZUNvdW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBNYXRoLmNlaWwoZmlsdGVyZWRMaXN0LnZhbHVlPy5sZW5ndGggLyBwZXJQYWdlQ291bnQudmFsdWUpXG59KVxuXG5jb25zdCBzaG93UmVhZE1vcmVCdXR0b24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGN1cnJlbnRQYWdlLnZhbHVlIDwgdG90YWxQYWdlQ291bnQudmFsdWVcbn0pXG5cbi8v5piv5ZCm5pi+56S6XCJSZWFkIE1vcmVcIuaMiemSrlxuXG4vLyBjb25zdCBiZXN0VGhlbWUgPSBjb21wdXRlZCgoKSA9PiB7XG4vLyBcdGxldCBiZXN0TGlzdCA9IHByb3AucGx1Z2luTGlzdC5maWx0ZXIoXG4vLyBcdFx0KHBsdWdpbikgPT4gcGx1Z2luLnJhdGluZyA9PSA1XG4vLyBcdFx0Ly8gKHBsdWdpbi5yYXRpbmcgPT0gNSAmJiBwbHVnaW4uYXV0aG9yID09ICdDdW1hbicpIHx8XG4vLyBcdFx0Ly8gKHBsdWdpbi5yYXRpbmcgPT0gNSAmJiBwbHVnaW4uYXV0aG9yID09ICdCb25pbmFsbCcpXG4vLyBcdFx0Ly8g5o+S5Lu26K+E57qn562J5LqONVxuLy8gXHQpO1xuLy8gXHRsZXQgcmFuZG9tSW5kZXgxID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYmVzdExpc3QubGVuZ3RoKTtcbi8vIFx0bGV0IHJhbmRvbUluZGV4MiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJlc3RMaXN0Lmxlbmd0aCk7XG4vLyBcdHdoaWxlIChyYW5kb21JbmRleDIgPT09IHJhbmRvbUluZGV4MSkge1xuLy8gXHRcdHJhbmRvbUluZGV4MiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJlc3RMaXN0Lmxlbmd0aCk7XG4vLyBcdH1cblxuLy8gXHRyZXR1cm4gW2Jlc3RMaXN0W3JhbmRvbUluZGV4MV0sIGJlc3RMaXN0W3JhbmRvbUluZGV4Ml1dO1xuLy8gfSk7XG5cbmNvbnN0IHNvcnRPcmRlciA9IHJlZihcIlwiKSAvLyDmjpLluo/mk43kvZxcbmZ1bmN0aW9uIHNvcnRCeVBrbWVyRG93bmxvYWRDb3VudCgpIHtcbiAgICBzb3J0QnkudmFsdWUgPSBcInBrbWVyRG93bmxvYWRDb3VudFwiXG4gICAgc29ydE9yZGVyLnZhbHVlID0gc29ydE9yZGVyLnZhbHVlID09PSBcImFzY1wiID8gXCJkZXNjXCIgOiBcImFzY1wiXG59XG5mdW5jdGlvbiBzb3J0QnlEb3dubG9hZENvdW50KCkge1xuICAgIHNvcnRCeS52YWx1ZSA9IFwiZG93bmxvYWRDb3VudFwiXG4gICAgc29ydE9yZGVyLnZhbHVlID0gc29ydE9yZGVyLnZhbHVlID09PSBcImFzY1wiID8gXCJkZXNjXCIgOiBcImFzY1wiXG59XG4vLyDngrnlh7vmjInmm7TmlrDml7bpl7TmjpLluo/mjInpkq5cbmZ1bmN0aW9uIHNvcnRCeVVwZGF0ZVRpbWUoKSB7XG4gICAgc29ydEJ5LnZhbHVlID0gXCJ1cGRhdGVUaW1lXCJcbiAgICBzb3J0T3JkZXIudmFsdWUgPSBzb3J0T3JkZXIudmFsdWUgPT09IFwiYXNjXCIgPyBcImRlc2NcIiA6IFwiYXNjXCJcbn1cbmZ1bmN0aW9uIHNvcnRCeUZpbGVuYW1lKCkge1xuICAgIHNvcnRCeS52YWx1ZSA9IFwiZmlsZU5hbWVcIlxuICAgIHNvcnRPcmRlci52YWx1ZSA9IHNvcnRPcmRlci52YWx1ZSA9PT0gXCJhc2NcIiA/IFwiZGVzY1wiIDogXCJhc2NcIlxufVxuZnVuY3Rpb24gc29ydEJ5SW5zdGFsbGVkKCkge1xuICAgIHNvcnRCeS52YWx1ZSA9IFwiaW5zdGFsbGVkXCJcbiAgICBzb3J0T3JkZXIudmFsdWUgPSBzb3J0T3JkZXIudmFsdWUgPT09IFwiYXNjXCIgPyBcImRlc2NcIiA6IFwiYXNjXCJcbn1cbmZ1bmN0aW9uIHNvcnRCeVVwZGF0ZWQoKSB7XG4gICAgc29ydEJ5LnZhbHVlID0gXCJ1cGRhdGVkXCJcbiAgICBzb3J0T3JkZXIudmFsdWUgPSBzb3J0T3JkZXIudmFsdWUgPT09IFwiYXNjXCIgPyBcImRlc2NcIiA6IFwiYXNjXCJcbn1cbmNvbnN0IGRpc3BsYXllZFRoZW1lcyA9IGNvbXB1dGVkPFRoZW1lSW5mb1tdPigoKSA9PiB7XG4gICAgbGV0IFJlc3VsdFRoZW1lcyA9IFtdXG4gICAgaWYgKGFjdGl2ZUNhdGVnb3J5LnZhbHVlID09IFwiYWxsXCIpIHtcbiAgICAgICAgaWYgKHNvcnRCeS52YWx1ZSA9PT0gXCJkb3dubG9hZENvdW50XCIpIHtcbiAgICAgICAgICAgIGlmIChzb3J0T3JkZXIudmFsdWUgPT09IFwiYXNjXCIpIHtcbiAgICAgICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBmaWx0ZXJlZExpc3QudmFsdWUuc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IGEuZG93bmxvYWRDb3VudCAtIGIuZG93bmxvYWRDb3VudFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUmVzdWx0VGhlbWVzID0gZmlsdGVyZWRMaXN0LnZhbHVlLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiBiLmRvd25sb2FkQ291bnQgLSBhLmRvd25sb2FkQ291bnRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydEJ5LnZhbHVlID09PSBcInVwZGF0ZVRpbWVcIikge1xuICAgICAgICAgICAgaWYgKHNvcnRPcmRlci52YWx1ZSA9PT0gXCJhc2NcIikge1xuICAgICAgICAgICAgICAgIFJlc3VsdFRoZW1lcyA9IGZpbHRlcmVkTGlzdC52YWx1ZS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGEudXBkYXRlZFRpbWUpLmdldFRpbWUoKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLnVwZGF0ZWRUaW1lKS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlc3VsdFRoZW1lcyA9IGZpbHRlcmVkTGlzdC52YWx1ZS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGIudXBkYXRlZFRpbWUpLmdldFRpbWUoKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShhLnVwZGF0ZWRUaW1lKS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydEJ5LnZhbHVlID09PSBcImZpbGVOYW1lXCIpIHtcbiAgICAgICAgICAgIGlmIChzb3J0T3JkZXIudmFsdWUgPT09IFwiYXNjXCIpIHtcbiAgICAgICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBmaWx0ZXJlZExpc3QudmFsdWUuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUmVzdWx0VGhlbWVzID0gZmlsdGVyZWRMaXN0LnZhbHVlLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICAgIGIubmFtZS5sb2NhbGVDb21wYXJlKGEubmFtZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydEJ5LnZhbHVlID09PSBcInBrbWVyRG93bmxvYWRDb3VudFwiKSB7XG4gICAgICAgICAgICBpZiAoc29ydE9yZGVyLnZhbHVlID09PSBcImFzY1wiKSB7XG4gICAgICAgICAgICAgICAgUmVzdWx0VGhlbWVzID0gZmlsdGVyZWRMaXN0LnZhbHVlLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiBiLnBrbWVyRG93bmxvYWRDb3VudCAtIGEucGttZXJEb3dubG9hZENvdW50XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBmaWx0ZXJlZExpc3QudmFsdWUuc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IGEucGttZXJEb3dubG9hZENvdW50IC0gYi5wa21lckRvd25sb2FkQ291bnRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydEJ5LnZhbHVlID09PSBcImluc3RhbGxlZFwiKSB7XG4gICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBmaWx0ZXJlZExpc3QudmFsdWUuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh0aGVtZSkgPT4gdGhlbWUuaXNJbnN0YWxsZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0QnkudmFsdWUgPT09IFwidXBkYXRlZFwiKSB7XG4gICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBmaWx0ZXJlZExpc3QudmFsdWUuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh0aGVtZSkgPT4gdGhlbWUuaXNPdXRkYXRlZFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUmVzdWx0VGhlbWVzID0gZmlsdGVyZWRMaXN0LnZhbHVlPy5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlLnZhbHVlICogcGVyUGFnZUNvdW50LnZhbHVlXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBSZXN1bHRUaGVtZXMgPSBmaWx0ZXJlZExpc3QudmFsdWUuZmlsdGVyKFxuICAgICAgICAgICAgKHRoZW1lKSA9PlxuICAgICAgICAgICAgICAgIHRoZW1lLnRhZ3M/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYWN0aXZlQ2F0ZWdvcnkudmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgdGhlbWUubW9kZXM/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYWN0aXZlQ2F0ZWdvcnkudmFsdWUpXG4gICAgICAgICkgLy8g5o+S5Lu25qCH562+5Lit5YyF5ZCr5pCc57Si5YWz6ZSu5a2XXG5cbiAgICAgICAgaWYgKHNvcnRCeS52YWx1ZSA9PT0gXCJkb3dubG9hZENvdW50XCIpIHtcbiAgICAgICAgICAgIGlmIChzb3J0T3JkZXIudmFsdWUgPT09IFwiYXNjXCIpIHtcbiAgICAgICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBSZXN1bHRUaGVtZXMuc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IGEuZG93bmxvYWRDb3VudCAtIGIuZG93bmxvYWRDb3VudFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUmVzdWx0VGhlbWVzID0gUmVzdWx0VGhlbWVzLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiBiLmRvd25sb2FkQ291bnQgLSBhLmRvd25sb2FkQ291bnRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydEJ5LnZhbHVlID09PSBcInVwZGF0ZVRpbWVcIikge1xuICAgICAgICAgICAgaWYgKHNvcnRPcmRlci52YWx1ZSA9PT0gXCJhc2NcIikge1xuICAgICAgICAgICAgICAgIFJlc3VsdFRoZW1lcyA9IFJlc3VsdFRoZW1lcy5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGEudXBkYXRlZFRpbWUpLmdldFRpbWUoKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLnVwZGF0ZWRUaW1lKS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlc3VsdFRoZW1lcyA9IFJlc3VsdFRoZW1lcy5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGIudXBkYXRlZFRpbWUpLmdldFRpbWUoKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShhLnVwZGF0ZWRUaW1lKS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydEJ5LnZhbHVlID09PSBcImZpbGVOYW1lXCIpIHtcbiAgICAgICAgICAgIGlmIChzb3J0T3JkZXIudmFsdWUgPT09IFwiYXNjXCIpIHtcbiAgICAgICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBSZXN1bHRUaGVtZXMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUmVzdWx0VGhlbWVzID0gUmVzdWx0VGhlbWVzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICAgIGIubmFtZS5sb2NhbGVDb21wYXJlKGEubmFtZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydEJ5LnZhbHVlID09PSBcInBrbWVyRG93bmxvYWRDb3VudFwiKSB7XG4gICAgICAgICAgICBpZiAoc29ydE9yZGVyLnZhbHVlID09PSBcImFzY1wiKSB7XG4gICAgICAgICAgICAgICAgUmVzdWx0VGhlbWVzID0gUmVzdWx0VGhlbWVzLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhLnBrbWVyRG93bmxvYWRDb3VudCAtIGIucGttZXJEb3dubG9hZENvdW50XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZXN1bHRUaGVtZXMgPSBSZXN1bHRUaGVtZXMuc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IGIucGttZXJEb3dubG9hZENvdW50IC0gYS5wa21lckRvd25sb2FkQ291bnRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUmVzdWx0VGhlbWVzPy5zbGljZSgwLCBjdXJyZW50UGFnZS52YWx1ZSAqIHBlclBhZ2VDb3VudC52YWx1ZSlcbn0pXG5jb25zdCB2YWxpZFRoZW1lTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJlZExpc3QudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZExpc3QudmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW11cbiAgICB9XG59KVxuY29uc3QgcmVhZE1vcmUgPSAoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IGN1cnJlbnRQYWdlLnZhbHVlICogcGVyUGFnZUNvdW50LnZhbHVlXG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcGVyUGFnZUNvdW50LnZhbHVlXG4gICAgY29uc3QgdGhlbWVzVG9BZGQgPSBkaXNwbGF5ZWRUaGVtZXMudmFsdWU/LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxuICAgIGN1cnJlbnRQYWdlLnZhbHVlKytcbiAgICBBbGxUaGVtZUxpc3QudmFsdWUgPSBbLi4uQWxsVGhlbWVMaXN0LnZhbHVlLCAuLi50aGVtZXNUb0FkZF1cbn1cblxuLy8g5Yqg6L295pu05aSa5o+S5Lu2XG5cbi8vIGNvbnN0IHJlYWRNb3JlID0gYXN5bmMgKCkgPT4ge1xuLy8gXHRwYWdlLnZhbHVlKys7XG4vLyBcdGF3YWl0IGxvYWRUaGVtZXMoKTtcbi8vIH07XG5cbnJldHVybiAoX2N0eDogYW55LF9jYWNoZTogYW55KSA9PiB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKF9GcmFnbWVudCwgbnVsbCwgW1xuICAgIF9jcmVhdGVWTm9kZShIZWFkLCB7XG4gICAgICBzZXR0aW5nczogcHJvcHMuc2V0dGluZ3MsXG4gICAgICBpc0xvZ2luOiBpc1VzZXJMb2dpbi52YWx1ZSxcbiAgICAgIGFwcDogcHJvcHMuYXBwXG4gICAgfSwgbnVsbCwgOCwgW1wic2V0dGluZ3NcIiwgXCJpc0xvZ2luXCIsIFwiYXBwXCJdKSxcbiAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwibWFpblwiLCBfaG9pc3RlZF8xLCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zLCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF80LCBbXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzUsIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF82LCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHNvcnRCeS52YWx1ZSA9PSAnZG93bmxvYWRDb3VudCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJmbGV4IGl0ZW1zLWNlbnRlciBweC0yIGZvbnQtc2FucyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgZ3JvdXAgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1tdXRlZC04MDAgZGFyazp0ZXh0LW11dGVkLTEwMCBob3ZlcjpiZy1tdXRlZC01MCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMFwiXSksXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBcIuaMieS4i+i9vemHj1wiLFxuICAgICAgICAgICAgICAgICAgZmxvdzogXCJkb3duXCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzb3J0QnlEb3dubG9hZENvdW50XG4gICAgICAgICAgICAgICAgfSwgWy4uLihfY2FjaGVbMl0gfHwgKF9jYWNoZVsyXSA9IFtcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgaC0xMCB3aGl0ZXNwYWNlLXByZS13cmFwIGZsZXggdGV4dC1tdXRlZC00MDAgZ3JvdXAtaG92ZXI6dGV4dC1wcmltYXJ5LTUwMFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJzb2xhcjpyb3VuZC1zb3J0LXZlcnRpY2FsLWxpbmUtZHVvdG9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInctNiBoLTYgaWNvbmlmeSBpY29uaWZ5LS1zb2xhclwiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiY2lyY2xlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3g6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3k6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcjogXCIxMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiBcIi41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWpvaW5cIjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkOiBcIk05LjUgOHY4bTAgMEw3IDEzLjI1TTkuNSAxNmwyLjUtMi43NU0xNC41IDE2VjhtMCAwTDEyIDEwLjc1TTE0LjUgOGwyLjUgMi43NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICAgICAgICBdKSldLCAyKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF83LCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFt7IGFjdGl2ZTogc29ydEJ5LnZhbHVlID09ICd1cGRhdGVUaW1lJyB9LCBcIml0ZW1zLWNlbnRlciBmbGV4LTEgcHgtMiBmb250LXNhbnMgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGdyb3VwIG1kOmZsZXgtYXV0byBtZDpmbGV4IHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbXV0ZWQtODAwIGRhcms6dGV4dC1tdXRlZC0xMDAgaG92ZXI6YmctbXV0ZWQtNTAgZGFyazpob3ZlcjpiZy1tdXRlZC03MDBcIl0pLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogXCLmjInmm7TmlrDml7bpl7RcIixcbiAgICAgICAgICAgICAgICAgIGZsb3c6IFwiZG93blwiLFxuICAgICAgICAgICAgICAgICAgb25DbGljazogc29ydEJ5VXBkYXRlVGltZVxuICAgICAgICAgICAgICAgIH0sIFsuLi4oX2NhY2hlWzNdIHx8IChfY2FjaGVbM10gPSBbXG4gICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcIml0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIGgtMTAgd2hpdGVzcGFjZS1wcmUtd3JhcCBmbGV4IHRleHQtbXV0ZWQtNDAwIGdyb3VwLWhvdmVyOnRleHQtcHJpbWFyeS01MDBcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1pY29uXCI6IFwiaWM6c2hhcnAtdXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidy02IGgtNiBpY29uaWZ5IGljb25pZnktLWljXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiBcIk0xMSA4djVsNC4yNSAyLjUybC43Ny0xLjI4bC0zLjUyLTIuMDlWOEgxMXptMTAgMlYzbC0yLjY0IDIuNjRBOC45MzcgOC45MzcgMCAwIDAgMTIgM2E5IDkgMCAxIDAgOSA5aC0yYzAgMy44Ni0zLjE0IDctNyA3cy03LTMuMTQtNy03czMuMTQtNyA3LTdjMS45MyAwIDMuNjguNzkgNC45NSAyLjA1TDE0IDEwaDd6XCJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSwgLTEpXG4gICAgICAgICAgICAgICAgXSkpXSwgMilcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfOCwgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF9ub3JtYWxpemVDbGFzcyhbeyBhY3RpdmU6IHNvcnRCeS52YWx1ZSA9PSAnZmlsZU5hbWUnIH0sIFwiaXRlbXMtY2VudGVyIGZsZXgtMSBweC0yIGZvbnQtc2FucyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgZ3JvdXAgbWQ6ZmxleC1hdXRvIG1kOmZsZXggd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1tdXRlZC04MDAgZGFyazp0ZXh0LW11dGVkLTEwMCBob3ZlcjpiZy1tdXRlZC01MCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMFwiXSksXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBcIuaMieaWh+S7tuWQjeaOkuW6j1wiLFxuICAgICAgICAgICAgICAgICAgZmxvdzogXCJkb3duXCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzb3J0QnlGaWxlbmFtZVxuICAgICAgICAgICAgICAgIH0sIFsuLi4oX2NhY2hlWzRdIHx8IChfY2FjaGVbNF0gPSBbXG4gICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcIml0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIGgtMTAgd2hpdGVzcGFjZS1wcmUtd3JhcCBmbGV4IHRleHQtbXV0ZWQtNDAwIGdyb3VwLWhvdmVyOnRleHQtcHJpbWFyeS01MDBcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1pY29uXCI6IFwibWF0ZXJpYWwtc3ltYm9sczpzb3J0LWJ5LWFscGhhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidy02IGgtNiBpY29uaWZ5IGljb25pZnktLW1hdGVyaWFsLXN5bWJvbHNcIlxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTIgMTdMNS43NSA3SDcuOWwzLjc1IDEwSDkuNmwtLjg1LTIuNEg0LjlMNC4xIDE3SDJabTMuNS00LjFoMi42TDYuOSA5LjE1aC0uMTVMNS41IDEyLjlabTguMiA0LjF2LTEuOWw1LjA1LTYuM0gxMy45VjdoNy4wNXYxLjlsLTUgNi4zSDIxVjE3aC03LjNaTTkgNWwzLTNsMyAzSDlabTMgMTdsLTMtM2g2bC0zIDNaXCJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSwgLTEpXG4gICAgICAgICAgICAgICAgXSkpXSwgMilcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfOSwgW1xuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF9ub3JtYWxpemVDbGFzcyhbXCJhY3RpdmUgaXRlbXMtY2VudGVyIGZsZXgtMSBweC0yIGZvbnQtc2FucyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgZ3JvdXAgbWQ6ZmxleC1hdXRvIG1kOmZsZXggd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1tdXRlZC04MDAgZGFyazp0ZXh0LW11dGVkLTEwMCBob3ZlcjpiZy1tdXRlZC01MCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHNvcnRCeS52YWx1ZSA9PSAncGttZXJEb3dubG9hZENvdW50J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSksXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBcIuaMieS4u+mimOeDreW6plwiLFxuICAgICAgICAgICAgICAgICAgZmxvdzogXCJkb3duXCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzb3J0QnlQa21lckRvd25sb2FkQ291bnRcbiAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVs1XSB8fCAoX2NhY2hlWzVdID0gW1xuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBoLTEwIHdoaXRlc3BhY2UtcHJlLXdyYXAgZmxleCB0ZXh0LW11dGVkLTQwMCBncm91cC1ob3Zlcjp0ZXh0LXByaW1hcnktNTAwXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtaWNvblwiOiBcIm1hdGVyaWFsLXN5bWJvbHM6d2hhdHNob3RcIixcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJpY29uaWZ5IHctNiBoLTYgaWNvbmlmeS0tbWF0ZXJpYWwtc3ltYm9sc1wiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMTIgMjJxLTIuNSAwLTQuNTg4LTEuMVQzLjk1IDE3Ljk1bDQuMS00LjFsMyAyLjVMMTYgMTEuNFYxNGgyVjhoLTZ2MmgyLjZsLTMuNjUgMy42NWwtMy0yLjVMMi45IDE2LjJxLS40MjUtLjk1LS42NjItMi4wMTNUMiAxMnEwLTIuMDc1Ljc4OC0zLjl0Mi4xMzctMy4xNzVxMS4zNS0xLjM1IDMuMTc1LTIuMTM3VDEyIDJxMi4wNzUgMCAzLjkuNzg4dDMuMTc1IDIuMTM3cTEuMzUgMS4zNSAyLjEzOCAzLjE3NVQyMiAxMnEwIDIuMDc1LS43ODggMy45dC0yLjEzNyAzLjE3NXEtMS4zNSAxLjM1LTMuMTc1IDIuMTM4VDEyIDIyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF0sIC0xKVxuICAgICAgICAgICAgICAgIF0pKV0sIDIpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzEwLCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFt7IGFjdGl2ZTogc29ydEJ5LnZhbHVlID09ICdpbnN0YWxsZWQnIH0sIFwiaXRlbXMtY2VudGVyIGZsZXgtMSBweC0yIGZvbnQtc2FucyB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgZ3JvdXAgbWQ6ZmxleC1hdXRvIG1kOmZsZXggd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1tdXRlZC04MDAgZGFyazp0ZXh0LW11dGVkLTEwMCBob3ZlcjpiZy1tdXRlZC01MCBkYXJrOmhvdmVyOmJnLW11dGVkLTcwMFwiXSksXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBcIuetm+mAieW3suWuieijheS4u+mimFwiLFxuICAgICAgICAgICAgICAgICAgZmxvdzogXCJkb3duXCIsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzb3J0QnlJbnN0YWxsZWRcbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICBfY2FjaGVbNl0gfHwgKF9jYWNoZVs2XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgaC0xMCB3aGl0ZXNwYWNlLXByZS13cmFwIGZsZXggdGV4dC1tdXRlZC00MDAgZ3JvdXAtaG92ZXI6dGV4dC1wcmltYXJ5LTUwMFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJtYXRlcmlhbC1zeW1ib2xzOnNvcnQtYnktYWxwaGFcIixcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ3LTUgaC01IGljb25pZnkgaWNvbmlmeS0tbWF0ZXJpYWwtc3ltYm9sc1wiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNNC41IDExYTguNSA4LjUgMCAxIDEgOC4xODggOC40OTRhNi40NyA2LjQ3IDAgMCAxLS42OCAxLjQ1N2MuMzI3LjAzMy42NTguMDQ5Ljk5Mi4wNDljNS41MjMgMCAxMC00LjQ3NyAxMC0xMFMxOC41MjMgMSAxMyAxUzMgNS40NzcgMyAxMWMwIC4zMzQuMDE2LjY2NS4wNDguOTkxYTYuNTEgNi41MSAwIDAgMSAxLjQ1OC0uNjhBOC42NSA4LjY1IDAgMCAxIDQuNSAxMVptOC40OTMtNS4zNTJhLjc1Ljc1IDAgMCAwLTEuNDkzLjEwMnY2bC4wMDcuMTAyYS43NS43NSAwIDAgMCAuNzQzLjY0OGg0bC4xMDItLjAwN0EuNzUuNzUgMCAwIDAgMTYuMjUgMTFIMTNWNS43NWwtLjAwNy0uMTAyWk0xIDE3LjVhNS41IDUuNSAwIDAgMSA1LTUuNDc3djUuNzdsLTEuNjQ2LTEuNjQ3YS41LjUgMCAwIDAtLjcwOC43MDhsMi41IDIuNWEuNS41IDAgMCAwIC43MDggMGwyLjUtMi41YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcgMTcuNzkzdi01Ljc3QTUuNSA1LjUgMCAxIDEgMSAxNy41Wm04LjUgM0EuNS41IDAgMCAwIDkgMjBINGEuNS41IDAgMCAwIDAgMWg1YS41LjUgMCAwIDAgLjUtLjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSwgLTEpKSxcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIF9ob2lzdGVkXzExLCBfdG9EaXNwbGF5U3RyaW5nKGNvdW50SW5zdGFsbGVkVGhlbWUudmFsdWUpLCAxKVxuICAgICAgICAgICAgICAgIF0sIDIpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzEyLCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xMywgW1xuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInctZnVsbCBoLTggcGwtMiBtZDpwbC0xNiBwci01IGZvbnQtc2FucyB0ZXh0LWJhc2UgbGVhZGluZy01IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCB0ZXh0LW11dGVkLTYwMCBmb2N1czpib3JkZXItbXV0ZWQtMzAwIGZvY3VzOnNoYWRvdy1sZyBmb2N1czpzaGFkb3ctbXV0ZWQtMzAwLzUwIGRhcms6Zm9jdXM6c2hhZG93LW11dGVkLTgwMC81MCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLTMwMCBkYXJrOnBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtNTAwIGRhcms6YmctbXV0ZWQtODAwIGRhcms6dGV4dC1tdXRlZC0yMDAgZGFyazpib3JkZXItbXV0ZWQtNzAwIGRhcms6Zm9jdXM6Ym9yZGVyLW11dGVkLTYwMCB0dy1hY2Nlc3NpYmlsaXR5XCIsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlNlYXJjaCB0aGVtZXMuLi5cIixcbiAgICAgICAgICAgICAgICAgICAgb25JbnB1dDogaGFuZGxlU2V0U2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFRleHRSZWYudmFsdWVcbiAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDQwLCBfaG9pc3RlZF8xNCksXG4gICAgICAgICAgICAgICAgICBfY2FjaGVbN10gfHwgKF9jYWNoZVs3XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaGlkZGVuIG1kOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTYgaC04IHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCB0ZXh0LW11dGVkLTQwMCBncm91cC1mb2N1cy13aXRoaW46dGV4dC1wcmltYXJ5LTUwMFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWljb25cIjogXCJsdWNpZGU6c2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidy00IGgtNCBpY29uaWZ5IGljb25pZnktLWx1Y2lkZVwiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWpvaW5cIjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiY2lyY2xlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3g6IFwiMTFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3k6IFwiMTFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcjogXCI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIm0yMSAyMWwtNC4zLTQuM1wiIH0pXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF0sIC0xKSlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzE1LCBbXG4gICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICBvbkNsaWNrOiBzb3J0QnlVcGRhdGVkLFxuICAgICAgICAgIGNsYXNzOiBcImlubGluZS1ibG9jayB3LWZ1bGwgZm9udC1zYW5zIHRleHQteHMgcHgtMyBtLTEgcm91bmRlZC1sZyBiZy1ncmVlbi02MDAgdGV4dC13aGl0ZSBzaGFkb3cteGwgc2hhZG93LXByaW1hcnktNTAwLzIwXCJcbiAgICAgICAgfSwgW1xuICAgICAgICAgIF9jcmVhdGVUZXh0Vk5vZGUoXCIg5Y+R546wIFwiICsgX3RvRGlzcGxheVN0cmluZyhjb3VudFVwZGF0ZWRUaGVtZS52YWx1ZSkgKyBcIiDkuKrkuLvpopjmm7TmlrDvvIHjgJDngrnmiJHmn6XnnIvjgJEgXCIsIDEpLFxuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgb25DbGljazogX3dpdGhNb2RpZmllcnMoY2xvc2VOb3RpZmljYXRpb24sIFtcInN0b3BcIl0pLFxuICAgICAgICAgICAgY2xhc3M6IFwibWwtMiBweC0zIHNoYWRvdy1ub25lXCJcbiAgICAgICAgICB9LCBbLi4uKF9jYWNoZVs4XSB8fCAoX2NhY2hlWzhdID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMWVtXCIsXG4gICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCJcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICBkOiBcIk0xNiAyQzguMiAyIDIgOC4yIDIgMTZzNi4yIDE0IDE0IDE0czE0LTYuMiAxNC0xNFMyMy44IDIgMTYgMm01LjQgMjFMMTYgMTcuNkwxMC42IDIzTDkgMjEuNGw1LjQtNS40TDkgMTAuNkwxMC42IDlsNS40IDUuNEwyMS40IDlsMS42IDEuNmwtNS40IDUuNGw1LjQgNS40elwiXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICBdKSldKVxuICAgICAgICBdLCA1MTIpLCBbXG4gICAgICAgICAgW192U2hvdywgY291bnRVcGRhdGVkVGhlbWUudmFsdWVdXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzZWN0aW9uXCIsIF9ob2lzdGVkXzE2LCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTcsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzE4LCBbXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzE5LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjAsIFtcbiAgICAgICAgICAgICAgICBfY3JlYXRlVk5vZGUoVGhlbWVUb29sYmFyLCB7XG4gICAgICAgICAgICAgICAgICBcImFjdGl2ZS1jYXRlZ29yeVwiOiBhY3RpdmVDYXRlZ29yeS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRoZW1lTGlzdDogdmFsaWRUaGVtZUxpc3QudmFsdWUsXG4gICAgICAgICAgICAgICAgICBvblVwZGF0ZUFjdGl2ZUNhdGVnb3J5OiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVwZGF0ZUFjdGl2ZUNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImFjdGl2ZS1jYXRlZ29yeVwiLCBcInRoZW1lTGlzdFwiLCBcIm9uVXBkYXRlQWN0aXZlQ2F0ZWdvcnlcIl0pXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIxLCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImdyaWQgZ2FwLTYgLW0tMyBwdGFibGV0OmdyaWQtY29scy0yIGx0YWJsZXQ6Z3JpZC1jb2xzLTMgbGc6Z3JpZC1jb2xzLTNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyFncmlkLWNvbHMtMSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGttZXJTaXplLnZhbHVlIDw9IDc2OCAmJiBwa21lclNpemUudmFsdWUgPiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyFncmlkLWNvbHMtMic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGttZXJTaXplLnZhbHVlID4gNzY4ICYmIHBrbWVyU2l6ZS52YWx1ZSA8IDEwMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIWdyaWQtY29scy0zJzogcGttZXJTaXplLnZhbHVlID4gMTAyNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSlcbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAobmVlZHNMb2FkLnZhbHVlICYmICghZGlzcGxheWVkVGhlbWVzLnZhbHVlIHx8IGRpc3BsYXllZFRoZW1lcy52YWx1ZS5sZW5ndGggPT09IDApKVxuICAgICAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwgX2hvaXN0ZWRfMjIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBsb2FkQWxsVGhlbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgZm9udC1zYW5zIGZvbnQtc2VtaWJvbGQgYmctcHJpbWFyeS01MDAgdGV4dC13aGl0ZSByZWxhdGl2ZSBweC02IHB5LTMgcm91bmRlZC1sZyB0dy1hY2Nlc3NpYmlsaXR5IGhvdmVyOmJnLXByaW1hcnktNjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVs5XSB8fCAoX2NhY2hlWzldID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlU3RhdGljVk5vZGUoXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgd2lkdGg9XFxcIjIwXFxcIiBoZWlnaHQ9XFxcIjIwXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2Utd2lkdGg9XFxcIjJcXFwiIHN0cm9rZS1saW5lY2FwPVxcXCJyb3VuZFxcXCIgc3Ryb2tlLWxpbmVqb2luPVxcXCJyb3VuZFxcXCIgY2xhc3M9XFxcImx1Y2lkZSBsdWNpZGUtcmVmcmVzaC1jd1xcXCI+PHBhdGggZD1cXFwiTTMgMTJhOSA5IDAgMCAxIDktOSA5Ljc1IDkuNzUgMCAwIDEgNi43NCAyLjc0TDIxIDhcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNMjEgM3Y1aC01XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTIxIDEyYTkgOSAwIDAgMS05IDkgOS43NSA5Ljc1IDAgMCAxLTYuNzQtMi43NEwzIDE2XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTMgMjF2LTVoNVxcXCI+PC9wYXRoPjwvc3ZnPjxzcGFuPueCueWHu+WKoOi9veS4u+mimOWIl+ihqDwvc3Bhbj5cIiwgMilcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pKV0pXG4gICAgICAgICAgICAgICAgICAgICAgXSkpXG4gICAgICAgICAgICAgICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcIlwiLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgIChfb3BlbkJsb2NrKHRydWUpLCBfY3JlYXRlRWxlbWVudEJsb2NrKF9GcmFnbWVudCwgbnVsbCwgX3JlbmRlckxpc3QoZGlzcGxheWVkVGhlbWVzLnZhbHVlLCAodGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogdGhlbWUuaWRcbiAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVWTm9kZShUaGVtZUNhcmQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogcHJvcHMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGVtZS1pbmZvXCI6IHRoZW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2dpbjogaXNVc2VyTG9naW4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRvd25sb2FkVXBkYXRlVGhlbWU6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTaG93VGhlbWVNb2RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImFwcFwiLCBcInRoZW1lLWluZm9cIiwgXCJpc0xvZ2luXCIsIFwib25Eb3dubG9hZFVwZGF0ZVRoZW1lXCJdKVxuICAgICAgICAgICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgICAgIH0pLCAxMjgpKVxuICAgICAgICAgICAgICAgIF0sIDIpLFxuICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjMsIFtcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjQsIFtcbiAgICAgICAgICAgICAgICAgICAgKHNob3dSZWFkTW9yZUJ1dHRvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHJlYWRNb3JlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ3LWZ1bGwgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIGZvbnQtc2FucyBmb250LXNlbWlib2xkIGJnLXdoaXRlIGRhcms6YmctbXV0ZWQtNzAwIHRleHQtbXV0ZWQtODAwIGRhcms6dGV4dC13aGl0ZSBib3JkZXIgYm9yZGVyLW11dGVkLTMwMCBkYXJrOmJvcmRlci1tdXRlZC02MDAgcmVsYXRpdmUgcHgtNiBweS00IHJvdW5kZWQtbGcgdHctYWNjZXNzaWJpbGl0eSBob3ZlcjpzaGFkb3cteGwgaG92ZXI6c2hhZG93LW11dGVkLTQwMC8yMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgWy4uLihfY2FjaGVbMTBdIHx8IChfY2FjaGVbMTBdID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIG51bGwsIFwiTG9hZCBNb3JlXCIsIC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSkpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwiXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pLFxuICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI1LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IFwibWF4LXctM3hsIHB4LTYgcHktNCBteC1hdXRvIHRleHQtbGVmdCBiZy13aGl0ZSByb3VuZGVkIHNoYWRvdy1sZyBkYXJrOmJnLW11dGVkLTcwMFwiLFxuICAgICAgICBvbkNsaWNrOiBoaWRlTW9kYWwsXG4gICAgICAgIFwieC10cmFuc2l0aW9uOmVudGVyXCI6IFwibW90aW9uLXNhZmU6ZWFzZS1vdXQgZHVyYXRpb24tMzAwXCIsXG4gICAgICAgIFwieC10cmFuc2l0aW9uOmVudGVyLXN0YXJ0XCI6IFwib3BhY2l0eS0wIHNjYWxlLTkwXCIsXG4gICAgICAgIFwieC10cmFuc2l0aW9uOmVudGVyLWVuZFwiOiBcIm9wYWNpdHktMTAwIHNjYWxlLTEwMFwiXG4gICAgICB9LCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIiB9LCBbXG4gICAgICAgICAgX2NhY2hlWzEyXSB8fCAoX2NhY2hlWzEyXSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJoNVwiLCB7IGNsYXNzOiBcIm1yLTMgbWF4LXctbm9uZVwiIH0sIG51bGwsIC0xKSksXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgY2xhc3M6IFwiei01MCBjdXJzb3ItcG9pbnRlclwiLFxuICAgICAgICAgICAgb25DbGljazogaGlkZU1vZGFsXG4gICAgICAgICAgfSwgWy4uLihfY2FjaGVbMTFdIHx8IChfY2FjaGVbMTFdID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIyNFwiLFxuICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIyXCIsXG4gICAgICAgICAgICAgICAgZDogXCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLCAtMSlcbiAgICAgICAgICBdKSldKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNlY3Rpb25cIiwgX2hvaXN0ZWRfMjYsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI3LCBbXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaDNcIiwgX2hvaXN0ZWRfMjgsIFtcbiAgICAgICAgICAgICAgX2NhY2hlWzEzXSB8fCAoX2NhY2hlWzEzXSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjFlbVwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCIxZW1cIixcbiAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1pY29uXCI6IFwibGluZS1tZDpkb3dubG9hZGluZy1sb29wXCIsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwidy02IGgtNiBpY29uaWZ5IGljb25pZnktLWxpbmUtbWRcIlxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImdcIiwge1xuICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICBcInN0cm9rZS1saW5lY2FwXCI6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1kYXNoYXJyYXlcIjogXCIyIDRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgZDogXCJNMTIgM0MxNi45NzA2IDMgMjEgNy4wMjk0NCAyMSAxMkMyMSAxNi45NzA2IDE2Ljk3MDYgMjEgMTIgMjFcIlxuICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYW5pbWF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogXCJzdHJva2UtZGFzaG9mZnNldFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGR1cjogXCIwLjZzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0Q291bnQ6IFwiaW5kZWZpbml0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogXCI2OzBcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcIjMwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogXCIzMFwiLFxuICAgICAgICAgICAgICAgICAgICBkOiBcIk0xMiAyMUM3LjAyOTQ0IDIxIDMgMTYuOTcwNiAzIDEyQzMgNy4wMjk0NCA3LjAyOTQ0IDMgMTIgM1wiXG4gICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJhbmltYXRlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImZyZWV6ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IFwic3Ryb2tlLWRhc2hvZmZzZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogXCIwLjFzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZHVyOiBcIjAuM3NcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IFwiMzA7MFwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiTTEyIDh2Ny41XCJcbiAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImFuaW1hdGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiZnJlZXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogXCJzdHJva2UtZGFzaG9mZnNldFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBcIjAuNXNcIixcbiAgICAgICAgICAgICAgICAgICAgICBkdXI6IFwiMC4yc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogXCIxMDswXCJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS1kYXNoYXJyYXlcIjogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiTTEyIDE1LjVsMy41IC0zLjVNMTIgMTUuNWwtMy41IC0zLjVcIlxuICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYW5pbWF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJmcmVlemVcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBcInN0cm9rZS1kYXNob2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgYmVnaW46IFwiMC43c1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGR1cjogXCIwLjJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBcIjY7MFwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0sIC0xKSksXG4gICAgICAgICAgICAgIF9jcmVhdGVUZXh0Vk5vZGUoXCIg5Y2z5bCG5a6J6KOFLi4uLlwiICsgX3RvRGlzcGxheVN0cmluZyhzZWxlY3RUaGVtZS52YWx1ZS50b1VwcGVyQ2FzZSgpKSwgMSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2NhY2hlWzE1XSB8fCAoX2NhY2hlWzE1XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicFwiLCB7IGNsYXNzOiBcIm1iLTIgdGV4dC1iYXNlIGxlYWRpbmctcmVsYXhlZFwiIH0sIFwiIOazqOaEj++8jOWuieijheWSjOabtOaWsOaTjeS9nOS4jeWPr+mAhu+8jOivt+ehruiupOWQjuWGjeaTjeS9nOOAgiBcIilcbiAgICAgICAgICAgIF0sIC0xKSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI5LCBbXG4gICAgICAgICAgICAgIF9jYWNoZVsxNF0gfHwgKF9jYWNoZVsxNF0gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwibGFiZWxcIiwge1xuICAgICAgICAgICAgICAgIGZvcjogXCJ2ZXJzaW9uLXNlbGVjdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgbXItMlwiXG4gICAgICAgICAgICAgIH0sIFwi6YCJ5oup54mI5pys5Y+377yI6buY6K6k5pyA5paw54mI5pys77yJ77yaXCIsIC0xKSksXG4gICAgICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwic2VsZWN0XCIsIHtcbiAgICAgICAgICAgICAgICBpZDogXCJ2ZXJzaW9uLXNlbGVjdFwiLFxuICAgICAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBfY2FjaGVbMF0gfHwgKF9jYWNoZVswXSA9ICgkZXZlbnQ6IGFueSkgPT4gKChzZWxlY3RUaGVtZVZlcnNpb24pLnZhbHVlID0gJGV2ZW50KSksXG4gICAgICAgICAgICAgICAgb25DbGljazogX2NhY2hlWzFdIHx8IChfY2FjaGVbMV0gPSBfd2l0aE1vZGlmaWVycygoKSA9PiB7fSwgW1wic3RvcFwiXSkpLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcIm10LTEgYmxvY2sgdy1mdWxsIHB4LTMgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCBiZy13aGl0ZSBkYXJrOmJnLWdyYXktODAwIHJvdW5kZWQtbWQgc2hhZG93LXNtIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLWdyZWVuLTUwMCBmb2N1czpib3JkZXItZ3JlZW4tNTAwIHNtOnRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBcIlxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgKF9vcGVuQmxvY2sodHJ1ZSksIF9jcmVhdGVFbGVtZW50QmxvY2soX0ZyYWdtZW50LCBudWxsLCBfcmVuZGVyTGlzdCh0aGVtZVZlcnNpb25zLnZhbHVlLCAodmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJvcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICB9LCBfdG9EaXNwbGF5U3RyaW5nKHZlcnNpb24pICsgXCIgXCIgKyBfdG9EaXNwbGF5U3RyaW5nKHZlcnNpb24gPT09IG9yaWdpblZlcnNpb24udmFsdWUgPyAn77yI5pyA5paw54mI5pys77yJJyA6ICcnKSwgOSwgX2hvaXN0ZWRfMzApKVxuICAgICAgICAgICAgICAgIH0pLCAxMjgpKVxuICAgICAgICAgICAgICBdLCA1MTIpLCBbXG4gICAgICAgICAgICAgICAgW192TW9kZWxTZWxlY3QsIHNlbGVjdFRoZW1lVmVyc2lvbi52YWx1ZV1cbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zMSwgW1xuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzMyLCBbXG4gICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zMywgW1xuICAgICAgICAgICAgICAgICAgKGlzRG93bmxvYWQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZURvd25sb2FkVGhlbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJibG9jayBweS00IG15LTEgZm9udC1zYW5zIHRleHQtYmFzZSBmb250LW1lZGl1bSB0ZXh0LWNlbnRlciB0ZXh0LWdyZWVuLTUwMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgYm9yZGVyIHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgZGFyazpob3ZlcjpiZy1ncmVlbi0zMDAvMjAgaG92ZXI6YmctZ3JlZW4tMTAwIGJvcmRlci1ncmVlbi03MDAvMjVcIlxuICAgICAgICAgICAgICAgICAgICAgIH0sIFwiIOehriDorqQgXCIpKVxuICAgICAgICAgICAgICAgICAgICA6IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBoYW5kbGVVcGRhdGVUaGVtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImJsb2NrIHB5LTQgbXktMSBmb250LXNhbnMgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtZ3JlZW4tNTAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBib3JkZXIgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBkYXJrOmhvdmVyOmJnLWdyZWVuLTMwMC8yMCBob3ZlcjpiZy1ncmVlbi0xMDAgYm9yZGVyLWdyZWVuLTcwMC8yNVwiXG4gICAgICAgICAgICAgICAgICAgICAgfSwgXCIg5pu0IOaWsCBcIikpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJtZDpwLTQgbWQ6dy0xLzIgZmxleFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHsgY2xhc3M6IFwiZmxleC1ncm93XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogY2FuY2VsTW9kYWwsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImJsb2NrIHB5LTQgbXktMSBmb250LXNhbnMgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtZ3JlZW4tNTAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBib3JkZXIgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBkYXJrOmhvdmVyOmJnLWdyZWVuLTMwMC8yMCBob3ZlcjpiZy1ncmVlbi0xMDAgYm9yZGVyLWdyZWVuLTcwMC8yNVwiXG4gICAgICAgICAgICAgICAgICB9LCBcIiDlj5Yg5raIIFwiKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0sIDUxMiksIFtcbiAgICAgIFtfdlNob3csIHNob3dNb2RhbC52YWx1ZV1cbiAgICBdKVxuICBdLCA2NCkpXG59XG59XG5cbn0pIiwiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgbm9ybWFsaXplQ2xhc3MgYXMgX25vcm1hbGl6ZUNsYXNzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jaywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2ssIHRvRGlzcGxheVN0cmluZyBhcyBfdG9EaXNwbGF5U3RyaW5nLCB2U2hvdyBhcyBfdlNob3csIHdpdGhEaXJlY3RpdmVzIGFzIF93aXRoRGlyZWN0aXZlcywgY3JlYXRlVGV4dFZOb2RlIGFzIF9jcmVhdGVUZXh0Vk5vZGUsIGNyZWF0ZVZOb2RlIGFzIF9jcmVhdGVWTm9kZSwgY3JlYXRlQ29tbWVudFZOb2RlIGFzIF9jcmVhdGVDb21tZW50Vk5vZGUsIFN1c3BlbnNlIGFzIF9TdXNwZW5zZSwgd2l0aEN0eCBhcyBfd2l0aEN0eCwgY3JlYXRlQmxvY2sgYXMgX2NyZWF0ZUJsb2NrLCBjcmVhdGVTdGF0aWNWTm9kZSBhcyBfY3JlYXRlU3RhdGljVk5vZGUsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJ2dWVcIlxuXG5jb25zdCBfaG9pc3RlZF8xID0geyBjbGFzczogXCJ3LWZ1bGxcIiB9XG5jb25zdCBfaG9pc3RlZF8yID0geyBjbGFzczogXCJmbGV4IGZsZXgtd3JhcCBtZDpjb250ZW50LWNlbnRlclwiIH1cbmNvbnN0IF9ob2lzdGVkXzMgPSB7IGNsYXNzOiBcImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtZDpweC04IG14LWF1dG8gZm9udC1zYW5zIGxvZ28gc2NhbGUtOTAgbWQ6c2NhbGUtMTI1IG1heC13LTd4bFwiIH1cbmNvbnN0IF9ob2lzdGVkXzQgPSB7IGNsYXNzOiBcImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgbXgtYXV0byBtYXgtdy03eGxcIiB9XG5jb25zdCBfaG9pc3RlZF81ID0geyBjbGFzczogXCJpdGVtcy1jZW50ZXIgdy1hdXRvIGdhcC02IGJhc2lzLTBcIiB9XG5jb25zdCBfaG9pc3RlZF82ID0ge1xuICBocmVmOiBcImh0dHBzOi8vcGttZXIuY25cIixcbiAgY2xhc3M6IFwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgbm8tdW5kZXJsaW5lIHRleHQtaW5oZXJpdFwiXG59XG5jb25zdCBfaG9pc3RlZF83ID0geyBjbGFzczogXCJ0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgdGV4dC1wcmltYXJ5LTYwMFwiIH1cbmNvbnN0IF9ob2lzdGVkXzggPSB7IGNsYXNzOiBcInBrbWVyLXRhYi1jb250YWluZXJcIiB9XG5jb25zdCBfaG9pc3RlZF85ID0geyBjbGFzczogXCJtYi01IGZsZXggbGlzdC1ub25lIGZsZXgtcm93IGZsZXgtd3JhcCBib3JkZXItYi0wIHBsLTBcIiB9XG5jb25zdCBfaG9pc3RlZF8xMCA9IHsgY2xhc3M6IFwicmVsYXRpdmUgY3Vyc29yLXBvaW50ZXIgbXktMiBibG9jayBib3JkZXIteC0wIGJvcmRlci1iLTIgYm9yZGVyLXQtMCBib3JkZXItdHJhbnNwYXJlbnQgcHgtNyBwYi0zLjUgcHQtNCBmb250LWJvbGQgdXBwZXJjYXNlIGxlYWRpbmctdGlnaHQgaG92ZXI6aXNvbGF0ZSBkYXJrOmhvdmVyOmJnLXNsYXRlLTkwMC8zMCBob3ZlcjpiZy1uZXV0cmFsLTEwMCBmb2N1czppc29sYXRlIGZvY3VzOmJvcmRlci10cmFuc3BhcmVudFwiIH1cbmNvbnN0IF9ob2lzdGVkXzExID0geyBjbGFzczogXCJyZWxhdGl2ZSBjdXJzb3ItcG9pbnRlciBteS0yIGJsb2NrIGJvcmRlci14LTAgYm9yZGVyLWItMiBib3JkZXItdC0wIGJvcmRlci10cmFuc3BhcmVudCBweC03IHBiLTMuNSBwdC00IGZvbnQtYm9sZCB1cHBlcmNhc2UgbGVhZGluZy10aWdodCBob3Zlcjppc29sYXRlIGRhcms6aG92ZXI6Ymctc2xhdGUtOTAwLzMwIGhvdmVyOmJnLW5ldXRyYWwtMTAwIGZvY3VzOmlzb2xhdGUgZm9jdXM6Ym9yZGVyLXRyYW5zcGFyZW50XCIgfVxuY29uc3QgX2hvaXN0ZWRfMTIgPSB7IGNsYXNzOiBcInBrbWVyLXRhYi1jb250ZW50XCIgfVxuY29uc3QgX2hvaXN0ZWRfMTMgPSB7XG4gIGtleTogMCxcbiAgY2xhc3M6IFwib3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCBlYXNlLWxpbmVhclwiXG59XG5jb25zdCBfaG9pc3RlZF8xNCA9IHtcbiAga2V5OiAxLFxuICBjbGFzczogXCJvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwIGVhc2UtbGluZWFyXCJcbn1cblxuaW1wb3J0IHsgb25Nb3VudGVkLCBvblVubW91bnRlZCwgcmVmIH0gZnJvbSBcInZ1ZVwiXHJcbmltcG9ydCBQbHVnaW5NYXJrZXQgZnJvbSBcIkAvY29tcG9uZW50cy9wbHVnaW4vUGx1Z2luTWFya2V0LnZ1ZVwiXHJcbmltcG9ydCBUaGVtZU1hcmtldCBmcm9tIFwiQC9jb21wb25lbnRzL3RoZW1lL1RoZW1lTWFya2V0LnZ1ZVwiXHJcbmltcG9ydCB0eXBlIHsgUGttZXJTZXR0aW5ncyB9IGZyb20gXCJAL21haW5cIlxyXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIlxyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICAgIHNldHRpbmdzOiBQa21lclNldHRpbmdzXHJcbiAgICBhcHA6IEFwcFxyXG59XHJcblxyXG5cbmV4cG9ydCBkZWZhdWx0IC8qQF9fUFVSRV9fKi9fZGVmaW5lQ29tcG9uZW50KHtcbiAgX19uYW1lOiAnUGx1Z2luTWFya2V0VmlldycsXG4gIHByb3BzOiB7XG4gICAgc2V0dGluZ3M6IHt9LFxuICAgIGFwcDoge31cbiAgfSxcbiAgc2V0dXAoX19wcm9wczogYW55KSB7XG5cclxuY29uc3QgcHJvcHMgPSBfX3Byb3BzXHJcbmNvbnN0IGN1cnJlbnRUYWIgPSByZWYoXCJwbHVnaW5cIilcclxuY29uc3QgaXNPcGVuVXBkYXRlVGFiID0gcmVmKClcclxuY29uc3QgcGFyc2VkRGF0YSA9IHJlZih7IHR5cGU6IFwiXCIsIGNvdW50OiAwIH0pXHJcbi8vIOWkhOeQhueCueWHuyBUYWIg55qE5LqL5Lu277yM5YiH5o2i5b2T5YmN5pi+56S655qE57uE5Lu2XHJcbmNvbnN0IHN3aXRjaFRhYiA9ICh0YWI6IHN0cmluZykgPT4ge1xyXG4gICAgY3VycmVudFRhYi52YWx1ZSA9IHRhYlxyXG59XHJcblxyXG5vbk1vdW50ZWQoKCkgPT4ge1xyXG4gICAgaXNPcGVuVXBkYXRlVGFiLnZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwa21lci11cGRhdGUtdGFiXCIpXHJcblxyXG4gICAgaWYgKGlzT3BlblVwZGF0ZVRhYi52YWx1ZSAhPT0gbnVsbCAmJiBpc09wZW5VcGRhdGVUYWIudmFsdWUgIT09IFwiXCIpIHtcclxuICAgICAgICAvLyDop6PmnpAgSlNPTiDlrZfnrKbkuLLkuLogSmF2YVNjcmlwdCDlr7nosaFcclxuICAgICAgICBwYXJzZWREYXRhLnZhbHVlID0gSlNPTi5wYXJzZShpc09wZW5VcGRhdGVUYWIudmFsdWUpXHJcbiAgICAgICAgaWYgKHBhcnNlZERhdGEudmFsdWUudHlwZSA9PSBcInR1cGRhdGVkXCIpIHN3aXRjaFRhYihcInRoZW1lXCIpXHJcbiAgICB9XHJcbn0pXHJcbm9uVW5tb3VudGVkKCgpID0+IHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwicGttZXItdXBkYXRlLXRhYlwiKVxyXG59KVxyXG5cbnJldHVybiAoX2N0eDogYW55LF9jYWNoZTogYW55KSA9PiB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKF9GcmFnbWVudCwgbnVsbCwgW1xuICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yLCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMywgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfNCwgW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF81LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJhXCIsIF9ob2lzdGVkXzYsIFtcbiAgICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzcsIFtcbiAgICAgICAgICAgICAgICAgIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImZpbGwtY3VycmVudCB3LTcgaC03XCIsICd3LTcgaC03J10pLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxLjc1cmVtXCIsXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IFwiMS4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sbnM6eGxpbmtcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sbnM6c3ZnanNcIjogXCJodHRwOi8vc3ZnanMuY29tL3N2Z2pzXCIsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDUxMiA1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ4bWw6c3BhY2VcIjogXCJwcmVzZXJ2ZVwiXG4gICAgICAgICAgICAgICAgICB9LCBbLi4uKF9jYWNoZVsyXSB8fCAoX2NhY2hlWzJdID0gW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlU3RhdGljVk5vZGUoXCI8Zz48cGF0aCBkPVxcXCJNMzk1LjYzMSA5OC44MzdDMzU4Ljc4MyA0NS44NjcgMzA5LjE5NSAxNi42OTYgMjU2IDE2LjY5NlMxNTMuMjE3IDQ1Ljg2NyAxMTYuMzY5IDk4LjgzN2MtMzUuNTY1IDUxLjEyNC01NS4xNTEgMTE4Ljc5Ny01NS4xNTEgMTkwLjU1NCAwIDExMy41NCA4Ny4zNzkgMjA1LjkxMyAxOTQuNzgzIDIwNS45MTNzMTk0Ljc4My05Mi4zNzMgMTk0Ljc4My0yMDUuOTEzYy0uMDAxLTcxLjc1Ni0xOS41ODgtMTM5LjQzLTU1LjE1My0xOTAuNTU0elxcXCIgc3R5bGU9XFxcIlxcXCIgZmlsbD1cXFwiI2ZmYzE3MFxcXCIgY2xhc3M9XFxcIlxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk0yNTYgNDk1LjMwNGMxMDcuNDAzIDAgMTk0Ljc4My05Mi4zNzMgMTk0Ljc4My0yMDUuOTEzIDAtNzEuNzU3LTE5LjU4Ni0xMzkuNDMtNTUuMTUxLTE5MC41NTRDMzU4Ljc4MyA0NS44NjcgMzA5LjE5NSAxNi42OTYgMjU2IDE2LjY5NlxcXCIgc3R5bGU9XFxcIlxcXCIgZmlsbD1cXFwiI2UxYTA1YVxcXCIgZGF0YS1vcmlnaW5hbD1cXFwiI2ZmZDZhMFxcXCIgY2xhc3M9XFxcIlxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk0wIDEyOGg1NS42NTJ2MzMuMzkxSDB6XFxcIiBzdHlsZT1cXFwiXFxcIiBmaWxsPVxcXCIjYTBiZGQ0XFxcIiBjbGFzcz1cXFwiXFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTEzLjA1MyA1MS45NGg1NS42NXYzMy4zOTFoLTU1LjY1elxcXCIgc3R5bGU9XFxcIlxcXCIgdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTE2MC41MjcgNDAuODc4IDY4LjYzNilcXFwiIGZpbGw9XFxcIiNhMGJkZDRcXFwiIGNsYXNzPVxcXCJcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNNDU2LjM0OCAxMjhINTEydjMzLjM5MWgtNTUuNjUyelxcXCIgc3R5bGU9XFxcIlxcXCIgZmlsbD1cXFwiI2EwYmRkNFxcXCIgY2xhc3M9XFxcIlxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk00NTQuNDExIDQwLjgwN2gzMy4zOTF2NTUuNjVoLTMzLjM5MXpcXFwiIHN0eWxlPVxcXCJcXFwiIHRyYW5zZm9ybT1cXFwicm90YXRlKC0xMDkuNDY5IDQ3MS4xMTEgNjguNjM2KVxcXCIgZmlsbD1cXFwiI2EwYmRkNFxcXCIgY2xhc3M9XFxcIlxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIm0xODcuNzE5IDI3Ny4zMTUgMTQuOTQ5LTI5Ljg5Ni00Ny41OTgtMjEuMTU0LTkzLjY1OSA1MS4wODVjLS4xMjQgNC0uMTk0IDguMDEzLS4xOTQgMTIuMDQxIDAgOC41NjQuNTA1IDE3LjAwNSAxLjQ3MSAyNS4yOThsOTMuODkyLTUxLjIxNCAzMS4xMzkgMTMuODR6TTQ1MC42MyAyNzguOTk3bC0xMDUuNTg3LTUyLjc5NC04OS40NjMgNDQuNzMxLTIyLjM2OS05Ljk0Mi0xNC45NDggMjkuODk2IDM4LjE1NSAxNi45NTggODguNjI1LTQ0LjMxIDEwNC4xNjYgNTIuMDgzYTIxOC41OTIgMjE4LjU5MiAwIDAgMCAxLjU3My0yNi4yMjhjLjAwMS0zLjQ3Ni0uMDU5LTYuOTM4LS4xNTItMTAuMzk0elxcXCIgc3R5bGU9XFxcIlxcXCIgZmlsbD1cXFwiI2Y4ZjhmOFxcXCIgY2xhc3M9XFxcIlxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIm00NTAuNjMgMjc4Ljk5Ny0xMDUuNTg3LTUyLjc5NC04OS40NjMgNDQuNzMxLjgzOSAzNi45MTMgODguNjI0LTQ0LjMxIDEwNC4xNjYgNTIuMDgzYTIxOC41OTIgMjE4LjU5MiAwIDAgMCAxLjU3My0yNi4yMjggMzgyLjA3IDM4Mi4wNyAwIDAgMC0uMTUyLTEwLjM5NXpcXFwiIHN0eWxlPVxcXCJcXFwiIGZpbGw9XFxcIiNmZWY1ZWFcXFwiIGNsYXNzPVxcXCJcXFwiPjwvcGF0aD48L2c+XCIsIDEpXG4gICAgICAgICAgICAgICAgICBdKSldKSlcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBfY2FjaGVbM10gfHwgKF9jYWNoZVszXSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiZm9udC1zYW5zIHRleHQtbGcgZm9udC1leHRyYWJvbGQgdHJhY2tpbmctd2lkZXN0IHVwcGVyY2FzZSB3aGl0ZXNwYWNlLW5vd3JhcCBmZWF0IGRhcms6dGV4dC1tdXRlZC0xMDBcIiB9LCBcIk9ic2lkaWFuIFBLTWVyIE1hcmtldFwiLCAtMSkpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pLFxuICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfOCwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInVsXCIsIF9ob2lzdGVkXzksIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImxpXCIsIHtcbiAgICAgICAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcImZsZXgtYXV0byB0ZXh0LWNlbnRlclwiLCB7IGFjdGl2ZTogY3VycmVudFRhYi52YWx1ZSA9PT0gJ3BsdWdpbicgfV0pLFxuICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gKCRldmVudDogYW55KSA9PiAoc3dpdGNoVGFiKCdwbHVnaW4nKSkpXG4gICAgICAgIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCBfaG9pc3RlZF8xMCwgW1xuICAgICAgICAgICAgX2NhY2hlWzRdIHx8IChfY2FjaGVbNF0gPSBfY3JlYXRlVGV4dFZOb2RlKFwiIOaPkuS7tuW4guWcuiBcIiwgLTEpKSxcbiAgICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcIm51bSBicmFkZ2VcIiB9LCBfdG9EaXNwbGF5U3RyaW5nKHBhcnNlZERhdGEudmFsdWUuY291bnQpLCA1MTMpLCBbXG4gICAgICAgICAgICAgIFtfdlNob3csIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YS52YWx1ZS50eXBlID09ICd1cGRhdGVkJyAmJiBwYXJzZWREYXRhLnZhbHVlLmNvdW50ID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIDIpLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwibGlcIiwge1xuICAgICAgICAgIGNsYXNzOiBfbm9ybWFsaXplQ2xhc3MoW1wiZmxleC1hdXRvIHRleHQtY2VudGVyIHJlbGF0aXZlXCIsIHsgYWN0aXZlOiBjdXJyZW50VGFiLnZhbHVlID09PSAndGhlbWUnIH1dKSxcbiAgICAgICAgICBvbkNsaWNrOiBfY2FjaGVbMV0gfHwgKF9jYWNoZVsxXSA9ICgkZXZlbnQ6IGFueSkgPT4gKHN3aXRjaFRhYigndGhlbWUnKSkpXG4gICAgICAgIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCBfaG9pc3RlZF8xMSwgW1xuICAgICAgICAgICAgX2NhY2hlWzVdIHx8IChfY2FjaGVbNV0gPSBfY3JlYXRlVGV4dFZOb2RlKFwiIOS4u+mimOW4guWcuiBcIiwgLTEpKSxcbiAgICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcIm51bSBicmFkZ2VcIiB9LCBfdG9EaXNwbGF5U3RyaW5nKHBhcnNlZERhdGEudmFsdWUuY291bnQpLCA1MTMpLCBbXG4gICAgICAgICAgICAgIFtfdlNob3csIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YS52YWx1ZS50eXBlID09ICd0dXBkYXRlZCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGEudmFsdWUuY291bnQgPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgMilcbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xMiwgW1xuICAgICAgICAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soX1N1c3BlbnNlLCBudWxsLCB7XG4gICAgICAgICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgICAgICAgKGN1cnJlbnRUYWIudmFsdWUgPT09ICdwbHVnaW4nKVxuICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwgX2hvaXN0ZWRfMTMsIFtcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVWTm9kZShQbHVnaW5NYXJrZXQsIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3M6IHByb3BzLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICBhcHA6IHByb3BzLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgdGFiOiBpc09wZW5VcGRhdGVUYWIudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY3VycmVudC10YWJcIjogY3VycmVudFRhYi52YWx1ZVxuICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgOCwgW1wic2V0dGluZ3NcIiwgXCJhcHBcIiwgXCJ0YWJcIiwgXCJjdXJyZW50LXRhYlwiXSlcbiAgICAgICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgOiAoY3VycmVudFRhYi52YWx1ZSA9PT0gJ3RoZW1lJylcbiAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwgX2hvaXN0ZWRfMTQsIFtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVZOb2RlKFRoZW1lTWFya2V0LCB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3M6IHByb3BzLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgIGFwcDogcHJvcHMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgIHRhYjogaXNPcGVuVXBkYXRlVGFiLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIFwiY3VycmVudC10YWJcIjogY3VycmVudFRhYi52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJzZXR0aW5nc1wiLCBcImFwcFwiLCBcInRhYlwiLCBcImN1cnJlbnQtdGFiXCJdKVxuICAgICAgICAgICAgICAgICAgXSkpXG4gICAgICAgICAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwiXCIsIHRydWUpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgZmFsbGJhY2s6IF93aXRoQ3R4KCgpID0+IFsuLi4oX2NhY2hlWzZdIHx8IChfY2FjaGVbNl0gPSBbXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiaDFcIiwgbnVsbCwgXCJMb2FkaW5nLi4uXCIsIC0xKSxcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJoMlwiLCBudWxsLCBcIuWmguaenOmVv+aXtumXtOWKoOi9ve+8jOivt+ehruS/nee9kee7nOmAmuW4uO+8jOW5tuWFs+mXree9kee7nOS7o+eQhuOAglwiLCAtMSlcbiAgICAgICAgICBdKSldKSxcbiAgICAgICAgICBfOiAxXG4gICAgICAgIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdLCA2NCkpXG59XG59XG5cbn0pIiwiLypcbiAqIEBBdXRob3I6IGN1bWFueSBjdW1hbkBxcS5jb21cbiAqIEBEYXRlOiAyMDIzLTA3LTIzIDE3OjM1OjMzXG4gKiBATGFzdEVkaXRvcnM6IGN1bWFueSBjdW1hbkBxcS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjQtMDQtMDEgMTE6MzQ6NDdcbiAqIEBEZXNjcmlwdGlvbjpcbiAqL1xuaW1wb3J0IHsgSXRlbVZpZXcsIFdvcmtzcGFjZUxlYWYgfSBmcm9tIFwib2JzaWRpYW5cIlxuaW1wb3J0IFBrbWVyRG93bmxvYWRlclBsdWdpbiwgeyBQa21lclNldHRpbmdzIH0gZnJvbSBcIi4uL21haW5cIlxuaW1wb3J0IFBsdWdpbk1hcmtldFZpZXcgZnJvbSBcIi4vUGx1Z2luTWFya2V0Vmlldy52dWVcIlxuaW1wb3J0IHsgY3JlYXRlQXBwIH0gZnJvbSBcInZ1ZVwiXG5pbXBvcnQgXCIuLi9zdHlsZXMvZ2xvYmFsLmNzc1wiXG5pbXBvcnQgXCIuLi9zdHlsZXMvYmFzZS5jc3NcIlxuXG5cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVklFV19UWVBFID0gXCJwa21lci1kb3dubG9hZGVyXCJcblxuZXhwb3J0IGNsYXNzIFBrbWRlckRvd25sb2FkZXJWaWV3IGV4dGVuZHMgSXRlbVZpZXcge1xuICAgIHBsdWdpbjogUGttZXJEb3dubG9hZGVyUGx1Z2luXG4gICAgc2V0dGluZ3M6IFBrbWVyU2V0dGluZ3NcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgbGVhZjogV29ya3NwYWNlTGVhZixcbiAgICAgICAgcGx1Z2luOiBQa21lckRvd25sb2FkZXJQbHVnaW4sXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGxlYWYpXG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBwbHVnaW4uc2V0dGluZ3NcbiAgICB9XG5cbiAgICBnZXRJY29uKCkge1xuICAgICAgICByZXR1cm4gXCJib29rbWFya1wiXG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheVRleHQoKSB7XG4gICAgICAgIHJldHVybiBcIlBrbWVyIE1hcmtldFwiXG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBERUZBVUxUX1ZJRVdfVFlQRVxuICAgIH1cblxuXG4gICAgYXN5bmMgb25PcGVuKCkge1xuICAgICAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpc1xuICAgICAgICBjb25zb2xlLmxvZyhcIndlbGNvbWUgUGttZXIgTWFya2V0XCIpXG4gICAgICAgIGNvbnN0IHBsdWdpbk1hcmtldEFwcCA9IGNyZWF0ZUFwcChQbHVnaW5NYXJrZXRWaWV3LCB7XG4gICAgICAgICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcGx1Z2luTWFya2V0QXBwLm1vdW50KGNvbnRlbnRFbClcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBOb3RpY2UgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IFBrbWVyU2V0dGluZ1RhYiB9IGZyb20gJ0Avc2V0dGluZ3MnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGttZXJMb2dpbk1vZGVsIHtcclxuICAgIHByaXZhdGUgbW9kYWw6IGFueTtcclxuICAgIHByaXZhdGUgc2V0dGluZ1RhYjogUGttZXJTZXR0aW5nVGFiO1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ1RhYjogUGttZXJTZXR0aW5nVGFiKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nVGFiID0gc2V0dGluZ1RhYjtcclxuICAgICAgICBjb25zdCB7IHJlbW90ZSB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcclxuICAgICAgICBjb25zdCB7IEJyb3dzZXJXaW5kb3c6IFJlbW90ZUJyb3dzZXJXaW5kb3cgfSA9IHJlbW90ZTtcclxuICAgICAgICB0aGlzLm1vZGFsID0gbmV3IFJlbW90ZUJyb3dzZXJXaW5kb3coe1xyXG4gICAgICAgICAgICBwYXJlbnQ6IHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCksXHJcbiAgICAgICAgICAgIHdpZHRoOiA2MzAsXHJcbiAgICAgICAgICAgIGhlaWdodDogODQwLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGFsLm9uY2UoJ3JlYWR5LXRvLXNob3cnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWwuc2V0VGl0bGUoJ+eZu+W9lVBrbWVyficpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsLnNldE1lbnUobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWwuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGFsLndlYkNvbnRlbnRzLm9uKCd3aWxsLW5hdmlnYXRlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsLndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGttZXItdG9rZW4nKWApLnRoZW4oKHJlc3VsdDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nVGFiLnNhdmVUb2tlbihyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nVGFiLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kYWwuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nVGFiLmFwcC53b3Jrc3BhY2UuYWN0aXZlTGVhZi5yZWJ1aWxkVmlldygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC8vIHRoaXMubW9kYWwud2ViQ29udGVudHMub24oJ3N0b3JhZ2UnLCAoZXZlbnQ6IGFueSwgc3RvcmFnZUFyZWE6IGFueSwga2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAvLyAgICAgLy8g5qOA5p+lbG9jYWxTdG9yYWdl55qE5Y+Y5YyWXHJcbiAgICAgICAgLy8gICAgIGlmIChrZXkgPT09ICdwa21lci10b2tlbicpIHtcclxuICAgICAgICAvLyAgICAgICAgIC8vIOiOt+WPluW9k+WJjWxvY2FsU3RvcmFnZeeahOWAvFxyXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2coZXZlbnQsIHN0b3JhZ2VBcmVhLCBuZXdWYWx1ZSlcclxuICAgICAgICAvLyAgICAgICAgIC8vIOWFs+mXreeql+WPo1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5tb2RhbC5jbG9zZSgpO1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zZXR0aW5nVGFiLmRpc3BsYXkoKTtcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vIH0pO1xyXG5cclxuXHJcbiAgICAgICAgLy8gY29uc3Qgc2Vzc2lvbiA9IHRoaXMubW9kYWwud2ViQ29udGVudHMuc2Vzc2lvbjtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXIgPSB7XHJcbiAgICAgICAgLy8gXHR1cmxzOiBbJ2h0dHBzOi8vd2VyZWFkLnFxLmNvbS93ZWIvdXNlcj91c2VyVmlkPSonXVxyXG4gICAgICAgIC8vIH07XHJcbiAgICAgICAgLy8gc2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uU2VuZEhlYWRlcnMoZmlsdGVyLCAoZGV0YWlsczogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gXHRjb25zdCBjb29raWVzID0gZGV0YWlscy5yZXF1ZXN0SGVhZGVyc1snQ29va2llJ107XHJcbiAgICAgICAgLy8gXHRjb25zdCBjb29raWVBcnIgPSBwYXJzZUNvb2tpZXMoY29va2llcyk7XHJcbiAgICAgICAgLy8gXHRjb25zdCB3cl9uYW1lID0gY29va2llQXJyLmZpbmQoKGNvb2tpZSkgPT4gY29va2llLm5hbWUgPT0gJ3dyX25hbWUnKS52YWx1ZTtcclxuICAgICAgICAvLyBcdGlmICh3cl9uYW1lICE9PSAnJykge1xyXG4gICAgICAgIC8vIFx0XHRzZXR0aW5nc1N0b3JlLmFjdGlvbnMuc2V0Q29va2llcyhjb29raWVBcnIpO1xyXG4gICAgICAgIC8vIFx0XHRzZXR0aW5nVGFiLmRpc3BsYXkoKTtcclxuICAgICAgICAvLyBcdFx0dGhpcy5tb2RhbC5jbG9zZSgpO1xyXG4gICAgICAgIC8vIFx0fSBlbHNlIHtcclxuICAgICAgICAvLyBcdFx0dGhpcy5tb2RhbC5yZWxvYWQoKTtcclxuICAgICAgICAvLyBcdH1cclxuICAgICAgICAvLyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb0xvZ2luKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWwubG9hZFVSTCgnaHR0cHM6Ly9wa21lci5jbi9wcm9kdWN0cy9zaWduSW4vJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcy5tb2RhbC53ZWJDb250ZW50cy5vbihcInN0b3JhZ2VcIiwgKGV2ZW50OiBhbnksIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhldmVudCwga2V5KVxyXG4gICAgICAgICAgICAvLyB0aGlzLm1vZGFsLndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGttZXItdG9rZW4nKWApLnRoZW4oKHJlc3VsdDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmdUYWIuc2F2ZVRva2VuKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmdUYWIuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5tb2RhbC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAvLyB9KVxyXG5cclxuICAgICAgICAgICAgLy8gfSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIExvZ2lub3V0KCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWwubG9hZFVSTCgnaHR0cHM6Ly9wa21lci5jbi9wcm9kdWN0cy9Vc2VyUHJvZmlsZS8nKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbC53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3BrbWVyLXRva2VuJylgKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1RhYi5zYXZlVG9rZW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdUYWIuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdUYWIuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmLnJlYnVpbGRWaWV3KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICBuZXcgTm90aWNlKCfkvaDmsqHnmbvlvZXlkovpgIDlh7rvvJ8nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbG9zZSgpIHtcclxuICAgICAgICB0aGlzLm1vZGFsLmNsb3NlKCk7XHJcbiAgICB9XHJcbn0iLCIvKlxyXG4gKiBAQXV0aG9yOiBjdW1hbnkgY3VtYW5AcXEuY29tXHJcbiAqIEBEYXRlOiAyMDIzLTA3LTI0IDE2OjM1OjU2XHJcbiAqIEBMYXN0RWRpdG9yczogY3VtYW55IGN1bWFuQHFxLmNvbVxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDI0LTA0LTAxIDE4OjE3OjM1XHJcbiAqIEBEZXNjcmlwdGlvbjogXHJcbiAqL1xyXG5pbXBvcnQgUGttZXJMb2dpbk1vZGFsIGZyb20gXCIuL2NvbXBvbmVudHMvbG9naW4vUGttZXJMb2dpbk1vZGFsXCI7XHJcbmltcG9ydCBQa21lclBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XHJcbmltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZywgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuZXhwb3J0IGNsYXNzIFBrbWVyU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG4gICAgcGx1Z2luOiBQa21lclBsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBQa21lclBsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcblxyXG5cclxuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbChcImgxXCIsIHsgdGV4dDogXCJPYnNpZGlhbiBQS01lciBNYXJrZXRcIiB9KTtcclxuXHJcblxyXG4gICAgICAgIC8v57uZY29udGFpbmVyRWzmt7vliqBkYXRhLXR5cGXlsZ7mgKfvvIznlKjkuo5jc3PpgInmi6nlmahcclxuICAgICAgICBjb250YWluZXJFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScsICdwa21lci1kb3dubG9hZGVyJylcclxuICAgICAgICBpZiAoUGxhdGZvcm0uaXNEZXNrdG9wQXBwKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wbHVnaW4uc2V0dGluZ3MudG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvZ2luKClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvZ2luT3V0KClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJUb2tlblwiKVxyXG4gICAgICAgICAgICAuc2V0RGVzYyhcIkRlZmF1bHQgdG9rZW4gZm9yIHBrbWVyIGRvd25sb2FkZXJcIilcclxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+XHJcbiAgICAgICAgICAgICAgICB0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKCfovpPlhaV0b2tlbicpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRva2VuKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXREaXNhYmxlZChmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnRva2VuID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCkge1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiVGlwc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCLlpoLmnpznmbvlvZXlkI7vvIzku43nhLbmj5DnpLrnmbvlvZXvvIzor7fpgIDlh7rph43mlrDnmbvlvZVQS01FUiBcIilcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwKSB7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJUaXBzXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIuenu+WKqOerr+mcgOimgeaCqOaJi+WKqOWcqOeUteiEkeerr+eZu+W9leiOt+WPlnRva2Vu5ZCO5aSN5Yi25Yiw6L6T5YWl5qGG5LitIFwiKVxyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCLwn6Wa5omT5byAUEtNZXIgTWFya2V0XCIpXHJcblxyXG4gICAgICAgICAgICAuc2V0RGVzYyhcIueCueWHu+W8gOWni+aMkemAieW/g+eIseeahOaPkuS7tuWSjOS4u+mimOWQp1wiKVxyXG4gICAgICAgICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+IHtcclxuICAgICAgICAgICAgICAgIGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRJY29uKFwiZG93bmxvYWRcIilcclxuICAgICAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIui/m+WFpVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRDbGFzcyhcInB4LTVcIilcclxuICAgICAgICAgICAgICAgICAgICAuc2V0Q3RhKClcclxuICAgICAgICAgICAgICAgICAgICAub25DbGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLnNldHRpbmcuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ub3BlblZpZXcoXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbChcImhyXCIsIHsgY2xzOiBcIm10LTJcIiB9KTtcclxuICAgICAgICBjb25zdCBkaXYgPSBjb250YWluZXJFbC5jcmVhdGVFbChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgIGNsczogXCJtdC00XCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGl2LmNyZWF0ZUVsKFwiYVwiLCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwi8J+lmlBLTWVyLmNuXCIsXHJcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9wa21lci5jblwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpdi5jcmVhdGVFbChcInNwYW5cIiwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIiB8IFwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpdi5jcmVhdGVFbChcImFcIiwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIvCfkaTkuKrkurrkuK3lv4NcIixcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL3BrbWVyLmNuL3Byb2R1Y3RzL1VzZXJQcm9maWxlL1wiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0xvZ2luKCk6IHZvaWQge1xyXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpLnNldE5hbWUoJ+eZu+W9lVBrbWVyJykuYWRkQnV0dG9uKChidXR0b24pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoJ+eZu+W9lScpXHJcbiAgICAgICAgICAgICAgICAuc2V0Q3RhKClcclxuICAgICAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uc2V0RGlzYWJsZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9naW5Nb2RlbCA9IG5ldyBQa21lckxvZ2luTW9kYWwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbG9naW5Nb2RlbC5kb0xvZ2luKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dMb2dpbk91dCgpOiB2b2lkIHtcclxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKS5zZXROYW1lKCfpgIDlh7rnmbvlvZUnKS5hZGRCdXR0b24oKGJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dCgn6YCA5Ye6JylcclxuICAgICAgICAgICAgICAgIC5zZXRDdGEoKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXREaXNhYmxlZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2dpbk1vZGVsID0gbmV3IFBrbWVyTG9naW5Nb2RhbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2dpbk1vZGVsLkxvZ2lub3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHNhdmVUb2tlbih0b2tlbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudG9rZW4gPSB0b2tlbjtcclxuICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxufVxyXG4iLCIvKlxuICogQEF1dGhvcjogY3VtYW55IGN1bWFuQHFxLmNvbVxuICogQERhdGU6IDIwMjQtMDMtMjcgMTQ6MjI6MDlcbiAqIEBMYXN0RWRpdG9yczogY3VtYW55IGN1bWFuQHFxLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyNC0wMy0yNyAxNDozNjo1M1xuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuaW1wb3J0IHsgUGttZXJTZXR0aW5ncyB9IGZyb20gXCJAL21haW5cIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgUGttZXJBcGkgfSBmcm9tIFwiQC9hcGkvYXBpXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpblN0YXRpc3RpY3Mge1xuICAgIHByaXZhdGUgYXBpOiBQa21lckFwaTtcbiAgICBwcml2YXRlIGlzVXNlckxvZ2luOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhcHA6IEFwcCwgcHJpdmF0ZSBzZXR0aW5nczogUGttZXJTZXR0aW5ncykge1xuICAgICAgICB0aGlzLmFwaSA9IG5ldyBQa21lckFwaSh0aGlzLnNldHRpbmdzLnRva2VuKVxuICAgICAgICB0aGlzLmlzVXNlckxvZ2luID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UGx1Z2luU3RhdHVzKCk6IFByb21pc2U8eyBpbnN0YWxsZWRDb3VudDogbnVtYmVyOyB1cGRhdGVkQ291bnQ6IG51bWJlciB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmlzVXNlckxvZ2luID0gYXdhaXQgdGhpcy5hcGkuaXNVc2VyTG9naW4oKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1VzZXJMb2dpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGluc3RhbGxlZENvdW50OiAwLCB1cGRhdGVkQ291bnQ6IDAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8g6I635Y+W5bey5a6J6KOF5o+S5Lu255qEIElEIOWIl+ihqFxuICAgICAgICAgICAgY29uc3QgaW5zdGFsbGVkUGx1Z2luSWRzID0gT2JqZWN0LmtleXModGhpcy5hcHAucGx1Z2lucy5tYW5pZmVzdHMpO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFsbGVkQ291bnQgPSBpbnN0YWxsZWRQbHVnaW5JZHMubGVuZ3RoO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoaW5zdGFsbGVkQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpbnN0YWxsZWRDb3VudDogMCwgdXBkYXRlZENvdW50OiAwIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIOS9v+eUqOaWsOeahCBBUEkg6I635Y+W5bey5a6J6KOF5o+S5Lu25L+h5oGvXG4gICAgICAgICAgICBjb25zdCB7IHBsdWdpbnMgfSA9IGF3YWl0IHRoaXMuYXBpLmdldEluc3RhbGxlZFBsdWdpbnNQYWdpbmF0ZWQoXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luSWRzLFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkQ291bnQsICAvLyDojrflj5bmiYDmnInlt7Llronoo4Xmj5Lku7ZcbiAgICAgICAgICAgICAgICBcImRvd25sb2FkQ291bnRcIixcbiAgICAgICAgICAgICAgICBcIkRFU0NcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8g6K6h566X6ZyA6KaB5pu05paw55qE5o+S5Lu25pWw6YePXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ291bnQgPSBwbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5hcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luLmlkXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFuaWZlc3QgJiYgbWFuaWZlc3QudmVyc2lvbiAhPT0gcGx1Z2luLnZlcnNpb247XG4gICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7IGluc3RhbGxlZENvdW50LCB1cGRhdGVkQ291bnQgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBnZXR0aW5nIHBsdWdpbiBzdGF0dXM6XCIsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiB7IGluc3RhbGxlZENvdW50OiAwLCB1cGRhdGVkQ291bnQ6IDAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qXG4gKiBAQXV0aG9yOiBjdW1hbnkgY3VtYW5AcXEuY29tXG4gKiBARGF0ZTogMjAyNC0wMy0yNyAwOTowODo1OFxuICogQExhc3RFZGl0b3JzOiBjdW1hbnkgY3VtYW5AcXEuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDI0LTAzLTI3IDE0OjM3OjA4XG4gKiBARGVzY3JpcHRpb246IFxuICovXG5pbXBvcnQgeyBQa21lclNldHRpbmdzIH0gZnJvbSBcIkAvbWFpblwiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBQa21lckFwaSB9IGZyb20gXCJAL2FwaS9hcGlcIjtcblxuaW50ZXJmYWNlIFRoZW1lSW5mbyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGlzSW5zdGFsbGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIGlzT3V0ZGF0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpblN0YXRpc3RpY3Mge1xuXG4gICAgcHJpdmF0ZSBhcGk6IFBrbWVyQXBpO1xuICAgIHByaXZhdGUgaXNVc2VyTG9naW46IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhbGxUaGVtZUxpc3Q6IFRoZW1lSW5mb1tdO1xuICAgIHByaXZhdGUgaXNMb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcDogQXBwLCBwcml2YXRlIHNldHRpbmdzOiBQa21lclNldHRpbmdzKSB7XG5cbiAgICAgICAgdGhpcy5hcGkgPSBuZXcgUGttZXJBcGkodGhpcy5zZXR0aW5ncy50b2tlbilcbiAgICAgICAgdGhpcy5pc1VzZXJMb2dpbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFsbFRoZW1lTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIC8vIOenu+mZpOaehOmAoOWHveaVsOS4reeahOiHquWKqOWKoOi9vVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZEFsbFRoZW1lcygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkZWQpIHJldHVybjsgLy8g5aaC5p6c5bey57uP5Yqg6L296L+H77yM5YiZ5LiN5YaN6YeN5aSN5Yqg6L29XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaXNVc2VyTG9naW4gPSBhd2FpdCB0aGlzLmFwaS5pc1VzZXJMb2dpbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNVc2VyTG9naW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZXMgPSBhd2FpdCB0aGlzLmFwaS5nZXRUaGVtZUxpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFRoZW1lTGlzdCA9IEFycmF5LmlzQXJyYXkodGhlbWVzKSA/IHRoZW1lcyA6IFtdO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVGhlbWVTdGF0dXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBsb2FkaW5nIHRoZW1lczpcIiwgZXJyb3IpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHVwZGF0ZVRoZW1lU3RhdHVzKCkge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgdGhlbWVNYW5pZmVzdHMgPSB0aGlzLmFwcC5jdXN0b21Dc3MudGhlbWVzO1xuICAgICAgICB0aGlzLmFsbFRoZW1lTGlzdC5mb3JFYWNoKCh0aGVtZSkgPT4ge1xuICAgICAgICAgICAgdGhlbWUuaXNJbnN0YWxsZWQgPSB0aGVtZU1hbmlmZXN0c1t0aGVtZS5uYW1lXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICB0aGVtZS5pc091dGRhdGVkID1cbiAgICAgICAgICAgICAgICB0aGVtZS5pc0luc3RhbGxlZCAmJlxuICAgICAgICAgICAgICAgIHRoZW1lTWFuaWZlc3RzW3RoZW1lLm5hbWVdLnZlcnNpb24gIT09IHRoZW1lLnZlcnNpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGhlbWVTdGF0dXMoKTogUHJvbWlzZTx7IHRpbnN0YWxsZWRDb3VudDogbnVtYmVyOyB0dXBkYXRlZENvdW50OiBudW1iZXIgfT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxUaGVtZXMoKTsgLy8g56Gu5L+d5o+S5Lu25YiX6KGo5bey5Yqg6L29XG5cbiAgICAgICAgY29uc3QgdGluc3RhbGxlZENvdW50ID0gdGhpcy5hbGxUaGVtZUxpc3QuZmlsdGVyKCh0aGVtZSkgPT4gdGhlbWUuaXNJbnN0YWxsZWQpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdHVwZGF0ZWRDb3VudCA9IHRoaXMuYWxsVGhlbWVMaXN0LmZpbHRlcigodGhlbWUpID0+IHRoZW1lLmlzT3V0ZGF0ZWQpLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4geyB0aW5zdGFsbGVkQ291bnQsIHR1cGRhdGVkQ291bnQgfTtcbiAgICB9XG59XG4iLCIvKlxuICogQEF1dGhvcjogY3VtYW55IGN1bWFuQHFxLmNvbVxuICogQERhdGU6IDIwMjMtMDctMjYgMTY6NTc6MTZcbiAqIEBMYXN0RWRpdG9yczogY3VtYW55IGN1bWFuQHFxLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyNC0wNC0wMSAxODoyMjozMFxuICogQERlc2NyaXB0aW9uOlxuICovXG5pbXBvcnQgeyBOb3RpY2UsIFBsdWdpbiwgfSBmcm9tIFwib2JzaWRpYW5cIlxuXG5pbXBvcnQgeyBERUZBVUxUX1ZJRVdfVFlQRSwgUGttZGVyRG93bmxvYWRlclZpZXcgfSBmcm9tIFwiLi92aWV3cy9QbHVnaW5NYXJrZXRcIlxuaW1wb3J0IHsgUGttZXJTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3NcIlxuaW1wb3J0IFBsdWdpblByb2Nlc3NvciBmcm9tIFwiQC91dGlscy9kb3dubG9hZGVyXCJcbmltcG9ydCBUaGVtZVByb2Nlc3NvciBmcm9tIFwiQC91dGlscy90ZG93bmxvYWRlclwiXG5pbXBvcnQgUGx1Z2luU3RhdGlzdGljcyBmcm9tIFwiQC91dGlscy9wbHVnaW5zdGF0aXN0aWNzXCJcbmltcG9ydCBUaGVtZVN0YXRpc3RpY3MgZnJvbSBcIkAvdXRpbHMvdGhlbWVzdGF0aXN0aWNzXCJcblxuZXhwb3J0IGludGVyZmFjZSBQa21lclNldHRpbmdzIHtcbiAgICB0b2tlbjogc3RyaW5nXG59XG5cbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IFBrbWVyU2V0dGluZ3MgPSB7XG4gICAgdG9rZW46IFwiXCJcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBrbWVyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgICBzZXR0aW5ncyE6IFBrbWVyU2V0dGluZ3NcbiAgICBwcml2YXRlIHN0YXR1c0Jhckljb25FbCE6IEhUTUxFbGVtZW50XG5cbiAgICBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKClcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJwa21lci11cGRhdGUtdGFiXCIpXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDdXN0b21VUkkoKVxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ3VzdG9tQ29tbWFuZHMoKVxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ3VzdG9tUmliYm9uKClcbiAgICAgICAgdGhpcy5hZGRTdGF0dXNCYXJJY29uKClcbiAgICAgICAgYXdhaXQgdGhpcy5yZWxvYWRTdGF0dXNCYXJIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgUGttZXJTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSlcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpZXcoXG4gICAgICAgICAgICBERUZBVUxUX1ZJRVdfVFlQRSxcbiAgICAgICAgICAgIChsZWFmKSA9PiBuZXcgUGttZGVyRG93bmxvYWRlclZpZXcobGVhZiwgdGhpcylcbiAgICAgICAgKVxuICAgICAgICAvLyDnm5HlkKzoh6rlrprkuYnkuovku7ZcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcInJlbG9hZC1zdGF0dXNiYXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWRTdGF0dXNCYXJIYW5kbGVyKCk7XG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJlbG9hZFN0YXR1c0JhckhhbmRsZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKFwiXCIpXG4gICAgfVxuICAgIG9udW5sb2FkKCkge1xuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwicmVsb2FkLXN0YXR1c2JhclwiLCB0aGlzLnJlbG9hZFN0YXR1c0JhckhhbmRsZXIpXG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZFNldHRpbmdzKCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgREVGQVVMVF9TRVRUSU5HUyxcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckN1c3RvbVVSSSgpIHtcbiAgICAgICAgLy/ms6jlhozljY/orq4gcGttZXItaW5zdGFsbGVyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlcihcbiAgICAgICAgICAgIFwicGttZXItaW5zdGFsbGVyXCIsXG4gICAgICAgICAgICBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSURcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZUlEID0gcGFyYW1zLnRoZW1lSURcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gcGFyYW1zLnZlcnNpb25cbiAgICAgICAgICAgICAgICBjb25zdCBwa21lclRva2VuID0gdGhpcy5zZXR0aW5ncy50b2tlblxuXG4gICAgICAgICAgICAgICAgaWYgKCFwa21lclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoXCLor7flhYjnmbvlvZXojrflj5Z0b2tlblwiLCA1MDAwKVxuICAgICAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuKClcbiAgICAgICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLnNldHRpbmcub3BlblRhYkJ5SWQoXCJQS01lclwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm90aWNlKFwi5q2j5Zyo5LiL6L295o+S5Lu277yM6K+356iN5ZCOLi4uXCIsIDMwMDApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbHVnaW5Qcm9jZXNzb3IgPSBuZXcgUGx1Z2luUHJvY2Vzc29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBsdWdpblByb2Nlc3Nvci5kb3dubG9hZFBsdWdpblRvUGx1Z2luRm9sZGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vdGljZShcIuS4i+i9veWksei0pe+8jOivt+ajgOafpee9kee7nFwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGVtZUlEKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm90aWNlKFwi5q2j5Zyo5a6J6KOF5Li76aKY77yM6K+356iN5ZCOLi4uXCIsIDMwMDApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGVtZVByb2Nlc3NvciA9IG5ldyBUaGVtZVByb2Nlc3NvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGVtZVByb2Nlc3Nvci5kb3dubG9hZFRoZW1lVG9UaGVtZUZvbGRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZUlELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vdGljZShcIuS4i+i9veWksei0pe+8jOivt+ajgOafpee9kee7nFwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckN1c3RvbUNvbW1hbmRzKCkge1xuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwib3Blbi1wa21lci1tYXJrZXQtdmlld1wiLFxuICAgICAgICAgICAgbmFtZTogXCJPcGVuIFBrbWVyIE1hcmtldCBWaWV3XCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5WaWV3KCcnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJDdXN0b21SaWJib24oKSB7XG4gICAgICAgIHRoaXMuYWRkUmliYm9uSWNvbihcImRvd25sb2FkXCIsIFwiT3BlbiBQa21lciBNYXJrZXRcIiwgKCkgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLm9wZW5WaWV3KCcnKTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcHJpdmF0ZSBhZGRTdGF0dXNCYXJJY29uKCkge1xuICAgICAgICB0aGlzLnN0YXR1c0Jhckljb25FbCA9IHRoaXMuYWRkU3RhdHVzQmFySXRlbSgpXG4gICAgICAgIHRoaXMuc3RhdHVzQmFySWNvbkVsLmFkZENsYXNzKFwicGttZXItc3RhdHVzYmFyXCIpXG4gICAgICAgIHRoaXMuc3RhdHVzQmFySWNvbkVsLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLXJvY2tldFwiPjxwYXRoIGQ9XCJNNC41IDE2LjVjLTEuNSAxLjI2LTIgNS0yIDVzMy43NC0uNSA1LTJjLjcxLS44NC43LTIuMTMtLjA5LTIuOTFhMi4xOCAyLjE4IDAgMCAwLTIuOTEtLjA5elwiLz48cGF0aCBkPVwibTEyIDE1LTMtM2EyMiAyMiAwIDAgMSAyLTMuOTVBMTIuODggMTIuODggMCAwIDEgMjIgMmMwIDIuNzItLjc4IDcuNS02IDExYTIyLjM1IDIyLjM1IDAgMCAxLTQgMnpcIi8+PHBhdGggZD1cIk05IDEySDRzLjU1LTMuMDMgMi00YzEuNjItMS4wOCA1IDAgNSAwXCIvPjxwYXRoIGQ9XCJNMTIgMTV2NXMzLjAzLS41NSA0LTJjMS4wOC0xLjYyIDAtNSAwLTVcIi8+PC9zdmc+YFxuICAgICAgICB0aGlzLnN0YXR1c0Jhckljb25FbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiUEtNZXLmj5Lku7bluILlnLpcIik7XG5cbiAgICAgICAgLy8g5rOo5YaM54K55Ye75LqL5Lu277yM5bm25L2/55So6Ziy5oqW5Ye95pWw5L2c5Li65aSE55CG56iL5bqPXG4gICAgICAgIHRoaXMucmVnaXN0ZXJEb21FdmVudCh0aGlzLnN0YXR1c0Jhckljb25FbCwgXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyDnlKjmiLfngrnlh7vnirbmgIHmoI/ml7bmiY3mo4Dmn6Xmm7TmlrDnirbmgIFcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzQmFyKFwic3RhdHVzYmFyXCIpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0dXNCYXIoZXZlbnQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwbHVnaW5TdGF0aXN0aWNzID0gbmV3IFBsdWdpblN0YXRpc3RpY3ModGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MpXG4gICAgICAgIGNvbnN0IHRoZW1lU3RhdGlzdGljcyA9IG5ldyBUaGVtZVN0YXRpc3RpY3ModGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MpXG4gICAgICAgIC8vIOS9v+eUqCBQcm9taXNlLmFsbCgpIOW5tuihjOiOt+WPluaPkuS7tuaVsOmHj1xuICAgICAgICBjb25zdCB7IGluc3RhbGxlZENvdW50LCB1cGRhdGVkQ291bnQgfSA9IGF3YWl0IHBsdWdpblN0YXRpc3RpY3MuZ2V0UGx1Z2luU3RhdHVzKCk7XG4gICAgICAgIGNvbnN0IHsgdGluc3RhbGxlZENvdW50LCB0dXBkYXRlZENvdW50IH0gPSBhd2FpdCB0aGVtZVN0YXRpc3RpY3MuZ2V0VGhlbWVTdGF0dXMoKTtcblxuICAgICAgICBpZiAodXBkYXRlZENvdW50ID4gMCB8fCB0dXBkYXRlZENvdW50ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNCYXJJY29uRWwuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbC1wb3NpdGlvblwiLCBcInRvcFwiKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQmFySWNvbkVsLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJVcGRhdGVkIEluZm86IFBsdWdpbnM6IFwiICsgdXBkYXRlZENvdW50ICsgXCIvXCIgKyBpbnN0YWxsZWRDb3VudCArIFwiLCBUaGVtZXM6IFwiICsgdHVwZGF0ZWRDb3VudCArIFwiL1wiICsgdGluc3RhbGxlZENvdW50KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQmFySWNvbkVsLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLXJvY2tldFwiPjxwYXRoIGQ9XCJNNC41IDE2LjVjLTEuNSAxLjI2LTIgNS0yIDVzMy43NC0uNSA1LTJjLjcxLS44NC43LTIuMTMtLjA5LTIuOTFhMi4xOCAyLjE4IDAgMCAwLTIuOTEtLjA5elwiLz48cGF0aCBkPVwibTEyIDE1LTMtM2EyMiAyMiAwIDAgMSAyLTMuOTVBMTIuODggMTIuODggMCAwIDEgMjIgMmMwIDIuNzItLjc4IDcuNS02IDExYTIyLjM1IDIyLjM1IDAgMCAxLTQgMnpcIi8+PHBhdGggZD1cIk05IDEySDRzLjU1LTMuMDMgMi00YzEuNjItMS4wOCA1IDAgNSAwXCIvPjxwYXRoIGQ9XCJNMTIgMTV2NXMzLjAzLS41NSA0LTJjMS4wOC0xLjYyIDAtNSAwLTVcIi8+PC9zdmc+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAgc3R5bGU9XCJtYXJnaW4tdG9wOiAtMTJweDttYXJnaW4tbGVmdDogLTNweDtcIiAgd2lkdGg9XCIxZW1cIiBoZWlnaHQ9XCIxZW1cIiB2aWV3Qm94PVwiMCAwIDE1IDE1XCI+PHBhdGggZmlsbD1cIm9yYW5nZVwiIGQ9XCJNOS44NzUgNy41YTIuMzc1IDIuMzc1IDAgMSAxLTQuNzUgMGEyLjM3NSAyLjM3NSAwIDAgMSA0Ljc1IDBcIi8+PC9zdmc+IGBcbiAgICAgICAgICAgIGlmIChldmVudCA9PT0gXCJzdGF0dXNiYXJcIikge1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiB1cGRhdGVkQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5WaWV3KEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0dXBkYXRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IHR1cGRhdGVkQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5WaWV3KEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNCYXJJY29uRWwuaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtcm9ja2V0XCI+PHBhdGggZD1cIk00LjUgMTYuNWMtMS41IDEuMjYtMiA1LTIgNXMzLjc0LS41IDUtMmMuNzEtLjg0LjctMi4xMy0uMDktMi45MWEyLjE4IDIuMTggMCAwIDAtMi45MS0uMDl6XCIvPjxwYXRoIGQ9XCJtMTIgMTUtMy0zYTIyIDIyIDAgMCAxIDItMy45NUExMi44OCAxMi44OCAwIDAgMSAyMiAyYzAgMi43Mi0uNzggNy41LTYgMTFhMjIuMzUgMjIuMzUgMCAwIDEtNCAyelwiLz48cGF0aCBkPVwiTTkgMTJINHMuNTUtMy4wMyAyLTRjMS42Mi0xLjA4IDUgMCA1IDBcIi8+PHBhdGggZD1cIk0xMiAxNXY1czMuMDMtLjU1IDQtMmMxLjA4LTEuNjIgMC01IDAtNVwiLz48L3N2Zz5gXG4gICAgICAgICAgICB0aGlzLnN0YXR1c0Jhckljb25FbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiVXBkYXRlZCBJbmZvOiBQbHVnaW5zOiBcIiArIHVwZGF0ZWRDb3VudCArIFwiL1wiICsgaW5zdGFsbGVkQ291bnQgKyBcIiwgVGhlbWVzOiBcIiArIHR1cGRhdGVkQ291bnQgKyBcIi9cIiArIHRpbnN0YWxsZWRDb3VudCk7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwic3RhdHVzYmFyXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuVmlldygnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3BlblZpZXcoc3RhdGU6IHN0cmluZykge1xuICAgICAgICBsZXQgcGttZXJEb3dubG9hZGVyRm91bmQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2UuaXRlcmF0ZUFsbExlYXZlcygobGVhZjogYW55KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgaWYgKGxlYWYuZ2V0Vmlld1N0YXRlKCkudHlwZSA9PT0gXCJwa21lci1kb3dubG9hZGVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGttZXJEb3dubG9hZGVyRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInBrbWVyLXVwZGF0ZS10YWJcIiwgc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5zZXRBY3RpdmVMZWFmKGxlYWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2UuYWN0aXZlTGVhZi5yZWJ1aWxkVmlldygpXG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMzAwKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyDlvILluLjlpITnkIZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyBsZWFmOlwiLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOWmguaenOacquaJvuWIsCBcInBrbWVyLWRvd25sb2FkZXJcIiDnsbvlnovnmoQgbGVhZu+8jOWImeaJk+W8gOm7mOiupOinhuWbvlxuICAgICAgICBpZiAoIXBrbWVyRG93bmxvYWRlckZvdW5kKSB7XG5cbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwicGttZXItdXBkYXRlLXRhYlwiLCBzdGF0ZSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2U/LmdldExlYWYoKT8uc2V0Vmlld1N0YXRlKHsgYWN0aXZlOiB0cnVlLCB0eXBlOiBERUZBVUxUX1ZJRVdfVFlQRSB9KTtcblxuICAgICAgICAgICAgfSwgMzAwKTtcblxuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIm1ha2VNYXAiLCJzdHIiLCJtYXAiLCJrZXkiLCJ2YWwiLCJFTVBUWV9PQkoiLCJFTVBUWV9BUlIiLCJOT09QIiwiTk8iLCJpc09uIiwiaXNNb2RlbExpc3RlbmVyIiwiZXh0ZW5kIiwicmVtb3ZlIiwiYXJyIiwiZWwiLCJpIiwiaGFzT3duUHJvcGVydHkiLCJoYXNPd24iLCJpc0FycmF5IiwiaXNNYXAiLCJ0b1R5cGVTdHJpbmciLCJpc1NldCIsImlzRGF0ZSIsImlzRnVuY3Rpb24iLCJpc1N0cmluZyIsImlzU3ltYm9sIiwiaXNPYmplY3QiLCJpc1Byb21pc2UiLCJvYmplY3RUb1N0cmluZyIsInZhbHVlIiwidG9SYXdUeXBlIiwiaXNQbGFpbk9iamVjdCIsImlzSW50ZWdlcktleSIsImlzUmVzZXJ2ZWRQcm9wIiwiY2FjaGVTdHJpbmdGdW5jdGlvbiIsImZuIiwiY2FjaGUiLCJjYW1lbGl6ZVJFIiwiY2FtZWxpemUiLCJjIiwiaHlwaGVuYXRlUkUiLCJoeXBoZW5hdGUiLCJjYXBpdGFsaXplIiwidG9IYW5kbGVyS2V5IiwiaGFzQ2hhbmdlZCIsIm9sZFZhbHVlIiwiaW52b2tlQXJyYXlGbnMiLCJmbnMiLCJhcmciLCJkZWYiLCJvYmoiLCJ3cml0YWJsZSIsImxvb3NlVG9OdW1iZXIiLCJuIiwidG9OdW1iZXIiLCJfZ2xvYmFsVGhpcyIsImdldEdsb2JhbFRoaXMiLCJub3JtYWxpemVTdHlsZSIsInJlcyIsIml0ZW0iLCJub3JtYWxpemVkIiwicGFyc2VTdHJpbmdTdHlsZSIsImxpc3REZWxpbWl0ZXJSRSIsInByb3BlcnR5RGVsaW1pdGVyUkUiLCJzdHlsZUNvbW1lbnRSRSIsImNzc1RleHQiLCJyZXQiLCJ0bXAiLCJub3JtYWxpemVDbGFzcyIsIm5hbWUiLCJzcGVjaWFsQm9vbGVhbkF0dHJzIiwiaXNTcGVjaWFsQm9vbGVhbkF0dHIiLCJpbmNsdWRlQm9vbGVhbkF0dHIiLCJsb29zZUNvbXBhcmVBcnJheXMiLCJhIiwiYiIsImVxdWFsIiwibG9vc2VFcXVhbCIsImFWYWxpZFR5cGUiLCJiVmFsaWRUeXBlIiwiYUtleXNDb3VudCIsImJLZXlzQ291bnQiLCJhSGFzS2V5IiwiYkhhc0tleSIsImxvb3NlSW5kZXhPZiIsImlzUmVmIiwidG9EaXNwbGF5U3RyaW5nIiwicmVwbGFjZXIiLCJfa2V5IiwiZW50cmllcyIsInZhbDIiLCJzdHJpbmdpZnlTeW1ib2wiLCJ2IiwiX2EiLCJhY3RpdmVFZmZlY3RTY29wZSIsIkVmZmVjdFNjb3BlIiwiZGV0YWNoZWQiLCJsIiwiY3VycmVudEVmZmVjdFNjb3BlIiwiZnJvbVBhcmVudCIsImxhc3QiLCJnZXRDdXJyZW50U2NvcGUiLCJhY3RpdmVTdWIiLCJwYXVzZWRRdWV1ZUVmZmVjdHMiLCJSZWFjdGl2ZUVmZmVjdCIsImJhdGNoIiwiY2xlYW51cEVmZmVjdCIsInByZXBhcmVEZXBzIiwicHJldkVmZmVjdCIsInByZXZTaG91bGRUcmFjayIsInNob3VsZFRyYWNrIiwiY2xlYW51cERlcHMiLCJsaW5rIiwicmVtb3ZlU3ViIiwiaXNEaXJ0eSIsImJhdGNoRGVwdGgiLCJiYXRjaGVkU3ViIiwiYmF0Y2hlZENvbXB1dGVkIiwic3ViIiwiaXNDb21wdXRlZCIsInN0YXJ0QmF0Y2giLCJlbmRCYXRjaCIsIm5leHQiLCJlcnJvciIsImVyciIsImhlYWQiLCJ0YWlsIiwicHJldiIsInJlbW92ZURlcCIsInJlZnJlc2hDb21wdXRlZCIsImNvbXB1dGVkIiwiZ2xvYmFsVmVyc2lvbiIsImRlcCIsInByZXZTdWIiLCJzb2Z0IiwibmV4dFN1YiIsInByZXZEZXAiLCJuZXh0RGVwIiwidHJhY2tTdGFjayIsInBhdXNlVHJhY2tpbmciLCJyZXNldFRyYWNraW5nIiwiZSIsImNsZWFudXAiLCJMaW5rIiwiRGVwIiwiZGVidWdJbmZvIiwiYWRkU3ViIiwiY3VycmVudFRhaWwiLCJ0YXJnZXRNYXAiLCJJVEVSQVRFX0tFWSIsIk1BUF9LRVlfSVRFUkFURV9LRVkiLCJBUlJBWV9JVEVSQVRFX0tFWSIsInRyYWNrIiwidGFyZ2V0IiwidHlwZSIsImRlcHNNYXAiLCJ0cmlnZ2VyIiwibmV3VmFsdWUiLCJvbGRUYXJnZXQiLCJydW4iLCJ0YXJnZXRJc0FycmF5IiwiaXNBcnJheUluZGV4IiwibmV3TGVuZ3RoIiwia2V5MiIsInJlYWN0aXZlUmVhZEFycmF5IiwiYXJyYXkiLCJyYXciLCJ0b1JhdyIsImlzU2hhbGxvdyIsInRvUmVhY3RpdmUiLCJzaGFsbG93UmVhZEFycmF5IiwiYXJyYXlJbnN0cnVtZW50YXRpb25zIiwiaXRlcmF0b3IiLCJhcmdzIiwieCIsInRoaXNBcmciLCJhcHBseSIsInNlYXJjaFByb3h5Iiwic2VwYXJhdG9yIiwibm9UcmFja2luZyIsInJlZHVjZSIsImNvbXBhcmVyIiwic2VsZiIsIm1ldGhvZCIsIndyYXBWYWx1ZSIsIml0ZXIiLCJyZXN1bHQiLCJhcnJheVByb3RvIiwid3JhcHBlZFJldEZuIiwibmVlZHNXcmFwIiwibWV0aG9kRm4iLCJyZXN1bHQyIiwid3JhcHBlZEZuIiwiaW5kZXgiLCJhY2MiLCJpc1Byb3h5IiwiaXNOb25UcmFja2FibGVLZXlzIiwiYnVpbHRJblN5bWJvbHMiLCJCYXNlUmVhY3RpdmVIYW5kbGVyIiwiX2lzUmVhZG9ubHkiLCJfaXNTaGFsbG93IiwicmVjZWl2ZXIiLCJpc1JlYWRvbmx5MiIsImlzU2hhbGxvdzIiLCJzaGFsbG93UmVhZG9ubHlNYXAiLCJyZWFkb25seU1hcCIsInNoYWxsb3dSZWFjdGl2ZU1hcCIsInJlYWN0aXZlTWFwIiwicmVhZG9ubHkiLCJyZWFjdGl2ZSIsIk11dGFibGVSZWFjdGl2ZUhhbmRsZXIiLCJpc09sZFZhbHVlUmVhZG9ubHkiLCJpc1JlYWRvbmx5IiwiaGFkS2V5IiwiUmVhZG9ubHlSZWFjdGl2ZUhhbmRsZXIiLCJtdXRhYmxlSGFuZGxlcnMiLCJyZWFkb25seUhhbmRsZXJzIiwic2hhbGxvd1JlYWN0aXZlSGFuZGxlcnMiLCJ0b1NoYWxsb3ciLCJnZXRQcm90byIsImNyZWF0ZUl0ZXJhYmxlTWV0aG9kIiwicmF3VGFyZ2V0IiwidGFyZ2V0SXNNYXAiLCJpc1BhaXIiLCJpc0tleU9ubHkiLCJpbm5lckl0ZXJhdG9yIiwid3JhcCIsInRvUmVhZG9ubHkiLCJkb25lIiwiY3JlYXRlUmVhZG9ubHlNZXRob2QiLCJjcmVhdGVJbnN0cnVtZW50YXRpb25zIiwic2hhbGxvdyIsImluc3RydW1lbnRhdGlvbnMiLCJyYXdLZXkiLCJoYXMiLCJjYWxsYmFjayIsIm9ic2VydmVkIiwiZ2V0IiwiaGFkSXRlbXMiLCJjcmVhdGVJbnN0cnVtZW50YXRpb25HZXR0ZXIiLCJtdXRhYmxlQ29sbGVjdGlvbkhhbmRsZXJzIiwic2hhbGxvd0NvbGxlY3Rpb25IYW5kbGVycyIsInJlYWRvbmx5Q29sbGVjdGlvbkhhbmRsZXJzIiwidGFyZ2V0VHlwZU1hcCIsInJhd1R5cGUiLCJnZXRUYXJnZXRUeXBlIiwiY3JlYXRlUmVhY3RpdmVPYmplY3QiLCJzaGFsbG93UmVhY3RpdmUiLCJiYXNlSGFuZGxlcnMiLCJjb2xsZWN0aW9uSGFuZGxlcnMiLCJwcm94eU1hcCIsInRhcmdldFR5cGUiLCJleGlzdGluZ1Byb3h5IiwicHJveHkiLCJpc1JlYWN0aXZlIiwibWFya1JhdyIsInIiLCJyZWYiLCJjcmVhdGVSZWYiLCJyYXdWYWx1ZSIsIlJlZkltcGwiLCJ1c2VEaXJlY3RWYWx1ZSIsInVucmVmIiwicmVmMiIsInNoYWxsb3dVbndyYXBIYW5kbGVycyIsInByb3h5UmVmcyIsIm9iamVjdFdpdGhSZWZzIiwiQ29tcHV0ZWRSZWZJbXBsIiwic2V0dGVyIiwiaXNTU1IiLCJnZXR0ZXJPck9wdGlvbnMiLCJkZWJ1Z09wdGlvbnMiLCJnZXR0ZXIiLCJJTklUSUFMX1dBVENIRVJfVkFMVUUiLCJjbGVhbnVwTWFwIiwiYWN0aXZlV2F0Y2hlciIsIm9uV2F0Y2hlckNsZWFudXAiLCJjbGVhbnVwRm4iLCJmYWlsU2lsZW50bHkiLCJvd25lciIsImNsZWFudXBzIiwid2F0Y2giLCJzb3VyY2UiLCJjYiIsIm9wdGlvbnMiLCJpbW1lZGlhdGUiLCJkZWVwIiwib25jZSIsInNjaGVkdWxlciIsImF1Z21lbnRKb2IiLCJjYWxsIiwicmVhY3RpdmVHZXR0ZXIiLCJzb3VyY2UyIiwidHJhdmVyc2UiLCJlZmZlY3QiLCJib3VuZENsZWFudXAiLCJmb3JjZVRyaWdnZXIiLCJpc011bHRpU291cmNlIiwicyIsImN1cnJlbnRFZmZlY3QiLCJiYXNlR2V0dGVyIiwiZGVwdGgiLCJzY29wZSIsIndhdGNoSGFuZGxlIiwiX2NiIiwiam9iIiwiaW1tZWRpYXRlRmlyc3RSdW4iLCJjdXJyZW50V2F0Y2hlciIsImNsZWFudXAyIiwic2VlbiIsImNhbGxXaXRoRXJyb3JIYW5kbGluZyIsImluc3RhbmNlIiwiaGFuZGxlRXJyb3IiLCJjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyIsInZhbHVlcyIsInRocm93SW5EZXYiLCJjb250ZXh0Vk5vZGUiLCJlcnJvckhhbmRsZXIiLCJ0aHJvd1VuaGFuZGxlZEVycm9ySW5Qcm9kdWN0aW9uIiwiY3VyIiwiZXhwb3NlZEluc3RhbmNlIiwiZXJyb3JJbmZvIiwiZXJyb3JDYXB0dXJlZEhvb2tzIiwibG9nRXJyb3IiLCJ0aHJvd0luUHJvZCIsInF1ZXVlIiwiZmx1c2hJbmRleCIsInBlbmRpbmdQb3N0Rmx1c2hDYnMiLCJhY3RpdmVQb3N0Rmx1c2hDYnMiLCJwb3N0Rmx1c2hJbmRleCIsInJlc29sdmVkUHJvbWlzZSIsImN1cnJlbnRGbHVzaFByb21pc2UiLCJuZXh0VGljayIsInAiLCJmaW5kSW5zZXJ0aW9uSW5kZXgiLCJpZCIsInN0YXJ0IiwiZW5kIiwibWlkZGxlIiwibWlkZGxlSm9iIiwibWlkZGxlSm9iSWQiLCJnZXRJZCIsInF1ZXVlSm9iIiwiam9iSWQiLCJsYXN0Sm9iIiwicXVldWVGbHVzaCIsImZsdXNoSm9icyIsInF1ZXVlUG9zdEZsdXNoQ2IiLCJmbHVzaFByZUZsdXNoQ2JzIiwiZmx1c2hQb3N0Rmx1c2hDYnMiLCJkZWR1cGVkIiwiY2hlY2siLCJjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UiLCJjdXJyZW50U2NvcGVJZCIsInNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSIsIndpdGhDdHgiLCJjdHgiLCJpc05vblNjb3BlZFNsb3QiLCJyZW5kZXJGbldpdGhDb250ZXh0Iiwic2V0QmxvY2tUcmFja2luZyIsInByZXZJbnN0YW5jZSIsIndpdGhEaXJlY3RpdmVzIiwidm5vZGUiLCJkaXJlY3RpdmVzIiwiZ2V0Q29tcG9uZW50UHVibGljSW5zdGFuY2UiLCJiaW5kaW5ncyIsImRpciIsIm1vZGlmaWVycyIsImludm9rZURpcmVjdGl2ZUhvb2siLCJwcmV2Vk5vZGUiLCJvbGRCaW5kaW5ncyIsImJpbmRpbmciLCJob29rIiwiVGVsZXBvcnRFbmRLZXkiLCJpc1RlbGVwb3J0IiwibGVhdmVDYktleSIsInNldFRyYW5zaXRpb25Ib29rcyIsImhvb2tzIiwiZGVmaW5lQ29tcG9uZW50IiwiZXh0cmFPcHRpb25zIiwibWFya0FzeW5jQm91bmRhcnkiLCJwZW5kaW5nU2V0UmVmTWFwIiwic2V0UmVmIiwicmF3UmVmIiwib2xkUmF3UmVmIiwicGFyZW50U3VzcGVuc2UiLCJpc1VubW91bnQiLCJpc0FzeW5jV3JhcHBlciIsInJlZlZhbHVlIiwib2xkUmVmIiwicmVmcyIsInNldHVwU3RhdGUiLCJyYXdTZXR1cFN0YXRlIiwiY2FuU2V0U2V0dXBSZWYiLCJpbnZhbGlkYXRlUGVuZGluZ1NldFJlZiIsIm9sZFJhd1JlZkF0b20iLCJfaXNTdHJpbmciLCJfaXNSZWYiLCJkb1NldCIsImV4aXN0aW5nIiwibmV3VmFsIiwicXVldWVQb3N0UmVuZGVyRWZmZWN0IiwicGVuZGluZ1NldFJlZiIsImlzS2VlcEFsaXZlIiwib25BY3RpdmF0ZWQiLCJyZWdpc3RlcktlZXBBbGl2ZUhvb2siLCJvbkRlYWN0aXZhdGVkIiwiY3VycmVudEluc3RhbmNlIiwid3JhcHBlZEhvb2siLCJjdXJyZW50IiwiaW5qZWN0SG9vayIsImluamVjdFRvS2VlcEFsaXZlUm9vdCIsImtlZXBBbGl2ZVJvb3QiLCJpbmplY3RlZCIsIm9uVW5tb3VudGVkIiwicHJlcGVuZCIsInJlc2V0Iiwic2V0Q3VycmVudEluc3RhbmNlIiwiY3JlYXRlSG9vayIsImxpZmVjeWNsZSIsImlzSW5TU1JDb21wb25lbnRTZXR1cCIsIm9uQmVmb3JlTW91bnQiLCJvbk1vdW50ZWQiLCJvbkJlZm9yZVVwZGF0ZSIsIm9uVXBkYXRlZCIsIm9uQmVmb3JlVW5tb3VudCIsIm9uU2VydmVyUHJlZmV0Y2giLCJvblJlbmRlclRyaWdnZXJlZCIsIm9uUmVuZGVyVHJhY2tlZCIsIm9uRXJyb3JDYXB0dXJlZCIsIk5VTExfRFlOQU1JQ19DT01QT05FTlQiLCJyZW5kZXJMaXN0IiwicmVuZGVySXRlbSIsImNhY2hlZCIsInNvdXJjZUlzQXJyYXkiLCJzb3VyY2VJc1JlYWN0aXZlQXJyYXkiLCJpc1JlYWRvbmx5U291cmNlIiwia2V5cyIsImdldFB1YmxpY0luc3RhbmNlIiwiaXNTdGF0ZWZ1bENvbXBvbmVudCIsInB1YmxpY1Byb3BlcnRpZXNNYXAiLCJyZXNvbHZlTWVyZ2VkT3B0aW9ucyIsImluc3RhbmNlV2F0Y2giLCJoYXNTZXR1cEJpbmRpbmciLCJzdGF0ZSIsIlB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycyIsImRhdGEiLCJwcm9wcyIsImFjY2Vzc0NhY2hlIiwiYXBwQ29udGV4dCIsIm5vcm1hbGl6ZWRQcm9wcyIsInNob3VsZENhY2hlQWNjZXNzIiwicHVibGljR2V0dGVyIiwiY3NzTW9kdWxlIiwiZ2xvYmFsUHJvcGVydGllcyIsInByb3BzT3B0aW9ucyIsImNzc01vZHVsZXMiLCJkZXNjcmlwdG9yIiwibm9ybWFsaXplUHJvcHNPckVtaXRzIiwiYXBwbHlPcHRpb25zIiwicHVibGljVGhpcyIsImNhbGxIb29rIiwiZGF0YU9wdGlvbnMiLCJjb21wdXRlZE9wdGlvbnMiLCJtZXRob2RzIiwid2F0Y2hPcHRpb25zIiwicHJvdmlkZU9wdGlvbnMiLCJpbmplY3RPcHRpb25zIiwiY3JlYXRlZCIsImJlZm9yZU1vdW50IiwibW91bnRlZCIsImJlZm9yZVVwZGF0ZSIsInVwZGF0ZWQiLCJhY3RpdmF0ZWQiLCJkZWFjdGl2YXRlZCIsImJlZm9yZURlc3Ryb3kiLCJiZWZvcmVVbm1vdW50IiwiZGVzdHJveWVkIiwidW5tb3VudGVkIiwicmVuZGVyIiwicmVuZGVyVHJhY2tlZCIsInJlbmRlclRyaWdnZXJlZCIsImVycm9yQ2FwdHVyZWQiLCJzZXJ2ZXJQcmVmZXRjaCIsImV4cG9zZSIsImluaGVyaXRBdHRycyIsImNvbXBvbmVudHMiLCJmaWx0ZXJzIiwicmVzb2x2ZUluamVjdGlvbnMiLCJtZXRob2RIYW5kbGVyIiwib3B0Iiwic2V0IiwiY3JlYXRlV2F0Y2hlciIsInByb3ZpZGVzIiwicHJvdmlkZSIsInJlZ2lzdGVyTGlmZWN5Y2xlSG9vayIsInJlZ2lzdGVyIiwiX2hvb2siLCJleHBvc2VkIiwiY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzIiwibm9ybWFsaXplSW5qZWN0IiwiaW5qZWN0IiwiaCIsImNyZWF0ZVBhdGhHZXR0ZXIiLCJoYW5kbGVyIiwiYmFzZSIsIm1peGlucyIsImV4dGVuZHNPcHRpb25zIiwiZ2xvYmFsTWl4aW5zIiwib3B0aW9uTWVyZ2VTdHJhdGVnaWVzIiwicmVzb2x2ZWQiLCJtZXJnZU9wdGlvbnMiLCJ0byIsImZyb20iLCJzdHJhdHMiLCJhc01peGluIiwibSIsInN0cmF0IiwiaW50ZXJuYWxPcHRpb25NZXJnZVN0cmF0cyIsIm1lcmdlRGF0YUZuIiwibWVyZ2VFbWl0c09yUHJvcHNPcHRpb25zIiwibWVyZ2VPYmplY3RPcHRpb25zIiwibWVyZ2VBc0FycmF5IiwibWVyZ2VXYXRjaE9wdGlvbnMiLCJtZXJnZUluamVjdCIsIm1lcmdlZCIsImNyZWF0ZUFwcENvbnRleHQiLCJ1aWQkMSIsImNyZWF0ZUFwcEFQSSIsImh5ZHJhdGUiLCJyb290Q29tcG9uZW50Iiwicm9vdFByb3BzIiwiY29udGV4dCIsImluc3RhbGxlZFBsdWdpbnMiLCJwbHVnaW5DbGVhbnVwRm5zIiwiaXNNb3VudGVkIiwiYXBwIiwidmVyc2lvbiIsInBsdWdpbiIsIm1peGluIiwiY29tcG9uZW50IiwiZGlyZWN0aXZlIiwicm9vdENvbnRhaW5lciIsImlzSHlkcmF0ZSIsIm5hbWVzcGFjZSIsImNyZWF0ZVZOb2RlIiwibGFzdEFwcCIsImN1cnJlbnRBcHAiLCJwYXJlbnRQcm92aWRlcyIsImRlZmF1bHRWYWx1ZSIsInRyZWF0RGVmYXVsdEFzRmFjdG9yeSIsImdldEN1cnJlbnRJbnN0YW5jZSIsImludGVybmFsT2JqZWN0UHJvdG8iLCJjcmVhdGVJbnRlcm5hbE9iamVjdCIsImlzSW50ZXJuYWxPYmplY3QiLCJpbml0UHJvcHMiLCJyYXdQcm9wcyIsImlzU3RhdGVmdWwiLCJhdHRycyIsInNldEZ1bGxQcm9wcyIsInVwZGF0ZVByb3BzIiwicmF3UHJldlByb3BzIiwib3B0aW1pemVkIiwicGF0Y2hGbGFnIiwicmF3Q3VycmVudFByb3BzIiwiaGFzQXR0cnNDaGFuZ2VkIiwicHJvcHNUb1VwZGF0ZSIsImlzRW1pdExpc3RlbmVyIiwiY2FtZWxpemVkS2V5IiwicmVzb2x2ZVByb3BWYWx1ZSIsImtlYmFiS2V5IiwibmVlZENhc3RLZXlzIiwicmF3Q2FzdFZhbHVlcyIsImNhbWVsS2V5IiwiY2FzdFZhbHVlcyIsImlzQWJzZW50IiwiaGFzRGVmYXVsdCIsInByb3BzRGVmYXVsdHMiLCJtaXhpblByb3BzQ2FjaGUiLCJub3JtYWxpemVQcm9wc09wdGlvbnMiLCJjb21wIiwiaGFzRXh0ZW5kcyIsImV4dGVuZFByb3BzIiwicmF3MiIsIm5vcm1hbGl6ZWRLZXkiLCJ2YWxpZGF0ZVByb3BOYW1lIiwicHJvcCIsInByb3BUeXBlIiwic2hvdWxkQ2FzdCIsInNob3VsZENhc3RUcnVlIiwidHlwZU5hbWUiLCJpc0ludGVybmFsS2V5Iiwibm9ybWFsaXplU2xvdFZhbHVlIiwibm9ybWFsaXplVk5vZGUiLCJub3JtYWxpemVTbG90IiwicmF3U2xvdCIsIm5vcm1hbGl6ZU9iamVjdFNsb3RzIiwicmF3U2xvdHMiLCJzbG90cyIsIm5vcm1hbGl6ZVZOb2RlU2xvdHMiLCJjaGlsZHJlbiIsImFzc2lnblNsb3RzIiwiaW5pdFNsb3RzIiwidXBkYXRlU2xvdHMiLCJuZWVkRGVsZXRpb25DaGVjayIsImRlbGV0aW9uQ29tcGFyaXNvblRhcmdldCIsInF1ZXVlRWZmZWN0V2l0aFN1c3BlbnNlIiwiY3JlYXRlUmVuZGVyZXIiLCJiYXNlQ3JlYXRlUmVuZGVyZXIiLCJjcmVhdGVIeWRyYXRpb25GbnMiLCJob3N0SW5zZXJ0IiwiaG9zdFJlbW92ZSIsImhvc3RQYXRjaFByb3AiLCJob3N0Q3JlYXRlRWxlbWVudCIsImhvc3RDcmVhdGVUZXh0IiwiaG9zdENyZWF0ZUNvbW1lbnQiLCJob3N0U2V0VGV4dCIsImhvc3RTZXRFbGVtZW50VGV4dCIsImhvc3RQYXJlbnROb2RlIiwiaG9zdE5leHRTaWJsaW5nIiwiaG9zdFNldFNjb3BlSWQiLCJob3N0SW5zZXJ0U3RhdGljQ29udGVudCIsInBhdGNoIiwibjEiLCJuMiIsImNvbnRhaW5lciIsImFuY2hvciIsInBhcmVudENvbXBvbmVudCIsInNsb3RTY29wZUlkcyIsImlzU2FtZVZOb2RlVHlwZSIsImdldE5leHRIb3N0Tm9kZSIsInVubW91bnQiLCJzaGFwZUZsYWciLCJUZXh0IiwicHJvY2Vzc1RleHQiLCJDb21tZW50IiwicHJvY2Vzc0NvbW1lbnROb2RlIiwiU3RhdGljIiwibW91bnRTdGF0aWNOb2RlIiwiRnJhZ21lbnQiLCJwcm9jZXNzRnJhZ21lbnQiLCJwcm9jZXNzRWxlbWVudCIsInByb2Nlc3NDb21wb25lbnQiLCJpbnRlcm5hbHMiLCJtb3ZlU3RhdGljTm9kZSIsIm5leHRTaWJsaW5nIiwicmVtb3ZlU3RhdGljTm9kZSIsIm1vdW50RWxlbWVudCIsImN1c3RvbUVsZW1lbnQiLCJwYXRjaEVsZW1lbnQiLCJ2bm9kZUhvb2siLCJ0cmFuc2l0aW9uIiwiZGlycyIsIm1vdW50Q2hpbGRyZW4iLCJyZXNvbHZlQ2hpbGRyZW5OYW1lc3BhY2UiLCJzZXRTY29wZUlkIiwiaW52b2tlVk5vZGVIb29rIiwibmVlZENhbGxUcmFuc2l0aW9uSG9va3MiLCJuZWVkVHJhbnNpdGlvbiIsInNjb3BlSWQiLCJzdWJUcmVlIiwiaXNTdXNwZW5zZSIsInBhcmVudFZOb2RlIiwiY2hpbGQiLCJjbG9uZUlmTW91bnRlZCIsImR5bmFtaWNDaGlsZHJlbiIsIm9sZFByb3BzIiwibmV3UHJvcHMiLCJ0b2dnbGVSZWN1cnNlIiwicGF0Y2hCbG9ja0NoaWxkcmVuIiwicGF0Y2hDaGlsZHJlbiIsInBhdGNoUHJvcHMiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiZmFsbGJhY2tDb250YWluZXIiLCJvbGRWTm9kZSIsIm5ld1ZOb2RlIiwiZnJhZ21lbnRTdGFydEFuY2hvciIsImZyYWdtZW50RW5kQW5jaG9yIiwiZnJhZ21lbnRTbG90U2NvcGVJZHMiLCJ0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuIiwibW91bnRDb21wb25lbnQiLCJ1cGRhdGVDb21wb25lbnQiLCJpbml0aWFsVk5vZGUiLCJjcmVhdGVDb21wb25lbnRJbnN0YW5jZSIsInNldHVwQ29tcG9uZW50Iiwic2V0dXBSZW5kZXJFZmZlY3QiLCJwbGFjZWhvbGRlciIsInNob3VsZFVwZGF0ZUNvbXBvbmVudCIsInVwZGF0ZUNvbXBvbmVudFByZVJlbmRlciIsImNvbXBvbmVudFVwZGF0ZUZuIiwiYnUiLCJ1IiwicGFyZW50Iiwibm9uSHlkcmF0ZWRBc3luY1Jvb3QiLCJsb2NhdGVOb25IeWRyYXRlZEFzeW5jUm9vdCIsIm9yaWdpbk5leHQiLCJuZXh0VHJlZSIsInJlbmRlckNvbXBvbmVudFJvb3QiLCJwcmV2VHJlZSIsInVwZGF0ZUhPQ0hvc3RFbCIsImJtIiwicm9vdCIsImlzQXN5bmNXcmFwcGVyVk5vZGUiLCJoeWRyYXRlTm9kZSIsImh5ZHJhdGVTdWJUcmVlIiwic2NvcGVkSW5pdGlhbFZOb2RlIiwidXBkYXRlIiwibmV4dFZOb2RlIiwicHJldlByb3BzIiwiYzEiLCJwcmV2U2hhcGVGbGFnIiwiYzIiLCJwYXRjaEtleWVkQ2hpbGRyZW4iLCJwYXRjaFVua2V5ZWRDaGlsZHJlbiIsInVubW91bnRDaGlsZHJlbiIsIm9sZExlbmd0aCIsImNvbW1vbkxlbmd0aCIsIm5leHRDaGlsZCIsInBhcmVudEFuY2hvciIsImwyIiwiZTEiLCJlMiIsIm5leHRQb3MiLCJzMSIsInMyIiwia2V5VG9OZXdJbmRleE1hcCIsImoiLCJwYXRjaGVkIiwidG9CZVBhdGNoZWQiLCJtb3ZlZCIsIm1heE5ld0luZGV4U29GYXIiLCJuZXdJbmRleFRvT2xkSW5kZXhNYXAiLCJwcmV2Q2hpbGQiLCJuZXdJbmRleCIsImluY3JlYXNpbmdOZXdJbmRleFNlcXVlbmNlIiwiZ2V0U2VxdWVuY2UiLCJuZXh0SW5kZXgiLCJhbmNob3JWTm9kZSIsIm1vdmUiLCJtb3ZlVHlwZSIsImxlYXZlIiwiZGVsYXlMZWF2ZSIsImFmdGVyTGVhdmUiLCJyZW1vdmUyIiwicGVyZm9ybUxlYXZlIiwiZG9SZW1vdmUiLCJjYWNoZUluZGV4Iiwic2hvdWxkSW52b2tlRGlycyIsInNob3VsZEludm9rZVZub2RlSG9vayIsInVubW91bnRDb21wb25lbnQiLCJyZW1vdmVGcmFnbWVudCIsInBlcmZvcm1SZW1vdmUiLCJidW0iLCJ1bSIsImludmFsaWRhdGVNb3VudCIsInRlbGVwb3J0RW5kIiwiaXNGbHVzaGluZyIsImN1cnJlbnROYW1lc3BhY2UiLCJhbGxvd2VkIiwiY2gxIiwiY2gyIiwibGVuIiwiYXJySSIsInN1YkNvbXBvbmVudCIsInNzckNvbnRleHRLZXkiLCJ1c2VTU1JDb250ZXh0IiwiZG9XYXRjaCIsImZsdXNoIiwiYmFzZVdhdGNoT3B0aW9ucyIsInJ1bnNJbW1lZGlhdGVseSIsInNzckNsZWFudXAiLCJ3YXRjaFN0b3BIYW5kbGUiLCJpc1ByZSIsImlzRmlyc3RSdW4iLCJ3YXRjaCQxIiwicGF0aCIsInNlZ21lbnRzIiwiZ2V0TW9kZWxNb2RpZmllcnMiLCJtb2RlbE5hbWUiLCJlbWl0IiwiZXZlbnQiLCJyYXdBcmdzIiwiaGFuZGxlck5hbWUiLCJvbmNlSGFuZGxlciIsIm1peGluRW1pdHNDYWNoZSIsIm5vcm1hbGl6ZUVtaXRzT3B0aW9ucyIsImV4dGVuZEVtaXRzIiwibm9ybWFsaXplZEZyb21FeHRlbmQiLCJDb21wb25lbnQiLCJ3aXRoUHJveHkiLCJyZW5kZXJDYWNoZSIsImZhbGx0aHJvdWdoQXR0cnMiLCJwcm94eVRvVXNlIiwidGhpc1Byb3h5IiwicmVuZGVyMiIsImdldEZ1bmN0aW9uYWxGYWxsdGhyb3VnaCIsImJsb2NrU3RhY2siLCJmaWx0ZXJNb2RlbExpc3RlbmVycyIsImNsb25lVk5vZGUiLCJmaWx0ZXJTaW5nbGVSb290IiwicmVjdXJzZSIsInNpbmdsZVJvb3QiLCJpc1ZOb2RlIiwicHJldkNoaWxkcmVuIiwibmV4dFByb3BzIiwibmV4dENoaWxkcmVuIiwiZW1pdHMiLCJoYXNQcm9wc0NoYW5nZWQiLCJkeW5hbWljUHJvcHMiLCJlbWl0c09wdGlvbnMiLCJuZXh0S2V5cyIsInN1c3BlbnNlSWQiLCJTdXNwZW5zZUltcGwiLCJyZW5kZXJlckludGVybmFscyIsIm1vdW50U3VzcGVuc2UiLCJwYXRjaFN1c3BlbnNlIiwiaHlkcmF0ZVN1c3BlbnNlIiwibm9ybWFsaXplU3VzcGVuc2VDaGlsZHJlbiIsIlN1c3BlbnNlIiwidHJpZ2dlckV2ZW50IiwiZXZlbnRMaXN0ZW5lciIsImNyZWF0ZUVsZW1lbnQiLCJoaWRkZW5Db250YWluZXIiLCJzdXNwZW5zZSIsImNyZWF0ZVN1c3BlbnNlQm91bmRhcnkiLCJzZXRBY3RpdmVCcmFuY2giLCJuZXdCcmFuY2giLCJuZXdGYWxsYmFjayIsImFjdGl2ZUJyYW5jaCIsInBlbmRpbmdCcmFuY2giLCJpc0luRmFsbGJhY2siLCJpc0h5ZHJhdGluZyIsInRpbWVvdXQiLCJwZW5kaW5nSWQiLCJwYXJlbnROb2RlIiwicGFyZW50U3VzcGVuc2VJZCIsImlzU3VzcGVuc2libGUiLCJpc1ZOb2RlU3VzcGVuc2libGUiLCJpbml0aWFsQW5jaG9yIiwicmVzdW1lIiwic3luYyIsInZub2RlMiIsImVmZmVjdHMiLCJwYXJlbnRDb21wb25lbnQyIiwiY29udGFpbmVyMiIsImRlbGF5RW50ZXIiLCJoYXNVbnJlc29sdmVkQW5jZXN0b3IiLCJmYWxsYmFja1ZOb2RlIiwibmFtZXNwYWNlMiIsImFuY2hvcjIiLCJtb3VudEZhbGxiYWNrIiwib3B0aW1pemVkMiIsImlzSW5QZW5kaW5nU3VzcGVuc2UiLCJoeWRyYXRlZEVsIiwiYXN5bmNTZXR1cFJlc3VsdCIsImhhbmRsZVNldHVwUmVzdWx0IiwicGFyZW50U3VzcGVuc2UyIiwibm9kZSIsImlzU2xvdENoaWxkcmVuIiwibm9ybWFsaXplU3VzcGVuc2VTbG90IiwiYmxvY2siLCJ0cmFja0Jsb2NrIiwiaXNCbG9ja1RyZWVFbmFibGVkIiwib3BlbkJsb2NrIiwiY3VycmVudEJsb2NrIiwiY2xvc2VCbG9jayIsImJyYW5jaCIsInN1c3BlbnNpYmxlIiwiZGlzYWJsZVRyYWNraW5nIiwiaW5WT25jZSIsInNldHVwQmxvY2siLCJjcmVhdGVFbGVtZW50QmxvY2siLCJjcmVhdGVCYXNlVk5vZGUiLCJjcmVhdGVCbG9jayIsIm5vcm1hbGl6ZUtleSIsIm5vcm1hbGl6ZVJlZiIsInJlZl9rZXkiLCJyZWZfZm9yIiwiaXNCbG9ja05vZGUiLCJuZWVkRnVsbENoaWxkcmVuTm9ybWFsaXphdGlvbiIsIm5vcm1hbGl6ZUNoaWxkcmVuIiwiX2NyZWF0ZVZOb2RlIiwiY2xvbmVkIiwiaXNDbGFzc0NvbXBvbmVudCIsImd1YXJkUmVhY3RpdmVQcm9wcyIsImtsYXNzIiwic3R5bGUiLCJleHRyYVByb3BzIiwibWVyZ2VSZWYiLCJjbG9uZVRyYW5zaXRpb24iLCJtZXJnZWRQcm9wcyIsIm1lcmdlUHJvcHMiLCJjcmVhdGVUZXh0Vk5vZGUiLCJ0ZXh0IiwiZmxhZyIsImNyZWF0ZVN0YXRpY1ZOb2RlIiwiY29udGVudCIsIm51bWJlck9mTm9kZXMiLCJjcmVhdGVDb21tZW50Vk5vZGUiLCJhc0Jsb2NrIiwic2xvdCIsInNsb3RGbGFnIiwidG9NZXJnZSIsImluY29taW5nIiwiZW1wdHlBcHBDb250ZXh0IiwidWlkIiwiaW50ZXJuYWxTZXRDdXJyZW50SW5zdGFuY2UiLCJzZXRJblNTUlNldHVwU3RhdGUiLCJnIiwicmVnaXN0ZXJHbG9iYWxTZXR0ZXIiLCJzZXR0ZXJzIiwidW5zZXRDdXJyZW50SW5zdGFuY2UiLCJzZXR1cFJlc3VsdCIsInNldHVwU3RhdGVmdWxDb21wb25lbnQiLCJzZXR1cCIsInNldHVwQ29udGV4dCIsImNyZWF0ZVNldHVwQ29udGV4dCIsImlzQXN5bmNTZXR1cCIsInJlc29sdmVkUmVzdWx0IiwiZmluaXNoQ29tcG9uZW50U2V0dXAiLCJjb21waWxlIiwic2tpcE9wdGlvbnMiLCJ0ZW1wbGF0ZSIsImlzQ3VzdG9tRWxlbWVudCIsImNvbXBpbGVyT3B0aW9ucyIsImRlbGltaXRlcnMiLCJjb21wb25lbnRDb21waWxlck9wdGlvbnMiLCJmaW5hbENvbXBpbGVyT3B0aW9ucyIsImF0dHJzUHJveHlIYW5kbGVycyIsImNvbXB1dGVkJDEiLCJwb2xpY3kiLCJ0dCIsInVuc2FmZVRvVHJ1c3RlZEhUTUwiLCJzdmdOUyIsIm1hdGhtbE5TIiwiZG9jIiwidGVtcGxhdGVDb250YWluZXIiLCJub2RlT3BzIiwidGFnIiwiaXMiLCJzZWxlY3RvciIsImJlZm9yZSIsIndyYXBwZXIiLCJ2dGNLZXkiLCJwYXRjaENsYXNzIiwiaXNTVkciLCJ0cmFuc2l0aW9uQ2xhc3NlcyIsInZTaG93T3JpZ2luYWxEaXNwbGF5IiwidlNob3dIaWRkZW4iLCJ2U2hvdyIsInNldERpc3BsYXkiLCJDU1NfVkFSX1RFWFQiLCJkaXNwbGF5UkUiLCJwYXRjaFN0eWxlIiwiaXNDc3NTdHJpbmciLCJoYXNDb250cm9sbGVkRGlzcGxheSIsInByZXZTdHlsZSIsInNldFN0eWxlIiwiY3NzVmFyVGV4dCIsImltcG9ydGFudFJFIiwicHJlZml4ZWQiLCJhdXRvUHJlZml4IiwicHJlZml4ZXMiLCJwcmVmaXhDYWNoZSIsInJhd05hbWUiLCJ4bGlua05TIiwicGF0Y2hBdHRyIiwiaXNCb29sZWFuIiwicGF0Y2hET01Qcm9wIiwiYXR0ck5hbWUiLCJuZWVkUmVtb3ZlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ2ZWlLZXkiLCJwYXRjaEV2ZW50IiwicHJldlZhbHVlIiwibmV4dFZhbHVlIiwiaW52b2tlcnMiLCJleGlzdGluZ0ludm9rZXIiLCJwYXJzZU5hbWUiLCJpbnZva2VyIiwiY3JlYXRlSW52b2tlciIsIm9wdGlvbnNNb2RpZmllclJFIiwiY2FjaGVkTm93IiwiZ2V0Tm93IiwiaW5pdGlhbFZhbHVlIiwicGF0Y2hTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJvcmlnaW5hbFN0b3AiLCJpc05hdGl2ZU9uIiwicGF0Y2hQcm9wIiwic2hvdWxkU2V0QXNQcm9wIiwiY2FtZWxpemUkMSIsImdldE1vZGVsQXNzaWduZXIiLCJvbkNvbXBvc2l0aW9uU3RhcnQiLCJvbkNvbXBvc2l0aW9uRW5kIiwiYXNzaWduS2V5IiwiY2FzdFZhbHVlIiwidHJpbSIsIm51bWJlciIsInZNb2RlbFRleHQiLCJsYXp5IiwiY2FzdFRvTnVtYmVyIiwiZWxWYWx1ZSIsInZNb2RlbFNlbGVjdCIsImlzU2V0TW9kZWwiLCJzZWxlY3RlZFZhbCIsIm8iLCJnZXRWYWx1ZSIsInNldFNlbGVjdGVkIiwiX2JpbmRpbmciLCJpc011bHRpcGxlIiwiaXNBcnJheVZhbHVlIiwib3B0aW9uIiwib3B0aW9uVmFsdWUiLCJvcHRpb25UeXBlIiwic3lzdGVtTW9kaWZpZXJzIiwibW9kaWZpZXJHdWFyZHMiLCJ3aXRoTW9kaWZpZXJzIiwiY2FjaGVLZXkiLCJndWFyZCIsInJlbmRlcmVyT3B0aW9ucyIsInJlbmRlcmVyIiwiZW5zdXJlUmVuZGVyZXIiLCJjcmVhdGVBcHAiLCJtb3VudCIsImNvbnRhaW5lck9yU2VsZWN0b3IiLCJub3JtYWxpemVDb250YWluZXIiLCJyZXNvbHZlUm9vdE5hbWVzcGFjZSIsIl9ob2lzdGVkXzEiLCJfaG9pc3RlZF8yIiwiX2hvaXN0ZWRfMyIsIl9zZmNfbWFpbiQ3IiwiX2RlZmluZUNvbXBvbmVudCIsIl9fcHJvcHMiLCJzaG93Q2F0ZWdvcmllcyIsIklzU2hvd0NhdGVnb3JpZXMiLCJfY3R4IiwiX2NhY2hlIiwiX29wZW5CbG9jayIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX25vcm1hbGl6ZUNsYXNzIiwiJGV2ZW50IiwiX3dpdGhEaXJlY3RpdmVzIiwiX0ZyYWdtZW50IiwiX3JlbmRlckxpc3QiLCJjYXRlZ29yeSIsIl90b0Rpc3BsYXlTdHJpbmciLCJfdlNob3ciLCJfaG9pc3RlZF80IiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzYiLCJfaG9pc3RlZF83IiwiX2hvaXN0ZWRfOCIsIl9ob2lzdGVkXzkiLCJfaG9pc3RlZF8xMCIsIl9ob2lzdGVkXzExIiwiX2hvaXN0ZWRfMTIiLCJfaG9pc3RlZF8xMyIsIl9ob2lzdGVkXzE0IiwiX2hvaXN0ZWRfMTUiLCJfaG9pc3RlZF8xNiIsIl9ob2lzdGVkXzE3IiwiX2hvaXN0ZWRfMTgiLCJfaG9pc3RlZF8xOSIsIl9ob2lzdGVkXzIwIiwiX2hvaXN0ZWRfMjEiLCJfaG9pc3RlZF8yMiIsIl9ob2lzdGVkXzIzIiwiX2hvaXN0ZWRfMjQiLCJfaG9pc3RlZF8yNSIsIl9ob2lzdGVkXzI2IiwiX2hvaXN0ZWRfMjciLCJfaG9pc3RlZF8yOCIsIl9ob2lzdGVkXzI5IiwiX2hvaXN0ZWRfMzAiLCJfaG9pc3RlZF8zMSIsIl9ob2lzdGVkXzMyIiwiX3NmY19tYWluJDYiLCJpc1VzZXJMb2dpbiIsInNob3dJbWFnZSIsIlBsdWdpblN0YXR1cyIsInN0YXR1c0NvbG9yIiwiZ2V0VXNlcm5hbWVGcm9tUmVwbyIsImdldERlZmF1bHRBdmF0YSIsInRhZ3MiLCJmb3JtYXROdW1iZXIiLCJudW0iLCJkaWZmRGF5cyIsInRpbWVzdGFtcCIsImRhdGUiLCJ0b2RheSIsIm9uZURheSIsImRheXNEaWZmIiwibW9udGhzRGlmZiIsInllYXJzRGlmZiIsImdldFRvb2x0aXAiLCJlbmFibGVQbHVnaW4iLCJnZXRJbml0aWFscyIsInVybCIsImZpcnN0Q2hhciIsImdldFJhZG9tSW1hZ2UiLCJoYW5kbGVPcGVuU2V0dGluZ3MiLCJfdW5yZWYiLCJfbm9ybWFsaXplU3R5bGUiLCJfd2l0aE1vZGlmaWVycyIsIl9jcmVhdGVDb21tZW50Vk5vZGUiLCJfY3JlYXRlVGV4dFZOb2RlIiwiX3NmY19tYWluJDUiLCJjaGFuZ2VUaGVtZSIsInRoZW1lTmFtZSIsIkJBU0VfQVBJX1VSTCIsIlBrbWVyQXBpIiwidG9rZW4iLCJwYXJ0cyIsInBheWxvYWRCYXNlNjQiLCJkZWNvZGVkUGF5bG9hZEpzb24iLCJkZWNyeXB0ZWRUb2tlbiIsInJlc3BvbnNlIiwicmVxdWVzdFVybCIsInBsdWdpbklkIiwianNvblJlc3BvbnNlIiwidGhlbWVJZCIsImNhY2hlZERhdGEiLCJjYWNoZWRFeHBpcnkiLCJjdXJyZW50VGltZSIsImtleXdvcmQiLCJwYWdlIiwicGFnZVNpemUiLCJzb3J0QnkiLCJzb3J0T3JkZXIiLCJzZWFyY2hUZXh0IiwiY2FjaGVFeHBpcnlUaW1lSW5NcyIsInJhbmRvbVBhcmFtIiwicGx1Z2luSWRzIiwibW9kdWxlIiwidCIsInJlcXVpcmUiLCJkIiwiZiIsIkEiLCJPIiwiSSIsIl8iLCJ5IiwidyIsImsiLCJTIiwieiIsIkMiLCJCIiwiRSIsIlIiLCJnbG9iYWwiLCJUIiwiRCIsIkYiLCJOIiwiVSIsIlAiLCJMIiwiWiIsIlciLCJNIiwiSCIsIkciLCJLIiwiWSIsIlgiLCJWIiwicSIsIkoiLCJQbHVnaW5Qcm9jZXNzb3IiLCJzZXR0aW5ncyIsInBsdWdpbk5hbWUiLCJwbHVnaW5WZXJzaW9uIiwiY2FjaGVkUGx1Z2luVXJsIiwiY2FjaGVkSW5mbyIsIm5ld1BsdWdpblVybCIsImV4cGlyeVRpbWUiLCJjYWNoZUluZm8iLCJkb3dubG9hZFVybCIsIk5vdGljZSIsInBsdWdpblRhcmdldEZvbGRlclBhdGgiLCJub3JtYWxpemVQYXRoIiwiYWRhcHRlciIsInppcCIsIkpTWmlwLmxvYWRBc3luYyIsInJlbGF0aXZlUGF0aCIsImZpbGUiLCJhYnNvbHV0ZVBhdGgiLCJkaXJlY3RvcnkiLCJfc2ZjX21haW4kNCIsImRvd25sb2FkQ291bnQiLCJwa21lclZlciIsInJlbW90ZVZlcnNpb24iLCJhcGkiLCJwbHVnaW5Qcm9jZXNzb3IiLCJuZXdJc0xvZ2luIiwiaXNVcGRhdGUiLCJoYW5kbGVVcGRhdGVQbHVnaW4iLCJoYW5kbGVSZWZyZXNoUGx1Z2luIiwiVGhlbWVQcm9jZXNzb3IiLCJ0aGVtZVZlcnNpb24iLCJjYWNoZWRUaGVtZVVybCIsIm5ld1RoZW1lVXJsIiwidGhlbWVUYXJnZXRGb2xkZXJQYXRoIiwiX2hvaXN0ZWRfMzMiLCJfaG9pc3RlZF8zNCIsIl9ob2lzdGVkXzM1IiwiX2hvaXN0ZWRfMzYiLCJfaG9pc3RlZF8zNyIsIl9ob2lzdGVkXzM4IiwiX3NmY19tYWluJDMiLCJwbHVnaW5WZXJzaW9ucyIsIm9yaWdpblZlcnNpb24iLCJzaG93TW9kYWwiLCJBbGxQbHVnaW5MaXN0IiwicGVyUGFnZUNvdW50IiwiY3VycmVudFBhZ2UiLCJpc0Rvd25sb2FkIiwiZmlsdGVyRGV2aWNlT3B0aW9uIiwiaXNDbG9zZSIsImFwaUVycm9yIiwidG90YWxQbHVnaW5zIiwidG90YWxQYWdlcyIsImlzTG9hZGluZyIsInBsdWdpblRhZ3MiLCJpbnN0YWxsZWRQbHVnaW5zQ291bnQiLCJvdXRkYXRlZFBsdWdpbnNDb3VudCIsIm5lZWRzTG9hZCIsImNvdW50SW5zdGFsbGVkUGx1Z2lucyIsImNvdW50VXBkYXRlZFBsdWdpbnMiLCJoYW5kbGVBcGlFcnJvciIsImNvbnRleHRNZXNzYWdlIiwiZGV0YWlsIiwibG9hZERhdGFJZk5lZWRlZCIsImxvYWRBbGxQbHVnaW5zIiwicGttZXJEb2NzIiwicGx1Z2lucyIsInRvdGFsIiwicGFnZXMiLCJtYXRjaGluZ1BrbWVyRG9jIiwibWF0Y2hpbmdSZWFkbWUiLCJwbHVnaW5NYW5pZmVzdHMiLCJjbG9zZU5vdGlmaWNhdGlvbiIsInNvcnRCeURvd25sb2FkQ291bnQiLCJzZWFyY2hUZXh0UmVmIiwiYWN0aXZlQ2F0ZWdvcnkiLCJzZWxlY3RQbHVnaW4iLCJzZWxlY3RQbHVnaW5WZXJzaW9uIiwic2VsZWN0UGx1Z2luU2NvdXJjZSIsInJlbG9hZFN0YXR1c0JhckhhbmRsZXIiLCJsb2NhbEluc3RhbGxlZElkcyIsIm91dGRhdGVkUGx1Z2lucyIsIm1hbmlmZXN0IiwiaGFuZGxlRG93bmxvYWRQbHVnaW4iLCJjYW5jZWxNb2RhbCIsImhhbmRsZVVwZGF0ZUFjdGl2ZUNhdGVnb3J5IiwiaGFuZGxlU2VhcmNoIiwiZmV0Y2hQbHVnaW5WZXJzaW9ucyIsInZlcnNpb25zIiwiaGFuZGxlU2hvd1BsdWdpbk1vZGFsIiwiYWN0aW9uIiwiZXh0cmFjdENhdGVnb3J5RnJvbUhhc2giLCJoYXNoIiwicGttZXJTaXplIiwibG9hZFBsdWdpblRhZ3MiLCJyZXNwb25zZURhdGEiLCJtc2ciLCJjdXJyZW50VGFiIiwiaGFuZGxlV2luZG93UmVzaXplIiwicGFyc2VkRGF0YSIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwiZmlsdGVyZWRMaXN0IiwiY29tcHV0ZWRUb3RhbFBhZ2VzIiwiZmlsdGVyZWRCeUNhdGVnb3J5IiwiaGFuZGxlU29ydCIsInNvcnRCeVBrbWVyRG93bmxvYWRDb3VudCIsInNvcnRCeVVwZGF0ZVRpbWUiLCJzb3J0QnlGaWxlbmFtZSIsInNvcnRCeUluc3RhbGxlZCIsImluc3RhbGxlZFBsdWdpbklkcyIsInNvcnRCeVVwZGF0ZWQiLCJkaXNwbGF5ZWRQbHVnaW5zIiwidmFsaWRQbHVnaW5MaXN0IiwiaGFuZGxlUGFnZUNoYW5nZSIsInRpbWVvdXRQcm9taXNlIiwicmVqZWN0IiwicGttZXJEb2NzUHJvbWlzZSIsImxvYWRBbGxUaGVtZXMiLCJ0aGVtZXMiLCJ0aGVtZSIsInRoZW1lTWFuaWZlc3RzIiwibmV3VGFiIiwibG9hZFRoZW1lRGF0YSIsInRoZW1lUHJvY2Vzc29yIiwic2VsZWN0VGhlbWVOYW1lIiwic2VsZWN0VGhlbWVWZXJzaW9uIiwiaGFuZGxlU2hvd1RoZW1lTW9kYWwiLCJoYW5kbGVEb3dubG9hZFRoZW1lIiwiaGFuZGxlVXBkYXRlVGhlbWUiLCJIZWFkIiwiX3ZNb2RlbFNlbGVjdCIsIl92TW9kZWxUZXh0IiwiVG9vbGJhciIsIl9jcmVhdGVTdGF0aWNWTm9kZSIsIl9jcmVhdGVCbG9jayIsIlBsdWdpbkNhcmQiLCJUaGVtZUNhcmQiLCJfc2ZjX21haW4kMiIsInRhZ3NBcnJheSIsImNhdGVnb3JpZXMiLCJjYXRlQXJyYXkiLCJtb2RlcyIsIm1vZGUiLCJ1bmlxdWVDYXRlZ29yaWVzIiwiX3NmY19tYWluJDEiLCJ0aGVtZVZlcnNpb25zIiwiQWxsVGhlbWVMaXN0IiwiY291bnRJbnN0YWxsZWRUaGVtZSIsImNvdW50VXBkYXRlZFRoZW1lIiwic2VsZWN0VGhlbWUiLCJoYW5kbGVTZXRTZWFyY2hUZXh0IiwiZmV0Y2hUaGVtZVZlcnNpb25zIiwiaGlkZU1vZGFsIiwidG90YWxQYWdlQ291bnQiLCJzaG93UmVhZE1vcmVCdXR0b24iLCJkaXNwbGF5ZWRUaGVtZXMiLCJSZXN1bHRUaGVtZXMiLCJ2YWxpZFRoZW1lTGlzdCIsInJlYWRNb3JlIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwidGhlbWVzVG9BZGQiLCJUaGVtZVRvb2xiYXIiLCJfc2ZjX21haW4iLCJpc09wZW5VcGRhdGVUYWIiLCJzd2l0Y2hUYWIiLCJ0YWIiLCJfU3VzcGVuc2UiLCJfd2l0aEN0eCIsIlBsdWdpbk1hcmtldCIsIlRoZW1lTWFya2V0IiwiREVGQVVMVF9WSUVXX1RZUEUiLCJQa21kZXJEb3dubG9hZGVyVmlldyIsIkl0ZW1WaWV3IiwibGVhZiIsImNvbnRlbnRFbCIsIlBsdWdpbk1hcmtldFZpZXciLCJQa21lckxvZ2luTW9kZWwiLCJzZXR0aW5nVGFiIiwicmVtb3RlIiwiUmVtb3RlQnJvd3NlcldpbmRvdyIsIlBrbWVyU2V0dGluZ1RhYiIsIlBsdWdpblNldHRpbmdUYWIiLCJjb250YWluZXJFbCIsIlBsYXRmb3JtIiwiU2V0dGluZyIsImJ1dHRvbiIsImRpdiIsIlBrbWVyTG9naW5Nb2RhbCIsIlBsdWdpblN0YXRpc3RpY3MkMSIsImluc3RhbGxlZENvdW50IiwidXBkYXRlZENvdW50IiwiUGx1Z2luU3RhdGlzdGljcyIsInRpbnN0YWxsZWRDb3VudCIsInR1cGRhdGVkQ291bnQiLCJERUZBVUxUX1NFVFRJTkdTIiwiUGttZXJQbHVnaW4iLCJQbHVnaW4iLCJwYXJhbXMiLCJ0aGVtZUlEIiwicGx1Z2luU3RhdGlzdGljcyIsInRoZW1lU3RhdGlzdGljcyIsIlRoZW1lU3RhdGlzdGljcyIsInBrbWVyRG93bmxvYWRlckZvdW5kIl0sIm1hcHBpbmdzIjoiMENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQU1BLFNBQVNBLEdBQVFDLEVBQUssQ0FDcEIsTUFBTUMsRUFBc0IsT0FBTyxPQUFPLElBQUksRUFDOUMsVUFBV0MsS0FBT0YsRUFBSSxNQUFNLEdBQUcsRUFBR0MsRUFBSUMsQ0FBRyxFQUFJLEVB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UyxFQUFrQixJQUFJQyxHQUFnQixLQUFLLElBQUssS0FBSyxRQUFRLEVBRTdELENBQUUsZUFBQVosRUFBZ0IsYUFBQUMsQ0FBQSxFQUFpQixNQUFNUyxFQUFpQixnQkFBZ0IsRUFDMUUsQ0FBRSxnQkFBQVAsRUFBaUIsY0FBQUMsQ0FBQSxFQUFrQixNQUFNTyxFQUFnQixlQUFlLEVBRTVFLEdBQUFWLEVBQWUsR0FBS0csRUFBZ0IsR0FLcEMsR0FKSyxLQUFBLGdCQUFnQixhQUFhLHNCQUF1QixLQUFLLEVBQ3pELEtBQUEsZ0JBQWdCLGFBQWEsYUFBYywwQkFBNEJILEVBQWUsSUFBTUQsRUFBaUIsYUFBZUksRUFBZ0IsSUFBTUQsQ0FBZSxFQUN0SyxLQUFLLGdCQUFnQixVQUFZO0FBQUEsK09BRTdCM2tCLElBQVUsWUFDVixHQUFJeWtCLEVBQWUsRUFBRyxDQUNsQixNQUFNeDVCLEVBQU8sQ0FDVCxLQUFNLFVBQ04sTUFBT3c1QixDQUFBLEVBR1gsS0FBSyxTQUFTLEtBQUssVUFBVXg1QixDQUFJLENBQUMsQ0FBQSxLQUdqQyxDQUNELE1BQU1BLEVBQU8sQ0FDVCxLQUFNLFdBQ04sTUFBTzI1QixDQUFBLEVBR1gsS0FBSyxTQUFTLEtBQUssVUFBVTM1QixDQUFJLENBQUMsQ0FFdEMsT0FHSixLQUFLLGdCQUFnQixVQUFZLGdoQkFDNUIsS0FBQSxnQkFBZ0IsYUFBYSxhQUFjLDBCQUE0Qnc1QixFQUFlLElBQU1ELEVBQWlCLGFBQWVJLEVBQWdCLElBQU1ELENBQWUsRUFDbEsza0IsSUFBVSxhQUNWLEtBQUssU0FBUyxFQUFFLENBRTVCLENBQ0EsU0FBU2pWLEVBQWUsQ0FDcEIsSUFBSXM2QixFQUF1QixHQUUzQixLQUFLLElBQUksVUFBVSxpQkFBa0I3QixHQUFjLENBQzNDLEdBQUEsQ0FFQSxHQUFJQSxFQUFLLGVBQWUsT0FBUyxtQkFBb0IsQ0FDMUI2QixFQUFBLEdBQ1YsYUFBQSxRQUFRLG1CQUFvQnQ2QixDQUFLLEVBQzlDLFdBQVcsSUFBTSxDQUNSLEtBQUEsSUFBSSxVQUFVLGNBQWN5NEIsQ0FBSSxFQUVoQyxLQUFBLElBQUksVUFBVSxXQUFXLFlBQVksR0FFM0MsR0FBRyxFQUVOLE1BQ0osUUFDSzFzQyxFQUFPLENBRUosUUFBQSxNQUFNLHdDQUF5Q0EsQ0FBSyxDQUNoRSxDQUFBLENBQ0gsRUFHSXV1QyxJQUVZLGFBQUEsUUFBUSxtQkFBb0J0NkIsQ0FBSyxFQUM5QyxXQUFXLElBQU0sQ0FDUixLQUFBLElBQUksV0FBVyxXQUFXLGFBQWEsQ0FBRSxPQUFRLEdBQU0sS0FBTXM0QixFQUFtQixDQUFBLEdBRXRGLEdBQUcsRUFHZCxDQUNKIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsOF19