@ditojs/admin 1.24.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- (function(v,V){typeof exports=="object"&&typeof module<"u"?module.exports=V(require("vue"),require("vue-js-modal"),require("vue-router"),require("vue-notification"),require("@ditojs/utils"),require("nanoid"),require("vuedraggable"),require("codeflask"),require("tinycolor2"),require("vue-color"),require("tiptap"),require("tiptap-commands"),require("tiptap-extensions"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-js-modal","vue-router","vue-notification","@ditojs/utils","nanoid","vuedraggable","codeflask","tinycolor2","vue-color","tiptap","tiptap-commands","tiptap-extensions","vue-multiselect","vue-upload-component","filesize-parser","filesize"],V):(v=typeof globalThis<"u"?globalThis:v||self,v["dito-admin"]=V(v.vue,v["vue-js-modal"],v["vue-router"],v["vue-notification"],v["@ditojs/utils"],v.nanoid,v.vuedraggable,v.codeflask,v.tinycolor2,v["vue-color"],v.tiptap,v["tiptap-commands"],v["tiptap-extensions"],v["vue-multiselect"],v["vue-upload-component"],v["filesize-parser"],v.filesize))})(this,function(v,V,L,Ls,o,Ms,nt,qs,at,Is,W,As,F,Ns,zs,Us,Hs){"use strict";var Uu=Object.defineProperty;var Hu=(v,V,L)=>V in v?Uu(v,V,{enumerable:!0,configurable:!0,writable:!0,value:L}):v[V]=L;var Ft=(v,V,L)=>(Hu(v,typeof V!="symbol"?V+"":V,L),L);const jt={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function j(t,e){return t?`${t}/${e}`:e}function Ws(t){const e=o.parseDataPath(t);return e==null||e.pop(),e}function it(t,e=!1){return e?Ws(t):o.parseDataPath(t)}function Ys(t,e=!1){return o.normalizeDataPath(it(t,e))}function Vt(t,e=!1){const s=it(t,e);if(s){let n;do n=s.pop();while(n!=null&&o.isInteger(+n));if(n!=null)return s}return null}function Ks(t,e=!1){return o.normalizeDataPath(Vt(t,e))}function rt(t,e,s=!1){const n=it(e,s);return n?o.getValueAtDataPath(t,n):null}function ot(t,e,s=!1){const n=Vt(e,s);return n?o.getValueAtDataPath(t,n):null}function Et(t){const e=o.parseDataPath(t);return e[e.length-1]}function Js(t){const e=Et(t);return e==null||o.isInteger(+e)?null:e}function lt(t){const e=Et(t),s=e==null?null:+e;return o.isInteger(s)?s:null}let Qs=0;function Xs(t,e="id"){t[e]=`@${++Qs}`}function Y(t){return/^@/.test(t)}function Gs(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const ct=new WeakMap;function w(t,e,s){const n=ct.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:o.isFunction(s)?s():s}function Zs(t,e,s){ct.get(t)[e]=s}class S{constructor(e,s){s=s?o.isFunction(s)?s():{...s}:{},s.nested??(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);ct.set(this,n)}static get(e,s){return s instanceof S?s:new S(e,s)}get nested(){return w(this,"nested",!0)}get value(){return w(this,"value",void 0)}get dataPath(){return w(this,"dataPath","")}get name(){return w(this,"name",()=>Js(this.dataPath))}get index(){return w(this,"index",()=>lt(this.dataPath))}get itemDataPath(){return Ys(this.dataPath,this.nested)}get parentItemDataPath(){return Ks(this.dataPath,this.nested)}get itemIndex(){return lt(this.itemDataPath)}get parentItemIndex(){return lt(this.parentItemDataPath)}get item(){return w(this,"data",()=>rt(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=ot(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return w(this,"rootData",null)}get processedItem(){return w(this,"processedData",null)}get clipboardItem(){return w(this,"clipboardData",null)}get user(){return w(this,"user",null)}get api(){return w(this,"api",null)}get views(){return w(this,"views",null)}get itemLabel(){return w(this,"itemLabel",null)}get formLabel(){return w(this,"formLabel",null)}get component(){return w(this,"component",null)}get schemaComponent(){return w(this,"schemaComponent",null)}get formComponent(){return w(this,"formComponent",null)}get viewComponent(){return w(this,"viewComponent",null)}get dialogComponent(){return w(this,"dialogComponent",null)}get panelComponent(){return w(this,"panelComponent",null)}get resourceComponent(){return w(this,"resourceComponent",null)}get sourceComponent(){return w(this,"sourceComponent",null)}get option(){return w(this,"option",void 0)}get options(){return w(this,"options",void 0)}get query(){return w(this,"query",void 0)}get error(){return w(this,"error",void 0)}get wasNotified(){return w(this,"wasNotified",!1)}get request(){return e=>this.component.request(e)}get format(){return(e,s)=>this.component.format(e,s)}get navigate(){return e=>this.component.navigate(e)}get download(){return e=>this.component.download(e)}get getResourceUrl(){return e=>this.component.getResourceUrl(e)}get notify(){return e=>{this.component.notify(e),Zs(this,"wasNotified",!0)}}}const tn={data(){return{$events:null}},methods:{on(t,e){if(o.isArray(t))for(const s of t)this.on(s,e);else if(o.isPlainObject(t))for(const s in t)this.on(s,t[s]);else{const s=this.$events||(this.$events=Object.create(null)),{callbacks:n}=s[t]||(s[t]={callbacks:[],queue:[]});n.push(e)}return this},once(t,e){const s=(...n)=>(this.off(t,s),e.apply(this,n));return s.callback=e,this.on(t,s)},off(t,e){var s;if(!arguments.length)delete this.$events;else if(o.isArray(t))for(const n of t)this.off(n,e);else if(o.isPlainObject(t))for(const n in t)this.off(n,t[n]);else{const n=(s=this.$events)==null?void 0:s[t];if(n)if(!e)delete this.$events[t];else{const{callbacks:a}=n,i=a.findIndex(r=>r===e||r.callback===e);i!==-1&&a.splice(i,1)}}return this},emit(t,...e){var n;const s=(n=this.$events)==null?void 0:n[t];if(s){const{queue:a,callbacks:i}=s;return new Promise(r=>{const l=async()=>{const c=a.shift();if(c){let u;for(const d of i)try{const h=await d.apply(this,c.args);h!==void 0&&(u=h)}catch(h){console.error(`Error during event handler for '${t}':`,h)}c.resolve(u),l()}};a.push({args:e,resolve:r}),a.length===1&&l()})}},hasListeners(t){var e;if(o.isArray(t)){for(const s of t)if(!this.hasListeners(s))return!1;return t.length>0}else return!!((e=this.$events)!=null&&e[t])},delegate(t,e){if(e)if(o.isArray(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}},ut={Boolean:o.isBoolean,Number:o.isNumber,String:o.isString,Date:o.isDate,Array:o.isArray,Object:o.isObject,RegExp:o.isRegExp,Function:o.isFunction},en={Boolean:t=>!!t,Number:t=>+t,String:t=>String(t),Date:t=>o.isDate(t)?t:new Date(t),Array:t=>o.isArray(t)?t:o.isString(t)?t.split(","):o.asArray(t),Object:t=>o.isObject(t)?t:t===!0?{}:null,RegExp:t=>o.isRegExp(t)?t:new RegExp(t)};function dt(t,e){var s;if(t&&e!=null){for(const n of t)if((s=ut[n.name])!=null&&s.call(ut,e))return!0}return!1}function sn(t,e){const s=t&&en[t.name||t];return s?s(e):e}function Rt(t){return!!E(t.resource)}function E(t,e={}){var a;const{parent:s,...n}=e;return t=o.isObject(t)?{...n,...t}:o.isString(t)?{...n,path:t}:null,t&&s!==void 0&&t.parent===void 0&&!((a=t.path)!=null&&a.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function ht(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?{type:"member",...o.pickBy(e,(s,n)=>["method","path","parent"].includes(n)),id:`${t}`}:null}const pt={mixins:[tn],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:jt,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return jt.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new S(this,{nested:!1})},rootComponent(){return this.$root.$children[0]},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const t=this.routeComponent;return t!=null&&t.isForm?t:null},viewComponent(){const t=this.routeComponent;return t!=null&&t.isView?t:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var t;return(t=this.schemaComponent)==null?void 0:t.$parent.schemaComponent},parentRouteComponent(){var t;return(t=this.routeComponent)==null?void 0:t.$parent.routeComponent},parentFormComponent(){var t;return(t=this.formComponent)==null?void 0:t.$parent.formComponent},rootData(){var t;return(t=this.dataComponent)==null?void 0:t.data}},beforeCreate(){this.$uid=++nn},methods:{getStore(t){return this.store[t]},setStore(t,e){return this.$set(this.store,t,e)},getChildStore(t){return this.getStore(t)||this.setStore(t,{})},getSchemaValue(t,{type:e,default:s,schema:n=this.schema,callback:a=!0}={}){const i=e&&o.asArray(e);let r=n?o.isArray(t)?o.getValueAtDataPath(n,t,()=>{}):n[t]:void 0;if(r===void 0&&s!==void 0)return a&&o.isFunction(s)&&!dt(i,s)&&(s=s.call(this,this.context)),s;if(dt(i,r))return r;if(a&&o.isFunction(r)&&(r=r.call(this,this.context)),i&&r!=null&&!dt(i,r))for(const l of i){const c=sn(l,r);if(c!==r)return c}return r},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||o.labelize(e||t.name):o.labelize(e)||""},labelize:o.labelize,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||o.labelize(s)}},getDragOptions(t,e=!1){return{animation:150,disabled:!t,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:e}},getQueryLink(t){return{query:t,hash:this.$route.hash}},shouldRender(t=null){return!!t&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:t})},showDialog({components:t,buttons:e,data:s,settings:n={width:480,height:"auto",clickToClose:!1}}){return new Promise((a,i)=>{this.$modal.show(b.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:i}},n)})},getResourcePath(t){var e;return t=E(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(E(t))},getResourceUrl(t){const e=this.getResourcePath(t);return e?this.api.getApiUrl({url:e,query:t.query}):null},async sendRequest({method:t,url:e,resource:s,query:n,data:a,internal:i}){e||(e=this.getResourcePath(s)),t||(t=s==null?void 0:s.method);const r=!i&&this.api.isApiUrl(e);r&&await this.rootComponent.ensureUser();const l=await this.api.request({method:t,url:e,data:a,query:n});return r&&t==="patch"&&o.equals(s,ht(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},request({cache:t,...e}){const s=t&&{global:this.appState,local:this.dataComponent}[t],n=s==null?void 0:s.loadCache,a=n&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.query||e.params||"")} ${JSON.stringify(e.data||"")}`;if(n&&a in n)return n[a];const i=this.sendRequest(e).then(r=>r.data).catch(r=>{var c;const l=(c=r.response)==null?void 0:c.data;throw l?Object.assign(new Error(l.message),l):r});return n&&(n[a]=i),i},format(t,{locale:e=this.api.locale,defaults:s=this.api.formats,...n}={}){return o.format(t,{locale:e,defaults:s,...n})},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){o.isString(t)&&(t={url:t});const e=document.createElement("a");e.href=this.api.getApiUrl(t),e.download=t.filename??null;const{body:s}=document;s.appendChild(e),e.click(),s.removeChild(e)},notify(t){this.rootComponent.notify(t)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[t,e]of Object.entries(this.schema.methods||{}))o.isFunction(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=o.isFunction(e)?{get:e}:o.isObject(e)&&o.isFunction(e.get)?e:null;s?Object.defineProperty(this,t,s):console.error(`Invalid computed property definition: ${t}: ${e}`)}},setupEvents(){const{watch:t,events:e}=this.schema;if(t){const n=o.isFunction(t)?t.call(this):t;o.isObject(n)&&this.$nextTick(()=>{for(const[a,i]of Object.entries(n)){const r=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(r,i)}})}const s=(n,a,i)=>{o.isFunction(i)?this.on(o.hyphenate(a),i):console.error(`Invalid event definition: ${n}: ${i}`)};if(e)for(const[n,a]of Object.entries(e))s(n,n,a);for(const[n,a]of Object.entries(this.schema))/^on[A-Z]/.test(n)&&s(n,n.slice(2),a)},async emitEvent(t,{context:e=null,parent:s=null}={}){const n=this.hasListeners(t),a=s==null?void 0:s.hasListeners(t);if(n||a){["load","change"].includes(t)&&await this.$nextTick();const i=()=>e=S.get(this,e),r=n?await this.emit(t,i()):void 0;return a&&r!==!1&&s.emit(t,i()),r}},emitSchemaEvent(t,e){return this.schemaComponent.emitEvent(t,e)}}};let nn=0;const an=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:t=>o.isCreditCard(t),message:"is invalid"},decimals:{validate:(t,e)=>{const s=e==="*"?"+":`{1,${e}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${s})?$`).test(t)},message:(t,e)=>`must be numeric and may contain ${!e||e==="*"?"":e} decimal points`},domain:{validate:t=>o.isDomain(t),message:"is not a domain"},email:{validate:t=>o.isEmail(t),message:"must be a valid email"},hostname:{validate:t=>o.isHostname(t),message:"is not a host name"},integer:{validate:t=>o.isInteger(t),message:"must be whole number"},max:{validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},min:{validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},password:{validate:()=>!0},range:{validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},required:{validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},url:{validate:t=>o.isUrl(t),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),rn={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},computed:{events(){return{focus:()=>{this.isTouched=!0},blur:()=>{this.validate()},change:()=>{this.markDirty()},input:()=>{this.markDirty()}}}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(t=!0){let e=!0;t&&this.clearErrors();const{value:s}=this;for(const[n,a]of Object.entries(this.validations)){const i=an[n];if(i&&(i.nullish||s!=null)){const{validate:r,message:l}=i;if(!r(s,a,this.validations)&&(e=!1,t)){const c=o.isFunction(l)?l(s,a,this):l;this.addError(c,!0)}}}return t&&(this.isValidated=!0,this.isValid=e),e},verify(){return this.validate(!1)},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(t,e=!1){this.errors||(this.errors=[]),e&&(t=`The ${this.label||this.placeholder||this.name} field ${t}.`),this.errors.push(t),this.$emit("errors",this.errors)},showValidationErrors(t,e){this.errors=[];for(const{message:s}of t)this.addError(s,!0);return e&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function f(t,{type:e,default:s,get:n,set:a,callback:i=!0}={}){o.isString(t)&&t.includes(".")&&(t=o.parseDataPath(t));const r=o.normalizeDataPath(t);return{get(){const l=!n||n.length>0?this.overrides&&r in this.overrides?this.overrides[r]:this.getSchemaValue(t,{type:e,default:s,callback:i}):void 0;return n?n.call(this,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.$set(this.overrides,r,l))}}}function ft(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=o.isFunction(e)?e.call(this,this.context):e,this[t]=a,this.getStore(t)),s?s.call(this,a):a},set(a){(!n||(a=n.call(this,a))!==void 0)&&this.setStore(t,a)}}}const Tt=new WeakMap;let on=0;function ln(t,e){let s=Tt.get(t);return s||(s=e||`@${++on}`,Tt.set(t,s)),s}class cn{constructor(){Ft(this,"graph",{});Ft(this,"references",{})}set(e,s,n){e=o.parseDataPath(e);let a=this.graph;for(const i of e){const r=o.isInteger(+i)?"*":i;a=a[r]??(a[r]={})}a.$settings={...n,...a.$settings,...s}}addSource(e,s){this.set(e,{type:"source",schema:s},{related:!1})}setSourceRelated(e){this.set(e,{related:!0,reference:this.getReferencePrefix(e)})}addRelation(e,s,n){this.set(e,{type:"relation",schema:n,internal:!!s,reference:this.getReferencePrefix(s)})}getReferencePrefix(e){var s;return e?(s=this.references)[e]??(s[e]=Ms.nanoid(6)):null}flatten(){const e=s=>{const n=[];for(const[a,{$settings:i,...r}]of Object.entries(s)){i&&n.push([a,i]);for(const[l,c]of e(r))n.push([`${a}/${l}`,c])}return n};return e(this.graph)}process(e,s,{target:n}){const a=n==="clipboard";a&&delete s[e.idKey||"id"];for(const[i,r]of this.flatten()){const{type:l,schema:c,internal:u,related:d,reference:h}=r,m=l==="source",g=l==="relation";if(m||g&&u){const _=o.getValueAtDataPath(s,i,()=>null),y=a&&m&&!d,x=a&&(g&&u||m&&d);for(const P of o.asArray(_).flat()){const $=m&&c.idKey||g&&c.relateBy||"id";let D=P==null?void 0:P[$];if(D!=null&&(y&&delete P[$],x||Y(D))){Y(D)&&(D=D.slice(1));const k=a?$:m?"#id":"#ref",O=a?`@${D}`:h?`${h}-${D}`:D;P[k]=O,k!==$&&delete P[$]}}}}return s}}const Bt={},Lt={};function un(t,e){Bt[t]=e}function mt(t,e=!1){const s=Bt[t]||null;if(!s&&!e&&!Lt[t])throw Lt[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function Mt(t,e){const s=[...Object.values((t==null?void 0:t.tabs)||{}),t];for(const n of s)if(n){const a=e(n);if(a!==void 0)return a}}function qt(t,e){if(bt(t)){const s=e(t.component,t.name);if(s!==void 0)return s}else return Mt(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const i=e(a,n);if(i!==void 0)return i}})}function dn(t,e){return qt(t,(s,n)=>e(s,n)?!0:void 0)===!0}function K(t){return o.isObject(t)&&o.isString(t.type)}function hn(t){return K(t)&&t.type==="form"}function It(t){return K(t)&&t.type==="view"}function At(t){return t.name||t.label||t.type}async function _t(t,e=!1){if(o.isFunction(t)&&(t=t()),o.isPromise(t)&&(t=await t),o.isModule(t)&&(t={...t},!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],n!=="default"&&(t.name=n)}}return t}async function gt(t,e=_t){let s=o.isFunction(t)?t():t;return s=await _t(s,!1),o.isArray(s)?s=Object.fromEntries(await Promise.all(s.map(async n=>{const a=await e(n,!0);return[a.name,a]}))):o.isObject(s)&&(s=Object.fromEntries(await Promise.all(Object.entries(s).map(async([n,a])=>{const i=await e(a,!0);return[n,i]})))),s}async function Nt(t){const{panels:e}=t;e&&(t.panels=await gt(e))}async function pn(t,e,s,n,a){const i=[];if(Ut(e,s,n),await Nt(s),It(s))bt(s)?await zt(e,s.component,n,i,0):await vt(e,s,i,1);else throw new Error(`Invalid view schema: '${At(s)}'`);a.push({path:`/${s.path}`,children:i,component:t,meta:{api:e,schema:s}})}function zt(t,e,s,n,a){var i,r;return e.level=a,(r=(i=R(e))==null?void 0:i.processSchema)==null?void 0:r.call(i,t,e,s,n,a)}function Ut(t,e,s){e.name=s,e.path||(e.path=t.normalizePath(s))}async function vt(t,e,s,n){const a=[];qt(e,(i,r)=>{a.push(zt(t,i,r,s,n))}),await Promise.all(a)}async function fn(t,e,s){let{form:n,forms:a,components:i}=e;a?a=e.forms=await gt(a,Ht):n?n=e.form=await Ht(n):i&&o.isObject(i)&&(n={components:i}),a||(a={default:n});const r=[];for(const l of Object.values(a))await vt(t,l,r,s+1);return r}async function Ht(t){if(t=await _t(t,!0),!hn(t))throw new Error(`Invalid form schema: '${At(t)}'`);return t&&await Nt(t),t}function M(t){return K(t)&&o.isObject(t.form||t.forms||t.components)}function mn(t){return K(t)&&Object.keys((t==null?void 0:t.forms)||{}).length>1}function bt(t){return It(t)&&o.isObject(t.component)}function yt(t,e){const{view:s}=t,n=s&&e.views[s];return n?M(n)?n:Mt(n,a=>{var r;const i=(r=a.components)==null?void 0:r[s];if(M(i))return i}):null}function _n(t,e){const s=yt(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function A(t,e,s){const n=yt(t,e);if(n)t=n;else if(t.view)throw new Error(`Unknown view: '${t.view}'`);let{form:a,forms:i,components:r,compact:l}=t;if(!a&&!i)if(r)a={components:r,compact:l};else return{};return i||(i={default:a}),Object.fromEntries(Object.entries(i).map(([c,u])=>(o.isFunction(u.components)&&(u={...u,components:u.components(e)}),[c,(s==null?void 0:s(u))??u])))}function Wt(t,e){return t[e==null?void 0:e.type]||t.default||null}function $t(t,e,s){return Wt(A(t,s),e)}function gn(t){return t.label!==!1}function Yt(t){return!!t.compact}function Ct(t){return!!(t.inlined||t.components)}function Kt(t){var e;return!!(t.nested||((e=R(t))==null?void 0:e.defaultNested)===!0)}function vn(t){var e;return!!((e=R(t))!=null&&e.omitPadding)}function Jt(t){var n;const e=t.default,s=e!==void 0?e:(n=R(t))==null?void 0:n.defaultValue;return o.isFunction(s)?s(t):o.clone(s)}function Qt(t){var s;const e=R(t);return!!(e!=null&&e.excludeValue||(s=e==null?void 0:e.ignoreMissingValue)!=null&&s.call(e,t))}function bn(t){const e=s=>Object.values(s||{}).some(gn);return e(t.components)||Object.values(t.tabs||{}).some(e)}function Xt(t,e={},s){return J(t,e,null,null,(i,r,l)=>{!(l in r)&&!Qt(i)&&(r[l]=Jt(i))},null,{component:s,rootData:e})}function Gt(t,e,s,n,{component:a=null,rootData:i=a==null?void 0:a.rootData}={}){const{compute:r}=t;if(r){const l=r(S.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:i}));l!==void 0&&v.set(e,s,l)}return!(s in e)&&!Qt(t)&&v.set(e,s,Jt(t)),e[s]}function Zt(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:i}=t,r=e[a];return r!==void 0&&(n[a]=r),mn(t)&&(n.type=e.type),i&&(n[i]=e[i]),n}else return{...e}}function yn(t,e,s,n,{component:a,schemaOnly:i,target:r}={}){const l={component:a,schemaOnly:i,target:r,rootData:s},c=Zt(e,s,l),u=new cn;return J(t,s,n,c,(m,g,_,y,x)=>{let P=Gt(m,g,_,y,l);if(o.isArray(P)){const{wrapPrimitives:$,orderKey:D,idKey:k="id"}=m;$?P=P.map(O=>({[$]:O})):P=[...P],D&&r==="clipboard"&&P.sort((O,B)=>{const T=O==null?void 0:O[k],kt=B==null?void 0:B[k];return T==null||Y(T)?1:kt==null||Y(kt)?-1:T-kt})}x[_]=P},(m,g,_,y,x)=>{const{wrapPrimitives:P,exclude:$,process:D}=m;let k=x[_];const O=R(m),B=()=>S.get(a,{value:k,name:_,data:g,dataPath:y,rootData:l.rootData,processedData:x});if(P&&o.isArray(k)&&(k=k.map(T=>T[P])),D&&(k=D(B())),O!=null&&O.excludeValue||$===!0||o.isFunction($)&&$(B()))delete x[_];else{const T=O==null?void 0:O.processValue;T&&(k=T(m,k,y,u)),x[_]=k}},l),u.process(e,c,l)}function J(t,e,s,n,a,i,r){const l=c=>{const u=(d,h)=>d!=null?j(d,h):null;if(c)for(const[d,h]of Object.entries(c))if(!Kt(h))J(h,e,s,n,a,i,r);else{const m=u(s,d),g=(y,x=null)=>{var B;const P=x!==null?u(m,x):m,$=S.get(r.component,{data:e,value:y,dataPath:P,index:x,rootData:r.rootData}),k=(((B=R(h))==null?void 0:B.getFormSchemasForProcessing)||A)(h,$),O=Wt(k,y);if(O){const T=n?Zt(h,y,r):null;return J(O,y,P,T,a,i,r)}else return{...y}};a==null||a(h,e,d,m,n);let _=n?n[d]:e[d];_!=null&&M(h)&&(o.isArray(_)?_=n?_.map(g):_.forEach(g):_=g(_),n&&(n[d]=_)),i==null||i(h,e,d,m,n)}};if(l(t.components),t.tabs)for(const c of Object.values(t.tabs))l(c.components);for(const c of ae(t,s))l(c.schema.components);return n||e}function q(t,e){const s=(n,a)=>n.length>0?n.reduce((i,r)=>{const l=a(r);return l&&(i[l.name]=l&&e?{...e,...l}:l),i},{}):null;return o.isArray(t)?s(t,n=>o.isObject(n)?n:{name:o.camelize(n,!1)}):o.isObject(t)?s(Object.entries(t),([n,a])=>o.isObject(a)?{name:n,...a}:o.isString(a)?{name:n,label:a}:null):null}function Q(t){return q(t,{type:"button"})}function te(t){return o.isObject(t)?t.type:t}function R(t){var e;return((e=mt(te(t),!0))==null?void 0:e.options)??null}function ee(t){var e,s;return((s=(e=R(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,te(t)))??null}function se(t,e,s){return t?{schema:t,dataPath:t.name?j(e,t.name):e,tabComponent:s}:null}function ne(t,e,s,n=[]){if(t)for(const[a,i]of Object.entries(t)){const r=se(i,j(e,a),s);r&&n.push(r)}return n}function ae(t,e,s=null,n=null){var r,l;const a=(l=(r=R(t))==null?void 0:r.getPanelSchema)==null?void 0:l.call(r,t,e,s),i=a?[se(a,e,n)]:[];return ne(t.panels,e,n,i),i}function N(t){return ee(t)==="object"}function z(t){return ee(t)==="list"}function ie(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function $n(t,e){return ln(e,ie(t,e))}const X={mixins:[rn],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},component(){return this.resolveTypeComponent(this.schema.component)},context(){return new S(this,{nested:this.nested})},value:{get(){const t=Gt(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new S(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new S(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return rt(this.rootItem,this.dataPath,this.nested)},parentItem(){return ot(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return rt(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:f("label",{type:[String,Boolean],get(t){return o.isString(t)?t:t!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:f("width",{type:[String,Number]}),visible:f("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),exclude:f("exclude",{type:Boolean,default:!1}),required:f("required",{type:Boolean,default:!1}),readonly:f("readonly",{type:Boolean,default:!1}),autofocus:f("autofocus",{type:Boolean,default:!1}),clearable:f("clearable",{type:Boolean,default:!1}),placeholder:f("placeholder",{type:String}),autocomplete:f("autocomplete",{type:String}),attributes(){const{nativeField:t,textField:e}=this.$options,s={disabled:this.disabled};return t&&(s.name=this.name,this.label&&(s.title=this.label),s.readonly=this.readonly,s.autofocus=this.autofocus,e&&(s.placeholder=this.placeholder,s.autocomplete=this.autocomplete)),s},listeners(){const t=this.getListeners(),{events:e={}}=this.schema;if(e)for(const s of Object.keys(e))t[s]||(t[s]=()=>this.emitEvent(s));return t},validations(){const t={...this.getValidations()};this.required&&(t.required=!0);for(const[e,s]of Object.entries(this.schema.rules||{}))s===void 0?delete t[e]:t[e]=s;return t},providesData(){return!1},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeDestroy(){this._register(!1)},methods:{_register(t){this.nested&&(this.schemaComponent._registerComponent(this,t),this[t?"on":"off"](this.events))},getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onInput,change:this.onChange}},getValidations(){return null},focusElement(){const[t]=o.asArray(this.$refs.element);t&&this.$nextTick(()=>{var e,s;t.focus(),this.disabled&&((s=(e=t.$el||t).scrollIntoView)==null||s.call(e))})},focus(){var t;this.schemaComponent.focus(),(t=this.tabComponent)==null||t.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.emitEvent("focus")},onBlur(){this.focused=!1,this.emitEvent("blur")},onInput(){this.emitEvent("input")},onChange(){this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}},G={},b=v.extend({components:G,mixins:[pt],methods:{getTypeComponent:mt,resolveComponent(t,e=[]){return t&&(async()=>{let s=o.isFunction(t)?await t():o.isPromise(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=G,s})},resolveDitoComponent(t){return this.resolveComponent(t,[pt])},resolveTypeComponent(t){return this.resolveComponent(t,[pt,X])}}});b.component=function(t,e){if(e){e={name:t,...e};const s=this.extend(e);return G[t]=s,s}else return G[t]||v.component(t)};class Cn{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}const re={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(t,e){const{schemaComponents:s}=this;e?s.push(t):s.splice(s.indexOf(t),1)}}},oe={mixins:[re],computed:{errors(){return this.schemaComponents.reduce((t,{errors:e})=>e&&t?t.concat(e):e,null)},isTouched(){return this.schemaComponents.some(t=>t.isTouched)},isDirty(){return this.schemaComponents.some(t=>t.isDirty)},isValid(){return this.schemaComponents.every(t=>t.isValid)},isValidated(){return this.schemaComponents.every(t=>t.isValid)}},methods:{validateAll(t,e=!0){return this.schemaComponents.every(s=>s.validateAll(t,e))},verifyAll(t){return this.schemaComponents.every(e=>e.verifyAll(t))},resetValidation(){this.schemaComponents.forEach(t=>t.resetValidation())},clearErrors(){this.schemaComponents.forEach(t=>t.clearErrors())},showValidationErrors(t,e){this.schemaComponents.forEach(s=>s.showValidationErrors(t,e))}}},le={mixins:[oe],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(t,e,s){this.beforeRouteChange(t,e,s)},beforeRouteLeave(t,e,s){this.beforeRouteChange(t,e,s)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeRecord(){return this.$route.matched[this.$vnode.data.routerViewDepth]},isLastRoute(){const{matched:t}=this.$route;return this.routeRecord===t[t.length-1]},isLastUnnestedRoute(){const{matched:t}=this.$route;for(let e=t.length-1;e>=0;e--){const s=t[e];if(!s.meta.nested)return this.routeRecord===s}return!1},isNestedRoute(){return this.meta.nested},meta(){var t;return(t=this.routeRecord)==null?void 0:t.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:t}=this.schema||{};return t||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var t;return this.$route.params[(t=this.meta)==null?void 0:t.param]||null},doesMutate(){return!1}},created(){this.appState.routeComponents.push(this)},destroyed(){const{routeComponents:t}=this.appState;t.splice(t.indexOf(this),1)},methods:{beforeRouteChange(t,e,s){let n=!0;e.path.startsWith(this.path)&&!t.path.startsWith(this.path)&&e.path!==t.path&&(this.isFullRouteChange(t,e)||t.path.length<=e.path.length)&&(this.doesMutate?n=this.isValidated||this.validateAll():this.isDirty&&(n=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),s(n)},getRoutePath(t){return this.$route.path.split("/").slice(0,t.split("/").length).join("/")},getChildPath(t){return`${this.path}/${t}`},isFullRouteChange(t,e){const s=this.path.match(/^(\/[^/]*)/)[1];return!o.getCommonPrefix(t.path,e.path).startsWith(s)}}};var wn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isLastRoute?t.shouldRender(t.viewSchema)?s("div",{staticClass:"dito-view dito-scroll-parent",attrs:{"data-resource":t.sourceSchema.path}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.viewSchema,data:t.data,meta:t.meta,store:t.getChildStore(t.name),disabled:t.isLoading,generateLabels:!1,menuHeader:!0}})],1):t._e():s("router-view",{key:t.name})},Pn=[];function p(t,e,s,n,a,i,r,l){var c=typeof t=="function"?t.options:t;e&&(c.render=e,c.staticRenderFns=s,c._compiled=!0),n&&(c.functional=!0),i&&(c._scopeId="data-v-"+i);var u;if(r?(u=function(m){m=m||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!m&&typeof __VUE_SSR_CONTEXT__<"u"&&(m=__VUE_SSR_CONTEXT__),a&&a.call(this,m),m&&m._registeredComponents&&m._registeredComponents.add(r)},c._ssrRegister=u):a&&(u=l?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),u)if(c.functional){c._injectStyles=u;var d=c.render;c.render=function(g,_){return u.call(_),d(g,_)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,u):[u]}return{exports:t,options:c}}const Sn=b.component("dito-view",{mixins:[le],provide(){return{$sourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.sourceComponent)||null},$resourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.resourceComponent)||null}}},data(){return{isView:!0,isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isSingleComponentView(){return bt(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{component:t,...e}=this.schema;return this.isSingleComponentView?{...e,components:{[e.name]:{name:e.name,label:!1,...t}}}:e},providesData(){return dn(this.viewSchema,t=>Rt(t))}},watch:{$route(t,e){this.isFullRouteChange(t,e)&&(this.isLoading=!1,this.data={})}},methods:{setData(t){this.data=t},getChildPath(t){return this.isSingleComponentView?this.path:`${this.path}/${t}`},setLoading(t){this.isLoading=!!t}}}),ce={};var Dn=p(Sn,wn,Pn,!1,xn,null,null,null);function xn(t){for(let e in ce)this[e]=ce[e]}const ue=function(){return Dn.exports}(),dd="";function Z(t,{year:e=(t==null?void 0:t.getFullYear())??0,month:s=(t==null?void 0:t.getMonth())??0,day:n=(t==null?void 0:t.getDate())??0,hour:a=(t==null?void 0:t.getHours())??0,minute:i=(t==null?void 0:t.getMinutes())??0,second:r=(t==null?void 0:t.getSeconds())??0,millisecond:l=(t==null?void 0:t.getMilliseconds())??0}={}){return new Date(e,s,n,a,i,r,l)}function tt(t,e){for(const s in e)t.addEventListener(s,e[s],!1);return{remove(){for(const s in e)t.removeEventListener(s,e[s],!1)}}}function On(t){return{37:"left",38:"up",39:"right",40:"down",13:"enter"}[t.keyCode]}function de(t){const e=On(t);return{hor:{left:-1,right:1}[e]||0,ver:{up:-1,down:1}[e]||0,enter:e==="enter"}}function he(t,e,s){const n=window.requestAnimationFrame||function(){return setTimeout(arguments[0],10)};if(s<=0)t.scrollTop=e;else{const i=(e-t.scrollTop)/s*10;n(()=>{t.scrollTop=t.scrollTop+i,t.scrollTop!==e&&he(t,e,s-10)})}}function kn(t,e,s){if(t.createTextRange){const n=t.createTextRange();n.collapse(!0),n.moveStart("character",e),n.moveEnd("character",s),n.select(),t.focus()}else t.setSelectionRange?(t.focus(),t.setSelectionRange(e,s)):"selectionStart"in t&&(t.selectionStart=e,t.selectionEnd=s,t.focus())}var Fn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-calendar"},[s("div",{staticClass:"dito-calendar-popup"},[s("div",{staticClass:"dito-calendar-inner"},[t.currentMode==="day"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev dito-calendar-step-year",on:{click:function(n){return t.stepYear(-1)}}}),s("a",{staticClass:"dito-calendar-step-prev dito-calendar-step-month",on:{click:function(n){return t.stepMonth(-1)}}}),s("span",[s("a",{staticClass:"dito-calendar-select-year",on:{click:function(n){return t.setMode("year")}}},[t._v(t._s(t.dateToString(t.currentValue,{year:1})))]),s("a",{staticClass:"dito-calendar-select-month",on:{click:function(n){return t.setMode("month")}}},[t._v(t._s(t.dateToString(t.currentValue,{month:1})))])]),s("a",{staticClass:"dito-calendar-step-next dito-calendar-step-month",on:{click:function(n){return t.stepMonth(1)}}}),s("a",{staticClass:"dito-calendar-step-next dito-calendar-step-year",on:{click:function(n){return t.stepYear(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-weekdays"},t._l(t.weekdayNames,function(n){return s("span",[t._v(t._s(n.short))])}),0),s("div",{staticClass:"dito-calendar-dates"},t._l(t.dateRange,function(n){return s("span",{class:n.state&&`dito-calendar-item-${n.state}`,on:{click:function(a){return t.selectDate(n.date,n.state,!0)}}},[t._v(t._s(n.text))])}),0)]),s("div",{staticClass:"dito-calendar-footer"},[s("a",{staticClass:"dito-calendar-select-today",attrs:{role:"button",title:t.dateToString(new Date,{year:1,month:1,day:1})},on:{click:function(n){t.selectDate(new Date)}}})])]:t.currentMode==="month"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev",on:{click:function(n){return t.stepYear(-1)}}}),s("span",[s("a",{staticClass:"dito-calendar-select-year",on:{click:function(n){return t.setMode("year")}}},[t._v(t._s(t.dateToString(t.currentValue,{year:1})))])]),s("a",{staticClass:"dito-calendar-step-next",on:{click:function(n){return t.stepYear(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-months"},t._l(t.monthNames,function(n,a){return s("span",{class:t.getMonthClass(a),on:{click:function(i){return t.selectMonth(a)}}},[t._v(t._s(n.short))])}),0)])]:t.currentMode==="year"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev",on:{click:function(n){return t.stepDecade(-1)}}}),s("span",[t._v(t._s(t.decadeToString(t.currentValue)))]),s("a",{staticClass:"dito-calendar-step-next",on:{click:function(n){return t.stepDecade(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-years"},t._l(t.yearRange,function(n){return s("span",{class:t.getYearClass(n),on:{click:function(a){return t.selectYear(n)}}},[t._v(t._s(n))])}),0)])]:t._e()],2)])])},jn=[];const hd="",Vn={props:{value:{type:Date,default:null},locale:{type:String,default:"en-US"},disabledDate:{type:Function,default:()=>!1},mode:{type:String,default:"day"}},data(){const{weekdayNames:t,monthNames:e}=En(this.locale);return{weekdayNames:t,monthNames:e,dateRange:[],yearRange:[],currentValue:this.value||Z(new Date,{hour:0,minute:0,second:0,millisecond:0}),currentMode:this.mode}},watch:{currentValue:"updateDateRange",disabledDate:"updateDateRange",value(t,e){+t!=+e&&(this.currentValue=t||new Date)},mode(t){this.currentMode=t}},mounted(){this.updateDateRange()},methods:{getMonthClass(t){return{"dito-calendar-item-active":this.value&&t===this.value.getMonth()&&this.currentValue.getFullYear()===this.value.getFullYear(),"dito-calendar-item-current":t===this.currentValue.getMonth()}},getYearClass(t){return{"dito-calendar-item-active":this.value&&t===this.value.getFullYear(),"dito-calendar-item-current":t===this.currentValue.getFullYear()}},setDate(t){this.currentValue=Z(this.currentValue,t)},stepDecade(t){this.setDate({year:this.currentValue.getFullYear()+t*10})},setMode(t){this.currentMode=t},stepMonth(t){const{currentValue:e}=this,{year:s,month:n}=this.getYearMonth(e.getFullYear(),e.getMonth()+t);this.setDate({month:n,day:Math.min(this.getDaysInMonth(s,n),this.currentValue.getDate())})},stepYear(t){this.setDate({year:this.currentValue.getFullYear()+t})},selectDate(t,e,s=!1){e!=="disabled"&&(s?this.setDate({year:t.getFullYear(),month:t.getMonth(),day:t.getDate()}):this.currentValue=t,this.$emit("input",this.currentValue))},selectMonth(t){this.setMode("day"),this.setDate({month:t,day:1})},selectYear(t){this.setMode("month"),this.setDate({year:t})},getYearMonth(t,e){return e>11?(t++,e=0):e<0&&(t--,e=11),{year:t,month:e}},dateToString(t,{year:e,month:s,day:n}){return t.toLocaleString(this.locale,{year:e&&"numeric",month:s&&"long",day:n&&"numeric"})},decadeToString(t){const e=this.getFirstYearOfDecade(t.getFullYear());return`${e} – ${e+9}`},getDaysInMonth(t,e){return new Date(t,e+1,0).getDate()},getFirstYearOfDecade(t){return+`${t.toString().slice(0,-1)}0`},navigate({hor:t,ver:e,enter:s}){const{currentMode:n,currentValue:a}=this;if(t||e){switch(n){case"day":this.setDate({day:a.getDate()+t+e*7});break;case"month":this.setDate({month:a.getMonth()+t+e*6});break;case"year":this.setDate({year:a.getFullYear()+t+e*5});break}return!0}else if(s){switch(n){case"day":this.selectDate(a);break;case"month":this.setMode("day");break;case"year":this.setMode("month");break}return!0}},updateDateRange(){this.dateRange=[],this.yearRange=[];const{currentValue:t}=this,e=t.getFullYear(),s=t.getMonth(),n=this.getFirstYearOfDecade(e);for(let u=0;u<10;u++)this.yearRange.push(n+u);let i=new Date(e,s,1).getDay()+1;i===0&&(i=7);const r=this.getDaysInMonth(e,s);if(i>1){const u=this.getYearMonth(e,s-1),d=this.getDaysInMonth(u.year,u.month);for(let h=1;h<i;h++){const m=d-i+h+1,g=new Date(u.year,u.month,m);this.dateRange.push({text:m,date:g,state:this.disabledDate(g)?"disabled":"gray"})}}const l=new Date;for(let u=1;u<=r;u++){const d=new Date(e,s,u),h=g=>g&&g.getDate()===u&&g.getFullYear()===e&&g.getMonth()===s,m=h(this.value)?"active":h(l)?"today":this.disabledDate(d)?"disabled":h(t)?"current":null;this.dateRange.push({text:u,date:d,state:m})}const c=42-this.dateRange.length;if(c>0){const u=this.getYearMonth(e,s+1);for(let d=1;d<=c;d++){const h=new Date(u.year,u.month,d),m=this.disabledDate(h)?"disabled":"gray";this.dateRange.push({text:d,date:h,state:m})}}}}},pe={};function En(t){let e=pe[t];if(!e){const s=[];for(let a=0;a<7;a++){const i=new Date(0,0,a);s.push({long:i.toLocaleString(t,{weekday:"long"}),short:i.toLocaleString(t,{weekday:"short"})})}const n=[];for(let a=1;a<=12;a++){const i=new Date(0,a,0);n.push({long:i.toLocaleString(t,{month:"long"}),short:i.toLocaleString(t,{month:"short"})})}e=pe[t]={weekdayNames:s,monthNames:n}}return e}const fe={};var Rn=p(Vn,Fn,jn,!1,Tn,null,null,null);function Tn(t){for(let e in fe)this[e]=fe[e]}const Bn=function(){return Rn.exports}();var Ln=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-trigger-container"},[t.alwaysShow?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass},[t._t("trigger")],2):t.trigger==="click"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass,on:{click:t.onClick}},[t._t("trigger")],2):t.trigger==="hover"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass,on:{mouseenter:function(n){return t.onHover(!0)},mouseleave:function(n){return t.onHover(!1)}}},[t._t("trigger")],2):t.trigger==="focus"||t.trigger==="always"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass},[t._t("trigger")],2):t._e(),s("transition",{attrs:{name:t.transition}},[t.trigger==="hover"?s("div",{directives:[{name:"show",rawName:"v-show",value:t.showPopup,expression:"showPopup"}],ref:"popup",staticClass:"dito-popup",class:t.popupClass,style:t.popupStyle,on:{mouseenter:function(n){return t.onHover(!0)},mouseleave:function(n){return t.onHover(!1)}}},[t.showPopup?t._t("popup"):t._e()],2):s("div",{directives:[{name:"show",rawName:"v-show",value:t.showPopup,expression:"showPopup"}],ref:"popup",staticClass:"dito-popup",class:t.popupClass,style:t.popupStyle},[t.showPopup?t._t("popup"):t._e()],2)])],1)},Mn=[];const pd="",qn={props:{trigger:{type:String,default:"click"},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom"},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:null},customClass:{type:String,default:null},zIndex:{type:Number,default:0},keepInView:{type:Boolean,default:!0},hideWhenClickOutside:{type:Boolean,default:!0},alwaysShow:{type:Boolean,default:!1},cover:{type:Boolean,default:!1},hideDelay:{type:Number,default:0}},data(){return{showPopup:this.show,popupPlacement:this.placement}},computed:{triggerClass(){return{"dito-trigger-disabled":this.disabled}},popupClass(){const t={[`dito-popup-${o.hyphenate(this.placement)}`]:!0};return this.customClass&&(t[this.customClass]=!0),t},popupStyle(){return this.zIndex?`z-index: ${this.zIndex}`:""}},watch:{show(t){this.showPopup=t||this.alwaysShow},showPopup(t,e){!t!=!e&&(this.$emit("update:show",t),t&&this.$nextTick(()=>this.updatePosition()))}},mounted(){const{trigger:t,popup:e}=this.$refs;if(this.trigger==="focus"){const s=t.querySelector("input, textarea");s&&(this.focusEvents=tt(s,{focus:()=>{this.showPopup=!0},blur:()=>{this.showPopup=!1}}))}this.hideWhenClickOutside&&!this.alwaysShow&&(this.closeEvents=tt(window,{mouseup:s=>{this.showPopup&&!e.contains(s.target)&&!t.contains(s.target)&&(this.showPopup=!1)},blur:()=>{this.showPopup=!1}})),this.alwaysShow&&(this.showPopup=!0)},created(){this.showPopup=this.show},beforeDestroy(){var t,e;(t=this.focusEvents)==null||t.remove(),(e=this.closeEvents)==null||e.remove(),this.mouseLeaveTimer=null},methods:{updatePosition(){const{trigger:t,popup:e}=this.$refs;if(this.show&&e.offsetWidth===0){setTimeout(()=>this.updatePosition(),0);return}const s=o.isString(this.target)?this.$refs[this.target]:this.target;if(s){const _=s===e?t:e.firstChild;_.style.width=getComputedStyle(s).width}const n=(s||t).getBoundingClientRect(),a=n.left+window.scrollX,i=n.top+window.scrollY,r=n.width,l=n.height,c=e.offsetWidth,u=e.offsetHeight;let[d,h]=this.popupPlacement.split("-")||[];if(this.keepInView){const _=window.innerWidth,y=window.innerHeight;d==="top"?i<u&&(d="bottom"):d==="bottom"?y-i-l<u&&(d="top"):d==="left"?a<c&&(d="right"):d==="right"&&_-a-r<c&&(d="left"),h==="top"?y-i<u&&(h="bottom"):h==="bottom"?i+l<u&&(h="top"):h==="left"?_-a<c&&(h="right"):h==="right"&&a+r<c&&(h="left")}let m=0,g=0;switch(d){case"top":g-=u;break;case"left":m-=c;break;case"right":m+=r;break;case"bottom":g+=l;break}switch(h){case"right":m-=c-r;break;case"bottom":g-=u-l;break}if(this.cover&&(d==="top"?g+=l:d==="bottom"&&(g-=l)),s&&s!==t){const _=t.getBoundingClientRect();m+=a-_.left,g+=i-_.top}e.style.left=`${m}px`,e.style.top=`${g}px`,this.$emit("update-position",{trigger:t,popup:e,placement:this.popupPlacement})},onClick(){this.disabled||(this.showPopup=!this.showPopup)},onHover(t){this.disabled||(clearTimeout(this.mouseLeaveTimer),t?this.showPopup=!0:this.hideDelay?this.mouseLeaveTimer=setTimeout(()=>{this.showPopup=!1},this.hideDelay):this.showPopup=!1)}}},me={};var In=p(qn,Ln,Mn,!1,An,null,null,null);function An(t){for(let e in me)this[e]=me[e]}const wt=function(){return In.exports}();var Nn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-input"},[t.attributes.type==="checkbox"?s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:"checkbox"},domProps:{checked:Array.isArray(t.currentValue)?t._i(t.currentValue,null)>-1:t.currentValue},on:{change:function(n){var a=t.currentValue,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.currentValue=a.concat([l])):c>-1&&(t.currentValue=a.slice(0,c).concat(a.slice(c+1)))}else t.currentValue=r}}},"input",t.attributes,!1),t.listeners)):t.attributes.type==="radio"?s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:"radio"},domProps:{checked:t._q(t.currentValue,null)},on:{change:function(n){t.currentValue=null}}},"input",t.attributes,!1),t.listeners)):s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:t.attributes.type},domProps:{value:t.currentValue},on:{input:function(n){n.target.composing||(t.currentValue=n.target.value)}}},"input",t.attributes,!1),t.listeners))])},zn=[];const fd="",Un={props:{type:{type:String,default:"text"},value:{type:[String,Number],default:null},id:{type:String,default:null},name:{type:String,default:null},title:{type:String,default:null},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},placeholder:{type:String,default:null},autocomplete:{type:String,default:"off"}},data(){return{currentValue:this.value,hovering:!1,focused:!1}},computed:{attributes(){const{id:t,name:e,type:s,size:n,title:a,disabled:i,readonly:r,placeholder:l,autocomplete:c,$attrs:u}=this;return{id:t,name:e,type:s,size:n,title:a,disabled:i,readonly:r,placeholder:l,autocomplete:c,...u}},listeners(){const{input:t,...e}=this.$listeners;return e},size(){const{size:t,min:e,max:s}=this.$attrs,n=a=>a!=null?`${a}`.length:0;return t||n(e)||n(s)||void 0}},watch:{value(t,e){t!==e&&(this.currentValue=t)},currentValue(t){t!==this.value&&this.$emit("input",t)}},methods:{focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},_e={};var Hn=p(Un,Nn,zn,!1,Wn,null,null,null);function Wn(t){for(let e in _e)this[e]=_e[e]}const U=function(){return Hn.exports}();var Yn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",t._b({ref:"trigger",staticClass:"dito-date-picker",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},"trigger",{transition:t.transition,placement:t.placement,disabled:t.disabled,target:t.target},!1),[s("input-field",t._b({ref:"input",staticClass:"dito-date-picker-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger",type:"text",value:t.currentText,readonly:""},on:{focus:function(n){t.inputFocused=!0},blur:function(n){t.inputFocused=!1},keydown:t.onKeyDown},slot:"trigger"},"input-field",{placeholder:t.placeholder,disabled:t.disabled},!1)),s("calendar",t._b({ref:"calendar",staticClass:"dito-date-picker-popup",attrs:{slot:"popup",value:t.currentValue},on:{input:t.selectDate},slot:"popup"},"calendar",{locale:t.locale,disabledDate:t.disabledDate},!1))],1)},Kn=[];const md="",Jn={components:{Trigger:wt,Calendar:Bn,InputField:U},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},locale:{type:String,default:"en-US"},dateFormat:{type:Object,default:()=>o.defaultFormats.date},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledDate:{type:Function,default:()=>!1}},data(){return{currentValue:this.value,showPopup:this.show,inputFocused:!1,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return o.format(this.currentValue,{locale:this.locale,date:this.dateFormat,time:!1})||""}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t))},show(t){this.showPopup=t},showPopup(t,e){!t!=!e&&this.$emit("update:show",t)},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{selectDate(t){this.currentValue=t,this.showPopup=!1},onKeyDown(t){var e;(e=this.$refs.calendar)!=null&&e.navigate(de(t))&&t.preventDefault()},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},ge={};var Qn=p(Jn,Yn,Kn,!1,Xn,null,null,null);function Xn(t){for(let e in ge)this[e]=ge[e]}const ve=function(){return Qn.exports}();var Gn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",t._b({ref:"trigger",staticClass:"dito-time-picker",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},"trigger",{transition:t.transition,placement:t.placement,disabled:t.disabled,target:t.target},!1),[s("input-field",t._b({ref:"input",staticClass:"dito-time-picker-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger",type:"text",value:t.currentText,readonly:""},on:{focus:function(n){t.inputFocused=!0},blur:function(n){t.inputFocused=!1},keydown:t.onKeyDown},slot:"trigger"},"input-field",{placeholder:t.placeholder,disabled:t.disabled},!1)),s("div",{staticClass:"dito-time-picker-popup",attrs:{slot:"popup"},slot:"popup"},[s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"hour",staticClass:"dito-time-picker-hour",on:{mouseover:function(n){t.selection=0}}},t._l(24,function(n){return t.disabledHour(n-1)?t._e():s("li",{class:{selected:t.hour===n-1},on:{click:function(a){t.hour=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)]),s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"minute",staticClass:"dito-time-picker-minute",on:{mouseover:function(n){t.selection=1}}},t._l(60,function(n){return t.disabledMinute(n-1)?t._e():s("li",{class:{selected:t.minute===n-1},on:{click:function(a){t.minute=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)]),s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"second",staticClass:"dito-time-picker-second",on:{mouseover:function(n){t.selection=2}}},t._l(60,function(n){return t.disabledSecond(n-1)?t._e():s("li",{class:{selected:t.second===n-1},on:{click:function(a){t.second=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)])])],1)},Zn=[];const _d="",ta={components:{Trigger:wt,InputField:U},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledHour:{type:Function,default:()=>!1},disabledMinute:{type:Function,default:()=>!1},disabledSecond:{type:Function,default:()=>!1}},data(){return{currentValue:this.value,showPopup:this.show,inputFocused:!1,selection:0,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return this.currentValue?`${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${this.leftPad(this.second)}`:""},currentDate(){return this.currentValue||Z(new Date,{hour:0,minute:0,second:0,millisecond:0})},hour:{get(){return this.currentDate.getHours()},set(t){this.setTime({hour:t})}},minute:{get(){return this.currentDate.getMinutes()},set(t){this.setTime({minute:t})}},second:{get(){return this.currentDate.getSeconds()},set(t){this.setTime({second:t})}}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t),this.scrollAll())},currentText:"updateSelection",selection:"updateSelection",show(t){this.showPopup=t},showPopup(t,e){t&&(this.updateSelection(),this.scrollAll(0)),!t!=!e&&this.$emit("update:show",t)},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{leftPad(t){return("0"+t).slice(-2)},setTime(t){this.currentValue=Z(this.currentDate,{...t,millisecond:0})},updateSelection(t=!1){if(this.showPopup||t){const e=3*this.selection;this.$nextTick(()=>kn(this.$refs.input,e,e+2))}},scrollAll(t=100){const e=(s,n)=>{const a=this.$refs[s];if(a){const i=a.scrollHeight/(a.children.length+6);he(a,Math.round(n*i),t)}};this.$nextTick(()=>{e("hour",this.hour),e("minute",this.minute),e("second",this.second)})},onKeyDown(t){const e=["hour","minute","second"][this.selection];if(e){const{hor:s,ver:n,enter:a}=de(t);if(s){const i=this.selection+s;this.selection=i<0?2:i>2?0:i}else if(n){const i=this[e]+n,{length:r}=this.$refs[e].children;this[e]=i<0?i+r:i>=r?i-r:i}a&&(this.showPopup=!1),(s||n||a)&&(this.updateSelection(!0),t.preventDefault())}},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},be={};var ea=p(ta,Gn,Zn,!1,sa,null,null,null);function sa(t){for(let e in be)this[e]=be[e]}const ye=function(){return ea.exports}();var na=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"picker",staticClass:"dito-date-time-picker"},[s("div",{staticClass:"dito-pickers",class:{"dito-focus":t.focused}},[s("date-picker",t._b({ref:"date",attrs:{placement:"bottom-left",target:t.$refs.picker,show:t.showDate},on:{"update:show":function(n){t.showDate=n},focus:function(n){t.dateFocused=!0},blur:function(n){t.dateFocused=!1}},model:{value:t.currentValue,callback:function(n){t.currentValue=n},expression:"currentValue"}},"date-picker",{transition:t.transition,placeholder:t.placeholder,locale:t.locale,dateFormat:t.dateFormat,disabled:t.disabled},!1)),s("time-picker",t._b({ref:"time",attrs:{placeholder:"",placement:"bottom-right",target:t.$refs.picker,show:t.showTime},on:{"update:show":function(n){t.showTime=n},focus:function(n){t.timeFocused=!0},blur:function(n){t.timeFocused=!1}},model:{value:t.currentValue,callback:function(n){t.currentValue=n},expression:"currentValue"}},"time-picker",{transition:t.transition,disabled:t.disabled},!1))],1)])},aa=[];const gd="",ia={components:{DatePicker:ve,TimePicker:ye},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placeholder:{type:String,default:null},dateFormat:{type:Object,default:()=>o.defaultFormats.date},locale:{type:String,default:"en-US"},disabled:{type:Boolean,default:!1}},data(){return{currentValue:this.value,showDate:!1,showTime:!1,dateFocused:!1,timeFocused:!1,changed:!1}},computed:{focused(){return this.dateFocused||this.timeFocused}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t))},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{focus(){this.$refs.date.focus()},blur(){this.$refs.date.blur(),this.$refs.time.blur()}}},$e={};var ra=p(ia,na,aa,!1,oa,null,null,null);function oa(t){for(let e in $e)this[e]=$e[e]}const la=function(){return ra.exports}();var ca=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("i",{staticClass:"dito-icon",class:`dito-icon-${t.name}`})},ua=[];const vd="",da={props:{name:{type:String,required:!0}}},Ce={};var ha=p(da,ca,ua,!1,pa,null,null,null);function pa(t){for(let e in Ce)this[e]=Ce[e]}const fa=function(){return ha.exports}();var ma=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-pagination"},[t.showTotal?s("div",{staticClass:"dito-pagination-total"},[t.total>0?[t._v(t._s(t.first)+" – "+t._s(t.last))]:[t._v("0")],t._v(" / "+t._s(t.total))],2):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},t._l(t.pageRange,function(n){return s("button",{staticClass:"dito-button",class:t.getPageClass(n),attrs:{disabled:n.disabled},on:{click:function(a){return t.onClickPage(n)}}},[n.text?s("span",[t._v(t._s(n.text))]):t._e()])}),0)])},_a=[];const bd="",ga={props:{total:{type:Number,default:0},page:{type:Number,default:1},pageSize:{type:Number,default:10},showTotal:{type:Boolean,default:!0}},data(){return{pageRange:[],showPrev:!0,showNext:!0,numPages:0,currentPageSize:this.pageSize,currentPage:this.page}},computed:{first(){return(this.currentPage-1)*this.currentPageSize+1},last(){return Math.min(this.first+this.currentPageSize-1,this.total)}},watch:{total:"updatePageRange",showPrev:"updatePageRange",showNext:"updatePageRange",page(t){this.currentPage=t},pageSize(t){this.currentPageSize=t},currentPageSize(t){this.numPages=Math.ceil(this.total/t),this.currentPage>this.numPages&&(this.currentPage=this.numPages),this.updatePageRange(),this.$emit("size-change",this.page,t)},currentPage(t,e){t!==e&&(this.updatePageRange(),this.$emit("update:page",t))}},created(){this.currentPage=this.page,this.currentPageSize=this.pageSize},mounted(){this.updatePageRange()},methods:{onClickPage(t){t.index&&!t.disabled&&t.index!==this.currentPage&&(this.currentPage=t.index)},getPageClass(t){const e={"dito-selected":t.active};return t.type&&(e[`dito-button-${t.type}`]=!0),e},updatePageRange(){const{showPrev:t,showNext:e,total:s,currentPageSize:n,currentPage:a}=this,i=t+e+1,r=this.numPages=Math.ceil(s/n);let l=1,c=1;r<=i?c=r:a<=t+1?c=i:a>=r-e?(c=r,l=r-i+1):(l=a-t,c=a+e);const u=[];u.push({index:a-1,type:"prev",disabled:a<=1}),l>=2&&u.push({index:1,text:1}),l>2&&u.push({index:Math.max(1,a-10),type:"ellipsis-prev"});for(let d=l;d<=c;d++)u.push({index:d,text:d,active:d===a});c<r-1&&u.push({index:Math.min(r,a+10),type:"ellipsis-next"}),c<=r-1&&u.push({index:r,text:r}),u.push({index:a+1,type:"next",disabled:a>=r}),this.pageRange=u}}},we={};var va=p(ga,ma,_a,!1,ba,null,null,null);function ba(t){for(let e in we)this[e]=we[e]}const ya=function(){return va.exports}();var $a=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-switch",class:t.classes,style:t.styles},[s("div",{staticClass:"dito-switch-pane"},[s("input",t._b({directives:[{name:"model",rawName:"v-model",value:t.checked,expression:"checked"}],ref:"input",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(t.checked)?t._i(t.checked,null)>-1:t.checked},on:{change:function(n){var a=t.checked,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.checked=a.concat([l])):c>-1&&(t.checked=a.slice(0,c).concat(a.slice(c+1)))}else t.checked=r}}},"input",t.attributes,!1)),s("div",{staticClass:"dito-switch-button"}),t.labels?s("span",{staticClass:"dito-switch-label"},[t.checked?t._t("checked",function(){return[t._v(t._s(t.labels.checked||"on"))]}):t._t("unchecked",function(){return[t._v(t._s(t.labels.unchecked||"off"))]})],2):t._e()])])},Ca=[];const yd="",wa={props:{value:{type:Boolean,default:!1},id:{type:String,default:null},name:{type:String,default:null},disabled:{type:Boolean,default:!1},labels:{type:[Object,Boolean],default:!1}},data(){return{checked:this.value}},computed:{classes(){const{checked:t,disabled:e}=this;return{"dito-checked":t,"dito-disabled":e}},styles(){const{labels:{checked:t,unchecked:e}={}}=this,s=Math.max(0,t==null?void 0:t.length,e==null?void 0:e.length);return{"--switch-width":s?`${s*1.5}rem`:null}},attributes(){const{id:t,name:e,disabled:s,$attrs:n}=this;return{id:t,name:e,disabled:s,...n}}},watch:{value(t){this.checked=t},checked(t){t!==this.value&&(this.$emit("input",t),this.$emit("change",t))}},methods:{focus(){this.$refs.input.focus()}}},Pe={};var Pa=p(wa,$a,Ca,!1,Sa,null,null,null);function Sa(t){for(let e in Pe)this[e]=Pe[e]}const Da=function(){return Pa.exports}(),$d="",xa={functional:!0,props:{enabled:{type:Boolean,default:!0}},render:(t,e)=>t("transition",e.props.enabled?{props:{name:"height"},on:Oa}:{},e.children)},I=(t,e)=>Object.assign(t.style,e),Se=t=>getComputedStyle(t).height,Oa={afterEnter(t){setTimeout(()=>I(t,{height:"auto"}))},enter(t){const{width:e}=getComputedStyle(t);I(t,{width:e,position:"absolute",visibility:"hidden",height:"auto"});const{height:s}=getComputedStyle(t);I(t,{width:null,position:null,visibility:null,height:0}),Se(t),setTimeout(()=>I(t,{height:s}))},leave(t){const{height:e}=getComputedStyle(t);I(t,{height:e}),Se(t),setTimeout(()=>I(t,{height:0}))}};let ka,Fa;const De={};var ja=p(xa,ka,Fa,!1,Va,null,null,null);function Va(t){for(let e in De)this[e]=De[e]}const Ea=function(){return ja.exports}(),H={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=tt(t,o.isObject(e)?e:{[e]:s});return this.domHandlers.push(n),n}}};var Ra=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[s("notifications",{ref:"notifications",staticClass:"dito-notifications",attrs:{position:"top right",classes:"dito-notification"}}),s("dito-menu"),s("main",{staticClass:"dito-page dito-scroll-parent"},[s("dito-header",{attrs:{spinner:t.options.spinner,isLoading:t.isLoading}},[t.user?s("dito-account"):t.allowLogin?s("a",{staticClass:"dito-login",on:{click:function(n){return t.rootComponent.login()}}},[s("span",[t._v("Login")])]):t._e()],1),s("router-view")],1)],1)},Ta=[];const Cd="",Ba=b.component("dito-root",{mixins:[H],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:t=>{t.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:t=>{t.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(t){console.error(t)}this.allowLogin=!0},methods:{notify({type:t="info",title:e,text:s}={}){e||(e={warning:"Warning",error:"Error",info:"Information",success:"Success"}[t]||"Notification"),s=`<p>${o.asArray(s).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const n={warning:"warn",error:"error",info:"log",success:"log"}[t]||"error";console[n](o.stripTags(s));const{notifications:a=!0}=this.api;if(a){const{durationFactor:i=20}=a,r=(40+s.length+e.length)*i;this.$notify({type:t,title:e,text:s,duration:r})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(t){this.loadingCount+=t?1:-1},async login(){var n,a;this.allowLogin=!0;const{additionalComponents:t,redirectAfterLogin:e}=this.options.login||{},s=await this.showDialog({components:{username:{type:"text",autofocus:!0},password:{type:"password"},...t},buttons:{cancel:{},login:{type:"submit"}}});if(s)try{const i=await this.sendRequest({resource:this.api.users.login,data:s,internal:!0});e?location.replace(e):(this.setUser(i.data.user),await this.resolveViews())}catch(i){const r=(a=(n=i.response)==null?void 0:n.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:r||i}),r||console.error(i,i.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(t){console.error(t)}},async fetchUser(){let t=null;try{t=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(e){this.notify({type:"error",title:"Authentication Error",text:e})}return this.setUser(t),t},setUser(t){this.appState.user=t&&Object.setPrototypeOf(t,Cn.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await gt(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const t=[],e=[];for(const[s,n]of Object.entries(this.resolvedViews))e.push(pn(ue,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),xe={};var La=p(Ba,Ra,Ta,!1,Ma,null,null,null);function Ma(t){for(let e in xe)this[e]=xe[e]}const Pt=function(){return La.exports}();var qa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-menu dito-scroll-parent"},[s("h1",[t._v(t._s(t.appState.title))]),s("ul",{staticClass:"dito-scroll"},t._l(t.views,function(n){return s("li",[t.shouldRender(n)?s("router-link",{staticClass:"dito-link",attrs:{to:`/${n.path}`,"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n)))]):t._e()],1)}),0)])},Ia=[];const wd="",Aa=b.component("dito-menu",{}),Oe={};var Na=p(Aa,qa,Ia,!1,za,null,null,null);function za(t){for(let e in Oe)this[e]=Oe[e]}const Ua=function(){return Na.exports}();var Ha=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"v-spinner"},[s("div",{staticClass:"v-pulse v-pulse1",style:[t.spinnerStyle,t.spinnerDelay1]}),s("div",{staticClass:"v-pulse v-pulse2",style:[t.spinnerStyle,t.spinnerDelay2]}),s("div",{staticClass:"v-pulse v-pulse3",style:[t.spinnerStyle,t.spinnerDelay3]})])},Wa=[];const Pd="",Ya={name:"PulseLoader",props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},ke={};var Ka=p(Ya,Ha,Wa,!1,Ja,null,null,null);function Ja(t){for(let e in ke)this[e]=ke[e]}const Qa=function(){return Ka.exports}();var Xa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-header"},[s("div",{staticClass:"dito-trail"},[s("ul",t._l(t.trail,function(n,a){return s("li",[a===t.trail.length-1?[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])]:s("router-link",{staticClass:"dito-breadcrumb",attrs:{to:n.path}},[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])])],2)}),0),t.isLoading?s("spinner",{staticClass:"dito-spinner"}):t._e()],1),t._t("default")],2)},Ga=[];const Sd="",Fe=b.component("spinner",Qa),Za=b.component("dito-header",{components:{Spinner:Fe},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(t=>!!t.routeRecord)}},created(){const{size:t="8px",color:e="#999"}=this.spinner||{},{props:s}=Fe.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),je={};var ti=p(Za,Xa,Ga,!1,ei,null,null,null);function ei(t){for(let e in je)this[e]=je[e]}const si=function(){return ti.exports}(),Ve={mixins:[H],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(t){t?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(t){const{startTime:e}=this.pulldown;if(!this.checkTime||e&&Date.now()-e>250)return this.setPulldownOpen(!1),t&&this.onPulldownSelect(t),!0},onPulldownSelect(){},setPulldownOpen(t){this.pulldown.open=t,this.pulldown.startTime=t?Date.now():0,t&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}};var ni=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-account"},[s("a",{on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[s("span",[t._v(t._s(t.user.username))])]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.items,function(n,a){return s("li",[s("a",{on:{mousedown:function(i){return i.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(i){return t.onPulldownMouseUp(a)}}},[t._v(t._s(n))])])}),0)])},ai=[];const Dd="",ii=b.component("dito-account",{mixins:[Ve],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(t){switch(t){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),Ee={};var ri=p(ii,ni,ai,!1,oi,null,null,null);function oi(t){for(let e in Ee)this[e]=Ee[e]}const li=function(){return ri.exports}();var ci=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){return n.preventDefault(),t.submit.apply(null,arguments)}}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.schema,data:t.dialogData}},[s("dito-buttons",{staticClass:"dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,data:t.dialogData},slot:"buttons"})],1)],1)},ui=[];const xd="",di=b.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})}},data(){const t=o.clone(this.data);for(const e in this.components)e in t||(t[e]=null);return{windowEvents:null,dialogData:t}},computed:{dialogComponent(){return this},name(){return this.$parent.name},schema(){return{components:this.components}},buttonSchemas(){return Object.fromEntries(Object.entries(Q(this.buttons)).map(([t,e])=>(t==="cancel"&&!e.events&&(e={...e,events:{click:()=>this.cancel()}}),[t,e])))},hasCancel(){return!!this.buttonSchemas.cancel}},mounted(){this.windowEvents=tt(window,{keyup:t=>{this.hasCancel&&t.keyCode===27&&this.cancel()}})},destroyed(){this.windowEvents.remove()},methods:{hide(){this.$modal.hide(this.name)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()},submit(){this.resolve(this.dialogData)},cancel(){this.resolve(null)}}}),Re={};var hi=p(di,ci,ui,!1,pi,null,null,null);function pi(t){for(let e in Re)this[e]=Re[e]}const fi=function(){return hi.exports}();var mi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.content?s(t.options.tag||t.tag,{tag:"component",class:t.classes,style:t.styles},[t._v(t._s(t.options.text))]):t._e()},_i=[];const gi=b.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return o.isObject(t)?t:{text:t}},classes(){return{...this.$attrs.class,...Te(this.options.class)}},styles(){return{...this.$attrs.style,...Te(this.options.style)}}}});function Te(t){return o.asArray(t).reduce((e,s)=>(o.isString(s)?e[s]=!0:o.isObject(s)&&Object.assign(e,s),e),{})}const Be={};var vi=p(gi,mi,_i,!1,bi,null,null,null);function bi(t){for(let e in Be)this[e]=Be[e]}const yi=function(){return vi.exports}();var $i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.text||t.collapsible?s(t.tag,t._g({tag:"component",staticClass:"dito-label",class:{"dito-active":t.isActive}},t.listeners),[t.collapsible?s("div",{staticClass:"dito-chevron",class:{"dito-opened":!t.collapsed}}):t._e(),t._l(t.prefixes,function(n,a){return s("dito-element",{key:`prefix-${a}`,staticClass:"dito-label-prefix",attrs:{tag:"span",content:n}})}),s("label",{attrs:{for:t.dataPath},domProps:{innerHTML:t._s(t.text)}}),t._l(t.suffixes,function(n,a){return s("dito-element",{key:`suffix-${a}`,staticClass:"dito-label-suffix",attrs:{tag:"span",content:n}})}),t._t("edit-buttons")],2):t._e()},Ci=[];const Od="",wi=b.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:t}=this;return o.isObject(t)?t==null?void 0:t.text:t},prefixes(){var t;return o.asArray((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return o.asArray((t=this.label)==null?void 0:t.suffix)},listeners(){return{...this.collapsible&&{click:this.onClick}}},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Le={};var Pi=p(wi,$i,Ci,!1,Si,null,null,null);function Si(t){for(let e in Le)this[e]=Le[e]}const Di=function(){return Pi.exports}(),St={methods:{getItemFormSchema:$t,getItemUid:$n,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):ie(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=j(s,t.name)),e!=null&&(s=j(s,e)),s},findItemIdIndex(t,e,s){const n=this.isTransient?s:e==null?void 0:e.findIndex((a,i)=>this.getItemId(t,a,i)===s);return n!==-1?n:null},getItemLabel(t,e,{index:s=null,extended:n=!1,asObject:a=!1}={}){const{itemLabel:i}=t;if(!e||!n&&i===!1)return null;let r;const l=()=>r||(r=this.getItemDataPath(t,s));let c;const u=()=>c||(c=this.getLabel($t(t,e,this.context)));let d,h,m;if(o.isFunction(i)){const _=i.call(this,new S(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return l()},get formLabel(){return u()}}));o.isObject(_)?{text:d,prefix:h,suffix:m}=_:d=_,n=!1}else{const{columns:_}=t,y=o.isString(i)&&i||z(t)&&_&&Object.keys(_)[0]||"name";d=e[y]}const g=!!d;if(d||(d=""),d||(n=!0,z(t)&&s!==null&&(d=`${s+1}`)),n){const _=u();_&&(d=`${_} ${g?`'${d}'`:d}`)}return a?{text:d,prefix:h,suffix:m}:d}}};var xi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-schema"},[s("div",{staticClass:"dito-schema-content"},[t.hasLabel||t.hasTabs||t.clipboard?s("div",{staticClass:"dito-schema-header",class:{"dito-schema-menu-header":t.menuHeader}},[t.hasLabel?s("dito-label",{attrs:{label:t.label,dataPath:t.dataPath,collapsible:t.collapsible,collapsed:!t.opened},on:{expand:t.onExpand},scopedSlots:t._u([t.inlined?{key:"edit-buttons",fn:function(){return[t._t("edit-buttons")]},proxy:!0}:null],null,!0)}):t._e(),t.tabs?s("dito-tabs",{attrs:{tabs:t.tabs,selectedTab:t.selectedTab}}):t._e(),s("dito-clipboard",{attrs:{clipboard:t.clipboard,dataPath:t.dataPath,data:t.data}})],1):t._e(),t._l(t.tabs,function(n,a){return t.hasTabs?s("dito-pane",{key:a,ref:"tabs",refInFor:!0,staticClass:"dito-pane-tab",attrs:{visible:t.selectedTab===a,tab:a,schema:n,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasMainPane,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()}),s("transition-height",{attrs:{enabled:t.inlined}},[t.hasMainPane&&t.opened?s("dito-pane",{ref:"components",staticClass:"dito-pane-main",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasTabs,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()],1),!t.inlined&&t.isPopulated?t._t("buttons"):t._e()],2),t.inlined?[t.hasLabel?t._e():t._t("edit-buttons")]:t.isPopulated?[s("dito-panels",{attrs:{panels:t.panelSchemas,data:t.data,meta:t.meta,store:t.store,disabled:t.disabled}})]:t._e()],2)},Oi=[];const kd="",ki=b.component("dito-schema",{components:{TransitionHeight:Ea},mixins:[St],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:t}=this.schema;return{...t&&o.isFunction(t)?t.call(this,this.context):t,componentsRegistry:{},panesRegistry:{},panelsRegistry:{}}},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.$parent.schemaComponent},panelSchemas(){const t=ne(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return q(this.schema.tabs)},selectedTab(){var s,n;const t=((s=this.$route.hash)==null?void 0:s.slice(1))||null,e=t&&this.shouldRender(this.tabs[t])?t:((n=this.defaultTab)==null?void 0:n.name)||null;return e!==t&&this.$router.replace({hash:e}),e},defaultTab(){if(this.tabs){let t=null;for(const e of Object.values(this.tabs)){const{defaultTab:s}=e;if(o.isFunction(s)?s.call(this,this.context):s)return e;t||(t=e)}return t}},clipboard(){var t;return(t=this.schema)==null?void 0:t.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return{$schema:this.schema.name,...this.processData({target:"clipboard",schemaOnly:!0})}},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return ot(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(t=>t.isDirty)},isTouched(){return this.someComponent(t=>t.isTouched)},isValid(){return this.everyComponent(t=>t.isValid)},isValidated(){return this.everyComponent(t=>t.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:t}=this.schema;return!!t&&Object.keys(t).length>0},opened:ft("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeDestroy(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(t,e){return this._getEntriesByDataPath(this.componentsByDataPath,t,e)},getComponentByDataPath(t,e){return this.getComponentsByDataPath(t,e)[0]||null},getComponentsByName(t,e){return this._getEntriesByName(this.componentsByDataPath,t,e)},getComponentByName(t,e){return this.getComponentsByName(t,e)[0]||null},getComponents(t,e){return this._getEntries(this.componentsByDataPath,t,e)},getComponent(t,e){return this.getComponents(t,e)[0]||null},getPanelsByDataPath(t,e){return this._getEntriesByDataPath(this.panelsByDataPath,t,e)},getPanelByDataPath(t,e){return this.getPanelsByDataPath(t,e)[0]||null},getPanels(t,e){return this._getEntries(this.panelsByDataPath,t,e)},getPanel(t,e){return this.getPanels(t,e)[0]||null},someComponent(t){return this.isPopulated&&this.components.some(t)},everyComponent(t){return this.isPopulated&&this.components.every(t)},onExpand(t){this.emitEvent("expand",{context:{expand:t}}),(!this.opened||t||this.validateAll())&&(this.opened=t)},onChange(){this.emitEvent("change")},resetValidation(){for(const t of this.components)t.resetValidation()},clearErrors(){for(const t of this.components)t.clearErrors()},focus(){var t;(t=this.parentSchemaComponent)==null||t.focus(),this.opened=!0},validateAll(t,e=!0){const{componentsByDataPath:s}=this;let n;if(t){const r=o.isFunction(t)?t:o.isRegExp(t)?l=>t.test(l):null;n=r?Object.keys(s).filter(r):o.isArray(t)?t:[t]}e&&this.clearErrors();let a=!0,i=!0;n||(n=Object.keys(s));for(const r of n){const l=this.getComponentsByDataPath(r);for(const c of l)c.validate(e)||(e&&i&&c.focus(),i=!1,a=!1)}return e&&!a&&this.notifyErrors(),a},verifyAll(t){return this.validateAll(t,!1)},async showValidationErrors(t,e){var a;this.clearErrors();let s=!0;const n=[];for(const[i,r]of Object.entries(t)){const l=this.hasOwnData?j(this.dataPath,i):i,c=o.parseDataPath(l);let u=!1;const d=this.getComponentsByDataPath(c);for(const h of d)h.showValidationErrors(r,s&&e)&&(u=!0,s=!1);if(!u){const h=c.pop();for(;c.length>0;){const g=this.getComponentsByDataPath(c);for(const _ of g)if(await((a=_.navigateToComponent)==null?void 0:a.call(_,l,y=>{let x=!1;for(const P of y){const $=t[P.dataPath];$&&P.showValidationErrors($,s&&e)&&(x=!0,s=!1)}return x})))return;c.pop()}const m=o.labelize(h);for(const g of r){const _=m?`The field ${m}`:`The ${this.formLabel}`;n.push(`${_} ${g.message}`)}}s=!1}s||this.notifyErrors(n.join(`
1
+ (function(v,V){typeof exports=="object"&&typeof module<"u"?module.exports=V(require("vue"),require("vue-js-modal"),require("vue-router"),require("vue-notification"),require("@ditojs/utils"),require("nanoid"),require("vuedraggable"),require("codeflask"),require("tinycolor2"),require("vue-color"),require("tiptap"),require("tiptap-commands"),require("tiptap-extensions"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-js-modal","vue-router","vue-notification","@ditojs/utils","nanoid","vuedraggable","codeflask","tinycolor2","vue-color","tiptap","tiptap-commands","tiptap-extensions","vue-multiselect","vue-upload-component","filesize-parser","filesize"],V):(v=typeof globalThis<"u"?globalThis:v||self,v["dito-admin"]=V(v.vue,v["vue-js-modal"],v["vue-router"],v["vue-notification"],v["@ditojs/utils"],v.nanoid,v.vuedraggable,v.codeflask,v.tinycolor2,v["vue-color"],v.tiptap,v["tiptap-commands"],v["tiptap-extensions"],v["vue-multiselect"],v["vue-upload-component"],v["filesize-parser"],v.filesize))})(this,function(v,V,L,Ls,o,Ms,nt,qs,at,Is,W,As,F,Ns,zs,Us,Hs){"use strict";var Uu=Object.defineProperty;var Hu=(v,V,L)=>V in v?Uu(v,V,{enumerable:!0,configurable:!0,writable:!0,value:L}):v[V]=L;var Ft=(v,V,L)=>(Hu(v,typeof V!="symbol"?V+"":V,L),L);const jt={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function j(t,e){return t?`${t}/${e}`:e}function Ws(t){const e=o.parseDataPath(t);return e==null||e.pop(),e}function it(t,e=!1){return e?Ws(t):o.parseDataPath(t)}function Ys(t,e=!1){return o.normalizeDataPath(it(t,e))}function Vt(t,e=!1){const s=it(t,e);if(s){let n;do n=s.pop();while(n!=null&&o.isInteger(+n));if(n!=null)return s}return null}function Ks(t,e=!1){return o.normalizeDataPath(Vt(t,e))}function rt(t,e,s=!1){const n=it(e,s);return n?o.getValueAtDataPath(t,n):null}function ot(t,e,s=!1){const n=Vt(e,s);return n?o.getValueAtDataPath(t,n):null}function Et(t){const e=o.parseDataPath(t);return e[e.length-1]}function Js(t){const e=Et(t);return e==null||o.isInteger(+e)?null:e}function lt(t){const e=Et(t),s=e==null?null:+e;return o.isInteger(s)?s:null}let Qs=0;function Xs(t,e="id"){t[e]=`@${++Qs}`}function Y(t){return/^@/.test(t)}function Gs(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const ct=new WeakMap;function w(t,e,s){const n=ct.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:o.isFunction(s)?s():s}function Zs(t,e,s){ct.get(t)[e]=s}class S{constructor(e,s){s=s?o.isFunction(s)?s():{...s}:{},s.nested??(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);ct.set(this,n)}static get(e,s){return s instanceof S?s:new S(e,s)}get nested(){return w(this,"nested",!0)}get value(){return w(this,"value",void 0)}get dataPath(){return w(this,"dataPath","")}get name(){return w(this,"name",()=>Js(this.dataPath))}get index(){return w(this,"index",()=>lt(this.dataPath))}get itemDataPath(){return Ys(this.dataPath,this.nested)}get parentItemDataPath(){return Ks(this.dataPath,this.nested)}get itemIndex(){return lt(this.itemDataPath)}get parentItemIndex(){return lt(this.parentItemDataPath)}get item(){return w(this,"data",()=>rt(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=ot(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return w(this,"rootData",null)}get processedItem(){return w(this,"processedData",null)}get clipboardItem(){return w(this,"clipboardData",null)}get user(){return w(this,"user",null)}get api(){return w(this,"api",null)}get views(){return w(this,"views",null)}get itemLabel(){return w(this,"itemLabel",null)}get formLabel(){return w(this,"formLabel",null)}get component(){return w(this,"component",null)}get schemaComponent(){return w(this,"schemaComponent",null)}get formComponent(){return w(this,"formComponent",null)}get viewComponent(){return w(this,"viewComponent",null)}get dialogComponent(){return w(this,"dialogComponent",null)}get panelComponent(){return w(this,"panelComponent",null)}get resourceComponent(){return w(this,"resourceComponent",null)}get sourceComponent(){return w(this,"sourceComponent",null)}get option(){return w(this,"option",void 0)}get options(){return w(this,"options",void 0)}get query(){return w(this,"query",void 0)}get error(){return w(this,"error",void 0)}get wasNotified(){return w(this,"wasNotified",!1)}get request(){return e=>this.component.request(e)}get format(){return(e,s)=>this.component.format(e,s)}get navigate(){return e=>this.component.navigate(e)}get download(){return e=>this.component.download(e)}get getResourceUrl(){return e=>this.component.getResourceUrl(e)}get notify(){return e=>{this.component.notify(e),Zs(this,"wasNotified",!0)}}}const tn={data(){return{$events:null}},methods:{on(t,e){if(o.isArray(t))for(const s of t)this.on(s,e);else if(o.isPlainObject(t))for(const s in t)this.on(s,t[s]);else{const s=this.$events||(this.$events=Object.create(null)),{callbacks:n}=s[t]||(s[t]={callbacks:[],queue:[]});n.push(e)}return this},once(t,e){const s=(...n)=>(this.off(t,s),e.apply(this,n));return s.callback=e,this.on(t,s)},off(t,e){var s;if(!arguments.length)delete this.$events;else if(o.isArray(t))for(const n of t)this.off(n,e);else if(o.isPlainObject(t))for(const n in t)this.off(n,t[n]);else{const n=(s=this.$events)==null?void 0:s[t];if(n)if(!e)delete this.$events[t];else{const{callbacks:a}=n,i=a.findIndex(r=>r===e||r.callback===e);i!==-1&&a.splice(i,1)}}return this},emit(t,...e){var n;const s=(n=this.$events)==null?void 0:n[t];if(s){const{queue:a,callbacks:i}=s;return new Promise(r=>{const l=async()=>{const c=a.shift();if(c){let u;for(const d of i)try{const h=await d.apply(this,c.args);h!==void 0&&(u=h)}catch(h){console.error(`Error during event handler for '${t}':`,h)}c.resolve(u),l()}};a.push({args:e,resolve:r}),a.length===1&&l()})}},hasListeners(t){var e;if(o.isArray(t)){for(const s of t)if(!this.hasListeners(s))return!1;return t.length>0}else return!!((e=this.$events)!=null&&e[t])},delegate(t,e){if(e)if(o.isArray(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}},ut={Boolean:o.isBoolean,Number:o.isNumber,String:o.isString,Date:o.isDate,Array:o.isArray,Object:o.isObject,RegExp:o.isRegExp,Function:o.isFunction},en={Boolean:t=>!!t,Number:t=>+t,String:t=>String(t),Date:t=>o.isDate(t)?t:new Date(t),Array:t=>o.isArray(t)?t:o.isString(t)?t.split(","):o.asArray(t),Object:t=>o.isObject(t)?t:t===!0?{}:null,RegExp:t=>o.isRegExp(t)?t:new RegExp(t)};function dt(t,e){var s;if(t&&e!=null){for(const n of t)if((s=ut[n.name])!=null&&s.call(ut,e))return!0}return!1}function sn(t,e){const s=t&&en[t.name||t];return s?s(e):e}function Rt(t){return!!E(t.resource)}function E(t,e={}){var a;const{parent:s,...n}=e;return t=o.isObject(t)?{...n,...t}:o.isString(t)?{...n,path:t}:null,t&&s!==void 0&&t.parent===void 0&&!((a=t.path)!=null&&a.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function ht(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?{type:"member",...o.pickBy(e,(s,n)=>["method","path","parent"].includes(n)),id:`${t}`}:null}const pt={mixins:[tn],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:jt,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return jt.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new S(this,{nested:!1})},rootComponent(){return this.$root.$children[0]},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const t=this.routeComponent;return t!=null&&t.isForm?t:null},viewComponent(){const t=this.routeComponent;return t!=null&&t.isView?t:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var t;return(t=this.schemaComponent)==null?void 0:t.$parent.schemaComponent},parentRouteComponent(){var t;return(t=this.routeComponent)==null?void 0:t.$parent.routeComponent},parentFormComponent(){var t;return(t=this.formComponent)==null?void 0:t.$parent.formComponent},rootData(){var t;return(t=this.dataComponent)==null?void 0:t.data}},beforeCreate(){this.$uid=++nn},methods:{getStore(t){return this.store[t]},setStore(t,e){return this.$set(this.store,t,e)},getChildStore(t){return this.getStore(t)||this.setStore(t,{})},getSchemaValue(t,{type:e,default:s,schema:n=this.schema,callback:a=!0}={}){const i=e&&o.asArray(e);let r=n?o.isArray(t)?o.getValueAtDataPath(n,t,()=>{}):n[t]:void 0;if(r===void 0&&s!==void 0)return a&&o.isFunction(s)&&!dt(i,s)&&(s=s.call(this,this.context)),s;if(dt(i,r))return r;if(a&&o.isFunction(r)&&(r=r.call(this,this.context)),i&&r!=null&&!dt(i,r))for(const l of i){const c=sn(l,r);if(c!==r)return c}return r},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||o.labelize(e||t.name):o.labelize(e)||""},labelize:o.labelize,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||o.labelize(s)}},getDragOptions(t,e=!1){return{animation:150,disabled:!t,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:e}},getQueryLink(t){return{query:t,hash:this.$route.hash}},shouldRender(t=null){return!!t&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:t})},showDialog({components:t,buttons:e,data:s,settings:n={width:480,height:"auto",clickToClose:!1}}){return new Promise((a,i)=>{this.$modal.show(b.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:i}},n)})},getResourcePath(t){var e;return t=E(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(E(t))},getResourceUrl(t){const e=this.getResourcePath(t);return e?this.api.getApiUrl({url:e,query:t.query}):null},async sendRequest({method:t,url:e,resource:s,query:n,data:a,internal:i}){e||(e=this.getResourcePath(s)),t||(t=s==null?void 0:s.method);const r=!i&&this.api.isApiUrl(e);r&&await this.rootComponent.ensureUser();const l=await this.api.request({method:t,url:e,data:a,query:n});return r&&t==="patch"&&o.equals(s,ht(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},request({cache:t,...e}){const s=t&&{global:this.appState,local:this.dataComponent}[t],n=s==null?void 0:s.loadCache,a=n&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.query||e.params||"")} ${JSON.stringify(e.data||"")}`;if(n&&a in n)return n[a];const i=this.sendRequest(e).then(r=>r.data).catch(r=>{var c;const l=(c=r.response)==null?void 0:c.data;throw l?Object.assign(new Error(l.message),l):r});return n&&(n[a]=i),i},format(t,{locale:e=this.api.locale,defaults:s=this.api.formats,...n}={}){return o.format(t,{locale:e,defaults:s,...n})},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){o.isString(t)&&(t={url:t});const e=document.createElement("a");e.href=this.api.getApiUrl(t),e.download=t.filename??null;const{body:s}=document;s.appendChild(e),e.click(),s.removeChild(e)},notify(t){this.rootComponent.notify(t)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[t,e]of Object.entries(this.schema.methods||{}))o.isFunction(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=o.isFunction(e)?{get:e}:o.isObject(e)&&o.isFunction(e.get)?e:null;s?Object.defineProperty(this,t,s):console.error(`Invalid computed property definition: ${t}: ${e}`)}},setupEvents(){const{watch:t,events:e}=this.schema;if(t){const n=o.isFunction(t)?t.call(this):t;o.isObject(n)&&this.$nextTick(()=>{for(const[a,i]of Object.entries(n)){const r=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(r,i)}})}const s=(n,a,i)=>{o.isFunction(i)?this.on(o.hyphenate(a),i):console.error(`Invalid event definition: ${n}: ${i}`)};if(e)for(const[n,a]of Object.entries(e))s(n,n,a);for(const[n,a]of Object.entries(this.schema))/^on[A-Z]/.test(n)&&s(n,n.slice(2),a)},async emitEvent(t,{context:e=null,parent:s=null}={}){const n=this.hasListeners(t),a=s==null?void 0:s.hasListeners(t);if(n||a){["load","change"].includes(t)&&await this.$nextTick();const i=()=>e=S.get(this,e),r=n?await this.emit(t,i()):void 0;return a&&r!==!1&&s.emit(t,i()),r}},emitSchemaEvent(t,e){return this.schemaComponent.emitEvent(t,e)}}};let nn=0;const an=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:t=>o.isCreditCard(t),message:"is invalid"},decimals:{validate:(t,e)=>{const s=e==="*"?"+":`{1,${e}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${s})?$`).test(t)},message:(t,e)=>`must be numeric and may contain ${!e||e==="*"?"":e} decimal points`},domain:{validate:t=>o.isDomain(t),message:"is not a domain"},email:{validate:t=>o.isEmail(t),message:"must be a valid email"},hostname:{validate:t=>o.isHostname(t),message:"is not a host name"},integer:{validate:t=>o.isInteger(t),message:"must be whole number"},max:{validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},min:{validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},password:{validate:()=>!0},range:{validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},required:{validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},url:{validate:t=>o.isUrl(t),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),rn={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},computed:{events(){return{focus:()=>{this.isTouched=!0},blur:()=>{this.validate()},change:()=>{this.markDirty()},input:()=>{this.markDirty()}}}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(t=!0){let e=!0;t&&this.clearErrors();const{value:s}=this;for(const[n,a]of Object.entries(this.validations)){const i=an[n];if(i&&(i.nullish||s!=null)){const{validate:r,message:l}=i;if(!r(s,a,this.validations)&&(e=!1,t)){const c=o.isFunction(l)?l(s,a,this):l;this.addError(c,!0)}}}return t&&(this.isValidated=!0,this.isValid=e),e},verify(){return this.validate(!1)},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(t,e=!1){this.errors||(this.errors=[]),e&&(t=`The ${this.label||this.placeholder||this.name} field ${t}.`),this.errors.push(t),this.$emit("errors",this.errors)},showValidationErrors(t,e){this.errors=[];for(const{message:s}of t)this.addError(s,!0);return e&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function f(t,{type:e,default:s,get:n,set:a,callback:i=!0}={}){o.isString(t)&&t.includes(".")&&(t=o.parseDataPath(t));const r=o.normalizeDataPath(t);return{get(){const l=!n||n.length>0?this.overrides&&r in this.overrides?this.overrides[r]:this.getSchemaValue(t,{type:e,default:s,callback:i}):void 0;return n?n.call(this,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.$set(this.overrides,r,l))}}}function ft(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=o.isFunction(e)?e.call(this,this.context):e,this[t]=a,this.getStore(t)),s?s.call(this,a):a},set(a){(!n||(a=n.call(this,a))!==void 0)&&this.setStore(t,a)}}}const Tt=new WeakMap;let on=0;function ln(t,e){let s=Tt.get(t);return s||(s=e||`@${++on}`,Tt.set(t,s)),s}class cn{constructor(){Ft(this,"graph",{});Ft(this,"references",{})}set(e,s,n){e=o.parseDataPath(e);let a=this.graph;for(const i of e){const r=o.isInteger(+i)?"*":i;a=a[r]??(a[r]={})}a.$settings={...n,...a.$settings,...s}}addSource(e,s){this.set(e,{type:"source",schema:s},{related:!1})}setSourceRelated(e){this.set(e,{related:!0,reference:this.getReferencePrefix(e)})}addRelation(e,s,n){this.set(e,{type:"relation",schema:n,internal:!!s,reference:this.getReferencePrefix(s)})}getReferencePrefix(e){var s;return e?(s=this.references)[e]??(s[e]=Ms.nanoid(6)):null}flatten(){const e=s=>{const n=[];for(const[a,{$settings:i,...r}]of Object.entries(s)){i&&n.push([a,i]);for(const[l,c]of e(r))n.push([`${a}/${l}`,c])}return n};return e(this.graph)}process(e,s,{target:n}){const a=n==="clipboard";a&&delete s[e.idKey||"id"];for(const[i,r]of this.flatten()){const{type:l,schema:c,internal:u,related:d,reference:h}=r,m=l==="source",g=l==="relation";if(m||g&&u){const _=o.getValueAtDataPath(s,i,()=>null),y=a&&m&&!d,x=a&&(g&&u||m&&d);for(const P of o.asArray(_).flat()){const $=m&&c.idKey||g&&c.relateBy||"id";let D=P==null?void 0:P[$];if(D!=null&&(y&&delete P[$],x||Y(D))){Y(D)&&(D=D.slice(1));const k=a?$:m?"#id":"#ref",O=a?`@${D}`:h?`${h}-${D}`:D;P[k]=O,k!==$&&delete P[$]}}}}return s}}const Bt={},Lt={};function un(t,e){Bt[t]=e}function mt(t,e=!1){const s=Bt[t]||null;if(!s&&!e&&!Lt[t])throw Lt[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function Mt(t,e){const s=[...Object.values((t==null?void 0:t.tabs)||{}),t];for(const n of s)if(n){const a=e(n);if(a!==void 0)return a}}function qt(t,e){if(bt(t)){const s=e(t.component,t.name);if(s!==void 0)return s}else return Mt(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const i=e(a,n);if(i!==void 0)return i}})}function dn(t,e){return qt(t,(s,n)=>e(s,n)?!0:void 0)===!0}function K(t){return o.isObject(t)&&o.isString(t.type)}function hn(t){return K(t)&&t.type==="form"}function It(t){return K(t)&&t.type==="view"}function At(t){return t.name||t.label||t.type}async function _t(t,e=!1){if(o.isFunction(t)&&(t=t()),o.isPromise(t)&&(t=await t),o.isModule(t)&&(t={...t},!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],n!=="default"&&(t.name=n)}}return t}async function gt(t,e=_t){let s=o.isFunction(t)?t():t;return s=await _t(s,!1),o.isArray(s)?s=Object.fromEntries(await o.mapConcurrently(s,async n=>{const a=await e(n,!0);return[a.name,a]})):o.isObject(s)&&(s=Object.fromEntries(await o.mapConcurrently(Object.entries(s),async([n,a])=>{const i=await e(a,!0);return[n,i]}))),s}async function Nt(t){const{panels:e}=t;e&&(t.panels=await gt(e))}async function pn(t,e,s,n,a){const i=[];if(Ut(e,s,n),await Nt(s),It(s))bt(s)?await zt(e,s.component,n,i,0):await vt(e,s,i,1);else throw new Error(`Invalid view schema: '${At(s)}'`);a.push({path:`/${s.path}`,children:i,component:t,meta:{api:e,schema:s}})}function zt(t,e,s,n,a){var i,r;return e.level=a,(r=(i=R(e))==null?void 0:i.processSchema)==null?void 0:r.call(i,t,e,s,n,a)}function Ut(t,e,s){e.name=s,e.path||(e.path=t.normalizePath(s))}async function vt(t,e,s,n){const a=[];qt(e,(i,r)=>{a.push(zt(t,i,r,s,n))}),await Promise.all(a)}async function fn(t,e,s){let{form:n,forms:a,components:i}=e;a?a=e.forms=await gt(a,Ht):n?n=e.form=await Ht(n):i&&o.isObject(i)&&(n={components:i}),a||(a={default:n});const r=[];for(const l of Object.values(a))await vt(t,l,r,s+1);return r}async function Ht(t){if(t=await _t(t,!0),!hn(t))throw new Error(`Invalid form schema: '${At(t)}'`);return t&&await Nt(t),t}function M(t){return K(t)&&o.isObject(t.form||t.forms||t.components)}function mn(t){return K(t)&&Object.keys((t==null?void 0:t.forms)||{}).length>1}function bt(t){return It(t)&&o.isObject(t.component)}function yt(t,e){const{view:s}=t,n=s&&e.views[s];return n?M(n)?n:Mt(n,a=>{var r;const i=(r=a.components)==null?void 0:r[s];if(M(i))return i}):null}function _n(t,e){const s=yt(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function A(t,e,s){const n=yt(t,e);if(n)t=n;else if(t.view)throw new Error(`Unknown view: '${t.view}'`);let{form:a,forms:i,components:r,compact:l}=t;if(!a&&!i)if(r)a={components:r,compact:l};else return{};return i||(i={default:a}),Object.fromEntries(Object.entries(i).map(([c,u])=>(o.isFunction(u.components)&&(u={...u,components:u.components(e)}),[c,(s==null?void 0:s(u))??u])))}function Wt(t,e){return t[e==null?void 0:e.type]||t.default||null}function $t(t,e,s){return Wt(A(t,s),e)}function gn(t){return t.label!==!1}function Yt(t){return!!t.compact}function Ct(t){return!!(t.inlined||t.components)}function Kt(t){var e;return!!(t.nested||((e=R(t))==null?void 0:e.defaultNested)===!0)}function vn(t){var e;return!!((e=R(t))!=null&&e.omitPadding)}function Jt(t){var n;const e=t.default,s=e!==void 0?e:(n=R(t))==null?void 0:n.defaultValue;return o.isFunction(s)?s(t):o.clone(s)}function Qt(t){var s;const e=R(t);return!!(e!=null&&e.excludeValue||(s=e==null?void 0:e.ignoreMissingValue)!=null&&s.call(e,t))}function bn(t){const e=s=>Object.values(s||{}).some(gn);return e(t.components)||Object.values(t.tabs||{}).some(e)}function Xt(t,e={},s){return J(t,e,null,null,(i,r,l)=>{!(l in r)&&!Qt(i)&&(r[l]=Jt(i))},null,{component:s,rootData:e})}function Gt(t,e,s,n,{component:a=null,rootData:i=a==null?void 0:a.rootData}={}){const{compute:r}=t;if(r){const l=r(S.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:i}));l!==void 0&&v.set(e,s,l)}return!(s in e)&&!Qt(t)&&v.set(e,s,Jt(t)),e[s]}function Zt(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:i}=t,r=e[a];return r!==void 0&&(n[a]=r),mn(t)&&(n.type=e.type),i&&(n[i]=e[i]),n}else return{...e}}function yn(t,e,s,n,{component:a,schemaOnly:i,target:r}={}){const l={component:a,schemaOnly:i,target:r,rootData:s},c=Zt(e,s,l),u=new cn;return J(t,s,n,c,(m,g,_,y,x)=>{let P=Gt(m,g,_,y,l);if(o.isArray(P)){const{wrapPrimitives:$,orderKey:D,idKey:k="id"}=m;$?P=P.map(O=>({[$]:O})):P=[...P],D&&r==="clipboard"&&P.sort((O,B)=>{const T=O==null?void 0:O[k],kt=B==null?void 0:B[k];return T==null||Y(T)?1:kt==null||Y(kt)?-1:T-kt})}x[_]=P},(m,g,_,y,x)=>{const{wrapPrimitives:P,exclude:$,process:D}=m;let k=x[_];const O=R(m),B=()=>S.get(a,{value:k,name:_,data:g,dataPath:y,rootData:l.rootData,processedData:x});if(P&&o.isArray(k)&&(k=k.map(T=>T[P])),D&&(k=D(B())),O!=null&&O.excludeValue||$===!0||o.isFunction($)&&$(B()))delete x[_];else{const T=O==null?void 0:O.processValue;T&&(k=T(m,k,y,u)),x[_]=k}},l),u.process(e,c,l)}function J(t,e,s,n,a,i,r){const l=c=>{const u=(d,h)=>d!=null?j(d,h):null;if(c)for(const[d,h]of Object.entries(c))if(!Kt(h))J(h,e,s,n,a,i,r);else{const m=u(s,d),g=(y,x=null)=>{var B;const P=x!==null?u(m,x):m,$=S.get(r.component,{data:e,value:y,dataPath:P,index:x,rootData:r.rootData}),k=(((B=R(h))==null?void 0:B.getFormSchemasForProcessing)||A)(h,$),O=Wt(k,y);if(O){const T=n?Zt(h,y,r):null;return J(O,y,P,T,a,i,r)}else return{...y}};a==null||a(h,e,d,m,n);let _=n?n[d]:e[d];_!=null&&M(h)&&(o.isArray(_)?_=n?_.map(g):_.forEach(g):_=g(_),n&&(n[d]=_)),i==null||i(h,e,d,m,n)}};if(l(t.components),t.tabs)for(const c of Object.values(t.tabs))l(c.components);for(const c of ae(t,s))l(c.schema.components);return n||e}function q(t,e){const s=(n,a)=>n.length>0?n.reduce((i,r)=>{const l=a(r);return l&&(i[l.name]=l&&e?{...e,...l}:l),i},{}):null;return o.isArray(t)?s(t,n=>o.isObject(n)?n:{name:o.camelize(n,!1)}):o.isObject(t)?s(Object.entries(t),([n,a])=>o.isObject(a)?{name:n,...a}:o.isString(a)?{name:n,label:a}:null):null}function Q(t){return q(t,{type:"button"})}function te(t){return o.isObject(t)?t.type:t}function R(t){var e;return((e=mt(te(t),!0))==null?void 0:e.options)??null}function ee(t){var e,s;return((s=(e=R(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,te(t)))??null}function se(t,e,s){return t?{schema:t,dataPath:t.name?j(e,t.name):e,tabComponent:s}:null}function ne(t,e,s,n=[]){if(t)for(const[a,i]of Object.entries(t)){const r=se(i,j(e,a),s);r&&n.push(r)}return n}function ae(t,e,s=null,n=null){var r,l;const a=(l=(r=R(t))==null?void 0:r.getPanelSchema)==null?void 0:l.call(r,t,e,s),i=a?[se(a,e,n)]:[];return ne(t.panels,e,n,i),i}function N(t){return ee(t)==="object"}function z(t){return ee(t)==="list"}function ie(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function $n(t,e){return ln(e,ie(t,e))}const X={mixins:[rn],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},component(){return this.resolveTypeComponent(this.schema.component)},context(){return new S(this,{nested:this.nested})},value:{get(){const t=Gt(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new S(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new S(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return rt(this.rootItem,this.dataPath,this.nested)},parentItem(){return ot(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return rt(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:f("label",{type:[String,Boolean],get(t){return o.isString(t)?t:t!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:f("width",{type:[String,Number]}),visible:f("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),exclude:f("exclude",{type:Boolean,default:!1}),required:f("required",{type:Boolean,default:!1}),readonly:f("readonly",{type:Boolean,default:!1}),autofocus:f("autofocus",{type:Boolean,default:!1}),clearable:f("clearable",{type:Boolean,default:!1}),placeholder:f("placeholder",{type:String}),autocomplete:f("autocomplete",{type:String}),attributes(){const{nativeField:t,textField:e}=this.$options,s={disabled:this.disabled};return t&&(s.name=this.name,this.label&&(s.title=this.label),s.readonly=this.readonly,s.autofocus=this.autofocus,e&&(s.placeholder=this.placeholder,s.autocomplete=this.autocomplete)),s},listeners(){const t=this.getListeners(),{events:e={}}=this.schema;if(e)for(const s of Object.keys(e))t[s]||(t[s]=()=>this.emitEvent(s));return t},validations(){const t={...this.getValidations()};this.required&&(t.required=!0);for(const[e,s]of Object.entries(this.schema.rules||{}))s===void 0?delete t[e]:t[e]=s;return t},providesData(){return!1},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeDestroy(){this._register(!1)},methods:{_register(t){this.nested&&(this.schemaComponent._registerComponent(this,t),this[t?"on":"off"](this.events))},getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onInput,change:this.onChange}},getValidations(){return null},focusElement(){const[t]=o.asArray(this.$refs.element);t&&this.$nextTick(()=>{var e,s;t.focus(),this.disabled&&((s=(e=t.$el||t).scrollIntoView)==null||s.call(e))})},focus(){var t;this.schemaComponent.focus(),(t=this.tabComponent)==null||t.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.emitEvent("focus")},onBlur(){this.focused=!1,this.emitEvent("blur")},onInput(){this.emitEvent("input")},onChange(){this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}},G={},b=v.extend({components:G,mixins:[pt],methods:{getTypeComponent:mt,resolveComponent(t,e=[]){return t&&(async()=>{let s=o.isFunction(t)?await t():o.isPromise(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=G,s})},resolveDitoComponent(t){return this.resolveComponent(t,[pt])},resolveTypeComponent(t){return this.resolveComponent(t,[pt,X])}}});b.component=function(t,e){if(e){e={name:t,...e};const s=this.extend(e);return G[t]=s,s}else return G[t]||v.component(t)};class Cn{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}const re={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(t,e){const{schemaComponents:s}=this;e?s.push(t):s.splice(s.indexOf(t),1)}}},oe={mixins:[re],computed:{errors(){return this.schemaComponents.reduce((t,{errors:e})=>e&&t?t.concat(e):e,null)},isTouched(){return this.schemaComponents.some(t=>t.isTouched)},isDirty(){return this.schemaComponents.some(t=>t.isDirty)},isValid(){return this.schemaComponents.every(t=>t.isValid)},isValidated(){return this.schemaComponents.every(t=>t.isValid)}},methods:{validateAll(t,e=!0){return this.schemaComponents.every(s=>s.validateAll(t,e))},verifyAll(t){return this.schemaComponents.every(e=>e.verifyAll(t))},resetValidation(){this.schemaComponents.forEach(t=>t.resetValidation())},clearErrors(){this.schemaComponents.forEach(t=>t.clearErrors())},showValidationErrors(t,e){this.schemaComponents.forEach(s=>s.showValidationErrors(t,e))}}},le={mixins:[oe],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(t,e,s){this.beforeRouteChange(t,e,s)},beforeRouteLeave(t,e,s){this.beforeRouteChange(t,e,s)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeRecord(){return this.$route.matched[this.$vnode.data.routerViewDepth]},isLastRoute(){const{matched:t}=this.$route;return this.routeRecord===t[t.length-1]},isLastUnnestedRoute(){const{matched:t}=this.$route;for(let e=t.length-1;e>=0;e--){const s=t[e];if(!s.meta.nested)return this.routeRecord===s}return!1},isNestedRoute(){return this.meta.nested},meta(){var t;return(t=this.routeRecord)==null?void 0:t.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:t}=this.schema||{};return t||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var t;return this.$route.params[(t=this.meta)==null?void 0:t.param]||null},doesMutate(){return!1}},created(){this.appState.routeComponents.push(this)},destroyed(){const{routeComponents:t}=this.appState;t.splice(t.indexOf(this),1)},methods:{beforeRouteChange(t,e,s){let n=!0;e.path.startsWith(this.path)&&!t.path.startsWith(this.path)&&e.path!==t.path&&(this.isFullRouteChange(t,e)||t.path.length<=e.path.length)&&(this.doesMutate?n=this.isValidated||this.validateAll():this.isDirty&&(n=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),s(n)},getRoutePath(t){return this.$route.path.split("/").slice(0,t.split("/").length).join("/")},getChildPath(t){return`${this.path}/${t}`},isFullRouteChange(t,e){const s=this.path.match(/^(\/[^/]*)/)[1];return!o.getCommonPrefix(t.path,e.path).startsWith(s)}}};var wn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isLastRoute?t.shouldRender(t.viewSchema)?s("div",{staticClass:"dito-view dito-scroll-parent",attrs:{"data-resource":t.sourceSchema.path}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.viewSchema,data:t.data,meta:t.meta,store:t.getChildStore(t.name),disabled:t.isLoading,generateLabels:!1,menuHeader:!0}})],1):t._e():s("router-view",{key:t.name})},Pn=[];function p(t,e,s,n,a,i,r,l){var c=typeof t=="function"?t.options:t;e&&(c.render=e,c.staticRenderFns=s,c._compiled=!0),n&&(c.functional=!0),i&&(c._scopeId="data-v-"+i);var u;if(r?(u=function(m){m=m||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!m&&typeof __VUE_SSR_CONTEXT__<"u"&&(m=__VUE_SSR_CONTEXT__),a&&a.call(this,m),m&&m._registeredComponents&&m._registeredComponents.add(r)},c._ssrRegister=u):a&&(u=l?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),u)if(c.functional){c._injectStyles=u;var d=c.render;c.render=function(g,_){return u.call(_),d(g,_)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,u):[u]}return{exports:t,options:c}}const Sn=b.component("dito-view",{mixins:[le],provide(){return{$sourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.sourceComponent)||null},$resourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.resourceComponent)||null}}},data(){return{isView:!0,isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isSingleComponentView(){return bt(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{component:t,...e}=this.schema;return this.isSingleComponentView?{...e,components:{[e.name]:{name:e.name,label:!1,...t}}}:e},providesData(){return dn(this.viewSchema,t=>Rt(t))}},watch:{$route(t,e){this.isFullRouteChange(t,e)&&(this.isLoading=!1,this.data={})}},methods:{setData(t){this.data=t},getChildPath(t){return this.isSingleComponentView?this.path:`${this.path}/${t}`},setLoading(t){this.isLoading=!!t}}}),ce={};var Dn=p(Sn,wn,Pn,!1,xn,null,null,null);function xn(t){for(let e in ce)this[e]=ce[e]}const ue=function(){return Dn.exports}(),dd="";function Z(t,{year:e=(t==null?void 0:t.getFullYear())??0,month:s=(t==null?void 0:t.getMonth())??0,day:n=(t==null?void 0:t.getDate())??0,hour:a=(t==null?void 0:t.getHours())??0,minute:i=(t==null?void 0:t.getMinutes())??0,second:r=(t==null?void 0:t.getSeconds())??0,millisecond:l=(t==null?void 0:t.getMilliseconds())??0}={}){return new Date(e,s,n,a,i,r,l)}function tt(t,e){for(const s in e)t.addEventListener(s,e[s],!1);return{remove(){for(const s in e)t.removeEventListener(s,e[s],!1)}}}function On(t){return{37:"left",38:"up",39:"right",40:"down",13:"enter"}[t.keyCode]}function de(t){const e=On(t);return{hor:{left:-1,right:1}[e]||0,ver:{up:-1,down:1}[e]||0,enter:e==="enter"}}function he(t,e,s){const n=window.requestAnimationFrame||function(){return setTimeout(arguments[0],10)};if(s<=0)t.scrollTop=e;else{const i=(e-t.scrollTop)/s*10;n(()=>{t.scrollTop=t.scrollTop+i,t.scrollTop!==e&&he(t,e,s-10)})}}function kn(t,e,s){if(t.createTextRange){const n=t.createTextRange();n.collapse(!0),n.moveStart("character",e),n.moveEnd("character",s),n.select(),t.focus()}else t.setSelectionRange?(t.focus(),t.setSelectionRange(e,s)):"selectionStart"in t&&(t.selectionStart=e,t.selectionEnd=s,t.focus())}var Fn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-calendar"},[s("div",{staticClass:"dito-calendar-popup"},[s("div",{staticClass:"dito-calendar-inner"},[t.currentMode==="day"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev dito-calendar-step-year",on:{click:function(n){return t.stepYear(-1)}}}),s("a",{staticClass:"dito-calendar-step-prev dito-calendar-step-month",on:{click:function(n){return t.stepMonth(-1)}}}),s("span",[s("a",{staticClass:"dito-calendar-select-year",on:{click:function(n){return t.setMode("year")}}},[t._v(t._s(t.dateToString(t.currentValue,{year:1})))]),s("a",{staticClass:"dito-calendar-select-month",on:{click:function(n){return t.setMode("month")}}},[t._v(t._s(t.dateToString(t.currentValue,{month:1})))])]),s("a",{staticClass:"dito-calendar-step-next dito-calendar-step-month",on:{click:function(n){return t.stepMonth(1)}}}),s("a",{staticClass:"dito-calendar-step-next dito-calendar-step-year",on:{click:function(n){return t.stepYear(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-weekdays"},t._l(t.weekdayNames,function(n){return s("span",[t._v(t._s(n.short))])}),0),s("div",{staticClass:"dito-calendar-dates"},t._l(t.dateRange,function(n){return s("span",{class:n.state&&`dito-calendar-item-${n.state}`,on:{click:function(a){return t.selectDate(n.date,n.state,!0)}}},[t._v(t._s(n.text))])}),0)]),s("div",{staticClass:"dito-calendar-footer"},[s("a",{staticClass:"dito-calendar-select-today",attrs:{role:"button",title:t.dateToString(new Date,{year:1,month:1,day:1})},on:{click:function(n){t.selectDate(new Date)}}})])]:t.currentMode==="month"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev",on:{click:function(n){return t.stepYear(-1)}}}),s("span",[s("a",{staticClass:"dito-calendar-select-year",on:{click:function(n){return t.setMode("year")}}},[t._v(t._s(t.dateToString(t.currentValue,{year:1})))])]),s("a",{staticClass:"dito-calendar-step-next",on:{click:function(n){return t.stepYear(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-months"},t._l(t.monthNames,function(n,a){return s("span",{class:t.getMonthClass(a),on:{click:function(i){return t.selectMonth(a)}}},[t._v(t._s(n.short))])}),0)])]:t.currentMode==="year"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev",on:{click:function(n){return t.stepDecade(-1)}}}),s("span",[t._v(t._s(t.decadeToString(t.currentValue)))]),s("a",{staticClass:"dito-calendar-step-next",on:{click:function(n){return t.stepDecade(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-years"},t._l(t.yearRange,function(n){return s("span",{class:t.getYearClass(n),on:{click:function(a){return t.selectYear(n)}}},[t._v(t._s(n))])}),0)])]:t._e()],2)])])},jn=[];const hd="",Vn={props:{value:{type:Date,default:null},locale:{type:String,default:"en-US"},disabledDate:{type:Function,default:()=>!1},mode:{type:String,default:"day"}},data(){const{weekdayNames:t,monthNames:e}=En(this.locale);return{weekdayNames:t,monthNames:e,dateRange:[],yearRange:[],currentValue:this.value||Z(new Date,{hour:0,minute:0,second:0,millisecond:0}),currentMode:this.mode}},watch:{currentValue:"updateDateRange",disabledDate:"updateDateRange",value(t,e){+t!=+e&&(this.currentValue=t||new Date)},mode(t){this.currentMode=t}},mounted(){this.updateDateRange()},methods:{getMonthClass(t){return{"dito-calendar-item-active":this.value&&t===this.value.getMonth()&&this.currentValue.getFullYear()===this.value.getFullYear(),"dito-calendar-item-current":t===this.currentValue.getMonth()}},getYearClass(t){return{"dito-calendar-item-active":this.value&&t===this.value.getFullYear(),"dito-calendar-item-current":t===this.currentValue.getFullYear()}},setDate(t){this.currentValue=Z(this.currentValue,t)},stepDecade(t){this.setDate({year:this.currentValue.getFullYear()+t*10})},setMode(t){this.currentMode=t},stepMonth(t){const{currentValue:e}=this,{year:s,month:n}=this.getYearMonth(e.getFullYear(),e.getMonth()+t);this.setDate({month:n,day:Math.min(this.getDaysInMonth(s,n),this.currentValue.getDate())})},stepYear(t){this.setDate({year:this.currentValue.getFullYear()+t})},selectDate(t,e,s=!1){e!=="disabled"&&(s?this.setDate({year:t.getFullYear(),month:t.getMonth(),day:t.getDate()}):this.currentValue=t,this.$emit("input",this.currentValue))},selectMonth(t){this.setMode("day"),this.setDate({month:t,day:1})},selectYear(t){this.setMode("month"),this.setDate({year:t})},getYearMonth(t,e){return e>11?(t++,e=0):e<0&&(t--,e=11),{year:t,month:e}},dateToString(t,{year:e,month:s,day:n}){return t.toLocaleString(this.locale,{year:e&&"numeric",month:s&&"long",day:n&&"numeric"})},decadeToString(t){const e=this.getFirstYearOfDecade(t.getFullYear());return`${e} – ${e+9}`},getDaysInMonth(t,e){return new Date(t,e+1,0).getDate()},getFirstYearOfDecade(t){return+`${t.toString().slice(0,-1)}0`},navigate({hor:t,ver:e,enter:s}){const{currentMode:n,currentValue:a}=this;if(t||e){switch(n){case"day":this.setDate({day:a.getDate()+t+e*7});break;case"month":this.setDate({month:a.getMonth()+t+e*6});break;case"year":this.setDate({year:a.getFullYear()+t+e*5});break}return!0}else if(s){switch(n){case"day":this.selectDate(a);break;case"month":this.setMode("day");break;case"year":this.setMode("month");break}return!0}},updateDateRange(){this.dateRange=[],this.yearRange=[];const{currentValue:t}=this,e=t.getFullYear(),s=t.getMonth(),n=this.getFirstYearOfDecade(e);for(let u=0;u<10;u++)this.yearRange.push(n+u);let i=new Date(e,s,1).getDay()+1;i===0&&(i=7);const r=this.getDaysInMonth(e,s);if(i>1){const u=this.getYearMonth(e,s-1),d=this.getDaysInMonth(u.year,u.month);for(let h=1;h<i;h++){const m=d-i+h+1,g=new Date(u.year,u.month,m);this.dateRange.push({text:m,date:g,state:this.disabledDate(g)?"disabled":"gray"})}}const l=new Date;for(let u=1;u<=r;u++){const d=new Date(e,s,u),h=g=>g&&g.getDate()===u&&g.getFullYear()===e&&g.getMonth()===s,m=h(this.value)?"active":h(l)?"today":this.disabledDate(d)?"disabled":h(t)?"current":null;this.dateRange.push({text:u,date:d,state:m})}const c=42-this.dateRange.length;if(c>0){const u=this.getYearMonth(e,s+1);for(let d=1;d<=c;d++){const h=new Date(u.year,u.month,d),m=this.disabledDate(h)?"disabled":"gray";this.dateRange.push({text:d,date:h,state:m})}}}}},pe={};function En(t){let e=pe[t];if(!e){const s=[];for(let a=0;a<7;a++){const i=new Date(0,0,a);s.push({long:i.toLocaleString(t,{weekday:"long"}),short:i.toLocaleString(t,{weekday:"short"})})}const n=[];for(let a=1;a<=12;a++){const i=new Date(0,a,0);n.push({long:i.toLocaleString(t,{month:"long"}),short:i.toLocaleString(t,{month:"short"})})}e=pe[t]={weekdayNames:s,monthNames:n}}return e}const fe={};var Rn=p(Vn,Fn,jn,!1,Tn,null,null,null);function Tn(t){for(let e in fe)this[e]=fe[e]}const Bn=function(){return Rn.exports}();var Ln=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-trigger-container"},[t.alwaysShow?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass},[t._t("trigger")],2):t.trigger==="click"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass,on:{click:t.onClick}},[t._t("trigger")],2):t.trigger==="hover"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass,on:{mouseenter:function(n){return t.onHover(!0)},mouseleave:function(n){return t.onHover(!1)}}},[t._t("trigger")],2):t.trigger==="focus"||t.trigger==="always"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass},[t._t("trigger")],2):t._e(),s("transition",{attrs:{name:t.transition}},[t.trigger==="hover"?s("div",{directives:[{name:"show",rawName:"v-show",value:t.showPopup,expression:"showPopup"}],ref:"popup",staticClass:"dito-popup",class:t.popupClass,style:t.popupStyle,on:{mouseenter:function(n){return t.onHover(!0)},mouseleave:function(n){return t.onHover(!1)}}},[t.showPopup?t._t("popup"):t._e()],2):s("div",{directives:[{name:"show",rawName:"v-show",value:t.showPopup,expression:"showPopup"}],ref:"popup",staticClass:"dito-popup",class:t.popupClass,style:t.popupStyle},[t.showPopup?t._t("popup"):t._e()],2)])],1)},Mn=[];const pd="",qn={props:{trigger:{type:String,default:"click"},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom"},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:null},customClass:{type:String,default:null},zIndex:{type:Number,default:0},keepInView:{type:Boolean,default:!0},hideWhenClickOutside:{type:Boolean,default:!0},alwaysShow:{type:Boolean,default:!1},cover:{type:Boolean,default:!1},hideDelay:{type:Number,default:0}},data(){return{showPopup:this.show,popupPlacement:this.placement}},computed:{triggerClass(){return{"dito-trigger-disabled":this.disabled}},popupClass(){const t={[`dito-popup-${o.hyphenate(this.placement)}`]:!0};return this.customClass&&(t[this.customClass]=!0),t},popupStyle(){return this.zIndex?`z-index: ${this.zIndex}`:""}},watch:{show(t){this.showPopup=t||this.alwaysShow},showPopup(t,e){!t!=!e&&(this.$emit("update:show",t),t&&this.$nextTick(()=>this.updatePosition()))}},mounted(){const{trigger:t,popup:e}=this.$refs;if(this.trigger==="focus"){const s=t.querySelector("input, textarea");s&&(this.focusEvents=tt(s,{focus:()=>{this.showPopup=!0},blur:()=>{this.showPopup=!1}}))}this.hideWhenClickOutside&&!this.alwaysShow&&(this.closeEvents=tt(window,{mouseup:s=>{this.showPopup&&!e.contains(s.target)&&!t.contains(s.target)&&(this.showPopup=!1)},blur:()=>{this.showPopup=!1}})),this.alwaysShow&&(this.showPopup=!0)},created(){this.showPopup=this.show},beforeDestroy(){var t,e;(t=this.focusEvents)==null||t.remove(),(e=this.closeEvents)==null||e.remove(),this.mouseLeaveTimer=null},methods:{updatePosition(){const{trigger:t,popup:e}=this.$refs;if(this.show&&e.offsetWidth===0){setTimeout(()=>this.updatePosition(),0);return}const s=o.isString(this.target)?this.$refs[this.target]:this.target;if(s){const _=s===e?t:e.firstChild;_.style.width=getComputedStyle(s).width}const n=(s||t).getBoundingClientRect(),a=n.left+window.scrollX,i=n.top+window.scrollY,r=n.width,l=n.height,c=e.offsetWidth,u=e.offsetHeight;let[d,h]=this.popupPlacement.split("-")||[];if(this.keepInView){const _=window.innerWidth,y=window.innerHeight;d==="top"?i<u&&(d="bottom"):d==="bottom"?y-i-l<u&&(d="top"):d==="left"?a<c&&(d="right"):d==="right"&&_-a-r<c&&(d="left"),h==="top"?y-i<u&&(h="bottom"):h==="bottom"?i+l<u&&(h="top"):h==="left"?_-a<c&&(h="right"):h==="right"&&a+r<c&&(h="left")}let m=0,g=0;switch(d){case"top":g-=u;break;case"left":m-=c;break;case"right":m+=r;break;case"bottom":g+=l;break}switch(h){case"right":m-=c-r;break;case"bottom":g-=u-l;break}if(this.cover&&(d==="top"?g+=l:d==="bottom"&&(g-=l)),s&&s!==t){const _=t.getBoundingClientRect();m+=a-_.left,g+=i-_.top}e.style.left=`${m}px`,e.style.top=`${g}px`,this.$emit("update-position",{trigger:t,popup:e,placement:this.popupPlacement})},onClick(){this.disabled||(this.showPopup=!this.showPopup)},onHover(t){this.disabled||(clearTimeout(this.mouseLeaveTimer),t?this.showPopup=!0:this.hideDelay?this.mouseLeaveTimer=setTimeout(()=>{this.showPopup=!1},this.hideDelay):this.showPopup=!1)}}},me={};var In=p(qn,Ln,Mn,!1,An,null,null,null);function An(t){for(let e in me)this[e]=me[e]}const wt=function(){return In.exports}();var Nn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-input"},[t.attributes.type==="checkbox"?s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:"checkbox"},domProps:{checked:Array.isArray(t.currentValue)?t._i(t.currentValue,null)>-1:t.currentValue},on:{change:function(n){var a=t.currentValue,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.currentValue=a.concat([l])):c>-1&&(t.currentValue=a.slice(0,c).concat(a.slice(c+1)))}else t.currentValue=r}}},"input",t.attributes,!1),t.listeners)):t.attributes.type==="radio"?s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:"radio"},domProps:{checked:t._q(t.currentValue,null)},on:{change:function(n){t.currentValue=null}}},"input",t.attributes,!1),t.listeners)):s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:t.attributes.type},domProps:{value:t.currentValue},on:{input:function(n){n.target.composing||(t.currentValue=n.target.value)}}},"input",t.attributes,!1),t.listeners))])},zn=[];const fd="",Un={props:{type:{type:String,default:"text"},value:{type:[String,Number],default:null},id:{type:String,default:null},name:{type:String,default:null},title:{type:String,default:null},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},placeholder:{type:String,default:null},autocomplete:{type:String,default:"off"}},data(){return{currentValue:this.value,hovering:!1,focused:!1}},computed:{attributes(){const{id:t,name:e,type:s,size:n,title:a,disabled:i,readonly:r,placeholder:l,autocomplete:c,$attrs:u}=this;return{id:t,name:e,type:s,size:n,title:a,disabled:i,readonly:r,placeholder:l,autocomplete:c,...u}},listeners(){const{input:t,...e}=this.$listeners;return e},size(){const{size:t,min:e,max:s}=this.$attrs,n=a=>a!=null?`${a}`.length:0;return t||n(e)||n(s)||void 0}},watch:{value(t,e){t!==e&&(this.currentValue=t)},currentValue(t){t!==this.value&&this.$emit("input",t)}},methods:{focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},_e={};var Hn=p(Un,Nn,zn,!1,Wn,null,null,null);function Wn(t){for(let e in _e)this[e]=_e[e]}const U=function(){return Hn.exports}();var Yn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",t._b({ref:"trigger",staticClass:"dito-date-picker",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},"trigger",{transition:t.transition,placement:t.placement,disabled:t.disabled,target:t.target},!1),[s("input-field",t._b({ref:"input",staticClass:"dito-date-picker-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger",type:"text",value:t.currentText,readonly:""},on:{focus:function(n){t.inputFocused=!0},blur:function(n){t.inputFocused=!1},keydown:t.onKeyDown},slot:"trigger"},"input-field",{placeholder:t.placeholder,disabled:t.disabled},!1)),s("calendar",t._b({ref:"calendar",staticClass:"dito-date-picker-popup",attrs:{slot:"popup",value:t.currentValue},on:{input:t.selectDate},slot:"popup"},"calendar",{locale:t.locale,disabledDate:t.disabledDate},!1))],1)},Kn=[];const md="",Jn={components:{Trigger:wt,Calendar:Bn,InputField:U},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},locale:{type:String,default:"en-US"},dateFormat:{type:Object,default:()=>o.defaultFormats.date},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledDate:{type:Function,default:()=>!1}},data(){return{currentValue:this.value,showPopup:this.show,inputFocused:!1,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return o.format(this.currentValue,{locale:this.locale,date:this.dateFormat,time:!1})||""}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t))},show(t){this.showPopup=t},showPopup(t,e){!t!=!e&&this.$emit("update:show",t)},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{selectDate(t){this.currentValue=t,this.showPopup=!1},onKeyDown(t){var e;(e=this.$refs.calendar)!=null&&e.navigate(de(t))&&t.preventDefault()},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},ge={};var Qn=p(Jn,Yn,Kn,!1,Xn,null,null,null);function Xn(t){for(let e in ge)this[e]=ge[e]}const ve=function(){return Qn.exports}();var Gn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",t._b({ref:"trigger",staticClass:"dito-time-picker",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},"trigger",{transition:t.transition,placement:t.placement,disabled:t.disabled,target:t.target},!1),[s("input-field",t._b({ref:"input",staticClass:"dito-time-picker-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger",type:"text",value:t.currentText,readonly:""},on:{focus:function(n){t.inputFocused=!0},blur:function(n){t.inputFocused=!1},keydown:t.onKeyDown},slot:"trigger"},"input-field",{placeholder:t.placeholder,disabled:t.disabled},!1)),s("div",{staticClass:"dito-time-picker-popup",attrs:{slot:"popup"},slot:"popup"},[s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"hour",staticClass:"dito-time-picker-hour",on:{mouseover:function(n){t.selection=0}}},t._l(24,function(n){return t.disabledHour(n-1)?t._e():s("li",{class:{selected:t.hour===n-1},on:{click:function(a){t.hour=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)]),s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"minute",staticClass:"dito-time-picker-minute",on:{mouseover:function(n){t.selection=1}}},t._l(60,function(n){return t.disabledMinute(n-1)?t._e():s("li",{class:{selected:t.minute===n-1},on:{click:function(a){t.minute=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)]),s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"second",staticClass:"dito-time-picker-second",on:{mouseover:function(n){t.selection=2}}},t._l(60,function(n){return t.disabledSecond(n-1)?t._e():s("li",{class:{selected:t.second===n-1},on:{click:function(a){t.second=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)])])],1)},Zn=[];const _d="",ta={components:{Trigger:wt,InputField:U},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledHour:{type:Function,default:()=>!1},disabledMinute:{type:Function,default:()=>!1},disabledSecond:{type:Function,default:()=>!1}},data(){return{currentValue:this.value,showPopup:this.show,inputFocused:!1,selection:0,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return this.currentValue?`${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${this.leftPad(this.second)}`:""},currentDate(){return this.currentValue||Z(new Date,{hour:0,minute:0,second:0,millisecond:0})},hour:{get(){return this.currentDate.getHours()},set(t){this.setTime({hour:t})}},minute:{get(){return this.currentDate.getMinutes()},set(t){this.setTime({minute:t})}},second:{get(){return this.currentDate.getSeconds()},set(t){this.setTime({second:t})}}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t),this.scrollAll())},currentText:"updateSelection",selection:"updateSelection",show(t){this.showPopup=t},showPopup(t,e){t&&(this.updateSelection(),this.scrollAll(0)),!t!=!e&&this.$emit("update:show",t)},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{leftPad(t){return("0"+t).slice(-2)},setTime(t){this.currentValue=Z(this.currentDate,{...t,millisecond:0})},updateSelection(t=!1){if(this.showPopup||t){const e=3*this.selection;this.$nextTick(()=>kn(this.$refs.input,e,e+2))}},scrollAll(t=100){const e=(s,n)=>{const a=this.$refs[s];if(a){const i=a.scrollHeight/(a.children.length+6);he(a,Math.round(n*i),t)}};this.$nextTick(()=>{e("hour",this.hour),e("minute",this.minute),e("second",this.second)})},onKeyDown(t){const e=["hour","minute","second"][this.selection];if(e){const{hor:s,ver:n,enter:a}=de(t);if(s){const i=this.selection+s;this.selection=i<0?2:i>2?0:i}else if(n){const i=this[e]+n,{length:r}=this.$refs[e].children;this[e]=i<0?i+r:i>=r?i-r:i}a&&(this.showPopup=!1),(s||n||a)&&(this.updateSelection(!0),t.preventDefault())}},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},be={};var ea=p(ta,Gn,Zn,!1,sa,null,null,null);function sa(t){for(let e in be)this[e]=be[e]}const ye=function(){return ea.exports}();var na=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"picker",staticClass:"dito-date-time-picker"},[s("div",{staticClass:"dito-pickers",class:{"dito-focus":t.focused}},[s("date-picker",t._b({ref:"date",attrs:{placement:"bottom-left",target:t.$refs.picker,show:t.showDate},on:{"update:show":function(n){t.showDate=n},focus:function(n){t.dateFocused=!0},blur:function(n){t.dateFocused=!1}},model:{value:t.currentValue,callback:function(n){t.currentValue=n},expression:"currentValue"}},"date-picker",{transition:t.transition,placeholder:t.placeholder,locale:t.locale,dateFormat:t.dateFormat,disabled:t.disabled},!1)),s("time-picker",t._b({ref:"time",attrs:{placeholder:"",placement:"bottom-right",target:t.$refs.picker,show:t.showTime},on:{"update:show":function(n){t.showTime=n},focus:function(n){t.timeFocused=!0},blur:function(n){t.timeFocused=!1}},model:{value:t.currentValue,callback:function(n){t.currentValue=n},expression:"currentValue"}},"time-picker",{transition:t.transition,disabled:t.disabled},!1))],1)])},aa=[];const gd="",ia={components:{DatePicker:ve,TimePicker:ye},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placeholder:{type:String,default:null},dateFormat:{type:Object,default:()=>o.defaultFormats.date},locale:{type:String,default:"en-US"},disabled:{type:Boolean,default:!1}},data(){return{currentValue:this.value,showDate:!1,showTime:!1,dateFocused:!1,timeFocused:!1,changed:!1}},computed:{focused(){return this.dateFocused||this.timeFocused}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t))},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{focus(){this.$refs.date.focus()},blur(){this.$refs.date.blur(),this.$refs.time.blur()}}},$e={};var ra=p(ia,na,aa,!1,oa,null,null,null);function oa(t){for(let e in $e)this[e]=$e[e]}const la=function(){return ra.exports}();var ca=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("i",{staticClass:"dito-icon",class:`dito-icon-${t.name}`})},ua=[];const vd="",da={props:{name:{type:String,required:!0}}},Ce={};var ha=p(da,ca,ua,!1,pa,null,null,null);function pa(t){for(let e in Ce)this[e]=Ce[e]}const fa=function(){return ha.exports}();var ma=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-pagination"},[t.showTotal?s("div",{staticClass:"dito-pagination-total"},[t.total>0?[t._v(t._s(t.first)+" – "+t._s(t.last))]:[t._v("0")],t._v(" / "+t._s(t.total))],2):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},t._l(t.pageRange,function(n){return s("button",{staticClass:"dito-button",class:t.getPageClass(n),attrs:{disabled:n.disabled},on:{click:function(a){return t.onClickPage(n)}}},[n.text?s("span",[t._v(t._s(n.text))]):t._e()])}),0)])},_a=[];const bd="",ga={props:{total:{type:Number,default:0},page:{type:Number,default:1},pageSize:{type:Number,default:10},showTotal:{type:Boolean,default:!0}},data(){return{pageRange:[],showPrev:!0,showNext:!0,numPages:0,currentPageSize:this.pageSize,currentPage:this.page}},computed:{first(){return(this.currentPage-1)*this.currentPageSize+1},last(){return Math.min(this.first+this.currentPageSize-1,this.total)}},watch:{total:"updatePageRange",showPrev:"updatePageRange",showNext:"updatePageRange",page(t){this.currentPage=t},pageSize(t){this.currentPageSize=t},currentPageSize(t){this.numPages=Math.ceil(this.total/t),this.currentPage>this.numPages&&(this.currentPage=this.numPages),this.updatePageRange(),this.$emit("size-change",this.page,t)},currentPage(t,e){t!==e&&(this.updatePageRange(),this.$emit("update:page",t))}},created(){this.currentPage=this.page,this.currentPageSize=this.pageSize},mounted(){this.updatePageRange()},methods:{onClickPage(t){t.index&&!t.disabled&&t.index!==this.currentPage&&(this.currentPage=t.index)},getPageClass(t){const e={"dito-selected":t.active};return t.type&&(e[`dito-button-${t.type}`]=!0),e},updatePageRange(){const{showPrev:t,showNext:e,total:s,currentPageSize:n,currentPage:a}=this,i=t+e+1,r=this.numPages=Math.ceil(s/n);let l=1,c=1;r<=i?c=r:a<=t+1?c=i:a>=r-e?(c=r,l=r-i+1):(l=a-t,c=a+e);const u=[];u.push({index:a-1,type:"prev",disabled:a<=1}),l>=2&&u.push({index:1,text:1}),l>2&&u.push({index:Math.max(1,a-10),type:"ellipsis-prev"});for(let d=l;d<=c;d++)u.push({index:d,text:d,active:d===a});c<r-1&&u.push({index:Math.min(r,a+10),type:"ellipsis-next"}),c<=r-1&&u.push({index:r,text:r}),u.push({index:a+1,type:"next",disabled:a>=r}),this.pageRange=u}}},we={};var va=p(ga,ma,_a,!1,ba,null,null,null);function ba(t){for(let e in we)this[e]=we[e]}const ya=function(){return va.exports}();var $a=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-switch",class:t.classes,style:t.styles},[s("div",{staticClass:"dito-switch-pane"},[s("input",t._b({directives:[{name:"model",rawName:"v-model",value:t.checked,expression:"checked"}],ref:"input",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(t.checked)?t._i(t.checked,null)>-1:t.checked},on:{change:function(n){var a=t.checked,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.checked=a.concat([l])):c>-1&&(t.checked=a.slice(0,c).concat(a.slice(c+1)))}else t.checked=r}}},"input",t.attributes,!1)),s("div",{staticClass:"dito-switch-button"}),t.labels?s("span",{staticClass:"dito-switch-label"},[t.checked?t._t("checked",function(){return[t._v(t._s(t.labels.checked||"on"))]}):t._t("unchecked",function(){return[t._v(t._s(t.labels.unchecked||"off"))]})],2):t._e()])])},Ca=[];const yd="",wa={props:{value:{type:Boolean,default:!1},id:{type:String,default:null},name:{type:String,default:null},disabled:{type:Boolean,default:!1},labels:{type:[Object,Boolean],default:!1}},data(){return{checked:this.value}},computed:{classes(){const{checked:t,disabled:e}=this;return{"dito-checked":t,"dito-disabled":e}},styles(){const{labels:{checked:t,unchecked:e}={}}=this,s=Math.max(0,t==null?void 0:t.length,e==null?void 0:e.length);return{"--switch-width":s?`${s*1.5}rem`:null}},attributes(){const{id:t,name:e,disabled:s,$attrs:n}=this;return{id:t,name:e,disabled:s,...n}}},watch:{value(t){this.checked=t},checked(t){t!==this.value&&(this.$emit("input",t),this.$emit("change",t))}},methods:{focus(){this.$refs.input.focus()}}},Pe={};var Pa=p(wa,$a,Ca,!1,Sa,null,null,null);function Sa(t){for(let e in Pe)this[e]=Pe[e]}const Da=function(){return Pa.exports}(),$d="",xa={functional:!0,props:{enabled:{type:Boolean,default:!0}},render:(t,e)=>t("transition",e.props.enabled?{props:{name:"height"},on:Oa}:{},e.children)},I=(t,e)=>Object.assign(t.style,e),Se=t=>getComputedStyle(t).height,Oa={afterEnter(t){setTimeout(()=>I(t,{height:"auto"}))},enter(t){const{width:e}=getComputedStyle(t);I(t,{width:e,position:"absolute",visibility:"hidden",height:"auto"});const{height:s}=getComputedStyle(t);I(t,{width:null,position:null,visibility:null,height:0}),Se(t),setTimeout(()=>I(t,{height:s}))},leave(t){const{height:e}=getComputedStyle(t);I(t,{height:e}),Se(t),setTimeout(()=>I(t,{height:0}))}};let ka,Fa;const De={};var ja=p(xa,ka,Fa,!1,Va,null,null,null);function Va(t){for(let e in De)this[e]=De[e]}const Ea=function(){return ja.exports}(),H={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=tt(t,o.isObject(e)?e:{[e]:s});return this.domHandlers.push(n),n}}};var Ra=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[s("notifications",{ref:"notifications",staticClass:"dito-notifications",attrs:{position:"top right",classes:"dito-notification"}}),s("dito-menu"),s("main",{staticClass:"dito-page dito-scroll-parent"},[s("dito-header",{attrs:{spinner:t.options.spinner,isLoading:t.isLoading}},[t.user?s("dito-account"):t.allowLogin?s("a",{staticClass:"dito-login",on:{click:function(n){return t.rootComponent.login()}}},[s("span",[t._v("Login")])]):t._e()],1),s("router-view")],1)],1)},Ta=[];const Cd="",Ba=b.component("dito-root",{mixins:[H],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:t=>{t.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:t=>{t.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(t){console.error(t)}this.allowLogin=!0},methods:{notify({type:t="info",title:e,text:s}={}){e||(e={warning:"Warning",error:"Error",info:"Information",success:"Success"}[t]||"Notification"),s=`<p>${o.asArray(s).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const n={warning:"warn",error:"error",info:"log",success:"log"}[t]||"error";console[n](o.stripTags(s));const{notifications:a=!0}=this.api;if(a){const{durationFactor:i=20}=a,r=(40+s.length+e.length)*i;this.$notify({type:t,title:e,text:s,duration:r})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(t){this.loadingCount+=t?1:-1},async login(){var n,a;this.allowLogin=!0;const{additionalComponents:t,redirectAfterLogin:e}=this.options.login||{},s=await this.showDialog({components:{username:{type:"text",autofocus:!0},password:{type:"password"},...t},buttons:{cancel:{},login:{type:"submit"}}});if(s)try{const i=await this.sendRequest({resource:this.api.users.login,data:s,internal:!0});e?location.replace(e):(this.setUser(i.data.user),await this.resolveViews())}catch(i){const r=(a=(n=i.response)==null?void 0:n.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:r||i}),r||console.error(i,i.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(t){console.error(t)}},async fetchUser(){let t=null;try{t=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(e){this.notify({type:"error",title:"Authentication Error",text:e})}return this.setUser(t),t},setUser(t){this.appState.user=t&&Object.setPrototypeOf(t,Cn.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await gt(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const t=[],e=[];for(const[s,n]of Object.entries(this.resolvedViews))e.push(pn(ue,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),xe={};var La=p(Ba,Ra,Ta,!1,Ma,null,null,null);function Ma(t){for(let e in xe)this[e]=xe[e]}const Pt=function(){return La.exports}();var qa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-menu dito-scroll-parent"},[s("h1",[t._v(t._s(t.appState.title))]),s("ul",{staticClass:"dito-scroll"},t._l(t.views,function(n){return s("li",[t.shouldRender(n)?s("router-link",{staticClass:"dito-link",attrs:{to:`/${n.path}`,"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n)))]):t._e()],1)}),0)])},Ia=[];const wd="",Aa=b.component("dito-menu",{}),Oe={};var Na=p(Aa,qa,Ia,!1,za,null,null,null);function za(t){for(let e in Oe)this[e]=Oe[e]}const Ua=function(){return Na.exports}();var Ha=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"v-spinner"},[s("div",{staticClass:"v-pulse v-pulse1",style:[t.spinnerStyle,t.spinnerDelay1]}),s("div",{staticClass:"v-pulse v-pulse2",style:[t.spinnerStyle,t.spinnerDelay2]}),s("div",{staticClass:"v-pulse v-pulse3",style:[t.spinnerStyle,t.spinnerDelay3]})])},Wa=[];const Pd="",Ya={name:"PulseLoader",props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},ke={};var Ka=p(Ya,Ha,Wa,!1,Ja,null,null,null);function Ja(t){for(let e in ke)this[e]=ke[e]}const Qa=function(){return Ka.exports}();var Xa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-header"},[s("div",{staticClass:"dito-trail"},[s("ul",t._l(t.trail,function(n,a){return s("li",[a===t.trail.length-1?[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])]:s("router-link",{staticClass:"dito-breadcrumb",attrs:{to:n.path}},[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])])],2)}),0),t.isLoading?s("spinner",{staticClass:"dito-spinner"}):t._e()],1),t._t("default")],2)},Ga=[];const Sd="",Fe=b.component("spinner",Qa),Za=b.component("dito-header",{components:{Spinner:Fe},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(t=>!!t.routeRecord)}},created(){const{size:t="8px",color:e="#999"}=this.spinner||{},{props:s}=Fe.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),je={};var ti=p(Za,Xa,Ga,!1,ei,null,null,null);function ei(t){for(let e in je)this[e]=je[e]}const si=function(){return ti.exports}(),Ve={mixins:[H],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(t){t?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(t){const{startTime:e}=this.pulldown;if(!this.checkTime||e&&Date.now()-e>250)return this.setPulldownOpen(!1),t&&this.onPulldownSelect(t),!0},onPulldownSelect(){},setPulldownOpen(t){this.pulldown.open=t,this.pulldown.startTime=t?Date.now():0,t&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}};var ni=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-account"},[s("a",{on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[s("span",[t._v(t._s(t.user.username))])]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.items,function(n,a){return s("li",[s("a",{on:{mousedown:function(i){return i.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(i){return t.onPulldownMouseUp(a)}}},[t._v(t._s(n))])])}),0)])},ai=[];const Dd="",ii=b.component("dito-account",{mixins:[Ve],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(t){switch(t){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),Ee={};var ri=p(ii,ni,ai,!1,oi,null,null,null);function oi(t){for(let e in Ee)this[e]=Ee[e]}const li=function(){return ri.exports}();var ci=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){return n.preventDefault(),t.submit.apply(null,arguments)}}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.schema,data:t.dialogData}},[s("dito-buttons",{staticClass:"dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,data:t.dialogData},slot:"buttons"})],1)],1)},ui=[];const xd="",di=b.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})}},data(){const t=o.clone(this.data);for(const e in this.components)e in t||(t[e]=null);return{windowEvents:null,dialogData:t}},computed:{dialogComponent(){return this},name(){return this.$parent.name},schema(){return{components:this.components}},buttonSchemas(){return Object.fromEntries(Object.entries(Q(this.buttons)).map(([t,e])=>(t==="cancel"&&!e.events&&(e={...e,events:{click:()=>this.cancel()}}),[t,e])))},hasCancel(){return!!this.buttonSchemas.cancel}},mounted(){this.windowEvents=tt(window,{keyup:t=>{this.hasCancel&&t.keyCode===27&&this.cancel()}})},destroyed(){this.windowEvents.remove()},methods:{hide(){this.$modal.hide(this.name)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()},submit(){this.resolve(this.dialogData)},cancel(){this.resolve(null)}}}),Re={};var hi=p(di,ci,ui,!1,pi,null,null,null);function pi(t){for(let e in Re)this[e]=Re[e]}const fi=function(){return hi.exports}();var mi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.content?s(t.options.tag||t.tag,{tag:"component",class:t.classes,style:t.styles},[t._v(t._s(t.options.text))]):t._e()},_i=[];const gi=b.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return o.isObject(t)?t:{text:t}},classes(){return{...this.$attrs.class,...Te(this.options.class)}},styles(){return{...this.$attrs.style,...Te(this.options.style)}}}});function Te(t){return o.asArray(t).reduce((e,s)=>(o.isString(s)?e[s]=!0:o.isObject(s)&&Object.assign(e,s),e),{})}const Be={};var vi=p(gi,mi,_i,!1,bi,null,null,null);function bi(t){for(let e in Be)this[e]=Be[e]}const yi=function(){return vi.exports}();var $i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.text||t.collapsible?s(t.tag,t._g({tag:"component",staticClass:"dito-label",class:{"dito-active":t.isActive}},t.listeners),[t.collapsible?s("div",{staticClass:"dito-chevron",class:{"dito-opened":!t.collapsed}}):t._e(),t._l(t.prefixes,function(n,a){return s("dito-element",{key:`prefix-${a}`,staticClass:"dito-label-prefix",attrs:{tag:"span",content:n}})}),s("label",{attrs:{for:t.dataPath},domProps:{innerHTML:t._s(t.text)}}),t._l(t.suffixes,function(n,a){return s("dito-element",{key:`suffix-${a}`,staticClass:"dito-label-suffix",attrs:{tag:"span",content:n}})}),t._t("edit-buttons")],2):t._e()},Ci=[];const Od="",wi=b.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:t}=this;return o.isObject(t)?t==null?void 0:t.text:t},prefixes(){var t;return o.asArray((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return o.asArray((t=this.label)==null?void 0:t.suffix)},listeners(){return{...this.collapsible&&{click:this.onClick}}},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Le={};var Pi=p(wi,$i,Ci,!1,Si,null,null,null);function Si(t){for(let e in Le)this[e]=Le[e]}const Di=function(){return Pi.exports}(),St={methods:{getItemFormSchema:$t,getItemUid:$n,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):ie(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=j(s,t.name)),e!=null&&(s=j(s,e)),s},findItemIdIndex(t,e,s){const n=this.isTransient?s:e==null?void 0:e.findIndex((a,i)=>this.getItemId(t,a,i)===s);return n!==-1?n:null},getItemLabel(t,e,{index:s=null,extended:n=!1,asObject:a=!1}={}){const{itemLabel:i}=t;if(!e||!n&&i===!1)return null;let r;const l=()=>r||(r=this.getItemDataPath(t,s));let c;const u=()=>c||(c=this.getLabel($t(t,e,this.context)));let d,h,m;if(o.isFunction(i)){const _=i.call(this,new S(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return l()},get formLabel(){return u()}}));o.isObject(_)?{text:d,prefix:h,suffix:m}=_:d=_,n=!1}else{const{columns:_}=t,y=o.isString(i)&&i||z(t)&&_&&Object.keys(_)[0]||"name";d=e[y]}const g=!!d;if(d||(d=""),d||(n=!0,z(t)&&s!==null&&(d=`${s+1}`)),n){const _=u();_&&(d=`${_} ${g?`'${d}'`:d}`)}return a?{text:d,prefix:h,suffix:m}:d}}};var xi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-schema"},[s("div",{staticClass:"dito-schema-content"},[t.hasLabel||t.hasTabs||t.clipboard?s("div",{staticClass:"dito-schema-header",class:{"dito-schema-menu-header":t.menuHeader}},[t.hasLabel?s("dito-label",{attrs:{label:t.label,dataPath:t.dataPath,collapsible:t.collapsible,collapsed:!t.opened},on:{expand:t.onExpand},scopedSlots:t._u([t.inlined?{key:"edit-buttons",fn:function(){return[t._t("edit-buttons")]},proxy:!0}:null],null,!0)}):t._e(),t.tabs?s("dito-tabs",{attrs:{tabs:t.tabs,selectedTab:t.selectedTab}}):t._e(),s("dito-clipboard",{attrs:{clipboard:t.clipboard,dataPath:t.dataPath,data:t.data}})],1):t._e(),t._l(t.tabs,function(n,a){return t.hasTabs?s("dito-pane",{key:a,ref:"tabs",refInFor:!0,staticClass:"dito-pane-tab",attrs:{visible:t.selectedTab===a,tab:a,schema:n,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasMainPane,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()}),s("transition-height",{attrs:{enabled:t.inlined}},[t.hasMainPane&&t.opened?s("dito-pane",{ref:"components",staticClass:"dito-pane-main",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasTabs,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()],1),!t.inlined&&t.isPopulated?t._t("buttons"):t._e()],2),t.inlined?[t.hasLabel?t._e():t._t("edit-buttons")]:t.isPopulated?[s("dito-panels",{attrs:{panels:t.panelSchemas,data:t.data,meta:t.meta,store:t.store,disabled:t.disabled}})]:t._e()],2)},Oi=[];const kd="",ki=b.component("dito-schema",{components:{TransitionHeight:Ea},mixins:[St],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:t}=this.schema;return{...t&&o.isFunction(t)?t.call(this,this.context):t,componentsRegistry:{},panesRegistry:{},panelsRegistry:{}}},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.$parent.schemaComponent},panelSchemas(){const t=ne(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return q(this.schema.tabs)},selectedTab(){var s,n;const t=((s=this.$route.hash)==null?void 0:s.slice(1))||null,e=t&&this.shouldRender(this.tabs[t])?t:((n=this.defaultTab)==null?void 0:n.name)||null;return e!==t&&this.$router.replace({hash:e}),e},defaultTab(){if(this.tabs){let t=null;for(const e of Object.values(this.tabs)){const{defaultTab:s}=e;if(o.isFunction(s)?s.call(this,this.context):s)return e;t||(t=e)}return t}},clipboard(){var t;return(t=this.schema)==null?void 0:t.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return{$schema:this.schema.name,...this.processData({target:"clipboard",schemaOnly:!0})}},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return ot(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(t=>t.isDirty)},isTouched(){return this.someComponent(t=>t.isTouched)},isValid(){return this.everyComponent(t=>t.isValid)},isValidated(){return this.everyComponent(t=>t.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:t}=this.schema;return!!t&&Object.keys(t).length>0},opened:ft("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeDestroy(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(t,e){return this._getEntriesByDataPath(this.componentsByDataPath,t,e)},getComponentByDataPath(t,e){return this.getComponentsByDataPath(t,e)[0]||null},getComponentsByName(t,e){return this._getEntriesByName(this.componentsByDataPath,t,e)},getComponentByName(t,e){return this.getComponentsByName(t,e)[0]||null},getComponents(t,e){return this._getEntries(this.componentsByDataPath,t,e)},getComponent(t,e){return this.getComponents(t,e)[0]||null},getPanelsByDataPath(t,e){return this._getEntriesByDataPath(this.panelsByDataPath,t,e)},getPanelByDataPath(t,e){return this.getPanelsByDataPath(t,e)[0]||null},getPanels(t,e){return this._getEntries(this.panelsByDataPath,t,e)},getPanel(t,e){return this.getPanels(t,e)[0]||null},someComponent(t){return this.isPopulated&&this.components.some(t)},everyComponent(t){return this.isPopulated&&this.components.every(t)},onExpand(t){this.emitEvent("expand",{context:{expand:t}}),(!this.opened||t||this.validateAll())&&(this.opened=t)},onChange(){this.emitEvent("change")},resetValidation(){for(const t of this.components)t.resetValidation()},clearErrors(){for(const t of this.components)t.clearErrors()},focus(){var t;(t=this.parentSchemaComponent)==null||t.focus(),this.opened=!0},validateAll(t,e=!0){const{componentsByDataPath:s}=this;let n;if(t){const r=o.isFunction(t)?t:o.isRegExp(t)?l=>t.test(l):null;n=r?Object.keys(s).filter(r):o.isArray(t)?t:[t]}e&&this.clearErrors();let a=!0,i=!0;n||(n=Object.keys(s));for(const r of n){const l=this.getComponentsByDataPath(r);for(const c of l)c.validate(e)||(e&&i&&c.focus(),i=!1,a=!1)}return e&&!a&&this.notifyErrors(),a},verifyAll(t){return this.validateAll(t,!1)},async showValidationErrors(t,e){var a;this.clearErrors();let s=!0;const n=[];for(const[i,r]of Object.entries(t)){const l=this.hasOwnData?j(this.dataPath,i):i,c=o.parseDataPath(l);let u=!1;const d=this.getComponentsByDataPath(c);for(const h of d)h.showValidationErrors(r,s&&e)&&(u=!0,s=!1);if(!u){const h=c.pop();for(;c.length>0;){const g=this.getComponentsByDataPath(c);for(const _ of g)if(await((a=_.navigateToComponent)==null?void 0:a.call(_,l,y=>{let x=!1;for(const P of y){const $=t[P.dataPath];$&&P.showValidationErrors($,s&&e)&&(x=!0,s=!1)}return x})))return;c.pop()}const m=o.labelize(h);for(const g of r){const _=m?`The field ${m}`:`The ${this.formLabel}`;n.push(`${_} ${g.message}`)}}s=!1}s||this.notifyErrors(n.join(`
2
2
  `))},notifyErrors(t){this.notify({type:"error",title:"Validation Errors",text:t||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,Xt(this.schema,{},this)),this.clearErrors()},setData(t){for(const e in t)if(e in this.data){this.$set(this.data,e,t[e]);for(const s of this.getComponentsByName(e))s.markDirty()}},filterData(t){const e={};for(const[s,n]of Object.entries(t))(o.isArray(n)||o.isObject(n))&&this.getComponentsByName(s).some(i=>i.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return yn(this.schema,this.sourceSchema,this.data,this.dataPath,{component:this,schemaOnly:e,target:t})},_register(t){var e;(e=this.$schemaParentComponent())==null||e._registerSchemaComponent(this,t)},_registerComponent(t,e){var s;this._registerEntry(this.componentsRegistry,t,e),(s=this.parentSchemaComponent)==null||s._registerComponent(t,e)},_registerPane(t,e){this._registerEntry(this.panesRegistry,t,e)},_registerPanel(t,e){this._registerEntry(this.panelsRegistry,t,e)},_registerEntry(t,e,s){const n=e.$uid;s?this.$set(t,n,e):this.$delete(t,n)},_listEntriesByDataPath(t){return Object.values(t).reduce((e,s)=>{const{dataPath:n}=s;return(e[n]||(e[n]=[])).push(s),e},{})},_getEntries(t,e,s){return o.normalizeDataPath(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[o.normalizeDataPath(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[j(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),Me={};var Fi=p(ki,xi,Oi,!1,ji,null,null,null);function ji(t){for(let e in Me)this[e]=Me[e]}const Vi=function(){return Fi.exports}();var Ei=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-schema",{staticClass:"dito-schema-inlined",class:{"dito-schema-compact":t.isCompact},attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,label:t.isCompact?null:t.label,inlined:!0,disabled:t.disabled,collapsed:t.collapsed,collapsible:t.collapsible},scopedSlots:t._u([{key:"edit-buttons",fn:function(){return[t.deletable||t.draggable||t.editable?s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.editPath,schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{delete:function(n){return t.$emit("delete")}}}):t._e()]},proxy:!0}])})},Ri=[];const Fd="",Ti=b.component("dito-schema-inlined",{props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null}},computed:{isCompact(){return Yt(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),qe={};var Bi=p(Ti,Ei,Ri,!1,Li,null,null,null);function Li(t){for(let e in qe)this[e]=qe[e]}const Mi=function(){return Bi.exports}();var qi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isPopulated&&t.componentSchemas.length>0?s("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"dito-pane"},[t._l(t.componentSchemas,function(n){var a=n.schema,i=n.dataPath,r=n.nestedDataPath,l=n.nested,c=n.store;return[a.break==="before"?s("div",{staticClass:"dito-break"}):t._e(),t.shouldRender(a)?s("dito-container",{key:r,attrs:{schema:a,dataPath:i,data:t.data,meta:t.meta,store:c,single:t.isSingleComponent,nested:l,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},Ii=[];const jd="",Ai=b.component("dito-pane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},single:{type:Boolean,default:!1},visible:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0}},computed:{tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var e,s;const t=(e=this.sourceSchema)==null?void 0:e.wrapPrimitives;return Object.entries(((s=this.schema)==null?void 0:s.components)||{}).map(([n,a])=>{a.name=n;const i=Kt(a),r=j(this.dataPath,n);return{schema:a,dataPath:i&&!t?r:this.dataPath,nestedDataPath:r,nested:i,store:i?this.getChildStore(n):this.store}})},panelSchemas(){return this.componentSchemas.flatMap(({schema:t,nestedDataPath:e})=>ae(t,e,this.schemaComponent,this.tabComponent))},isSingleComponent(){return this.single&&this.componentSchemas.length===1}},created(){this._register(!0)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPane(this,t)},focus(){this.tab&&this.$router.push({hash:this.tab})}}}),Ie={};var Ni=p(Ai,qi,Ii,!1,zi,null,null,null);function zi(t){for(let e in Ie)this[e]=Ie[e]}const Ui=function(){return Ni.exports}();function Hi(t){const e=o.isString(t)&&t.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(e){const[,s,n]=e;return parseFloat(s)/parseFloat(n)}else return parseFloat(t)}var Wi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.componentVisible,expression:"componentVisible"}],staticClass:"dito-container",class:t.containerClass,style:t.containerStyle},[t.label?s("dito-label",{class:t.componentClass,attrs:{label:t.label,dataPath:t.labelDataPath}}):t._e(),s(t.getTypeComponent(t.schema.type),{tag:"component",staticClass:"dito-component",class:t.componentClass,attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:t.single,nested:t.nested,disabled:t.componentDisabled},on:{errors:t.onErrors}}),s("dito-errors",{attrs:{errors:t.errors}})],1)},Yi=[];const Vd="",Ki=b.component("dito-container",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!0}},data(){return{errors:null}},computed:{context(){return new S(this,{nested:this.nested})},typeOptions(){return R(this.schema)||{}},hasLabel(){const{schema:t}=this,{label:e}=t;return e!==!1&&(!!e||this.typeOptions.generateLabel&&this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},componentWidth:f("width",{type:[String,Number],default(){return this.typeOptions.defaultWidth},get(t){return t===void 0?1:o.isString(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:f("width",{type:String,get(t){return o.isString(t)&&t.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:f("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),componentDisabled:f("disabled",{type:Boolean,default:!1,get(t){return t||this.disabled}}),containerClass(){const{class:t}=this.schema;return{"dito-single":this.single,"dito-omit-padding":vn(this.schema),...o.isString(t)?{[t]:!0}:t}},componentBasis(){const t=this.componentWidth,e=[null,"auto","fill"].includes(t)?"auto":/%$/.test(t)?parseFloat(t):/[a-z]/.test(t)?t:Hi(t)*100;return o.isNumber(e)?`${e}%`:e},containerStyle(){const t=this.componentWidthOperator===">"||this.componentWidth==="fill",e=this.componentWidthOperator==="<";return{flex:`${t?1:0} ${e?1:0} ${this.componentBasis}`}},componentClass(){const t=this.componentBasis==="auto";return{"dito-single":this.single,"dito-disabled":this.componentDisabled,"dito-width-fill":!t||this.componentWidth==="fill","dito-width-auto":t,"dito-has-errors":!!this.errors}}},methods:{onErrors(t){this.errors=t}}}),Ae={};var Ji=p(Ki,Wi,Yi,!1,Qi,null,null,null);function Qi(t){for(let e in Ae)this[e]=Ae[e]}const Xi=function(){return Ji.exports}();var Gi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tabs"},t._l(t.tabs,function(n,a){return t.shouldRender(n)?s("router-link",{key:a,staticClass:"dito-link",attrs:{to:{hash:a},"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n,a)))]):t._e()}),1)},Zi=[];const Ed="",tr=b.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),Ne={};var er=p(tr,Gi,Zi,!1,sr,null,null,null);function sr(t){for(let e in Ne)this[e]=Ne[e]}const nr=function(){return er.exports}();var ar=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.panelTag,{directives:[{name:"show",rawName:"v-show",value:t.visible&&(!t.panelTabComponent||t.panelTabComponent.visible),expression:"visible && (!panelTabComponent || panelTabComponent.visible)"}],tag:"component",staticClass:"dito-panel",on:{submit:function(n){n.preventDefault()}}},[s("label",{staticClass:"dito-panel-title"},[t._v(t._s(t.getLabel(t.schema)))]),s("dito-schema",{staticClass:"dito-panel-schema",attrs:{schema:t.panelSchema,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled,hasOwnData:t.hasOwnData}},[s("dito-buttons",{attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled},slot:"buttons"})],1)],1)},ir=[];const Rd="",rr=b.component("dito-panel",{mixins:[oe],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:b,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return Q(this.schema.buttons)},target(){return this.schema.target||this.dataPath},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const{data:t,...e}=this.schema;return e}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:f("visible",{type:Boolean,default:!0})},created(){this._register(!0);const{data:t}=this.schema;t&&(this.ownData=o.isFunction(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),ze={};var or=p(rr,ar,ir,!1,lr,null,null,null);function lr(t){for(let e in ze)this[e]=ze[e]}const cr=function(){return or.exports}();var ur=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.panels.length>0?s("div",{staticClass:"dito-panels"},t._l(t.panels,function(n){var a=n.schema,i=n.dataPath,r=n.tabComponent;return t.shouldRender(a)?s("dito-panel",{key:t.getPanelKey(i,r),attrs:{schema:a,dataPath:i,data:t.data,meta:t.meta,store:t.getChildStore(a.name),disabled:a.disabled!=null?a.disabled:t.disabled,panelTabComponent:r}}):t._e()}),1):t._e()},dr=[];const Td="",hr=b.component("dito-panels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(t,e){return e?`${e.tab}_${t}`:t}}}),Ue={};var pr=p(hr,ur,dr,!1,fr,null,null,null);function fr(t){for(let e in Ue)this[e]=Ue[e]}const mr=function(){return pr.exports}();var _r=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.buttonSchemas||t.$slots.default?s("div",t._g({staticClass:"dito-buttons"},t.$listeners),[t._l(t.buttonSchemas,function(n,a){return t.shouldRender(n)?s("dito-container",{key:a,attrs:{schema:n,dataPath:a,data:t.data,meta:t.meta,store:t.getChildStore(n.name),disabled:t.disabled,generateLabels:!1}}):t._e()}),t._l(t.$slots.default,function(n){return n.tag?s("div",{staticClass:"dito-container"},[s("dito-vnode",{attrs:{node:n}})],1):t._e()})],2):t._e()},gr=[];const Bd="",vr=b.component("dito-buttons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:t,buttons:e}=this;return e?Object.values(e).reduce((s,n)=>(s[j(t,n.name)]=n,s),{}):null}}}),He={};var br=p(vr,_r,gr,!1,yr,null,null,null);function yr(t){for(let e in He)this[e]=He[e]}const $r=function(){return br.exports}();var Cr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-buttons",{staticClass:"dito-edit-buttons dito-buttons-round",attrs:{buttons:t.buttons,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{click:function(n){n.stopPropagation()}}},[t.isDraggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.isEditable?s("router-link",t._b({staticClass:"dito-button",attrs:{to:{path:t.editPath},append:""}},"router-link",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.isCreatable?s("dito-create-button",{attrs:{schema:t.schema,path:t.createPath,verb:t.verbs.create,text:t.createButtonText}}):t._e(),t.isDeletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){return t.$emit("delete")}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()],1)},wr=[];const Ld="",Pr=b.component("dito-edit-buttons",{props:{draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null},buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggable(){return this.hasOption("draggable")},isEditable(){return this.hasOption("editable")&&!!this.editPath},isCreatable(){return this.hasOption("creatable")&&!!this.createPath},isDeletable(){return this.hasOption("deletable")},createButtonText(){var t;return((t=this.schema.creatable)==null?void 0:t.label)||this.formLabel&&`${o.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),We={};var Sr=p(Pr,Cr,wr,!1,Dr,null,null,null);function Dr(t){for(let e in We)this[e]=We[e]}const xr=function(){return Sr.exports}();var Or=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-create-button"},[t.showPulldown?[s("button",{staticClass:"dito-button",class:`dito-button-${t.verb}`,attrs:{type:"button",title:t.labelize(t.verb)},on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[t._v(t._s(t.text))]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.forms,function(n,a){return s("li",[t.isCreatable(n)?s("a",{class:`dito-type-${a}`,on:{mousedown:function(i){return i.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(i){return t.onPulldownMouseUp(a)}}},[t._v(t._s(t.getLabel(n)))]):t._e()])}),0)]:s("button",{staticClass:"dito-button",class:`dito-button-${t.verb}`,attrs:{type:t.isInlined?"button":"submit",title:t.labelize(t.verb)},on:{click:function(n){return t.createItem(t.forms.default)}}},[t._v(t._s(t.text))])],2)},kr=[];const Md="",Fr=b.component("dito-create-button",{mixins:[Ve],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return A(this.schema,this.context)},isInlined(){return Ct(this.schema)},showPulldown(){return Object.keys(this.forms).length>1||!this.forms.default}},methods:{isCreatable(t){return t.creatable!==!1},createItem(t,e=null){if(this.isCreatable(t))this.isInlined?this.sourceComponent.createItem(t,e):this.$router.push({path:`${this.path}/create`,query:{type:e},append:!0});else throw new Error("Not allowed to create item for given form")},onPulldownSelect(t){this.createItem(this.forms[t],t),this.setPulldownOpen(!1)}}}),Ye={};var jr=p(Fr,Or,kr,!1,Vr,null,null,null);function Vr(t){for(let e in Ye)this[e]=Ye[e]}const Er=function(){return jr.exports}();var Rr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.clipboard?s("div",{staticClass:"dito-clipboard dito-buttons dito-buttons-round"},[s("button",{ref:"copyData",staticClass:"dito-button dito-button-copy",attrs:{type:"button",title:"Copy Data",disabled:!t.copyEnabled},on:{click:t.onCopy}}),s("button",{staticClass:"dito-button dito-button-paste",attrs:{type:"button",title:"Paste Data",disabled:!t.pasteEnabled},on:{click:t.onPaste}})]):t._e()},Tr=[];const Br=b.component("dito-clipboard",{mixins:[H],props:{clipboard:{type:[Boolean,Object],default:!1},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1,fixClipboard:!0}},computed:{clipboardOptions(){return o.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new S(this,{clipboardData:e})):e=>o.clone(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new S(this,{clipboardData:e})):e=>e}},mounted(){this.domOn(document,{copy:this.checkClipboard}),this.domOn(window,{focus:this.checkClipboard}),this.$watch("data",{immediate:!0,handler:(t,e)=>{t!==e&&this.checkClipboard()}})},methods:{async getClipboardData(t){var a,i,r,l,c;let{clipboardData:e}=this.appState;try{const u=await((i=(a=navigator.clipboard)==null?void 0:a.readText)==null?void 0:i.call(a));this.fixClipboard&&u&&(await((l=(r=navigator.clipboard)==null?void 0:r.writeText)==null?void 0:l.call(r,u)),this.fixClipboard=!1),u&&(e=JSON.parse(u))}catch(u){t&&(console.error(u,u.name,u.message),u.name==="SyntaxError"&&alert(o.deindent`
3
3
  The data in the clipboard appears to be malformed:
4
4
  ${u.message}
5
5
  `))}const{$schema:s,...n}=e||{};return s===((c=this.schemaComponent)==null?void 0:c.schema.name)?n:null},async checkClipboard(){this.copyEnabled=!!this.data,this.pasteEnabled=!!await this.getClipboardData(!1)},async onCopy(){var e,s,n;let t=(e=this.schemaComponent)==null?void 0:e.clipboardData;try{t=t&&this.copyData(t),this.appState.clipboardData=t;try{const a=JSON.stringify(t,null,2);await((n=(s=navigator.clipboard)==null?void 0:s.writeText)==null?void 0:n.call(s,a)),await this.checkClipboard()}catch(a){console.error(a,a.name,a.message)}}catch(a){console.error(a),alert(a.message)}},async onPaste(){let t=await this.getClipboardData(!0);try{t=t&&this.pasteData(t),t&&this.schemaComponent.setData(t)}catch(e){console.error(e),alert(e.message)}}}}),Ke={};var Lr=p(Br,Rr,Tr,!1,Mr,null,null,null);function Mr(t){for(let e in Ke)this[e]=Ke[e]}const qr=function(){return Lr.exports}(),Je={data(){return{isLoading:!1}},methods:{setLoading(t,{updateRoot:e=!1,updateView:s=!1}={}){!this.isLoading^!t&&(this.isLoading=!!t,e&&this.rootComponent.registerLoading(t),s&&this.viewComponent.setLoading(this.isLoading))}}},Qe={mixins:[St,Je],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const t=this.formComponent;return!this.providesData&&!this.linksToView||t&&(t.isTransient||t.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:t}=this.sourceSchema;if(this.isListSource&&t){const{page:e=0}=this.query||{},s=e*t;return[s,s+t-1]}},queryParams(){const t=this.paginationRange,{page:e,...s}=this.query||{};return{...s,...t&&{range:t.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e;return E((t=this.sourceSchema)==null?void 0:t.resource,{type:"collection",parent:((e=this.parentFormComponent)==null?void 0:e.resource)??null})},getVerbs(){const t=this.$verbs();return this.isTransient?{...t,create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}:t},clearData(){this.loadedData=null},setData(t){this.loadedData=t},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(t){this.isTransient||(t&&this.clearData(),this.requestData())},createData(t,e){return Xt(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",query:t},(e,s)=>{var n;if(e){if(s){const{data:a}=s;if((a==null?void 0:a.type)==="FilterValidation"&&((n=this.onFilterErrors)!=null&&n.call(this,a.errors)))return!0;if(this.isUnauthorizedError(s))return!0}}else this.setData(s.data),this.emitSchemaEvent("load")})},isValidationError(t){return(t==null?void 0:t.status)===400},isUnauthorizedError(t){return(t==null?void 0:t.status)===401},async handleRequest({method:t,resource:e=this.resource,query:s,data:n},a){const i={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,i);const r={method:t,resource:e,data:n,query:s};try{const l=await this.sendRequest(r);a(null,l)}catch(l){const{response:c}=l;if(!a(l,c)){const u=c==null?void 0:c.data,d=o.isString(u==null?void 0:u.type)?o.labelize(u.type):"Error",h=(u==null?void 0:u.message)??l;this.notify({type:"error",title:d,text:h})}}this.setLoading(!1,i)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=E(t.schema.resource,{parent:this.resource});if(e){const{method:s}=e,n=this.getPayloadData(t,s);return this.submitResource(t,e,s,n)}return!1},async submitResource(t,e,s,n,{setData:a=!1,onSuccess:i,onError:r,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:c=u=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${u?":":""}`,(u==null?void 0:u.message)||u]})}={}){return new Promise(u=>{this.handleRequest({method:s,resource:e,data:n},async(d,h)=>{const m=h==null?void 0:h.data;if(d){const g=this.isValidationError(h)&&m.errors;if(g)await this.showValidationErrors(g,!0);else{const _=o.isObject(m)?m:d;r==null||r(_),await this.emitButtonEvent(t,"error",{notify:c,error:_})}u(!1)}else a&&m&&this.setData(m),i==null||i(),await this.emitButtonEvent(t,"success",{notify:l}),u(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new S(t,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:n}),i=await t.emitEvent(e,{context:a});return s&&i===void 0&&!a.wasNotified&&s(n),i}}};var Ir=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-form dito-scroll-parent",class:{"dito-form-nested":t.isNestedRoute},attrs:{"data-resource":t.sourceSchema.path}},[t.isLastUnnestedRoute||t.isNestedRoute?t._e():s("router-view",{directives:[{name:"show",rawName:"v-show",value:!t.isActive,expression:"!isActive"}]}),s(t.isNestedRoute?"div":"form",{directives:[{name:"show",rawName:"v-show",value:t.isActive,expression:"isActive"}],tag:"component",staticClass:"dito-scroll",on:{submit:function(n){n.preventDefault()}}},[s("button",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],attrs:{type:"submit",disabled:"true","aria-hidden":"true"}}),s("dito-schema",{attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading,menuHeader:!0}},[s("dito-buttons",{staticClass:"dito-buttons-round dito-buttons-main dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading},slot:"buttons"})],1)],1)],1)},Ar=[];const Nr=b.component("dito-form",{mixins:[le,Qe],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return{...t,submit:e?t.create:t.save,submitted:e?t.created:t.saved,cancel:s?t.cancel:t.close,cancelled:s?t.cancelled:t.closed}},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return Q(o.merge({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.doesMutate&&{type:"submit",closeForm:!0,events:{click:({component:t})=>t.submit()}}},this.schema.buttons))},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var t;return!this.doesMutate&&!!((t=this.mainSchemaComponent)!=null&&t.isDirty)},selectedTab(){var t;return((t=this.mainSchemaComponent)==null?void 0:t.selectedTab)||null},doesMutate(){return this.sourceSchema.mutate},type(){return this.$route.query.type},itemId(){return this.isCreating?null:this.param??null},method(){return this.isCreating?"post":"patch"},resource(){const t=this.getResource();return ht(this.itemId,t)||t},breadcrumbPrefix(){return o.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let{data:t}=this.parentRouteComponent;if(t){const e=o.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),s=this.routeRecord.path.split("/"),n=s.slice(s.length-e.length);this.sourceKey=null;const a=e[e.length-1];N(this.sourceSchema)&&a==="create"&&e.length--;for(let i=0,r=e.length;i<r&&t;i++){const l=e[i],c=/^:id/.test(n[i])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,t,l):l;i===r-1?this.sourceKey=c:t=t[c]}}return t},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let t=this.sourceData[this.sourceKey];return this.doesMutate||(this.clonedData=t=o.clone(t)),t===null&&!this.isCreating&&N(this.sourceSchema)&&this.$router.push({path:"create",append:!0}),t}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(t,e){return this.mainSchemaComponent.emitEvent(t,e)},getDataPathFrom(t){return this.api.denormalizePath(this.path.slice((t.isView?0:t.path.length)+1))},setupData(){this.isCreating?this.createdData||(this.createdData=this.createData(this.schema,this.type)):this.ensureData()},setSourceData(t){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:e}=this;return this.$set(this.sourceData,this.sourceKey,e.filterData(t)),e.onChange(),!0}return!1},addSourceData(t){var e;return N(this.sourceSchema)?this.setSourceData(t):!!((e=this.sourceData)!=null&&e.push(t))},clearData(){this.setData(null)},setData(t){this.isTransient?this.setSourceData(t):(this.createdData=null,this.loadedData=t)},clearClonedData(t,e){t!==e&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(t=!0){return this.isCreating?t?"create":"created":t?"submit":"submitted"},async submit(t,{validate:e=!0,closeForm:s=!1}={}){if(e&&!this.validateAll())return!1;const n=u=>this.verbs[this.getSubmitVerb(u)],a=E(t.schema.resource,{parent:this.resource}),i=a||this.resource,r=(i==null?void 0:i.method)||this.method,l=this.getPayloadData(t,r);let c;if(!a&&this.isTransient?c=await this.submitTransient(t,i,r,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${o.capitalize(u)}`:`Change ${o.capitalize(u)}`,text:[this.isCreating?`${this.itemLabel} was ${u}.`:`Changes to ${this.itemLabel} were ${u}.`,this.transientNote]})},notifyError:()=>{const u=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${u} ${this.itemLabel}.`})}}):c=await this.submitResource(t,i,r,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"success",title:`Successfully ${o.capitalize(u)}`,text:`${this.itemLabel} was ${u}.`})},notifyError:u=>{const d=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${d} ${this.itemLabel}${u?":":""}`,(u==null?void 0:u.message)||u]})}}),c){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const u=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${u}`,append:!0})}}return c},async submitTransient(t,e,s,n,{onSuccess:a,onError:i,notifySuccess:r,notifyError:l}){const c=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(c)a==null||a(),await this.emitButtonEvent(t,"success",{notify:r});else{const u="Could not submit transient item";i==null||i(u),await this.emitButtonEvent(t,"error",{notify:l,error:u})}return c}}}),Xe={};var zr=p(Nr,Ir,Ar,!1,Ur,null,null,null);function Ur(t){for(let e in Xe)this[e]=Xe[e]}const Ge=function(){return zr.exports}(),qd="",Hr=Ge.component("dito-form-nested",{});let Wr,Yr;const Ze={};var Kr=p(Hr,Wr,Yr,!1,Jr,null,null,null);function Jr(t){for(let e in Ze)this[e]=Ze[e]}const Qr=function(){return Kr.exports}();var Xr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.errors?s("div",{staticClass:"dito-errors"},[s("ul",t._l(t.errors,function(n){return s("li",[t._v(t._s(n))])}),0)]):t._e()},Gr=[];const Id="",Zr=b.component("dito-errors",{props:{errors:{type:Array,default:null}}}),ts={};var to=p(Zr,Xr,Gr,!1,eo,null,null,null);function eo(t){for(let e in ts)this[e]=ts[e]}const so=function(){return to.exports}();var no=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-scopes"},t._l(t.scopes,function(n,a){return s("router-link",{key:a,attrs:{to:t.getScopeLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(i){var r=i.navigate;return[s("button",{staticClass:"dito-button",class:{"dito-selected":n.name===t.query.scope},attrs:{type:"button",title:n.hint||t.getLabel(n)},on:{click:r}},[t._v(t._s(t.getLabel(n)))])]}}],null,!0)})}),1)},ao=[];const Ad="",io=b.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e={...this.query,scope:t.name};return e.page&&(e.page=0),this.getQueryLink(e)}}}),es={};var ro=p(io,no,ao,!1,oo,null,null,null);function oo(t){for(let e in es)this[e]=es[e]}const lo=function(){return ro.exports}();var co=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("pagination",{attrs:{pageSize:t.limit,total:t.total,page:t.page},on:{"update:page":function(n){t.page=n}}})},uo=[];const ho=b.component("dito-pagination",{components:{Pagination:ya},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(t){this.page!==t&&this.$router.push(this.getQueryLink({...this.query,page:t-1}))}}}}),ss={};var po=p(ho,co,uo,!1,fo,null,null,null);function fo(t){for(let e in ss)this[e]=ss[e]}const mo=function(){return po.exports}(),Dt={mixins:[St],data(){return{dragging:!1}},methods:{onStartDrag(){this.dragging=!0},onEndDrag({oldIndex:t,newIndex:e}){this.dragging=!1,t!==e&&this.onChange()},updateOrder(t,e,s){const{orderKey:n}=t;if(n){const a=(s==null?void 0:s[0])||0;for(let i=0;i<e.length;i++)e[i][n]=i+a}return e}}};var _o=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-item",class:{"dito-dragging":t.dragging,"dito-active":t.active},style:t.level>0&&{"--level":t.level},attrs:{id:t.dataPath}},[t.label?s("div",{staticClass:"dito-tree-header"},[t.numEntries?s("div",{staticClass:"dito-tree-branch",on:{click:function(n){n.stopPropagation(),t.opened=!t.opened}}},[t.numEntries?s("div",{staticClass:"dito-chevron",class:{"dito-opened":t.opened}}):t._e(),s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}}),t.details?s("div",{staticClass:"dito-tree-info"},[t._v(t._s(t.details))]):t._e()]):s("div",{staticClass:"dito-tree-leaf"},[s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}})]),t.hasEditButtons?s("div",{staticClass:"dito-buttons dito-buttons-small"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.editable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onEdit}},"button",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onDelete}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()]):t._e()]):t._e(),t.properties?s("table",{directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],staticClass:"dito-properties"},t._l(t.properties,function(n){return s("tr",[s("td",[n.label!==!1?s("dito-label",{attrs:{dataPath:t.getPropertyDataPath(n),label:t.getLabel(n)}}):t._e()],1),s("dito-table-cell",{attrs:{cell:n,schema:n,dataPath:t.getPropertyDataPath(n),data:t.data,meta:t.nestedMeta,store:t.store,disabled:t.disabled}})],1)}),0):t._e(),t.childrenSchema?s("vue-draggable",t._b({directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],attrs:{list:t.updateOrder(t.childrenSchema,t.childrenList)},on:{start:t.onStartDrag,end:function(n){return t.onEndDrag(n,t.childrenSchema)}}},"vue-draggable",t.getDragOptions(t.childrenDraggable,!0),!1),t._l(t.childrenItems,function(n,a){return s("dito-tree-item",{key:t.getItemUid(t.childrenSchema,n.data),attrs:{schema:t.childrenSchema,dataPath:t.getItemDataPath(t.childrenSchema,a),data:n.data,path:n.path,open:n.open,active:n.active,draggable:t.childrenDraggable,label:t.getItemLabel(t.childrenSchema,n.data,{index:a}),level:t.level+1}})}),1):t._e()],1)},go=[];const Nd="",vo=b.component("dito-tree-item",{components:{VueDraggable:nt},mixins:[Dt],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return{...this.meta,schema:this.schema}},properties(){return q(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var e;const t=(e=this.childrenSchema)==null?void 0:e.name;return t&&this.data[t]},childrenDraggable(){var t;return((t=this.childrenList)==null?void 0:t.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var t;return((t=this.childrenList)==null?void 0:t.length)||0},numProperties(){var t;return((t=this.properties)==null?void 0:t.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){var e;const{childrenSchema:t}=this;if(t){const{editPath:s}=this.container,n=!this.path&&t.open;return((e=this.childrenList)==null?void 0:e.map((a,i)=>{const r=t.path&&`${this.path}/${t.path}/${i}`,l=n||s.startsWith(r)&&r.length<s.length;return{data:a,path:r,open:l,active:s===r}}))||[]}},details(){const{numChildren:t}=this;return t&&`${t} ${t===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:f("creatable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)}}),editable:f("editable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)}}),deletable:f("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return j(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),ns={};var bo=p(vo,_o,go,!1,yo,null,null,null);function yo(t){for(let e in ns)this[e]=ns[e]}const $o=function(){return bo.exports}();var Co=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[t._l(t.columns,function(n,a){return t.shouldRender(n)?s("th",{class:t.getColumnClass(n)},[n.sortable?s("router-link",{attrs:{to:t.getSortLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(i){var r=i.navigate;return[s("button",{staticClass:"dito-button",class:t.getSortClass(n),attrs:{type:"button"},on:{click:r}},[s("div",{staticClass:"dito-order-arrows"}),s("span",[t._v(t._s(t.getLabel(n)))])])]}}],null,!0)}):s("span",[t._v(t._s(t.getLabel(n)))])],1):t._e()}),t.hasEditButtons?s("th",[s("span")]):t._e()],2)])},wo=[];const zd="",Po=b.component("dito-table-head",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const t=(this.query.order||"").split(/\s+/);return{name:t[0],order:t[1]}}},methods:{getColumnClass(t){return`dito-column-${o.hyphenate(t.name)}`},getSortClass(t){return this.sort.name===t.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(t){const e=this.sort.name===t.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink({...this.query,order:`${t.name} ${e}`})}}}),as={};var So=p(Po,Co,wo,!1,Do,null,null,null);function Do(t){for(let e in as)this[e]=as[e]}const xo=function(){return So.exports}();var Oo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("td",{class:t.cell.class,style:t.cell.style},[t.component?s(t.component,{tag:"component",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,nested:t.nested,disabled:t.disabled}}):s("span",{domProps:{innerHTML:t._s(t.renderCell(t.data))}})],1)},ko=[];const Fo=b.component("dito-table-cell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},computed:{component(){return this.resolveTypeComponent(this.cell.component)}},methods:{renderCell(t){const{name:e,render:s}=this.cell,n=t[e];return s?s.call(this,new S(this,{name:e,value:n,data:t,dataPath:j(this.dataPath,e)})):o.escapeHtml(n)}}}),is={};var jo=p(Fo,Oo,ko,!1,Vo,null,null,null);function Vo(t){for(let e in is)this[e]=is[e]}const Eo=function(){return jo.exports}(),Ro=b.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let To,Bo;const rs={};var Lo=p(Ro,To,Bo,!1,Mo,null,null,null);function Mo(t){for(let e in rs)this[e]=rs[e]}const qo=Object.freeze(Object.defineProperty({__proto__:null,DitoAccount:li,DitoButtons:$r,DitoClipboard:qr,DitoContainer:Xi,DitoCreateButton:Er,DitoDialog:fi,DitoEditButtons:xr,DitoElement:yi,DitoErrors:so,DitoForm:Ge,DitoFormNested:Qr,DitoHeader:si,DitoLabel:Di,DitoMenu:Ua,DitoPagination:mo,DitoPane:Ui,DitoPanel:cr,DitoPanels:mr,DitoRoot:Pt,DitoSchema:Vi,DitoSchemaInlined:Mi,DitoScopes:lo,DitoTableCell:Eo,DitoTableHead:xo,DitoTabs:nr,DitoTreeItem:$o,DitoVNode:function(){return Lo.exports}(),DitoView:ue},Symbol.toStringTag,{value:"Module"})),C=b.extend({mixins:[X],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});C.register=function(t,e={}){t=o.asArray(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)un(n,s);return s},C.get=mt;var Io=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("button",t._g(t._b({ref:"element",staticClass:"dito-button",class:`dito-button-${t.verb}`,attrs:{id:t.dataPath,type:t.type,title:t.text}},"button",t.attributes,!1),t.listeners),[t._v(t._s(t.text))])},Ao=[];const No=C.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",computed:{verb(){return this.verbs[this.name]||this.name},text:f("text",{type:String,get(t){return t||o.labelize(this.verb)}}),closeForm:f("closeForm",{type:Boolean,default:!1})},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,click:this.onClick}},async submit(t){var e;return(e=this.resourceComponent)==null?void 0:e.submit(this,t)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Rt(this.schema)&&await this.submit()}}}),os={};var zo=p(No,Io,Ao,!1,Uo,null,null,null);function Uo(t){for(let e in os)this[e]=os[e]}const Ho=function(){return zo.exports}();var Wo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-checkbox",attrs:{id:t.dataPath,type:"checkbox"},domProps:{checked:Array.isArray(t.value)?t._i(t.value,null)>-1:t.value},on:{change:function(n){var a=t.value,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.value=a.concat([l])):c>-1&&(t.value=a.slice(0,c).concat(a.slice(c+1)))}else t.value=r}}},"input",t.attributes,!1),t.listeners))},Yo=[];const Hd="",Ko=C.register("checkbox",{nativeField:!0}),ls={};var Jo=p(Ko,Wo,Yo,!1,Qo,null,null,null);function Qo(t){for(let e in ls)this[e]=ls[e]}const Xo=function(){return Jo.exports}(),cs={mixins:[Je],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,{resolveCounter:s=1,...n}={}){var l;o.isObject(t)||(t={data:t});let{data:a=void 0,dataPath:i=null}=t;const r=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((l=r.dependencyFunction)==null||l.call(this,this.context),r.resolveCounter>0){const{resolvedData:c}=r;return--r.resolveCounter===0&&(r.resolvedData=null),c}if(r.resolving)a=null;else if(a){if(o.isFunction(a)){const c=a.call(this,this.context);o.isFunction(c)?(r.dependencyFunction=a,a=c.call(this,this.context)):a=c}o.isPromise(a)&&(r.resolving=!0,this.resolveData(a,n).then(c=>{r.resolveCounter=s,r.resolvedData=c,r.resolving=!1}),a=null)}else i&&(a=o.getValueAtDataPath(this.rootData,o.normalizeDataPath(`${this.dataPath}/${i}`)));return a},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(o.isFunction(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},et={mixins:[cs],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=o.isArray(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Gs(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=o.isArray(t)?t.map(e):e(t)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){const t=this.handleDataSchema(this.schema.options,"options",{resolveCounter:1})??[];if(!o.isArray(t))throw new Error(`Invalid options data, should be array: ${t}`);return this.hasOptions=t.length>0,this.processOptions(t)},activeOptions(){return this.options},relate:f("relate",{type:Boolean,default:!1,callback:!1}),groupBy:f("groupBy",{type:String,default:null}),optionLabel:f("options.label",{type:[String,Function],default:null,get(t){return t||this.getOptionKey("label")||null}}),optionValue:f("options.value",{type:[String,Function],default:null,get(t){return t||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:f("search",{type:[Object,Function],default:null,get(t){if(t){const{filter:e,debounce:s}=o.isFunction(t)?{filter:t}:t;return s?o.debounceAsync(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return o.isObject(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Xs(e,"id");if(this.groupBy){const e={};t=t.reduce((s,n)=>{const a=n[this.groupBy];let i=e[a];return i||(i=e[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},s.push(i)),i.options.push(n),s},[])}}return t},hasOption(t){return!!this.getOptionForValue(this.getValueForOption(t))},getOptionForValue(t){const e=(s,n,a)=>{for(const i of s)if(a){const r=e(i.options,n,null);if(r)return r}else if(n===this.getValueForOption(i))return i};return this.optionValue?e(this.activeOptions,t,this.groupBy):t},getValueForOption(t){const{optionValue:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new S(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new S(this,{option:t})):o.labelize(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const i=(a=t.options)==null?void 0:a.dataPath,r=i?o.normalizeDataPath(`${s}/${i}`):null;n.addRelation(s,r,t),r&&n.setSourceRelated(r);const l=c=>c&&{id:c.id};e=o.isArray(e)?e.map(l):l(e)}return e}};var Go=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-checkboxes",class:`dito-layout-${t.schema.layout||"vertical"}`,attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedOptions,expression:"selectedOptions"}],ref:"element",refInFor:!0,staticClass:"dito-checkbox",attrs:{type:"checkbox"},domProps:{value:t.getValueForOption(n),checked:Array.isArray(t.selectedOptions)?t._i(t.selectedOptions,t.getValueForOption(n))>-1:t.selectedOptions},on:{change:function(a){var i=t.selectedOptions,r=a.target,l=!!r.checked;if(Array.isArray(i)){var c=t.getValueForOption(n),u=t._i(i,c);r.checked?u<0&&(t.selectedOptions=i.concat([c])):u>-1&&(t.selectedOptions=i.slice(0,u).concat(i.slice(u+1)))}else t.selectedOptions=l}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Zo=[];const Wd="",tl=C.register("checkboxes",{mixins:[et],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),us={};var el=p(tl,Go,Zo,!1,sl,null,null,null);function sl(t){for(let e in us)this[e]=us[e]}const nl=function(){return el.exports}();var al=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"code",staticClass:"dito-code",style:t.style,attrs:{id:t.dataPath}})},il=[];const Yd="",rl=C.register("code",{mixins:[H],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new qs(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let e=!1,s=!1,n=!1;const a=()=>{!this.focused&&e&&(e=!1,this.onChange())},i=()=>this.onFocus(),r=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:i,blur:r});const l=u=>{u!==t.code&&(n=!0,t.updateCode(u))},c=u=>{u!==this.value&&(s=!0,this.value=u,e=!0,a())};t.onUpdate(u=>{n?n=!1:c(u)}),this.$watch("value",u=>{s?s=!1:l(u||"")}),l(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),ds={};var ol=p(rl,al,il,!1,ll,null,null,null);function ll(t){for(let e in ds)this[e]=ds[e]}const cl=function(){return ol.exports}();var ul=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",{staticClass:"dito-color",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},[s("div",{staticClass:"dito-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger"},slot:"trigger"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.hexValue,expression:"hexValue"}],ref:"element",attrs:{id:t.dataPath,type:"input",size:"8"},domProps:{value:t.hexValue},on:{input:function(n){n.target.composing||(t.hexValue=n.target.value)}}},"input",t.attributes,!1),t.listeners)),t.value?s("div",{staticClass:"dito-color-preview dito-inherit-focus"},[s("div",{style:{background:`#${t.hexValue||"00000000"}`}})]):t._e(),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:function(n){return n.stopPropagation(),t.clear.apply(null,arguments)}}}):t._e()]),s("sketch-picker",{staticClass:"dito-color-picker",attrs:{slot:"popup","disable-alpha":!t.alpha,"disable-fields":!t.inputs,"preset-colors":t.presets},slot:"popup",model:{value:t.colorValue,callback:function(n){t.colorValue=n},expression:"colorValue"}})],1)},dl=[];const Kd="",hl=C.register("color",{components:{Trigger:wt,SketchPicker:Is.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(t){const e=this.colorFormat,s={hex:(t==null?void 0:t.a)<1?"hex8":"hex",rgb:"rgba"}[e]||e;s?this.value=t[s]:this.value=at(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=at(this.value);t.isValid()&&(this.convertedHexValue=t.toString(t.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(t){this.convertedHexValue=t}},colorFormat:f("format",{type:String,default:"hex"}),alpha:f("alpha",{type:Boolean,default:!1}),inputs:f("inputs",{type:Boolean,default:!0}),presets:f("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{focused(t){if(!t&&this.convertedHexValue){const e=at(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),hs={};var pl=p(hl,ul,dl,!1,fl,null,null,null);function fl(t){for(let e in hs)this[e]=hs[e]}const ml=function(){return pl.exports}();var _l=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},gl=[];const vl=C.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),ps={};var bl=p(vl,_l,gl,!1,yl,null,null,null);function yl(t){for(let e in ps)this[e]=ps[e]}const $l=function(){return bl.exports}();var Cl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",{ref:"element",staticClass:"dito-text dito-input",attrs:{id:t.dataPath,name:t.name,type:"text",disabled:t.disabled,readonly:!0},domProps:{value:t.value}})},wl=[];const Pl=C.register(["computed","data","hidden"],{mixins:[cs],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:t}=this;if(t.data||t.dataPath){const e=this.handleDataSchema(t,"schema",{resolveCounter:2});this.$set(this.data,this.name,e)}return X.computed.value.get.call(this)},set(t){X.computed.value.set.call(this,t)}}}}),fs={};var Sl=p(Pl,Cl,wl,!1,Dl,null,null,null);function Dl(t){for(let e in fs)this[e]=fs[e]}const xl=function(){return Sl.exports}();var Ol=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-date"},[s(t.getComponent(t.type),t._g(t._b({ref:"element",tag:"component",attrs:{id:t.dataPath,locale:t.locale,dateFormat:Object.assign({},t.api.formats.date,t.dateFormat)},model:{value:t.dateValue,callback:function(n){t.dateValue=n},expression:"dateValue"}},"component",t.attributes,!1),t.listeners))],1)},kl=[];const Fl=C.register(["date","datetime","time"],{components:{DatePicker:ve,TimePicker:ye,DateTimePicker:la},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:t}=this;return t&&new Date(t)},set(t){this.value=t}},dateFormat:f("dateFormat",{type:Object,default:null})},methods:{getComponent(t){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[t]}},processValue(t,e){return o.isDate(e)?e.toISOString():e}}),ms={};var jl=p(Fl,Ol,kl,!1,Vl,null,null,null);function Vl(t){for(let e in ms)this[e]=ms[e]}const El=function(){return jl.exports}(),st={mixins:[Qe,re],defaultValue(t){return z(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return N(this.type)},isListSource(){return z(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let t=this.value;this.isObjectSource?t=t!=null?[t]:[]:t=this.unwrapListData(t)||t,t||(t=[]);const{wrapPrimitives:e}=this;return e?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=t.map(s=>({[e]:s})),this.wrappedPrimitives):t},set(t){this.wrapPrimitives?this.wrappedPrimitives=t:this.value=this.isObjectSource?t&&t.length>0?t[0]:null:t}},objectData:{get(){return this.listData[0]||null},set(t){this.listData=t?[t]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:t}=this;return t?{order:t}:{}},query:ft("query",{get(t){return{...this.defaultQuery,...t}},set(t){var n;const{scope:e=(n=this.defaultScope)==null?void 0:n.name,page:s=this.schema.page}=this.query;return t={...this.query,...e!=null&&{scope:e},...s!=null&&{page:s},...t},o.equals(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:ft("total"),columns(){return q(this.schema.columns)},scopes(){return q(this.schema.scopes)},defaultScope(){if(this.scopes){let t=null;for(const e of Object.values(this.scopes)){if(e.defaultScope)return e;t||(t=e)}return t}},defaultOrder(){if(this.columns)for(const t of Object.values(this.columns)){const{defaultSort:e}=t;if(e){const s=o.isString(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(A(this.schema,this.context))},view(){return yt(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return Q(this.schema.buttons)},hasLabels(){return this.forms.some(bn)},isCompact(){return this.forms.every(Yt)},isInlined(){return Ct(this.schema)},paginate:f("paginate",{type:Number}),render:f("render",{type:Function,default:null}),creatable:f("creatable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:f("editable",{type:Boolean,default:!1,get(t){return t&&!this.isInlined}}),deletable:f("deletable",{type:Boolean,default:!1}),draggable:f("draggable",{type:Boolean,default:!1,get(t){return this.isListSource&&this.listData.length>1&&t}}),collapsible:f("collapsible",{type:Boolean,default:null,get(t){return this.isInlined&&!!(t??this.collapsed!==null)}}),collapsed:f("collapsed",{type:Boolean,default:null})},watch:{$route(t,e){if(this.ignoreRouteChange){this.ignoreRouteChange=!1;return}e.path===t.path&&e.hash===t.hash&&(this.query=t.query,this.loadData(!1))},wrappedPrimitives:{deep:!0,handler(t,e){const{wrapPrimitives:s}=this;s&&e!==null&&(this.unwrappingPrimitives=!0,this.value=t.map(n=>n[s]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(t){!t||this.isListSource&&o.isArray(t)||this.isObjectSource&&o.isObject(t)?this.value=t:this.unwrapListData(t)||o.isObject(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&o.isObject(t)&&o.isNumber(t.total)&&o.isArray(t.results))return this.total=t.total,this.value=t.results,this.value},createItem(t,e){const s=this.createData(t,e);return this.isObjectSource?this.objectData=s:this.listData.push(s),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),s},removeItem(t){if(this.isObjectSource)this.objectData=null,this.onChange();else{const{listData:e}=this,s=e&&e.indexOf(t);s>=0&&(e.splice(s,1),this.onChange())}},deleteItem(t,e){const s=t&&this.getItemLabel(this.schema,t,{index:e,extended:!0}),n=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${s} was ${this.verbs.deleted}.`,this.transientNote]});if(t&&window.confirm(`Do you really want to ${this.verbs.delete} ${s}?`))if(this.isTransient)this.removeItem(t),n();else{const a=this.getItemId(this.schema,t),i=ht(a,this.resource);i&&this.handleRequest({method:"delete",resource:i},r=>{r||(this.removeItem(t),n()),this.reloadData()})}},getSchemaComponent(t){const{schemaComponents:e}=this,{length:s}=e;return e[(t%s+s)%s]},openSchemaComponent(t){const e=this.getSchemaComponent(t);e&&(e.opened=!0)},async navigateToComponent(t,e){if(this.collapsible){const s=t.startsWith(this.dataPath)?this.isListSource?o.parseDataPath(t.slice(this.dataPath.length+1))[0]??null:0:null;if(s!==null&&o.isNumber(+s)){const n=this.getSchemaComponent(+s);if(n){const{opened:a}=n;a||(n.opened=!0,await this.$nextTick());const i=n.getComponentsByDataPath(t);if(i.length>0&&((e==null?void 0:e(i))??!0))return!0;n.opened=a}}}return this.navigateToRouteComponent(t,e)},navigateToRouteComponent(t,e){return new Promise((s,n)=>{const a=()=>{const{routeComponents:r}=this.appState,l=r[r.length-1];s((e==null?void 0:e([l]))??!0)},i=o.parseDataPath(t);for(;i.length>0;){const r=this.routeComponent.getChildPath(this.api.normalizePath(o.normalizeDataPath(i))),{matched:l}=this.$router.match(r);l.length&&(this.$route.path===r?a():this.$router.push({path:r},()=>{this.$nextTick(a)},n)),i.pop()}s(!1)})}},async processSchema(t,e,s,n,a,i=!1,r=!1,l=null){Ut(t,e,s);const c=Ct(e);if(c&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const u=`id${a+1}`,d={api:t,schema:e},h={...d,flatten:r,nested:i,param:u},m=await fn(t,e,a);if(l&&await l(m,a+1),M(e)&&!c){const g=($,D)=>D?$?`${$}/:${D}`:`:${D}`:$,_=a===0?"":e.path,y={path:g(_,z(e)&&u),component:b.component(i?"dito-form-nested":"dito-form"),meta:h};N(e)&&n.push({...y,path:g(_,u)}),_&&n.push({path:_,redirect:".",meta:d});const[x,P]=m.reduce(($,D)=>($[D.meta.flatten?0:1].push(D),$),[[],[]]);if(P.length&&(y.children=P),n.push(y),x.length)for(const $ of x)n.push({...$.redirect?$:y,path:`${y.path}/${$.path}`,meta:{...$.meta,flatten:r}})}},processValue(t,e,s,n){return n.addSource(s,t),e}},xt={text(t){const e=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:t.operators?{type:"select",options:o.isArray(t.operators)?e.filter(s=>t.operators.includes(s.value)):e,width:"40%"}:null,text:{type:"text",width:t.operators?"60%":"fill"}}},"date-range"(){const t={day:"2-digit",month:"2-digit",year:"numeric"};return{from:{type:"datetime",width:"50%",dateFormat:t},to:{type:"datetime",width:"50%",dateFormat:t}}}};function Rl(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return Ll(n,s.query)},components:Tl(t),buttons:{clear:{text:"Clear",events:{click({schemaComponent:a}){a.resetData(),a.applyFilters()}}},filter:{type:"submit",text:"Filter",events:{click({schemaComponent:a}){a.applyFilters()}}}},methods:{applyFilters(){s.query={...s.query,filter:Bl(this.schema,this.data),page:void 0}}}};return n}function Tl(t){var s;const e={};for(const n of Object.values(t||{})){const{filter:a,...i}=n,r=a?(s=xt[a])==null?void 0:s.call(xt,n):n.components;if(r){i.components={};for(const[l,c]of Object.entries(r))if(c){const u=c.label||o.labelize(c.name||l);i.components[l]={...c,label:!1,placeholder:u}}e[n.name]={label:i.label,type:"object",default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${n.name}': Unknown filter type '${a}'.`)}return e}function _s(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function Bl(t,e){const s=[];for(const n in e){const a=e[n];if(a){const i=Object.keys(_s(t,n)).map(r=>a[r]??null);i.some(r=>r!==null)&&s.push(`${n}:${i.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function Ll(t,e){const s={};if(e)for(const a of o.asArray(e.filter)){const[,i,r]=a.match(/^(\w+):(.*)$/);try{s[i]=o.asArray(JSON.parse(`[${r}]`))}catch{}}const n={};for(const a in t.components){const i={},r=s[a];if(r){const l=_s(t,a);if(l){let c=0;for(const u in l)i[u]=r[c++]}}n[a]=i}return n}var Ml=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-list",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.scopes||t.hasPagination?s("div",{staticClass:"dito-navigation"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t.hasPagination?s("div",{staticClass:"dito-spacer"}):t._e(),t.hasPagination?s("dito-pagination",{attrs:{query:t.query,limit:t.paginate,total:t.total||0}}):t._e()],1):t._e(),s("table",{staticClass:"dito-table",class:{"dito-table-separators":t.isInlined,"dito-table-larger-padding":t.hasEditButtons&&!t.isInlined,"dito-table-alternate-colors":!t.isInlined,"dito-table-even-count":t.hasEvenCount}},[t.columns?s("dito-table-head",{attrs:{query:t.query,columns:t.columns,hasEditButtons:t.hasEditButtons}}):t._e(),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.updateOrder(t.sourceSchema,t.listData,t.paginationRange)},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.listData,function(n,a){return s("tr",{key:t.getItemUid(t.schema,n),attrs:{id:t.getDataPath(a)}},[t.columns?t._l(t.columns,function(i){return t.shouldRender(i)?s("dito-table-cell",{key:i.name,class:t.getCellClass(i),attrs:{cell:i,schema:t.schema,dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.store,nested:!1,disabled:t.disabled||t.isLoading}}):t._e()}):[s("td",[t.isInlined?s("dito-schema-inlined",{attrs:{label:t.getItemLabel(t.schema,n,{index:a,asObject:!0}),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a),disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible,deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a)},on:{delete:function(i){return t.deleteItem(n,a)}}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.getDataPath(a),data:n,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext(n,a)))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,n,{index:a}))}})],1)],t.hasCellEditButtons?s("td",{staticClass:"dito-cell-edit-buttons"},[s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a)},on:{delete:function(i){return t.deleteItem(n,a)}}})],1):t._e()],2)}),0),t.hasListButtons&&!t.single?s("tfoot",[s("tr",[s("td",{staticClass:"dito-cell-edit-buttons",attrs:{colspan:t.numColumns}},[s("dito-edit-buttons",{attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}})],1)])]):t._e()],1),t.hasListButtons&&t.single?s("dito-edit-buttons",{staticClass:"dito-buttons-main dito-buttons-large",attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}}):t._e()],1):t._e()},ql=[];const Jd="",Il=C.register("list",{components:{VueDraggable:nt},mixins:[st,Dt],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,i=>i.type==="list");return Rl(q(n),e,{get query(){var i;return(i=a())==null?void 0:i.query},set query(i){const r=a();if(r){const l=c=>o.pickBy(c,u=>u!==void 0);o.equals(l(i),l(r.query))||(r.query=i,r.loadData(!1))}}})}},computed:{hasPagination(){return this.paginate&&this.total>this.paginate},hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:t}=this;return t.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(t){return j(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=_n(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${o.hyphenate(t.name)}`},getContext(t,e){return new S(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=j(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),gs={};var Al=p(Il,Ml,ql,!1,Nl,null,null,null);function Nl(t){for(let e in gs)this[e]=gs[e]}const zl=function(){return Al.exports}();var Ul=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-label",{staticClass:"dito-label-component",attrs:{label:t.value,dataPath:t.dataPath}})},Hl=[];const Qd="",Wl=C.register("label",{excludeValue:!0,generateLabel:!1}),vs={};var Yl=p(Wl,Ul,Hl,!1,Kl,null,null,null);function Kl(t){for(let e in vs)this[e]=vs[e]}const Jl=function(){return Yl.exports}();var Ql=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-markup",attrs:{id:t.dataPath}},[s("editor-menu-bar",{staticClass:"dito-markup-toolbar",attrs:{editor:t.editor}},[t.groupedButtons.length>0?s("div",{staticClass:"dito-buttons dito-buttons-toolbar"},t._l(t.groupedButtons,function(n){return s("div",{staticClass:"dito-button-group"},t._l(n,function(a){a.name;var i=a.icon,r=a.isActive,l=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":r},on:{click:l}},[s("icon",{attrs:{name:i}})],1)}),0)}),0):t._e()]),s("editor-content",{ref:"editor",staticClass:"dito-markup-editor",style:t.styles,attrs:{editor:t.editor}}),t.resizable?s("div",{staticClass:"dito-resize",on:{mousedown:function(n){return n.stopPropagation(),n.preventDefault(),t.onDragResize.apply(null,arguments)}}}):t._e()],1)},Xl=[];const Xd="",Gl=C.register("markup",{components:{EditorContent:W.EditorContent,EditorMenuBar:W.EditorMenuBar,Icon:fa},mixins:[H],data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:t=>this.onClickLink(t)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{ignoreActive:()=>this.otherNodeButtons.some(t=>t.isActive)},heading:{attr:"level",values:[1,2,3,4,5,6]}})},otherNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){const{markButtons:t,basicNodeButtons:e,otherNodeButtons:s,toolButtons:n}=this;return[t,e,s,n].filter(a=>a.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:f("resizable",{type:Boolean,default:!1}),whitespace:f("whitespace",{type:String,default:"collapse"}),enableRules:f("enableRules",{type:[Object,Boolean],default:!1,get(t){return o.isObject(t)?t:{input:!!t,paste:!!t}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let t=!1,e=!1;const s=()=>{!this.focused&&t&&(t=!1,this.onChange())},n=()=>this.onFocus(),a=()=>{this.onBlur(),s()},i=o.debounce(l=>{e=!0,this.value=l(),t=!0,s()},100),r=({getHTML:l})=>{i(l),this.onInput()};this.$watch("value",l=>{e?e=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new W.Editor({...this.editorOptions,onFocus:n,onBlur:a,onUpdate:r,extensions:this.createExtensions(),content:this.value||""})},beforeDestroy(){this.editor.destroy()},methods:{onDragResize(t){const e=({clientX:r,clientY:l})=>({x:r,y:l});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=r=>{const{y:l}=e(r);n+=l-s,s=l,this.height=`${Math.max(n,0)}px`},i=this.domOn(document,{mousemove:a,mouseup(r){a(r),i.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(t){const e=await this.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:s}){s.resolve({href:null,title:null})}}}},data:this.editor.getMarkAttrs("link")});if(e){let{href:s,title:n}=e;if(s)try{new URL(s)}catch{s=`http://${s}`}t({href:s,title:n})}},createExtensions(){const{marks:t={},nodes:e={},tools:s={}}=this.schema;return[t.bold&&new F.Bold,t.italic&&new F.Italic,t.underline&&new F.Underline,t.strike&&new F.Strike,t.small&&new Zl,t.code&&new F.Code,t.link&&new tc,e.blockquote&&new F.Blockquote,e.codeBlock&&new F.CodeBlock,new F.HardBreak,e.heading&&new F.Heading({levels:e.heading}),e.horizontalRule&&new F.HorizontalRule,(e.orderedList||e.bulletList)&&new F.ListItem,e.bulletList&&new F.BulletList,e.orderedList&&new F.OrderedList,s.history&&new F.History].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:i,icon:r,attrs:l,ignoreActive:c,onClick:u})=>{const d=this.editor.isActive[i],h=this.editor.commands[i];s.push({name:i,icon:r,isActive:(d==null?void 0:d(l))&&(c==null||!c()),onClick:()=>u?u(h,l):h(l)})},a=this.schema[t];if(a)for(const[i,r]of Object.entries(e)){const l=["undo","redo"].includes(i)?"history":i,c=a[l],u=o.underscore(i),d=o.hyphenate(i);if(c){if(r===!0)n({name:u,icon:d});else if(o.isObject(r)){const{attr:h,values:m,ignoreActive:g,onClick:_}=r;if(h){if(o.isArray(m)&&o.isArray(c))for(const y of m)c.includes(y)&&n({name:u,icon:`${d}-${y}`,attrs:{[h]:y},ignoreActive:g,onClick:_})}else n({name:u,icon:d,ignoreActive:g,onClick:_})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class Zl extends W.Mark{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>As.toggleMark(e)}}class tc extends F.Link{get schema(){return{attrs:{href:{default:null},title:{default:null}},inclusive:!1,parseDOM:[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}],toDOM:e=>["a",e.attrs,0]}}}const bs={};var ec=p(Gl,Ql,Xl,!1,sc,null,null,null);function sc(t){for(let e in bs)this[e]=bs[e]}const nc=function(){return ec.exports}();var ac=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-multiselect",class:{"dito-multiselect-single":!t.multiple,"dito-multiselect-multiple":t.multiple}},[s("vue-multiselect",t._g(t._b({ref:"element",attrs:{"show-labels":!1,placeholder:t.placeholder,"tag-placeholder":"Press enter to add new tag",options:t.populate&&t.activeOptions||[],"custom-label":t.getLabelForOption,"track-by":t.optionValue,"group-label":t.groupByLabel,"group-values":t.groupByOptions,multiple:t.multiple,taggable:t.taggable,searchable:t.searchable,"internal-search":!t.searchFilter,"preserve-search":!!t.searchFilter,"clear-on-select":!t.searchFilter,"close-on-select":!t.stayOpen,loading:t.isLoading},on:{open:function(n){t.populate=!0},tag:t.onAddTag,"search-change":t.onSearchChange},model:{value:t.selectedOptions,callback:function(n){t.selectedOptions=n},expression:"selectedOptions"}},"vue-multiselect",t.attributes,!1),t.listeners)),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{type:"button",disabled:t.disabled},on:{click:t.clear}}):t._e()],1)},ic=[];const Gd="",rc=C.register("multiselect",{components:{VueMultiselect:Ns},mixins:[et],data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(t=>this.getOptionForValue(t)||this.addTagOption(t)).filter(t=>t):this.selectedOption},set(t){this.selectedValue=this.multiple?(t||[]).map(e=>this.getValueForOption(e)):this.getValueForOption(t)}},activeOptions(){return this.searchedOptions||this.options},multiple:f("multiple",{type:Boolean,default:!1}),searchable:f("searchable",{type:Boolean,default:!1}),taggable:f("taggable",{type:Boolean,default:!1}),stayOpen:f("stayOpen",{type:Boolean,default:!1}),placeholder(){const{placeholder:t,searchable:e,taggable:s}=this.schema;return t||(e&&s?`Search or add a ${this.label}`:e?`Select or search ${this.label}`:void 0)}},mounted(){this.autofocus&&this.focus()},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onChange}},addTagOption(t){if(this.taggable){const{optionLabel:e,optionValue:s}=this,n=e&&s?{[e]:t,[s]:t}:t;return this.options.push(n),n}},focusElement(){this.$refs.element.activate()},onAddTag(t){const e=this.addTagOption(t);e&&this.value.push(this.getValueForOption(e))},async onSearchChange(t){this.searchFilter&&(t?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new S(this,{query:t})))):this.searchedOptions=null)}}}),ys={};var oc=p(rc,ac,ic,!1,lc,null,null,null);function lc(t){for(let e in ys)this[e]=ys[e]}const cc=function(){return oc.exports}(),Ot={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(t){this.value=t!==""?this.isInteger?parseInt(t,10):parseFloat(t):null}},isInteger(){return!1},stepValue(){return this.step==null&&!this.isInteger?"any":this.step},decimals:f("decimals",{type:Number}),step:f("step",{type:Number,get(t){return this.isInteger&&t!=null?Math.ceil(t):t}}),min:f("min",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[0]:t,this.isInteger&&t!=null?Math.floor(t):t}}),max:f("max",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[1]:t,this.isInteger&&t!=null?Math.ceil(t):t}}),range:f("range",{type:Array,get(){const{min:t,max:e}=this;return t!=null&&e!=null?[t,e]:void 0},set(t){o.isArray(t)&&([this.min,this.max]=t)}})},methods:{getValidations(){const t={},{range:e,min:s,max:n,decimals:a,step:i}=this;if(e?t.range=e:(s!=null&&(t.min=s),n!=null&&(t.max=n)),a!=null)t.decimals=a;else if(i){const r=(`${i}`.split(".")[1]||"").length;r>0?t.decimals=r:t.integer=!0}return this.isInteger&&(t.integer=!0),t}}};var uc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-number",attrs:{id:t.dataPath,type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},dc=[];const Zd="",hc=C.register(["number","integer"],{components:{InputField:U},mixins:[Ot],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),$s={};var pc=p(hc,uc,dc,!1,fc,null,null,null);function fc(t){for(let e in $s)this[e]=$s[e]}const mc=function(){return pc.exports}();var _c=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-object",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.objectData?s("div",{staticClass:"dito-object-content"},[t.isInlined?s("dito-schema-inlined",{attrs:{schema:t.getItemFormSchema(t.schema,t.objectData,t.context),dataPath:t.dataPath,data:t.objectData,meta:t.nestedMeta,store:t.store,disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.dataPath,data:t.objectData,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext()))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,t.objectData))}})],1):t._e(),s("dito-edit-buttons",{attrs:{creatable:t.creatable,deletable:t.objectData&&t.deletable,editable:t.objectData&&t.editable,createPath:t.path,editPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.objectData,path:t.path,meta:t.meta,store:t.store},on:{delete:function(n){return t.deleteItem(t.objectData)}}})],1):t._e()},gc=[];const th="",vc=C.register("object",{mixins:[st],getSourceType(t){return t},methods:{getContext(){return new S(this,{data:this.objectData})}}}),Cs={};var bc=p(vc,_c,gc,!1,yc,null,null,null);function yc(t){for(let e in Cs)this[e]=Cs[e]}const $c=function(){return bc.exports}(),Cc=C.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const{name:e,...s}=t;return s}});let wc,Pc;const ws={};var Sc=p(Cc,wc,Pc,!1,Dc,null,null,null);function Dc(t){for(let e in ws)this[e]=ws[e]}const xc=function(){return Sc.exports}();var Oc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("progress",t._g(t._b({ref:"element",staticClass:"dito-progress",attrs:{id:t.dataPath,max:t.progressMax},domProps:{value:t.progressValue}},"progress",t.attributes,!1),t.listeners))},kc=[];const Fc=C.register("progress",{mixins:[Ot],computed:{progressValue(){let{value:t,range:e,step:s}=this;return t!==null?(e&&(t-=e[0]),s&&(t=Math.round(t/s)*s)):t="",t},progressMax(){const{range:t}=this;if(t)return t[1]-t[0]}}}),Ps={};var jc=p(Fc,Oc,kc,!1,Vc,null,null,null);function Vc(t){for(let e in Ps)this[e]=Ps[e]}const Ec=function(){return jc.exports}();var Rc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-radio-buttons",class:`dito-layout-${t.schema.layout||"vertical"}`,attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",refInFor:!0,staticClass:"dito-radio-button",attrs:{type:"radio"},domProps:{value:t.getValueForOption(n),checked:t._q(t.selectedValue,t.getValueForOption(n))},on:{change:function(a){t.selectedValue=t.getValueForOption(n)}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Tc=[];const eh="",Bc=C.register("radio",{mixins:[et],nativeField:!0}),Ss={};var Lc=p(Bc,Rc,Tc,!1,Mc,null,null,null);function Mc(t){for(let e in Ss)this[e]=Ss[e]}const qc=function(){return Lc.exports}();var Ic=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-section",class:{"dito-section-labelled":!!t.schema.label}},[s("dito-pane",{staticClass:"dito-section-pane",attrs:{schema:t.getItemFormSchema(t.schema,t.item,t.context),dataPath:t.dataPath,data:t.item,meta:t.meta,store:t.store,disabled:t.disabled}})],1)},Ac=[];const sh="",Nc=C.register("section",{defaultValue:()=>{},ignoreMissingValue:t=>!t.nested&&!("default"in t),defaultNested:!1,generateLabel:!1,omitFlexGrow:!0,computed:{item(){return this.nested?this.value:this.data}},methods:{getItemFormSchema:$t},async processSchema(t,e,s,n,a){await vt(t,e,n,a)}}),Ds={};var zc=p(Nc,Ic,Ac,!1,Uc,null,null,null);function Uc(t){for(let e in Ds)this[e]=Ds[e]}const Hc=function(){return zc.exports}();var Wc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-select"},[s("select",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",attrs:{id:t.dataPath},on:{mousedown:function(n){t.populate=!0},focus:function(n){t.populate=!0},change:function(n){var a=Array.prototype.filter.call(n.target.options,function(i){return i.selected}).map(function(i){var r="_value"in i?i._value:i.value;return r});t.selectedValue=n.target.multiple?a:a[0]}}},"select",t.attributes,!1),t.listeners),[t.populate?[t._l(t.options,function(n){return[t.groupBy?s("optgroup",{attrs:{label:n[t.groupByLabel]}},t._l(n[t.groupByOptions],function(a){return s("option",{domProps:{value:t.getValueForOption(a)}},[t._v(t._s(t.getLabelForOption(a)))])}),0):s("option",{domProps:{value:t.getValueForOption(n)}},[t._v(t._s(t.getLabelForOption(n)))])]})]:t.selectedOption?[s("option",{domProps:{value:t.selectedValue}},[t._v(t._s(t.getLabelForOption(t.selectedOption)))])]:t._e()],2),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:t.clear}}):t._e()])},Yc=[];const nh="",Kc=C.register("select",{mixins:[et],nativeField:!0,data(){return{populate:!0}}}),xs={};var Jc=p(Kc,Wc,Yc,!1,Qc,null,null,null);function Qc(t){for(let e in xs)this[e]=xs[e]}const Xc=function(){return Jc.exports}();var Gc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-slider"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"element",staticClass:"dito-range",attrs:{id:t.dataPath,type:"range",min:t.min,max:t.max,step:t.stepValue},domProps:{value:t.inputValue},on:{__r:function(n){t.inputValue=n.target.value}}},"input",t.attributes,!1),t.listeners)),t.input?s("input-field",t._g(t._b({staticClass:"dito-number",attrs:{type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners)):t._e()],1)},Zc=[];const ah="",tu=C.register("slider",{components:{InputField:U},mixins:[Ot],nativeField:!0,computed:{input:f("input",{type:Boolean,default:!0})}}),Os={};var eu=p(tu,Gc,Zc,!1,su,null,null,null);function su(t){for(let e in Os)this[e]=Os[e]}const nu=function(){return eu.exports}();var au=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("switch-button",t._g(t._b({ref:"element",staticClass:"dito-switch",attrs:{id:t.dataPath,sync:!0,labels:t.labels},model:{value:t.value,callback:function(n){t.value=n},expression:"value"}},"switch-button",t.attributes,!1),t.listeners))},iu=[];const ih="",ru=C.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:Da},computed:{labels(){return this.schema.labels}}}),ks={};var ou=p(ru,au,iu,!1,lu,null,null,null);function lu(t){for(let e in ks)this[e]=ks[e]}const cu=function(){return ou.exports}();var uu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-text",attrs:{id:t.dataPath,type:t.inputType},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},du=[];const hu="****************",pu=C.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:U},nativeField:!0,textField:!0,ignoreMissingValue:t=>t.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?hu:this.value},set(t){this.value=t}}},methods:{getValidations(){const t={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return t?{[t]:!0}:{}}}}),Fs={};var fu=p(pu,uu,du,!1,mu,null,null,null);function mu(t){for(let e in Fs)this[e]=Fs[e]}const _u=function(){return fu.exports}();var gu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("textarea",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-textarea dito-input",class:{"dito-resizable":t.resizable},attrs:{id:t.dataPath,rows:t.lines},domProps:{value:t.value},on:{input:function(n){n.target.composing||(t.value=n.target.value)}}},"textarea",t.attributes,!1),t.listeners))},vu=[];const rh="",bu=C.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:f("resizable",{type:Boolean,default:!1})}}),js={};var yu=p(bu,gu,vu,!1,$u,null,null,null);function $u(t){for(let e in js)this[e]=js[e]}const Cu=function(){return yu.exports}();var wu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-list"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t._e(),s("div",{staticClass:"dito-tree-panel"},[s("dito-tree-item",{attrs:{schema:t.treeSchema,dataPath:t.treeDataPath,data:t.treeData,draggable:t.draggable,open:!0}}),t.hasEditableForms?s("div",{staticClass:"dito-tree-form-container"},[s("router-view")],1):t._e()],1)],1)},Pu=[];const oh="",Su=C.register(["tree-list","tree-object"],{mixins:[st],provide(){return{container:this}},getSourceType(t){return t==="tree-object"?"object":"list"},computed:{path(){var t;return(t=this.formComponent)==null?void 0:t.path},editPath(){var t;return this.$route.path.slice((t=this.path)==null?void 0:t.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const t=e=>M(e)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:e})||e.children&&t(e.children));return t(this.schema)}},async processSchema(t,e,s,n,a,i=!0,r=!1,l=null){return st.processSchema(t,e,s,n,a,i,r,(c,u)=>{const{children:d}=e;if(d)return d.type="tree-list",this.processSchema(t,d,d.name,c,u,i,!0,l)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return A(t,e,s?n=>({...n,components:{...n.components,[s.name]:s}}):null)}}),Vs={};var Du=p(Su,wu,Pu,!1,xu,null,null,null);function xu(t){for(let e in Vs)this[e]=Vs[e]}const Ou=function(){return Du.exports}();function Es(t){return Hs.filesize(t,{base:10})}var ku=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-upload"},[s("table",{staticClass:"dito-table dito-table-separators dito-table-background"},[t._m(0),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.files},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.files,function(n,a){return s("tr",{key:n.key},[s("td",{domProps:{innerHTML:t._s(t.renderFile(n,a))}}),s("td",[t._v(t._s(t._f("formatFileSize")(n.size)))]),s("td",[n.upload?[n.upload.error?[t._v("Error: "+t._s(n.upload.error))]:n.upload.active?[t._v("Uploading...")]:n.upload.success?[t._v("Uploaded")]:t._e()]:[t._v("Stored")]],2),s("td",{staticClass:"dito-cell-edit-buttons"},[s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(i){return t.deleteFile(n,a)}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()])])])}),0),s("tfoot",[s("tr",[s("td",{attrs:{colspan:4}},[s("div",{staticClass:"dito-upload-footer"},[t.isUploadActive?s("progress",{staticClass:"dito-progress",attrs:{max:"100"},domProps:{value:t.uploadProgress}}):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.isUploadActive?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!1}}},[t._v("Cancel All")]):t.isUploadReady?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!0}}},[t._v("Upload All")]):t._e(),s("vue-upload",{ref:"upload",staticClass:"dito-button dito-button-add-upload",attrs:{"input-id":t.dataPath,name:t.dataPath,disabled:t.disabled,"post-action":t.uploadPath,extensions:t.extensions,accept:t.accept,multiple:t.multiple,size:t.maxSize,title:"Upload Files"},on:{"input-filter":t.inputFilter,"input-file":t.inputFile},model:{value:t.uploads,callback:function(n){t.uploads=n},expression:"uploads"}})],1)])])])])],1)])},Fu=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[s("th",[s("span",[t._v("Name")])]),s("th",[s("span",[t._v("Size")])]),s("th",[s("span",[t._v("Status")])]),s("th",[s("span")])])])}];const lh="",ju=C.register("upload",{components:{VueUpload:zs,VueDraggable:nt},filters:{formatFileSize:Es},mixins:[Dt],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return Rs(this.value)},multiple:f("multiple",{type:Boolean,default:!1,callback:!1}),extensions:f("extensions",{type:[Array,String,RegExp]}),accept:f("accept",{type:Array,get(t){return o.isArray(t)?t.join(","):t}}),maxSize:f("maxSize",{type:[String,Number],get(t){return t?Us(t):void 0}}),draggable:f("draggable",{type:Boolean,default:!1,get(t){return t&&this.files.length>1}}),deletable:f("deletable",{type:Boolean,default:!1}),isUploadReady(){return this.uploads.length&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.uploads.length&&this.upload.active},uploadProgress(){return this.uploads.reduce((t,e)=>t+e.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},methods:{renderFile(t,e){const{render:s}=this.schema;return s?s.call(this,new S(this,{value:t,data:this.files,index:e,dataPath:j(this.dataPath,e)})):o.escapeHtml(t.name)},deleteFile(t,e){const{name:s}=t;t&&window.confirm(`Do you really want to ${this.verbs.remove} ${s}?`)&&(this.multiple?this.value.splice(e,1):this.value=null,t.upload&&this.upload.remove(t.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${s} was ${this.verbs.deleted}.`}))},getFileIndex(t){return this.multiple&&this.value?this.value.findIndex(e=>e.id===t.id):-1},addFile(t){this.multiple?this.value?this.value.push(t):this.value=[t]:this.value=t},replaceFile(t,e){if(this.multiple){const s=this.getFileIndex(t);s>=0&&(e?this.$set(this.value,s,e):this.value.splice(s,1))}else this.value=e},removeFile(t){this.replaceFile(t,null)},inputFile(t,e){if(t&&!e){const{id:s,name:n,size:a}=t;this.addFile({id:s,name:n,size:a,upload:t})}if(t&&e){const{success:s,error:n}=t;if(s){this.onChange();const a=t.response[0];a?(a.upload=t,this.replaceFile(t,a)):this.removeFile(t)}else if(n){const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${t.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${Es(t.size)}`,timeout:"Timeout occurred during upload"}[n]||`Unknown File Upload Error: '${n}'`;this.notify({type:"error",title:"File Upload Error",text:a}),this.removeFile(t)}}},inputFilter(t){var s;const e=t==null?void 0:t.xhr;(s=this.api.cors)!=null&&s.credentials&&e&&!e.withCredentials&&(e.withCredentials=!0)}},processValue(t,e){const s=Rs(e).map(({upload:n,...a})=>!n||n.success?a:null).filter(n=>n);return t.multiple?s:s[0]||null}});function Rs(t){return t?o.asArray(t):[]}const Ts={};var Vu=p(ju,ku,Fu,!1,Eu,null,null,null);function Eu(t){for(let e in Ts)this[e]=Ts[e]}const Ru=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:Ho,TypeCheckbox:Xo,TypeCheckboxes:nl,TypeCode:cl,TypeColor:ml,TypeComponent:$l,TypeComputed:xl,TypeDate:El,TypeLabel:Jl,TypeList:zl,TypeMarkup:nc,TypeMultiselect:cc,TypeNumber:mc,TypeObject:$c,TypePanel:xc,TypeProgress:Ec,TypeRadio:qc,TypeSection:Hc,TypeSelect:Xc,TypeSlider:nu,TypeSwitch:cu,TypeText:_u,TypeTextarea:Cu,TypeTreeList:Ou,TypeUpload:function(){return Vu.exports}()},Symbol.toStringTag,{value:"Module"})),Bs=new Set;function Tu(t){Bs.has(t)||(Bs.add(t),console.warn(t))}const Bu=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});v.config.productionTip=!1,v.use(L),v.use(V,{dynamic:!0}),v.use(Ls);class Lu{constructor(e,{dito:s={},api:n,views:a={},...i}={}){this.el=e,this.api=n=o.merge({base:"/"},s.api,n),this.options=i,n.locale||(n.locale="en-US"),n.formats=o.merge({},o.defaultFormats,n.formats),n.request||(n.request=l=>qu(n,l)),n.getApiUrl||(n.getApiUrl=l=>Au(n,l)),n.isApiUrl||(n.isApiUrl=l=>Iu(n,l)),n.normalizePath||(n.normalizePath=n.normalizePaths?o.hyphenate:l=>l),n.denormalizePath||(n.denormalizePath=n.normalizePaths?o.camelize:l=>l);const r=n.users=E(n.users,{type:"collection"})||{};r.login=E(r.login||"login",{method:"post",parent:r}),r.logout=E(r.logout||"logout",{method:"post",parent:r}),r.session=E(r.session||"session",{method:"get",parent:r}),n.resources={any(l){const c=this[l==null?void 0:l.type]||this.default;return l&&c.call(this,l)},default(l){const c=this.any(l.parent);return c?`${c}/${l.path}`:l.path},collection(l){return this.default(l)},member(l){return`${l.path}/${l.id}`},upload(l){return`${this.collection(l.parent)}/upload/${l.path}`},...n.resources},n.headers={"Content-Type":"application/json",...n.headers},o.isString(e)&&(e=document.querySelector(e)),this.root=new v({el:e,router:new L({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:Pt},provide:{api:n,$verbs:()=>Bu,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:l=>l(Pt,{attrs:{id:e.id},props:{unresolvedViews:a,options:i},components:{...qo,...Ru}})})}register(e,s){return C.register(e,s)}}class Mu extends Error{constructor(e){super(`Request failed with status code: ${e.status} (${e.statusText})`),this.response=e}}async function qu(t,{url:e,method:s="get",params:n=null,query:a=n||null,headers:i=null,data:r=null}){var u,d;n&&Tu("request.params is deprecated. Use action.method and action.path instead.");const l=t.isApiUrl(e),c=await fetch(t.getApiUrl({url:e,query:a}),{method:s.toUpperCase(),...r&&{body:JSON.stringify(r)},headers:{...l&&t.headers,...i},credentials:l&&((u=t.cors)!=null&&u.credentials)?"include":"same-origin"});if((d=c.headers.get("Content-Type"))!=null&&d.includes("application/json")&&(c.data=await c.json()),!c.ok)throw new Mu(c);return c}function Iu(t,e){return!o.isAbsoluteUrl(e)||e.startsWith(t.url)}function Au(t,{url:e,query:s}){o.isAbsoluteUrl(e)||(e=Nu(t.url,e));const n=zu(s);return n?`${e}?${n}`:e}function Nu(t,e){return`${t.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`}function zu(t){const e=t?o.isArray(t)?t:Object.entries(t):[];return new URLSearchParams(e.reduce((s,[n,a])=>{for(const i of o.asArray(a))s.push([n,i]);return s},[])).toString()}return Lu});
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zY3JvbGwuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvc2VsZWN0aW9uLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdXRpbHMvZGVwcmVjYXRlLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICByZXR1cm4gaXNUZW1wb3JhcnlJZChkYXRhPy5baWRLZXldKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyAoaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IHsgLi4uY29udGV4dCB9KVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT05cbiAgLy8gZGF0YS4gIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZVxuICAvLyB1c2Ugb2YgYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdFxuICAvLyBwYXJlbnQuIElmIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbFxuICAvLyBzb3J0cyBvZiBkYXRhIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBwYXJlbnRJdGVtID1cbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICByZXR1cm4gcGFyZW50SXRlbSAhPT0gdGhpcy5pdGVtID8gcGFyZW50SXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGV4cG9zdXJlIHNpbmNlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCxcbiAgLy8gZS5nLiBuZXN0ZWQgZm9ybXMgaW4gYHByb2Nlc3NEYXRhKClgLiBJbnN0ZWFkLCBiaW5kIGNvbXBvbmVudCB0byBgdGhpc2BcbiAgLy8gb25seSB3aGVyZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRPRE86IFJlbmFtZSB0aGlzIHRvIGBzZWFyY2hUZXJtYCBvciBgc2VhcmNoUXVlcnlgLCB0byBwZXJoYXBzIGZyZWUgYHF1ZXJ5YFxuICAvLyBmb3IgdGhlIGFjdHVhbCBgcmVzb3VyY2VDb21wb25lbnQucXVlcnlgIG9iamVjdD9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3F1ZXJ5JywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVGhlIGVycm9yIGZpZWxkIGlzIG9ubHkgcG9wdWxhdGVkIGluIHRoZSBjb250ZXh0IG9mIGJ1dHRvbnMgdGhhdCBzZW5kXG4gIC8vIHJlcXVlc3RzLCBzZWUgYFJlc291cmNlTWl4aW4uZW1pdEJ1dHRvbkV2ZW50KClgOlxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZXJyb3InLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgd2FzTm90aWZpZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnd2FzTm90aWZpZWQnLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEhlbHBlciBNZXRob2RzXG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQucmVxdWVzdChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGZvcm1hdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB0aGlzLmNvbXBvbmVudC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgbmF2aWdhdGUoKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uID0+IHRoaXMuY29tcG9uZW50Lm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LmRvd25sb2FkKG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZ2V0UmVzb3VyY2VVcmwoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlID0+IHRoaXMuY29tcG9uZW50LmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICB9XG5cbiAgZ2V0IG5vdGlmeSgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICAgIHNldCh0aGlzLCAnd2FzTm90aWZpZWQnLCB0cnVlKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRldmVudHM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIHZlcnNpb25zIG9mIFZ1ZSdzICRvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIC8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3NcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4kZXZlbnRzIHx8ICh0aGlzLiRldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZXZlbnRzW2V2ZW50XSB8fCAoZXZlbnRzW2V2ZW50XSA9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoZXYsIGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlLCBjYWxsYmFja3MgfSA9IGVudHJ5XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcXVldWUgd2l0aCBpdHMgcGFyYW1zLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IG9ubHkgZ2V0cyByZW1vdmVkIG9uY2UgYG5leHQoKWAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjYWxsYmFjay5hcHBseSh0aGlzLCBlbnRyeS5hcmdzKVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgZHVyaW5nIGV2ZW50IGhhbmRsZXIgZm9yICcke2V2ZW50fSc6YCwgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZm9yIHRoZSBldmVudFxuICAgICAgICAgICAgICAvLyB0aGF0IHdhcyBqdXN0IGNvbXBsZXRlZCBieSB0aGUgd3JhcHBlciB0aGF0IGNhbGxlZCBgbmV4dCgpYFxuICAgICAgICAgICAgICBlbnRyeS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pXG4gICAgICAgICAgLy8gRm9yIG5ldyBxdWV1ZXMgKD0gb25seSBvbmUgZW50cnkpIGVtaXQgdGhlIGZpcnN0IGV2ZW50IGltbWVkaWF0ZWx5LFxuICAgICAgICAgIC8vIHRvIGdldCB0aGUgcXVldWUgcnVubmluZy5cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4kZXZlbnRzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Jvb2xlYW4sIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc0RhdGUsXG4gIGlzUmVnRXhwLCBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT4gaXNEYXRlKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PiBpc0FycmF5KHZhbHVlKVxuICA/IHZhbHVlXG4gIDogaXNTdHJpbmcodmFsdWUpXG4gICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKVxuICA/IHZhbHVlXG4gIC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgOiB2YWx1ZSA9PT0gdHJ1ZVxuICAgID8ge31cbiAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PiBpc1JlZ0V4cCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKSA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAuLi5waWNrQnkoXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICApLFxuICAgICAgaWQ6IGAke2lkfWBcbiAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgaW50ZXJuYWwgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHF1ZXJ5IH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSBjYWNoZSAmJiB7XG4gICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgfVtjYWNoZV1cbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9hZENhY2hlICYmIGAke1xuICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J30gJHtcbiAgICAgICAgb3B0aW9ucy51cmx9ICR7XG4gICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHF1ZXJ5YCBvblxuICAgICAgICAvLyAyMDIyLTExLTAxLCByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueW1vcmUuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucXVlcnkgfHwgb3B0aW9ucy5wYXJhbXMgfHwgJycpfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICB9YFxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICgpID0+IHJlc29sdmUodHJ1ZSksXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5OTE3MDY2LzExNjM3MDhcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEuY29tcHV0ZWQgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICAgICAgICA/IHsgZ2V0OiB2YWx1ZSB9XG4gICAgICAgICAgOiBpc09iamVjdCh2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXQpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwRXZlbnRzKCkge1xuICAgICAgY29uc3QgeyB3YXRjaCwgZXZlbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gaXNGdW5jdGlvbih3YXRjaCkgPyB3YXRjaC5jYWxsKHRoaXMpIDogd2F0Y2hcbiAgICAgICAgaWYgKGlzT2JqZWN0KGhhbmRsZXJzKSkge1xuICAgICAgICAgIC8vIEluc3RhbGwgdGhlIHdhdGNoIGhhbmRsZXJzIGluIHRoZSBuZXh0IHRpY2ssIHNvIGFsbCBjb21wb25lbnRzIGFyZVxuICAgICAgICAgIC8vIGluaXRpYWxpemVkIGFuZCB3ZSBjYW4gY2hlY2sgYWdhaW5zdCB0aGVpciBuYW1lcy5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVycykpIHtcbiAgICAgICAgICAgICAgLy8gRXhwYW5kIHByb3BlcnR5IG5hbWVzIHRvICdkYXRhLnByb3BlcnR5JzpcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5TmFtZShrZXkpXG4gICAgICAgICAgICAgICAgPyBgZGF0YS4ke2tleX1gXG4gICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgdGhpcy4kd2F0Y2goZXhwciwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRFdmVudCA9IChrZXksIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICB0aGlzLm9uKGh5cGhlbmF0ZShldmVudCksIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZXZlbnQgZGVmaW5pdGlvbjogJHtrZXl9OiAke2NhbGxiYWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHNjYW4gc2NoZW1hIGZvciBgb25bQS1aXWAtc3R5bGUgY2FsbGJhY2tzIGFuZCBhZGQgdGhlbVxuICAgICAgLy8gVE9ETzogRGVwZXJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgdWlkID0gMFxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiAoXG4gICAgYG11c3QgYmUgbnVtZXJpYyBhbmQgbWF5IGNvbnRhaW4gJHtcbiAgICAgICFkZWNpbWFscyB8fCBkZWNpbWFscyA9PT0gJyonID8gJycgOiBkZWNpbWFsc1xuICAgIH0gZGVjaW1hbCBwb2ludHNgXG4gIClcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGV2ZW50cygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZShub3RpZnkgPSB0cnVlKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUnLCB0aGlzLmRhdGFQYXRoLCB2YWx1ZSwgdGhpcy52YWxpZGF0aW9ucylcbiAgICAgIGZvciAoY29uc3QgW3J1bGUsIHNldHRpbmddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25zW3J1bGVdXG4gICAgICAgIGlmICh2YWxpZGF0b3IgJiYgKHZhbGlkYXRvci5udWxsaXNoIHx8IHZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWxpZGF0ZSwgbWVzc2FnZSB9ID0gdmFsaWRhdG9yXG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZSh2YWx1ZSwgc2V0dGluZywgdGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzRnVuY3Rpb24obWVzc2FnZSlcbiAgICAgICAgICAgICAgICA/IG1lc3NhZ2UodmFsdWUsIHNldHRpbmcsIHRoaXMpXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlXG4gICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGlzVmFsaWRcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGZhbHNlKVxuICAgIH0sXG5cbiAgICBtYXJrRGlydHkoKSB7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyBvbiBuZXcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgYWRkRXJyb3IoZXJyb3IsIGFkZExhYmVsID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZXJyb3JzIHx8PSBbXVxuICAgICAgaWYgKGFkZExhYmVsKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCB8fCB0aGlzLnBsYWNlaG9sZGVyIHx8IHRoaXMubmFtZVxuICAgICAgICBlcnJvciA9IGBUaGUgJHtsYWJlbH0gZmllbGQgJHtlcnJvcn0uYFxuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcilcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICAvLyBDb252ZXJ0IGZyb20gQUpWIGVycm9ycyBvYmplY3RzIHRvIGFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzXG4gICAgICB0aGlzLmVycm9ycyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHsgbWVzc2FnZSB9IG9mIGVycm9ycykge1xuICAgICAgICB0aGlzLmFkZEVycm9yKG1lc3NhZ2UsIHRydWUpXG4gICAgICB9XG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBnZXRFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogbnVsbFxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLCBpc1N0cmluZywgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUFjY2Vzc29yKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbikge1xuICAvLyBga2V5T3JEYXRhUGF0aGAgY2FuIGJlIGEgc2ltcGxlIHByb3BlcnR5IGtleSxcbiAgLy8gb3IgYSBkYXRhLXBhdGggaW50byBzdWItcHJvcGVydGllcywgYm90aCBpbiBhcnJheSBvciBzdHJpbmcgZm9ybWF0LlxuICBpZiAoaXNTdHJpbmcoa2V5T3JEYXRhUGF0aCkgJiYga2V5T3JEYXRhUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAga2V5T3JEYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgfVxuICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgZGF0YSBwYXRoIGZvciB0aGUgaGFuZGxpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIC8vIE9ubHkgZGV0ZXJtaW5lIHNjaGVtYSB2YWx1ZSBpZiB3ZSBoYXZlIG5vIGdldHRlciwgb3IgdGhlIGdldHRlclxuICAgICAgLy8gd2FudHMgdG8gcmVjZWl2ZSB0aGUgdmFsdWUgYW5kIHByb2Nlc3MgaXQgZnVydGhlcjpcbiAgICAgIGNvbnN0IHZhbHVlID0gIWdldCB8fCBnZXQubGVuZ3RoID4gMFxuICAgICAgICAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCBvYmplY3QsIHRoZXlcbiAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgIC8vIGBzZXQoKWAgc3RvcmVzIGNoYW5nZWQgdmFsdWVzIGluIHRoZSBzZXBhcmF0ZSBgb3ZlcnJpZGVzYCBvYmplY3QuXG4gICAgICAgID8gdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgID8gdGhpcy5vdmVycmlkZXNbbmFtZV1cbiAgICAgICAgICA6IHRoaXMuZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGNhbGxiYWNrIH0pXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLm92ZXJyaWRlcywgbmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZUFjY2Vzc29yKG5hbWUsIHsgZGVmYXVsdDogZGVmLCBnZXQsIHNldCB9ID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9uczpcbiAgICAgICAgdmFsdWUgPSBpc0Z1bmN0aW9uKGRlZikgPyBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChvYmplY3QsIGl0ZW1JZCkge1xuICBsZXQgaWQgPSB1aWRNYXAuZ2V0KG9iamVjdClcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlciwgYXNBcnJheSwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY2Nyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGNsb25lLCBjYW1lbGl6ZSwgaXNNb2R1bGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYShzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHNjaGVtYXMgPSBbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWE/LnRhYnMgfHwge30pLFxuICAgIHNjaGVtYVxuICBdXG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYS5jb21wb25lbnQsIHNjaGVtYS5uYW1lKVxuICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZm9yRWFjaFNjaGVtYShzY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZFxuICApIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IHRydWUgOiB1bmRlZmluZWRcbiAgKSA9PT0gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gIWNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBmYWxzZSA6IHVuZGVmaW5lZFxuICApICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmIGlzU3RyaW5nKHNjaGVtYS50eXBlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ2Zvcm0nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndmlldydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubmFtZSB8fCBzY2hlbWEubGFiZWwgfHwgc2NoZW1hLnR5cGVcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoc2NoZW1hcy5tYXAoXG4gICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzY2hlbWFzKS5tYXAoXG4gICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBhbmVscyhzY2hlbWEpIHtcbiAgY29uc3QgeyBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHBhbmVscylcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICBhd2FpdCByZXNvbHZlUGFuZWxzKHNjaGVtYSlcbiAgaWYgKGlzVmlldyhzY2hlbWEpKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLmNvbXBvbmVudCwgbmFtZSwgY2hpbGRyZW4sIDApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXcsIHN0YXJ0IGF0IGxldmVsIDFcbiAgICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbiwgMSlcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcm91dGVzLnB1c2goe1xuICAgIHBhdGg6IGAvJHtzY2hlbWEucGF0aH1gLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKSB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIChjb21wb25lbnQsIG5hbWUpID0+IHtcbiAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NDb21wb25lbnQoYXBpLCBjb21wb25lbnQsIG5hbWUsIHJvdXRlcywgbGV2ZWwpKVxuICB9KVxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCByZXNvbHZlRm9ybSlcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgZm9ybSA9IHNjaGVtYS5mb3JtID0gYXdhaXQgcmVzb2x2ZUZvcm0oZm9ybSlcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMgfVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwgKyAxKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZvcm0oZm9ybSkge1xuICBmb3JtID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShmb3JtLCB0cnVlKVxuICBpZiAoIWlzRm9ybShmb3JtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihmb3JtKX0nYClcbiAgfVxuICBpZiAoZm9ybSkge1xuICAgIGF3YWl0IHJlc29sdmVQYW5lbHMoZm9ybSlcbiAgfVxuICByZXR1cm4gZm9ybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5mb3JtIHx8IHNjaGVtYS5mb3JtcyB8fCBzY2hlbWEuY29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNWaWV3KHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuY29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyBoYXNGb3JtU2NoZW1hKHZpZXdTY2hlbWEpXG4gICAgICA/IHZpZXdTY2hlbWFcbiAgICAgIC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgOiBmb3JFYWNoU2NoZW1hKHZpZXdTY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdDb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50cz8uW3ZpZXddXG4gICAgICAgIGlmIChoYXNGb3JtU2NoZW1hKHZpZXdDb21wb25lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdDb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gdmlldy5sZXZlbCA9PT0gMFxuICAgICAgPyBgLyR7dmlldy5wYXRofWAgLy8gQSBzaW5nbGUtY29tcG9uZW50IHZpZXdcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YCAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIHNjaGVtYSA9IHZpZXdcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubGFiZWwgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoXG4gICAgc2NoZW1hLm5lc3RlZCB8fFxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdFZhbHVlXG4gICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWxzKHNjaGVtYSkge1xuICBjb25zdCBjaGVja0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+XG4gICAgT2JqZWN0LnZhbHVlcyhjb21wb25lbnRzIHx8IHt9KS5zb21lKGhhc0xhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgY2hlY2tDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKSB8fFxuICAgIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMgfHwge30pLnNvbWUoY2hlY2tDb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsIGRhdGEsIG51bGwsIG51bGwsIHByb2Nlc3NCZWZvcmUsIG51bGwsIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIGAkc2V0KClgIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgVnVlLnNldChkYXRhLCBuYW1lLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gdGhyb3VnaCBgJHNldCgpYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKSA/IDFcbiAgICAgICAgICAgIDogaWQyID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDIpID8gLTFcbiAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PiBkYXRhUGF0aCAhPSBudWxsXG4gICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVBhdGggPSBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cylcbiAgaWYgKHNjaGVtYS50YWJzKSB7XG4gICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykpIHtcbiAgICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldEFsbFBhbmVsU2NoZW1hcyhzY2hlbWEsIGRhdGFQYXRoKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHBhbmVsLnNjaGVtYS5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKGRlc2NyaXB0aW9ucywgZGVmYXVsdHMpIHtcbiAgY29uc3QgdG9PYmplY3QgPSAoYXJyYXksIHRvU2NoZW1hKSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgID8gYXJyYXkucmVkdWNlKChvYmplY3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgb2JqZWN0W3NjaGVtYS5uYW1lXSA9IHNjaGVtYSAmJiBkZWZhdWx0c1xuICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoZGVzY3JpcHRpb25zKVxuICAgID8gdG9PYmplY3QoZGVzY3JpcHRpb25zLCB2YWx1ZSA9PiAoXG4gICAgICBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHtcbiAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgfVxuICAgICkpXG4gICAgOiBpc09iamVjdChkZXNjcmlwdGlvbnMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpLFxuICAgICAgICAoW25hbWUsIHZhbHVlXSkgPT5cbiAgICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBpc1N0cmluZyh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpPy5vcHRpb25zID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oXG4gICAgZ2V0VHlwZShzY2hlbWFPclR5cGUpXG4gICkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAvLyBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgJGZpbHRlcnMgcGFuZWxzLlxuICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgdGFiQ29tcG9uZW50XG4gICAgfVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYXMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscyA9IFtdKSB7XG4gIGlmIChzY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsU2NoZW1hKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbHMucHVzaChwYW5lbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWwgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBzY2hlbWFDb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbHMgPSBwYW5lbCA/IFtnZXRQYW5lbFNjaGVtYShwYW5lbCwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiAkZmlsdGVyKTpcbiAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYS5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscylcbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRpb25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIE5PVEU6IFdoaWxlIGBkYXRhUGF0aGAgcG9pbnRzIHRvIHRoZSBhY3R1YWwgYHZhbHVlYCwgYGRhdGFgIHJlcHJlc2VudHNcbiAgICAvLyB0aGUgYGl0ZW1gIGluIHdoaWNoIHRoZSBgdmFsdWVgIGlzIGNvbnRhaW5lZCwgdW5kZXIgdGhlIGtleSBgbmFtZWAuXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS5jb21wb25lbnQpXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdGhpcy5wYXJzZWRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmdldExpc3RlbmVycygpXG4gICAgICBjb25zdCB7IGV2ZW50cyA9IHt9IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGFsbCBwcm92aWRlcyBub24tcmVjb2duaXplZCBldmVudHMsXG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gfHw9ICgpID0+IHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICAgIC8vIEluc3RhbGwgLyByZW1vdmUgdGhlIGZpZWxkIGV2ZW50cyB0byB3YXRjaCBvZiBjaGFuZ2VzIGFuZCBoYW5kbGVcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmbGFncy4gYGV2ZW50c2AgaXMgcHJvdmlkZWQgYnkgYFZhbGlkYXRpb25NaXhpbi5ldmVudHMoKWBcbiAgICAgICAgdGhpc1thZGQgPyAnb24nIDogJ29mZiddKHRoaXMuZXZlbnRzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25JbnB1dCxcbiAgICAgICAgY2hhbmdlOiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgW2VsZW1lbnRdID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5mb2N1cygpXG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGBmb2N1cygpYCB3aWxsIGxpa2VseSBub3QgaGF2ZSB0aGVcbiAgICAgICAgICAvLyBkZXNpcmVkIGVmZmVjdC4gVXNlIGBzY3JvbGxJbnRvVmlldygpYCBpZiBhdmFpbGFibGU6XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIChlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNQcm9taXNlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG5jb25zdCBEaXRvQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudCxcblxuICAgIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBtaXhpbnMgPSBbXSkge1xuICAgICAgLy8gQSBoZWxwZXIgbWV0aG9kIHRvIGFsbG93IHRocmVlIHRoaW5nczpcbiAgICAgIC8vIC0gV2hlbiB1c2VkIGluIGEgY29tcHV0ZWQgcHJvcGVydHksIGl0IHJlbW92ZXMgdGhlIG5lZWQgdG8gaGF2ZSB0b1xuICAgICAgLy8gICBsb2FkIGNvbXBvbmVudHMgd2l0aCBhc3luYyBmdW5jdGlvbnMgYGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KC4uLilgLlxuICAgICAgLy8gICBpbnN0ZWFkLCB0aGV5IGNhbiBiZSBkaXJlY3RseSBwcm92aWRlZDogYGNvbXBvbmVudDogaW1wb3J0KC4uLilgXG4gICAgICAvLyAtIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byBzdWNoIGNvbXBvbmVudHMgZG9uJ3QgbmVlZCB0byBiZSBkZWZpbmVkLlxuICAgICAgLy8gICBJbnN0ZWFkLCB0aGUgcHJvdmlkZWQgbWl4aW5zIGFyZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZC5cbiAgICAgIC8vIC0gVGhlIGNvbXBvbmVudCBjYW4gdXNlIGFsbCBpbnRlcm5hbCBjb21wb25lbnRzIGtub3duIHRvIERpdG8uanMgQWRtaW4uXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEF0IGZpcnN0LCByZXNvbHZlIGNvbXBvbmVudCBpcyBpdCBpcyBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgbGV0IGNvbXAgPSBpc0Z1bmN0aW9uKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnQoKVxuICAgICAgICAgICAgOiBpc1Byb21pc2UoY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgOiBjb21wb25lbnRcbiAgICAgICAgICBjb21wID0gY29tcD8uZGVmYXVsdCB8fCBjb21wXG4gICAgICAgICAgY29tcC5taXhpbnMgPSBtaXhpbnNcbiAgICAgICAgICBjb21wLmNvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgcmV0dXJuIGNvbXBcbiAgICAgICAgfVxuICAgICAgICA6IGNvbXBvbmVudFxuICAgIH0sXG5cbiAgICByZXNvbHZlRGl0b0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluXSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZVR5cGVDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbiwgVHlwZU1peGluXSlcbiAgICB9XG4gIH1cbn0pXG5cbkRpdG9Db21wb25lbnQuY29tcG9uZW50ID0gZnVuY3Rpb24obmFtZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gdGhpcy5leHRlbmQob3B0aW9ucylcbiAgICBjb21wb25lbnRzW25hbWVdID0gY3RvclxuICAgIHJldHVybiBjdG9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV0gfHwgVnVlLmNvbXBvbmVudChuYW1lKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnRcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvZGVzdHJveWVkKClgIG9uIGl0c1xuICAgIC8vICRwYXJlbnQsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIHsgZXJyb3JzIH0pID0+XG4gICAgICAgICAgZXJyb3JzICYmIHJlc3VsdCA/IHJlc3VsdC5jb25jYXQoZXJyb3JzKSA6IGVycm9ycyxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMuJHJvdXRlLmN1cnJlbnRSb3V0ZSBiZSBvZiB1c2Ugc29tZXdoZXJlIGhlcmU/XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgcm91dGUtcmVjb3JkIHRvIHdoaWNoIHRoaXMgY29tcG9uZW50IHdhcyBtYXBwZWQgdG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTMzOCNpc3N1ZWNvbW1lbnQtMjk2MzgxNDU5XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiXG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4vLyBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoYW5kbGluZyBpbiBEaXRvRm9ybSwgd2hlcmUgYHYtc2hvd2AgaXNcbi8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50Llxucm91dGVyLXZpZXcoXG4gIHYtaWY9XCIhaXNMYXN0Um91dGVcIlxuICA6a2V5PVwibmFtZVwiXG4pXG4uZGl0by12aWV3LmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7IHNvbWVTY2hlbWFDb21wb25lbnQsIGlzU2luZ2xlQ29tcG9uZW50VmlldyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by12aWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZpZXc6IHRydWUsXG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICBuYW1lOiBzY2hlbWEubmFtZSxcbiAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIHRoaXMudmlld1NjaGVtYSxcbiAgICAgICAgY29tcG9uZW50ID0+IGhhc1Jlc291cmNlKGNvbXBvbmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGF0ZShkYXRlLFxuICB7XG4gICAgeWVhciA9IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aCA9IGRhdGU/LmdldE1vbnRoKCkgPz8gMCxcbiAgICBkYXkgPSBkYXRlPy5nZXREYXRlKCkgPz8gMCxcbiAgICBob3VyID0gZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZSA9IGRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICAgIHNlY29uZCA9IGRhdGU/LmdldFNlY29uZHMoKSA/PyAwLFxuICAgIG1pbGxpc2Vjb25kID0gZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9ID0ge31cbikge1xuICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERhdGUoZGF0ZSkge1xuICByZXR1cm4gaXNEYXRlKGRhdGUpID8gZGF0ZSA6IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGxcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0LCBldmVudHMpIHtcbiAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudC5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gIH1cbiAgaWYgKGR1cmF0aW9uIDw9IDApIHtcbiAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHRvXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRvIC0gZWxlbWVudC5zY3JvbGxUb3BcbiAgICBjb25zdCBwZXJUaWNrID0gZGlmZmVyZW5jZSAvIGR1cmF0aW9uICogMTBcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCArIHBlclRpY2tcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PT0gdG8pIHJldHVyblxuICAgICAgc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uIC0gMTApXG4gICAgfSlcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihmaWVsZCwgc3RhcnQsIGVuZCkge1xuICBpZiAoZmllbGQuY3JlYXRlVGV4dFJhbmdlKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBmaWVsZC5jcmVhdGVUZXh0UmFuZ2UoKVxuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydClcbiAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpXG4gICAgcmFuZ2Uuc2VsZWN0KClcbiAgICBmaWVsZC5mb2N1cygpXG4gIH0gZWxzZSBpZiAoZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBmaWVsZC5mb2N1cygpXG4gICAgZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGZpZWxkKSB7XG4gICAgZmllbGQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydFxuICAgIGZpZWxkLnNlbGVjdGlvbkVuZCA9IGVuZFxuICAgIGZpZWxkLmZvY3VzKClcbiAgfVxufVxuIiwiXG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKGRhdGUuZGF0ZSwgZGF0ZS5zdGF0ZSwgdHJ1ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheShcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSwgeyB5ZWFyOiAxLCBtb250aDogMSwgZGF5OiAxIH0pXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY2FsZW5kYXJcbiAgICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuXG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuXG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY2FsZW5kYXJcbiAgICBtaW4td2lkdGg6IDI0MHB4XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgIHotaW5kZXg6IDEwMDBcblxuICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgcGFkZGluZzogMCAwLjVlbVxuICAgIHNwYW5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpXG4gICAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHRcbiAgICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLXRvZGF5XG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZVxuICAgICAgJixcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBjb2xvcjogd2hpdGVcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCxcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWdyYXlcbiAgICAgIGNvbG9yOiAjOTk5XG5cbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgIHNwYW5cbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KVxuICAgICAgbWFyZ2luOiAwLjVlbSAwXG5cbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhblxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA1KVxuXG4gIC5kaXRvLWNhbGVuZGFyIGEsXG4gIC5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuLFxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGN1cnNvcjogcG9pbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlciBzcGFuXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgYVxuICAgICAgcGFkZGluZzogMCAwLjJlbVxuXG4gIC5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuOmhvdmVyLFxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuOmhvdmVyLFxuICAuZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnRcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG5cbiAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXMgc3BhblxuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyLFxuICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICBAZXh0ZW5kICVpbnB1dC1oZWlnaHRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXJcblxuICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICBib3JkZXItdG9wOiAkYm9yZGVyLXN0eWxlXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgZGlzcGxheTogZmxleFxuICAgID4gc3BhblxuICAgICAgbWFyZ2luOiBhdXRvXG4gICAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgYVxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgICY6aG92ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmVcblxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXYsXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHdpZHRoOiA1JVxuICAgIG1pbi13aWR0aDogMmVtXG4gICAgbWF4LXdpZHRoOiAzZW1cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgZm9udC1zaXplOiAxLjI1ZW1cbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2XG4gICAgJjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICfigLknXG4gICAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICfCqydcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgJjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICfigLonXG4gICAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICfCuydcblxuICAuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXlcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ05vdydcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjb3B5RGF0ZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgbW9kZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkYXknIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgd2Vla2RheU5hbWVzLCBtb250aE5hbWVzIH0gPSBnZXRMb2NhbGVOYW1lcyh0aGlzLmxvY2FsZSlcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lcyxcbiAgICAgIGRhdGVSYW5nZTogW10sXG4gICAgICB5ZWFyUmFuZ2U6IFtdLFxuICAgICAgY3VycmVudFZhbHVlOlxuICAgICAgICB0aGlzLnZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgY3VycmVudFZhbHVlOiAndXBkYXRlRGF0ZVJhbmdlJyxcbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsIHx8IG5ldyBEYXRlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMudmFsdWUgJiYgbW9udGggPT09IHRoaXMudmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMudmFsdWUgJiYgeWVhciA9PT0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOlxuICAgICAgICAgIHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlLCBzdGF0ZSwgY29weSA9IGZhbHNlKSB7XG4gICAgICBpZiAoc3RhdGUgIT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAvLyBTZXQgZGF5IHRvIDEgdG8gYXZvaWQgc2VsZWN0aW5nIGEgZGF0ZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAvLyBuZXcgbW9udGgsIGUuZy4gRmViIDMxIC0+IE1hciAzLlxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGgsIGRheTogMSB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9KVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhkYXRlLCB7IHllYXIsIG1vbnRoLCBkYXkgfSkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgaG9yLCB2ZXIsIGVudGVyIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudE1vZGUsIGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKGhvciB8fCB2ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBob3IgKyB2ZXIgKiA3XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIGhvciArIHZlciAqIDZcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIGhvciArIHZlciAqIDVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA+IDEpIHtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggLSAxKVxuICAgICAgICBjb25zdCBwcmV2TW9udGhOdW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoTnVtRGF5cyAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiBkYXRlICYmXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGkgJiZcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy52YWx1ZSkgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkodG9kYXkpID8gJ3RvZGF5J1xuICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpID8gJ2N1cnJlbnQnXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgdHJhbnNpdGlvbig6bmFtZT1cInRyYW5zaXRpb25cIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgICAgKVxuICAgICAgICBzbG90KFxuICAgICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIClcbiAgICAgIC5kaXRvLXBvcHVwKFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcbiAgQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zL2luZGV4LnNhc3MnXG5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAuZGl0by10cmlnZ2VyLWRpc2FibGVkXG4gICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICpcbiAgICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuXG4gIC5kaXRvLXBvcHVwXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgdG9wOiAwXG4gICAgbGVmdDogMFxuICAgIHotaW5kZXg6IDEwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnRcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIG5ld1ZhbClcbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSBhZGRFdmVudHModGFyZ2V0LCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBudWxsXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKHRoaXMudGFyZ2V0KVxuICAgICAgICA/IHRoaXMuJHJlZnNbdGhpcy50YXJnZXRdXG4gICAgICAgIDogdGhpcy50YXJnZXRcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICAgIGNvbnN0IGVsID0gdGFyZ2V0ID09PSBwb3B1cCA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdENoaWxkXG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9ICh0YXJnZXQgfHwgdHJpZ2dlcikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcblxuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlLXBvc2l0aW9uJywge1xuICAgICAgICB0cmlnZ2VyLFxuICAgICAgICBwb3B1cCxcbiAgICAgICAgcGxhY2VtZW50OiB0aGlzLnBvcHVwUGxhY2VtZW50XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuc2hvd1BvcHVwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1pbnB1dFxuICBpbnB1dChcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWlucHV0XG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWlucHV0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBpbnB1dFxuICAgICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgICBhbGw6IGluaGVyaXRcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIGJvcmRlcjogMFxuICAgICAgbWFyZ2luOiAwXG4gICAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICB2YWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICAgIC8qXG4gICAgY2xlYXJhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgICBzdWZmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHByZWZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgICAqL1xuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgICRhdHRyc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlLFxuICAgICAgICAuLi4kYXR0cnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgLy8gUmVtb3ZlICdpbnB1dCcgbGlzdGVuZXIgYmVjYXVzZSB3ZSdyZSBoYW5kbGluZyBpdCBzZXBhcmF0ZWx5IGJlbG93LFxuICAgICAgLy8gYnV0IHBhc3Mgb24gYWxsIG90aGVycyB0byB0aGUgd3JhcHBlZCBuYXRpdmUgZWxlbWVudDpcbiAgICAgIGNvbnN0IHsgaW5wdXQsIC4uLmxpc3RlbmVycyB9ID0gdGhpcy4kbGlzdGVuZXJzXG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gdmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMFxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IG9sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUobmV3VmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICBpbnB1dC1maWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICByZWFkb25seVxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICApXG4gIC8vIGljb24odHlwZT1cImNhbGVuZGFyXCIgOmNvbG9yPVwiaWNvbkNvbG9yXCIpXG4gIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgOnZhbHVlPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICApXG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgICBjYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIEBpbnB1dD1cInNlbGVjdERhdGVcIlxuICAgICAgOnZhbHVlPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1kYXRlLXBpY2tlclxuICAgIG1pbi13aWR0aDogMTBlbVxuICAgIC5kaXRvLWlucHV0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIHdpZHRoOiAxMDAlXG4gIC5kaXRvLWRhdGUtcGlja2VyLXBvcHVwXG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICBkYXRlOiB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICB9KSB8fCAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdChuZXdWYWwgPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuJG9uKCdibHVyJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZWxlY3REYXRlKGRhdGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLiRyZWZzLmNhbGVuZGFyPy5uYXZpZ2F0ZShnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gIC8vICAgOmNvbG9yPVwiZGlzYWJsZWQgPyAnI2JmYmZiZicgOiAodGV4dCA/ICcjNjY2JyA6ICcjYmZiZmJmJylcIlxuICAvLyApXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gIClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKFxuICAgICAgICByZWY9XCJob3VyXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICByZWY9XCJtaW51dGVcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQoXG4gICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4gIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIC8vIGljb24odHlwZT1cInRpbWVcIlxuICAgIC8vICAgOmNvbG9yPVwiZGlzYWJsZWQgPyAnI2JmYmZiZicgOiAodGV4dCA/ICcjNjY2JyA6ICcjYmZiZmJmJylcIlxuICAgIC8vIClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cChcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgKVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKFxuICAgICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAwXCJcbiAgICAgICAgKVxuICAgICAgICAgIGxpKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShcbiAgICAgICAgICByZWY9XCJtaW51dGVcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgICAgKVxuICAgICAgICAgIGxpKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgICAgKVxuICAgICAgICAgIGxpKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIHdpZHRoOiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBtYXgtd2lkdGg6IDE2MHB4XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG5cbiAgJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4XG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC5kaXRvLWljb24tdGltZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiA3cHhcbiAgICAgICAgaGVpZ2h0OiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgIG92ZXJmbG93OiBoaWRkZW5cblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgIGZsb2F0OiBsZWZ0XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXdpZHRoOiAwIDFweCAwXG4gICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpXG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICY6bGFzdC1jaGlsZFxuICAgICAgYm9yZGVyLXJpZ2h0OiAwXG4gICAgdWxcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlblxuICAgICAgb3ZlcmZsb3cteTogYXV0b1xuICAgICAgbGlzdC1zdHlsZTogbm9uZVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1hcmdpbjogMFxuICAgICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgcGFkZGluZzogMCAxN3B4IDAgMFxuICAgICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAmID4gbGlcbiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgICAmLnNlbGVjdGVkLFxuICAgICAgICAmLnNlbGVjdGVkOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmLmRpc2FibGVkXG4gICAgICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgICAgICAmLmRpc2FibGVkOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7XG4gIGNvcHlEYXRlLCBzY3JvbGxUbywgc2V0U2VsZWN0aW9uLCBnZXRLZXlOYXZpZ2F0aW9uXG59IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGlvbjogMCxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZVxuICAgICAgICA/IGAke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpfToke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLm1pbnV0ZSl9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuc2Vjb25kKX1gXG4gICAgICAgIDogJydcbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZGF0ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzZWxlY3Rpb246ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnREYXRlLCB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZVNlbGVjdGlvbihmb3JjZSA9IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5zaG93UG9wdXAgfHwgZm9yY2UpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAzICogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuJHJlZnMuaW5wdXQsIHN0YXJ0LCBzdGFydCArIDIpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoZHVyYXRpb24gPSAxMDApIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgLy8gRmlyc3QgYW5kIGFsc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW5cbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdGFyZ2V0LnNjcm9sbEhlaWdodCAvICh0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoICsgNilcbiAgICAgICAgICBzY3JvbGxUbyh0YXJnZXQsIE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KSwgZHVyYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IFsnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJ11bdGhpcy5zZWxlY3Rpb25dXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgeyBob3IsIHZlciwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICAgIGlmIChob3IpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0aW9uICsgaG9yXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gMlxuICAgICAgICAgICAgOiB2YWx1ZSA+IDIgPyAwXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH0gZWxzZSBpZiAodmVyKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW3NlbGVjdGVkXSArIHZlclxuICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0aGlzLiRyZWZzW3NlbGVjdGVkXS5jaGlsZHJlblxuICAgICAgICAgIHRoaXNbc2VsZWN0ZWRdID1cbiAgICAgICAgICAgIHZhbHVlIDwgMCA/IHZhbHVlICsgbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aCA/IHZhbHVlIC0gbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihcbiAgcmVmPVwicGlja2VyXCJcbilcbiAgLmRpdG8tcGlja2VycyhcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgKVxuICAgIGRhdGUtcGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgdGltZS1waWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICAgIHJlZj1cInBpY2tlclwiXG4gIClcbiAgICAuZGl0by1waWNrZXJzKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgKVxuICAgICAgZGF0ZS1waWNrZXIoXG4gICAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJkYXRlRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbiAgICAgIHRpbWUtcGlja2VyKFxuICAgICAgICByZWY9XCJ0aW1lXCJcbiAgICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICAgIDpzaG93LnN5bmM9XCJzaG93VGltZVwiXG4gICAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJcbiAgICAuZGl0by1waWNrZXJzXG4gICAgICBAZXh0ZW5kICVpbnB1dFxuICAgICAgcGFkZGluZzogMFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAuZGl0by1kYXRlLXBpY2tlclxuICAgICAgd2lkdGg6IDYwJVxuICAgICAgbWluLXdpZHRoOiA2LjllbVxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgcGFkZGluZy1yaWdodDogMFxuICAgIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgICB3aWR0aDogNDAlXG4gICAgICBtaW4td2lkdGg6IDUuNGVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDBcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlRm9jdXNlZCB8fCB0aGlzLnRpbWVGb2N1c2VkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5ibHVyKClcbiAgICAgIHRoaXMuJHJlZnMudGltZS5ibHVyKClcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbiAgLy8gYHNyYy9zdHlsZXMvbWl4aW5zL19pY29ucy5zYXNzYCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBzYXNzXG4gIC8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG4gIEBlYWNoICRuYW1lIGluICRpY29uc1xuICAgIC5kaXRvLWljb24tI3skbmFtZX1cbiAgICAgIEBleHRlbmQgJWljb24tI3skbmFtZX1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgfCAgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhZ2luYXRpb25cbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgICAgdi1pZj1cInNob3dUb3RhbFwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgICB8ICAvIHt7IHRvdGFsIH19XG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICApXG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICAgICkge3sgcGFnZS50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhZ2luYXRpb25cbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbFxuICAgICAgK2VsbGlwc2lzXG4gICAgICBtYXJnaW46IDAgMC41ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2UsIGNvbG9yIDBzLCBiYWNrZ3JvdW5kIDBzLCBib3JkZXIgMHNcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICAgICYtcHJldixcbiAgICAgICYtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93XG4gICAgICAmLXByZXY6OmJlZm9yZVxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSlcbiAgICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAgICYtZWxsaXBzaXMtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzXG4gICAgICAgICY6aG92ZXI6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnNcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICAgICY6Zm9jdXNcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmOmFjdGl2ZVxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmVcbiAgICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICB0aGlzLiRlbWl0KCdzaXplLWNoYW5nZScsIHRoaXMucGFnZSwgY3VycmVudFBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0b3RhbCAvIGN1cnJlbnRQYWdlU2l6ZSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgIHNwYW4uZGl0by1zd2l0Y2gtbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgc2xvdChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zd2l0Y2goXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBpbnB1dChcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zd2l0Y2hcbiAgICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuIGByZW1gIGlzIG5lZWRlZCBiZWNhdXNlIHdlXG4gICAgLy8gY2hhbmdlIGBmb250LXNpemVgIGluc2lkZSBgLmRpdG8tc3dpdGNoLWJ1dHRvbmBcbiAgICAtLXN3aXRjaC13aWR0aDogNHJlbVxuICAgIC0tc3dpdGNoLWhlaWdodDogMnJlbVxuICAgIC0tc3dpdGNoLW1hcmdpbjogMnB4XG4gICAgLS1zd2l0Y2gtcGFkZGluZzogM3B4XG4gICAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zXG4gICAgLS1sYWJlbC1tYXJnaW46IDAuNWVtXG5cbiAgICAtLXdpZHRoOiBjYWxjKHZhcigtLXN3aXRjaC13aWR0aCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpXG4gICAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpXG4gICAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSlcblxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodClcbiAgICAvLyBUbyBtYWtlIGlubGluZSBsYWJlbHMgYXBwZWFyIG9uIGNvbnNpc3RlbnQgYmFzZWxpbmU6XG4gICAgdmVydGljYWwtYWxpZ246IC0yNSVcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICB3aWR0aDogdmFyKC0td2lkdGgpXG4gICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodClcbiAgICAuZGl0by1zd2l0Y2gtcGFuZSxcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHRvcDogNTAlXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSlcbiAgICBpbnB1dFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICBhcHBlYXJhbmNlOiBub25lXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodFxuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIC4zcywgYmFja2dyb3VuZC1jb2xvciAuM3NcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIC8vIFNldCBmb250LXNpemUgdG8gaGVpZ2h0LCBzbyB3ZSBjYW4gdXNlIHdpZHRoL2hlaWdodCA9IDFlbSBmb3IgY2lyY2xlOlxuICAgICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKVxuICAgICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZylcbiAgICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgd2lkdGg6IDFlbVxuICAgICAgaGVpZ2h0OiAxZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6IDAuNWVtXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1zd2l0Y2gtc3BlZWQpXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2VcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAmLmRpdG8tY2hlY2tlZFxuICAgICAgaW5wdXRcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSlcbiAgICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pXG4gICAgICAgIHJpZ2h0OiB1bnNldFxuICAgICYuZGl0by1kaXNhYmxlZFxuICAgICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkXG4gICAgJjpmb2N1cy13aXRoaW46bm90KDpob3ZlcilcbiAgICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLnZhbHVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHsgY2hlY2tlZCwgZGlzYWJsZWQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNoZWNrZWQnOiBjaGVja2VkLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgJGF0dHJzIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBpZCwgbmFtZSwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUodmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlXG4gICAgfSxcblxuICAgIGNoZWNrZWQoY2hlY2tlZCkge1xuICAgICAgaWYgKGNoZWNrZWQgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAkZHVyYXRpb246IDAuMTVzXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlLFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgLmhlaWdodC1lbnRlci1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1sZWF2ZSAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWVudGVyLFxuICAuaGVpZ2h0LWxlYXZlLXRvXG4gICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuXG4gIHByb3BzOiB7XG4gICAgZW5hYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICByZW5kZXI6IChjcmVhdGVFbGVtZW50LCBjb250ZXh0KSA9PiBjcmVhdGVFbGVtZW50KFxuICAgICd0cmFuc2l0aW9uJyxcbiAgICBjb250ZXh0LnByb3BzLmVuYWJsZWRcbiAgICAgID8ge1xuICAgICAgICBwcm9wczogeyBuYW1lOiAnaGVpZ2h0JyB9LFxuICAgICAgICBvbjogZXZlbnRzXG4gICAgICB9XG4gICAgICA6IHt9LFxuICAgIGNvbnRleHQuY2hpbGRyZW5cbiAgKVxufVxuXG5jb25zdCBzZXRTdHlsZSA9IChlbGVtZW50LCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSlcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBldmVudHMgPSB7XG4gIGFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZXBvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6ICdhdXRvJyB9KSlcbiAgfSxcblxuICBlbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIGxlYXZlKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pXG4gICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJ1xuXG4gIC5kaXRvLXJvb3RcbiAgICBoZWlnaHQ6IDEwMCVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1yb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IHtcbiAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICB9W3R5cGVdIHx8ICdOb3RpZmljYXRpb24nXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IHtcbiAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICB9W3R5cGVdIHx8ICdlcnJvcidcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cykpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICAgIHVsLmRpdG8tc2Nyb2xsXG4gICAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLW1lbnVcbiAgICBmbGV4OiBpbml0aWFsXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdWxcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGVcbiAgICBhLFxuICAgIGgxXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgIGgxXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3RcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1saW5rXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gIC5kaXRvLWxpbmtcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1tZW51Jywge30pXG48L3NjcmlwdD5cbiIsIlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4iLCI8dGVtcGxhdGU+XG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIFxuICBuYW1lOiAnUHVsc2VMb2FkZXInLFxuXG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7IFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuICBkYXRhICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICBcdGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgIFx0d2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICBcdG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICBcdGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi8qLnYtc3Bpbm5lclxue1xuICAgIG1hcmdpbjogMTAwcHggYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4qL1xuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiXG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gIHNsb3RcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIC5kaXRvLXRyYWlsXG4gICAgICB1bFxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgICBzbG90XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWhlYWRlclxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ibGFja1xuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHNwYW5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXRyYWlsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBoZWlnaHQ6IDNlbVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nXG4gICAgICB1bFxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjRlbVxuICAgICAgICAkYW5nbGU6IDMzZGVnXG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBjb2xvcjogIzk5OVxuICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgICAgY29udGVudDogJydcbiAgICAgICAgICB3aWR0aDogMXB4XG4gICAgICAgICAgaGVpZ2h0OiAxLjJlbVxuICAgICAgICAgIHJpZ2h0OiAtMXB4XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgdG9wOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgYm90dG9tOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbVxuICAgIC5kaXRvLXNwaW5uZXJcbiAgICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyXG4gICAgLmRpdG8tZGlydHlcbiAgICAgICY6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogOHB4XG4gICAgICAgIGhlaWdodDogOHB4XG4gICAgICAgIG1hcmdpbjogMnB4XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbVxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlXG4gICAgLmRpdG8tYWNjb3VudCxcbiAgICAuZGl0by1sb2dpblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IDBcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLWFjY291bnRcbiAgICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bHNlTG9hZGVyIGZyb20gJ3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUnXG5cbmNvbnN0IFNwaW5uZXIgPSBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnc3Bpbm5lcicsIFB1bHNlTG9hZGVyKVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8taGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IFNwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICBjb25zdCB7IHByb3BzIH0gPSBTcGlubmVyLm9wdGlvbnNcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93bihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICApXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBhKFxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApXG4gICAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1hY2NvdW50XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCIpXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLnYtLW1vZGFsLW92ZXJsYXlcbiAgICB6LWluZGV4OiAyMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpbmRvd0V2ZW50czogbnVsbCxcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5uYW1lXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5tYXAoXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgICAgKFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjYW5jZWwnICYmICFzY2hlbWEuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2FuY2VsICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGlkZSgpIHtcbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZShudWxsKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIHYtaWY9XCJjb250ZW50XCJcbiAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb250ZW50XCJcbiAgICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICAgIDpjbGFzcz1cImNsYXNzZXNcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICkge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgKVxuICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gIClcbiAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQuZGl0by1sYWJlbChcbiAgICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gICAgOmlzPVwidGFnXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICApXG4gICAgLmRpdG8tY2hldnJvbihcbiAgICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gICAgKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgfHw9ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGVpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2NoZW1hXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIGRpc3BsYXkgc2NoZW1hIG5leHQgdG8gcGFuZWxzOlxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBtaW4taGVpZ2h0OiAxMDAlXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgZmxleDogMSAxIDEwMCVcbiAgICAgIC8vIFNvIHRoYXQgc2NoZW1hIGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgPiAqOm9ubHktY2hpbGRcbiAgICAgICAgZ3JpZC1yb3ctZW5kOiBub25lXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nXG4gICAgPiAuZGl0by1idXR0b25zLFxuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBmbGV4OiAxIDEgMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nIDBcbiAgICAvLyBEaXNwbGF5IGEgcnVsZXIgYmV0d2VlbiB0YWJiZWQgY29tcG9uZW50cyBhbmQgdG93YXJkcyB0aGUgLmRpdG8tYnV0dG9uc1xuICAgIC5kaXRvLXBhbmUtdGFiICsgLmRpdG8tcGFuZS1tYWluXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgLy8gVXNlIGEgcHNldWRvIGVsZW1lbnQgdG8gZGlzcGxheSBhIHJ1bGVyIHdpdGggcHJvcGVyIG1hcmdpbnNcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluIHRvIHRoZSBydWxlclxuICAgICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZlxuICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgZGlzcGxheTogZmxleFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgJjpvbmx5LWNoaWxkXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgICAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW5cbiAgICAmLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyXG4gICAgICAvLyBCcmluZyB0aGUgdGFicyB1cCB0byB0aGUgbWVudS5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgaGVpZ2h0OiAkbWVudS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3JcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgICAvLyBsYXllcmVkIG9uIHRvcCBvZiBEaXRvVHJhaWwuXG4gICAgICAuZGl0by10YWJzLFxuICAgICAgLmRpdG8tYnV0dG9uc1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0b1xuICAgICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBidXR0b24uZGl0by1sYWJlbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIENhdGNoIGFsbCBjbGlja3MsIGV2ZW4gd2hlbiBpdCB3b3VsZCBiZSBwYXJ0aWFsbHkgY292ZXJlZCBieSBzY2hlbWEuXG4gICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsIGdldFBhbmVsU2NoZW1hcywgc2V0RGVmYXVsdHMsIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYScsIHtcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1lbnVIZWFkZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICBjb25zdCBwYW5lbHMgPSBnZXRQYW5lbFNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKC4uLnBhbmUucGFuZWxTY2hlbWFzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICBjb25zdCB0YWIgPSBjdXJyZW50VGFiICYmIHRoaXMuc2hvdWxkUmVuZGVyKHRoaXMudGFic1tjdXJyZW50VGFiXSlcbiAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgIDogdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICAgIGlmICh0YWIgIT09IGN1cnJlbnRUYWIpIHtcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICA/IGRlZmF1bHRUYWIuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgIC4uLnRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pbmxpbmVkICYmICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoXG4gICAgICAgIHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbkV4cGFuZChleHBhbmQpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdleHBhbmQnLCB7XG4gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IGV4cG9zZSB0aGlzIG9uIERpdG9Db250ZXh0P1xuICAgICAgICBjb250ZXh0OiB7IGV4cGFuZCB9XG4gICAgICB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgZXhwYW5kIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IGV4cGFuZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhblxuICAgICAgLy8gc2V0IGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0cygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCBuYW1lLCBkYXRhW25hbWVdKVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLCB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy4kc2V0KHJlZ2lzdHJ5LCB1aWQsIGVudHJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZGVsZXRlKHJlZ2lzdHJ5LCB1aWQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW11cbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuKVxuICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgICA6aW5saW5lZD1cInRydWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgKVxuICAgIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAgIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICAgIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYW5lXG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIGZsZXgtZmxvdzogcm93IHdyYXBcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lXG4gICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWA6XG4gICAgbWFyZ2luOiAoLSRmb3JtLXNwYWNpbmcpICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRmb3JtLXNwYWNpbmctaGFsZlxuICAgIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgICBmbGV4OiAwJVxuXG4gICAgJi5kaXRvLXBhbmUtbWFpblxuICAgICAgZmxleDogMTAwJVxuXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcjpub3QoLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyKSArICZcbiAgICAgIC8vIENsZWFyIHRvcC1tYXJnaW4gaWYgdGhlIGNvbXBvbmVudHMgYXJlIHByZWNlZGVkIGJ5IGEgc2NoZW1hIGhlYWRlci5cbiAgICAgIG1hcmdpbi10b3A6IDBcblxuICAgIC5kaXRvLWNvbnRhaW5lci5kaXRvLW9taXQtcGFkZGluZyA+ICZcbiAgICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgICAgbWFyZ2luOiAwXG4gICAgICBtYXgtd2lkdGg6IHVuc2V0XG5cbiAgICAuZGl0by1icmVha1xuICAgICAgZmxleDogMTAwJVxuICAgICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldEFsbFBhbmVsU2NoZW1hcywgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2aXNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6IG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICA6IHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgIHN0b3JlOiBuZXN0ZWQgPyB0aGlzLmdldENoaWxkU3RvcmUobmFtZSkgOiB0aGlzLnN0b3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIC8vIEdhdGhlciBhbGwgcGFuZWwgc2NoZW1hcyBmcm9tIGFsbCBjb21wb25lbnQgc2NoZW1hcywgYnkgZmluZGluZyB0aG9zZVxuICAgICAgLy8gdGhhdCB3YW50IHRvIHByb3ZpZGUgYSBwYW5lbC4gU2VlIGBnZXRBbGxQYW5lbFNjaGVtYXMoKWAgZm9yIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTY2hlbWFzLmZsYXRNYXAoXG4gICAgICAgICh7IHNjaGVtYSwgbmVzdGVkRGF0YVBhdGg6IGRhdGFQYXRoIH0pID0+IGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiB0aGlzLnRhYiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4pXG4gIGRpdG8tbGFiZWwoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIGRpdG8tZXJyb3JzKFxuICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gICAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICAgIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbiAgKVxuICAgIGRpdG8tbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgKVxuICAgIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgICApXG4gICAgZGl0by1lcnJvcnMoXG4gICAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAkdGFiLWNvbG9yLWJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWluYWN0aXZlOiAkY29sb3ItbGlnaHRcbiAgJHRhYi1jb2xvci1hY3RpdmU6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWhvdmVyOiAkY29sb3Itd2hpdGVcblxuICAuZGl0by10YWJzXG4gICAgLy8gU2VlOiBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgIGFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaW5hY3RpdmVcbiAgICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvclxuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaG92ZXJcbiAgICAgICY6YWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYWN0aXZlXG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYmFja2dyb3VuZFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJzJywge1xuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2VsZWN0ZWRUYWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbiAgY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gICAgOmlzPVwicGFuZWxUYWdcIlxuICAgIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFuZWxcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nXG4gICAgLmRpdG8tcGFuZWwtdGl0bGVcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgLmRpdG8tcGFuZWwtc2NoZW1hXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcDogMFxuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZ1xuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICAgLmRpdG8tb2JqZWN0XG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgbGFiZWxcbiAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAuZGl0by1wYW5lXG4gICAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAgIC5kaXRvLWNvbnRhaW5lclxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGZcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBEaXRvQ29tcG9uZW50LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICBkaXRvLXBhbmVsKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lbHMoXG4gICAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIGRpdG8tcGFuZWwoXG4gICAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YVxuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBxdWVyeSB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IGlzU3RyaW5nKGRhdGE/LnR5cGUpXG4gICAgICAgICAgICA/IGxhYmVsaXplKGRhdGEudHlwZSlcbiAgICAgICAgICAgIDogJ0Vycm9yJ1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBkYXRhPy5tZXNzYWdlID8/IGVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiAnZXJyb3InLCB0aXRsZSwgdGV4dCB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIC8vIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLyBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIC8vIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLyBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIClcbiAgICBkaXRvLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgbWVyZ2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMsIGlzT2JqZWN0U291cmNlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZSByaWdodFxuICAgICAgICAvLyB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICB0aGlzLmRhdGEgfHwgeyB0eXBlOiB0aGlzLnR5cGUgfSxcbiAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICApIHx8IHt9IC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5kb2VzTXV0YXRlICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmRvZXNNdXRhdGUgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgYXBwbGljYXRpb24gdXBvbiBzdWJtaXQuXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGZvcm0gdG8gY3JlYXRlLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucXVlcnkudHlwZVxuICAgIH0sXG5cbiAgICBpdGVtSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6ICh0aGlzLnBhcmFtID8/IG51bGwpXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucGFyZW50Um91dGVDb21wb25lbnRcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5kb2VzTXV0YXRlKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICB0aGlzLmNsb25lZERhdGEgPSBkYXRhID0gY2xvbmUoZGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICF0aGlzLmlzQ3JlYXRpbmcgJiZcbiAgICAgICAgICBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBvZiBhbiBvYmplY3Qgc291cmNlIGlzIG51bGwsIHJlZGlyZWN0IHRvIGl0cyBjcmVhdGUgcm91dGUuXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiAnY3JlYXRlJywgYXBwZW5kOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgodGhpcy5wYXRoXG4gICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAuc2xpY2UoKHJvdXRlLmlzVmlldyA/IDAgOiByb3V0ZS5wYXRoLmxlbmd0aCkgKyAxKSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZXJyb3JzXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgei1pbmRleDogMVxuICAgIHVsXG4gICAgICBtYXJnaW4tdG9wOiAxcHhcbiAgICAgIGNvbG9yOiAkY29sb3ItZXJyb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2NvcGVzXG4gIHJvdXRlci1saW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgcm91dGVyLWxpbmsoXG4gICAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY29wZXNcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLWJ1dHRvblxuICAgICAgK2VsbGlwc2lzXG4gICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICAgIG1pbi13aWR0aDogM2VtXG4gICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctbGVmdDogMWVtXG4gICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbVxuICAgICAgJiArIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgICAgLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgICAmOmZvY3VzXG4gICAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnBhZ2luYXRpb24oXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuICA6cGFnZS5zeW5jPVwicGFnZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwYWdpbmF0aW9uKFxuICAgIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgICA6dG90YWw9XCJ0b3RhbFwiXG4gICAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdHJlZS1pdGVtXG4gICAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9XG4gICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICAgID4gLmRpdG8tdHJlZS1sZWFmXG4gICAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSlcbiAgICAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgIC5kaXRvLXRyZWUtbGVhZlxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgZmxleDogYXV0b1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBtYXJnaW46IDFweCAwXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by10cmVlLWxhYmVsLFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW1cbiAgICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgLjIpXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAxZW1cbiAgICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyXG4gICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZVxuICAgIC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgICAmLmRpdG8tZHJhZ2dpbmdcbiAgICAgIC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuICAgICYuZGl0by1hY3RpdmVcbiAgICAgID4gLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgID4gLmRpdG8tdHJlZS1icmFuY2hcbiAgICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZVxuICAgICAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWxcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tcHJvcGVydGllc1xuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnRcbiAgICAgID4gdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBjb250ZW50OiAnOiAnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRyZWUtaXRlbScsIHtcbiAgY29tcG9uZW50czogeyBWdWVEcmFnZ2FibGUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBvcGVuID0gY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG51bUNoaWxkcmVuICYmIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgIH1gXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRoKFxuICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgKVxuICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICBzcGFuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICB0clxuICAgICAgdGgoXG4gICAgICAgIHYtZm9yPVwiKGNvbHVtbiwgaW5kZXgpIGluIGNvbHVtbnNcIlxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10YWJsZS1oZWFkXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdHJcbiAgICAgIHRoXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgICBzcGFuXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgICAmOmVtcHR5OjphZnRlclxuICAgICAgICAgICAgLy8gUHJldmVudCBlbXB0eSA8dGg+IGZyb20gY29sbGFwc2luZ1xuICAgICAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICA+IHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBibG9ja1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtaGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgPyAnZGVzYydcbiAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGQoXG4gICAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gICAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4gIClcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1jZWxsJywge1xuICBwcm9wczoge1xuICAgIGNlbGw6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuY2VsbC5jb21wb25lbnQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBBIGNvbXBvbmVudCB0byBzaW1wbHkgcGFzcyB0aHJvdWdoIGFuIGV4aXN0aW5nIHZ1ZSB2bm9kZS5cbi8vIFNlZTogaHR0cHM6Ly9mb3J1bS52dWVqcy5vcmcvdC8yODE2Mi80XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by12bm9kZScsIHtcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiAoaCwgY29udGV4dCkgPT4gY29udGV4dC5wcm9wcy5ub2RlXG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBUeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGUgY29tcG9uZW50c1xuLy8gaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYFR5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgdGhlIGB0eXBlOiAnY29tcG9uZW50J2AgdHlwZXMuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IFR5cGVDb21wb25lbnQgPSBEaXRvQ29tcG9uZW50LmV4dGVuZCh7XG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRQYWRkaW5nOiBmYWxzZVxufSlcblxuVHlwZUNvbXBvbmVudC5yZWdpc3RlciA9IGZ1bmN0aW9uKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChgZGl0by10eXBlLSR7dHlwZXNbMF19YCwgZGVmaW5pdGlvbilcbiAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cblR5cGVDb21wb25lbnQuZ2V0ID0gZ2V0VHlwZUNvbXBvbmVudFxuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50XG4iLCJcbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGV4dFwiXG4gIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbikge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDp0aXRsZT1cInRleHRcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdidXR0b24nLCAnc3VibWl0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyB3b3JrIG5pY2VseTpcbiAgLy8gb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYigpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV0gfHwgdGhpcy5uYW1lXG4gICAgfSxcblxuICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgIGlmIChcbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LmRpdG8tY2hlY2tib3goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJjaGVja2JveFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNoZWNrYm94ZXNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAob3B0aW9uIHx8IFtdKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jb2RlKFxuICByZWY9XCJjb2RlXCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb2RlKFxuICAgIHJlZj1cImNvZGVcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3R5bGU9XCJzdHlsZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY29kZVxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gRm9yIHByb3BwZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gICAgLy8gZm9yIHByb3BlciBsaW5lLWhlaWdodCBjYWxjdWxhdGlvbi5cbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogYXV0b1xuICAgIC5jb2RlZmxhc2tcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIC8vIElnbm9yZSB0aGVwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgICAgLy8gdGhlIGRlc2lyZWQgaGVpZ2h0IHdpdGggOnN0eWxlPVwic3R5bGVcIi5cbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX3ByZVxuICAgICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX2NvZGUsXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpXG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDNcbiAgICB9LFxuXG4gICAgc3R5bGUoKSB7XG4gICAgICByZXR1cm4gYGhlaWdodDogY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmNvZGUsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLnNjaGVtYS5sYW5ndWFnZSB8fCAnamF2YXNjcmlwdCcsXG4gICAgICB0YWJTaXplOiB0aGlzLnNjaGVtYS5pbmRlbnRTaXplIHx8IDIsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5jb2RlLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by1jb2xvcihcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4pXG4gIC5kaXRvLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICApXG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICBzaXplPVwiOFwiXG4gICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICApXG4gICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICB2LWlmPVwidmFsdWVcIlxuICAgIClcbiAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1jb2xvcihcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICApXG4gICAgLmRpdG8taW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIClcbiAgICAgIGlucHV0KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgICBzaXplPVwiOFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGhcbiAgLmRpdG8tY29sb3JcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgaW5wdXRcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgJixcbiAgICAgIGRpdlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiAwXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgIC8vIE5PVEU6IHZ1ZS1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgfVtmb3JtYXRdIHx8IGZvcm1hdFxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0FscGhhYD9cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dHNgP1xuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzZWQoZm9jdXNlZCkge1xuICAgICAgaWYgKCFmb2N1c2VkICYmIHRoaXMuY29udmVydGVkSGV4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IoYCMke3RoaXMuY29udmVydGVkSGV4VmFsdWV9YClcbiAgICAgICAgaWYgKGNvbG9yPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gY29sb3IudG9TdHJpbmcodGhpcy5jb2xvckZvcm1hdClcbiAgICAgICAgICAvLyBUT0RPOiBFbWl0ICdpbnB1dCcgaGVyZSBpbnN0ZWFkLCBhbmQgJ2NoYW5nZScgaW4gYmx1ciwgbGlrZSBvdGhlcnMuXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIDppcz1cImNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICB2LWJpbmQ9XCIkcHJvcHNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlVHlwZUNvbXBvbmVudCgpYC4gVGhpcyBjYW5cbi8vIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSlcbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuICAvLyAgaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuICBpbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwidmFsdWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJ0cnVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlIGB2YWx1ZWBcbiAgICAgICAgICAgIC8vIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgICAvLyByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGVcbiAgICBjb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGEgYmV0dGVyXG4gIC8vIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5IHN1cHBvcnRlZFxuICAvLyBhdHRyaWJ1dGVzKVxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGF0ZVZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGF0ZUZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RhdGVGb3JtYXQnLCB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgIH1bdHlwZV1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLCBwcm9jZXNzRm9ybXMsIGdldE5hbWVkU2NoZW1hcywgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMsIGdldFZpZXdTY2hlbWEsXG4gIGhhc0xhYmVscywgaXNDb21wYWN0LCBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLCBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc051bWJlciwgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2UsXG4gICAgICBpZ25vcmVSb3V0ZUNoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSB0byBhIGxpc3Qgb2Ygd3JhcHBlZCBwcmltaXRpdmVzLCBhbmQgcmV0dXJuIGl0LlxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCA/IGRhdGFbMF0gOiBudWxsKVxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBUeXBlTGlzdCBmb3IgRGl0b0Zvcm1DaG9vc2VyLlxuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKHRoaXMuc2NoZW1hLnBhdGgpXG4gICAgfSxcblxuICAgIGRlZmF1bHRRdWVyeSgpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdE9yZGVyOiBvcmRlciB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG9yZGVyID8geyBvcmRlciB9IDoge31cbiAgICB9LFxuXG4gICAgcXVlcnk6IGdldFN0b3JlQWNjZXNzb3IoJ3F1ZXJ5Jywge1xuICAgICAgZ2V0KHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0UXVlcnksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBkaXNwbGF5ZWQgcXVlcnkgcGFyYW1ldGVycyBpbiBzeW5jIHdpdGggdGhlIHN0b3JlZFxuICAgICAgICAvLyBvbmVzLiBVc2Ugc2NvcGUgYW5kIHBhZ2UgZnJvbSB0aGUgbGlzdCBzY2hlbWEgYXMgZGVmYXVsdHMsIGJ1dCBhbGxvd1xuICAgICAgICAvLyB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGVtLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2NvcGUgPSB0aGlzLmRlZmF1bHRTY29wZT8ubmFtZSxcbiAgICAgICAgICBwYWdlID0gdGhpcy5zY2hlbWEucGFnZVxuICAgICAgICB9ID0gdGhpcy5xdWVyeVxuICAgICAgICAvLyBQcmVzZXJ2ZSAvIG1lcmdlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWVzLlxuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgIC4uLihzY29wZSAhPSBudWxsICYmIHsgc2NvcGUgfSksXG4gICAgICAgICAgLi4uKHBhZ2UgIT0gbnVsbCAmJiB7IHBhZ2UgfSksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVxdWFscyhxdWVyeSwgdGhpcy4kcm91dGUucXVlcnkpKSB7XG4gICAgICAgICAgLy8gVGVsbCB0aGUgYCRyb3V0ZWAgd2F0Y2hlciB0byBpZ25vcmUgdGhlIGNoYW5nZWQgdHJpZ2dlcmVkIGhlcmU6XG4gICAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IHRydWVcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHF1ZXJ5LCBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaGFzTGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuc29tZShoYXNMYWJlbHMpXG4gICAgfSxcblxuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLmV2ZXJ5KGlzQ29tcGFjdClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgcGFnaW5hdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdwYWdpbmF0ZScsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgICAgICA/IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gIXRoaXMudmFsdWVcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmICF0aGlzLmlzSW5saW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDEgJiYgZHJhZ2dhYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5saW5lZCAmJiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRoaXMuaWdub3JlUm91dGVDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGZyb20ucGF0aCA9PT0gdG8ucGF0aCAmJiBmcm9tLmhhc2ggPT09IHRvLmhhc2gpIHtcbiAgICAgICAgLy8gUGF0aHMgYW5kIGhhc2hlcyByZW1haW4gdGhlIHNhbWUsIHNvIG9ubHkgcXVlcmllcyBoYXZlIGNoYW5nZWQuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWx0ZXIgYW5kIHJlbG9hZCBkYXRhIHdpdGhvdXQgY2xlYXJpbmcuXG4gICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3cmFwcGVkUHJpbWl0aXZlczoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGhhbmRsZXIobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBvbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IGl0ZW0gJiYgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgaWYgKGl0ZW0gJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0pXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIubWF0Y2gocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICAgICAgeyBwYXRoIH0sXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGlzdHMgd2l0aCBuZXN0ZWQgZm9ybXMgY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXMnXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PiBwYXJhbVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdkaXRvLWZvcm0tbmVzdGVkJyA6ICdkaXRvLWZvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgdGV4dChmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgd2lkdGg6ICc0MCUnXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzYwJScgOiAnZmlsbCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc1BhbmVsKGZpbHRlcnMsIGRhdGFQYXRoLCBwcm94eSkge1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbGVhcjoge1xuICAgICAgICB0ZXh0OiAnQ2xlYXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQucmVzZXREYXRhKClcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICB0ZXh0OiAnRmlsdGVyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSksXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGZpbHRlcnMgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA/IGZpbHRlcnMgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgbmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tuYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiXG4uZGl0by1saXN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tbmF2aWdhdGlvbihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICApXG4gIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1saXN0KFxuICAgIHYtaWY9XCJpc1JlYWR5XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuICApXG4gICAgLmRpdG8tbmF2aWdhdGlvbihcbiAgICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgICAgZGl0by1zY29wZXMoXG4gICAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgICAgKVxuICAgICAgLy8gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAgIC5kaXRvLXNwYWNlcihcbiAgICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICApXG4gICAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWxpc3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGZcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjplbXB0eVxuICAgICAgICBkaXNwbGF5OiBub25lXG4gICAgICAuZGl0by1zY29wZXMsXG4gICAgICAuZGl0by1wYWdpbmF0aW9uXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICAgbWluLXdpZHRoOiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgaGVpZ2h0OiAxMDAlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0RmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgT3JkZXJlZE1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgLy8gQXQgdGhlIHRpbWUgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSBwYW5lbCBzY2hlbWEsIHRoZSBzY2hlbWFDb21wb25lbnQgaXNcbiAgICAgIC8vIG5vdCBmaWxsZWQgeWV0LCBzbyB3ZSBjYW4ndCBnZXQgdGhlIHRhcmdldCBjb21wb25lbnQgKGRhdGFQYXRoKSByaWdodFxuICAgICAgLy8gYXdheS4gVXNlIGEgcHJveHkgYW5kIGEgZ2V0dGVyIGluc3RlYWQsIHRvIGdldCBhcm91bmQgdGhpczpcbiAgICAgIGNvbnN0IGdldExpc3RDb21wb25lbnQgPSAoKSA9PiBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICApXG5cbiAgICAgIHJldHVybiBnZXRGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHsgLy8gQ3JlYXRlIGEgc2ltcGxlIHByb3h5IHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQgcXVlcnkocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZSAmJiB0aGlzLnRvdGFsID4gdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5idXR0b25TY2hlbWFzIHx8XG4gICAgICAgIHRoaXMuY3JlYXRhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkgfHwgdGhpcy5wYXRoXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWwtY29tcG9uZW50XG4gICAgZGlzcGxheTogZmxleFxuICAgIGhlaWdodDogMmVtXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW1hcmt1cChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgKVxuICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbWFya3VwKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgKVxuICAgIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgICByZWY9XCJlZGl0b3JcIlxuICAgICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICAgIClcbiAgICAuZGl0by1yZXNpemUoXG4gICAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLW1hcmt1cFxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAuZGl0by1yZXNpemVcbiAgICAgIEBleHRlbmQgJWljb24tcmVzaXplXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogdW5zZXRcbiAgICAgIGxlZnQ6IHVuc2V0XG4gICAgICByaWdodDogMFxuICAgICAgYm90dG9tOiAwXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuXG4gICAgLlByb3NlTWlycm9yXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG91dGxpbmU6IG5vbmVcblxuICAgIC5kaXRvLW1hcmt1cC1lZGl0b3JcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbFxuICAgICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yXG5cbiAgICAuZGl0by1idXR0b25zLXRvb2xiYXJcbiAgICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDBcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIHAsXG4gICAgdWwsXG4gICAgb2wsXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIG1hcmdpbjogMXJlbSAwXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi10b3A6IDBcbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDNcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgaDFcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtXG4gICAgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgICBjb2RlXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICBwcmVcbiAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgb3ZlcmZsb3cteDogYXV0b1xuICAgICAgY29kZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgIHAgY29kZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAwIDAuM3JlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgYVxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgY29sb3I6IGJsdWVcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG4gICAgdWwsXG4gICAgb2xcbiAgICAgIHBhZGRpbmctbGVmdDogMnJlbVxuICAgIGxpXG4gICAgICAmID4gcCxcbiAgICAgICYgPiBvbCxcbiAgICAgICYgPiB1bFxuICAgICAgICBtYXJnaW46IDBcbiAgICBibG9ja3F1b3RlXG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW1cbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpY1xuICAgICAgcFxuICAgICAgICBtYXJnaW46IDBcblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgRWRpdG9yTWVudUJhciwgTWFyayB9IGZyb20gJ3RpcHRhcCdcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG5pbXBvcnQge1xuICAvLyBNYXJrczpcbiAgQm9sZCwgQ29kZSwgSXRhbGljLCBMaW5rLCBTdHJpa2UsIFVuZGVybGluZSxcbiAgLy8gTm9kZXM6XG4gIEJsb2NrcXVvdGUsIENvZGVCbG9jaywgSGFyZEJyZWFrLCBIZWFkaW5nLCBIb3Jpem9udGFsUnVsZSxcbiAgT3JkZXJlZExpc3QsIEJ1bGxldExpc3QsIExpc3RJdGVtLFxuICAvLyBUT0RPOlxuICAvLyAtIEltYWdlLCBNZW50aW9uLCBDb2RlQmxvY2tIaWdobGlnaHRcbiAgLy8gLSBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVOb2RlcywgVGFibGVSb3csXG4gIC8vIC0gVG9kb0l0ZW0sIFRvZG9MaXN0XG4gIC8vIFRvb2xzOlxuICBIaXN0b3J5XG59IGZyb20gJ3RpcHRhcC1leHRlbnNpb25zJ1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIHVuZGVyc2NvcmUsIGh5cGhlbmF0ZSwgZGVib3VuY2Vcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgRWRpdG9yTWVudUJhcixcbiAgICBJY29uXG4gIH0sXG5cbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBjb21tYW5kID0+IHRoaXMub25DbGlja0xpbmsoY29tbWFuZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cjogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvdGhlck5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4gW1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShnZXRWYWx1ZSA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWx1ZSgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZ2V0SFRNTCB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChnZXRIVE1MKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5jcmVhdGVFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoY29tbWFuZCkge1xuICAgICAgY29uc3QgYXR0cnMgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIGhyZWY6IG51bGwsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHRoaXMuZWRpdG9yLmdldE1hcmtBdHRycygnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCwgcHJlZml4IGl0IHdpdGhcbiAgICAgICAgICAvLyBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cDovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmQoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIHNjaGVtYS5tYXJrczpcbiAgICAgICAgbWFya3MuYm9sZCAmJiBuZXcgQm9sZCgpLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgbmV3IEl0YWxpYygpLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgbmV3IFVuZGVybGluZSgpLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgbmV3IFN0cmlrZSgpLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBuZXcgU21hbGwoKSxcbiAgICAgICAgbWFya3MuY29kZSAmJiBuZXcgQ29kZSgpLFxuICAgICAgICBtYXJrcy5saW5rICYmIG5ldyBMaW5rV2l0aFRpdGxlKCksXG5cbiAgICAgICAgLy8gc2NoZW1hLm5vZGVzOlxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIG5ldyBCbG9ja3F1b3RlKCksXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBuZXcgQ29kZUJsb2NrKCksXG4gICAgICAgIG5ldyBIYXJkQnJlYWsoKSwgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIG5ldyBIZWFkaW5nKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBuZXcgSG9yaXpvbnRhbFJ1bGUoKSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIG5ldyBMaXN0SXRlbSgpLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIG5ldyBCdWxsZXRMaXN0KCksXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIG5ldyBPcmRlcmVkTGlzdCgpLFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0l0ZW0oKSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9MaXN0KCksXG5cbiAgICAgICAgLy8gc2NoZW1hLnRvb2xzOlxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIG5ldyBIaXN0b3J5KClcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuZWRpdG9yLmlzQWN0aXZlW25hbWVdXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmVkaXRvci5jb21tYW5kc1tuYW1lXVxuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogKFxuICAgICAgICAgICAgaXNBY3RpdmU/LihhdHRycykgJiZcbiAgICAgICAgICAgIChpZ25vcmVBY3RpdmUgPT0gbnVsbCB8fCAhaWdub3JlQWN0aXZlKCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBvbkNsaWNrXG4gICAgICAgICAgICA/IG9uQ2xpY2soY29tbWFuZCwgYXR0cnMpXG4gICAgICAgICAgICA6IGNvbW1hbmQoYXR0cnMpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHIsIHZhbHVlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBbYXR0cl06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuXG5jbGFzcyBTbWFsbCBleHRlbmRzIE1hcmsge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gJ3NtYWxsJ1xuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VET006IFtcbiAgICAgICAgeyB0YWc6ICdzbWFsbCcgfVxuICAgICAgXSxcbiAgICAgIHRvRE9NOiAoKSA9PiBbJ3NtYWxsJywgMF1cbiAgICB9XG4gIH1cblxuICBjb21tYW5kcyh7IHR5cGUgfSkge1xuICAgIHJldHVybiAoKSA9PiB0b2dnbGVNYXJrKHR5cGUpXG4gIH1cbn1cbmNsYXNzIExpbmtXaXRoVGl0bGUgZXh0ZW5kcyBMaW5rIHtcbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgaHJlZjoge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgcGFyc2VET006IFt7XG4gICAgICAgIHRhZzogJ2EnLFxuICAgICAgICBnZXRBdHRyczogZG9tID0+ICh7XG4gICAgICAgICAgaHJlZjogZG9tLmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgIHRpdGxlOiBkb20uZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgIH0pXG4gICAgICB9XSxcbiAgICAgIHRvRE9NOiBub2RlID0+IFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbXVsdGlzZWxlY3QoXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gIH1gXG4pXG4gIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbXVsdGlzZWxlY3QoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gICAgfWBcbiAgKVxuICAgIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcbiAgQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbiAgJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGhcbiAgJHRhZy1pY29uLXdpZHRoOiAxLjhlbVxuICAkdGFnLW1hcmdpbjogMnB4XG4gICR0YWctcGFkZGluZzogM3B4XG4gICR0YWctbGluZS1oZWlnaHQ6IDEuMWVtXG5cbiAgLmRpdG8tbXVsdGlzZWxlY3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5tdWx0aXNlbGVjdFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBjb2xvcjogJGNvbG9yLWJsYWNrXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwXG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpblxuXG4gICAgLm11bHRpc2VsZWN0X190YWdcbiAgICAgIGZsb2F0OiBsZWZ0XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpblxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbVxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwXG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbGluZS1oZWlnaHQ6IDBcblxuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogMFxuICAgICAgbWFyZ2luOiAwIDAgMXB4IDBcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcblxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXJcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXJcblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgcGFkZGluZzogMFxuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGhcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoXG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGhcbiAgICAgIGhlaWdodDogaW5oZXJpdFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0XG4gICAgICB3aWR0aDogMFxuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKVxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKVxuXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGluc2V0OiAwXG4gICAgICAgIG1hcmdpbjogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb25cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0XG4gICAgICBoZWlnaHQ6IHVuc2V0XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAmOjphZnRlclxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWctaWNvblxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtXG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgZm9udC1zaXplOiAxLjNlbVxuICAgICAgJjpob3Zlcjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tc2VsZWN0ZWRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZVxuICAgICAgLS1pbnB1dC13aWR0aDogMTAwJVxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZVxuICAgICAgLS1pbnB1dC13aWR0aDogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgIG1hcmdpbjogLTFweCAwIDBcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAmLm11bHRpc2VsZWN0LS1hYm92ZVxuICAgICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuICAgICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHhcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgJi5kaXRvLWhhcy1lcnJvcnNcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvclxuXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICB2YWx1ZSA9PiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWRcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciB8fCAoXG4gICAgICAgIHNlYXJjaGFibGUgJiYgdGFnZ2FibGUgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgIDogc2VhcmNoYWJsZSA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgLy8gb3ZlcnJpZGUgYFR5cGVNaXhpbi5nZXRMaXN0ZW5lcnMoKWAgdG8gcmUtcm91dGUgJ2lucHV0JyB0byBgb25DaGFuZ2UoKWBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlIHRvXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gJydcbiAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID0gbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgW3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOm5vdChbc3RlcF0pXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIG1hcmdpbjogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIGRpdG8tZWRpdC1idXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1vYmplY3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgICApXG4gICAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICApXG4gICAgICBjb21wb25lbnQoXG4gICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgICApXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6cGF0aD1cInBhdGhcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLW9iamVjdFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIG1hcmdpbjogMFxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnRcbiAgICAgIGZsZXg6IDAgMSAxMDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBmbGV4OiAxIDAgMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICByZXR1cm4gcmFuZ2VbMV0gLSByYW5nZVswXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1yYWRpby1idXR0b25zXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1yYWRpby1idXR0b25cbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zZWN0aW9uKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4pXG4gIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zZWN0aW9uKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbiAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKFxuICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbiAgLmRpdG8tc2VsZWN0XG4gICAgc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4gICRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMilcblxuICAuZGl0by1zZWxlY3RcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIHNlbGVjdFxuICAgICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aFxuXG4gICAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHNlbGVjdFxuICAgICAgICB3aWR0aDogMTAwJVxuXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KVxuXG4gICAgJi5kaXRvLWRpc2FibGVkOjphZnRlclxuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgICB2LWlmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNsaWRlclxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXJhbmdlXG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKVxuICAgIC5kaXRvLW51bWJlclxuICAgICAgYm9yZGVyOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5zd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3luYz1cInRydWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN5bmM9XCJ0cnVlXCJcbiAgICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXN3aXRjaFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndGV4dCcsICdlbWFpbCcsICd1cmwnLCAnaG9zdG5hbWUnLCAnZG9tYWluJywgJ3RlbCcsICdwYXNzd29yZCcsICdjcmVkaXRjYXJkJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0VHlwZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgIH1bdGhpcy50eXBlXSB8fCB0aGlzLnR5cGVcbiAgICB9LFxuXG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICB9W3RoaXMudHlwZV1cbiAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnJvd3M9XCJsaW5lc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyZWUtbGlzdFxuICBkaXRvLXNjb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgQGV4dGVuZCAlZmllbGRcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgID4gLmRpdG8tdHJlZS1pdGVtXG4gICAgICAgIGZsZXg6IDEgMSAyNSVcbiAgICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lclxuICAgICAgICBmbGV4OiAwIDEgNzUlXG4gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICB9LFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgfSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICA6IHRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVlZFxuICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7XG4gICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSB0cnVlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICAgIG5lc3RlZCwgZmxhdHRlbixcbiAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgIGFwaSwgY2hpbGRyZW4sIGNoaWxkcmVuLm5hbWUsIGNoaWxkUm91dGVzLCBsZXZlbCxcbiAgICAgICAgICAgIG5lc3RlZCwgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSxcblxuICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgY2hpbGRyZW5cbiAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAuLi5mb3JtLFxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIDogbnVsbFxuICAgIClcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICApXG4gICAgdGZvb3RcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by11cGxvYWRcbiAgICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICAgIHRyXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhblxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgIHRmb290XG4gICAgICAgIHRyXG4gICAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXVwbG9hZFxuICAgIC5kaXRvLXRhYmxlXG4gICAgICB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gKlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgICAgLmRpdG8tcHJvZ3Jlc3NcbiAgICAgICAgZmxleDogYXV0b1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQsIFZ1ZURyYWdnYWJsZSB9LFxuICBmaWx0ZXJzOiB7IGZvcm1hdEZpbGVTaXplIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChmaWxlICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy4kc2V0KHRoaXMudmFsdWUsIGluZGV4LCBuZXdGaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0ge1xuICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG5cbiAgICAgICAgICB9W2Vycm9yXSB8fCBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKFxuICAgICAgICAoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsXG4gICAgICApXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuXG48L3NjcmlwdD5cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlTW9kYWwgZnJvbSAndnVlLWpzLW1vZGFsJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAndnVlLW5vdGlmaWNhdGlvbidcbmltcG9ydCB7XG4gIGlzU3RyaW5nLCBpc0FycmF5LCBhc0FycmF5LCBpc0Fic29sdXRlVXJsLFxuICBtZXJnZSwgaHlwaGVuYXRlLCBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi91dGlscy9kZXByZWNhdGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcblxuLy8gQWxsIGdsb2JhbCBwbHVnaW5zIHRoYXQgbmVlZCB0byBiZSByZWdpc3RlcmVkIG9uIGBWdWVgOlxuVnVlLnVzZShWdWVSb3V0ZXIpXG5WdWUudXNlKFZ1ZU1vZGFsLCB7IGR5bmFtaWM6IHRydWUgfSlcblZ1ZS51c2UoVnVlTm90aWZpY2F0aW9ucylcblxuaWYgKGltcG9ydC5tZXRhLmhvdCkge1xuICAvLyBXb3JrYXJvdW5kIGZvciBhIHN0cmFuZ2UgVml0ZSBob3QtcmVsb2FkaW5nIGJ1Zywgc2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUvaXNzdWVzLzc4MzkjaXNzdWVjb21tZW50LTEzNDAxMDk2NzlcbiAgaW1wb3J0Lm1ldGEuaG90Lm9uKCd2aXRlOmJlZm9yZVVwZGF0ZScsIG9uQmVmb3JlVml0ZVVwZGF0ZSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IFZ1ZSh7XG4gICAgICBlbCxcbiAgICAgIHJvdXRlcjogbmV3IFZ1ZVJvdXRlcih7XG4gICAgICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICAgICAgYmFzZTogZGl0by5iYXNlLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pLFxuICAgICAgY29tcG9uZW50czogeyBEaXRvUm9vdCB9LFxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcm9vdCBjb250YWluZXIncyBpZCwgYXMgcmVxdWlyZWQgYnkgaG90LXJlbG9hZGluZzpcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogZWwuaWRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAgIC4uLnR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke3Jlc3BvbnNlLnN0YXR1c1RleHR9KWApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6IGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgPyAnaW5jbHVkZSdcbiAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9PyR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKVxuICApLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gb25CZWZvcmVWaXRlVXBkYXRlKGV2ZW50KSB7XG4gIGlmIChldmVudC50eXBlID09PSAndXBkYXRlJykge1xuICAgIC8vIFBhdGNoIGBldmVudC51cGRhdGVzYCB0byByZW1vdmUgdGhlIHZlcnNpb24gcXVlcnkgcGFyYW1ldGVyIGZyb20gcGF0aCxcbiAgICAvLyBzbyB0aGF0IHRoZSB1cGRhdGUgZ2V0cyBwaWNrZWQgdXAuXG4gICAgLy8gV2h5IHRoZSBzdG9yZWQgYGRlcHNgIGFyZSBtaXNzaW5nIHRoaXMgcGFydCBvZiB0aGUgVVJMLCBJIGNhbm5vdCBzYXnigKZcbiAgICBjb25zdCB1cGRhdGVzID0gW11cbiAgICBmb3IgKGNvbnN0IHVwZGF0ZSBvZiBldmVudC51cGRhdGVzKSB7XG4gICAgICB1cGRhdGVzLnB1c2godXBkYXRlKSAvLyBLZWVwIHRoZSBvcmlnaW5hbCB1cGRhdGUuXG4gICAgICBjb25zdCBhY2NlcHRlZFBhdGggPSB1cGRhdGUuYWNjZXB0ZWRQYXRoLnJlcGxhY2UoL1xcP3Y9WzAtOWEtZl0rJi9pLCAnPycpXG4gICAgICBpZiAoYWNjZXB0ZWRQYXRoICE9PSB1cGRhdGUuYWNjZXB0ZWRQYXRoKSB7XG4gICAgICAgIHVwZGF0ZXMucHVzaCh7IC4uLnVwZGF0ZSwgYWNjZXB0ZWRQYXRoIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGV2ZW50LnVwZGF0ZXMgPSB1cGRhdGVzXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJwYXJlbnRJdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImV2ZW50cyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJhc0FycmF5IiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsInR5cGUiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsImhhc1Jlc291cmNlIiwic2NoZW1hIiwiZ2V0UmVzb3VyY2UiLCJkZWZhdWx0cyIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIkRpdG9NaXhpbiIsInVpZCIsImtleU9yRGF0YVBhdGgiLCJkZWYiLCJjb252ZXJ0ZWQiLCJuYW1lIiwibGFiZWxpemUiLCJidXR0b24iLCJ2ZXJiIiwiZHJhZ2dhYmxlIiwiZmFsbGJhY2siLCJxdWVyeSIsImNvbXBvbmVudHMiLCJidXR0b25zIiwic2V0dGluZ3MiLCJyZWplY3QiLCJEaXRvQ29tcG9uZW50IiwidXJsIiwibWV0aG9kIiwiaW50ZXJuYWwiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJpc0RvbWFpbiIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50IiwiaXNTaW5nbGVDb21wb25lbnRWaWV3Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsIl9iIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9taXNlcyIsInByb2Nlc3NGb3JtcyIsImZvcm0iLCJmb3JtcyIsInJlc29sdmVGb3JtIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3U2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJ2aWV3Q29tcG9uZW50IiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsImNvbXB1dGVWYWx1ZSIsInJvb3REYXRhIiwiY29tcHV0ZSIsIlZ1ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImRlc2NyaXB0aW9ucyIsInRvT2JqZWN0IiwiYXJyYXkiLCJ0b1NjaGVtYSIsImNhbWVsaXplIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxTY2hlbWEiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJzY2hlbWFDb21wb25lbnQiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1JZCIsImdldEl0ZW1VaWQiLCJUeXBlTWl4aW4iLCJwYXJzZSIsImxhYmVsIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiYWRkIiwiZWxlbWVudCIsIm1peGlucyIsImNvbXAiLCJjdG9yIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInRvIiwiZnJvbSIsIm1hdGNoZWQiLCJpIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwidGVtcGxhdGVQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJyZW5kZXIiLCJfdm0iLCJfaCIsIl9jIiwic3RhdGljUmVuZGVyRm5zIiwiX192dWUyX3NjcmlwdCIsImlzTG9hZGluZyIsImNvcHlEYXRlIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImFkZEV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJzY3JvbGxUbyIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGVyVGljayIsInNldFNlbGVjdGlvbiIsImZpZWxkIiwic3RhcnQiLCJlbmQiLCJyYW5nZSIsIiRldmVudCIsIndlZWtkYXkiLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJuZXdWYWwiLCJvbGRWYWwiLCJtb2RlIiwib3ZlcnJpZGVzIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsInN0YXRlIiwiaG9yIiwidmVyIiwiZW50ZXIiLCJjdXJyZW50TW9kZSIsInN0YXJ0WWVhciIsImZpcnN0RGF5V2VlayIsIm51bURheXMiLCJwcmV2TW9udGgiLCJwcmV2TW9udGhOdW1EYXlzIiwidG9kYXkiLCJpc0RheSIsIm5leHRNb250aE5lZWQiLCJuZXh0TW9udGgiLCJsb2NhbGVOYW1lcyIsIm5hbWVzIiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsIiQkYSIsIiQkZWwiLCIkJGMiLCIkJHYiLCIkJGkiLCJzaXplIiwidGl0bGUiLCJkaXNhYmxlZCIsInJlYWRvbmx5IiwicGxhY2Vob2xkZXIiLCJhdXRvY29tcGxldGUiLCIkYXR0cnMiLCJpbnB1dCIsImdldExlbmd0aCIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJkZWZhdWx0Rm9ybWF0cyIsImZvcmNlIiwic2Nyb2xsIiwicmVmIiwibGluZUhlaWdodCIsInNlbGVjdGVkIiwibGVuZ3RoIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJwYWdlIiwicGFnZVNpemUiLCJjdXJyZW50UGFnZVNpemUiLCJzaG93UHJldiIsInNob3dOZXh0IiwidG90YWwiLCJjdXJyZW50UGFnZSIsInNob3dMZW5ndGgiLCJudW1QYWdlcyIsInBhZ2VSYW5nZSIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJjcmVhdGVFbGVtZW50Iiwic2V0U3R5bGUiLCJzdHlsZSIsImZvcmNlUmVwYWludCIsIndpZHRoIiwiaGVpZ2h0IiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJoYW5kbGVyIiwiZXJyIiwidGV4dCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3Iiwicm91dGUiLCJTcGlubmVyIiwiUHVsc2VMb2FkZXIiLCJjb2xvciIsInByb3BzIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJkaWFsb2dEYXRhIiwiY29udGVudCIsImFzT2JqZWN0IiwicHJlZml4Iiwic3VmZml4IiwiSXRlbU1peGluIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJUcmFuc2l0aW9uSGVpZ2h0IiwicGFuZSIsImN1cnJlbnRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsImV4cGFuZCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl9yZWYiLCJuZXN0ZWREYXRhUGF0aCIsInN0b3JlIiwicGFyc2VGcmFjdGlvbiIsImRpdmlkZW5kIiwiZGl2aXNvciIsImNvbnRhaW5lckNsYXNzIiwiYmFzaXMiLCJncm93Iiwic2hyaW5rIiwiYmFzaXNJc0F1dG8iLCJ0YWJTY2hlbWEiLCJidXR0b25TY2hlbWEiLCJidXR0b25EYXRhUGF0aCIsIm5vZGUiLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwicmVwb3J0IiwianNvbiIsIl9kIiwiZGVpbmRlbnQiLCIkc2NoZW1hIiwiX2UiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwibWVyZ2UiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsIm5ld1ZhbHVlIiwib2xkVmFsdWUiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJzY29wZSIsIm5hdmlnYXRlIiwiUGFnaW5hdGlvbiIsIk9yZGVyZWRNaXhpbiIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwib2Zmc2V0IiwiVnVlRHJhZ2dhYmxlIiwiY2hpbGRyZW5TY2hlbWEiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJjb2x1bW4iLCJvcmRlciIsImVzY2FwZUh0bWwiLCJoIiwiVHlwZUNvbXBvbmVudCIsIlR5cGVDb21wb25lbnQkMSIsImRlZmluaXRpb24iLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbkJsdXIiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiZm9jdXNlZCIsIkRhdGVUaW1lUGlja2VyIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImNvbGxhcHNpYmxlIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJyb3V0ZUNvbXBvbmVudCIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiZ2V0RmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5IiwicGFyc2VGaWx0ZXJzRGF0YSIsImdldEZpbHRlcnNDb21wb25lbnRzIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsImdldExpc3RDb21wb25lbnQiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJpY29uIiwiaXNBY3RpdmUiLCJvbkNsaWNrIiwiRWRpdG9yQ29udGVudCIsIkVkaXRvck1lbnVCYXIiLCJJY29uIiwiY29tbWFuZCIsIm1hcmtCdXR0b25zIiwiYmFzaWNOb2RlQnV0dG9ucyIsIm90aGVyTm9kZUJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJnZXRWYWx1ZSIsIm9uVXBkYXRlIiwiZ2V0SFRNTCIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsIm1vdXNlbW92ZSIsImF0dHJzIiwiZGlhbG9nQ29tcG9uZW50IiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImFkZEJ1dHRvbiIsImlnbm9yZUFjdGl2ZSIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJ1bmRlcnNjb3JlIiwiYXR0ciIsIk1hcmsiLCJ0b2dnbGVNYXJrIiwiTGluayIsImRvbSIsIlZ1ZU11bHRpc2VsZWN0Iiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCIkJHNlbGVjdGVkVmFsIiwibyIsInZhbCIsIm9wdCIsIlN3aXRjaEJ1dHRvbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJmaWxlIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJmaWxlcyIsInVwbG9hZCIsImxvZ2dlZERlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZSIsIlZ1ZVJvdXRlciIsIlZ1ZU1vZGFsIiwiVnVlTm90aWZpY2F0aW9ucyIsIkRpdG9BZG1pbiIsImRpdG8iLCJ2aWV3cyIsImdldEFwaVVybCIsImlzQXBpVXJsIiwidXNlcnMiLCJwYXJlbnRQYXRoIiwiRGl0b1Jvb3QiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiZm9ybWF0UXVlcnkiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiXSwibWFwcGluZ3MiOiJtMUNBQWUsTUFBQUEsR0FBQSxDQUNiLE1BQU8sR0FDUCxnQkFBaUIsQ0FBRSxFQUNuQixLQUFNLEtBQ04sVUFBVyxDQUFFLEVBQ2IsWUFBYSxLQUNiLGNBQWUsSUFDakIsRUNITyxTQUFTQyxFQUFlQyxFQUFVQyxFQUFPLENBQzlDLE9BQU9ELEVBQ0gsR0FBR0Es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RUFBQSxDQUNBLE1BQUEsQ0FDQSw0QkFDQSxLQUFBLE9BQUFBLElBQUEsS0FBQSxNQUFBLFlBQUEsRUFDQSw2QkFDQUEsSUFBQSxLQUFBLGFBQUEsWUFBQSxDQUNBLENBQ0EsRUFFQSxRQUFBMkIsRUFBQSxDQUNBLEtBQUEsYUFBQTdCLEVBQUEsS0FBQSxhQUFBNkIsQ0FBQSxDQUNBLEVBRUEsV0FBQUMsRUFBQSxDQUNBLEtBQUEsUUFBQSxDQUNBLEtBQUEsS0FBQSxhQUFBLFlBQUEsRUFBQUEsRUFBQSxFQUNBLENBQUEsQ0FDQSxFQUVBLFFBQUFGLEVBQUEsQ0FDQSxLQUFBLFlBQUFBLENBQ0EsRUFFQSxVQUFBRSxFQUFBLENBQ0EsS0FBQSxDQUFBLGFBQUFDLENBQUEsRUFBQSxLQUNBLENBQUEsS0FBQTdCLEVBQUEsTUFBQUMsQ0FBQSxFQUFBLEtBQUEsYUFDQTRCLEVBQUEsWUFBQSxFQUNBQSxFQUFBLFNBQUEsRUFBQUQsQ0FDQSxFQUNBLEtBQUEsUUFBQSxDQUNBLE1BQUEzQixFQUNBLElBQUEsS0FBQSxJQUNBLEtBQUEsZUFBQUQsRUFBQUMsQ0FBQSxFQUNBLEtBQUEsYUFBQSxRQUFBLENBQ0EsQ0FDQSxDQUFBLENBQ0EsRUFFQSxTQUFBMkIsRUFBQSxDQUNBLEtBQUEsUUFBQSxDQUNBLEtBQUEsS0FBQSxhQUFBLFlBQUEsRUFBQUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxXQUFBN0IsRUFBQStCLEVBQUEvRyxFQUFBLEdBQUEsQ0FDQStHLElBQUEsYUFDQS9HLEVBQ0EsS0FBQSxRQUFBLENBQ0EsS0FBQWdGLEVBQUEsWUFBQSxFQUNBLE1BQUFBLEVBQUEsU0FBQSxFQUNBLElBQUFBLEVBQUEsUUFBQSxDQUNBLENBQUEsRUFFQSxLQUFBLGFBQUFBLEVBRUEsS0FBQSxNQUFBLFFBQUEsS0FBQSxZQUFBLEVBRUEsRUFFQSxZQUFBRSxFQUFBLENBQ0EsS0FBQSxRQUFBLEtBQUEsRUFHQSxLQUFBLFFBQUEsQ0FBQSxNQUFBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLENBQ0EsRUFFQSxXQUFBRCxFQUFBLENBQ0EsS0FBQSxRQUFBLE9BQUEsRUFDQSxLQUFBLFFBQUEsQ0FBQSxLQUFBQSxFQUFBLENBQ0EsRUFFQSxhQUFBQSxFQUFBQyxFQUFBLENBQ0EsT0FBQUEsRUFBQSxJQUNBRCxJQUNBQyxFQUFBLEdBQ0FBLEVBQUEsSUFDQUQsSUFDQUMsRUFBQSxJQUVBLENBQUEsS0FBQUQsRUFBQSxNQUFBQyxDQUFBLENBQ0EsRUFFQSxhQUFBRixFQUFBLENBQUEsS0FBQUMsRUFBQSxNQUFBQyxFQUFBLElBQUFDLENBQUEsRUFBQSxDQUNBLE9BQUFILEVBQUEsZUFBQSxLQUFBLE9BQUEsQ0FDQSxLQUFBQyxHQUFBLFVBQ0EsTUFBQUMsR0FBQSxPQUNBLElBQUFDLEdBQUEsU0FDQSxDQUFBLENBQ0EsRUFFQSxlQUFBSCxFQUFBLENBQ0EsTUFBQUMsRUFBQSxLQUFBLHFCQUFBRCxFQUFBLFlBQUEsQ0FBQSxFQUNBLE1BQUEsR0FBQUMsT0FBQUEsRUFBQSxHQUNBLEVBRUEsZUFBQUEsRUFBQUMsRUFBQSxDQUNBLE9BQUEsSUFBQSxLQUFBRCxFQUFBQyxFQUFBLEVBQUEsQ0FBQSxFQUFBLFFBQUEsQ0FDQSxFQUVBLHFCQUFBRCxFQUFBLENBRUEsTUFBQSxDQUFBLEdBREFBLEVBQUEsU0FBQSxFQUNBLE1BQUEsRUFBQSxFQUFBLElBQ0EsRUFFQSxTQUFBLENBQUEsSUFBQStCLEVBQUEsSUFBQUMsRUFBQSxNQUFBQyxDQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsWUFBQUMsRUFBQSxhQUFBTCxDQUFBLEVBQUEsS0FDQSxHQUFBRSxHQUFBQyxFQUFBLENBQ0EsT0FBQUUsRUFBQSxDQUNBLElBQUEsTUFDQSxLQUFBLFFBQUEsQ0FDQSxJQUFBTCxFQUFBLFFBQUEsRUFBQUUsRUFBQUMsRUFBQSxDQUNBLENBQUEsRUFDQSxNQUNBLElBQUEsUUFDQSxLQUFBLFFBQUEsQ0FDQSxNQUFBSCxFQUFBLFNBQUEsRUFBQUUsRUFBQUMsRUFBQSxDQUNBLENBQUEsRUFDQSxNQUNBLElBQUEsT0FDQSxLQUFBLFFBQUEsQ0FDQSxLQUFBSCxFQUFB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SUEsRUFBSSxHQUFFLENBQUUsRUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUMzRCxFQUNJRyxHQUFrQixDQUFFLGNDZ0J4QkMsR0FBQSxDQUNBLE1BQUEsQ0FDQSxRQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsT0FBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxPQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLFFBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLFdBQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxDQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxxQkFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLENBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsVUFBQSxLQUFBLEtBQ0EsZUFBQSxLQUFBLFNBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxjQUFBLENBQ0EsTUFBQSxDQUNBLHdCQUFBLEtBQUEsUUFDQSxDQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUFrRCxFQUFBLENBQ0EsQ0FBQSxjQUFBM1AsRUFBQSxVQUFBLEtBQUEsU0FBQSxHQUFBLEVBQUEsRUFDQSxFQUNBLE9BQUEsS0FBQSxjQUNBMlAsRUFBQSxLQUFBLFdBQUEsRUFBQSxJQUVBQSxDQUNBLEVBRUEsWUFBQSxDQUNBLE9BQUEsS0FBQSxPQUFBLFlBQUEsS0FBQSxTQUFBLEVBQ0EsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxLQUFBQyxF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QUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsYUFBQSxFQUNBLFlBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLE9BQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQUMsRUFBQSxlQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLFdBQUEsRUFBQSxRQUFBLFNBQUEsRUFDQSxhQUFBLENBQUEsS0FBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLGFBQUEsS0FBQSxNQUNBLFVBQUEsS0FBQSxLQUNBLGFBQUEsR0FDQSxRQUFBLEVBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxTQUFBLENBQ0EsT0FBQSxLQUFBLGNBQUEsS0FBQSxTQUNBLEVBRUEsYUFBQSxDQUNBLE9BQUF2UyxFQUFBLE9BQUEsS0FBQSxhQUFBLENBQ0EsT0FBQSxLQUFBLE9BQ0EsS0FBQSxLQUFBLFdBQ0EsS0FBQSxFQUNBLENBQUEsR0FBQSxFQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQTZPLEVBQUFDLEVBQUEsQ0FDQSxDQUFBRCxHQUFBLENBQUFDLElBQ0EsS0FBQSxhQUFBRCxFQUVBLEVBRUEsYUFBQXpCLEVBQUEsQ0FDQSxDQUFBQSxHQUFBLENBQUEsS0FBQSxRQUNBLEtBQUEsUUFBQSxHQUNBLEtBQUEsTUFBQSxRQUFBQSxDQUFBLEVBRUEsRUFFQSxLQUFBZ0QsRUFBQSxDQUNBLEtBQUEsVUFBQUEsQ0FDQSxFQUVBLFVBQUF2QixFQUFBQyxFQUFBLENBQ0EsQ0FBQUQsR0FBQSxDQUFBQyxHQUNBLEtBQUEsTUFBQSxjQUFBRCxDQUFBLENBRUEsRUFFQSxRQUFBQSxFQUFBQyxFQUFBLENBQ0EsQ0FBQUQsR0FBQSxDQUFBQyxHQUNBLEtBQUEsTUFBQUQsRUFBQSxRQUFBLE1BQUEsQ0FFQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsSUFBQSxPQUFBLElBQUEsQ0FDQSxLQUFBLFVBQ0EsS0FBQSxRQUFBLEdBQ0EsS0FBQSxNQUFBLFNBQUEsS0FBQSxZQUFBLEVBRUEsQ0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFdBQUF6QixFQUFBLENBQ0EsS0FBQSxhQUFBQSxFQUNBLEtBQUEsVUFBQSxFQUNBLEVBRUEsVUFBQXpSLEVBQUEsUUFDQVUsRUFBQSxLQUFBLE1BQUEsV0FBQSxNQUFBQSxFQUFBLFNBQUF5UixHQUFBblMsQ0FBQSxJQUNBQSxFQUFBLGVBQUEsQ0FFQSxFQUVBLE9BQUEsQ0FDQSxLQUFBLE1BQUEsTUFBQSxNQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsS0FBQSxNQUFBLE1BQUEsS0FBQSxDQUNBLENBQ0EsQ0FDQSxzSUN0SkEsSUFBSWlSLEdBQVMsVUFBWSxDQUN2QixJQUFJQyxFQUFJLEtBQ0pDLEVBQUdELEVBQUksZUFDUEUsRUFBR0YsRUFBSSxNQUFNLElBQUlDLEVBRXJCLE9BQU9DLEVBQUcsVUFBV0YsRUFBSSxHQUFHLENBQzFCLElBQUssVUFDTCxZQUFhLG1CQUNiLE1BQU8sQ0FDTCxRQUFXLFFBQ1gsS0FBUUEsRUFBSSxTQUNiLEVBQ0QsR0FBSSxDQUNGLGNBQWUsU0FBVTJCLEVBQVEsQ0FDL0IzQixFQUFJLFVBQVkyQixDQUNqQixDQUNGLENBQ0YsRUFBRSxVQUFXLENBQ1osV0FBWTNCLEVBQUksV0FDaEIsVUFBV0EsRUFBSSxVQUNmLFNBQVVBLEVBQUksU0FDZCxPQUFRQSxFQUFJLE1BQ2hCLEVBQUssRUFBSyxFQUFHLENBQUNFLEVBQUcsY0FBZUYsRUFBSSxHQUFHLENBQ25DLElBQUssUUFDTCxZQUFhLHlCQUNiLE1BQU8sQ0FDTCxhQUFjQSxFQUFJLFNBQ25CLEVBQ0QsTUFBTyxDQUNMLEtBQVEsVUFDUixLQUFRLE9BQ1IsTUFBU0EsRUFBSSxZQUNiLFNBQVksRUFDYixFQUNELEdBQUksQ0FDRixNQUFTLFNBQVUyQixFQUFRLENBQ3pCM0IsRUFBSSxhQUFlLEVBQ3BCLEVBQ0QsS0FBUSxTQUFVMkIsRUFBUSxDQUN4QjNCLEVBQUksYUFBZSxFQUNwQixFQUNELFFBQVdBLEVBQUksU0FDaEIsRUFDRCxLQUFNLFNBQ1AsRUFBRSxjQUFlLENBQ2hCLFlBQWFBLEVBQUksWUFDakIsU0FBVUEsRUFBSSxRQUNmLEVBQUUsRUFBSyxDQUFDLEVBQUdFLEVBQUcsTUFBTyxDQUNwQixZQUFhLHlCQUNiLE1BQU8sQ0FDTCxLQUFRLE9BQ1QsRUFDRCxLQUFNLE9BQ1YsRUFBSyxDQUFDQSxFQUFHLE1BQU8sQ0FDWixZQUFhLHdCQUNqQixFQUFLLENBQUNBLEVBQUcsS0FBTSxDQUNYLElBQUssT0FDTCxZQUFhLHdCQUNiLEdBQUksQ0FDRixVQUFhLFNBQVV5QixFQUFRLENBQzdCM0IsRUFBSSxVQUFZLENBQ2pCLENBQ0YsQ0FDRixFQUFFQSxFQUFJLEdBQUcsR0FBSSxTQUFVMVMsRUFBTyxDQUM3QixPQUFRMFMsRUFBSSxhQUFhMVMsRUFBUSxDQUFDLEVBU2EwUyxFQUFJLEdBQUUsRUFUZkUsRUFBRyxLQUFNLENBQzdDLE1BQU8sQ0FDTCxTQUFVRixFQUFJLE9BQVMxUyxFQUFRLENBQ2hDLEVBQ0QsR0FBSSxDQUNGLE1BQVMsU0FBVXFVLEVBQVEsQ0FDekIzQixFQUFJLEtBQU8xUyxFQUFRLENBQ3BCLENBQ0YsQ0FDRixFQUFFLENBQUMwUyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxRQUFRMVMsRUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDNUMsQ0FBQSxFQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUc0UyxFQUFHLE1BQU8sQ0FDbEIsWUFBYSx3QkFDakIsRUFBSyxDQUFDQSxFQUFHLEtBQU0sQ0FDWCxJQUFLLFNBQ0wsWUFBYSwwQkFDYixHQUFJLENBQ0YsVUFBYSxTQUFVeUIsRUFBUSxDQUM3QjNCLEVBQUksVUFBWSxDQUNqQixDQUNGLENBQ0YsRUFBRUEsRUFBSSxHQUFHLEdBQUksU0FBVTFTLEVBQU8sQ0FDN0IsT0FBUTBTLEVBQUksZUFBZTFTLEVBQVEsQ0FBQyxFQVNXMFMsRUFBSSxHQUFFLEVBVGJFLEVBQUcsS0FBTSxDQUMvQyxNQUFPLENBQ0wsU0FBVUYsRUFBSSxTQUFXMVMsRUFBUSxDQUNsQyxFQUNELEdBQUksQ0FDRixNQUFTLFNBQVVxVSxFQUFRLENBQ3pCM0IsRUFBSSxPQUFTMVMsRUFBUSxDQUN0QixDQUNGLENBQ0YsRUFBRSxDQUFDMFMsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksUUFBUTFTLEVBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUEsRUFBRyxDQUFDLENBQUMsQ0FBQyxFQUFHNFMsRUFBRyxNQUFPLENBQ2xCLFlBQWEsd0JBQ2pCLEVBQUssQ0FBQ0EsRUFBRyxLQUFNLENBQ1gsSUFBSyxTQUNMLFlBQWEsMEJBQ2IsR0FBSSxDQUNGLFVBQWEsU0FBVXlCLEVBQVEsQ0FDN0IzQixFQUFJLFVBQVksQ0FDakIsQ0FDRixDQUNGLEVBQUVBLEVBQUksR0FBRyxHQUFJLFNBQVUxUyxFQUFPLENBQzdCLE9BQVEwUyxFQUFJLGVBQWUxUyxFQUFRLENBQUMsRUFTVzBTLEVBQUksR0FBRSxFQVRiRSxFQUFHLEtBQU0sQ0FDL0MsTUFBTyxDQUNMLFNBQVVGLEVBQUksU0FBVzFTLEVBQVEsQ0FDbEMsRUFDRCxHQUFJLENBQ0YsTUFBUyxTQUFVcVUsRUFBUSxDQUN6QjNCLEVBQUksT0FBUzFTLEVBQVEsQ0FDdEIsQ0FDRixDQUNGLEVBQUUsQ0FBQzBTLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFFBQVExUyxFQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUFHLEVBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQ2hCLEVBQ0k2UyxHQUFrQixDQUFFLGNDZ0N4QkMsR0FBQSxDQUNBLFdBQUEsQ0FBQSxRQUFBbUYsR0FBQSxXQUFBRSxDQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLEtBQUEsUUFBQSxJQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLE9BQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsYUFBQSxFQUNBLFlBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxXQUFBLEVBQUEsUUFBQSxTQUFBLEVBQ0EsYUFBQSxDQUFBLEtBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLGFBQUEsS0FBQSxNQUNBLFVBQUEsS0FBQSxLQUNBLGFBQUEsR0FDQSxVQUFBLEVBQ0EsUUFBQSxFQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsU0FBQSxDQUNBLE9BQUEsS0FBQSxjQUFBLEtBQUEsU0FDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxHQUNBLEtBQUEsUUFBQSxLQUFBLElBQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxJQUNBLEVBQ0EsRUFFQSxhQUFBLENBQ0EsT0FDQSxLQUFBLGNBSUFuRixFQUFBLElBQUEsS0FBQSxDQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUFBLFlBQUEsQ0FBQSxDQUFBLENBRUEsRUFFQSxLQUFBLENBQ0EsS0FBQSxDQUNBLE9BQUEsS0FBQSxZQUFBLFNBQUEsQ0FDQSxFQUVBLElBQUFLLEVBQUEsQ0FDQSxLQUFBLFFBQUEsQ0FBQSxLQUFBQSxFQUFBLENBQ0EsQ0FDQSxFQUVBLE9BQUEsQ0FDQSxLQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsV0FBQSxDQUNBLEVBRUEsSUFBQUMsRUFBQSxDQUNBLEtBQUEsUUFBQSxDQUFBLE9BQUFBLEVBQUEsQ0FDQSxD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S0FBQSxLQUFBLENBQ0EsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLGtCQUNBLFNBQUEsa0JBQ0EsU0FBQSxrQkFFQSxLQUFBK0YsRUFBQSxDQUNBLEtBQUEsWUFBQUEsQ0FDQSxFQUVBLFNBQUFDLEVBQUEsQ0FDQSxLQUFBLGdCQUFBQSxDQUNBLEVBRUEsZ0JBQUFDLEVBQUEsQ0FDQSxLQUFBLFNBQUEsS0FBQSxLQUFBLEtBQUEsTUFBQUEsQ0FBQSxFQUNBLEtBQUEsWUFBQSxLQUFBLFdBQ0EsS0FBQSxZQUFBLEtBQUEsVUFFQSxLQUFBLGdCQUFBLEVBQ0EsS0FBQSxNQUFBLGNBQUEsS0FBQSxLQUFBQSxDQUFBLENBQ0EsRUFFQSxZQUFBckUsRUFBQUMsRUFBQSxDQUNBRCxJQUFBQyxJQUNBLEtBQUEsZ0JBQUEsRUFDQSxLQUFBLE1BQUEsY0FBQUQsQ0FBQSxFQUVBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxZQUFBLEtBQUEsS0FDQSxLQUFBLGdCQUFBLEtBQUEsUUFDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLGdCQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsWUFBQW1FLEVBQUEsQ0FDQUEsRUFBQSxPQUFBLENBQUFBLEVBQUEsVUFBQUEsRUFBQSxRQUFBLEtBQUEsY0FDQSxLQUFBLFlBQUFBLEVBQUEsTUFFQSxFQUVBLGFBQUFBLEVBQUEsQ0FDQSxNQUFBN0MsRUFBQSxDQUNBLGdCQUFBNkMsRUFBQSxNQUNBLEVBQ0EsT0FBQUEsRUFBQSxPQUNBN0MsRUFBQSxlQUFBNkMsRUFBQSxNQUFBLEVBQUEsSUFFQTdDLENBQ0EsRUFFQSxpQkFBQSxDQUNBLEtBQUEsQ0FBQSxTQUFBZ0QsRUFBQSxTQUFBQyxFQUFBLE1BQUFDLEVBQUEsZ0JBQUFILEVBQUEsWUFBQUksQ0FBQSxFQUFBLEtBQ0FDLEVBQUFKLEVBQUFDLEVBQUEsRUFDQUksRUFBQSxLQUFBLFNBQUEsS0FBQSxLQUFBSCxFQUFBSCxDQUFBLEVBRUEsSUFBQTdFLEVBQUEsRUFDQUMsRUFBQSxFQUNBa0YsR0FBQUQsRUFDQWpGLEVBQUFrRixFQUNB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QUEsWUFBQSxDQUFBLE9BQUEsU0FBQSxXQUFBLEdBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLENBQ0EsUUFBQSxLQUFBLE9BQUEsS0FDQSxHQUFBLEtBQUEsWUFBQSxDQUFBLE9BQUEsWUFBQSxXQUFBLEdBQUEsQ0FDQSxDQUNBLEVBUUEsTUFBQSxDQUNBLE9BQUEsS0FBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE9BQUEsS0FBQSxRQUNBLEVBRUEsZUFBQSxDQUNBLE9BQUEsS0FBQSxhQUNBLEVBRUEsZUFBQSxDQUNBLE9BQUEsS0FBQSxhQUNBLEVBRUEsWUFBQSxDQUNBLE9BQUF0QyxHQUFBLEtBQUEsU0FBQSxLQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE9BQUEsS0FBQSxTQUNBLEtBQUEsa0JBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQSxLQUFBLE9BQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE9BQUEsS0FBQSxjQUFBZ1MsR0FBQUEsRUFBQSxPQUFBLENBQ0EsRUFFQSxXQUFBLENBQ0EsT0FBQSxLQUFBLGNBQUFBLEdBQUFBLEVBQUEsU0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE9BQUEsS0FBQSxlQUFBQSxHQUFBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsZUFBQUEsR0FBQUEsRUFBQSxXQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsS0FBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsT0FBQSxLQUFBLFdBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsU0FBQSxDQUFBLENBQUEsS0FBQSxJQUNBLEVBRUEsYUFBQSxDQUNBLEtBQUEsQ0FBQSxXQUFBL00sR0FBQSxLQUFBLE9BQ0EsTUFBQSxDQUFBLENBQUFBLEdBQUEsT0FBQSxLQUFBQSxDQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsT0FBQW9ELEdBQUEsU0FBQSxDQUNBLFNBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxTQUNBLENBQ0EsQ0FBQSxFQUVBLFlBQUEsQ0FDQSxPQUFBLE9BQUEsT0FBQSxLQUFBLGtCQUFBLENBQ0EsRUFFQSxPQUFBLENBQ0EsT0FBQSxPQUFBLE9BQUEsS0FBQSxhQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsT0FBQSxPQUFBLE9BQUEsS0FBQSxjQUFBLENBQ0EsRUFFQSxzQkFBQSxDQUNBLE9BQUEsS0FBQSx1QkFBQSxLQUFBLGtCQUFBLENBQ0EsRUFFQSxpQkFBQSxDQUNBLE9BQUEsS0FBQSx1QkFBQSxLQUFBLGFBQUEsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsT0FBQSxLQUFBLHVCQUFBLEtBQUEsY0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsRUFDQSxLQUFBLGtCQUFBLEVBRUEsS0FBQSxTQUFBLFNBQUEsS0FBQSxxQkFBQSxFQUNBLEtBQUEsVUFBQSxZQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsS0FBQSxVQUFBLFNBQUEsRUFDQSxLQUFBLFVBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLHdCQUFBcEosRUFBQStILEVBQUEsQ0FDQSxPQUFBLEtBQUEsc0JBQ0EsS0FBQSxxQkFBQS9ILEVBQUErSCxDQUNBLENBQ0EsRUFFQSx1QkFBQS9ILEVBQUErSCxFQUFBLENBQ0EsT0FBQSxLQUFBLHdCQUFBL0gsRUFBQStILENBQUEsRUFBQSxDQUFBLEdBQUEsSUFDQSxFQUVBLG9CQUFBL0gsRUFBQStILEVBQUEsQ0FDQSxPQUFBLEtBQUEsa0JBQUEsS0FBQSxxQkFBQS9ILEVBQUErSCxDQUFBLENBQ0EsRUFFQSxtQkFBQXRDLEVBQUFzQyxFQUFBLENBQ0EsT0FBQSxLQUFBLG9CQUFBdEMsRUFBQXNDLENBQUEsRUFBQSxDQUFBLEdBQUEsSUFDQSxFQUVBLGNBQUEwVixFQUFBMVYsRUFBQSxDQUNBLE9BQUEsS0FBQSxZQUFBLEtBQUEscUJBQUEwVixFQUFBMVYsQ0FBQSxDQUNBLEVBRUEsYUFBQTBWLEVBQUExVixFQUFBLENBQ0EsT0FBQSxLQUFBLGNBQUEwVixFQUFBMVYsQ0FBQSxFQUFBLENBQUEsR0FBQSxJQUNBLEVBRUEsb0JBQUEvSCxFQUFBK0gsRUFBQSxDQUNBLE9BQUEsS0FBQSxzQkFBQSxLQUFBLGlCQUFBL0gsRUFBQStILENBQUEsQ0FDQSxFQUVBLG1CQUFBL0gsRUFBQStILEVBQUEsQ0FDQSxPQUFBLEtBQUEsb0JBQUEvSCxFQUFBK0gsQ0FBQSxFQUFBLENBQUEsR0FBQSxJQUNBLEVBRUEsVUFBQTBWLEVBQUExVixFQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsS0FBQSxpQkFBQTBWLEVBQUExVixDQUFBLENBQ0EsRUFFQSxTQUFBMFYsRUFBQTFWLEVBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQTBWLEVBQUExVixDQUFBLEVBQUEsQ0FBQSxHQUFBLElBQ0EsRUFFQSxjQUFBbkYsRUFBQSxDQUNBLE9BQUEsS0FBQSxhQUFBLEtBQUEsV0FBQSxLQUFBQSxDQUFBLENBQ0EsRUFFQSxlQUFBQSxFQUFBLENBQ0EsT0FBQSxLQUFBLGFBQUEsS0FBQSxXQUFBLE1BQUFBLENBQUEsQ0FDQSxFQUVBLFNBQUE4YSxFQUFBLENBQ0EsS0FBQSxVQUFBLFNBQUEsQ0FFQSxRQUFBLENBQUEsT0FBQUEsQ0FBQSxDQUNBLENBQUEsR0FRQSxDQUFBLEtBQUEsUUFBQUEsR0FBQSxLQUFBLFlBQUEsS0FDQSxLQUFBLE9BQUFBLEVBRUEsRUFFQSxVQUFBLENBQ0EsS0FBQSxVQUFBLFFBQUEsQ0FDQSxFQUVBLGlCQUFBLENBQ0EsVUFBQXJiLEtBQUEsS0FBQSxXQUNBQSxFQUFBLGdCQUFBLENBRUEsRUFFQSxhQUFBLENBQ0EsVUFBQUEsS0FBQSxLQUFBLFdBQ0FBLEVBQUEsWUFBQSxDQUVBLEVBRUEsT0FBQSxRQUNBZ0IsRUFBQSxLQUFBLHdCQUFBLE1BQUFBLEVBQUEsUUFDQSxLQUFBLE9BQUEsRUFDQSxFQUVBLFlBQUEwRSxFQUFBUyxFQUFBLEdBQUEsQ0FDQSxLQUFBLENBQUEscUJBQUFtVixDQUFBLEVBQUEsS0FDQSxJQUFBQyxFQUNBLEdBQUE3VixFQUFBLENBQ0EsTUFBQThWLEVBQUEzYixFQUFBLFdBQUE2RixDQUFBLEVBQ0FBLEVBQ0EzRCxFQUFBQSxTQUFBMkQsQ0FBQSxFQUNBcU4sR0FBQXJOLEVBQUEsS0FBQXFOLENBQUEsRUFDQSxLQUNBd0ksRUFBQUMsRUFDQSxPQUFBLEtBQUFGLENBQUEsRUFBQSxPQUFBRSxDQUFBLEVBQ0FoYixFQUFBQSxRQUFBa0YsQ0FBQSxFQUNBQSxFQUNBLENBQUFBLENBQUEsQ0FDQSxDQUNBUyxHQUNBLEtBQUEsWUFBQSxFQUVBLElBQUFDLEVBQUEsR0FDQThVLEVBQUEsR0FDQUssTUFBQSxPQUFBLEtBQUFELENBQUEsR0FDQSxVQUFBM2QsS0FBQTRkLEVBQUEsQ0FDQSxNQUFBNVgsRUFBQSxLQUFBLHdCQUFBaEcsQ0FBQSxFQUNBLFVBQUFxQyxLQUFBMkQsRUFDQTNELEVBQUEsU0FBQW1HLENBQUEsSUFFQUEsR0FBQStVLEdBQ0FsYixFQUFBLE1BQUEsRUFFQWtiLEVBQUEsR0FDQTlVLEVBQUEsR0FHQSxDQUNBLE9BQUFELEdBQUEsQ0FBQUMsR0FDQSxLQUFBLGFBQUEsRUFFQUEsQ0FDQSxFQUVBLFVBQUFWLEVBQUEsQ0FDQSxPQUFBLEtBQUEsWUFBQUEsRUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLHFCQUFBa0IsRUFBQUMsRUFBQSxPQUNBLEtBQUEsWUFBQSxFQUNBLElBQUFxVSxFQUFBLEdBQ0EsTUFBQU8sRUFBQSxDQUFBLEVBQ0EsU0FBQSxDQUFBOWQsRUFBQStkLENBQUEsSUFBQSxPQUFBLFFBQUE5VSxDQUFBLEVBQUEsQ0FHQSxNQUFBK1UsRUFBQSxLQUFBLFdBQ0FqZSxFQUFBLEtBQUEsU0FBQUMsQ0FBQSxFQUNBQSxFQUlBaWUsRUFBQTdkLEVBQUEsY0FBQTRkLENBQUEsRUFDQSxJQUFBRSxFQUFBLEdBQ0EsTUFBQWxZLEVBQUEsS0FBQSx3QkFBQWlZLENBQUEsRUFDQSxVQUFBNWIsS0FBQTJELEVBQ0EzRCxFQUFBLHFCQUFBMGIsRUFBQVIsR0FBQXJVLENBQUEsSUFDQWdWLEVBQUEsR0FDQVgsRUFBQSxJQUdBLEdBQUEsQ0FBQVcsRUFBQSxDQUlBLE1BQUFDLEVBQUFGLEVBQUEsSUFBQSxFQUNBLEtBQUFBLEVBQUEsT0FBQSxHQUFBLENBQ0EsTUFBQWpZLEVBQUEsS0FBQSx3QkFBQWlZLENBQUEsRUFDQSxVQUFBNWIsS0FBQTJELEVBQ0EsR0FBQSxPQUFBM0MsRUFBQWhCLEVBQUEsc0JBQUEsWUFBQWdCLEVBQUEsS0FBQWhCLEVBQ0EyYixFQUNBSSxHQUFBLENBQ0EsSUFBQUYsRUFBQSxHQUNBLFVBQUE3YixLQUFBK2IsRUFBQSxDQUNBLE1BQUFMLEVBQUE5VSxFQUFBNUcsRUFBQSxRQUFBLEVBRUEwYixHQUNBMWIsRUFBQSxxQkFBQTBiLEVBQUFSLEdBQUFyVSxDQUFBLElBRUFnVixFQUFBLEdBQ0FYLEVBQUEsR0FFQSxDQUNBLE9BQUFXLENBQ0EsSUFNQSxPQUlBRCxFQUFBLElBQUEsQ0FDQSxDQUdBLE1BQUE3SSxFQUFBMVAsRUFBQSxTQUFBeVksQ0FBQSxFQUNBLFVBQUE5QyxLQUFBMEMsRUFBQSxDQUNBLE1BQUFwQixFQUFBdkgsRUFDQSxhQUFBQSxJQUNBLE9BQUEsS0FBQSxZQUNBMEksRUFBQSxLQUFBLEdBQUFuQixLQUFBdEIsRUFBQSxTQUFBLENBQ0EsQ0FDQSxDQUNBa0MsRUFBQSxFQUNBLENBQ0FBLEdBQ0EsS0FBQSxhQUFBTyxFQUFBLEtBQUE7QUFBQSxDQUFBLENBQUEsQ0FFQSxFQUVBLGFBQUEvVSxFQUFBLENBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsb0JBQ0EsS0FBQUEsR0FBQSx3Q0FDQSxDQUFBLENBQ0EsRUFFQSxXQUFBLENBSUEsT0FBQSxPQUFBLEtBQUEsS0FBQThGLEdBQUEsS0FBQSxPQUFBLEdBQUEsSUFBQSxDQUFBLEVBQ0EsS0FBQSxZQUFBLENBQ0EsRUFFQSxRQUFBdk4sRUFBQSxDQUNBLFVBQUFtRSxLQUFBbkUsRUFDQSxHQUFBbUUsS0FBQSxLQUFBLEtBQUEsQ0FDQSxLQUFBLEtBQUEsS0FBQSxLQUFBQSxFQUFBbkUsRUFBQW1FLENBQUEsQ0FBQSxFQUNBLFVBQUFwRCxLQUFBLEtBQUEsb0JBQUFvRCxDQUFBLEVBQ0FwRCxFQUFBLFVBQUEsQ0FFQSxDQUVBLEVBRUEsV0FBQWYsRUFBQSxDQUlBLE1BQUE4TixFQUFBLENBQUEsRUFDQSxTQUFBLENBQUEzSixFQUFBeEQsQ0FBQSxJQUFBLE9BQUEsUUFBQVgsQ0FBQSxHQUNBdUIsRUFBQSxRQUFBWixDQUFBLEdBQUFrQyxFQUFBLFNBQUFsQyxDQUFBLElBQ0EsS0FBQSxvQkFBQXdELENBQUEsRUFDQSxLQUFBcEQsR0FBQUEsRUFBQSxZQUFBLElBSUErTSxFQUFBM0osQ0FBQSxFQUFBeEQsR0FFQSxPQUFBbU4sQ0FDQSxFQUVBLFlBQUEsQ0FBQSxPQUFBdkwsRUFBQSxZQUFBLFdBQUEwTCxFQUFBLEVBQUEsRUFBQSxHQUFBLENBQ0EsT0FBQUQsR0FDQSxLQUFBLE9BQ0EsS0FBQSxhQUNBLEtBQUEsS0FDQSxLQUFBLFNBQUEsQ0FHQSxVQUFBLEtBQ0EsV0FBQUMsRUFDQSxPQUFBMUwsQ0FDQSxDQUNBLENBQ0EsRUFFQSxVQUFBdU8sRUFBQSxRQUdBL08sRUFBQSxLQUFBLHVCQUFBLElBQUEsTUFBQUEsRUFBQSx5QkFBQSxLQUFBK08sRUFDQSxFQUVBLG1CQUFBL1AsRUFBQStQLEVBQUEsT0FDQSxLQUFBLGVBQUEsS0FBQSxtQkFBQS9QLEVBQUErUCxDQUFBLEdBRUEvTyxFQUFBLEtBQUEsd0JBQUEsTUFBQUEsRUFBQSxtQkFBQWhCLEVBQUErUCxFQUNBLEVBRUEsY0FBQWlMLEVBQUFqTCxFQUFBLENBQ0EsS0FBQSxlQUFBLEtBQUEsY0FBQWlMLEVBQUFqTCxDQUFBLENBQ0EsRUFFQSxlQUFBM0IsRUFBQTJCLEVBQUEsQ0FDQSxLQUFBLGVBQUEsS0FBQSxlQUFBM0IsRUFBQTJCLENBQUEsQ0FDQSxFQUVBLGVBQUFpTSxFQUFBamIsRUFBQWdQLEVBQUEsQ0FDQSxNQUFBL00sRUFBQWpDLEVBQUEsS0FDQWdQLEVBQ0EsS0FBQSxLQUFBaU0sRUFBQWhaLEVBQUFqQyxDQUFBLEVBRUEsS0FBQSxRQUFBaWIsRUFBQWhaLENBQUEsQ0FFQSxFQUVBLHVCQUFBZ1osRUFBQSxDQUNBLE9BQUEsT0FBQSxPQUFBQSxDQUFBLEVBQUEsT0FBQSxDQUFBQyxFQUFBbGIsSUFBQSxDQUdBLEtBQUEsQ0FBQSxTQUFBcEQsQ0FBQSxFQUFBb0QsRUFFQSxPQURBa2IsRUFBQXRlLEtBQUFzZSxFQUFBdGUsR0FBQSxDQUFBLElBQ0EsS0FBQW9ELENBQUEsRUFDQWtiLENBQ0EsRUFBQSxFQUFBLENBQ0EsRUFFQSxZQUFBQSxFQUFBdGUsRUFBQStILEVBQUEsQ0FDQSxPQUFBdkgsRUFBQSxrQkFBQVIsQ0FBQSxFQUFBLFdBQUEsS0FBQSxRQUFBLEVBQ0EsS0FBQSxzQkFBQXNlLEVBQUF0ZSxFQUFBK0gsQ0FBQSxFQUNBLEtBQUEsa0JBQUF1VyxFQUFBdGUsRUFBQStILENBQUEsQ0FDQSxFQUVBLHNCQUFBdVcsRUFBQXRlLEVBQUErSCxFQUFBLENBQ0EsT0FBQSxLQUFBLGVBQ0F1VyxFQUFBOWQsRUFBQSxrQkFBQVIsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxFQUNBK0gsQ0FDQSxDQUNBLEVBRUEsa0JBQUF1VyxFQUFBN1ksRUFBQXNDLEVBQUEsQ0FDQSxPQUFBLEtBQUEsZUFDQXVXLEVBQUF2ZSxFQUFBLEtBQUEsU0FBQTBGLENBQUEsQ0FBQSxHQUFBLENBQUEsRUFDQXNDLENBQ0EsQ0FDQSxFQUVBLGVBQUFpQyxFQUFBakMsRUFBQSxDQUNBLE9BQUFBLEVBQUFpQyxFQUFBLE9BQUFqQyxDQUFBLEVBQUFpQyxDQUNBLENBQ0EsQ0FDQSxDQUFBLHNJQ2x0QkEsSUFBSTRKLEdBQVMsVUFBWSxDQUN2QixJQUFJQyxFQUFJLEtBQ0pDLEVBQUdELEVBQUksZUFDUEUsRUFBR0YsRUFBSSxNQUFNLElBQUlDLEVBRXJCLE9BQU9DLEVBQUcsY0FBZSxDQUN2QixZQUFhLHNCQUNiLE1BQU8sQ0FDTCxzQkFBdUJGLEVBQUksU0FDNUIsRUFDRCxNQUFPLENBQ0wsT0FBVUEsRUFBSSxPQUNkLFNBQVlBLEVBQUksU0FDaEIsS0FBUUEsRUFBSSxLQUNaLEtBQVFBLEVBQUksS0FDWixNQUFTQSxFQUFJLE1BQ2IsTUFBU0EsRUFBSSxVQUFZLEtBQU9BLEVBQUksTUFDcEMsUUFBVyxHQUNYLFNBQVlBLEVBQUksU0FDaEIsVUFBYUEsRUFBSSxVQUNqQixZQUFlQSxFQUFJLFdBQ3BCLEVBQ0QsWUFBYUEsRUFBSSxHQUFHLENBQUMsQ0FDbkIsSUFBSyxlQUNMLEdBQUksVUFBWSxDQUNkLE1BQU8sQ0FBQ0EsRUFBSSxXQUFhQSxFQUFJLFdBQWFBLEVBQUksU0FBV0UsRUFBRyxvQkFBcUIsQ0FDL0UsTUFBTyxDQUNMLFVBQWFGLEVBQUksVUFDakIsVUFBYUEsRUFBSSxVQUNqQixTQUFZQSxFQUFJLFNBQ2hCLFNBQVlBLEVBQUksU0FDaEIsT0FBVUEsRUFBSSxPQUNkLFNBQVlBLEVBQUksU0FDaEIsS0FBUUEsRUFBSSxLQUNaLEtBQVFBLEVBQUksS0FDWixNQUFTQSxFQUFJLEtBQ2QsRUFDRCxHQUFJLENBQ0YsT0FBVSxTQUFVMkIsRUFBUSxDQUMxQixPQUFPM0IsRUFBSSxNQUFNLFFBQVEsQ0FDMUIsQ0FDRixDQUNYLENBQVMsRUFBSUEsRUFBSSxHQUFFLENBQUUsQ0FDZCxFQUNELE1BQU8sRUFDYixDQUFLLENBQUMsQ0FDTixDQUFHLENBQ0gsRUFDSUcsR0FBa0IsQ0FBRSxjQ1V4QkMsR0FBQTdOLEVBQUEsVUFBQSxzQkFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFdBQUEsQ0FDQSxPQUFBK0gsR0FBQSxLQUFBLE1BQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxXQUFBLENBQUEsQ0FBQSxLQUFBLEtBQ0EsQ0FDQSxDQUNBLENBQUEsc0lDcEZBLElBQUl5RixHQUFTLFVBQVksQ0FDdkIsSUFBSUMsRUFBSSxLQUNKQyxFQUFHRCxFQUFJLGVBQ1BFLEVBQUdGLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPRCxFQUFJLGFBQWVBLEVBQUksaUJBQWlCLE9BQVMsRUFBSUUsRUFBRyxNQUFPLENBQ3BFLFdBQVksQ0FBQyxDQUNYLEtBQU0sT0FDTixRQUFTLFNBQ1QsTUFBT0YsRUFBSSxRQUNYLFdBQVksU0FDbEIsQ0FBSyxFQUNELFlBQWEsV0FDakIsRUFBSyxDQUFDQSxFQUFJLEdBQUdBLEVBQUksaUJBQWtCLFNBQVUwSyxFQUFNLENBQy9DLElBQUkxWixFQUFTMFosRUFBSyxPQUNoQnZlLEVBQVd1ZSxFQUFLLFNBQ2hCQyxFQUFpQkQsRUFBSyxlQUN0QmplLEVBQVNpZSxFQUFLLE9BQ2RFLEVBQVFGLEVBQUssTUFDZixNQUFPLENBQUMxWixFQUFPLFFBQVUsU0FBV2tQLEVBQUcsTUFBTyxDQUM1QyxZQUFhLFlBQ25CLENBQUssRUFBSUYsRUFBSSxLQUFNQSxFQUFJLGFBQWFoUCxDQUFNLEVBQUlrUCxFQUFHLGlCQUFrQixDQUM3RCxJQUFLeUssRUFDTCxNQUFPLENBQ0wsT0FBVTNaLEVBQ1YsU0FBWTdFLEVBQ1osS0FBUTZULEVBQUksS0FDWixLQUFRQSxFQUFJLEtBQ1osTUFBUzRLLEVBQ1QsT0FBVTVLLEVBQUksa0JBQ2QsT0FBVXZULEVBQ1YsU0FBWXVULEVBQUksU0FDaEIsZUFBa0JBLEVBQUksY0FDdkIsQ0FDUCxDQUFLLEVBQUlBLEVBQUksS0FBTWhQLEVBQU8sUUFBVSxRQUFVa1AsRUFBRyxNQUFPLENBQ2xELFlBQWEsWUFDbkIsQ0FBSyxFQUFJRixFQUFJLEdBQUUsQ0FBRSxDQUNkLENBQUEsQ0FBQyxFQUFHLENBQUMsRUFBSUEsRUFBSSxHQUFFLENBQ2xCLEVBQ0lHLEdBQWtCLENBQUUsY0NvQ3hCQyxHQUFBN04sRUFBQSxVQUFBLFlBQUEsQ0FDQSxTQUFBLENBQ0EsTUFBQSxDQUNBLGNBQUEsSUFBQSxLQUFBLFlBQ0EsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsSUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGNBQUEsQ0FDQSxPQUFBLEtBQUEsSUFBQSxLQUFBLEtBQUEsY0FBQSxDQUNBLEVBRUEsa0JBQUEsU0FRQSxNQUFBcUosR0FBQXBNLEVBQUEsS0FBQSxlQUFBLFlBQUFBLEVBQUEsZUFDQSxPQUFBLE9BQUEsVUFBQTBKLEVBQUEsS0FBQSxTQUFBLFlBQUFBLEVBQUEsYUFBQSxDQUFBLENBQUEsRUFBQSxJQUNBLENBQUEsQ0FBQXRILEVBQUFaLENBQUEsSUFBQSxDQUVBQSxFQUFBLEtBQUFZLEVBRUEsTUFBQW5GLEVBQUErTixHQUFBeEosQ0FBQSxFQUNBMlosRUFBQXplLEVBQUEsS0FBQSxTQUFBMEYsQ0FBQSxFQUNBLE1BQUEsQ0FDQSxPQUFBWixFQUNBLFNBQUF2RSxHQUFBLENBQUFtUCxFQUNBK08sRUFDQSxLQUFBLFNBQ0EsZUFBQUEsRUFDQSxPQUFBbGUsRUFDQSxNQUFBQSxFQUFBLEtBQUEsY0FBQW1GLENBQUEsRUFBQSxLQUFBLEtBQ0EsQ0FDQSxDQUNBLENBQ0EsRUFFQSxjQUFBLENBR0EsT0FBQSxLQUFBLGlCQUFBLFFBQ0EsQ0FBQSxDQUFBLE9BQUFaLEVBQUEsZUFBQTdFLENBQUEsSUFBQTBRLEdBQ0E3TCxFQUNBN0UsRUFDQSxLQUFBLGdCQUNBLEtBQUEsWUFDQSxDQUNBLENBQ0EsRUFFQSxtQkFBQSxDQUNBLE9BQUEsS0FBQSxRQUFBLEtBQUEsaUJBQUEsU0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFVBQUFvUyxFQUFBLENBQ0EsS0FBQSxnQkFBQSxjQUFBLEtBQUFBLENBQUEsQ0FDQSxFQUVBLE9BQUEsQ0FDQSxLQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsQ0FBQSxLQUFBLEtBQUEsSUFBQSxDQUVBLENBQ0EsQ0FDQSxDQUFBLHNJQ3BLTyxTQUFTc00sR0FBY3pjLEVBQU8sQ0FDbkMsTUFBTThGLEVBQ0o5RCxFQUFBQSxTQUFTaEMsQ0FBSyxHQUNkQSxFQUFNLE1BQU0sc0NBQXNDLEVBRXBELEdBQUk4RixFQUFPLENBQ1QsS0FBTSxDQUFHLENBQUE0VyxFQUFVQyxDQUFPLEVBQUk3VyxFQUM5QixPQUFPLFdBQVc0VyxDQUFRLEVBQUksV0FBV0MsQ0FBTyxDQUNwRCxLQUNJLFFBQU8sV0FBVzNjLENBQUssQ0FFM0IsQ0NiQSxJQUFJMlIsR0FBUyxVQUFZLENBQ3ZCLElBQUlDLEVBQUksS0FDSkMsRUFBR0QsRUFBSSxlQUNQRSxFQUFHRixFQUFJLE1BQU0sSUFBSUMsRUFFckIsT0FBT0MsRUFBRyxNQUFPLENBQ2YsV0FBWSxDQUFDLENBQ1gsS0FBTSxPQUNOLFFBQVMsU0FDVCxNQUFPRixFQUFJLGlCQUNYLFdBQVksa0JBQ2xCLENBQUssRUFDRCxZQUFhLGlCQUNiLE1BQU9BLEVBQUksZUFDWCxNQUFPQSxFQUFJLGNBQ1osRUFBRSxDQUFDQSxFQUFJLE1BQVFFLEVBQUcsYUFBYyxDQUMvQixNQUFPRixFQUFJLGVBQ1gsTUFBTyxDQUNMLE1BQVNBLEVBQUksTUFDYixTQUFZQSxFQUFJLGFBQ2pCLENBQ0wsQ0FBRyxFQUFJQSxFQUFJLEdBQUUsRUFBSUUsRUFBR0YsRUFBSSxpQkFBaUJBLEVBQUksT0FBTyxJQUFJLEVBQUcsQ0FDdkQsSUFBSyxZQUNMLFlBQWEsaUJBQ2IsTUFBT0EsRUFBSSxlQUNYLE1BQU8sQ0FDTCxPQUFVQSxFQUFJLE9BQ2QsU0FBWUEsRUFBSSxTQUNoQixLQUFRQSxFQUFJLEtBQ1osS0FBUUEsRUFBSSxLQUNaLE1BQVNBLEVBQUksTUFDYixPQUFVQSxFQUFJLE9BQ2QsT0FBVUEsRUFBSSxPQUNkLFNBQVlBLEVBQUksaUJBQ2pCLEVBQ0QsR0FBSSxDQUNGLE9BQVVBLEVBQUksUUFDZixDQUNMLENBQUcsRUFBR0UsRUFBRyxjQUFlLENBQ3BCLE1BQU8sQ0FDTCxPQUFVRixFQUFJLE1BQ2YsQ0FDTCxDQUFHLENBQUMsRUFBRyxDQUFDLENBQ1IsRUFDSUcsR0FBa0IsQ0FBRSxjQzJCeEJDLEdBQUE3TixFQUFBLFVBQUEsaUJBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxLQUFBLEVBQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFNBQUEsQ0FDQSxPQUFBLElBQUFoRSxFQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsT0FBQSxDQUNBLEVBRUEsYUFBQSxDQUNBLE9BQUE0SyxFQUFBLEtBQUEsTUFBQSxHQUFBLENBQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQW5JLENBQUEsRUFBQSxLQUNBLENBQUEsTUFBQWtOLENBQUEsRUFBQWxOLEVBQ0EsT0FDQWtOLElBQUEsS0FDQSxDQUFBLENBQUFBLEdBQUEsS0FBQSxZQUFBLGVBQUEsS0FBQSxlQUVBLEVBRUEsT0FBQSxDQUNBLE9BQUEsS0FBQSxTQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsRUFBQSxJQUNBLEVBRUEsZUFBQSxDQUVBLE9BQUEsS0FBQSxPQUFBLEtBQUEsU0FBQSxJQUNBLEVBRUEsZUFBQTVJLEVBQUEsUUFBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFDQSxTQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsWUFDQSxFQUNBLElBQUE2UixFQUFBLENBRUEsT0FBQUEsSUFBQSxPQUNBLEVBQ0EvVyxFQUFBQSxTQUFBK1csQ0FBQSxFQUNBQSxFQUFBLE1BQUEsbUJBQUEsRUFBQSxDQUFBLEVBQ0FBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsdUJBQUE3UixFQUFBLFFBQUEsQ0FDQSxLQUFBLE9BQ0EsSUFBQTZSLEVBQUEsQ0FDQSxPQUFBL1csRUFBQUEsU0FBQStXLENBQUEsR0FDQUEsRUFBQSxNQUFBLGFBQUEsRUFBQSxDQUFBLEdBQUEsSUFFQSxDQUNBLENBQUEsRUFFQSxpQkFBQTdSLEVBQUEsVUFBQSxDQUNBLEtBQUEsUUFDQSxTQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsY0FDQSxDQUNBLENBQUEsRUFFQSxrQkFBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FDQSxJQUFBMFAsRUFBQSxDQUNBLE9BQUFBLEdBQUEsS0FBQSxRQUNBLENBQ0EsQ0FBQSxFQUVBLGdCQUFBLENBQ0EsS0FBQSxDQUFBLE1BQUFnRyxDQUFBLEVBQUEsS0FBQSxPQUNBLE1BQUEsQ0FDQSxjQUFBLEtBQUEsT0FDQSxvQkFBQXZRLEdBQUEsS0FBQSxNQUFBLEVBQ0EsR0FDQXJLLEVBQUFBLFNBQUE0YSxDQUFBLEVBQ0EsQ0FBQSxDQUFBQSxDQUFBLEVBQUEsRUFBQSxFQUNBQSxDQUVBLENBQ0EsRUFFQSxnQkFBQSxDQUNBLE1BQUE3RCxFQUFBLEtBQUEsZUFFQThELEVBQ0EsQ0FBQSxLQUFBLE9BQUEsTUFBQSxFQUFBLFNBQUE5RCxDQUFBLEVBQUEsT0FDQSxLQUFBLEtBQUFBLENBQUEsRUFBQSxXQUFBQSxDQUFBLEVBQ0EsUUFBQSxLQUFBQSxDQUFBLEVBQUFBLEVBQ0EwRCxHQUFBMUQsQ0FBQSxFQUFBLElBRUEsT0FBQWhYLEVBQUFBLFNBQUE4YSxDQUFBLEVBQUEsR0FBQUEsS0FBQUEsQ0FDQSxFQUVBLGdCQUFBLENBRUEsTUFBQUMsRUFDQSxLQUFBLHlCQUFBLEtBQ0EsS0FBQSxpQkFBQSxPQUdBQyxFQUFBLEtBQUEseUJBQUEsSUFDQSxNQUFBLENBQ0EsS0FBQSxHQUFBRCxFQUFBLEVBQUEsS0FBQUMsRUFBQSxFQUFBLEtBQUEsS0FBQSxnQkFDQSxDQUNBLEVBRUEsZ0JBQUEsQ0FDQSxNQUFBQyxFQUFBLEtBQUEsaUJBQUEsT0FDQSxNQUFBLENBQ0EsY0FBQSxLQUFBLE9BQ0EsZ0JBQUEsS0FBQSxrQkFDQSxrQkFBQSxDQUFBQSxHQUFBLEtBQUEsaUJBQUEsT0FDQSxrQkFBQUEsRUFDQSxrQkFBQSxDQUFBLENBQUEsS0FBQSxNQUNBLENBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxTQUFBaFcsRUFBQSxDQUNBLEtBQUEsT0FBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxzSUNuTkEsSUFBSTJLLEdBQVMsVUFBWSxDQUN2QixJQUFJQyxFQUFJLEtBQ0pDLEVBQUdELEVBQUksZUFDUEUsRUFBR0YsRUFBSSxNQUFNLElBQUlDLEVBRXJCLE9BQU9DLEVBQUcsTUFBTyxDQUNmLFlBQWEsV0FDakIsRUFBS0YsRUFBSSxHQUFHQSxFQUFJLEtBQU0sU0FBVXFMLEVBQVdwZCxFQUFLLENBQzVDLE9BQU8rUixFQUFJLGFBQWFxTCxDQUFTLEVBQUluTCxFQUFHLGNBQWUsQ0FDckQsSUFBS2pTLEVBQ0wsWUFBYSxZQUNiLE1BQU8sQ0FDTCxHQUFNLENBQ0osS0FBTUEsQ0FDUCxFQUNELGVBQWdCLGFBQ2pCLENBQ0YsRUFBRSxDQUFDK1IsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksU0FBU3FMLEVBQVdwZCxDQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBSStSLEVBQUksR0FBRSxDQUMvRCxDQUFHLEVBQUcsQ0FBQyxDQUNQLEVBQ0lHLEdBQWtCLENBQUUsY0N1QnhCQyxHQUFBN04sRUFBQSxVQUFBLFlBQUEsQ0FDQSxNQUFBLENBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxDQUNBLENBQ0EsQ0FBQSxzSUNoREEsSUFBSXdOLEdBQVMsVUFBWSxDQUN2QixJQUFJQyxFQUFJLEtBQ0pDLEVBQUdELEVBQUksZUFDUEUsRUFBR0YsRUFBSSxNQUFNLElBQUlDLEVBRXJCLE9BQU9DLEVBQUdGLEVBQUksU0FBVSxDQUN0QixXQUFZLENBQUMsQ0FDWCxLQUFNLE9BQ04sUUFBUyxTQUNULE1BQU9BLEVBQUksVUFBWSxDQUFDQSxFQUFJLG1CQUFxQkEsRUFBSSxrQkFBa0IsU0FDdkUsV0FBWSw4REFDbEIsQ0FBSyxFQUNELElBQUssWUFDTCxZQUFhLGFBQ2IsR0FBSSxDQUNGLE9BQVUsU0FBVTJCLEVBQVEsQ0FDMUJBLEVBQU8sZUFBYyxDQUN0QixDQUNGLENBQ0wsRUFBSyxDQUFDekIsRUFBRyxRQUFTLENBQ2QsWUFBYSxrQkFDZCxFQUFFLENBQUNGLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFNBQVNBLEVBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUdFLEVBQUcsY0FBZSxDQUNoRSxZQUFhLG9CQUNiLE1BQU8sQ0FDTCxPQUFVRixFQUFJLFlBQ2QsU0FBWUEsRUFBSSxjQUNoQixLQUFRQSxFQUFJLFVBQ1osS0FBUUEsRUFBSSxLQUNaLE1BQVNBLEVBQUksTUFDYixTQUFZQSxFQUFJLFNBQ2hCLFdBQWNBLEVBQUksVUFDbkIsQ0FDTCxFQUFLLENBQUNFLEVBQUcsZUFBZ0IsQ0FDckIsTUFBTyxDQUNMLEtBQVEsVUFDUixRQUFXRixFQUFJLGNBQ2YsU0FBWUEsRUFBSSxjQUNoQixLQUFRQSxFQUFJLFVBQ1osS0FBUUEsRUFBSSxLQUNaLE1BQVNBLEVBQUksTUFDYixTQUFZQSxFQUFJLFFBQ2pCLEVBQ0QsS0FBTSxTQUNQLENBQUEsQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FDYixFQUNJRyxHQUFrQixDQUFFLGNDNkJ4QkMsR0FBQTdOLEVBQUEsVUFBQSxhQUFBLENBQ0EsT0FBQSxDQUFBME0sRUFBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsZ0JBQUEsSUFBQSxLQUNBLGNBQUEsSUFBQSxLQUFBLGlCQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLEVBQ0Esa0JBQUEsQ0FBQSxLQUFBMU0sRUFBQSxRQUFBLElBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsUUFBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsZ0JBQUEsQ0FDQSxPQUFBLElBQ0EsRUFFQSxjQUFBLENBQ0EsT0FBQSxLQUFBLGlCQUNBLEVBRUEsZUFBQSxDQUNBLE9BQUE2SyxFQUFBLEtBQUEsT0FBQSxPQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsT0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLFFBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsS0FBQSxPQUNBLEVBRUEsV0FBQSxDQUNBLE9BQUEsS0FBQSxTQUFBLEtBQUEsSUFDQSxFQUVBLGFBQUEsQ0FDQSxHQUFBLEtBQUEsV0FDQSxPQUFBLEtBQUEsT0FDQSxDQUdBLEtBQUEsQ0FBQSxLQUFBM1AsRUFBQSxHQUFBdUQsQ0FBQSxFQUFBLEtBQUEsT0FDQSxPQUFBQSxDQUNBLENBQ0EsRUFFQSxVQUFBLENBRUEsT0FBQSxLQUFBLFdBQUEsT0FBQSxLQUNBLEVBRUEsZUFBQSxDQUlBLE9BQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLGdCQUFBLFFBQ0EsRUFFQSxRQUFBc0UsRUFBQSxVQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsRUFHQSxLQUFBLENBQUEsS0FBQTdILEdBQUEsS0FBQSxPQUNBQSxJQUNBLEtBQUEsUUFBQVksRUFBQSxXQUFBWixDQUFBLEVBQ0FBLEVBQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxFQUNBQSxFQUVBLEVBRUEsZUFBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsVUFBQThRLEVBQUEsQ0FHQSxLQUFBLGdCQUFBLGVBQUEsS0FBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLHNJQ2pMQSxJQUFJd0IsR0FBUyxVQUFZLENBQ3ZCLElBQUlDLEVBQUksS0FDSkMsRUFBR0QsRUFBSSxlQUNQRSxFQUFHRixFQUFJLE1BQU0sSUFBSUMsRUFFckIsT0FBT0QsRUFBSSxPQUFPLE9BQVMsRUFBSUUsRUFBRyxNQUFPLENBQ3ZDLFlBQWEsYUFDZCxFQUFFRixFQUFJLEdBQUdBLEVBQUksT0FBUSxTQUFVMEssRUFBTSxDQUNwQyxJQUFJMVosRUFBUzBaLEVBQUssT0FDaEJ2ZSxFQUFXdWUsRUFBSyxTQUNoQmpOLEVBQWVpTixFQUFLLGFBQ3RCLE9BQU8xSyxFQUFJLGFBQWFoUCxDQUFNLEVBQUlrUCxFQUFHLGFBQWMsQ0FDakQsSUFBS0YsRUFBSSxZQUFZN1QsRUFBVXNSLENBQVksRUFDM0MsTUFBTyxDQUNMLE9BQVV6TSxFQUNWLFNBQVk3RSxFQUNaLEtBQVE2VCxFQUFJLEtBQ1osS0FBUUEsRUFBSSxLQUNaLE1BQVNBLEVBQUksY0FBY2hQLEVBQU8sSUFBSSxFQUN0QyxTQUFZQSxFQUFPLFVBQVksS0FBT0EsRUFBTyxTQUFXZ1AsRUFBSSxTQUM1RCxrQkFBcUJ2QyxDQUN0QixDQUNQLENBQUssRUFBSXVDLEVBQUksSUFDVixDQUFBLEVBQUcsQ0FBQyxFQUFJQSxFQUFJLEdBQUUsQ0FDakIsRUFDSUcsR0FBa0IsQ0FBRSxjQ0t4QkMsR0FBQTdOLEVBQUEsVUFBQSxjQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE1BQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxZQUFBcEcsRUFBQXNSLEVBQUEsQ0FHQSxPQUFBQSxFQUFBLEdBQUFBLEVBQUEsT0FBQXRSLElBQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsc0lDOUNBLElBQUk0VCxHQUFTLFVBQVksQ0FDdkIsSUFBSUMsRUFBSSxLQUNKQyxFQUFHRCxFQUFJLGVBQ1BFLEVBQUdGLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPRCxFQUFJLGVBQWlCQSxFQUFJLE9BQU8sUUFBVUUsRUFBRyxNQUFPRixFQUFJLEdBQUcsQ0FDaEUsWUFBYSxjQUNqQixFQUFLQSxFQUFJLFVBQVUsRUFBRyxDQUFDQSxFQUFJLEdBQUdBLEVBQUksY0FBZSxTQUFVc0wsRUFBY0MsRUFBZ0IsQ0FDckYsT0FBT3ZMLEVBQUksYUFBYXNMLENBQVksRUFBSXBMLEVBQUcsaUJBQWtCLENBQzNELElBQUtxTCxFQUNMLE1BQU8sQ0FDTCxPQUFVRCxFQUNWLFNBQVlDLEVBQ1osS0FBUXZMLEVBQUksS0FDWixLQUFRQSxFQUFJLEtBQ1osTUFBU0EsRUFBSSxjQUFjc0wsRUFBYSxJQUFJLEVBQzVDLFNBQVl0TCxFQUFJLFNBQ2hCLGVBQWtCLEVBQ25CLENBQ1AsQ0FBSyxFQUFJQSxFQUFJLElBQ2IsQ0FBRyxFQUFHQSxFQUFJLEdBQUdBLEVBQUksT0FBTyxRQUFTLFNBQVV3TCxFQUFNLENBQzdDLE9BQU9BLEVBQUssSUFBTXRMLEVBQUcsTUFBTyxDQUMxQixZQUFhLGdCQUNuQixFQUFPLENBQUNBLEVBQUcsYUFBYyxDQUNuQixNQUFPLENBQ0wsS0FBUXNMLENBQ1QsQ0FDRixDQUFBLENBQUMsRUFBRyxDQUFDLEVBQUl4TCxFQUFJLEdBQUUsQ0FDakIsQ0FBQSxDQUFDLEVBQUcsQ0FBQyxFQUFJQSxFQUFJLEdBQUUsQ0FDbEIsRUFDSUcsR0FBa0IsQ0FBRSxjQ1F4QkMsR0FBQTdOLEVBQUEsVUFBQSxlQUFBLENBQ0EsUUFBQSxDQUNBLGNBQUEsSUFBQSxJQUNBLEVBRUEsTUFBQSxDQUNBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsZUFBQSxDQUVBLEtBQUEsQ0FBQSxTQUFBcEcsRUFBQSxRQUFBaUcsQ0FBQSxFQUFBLEtBQ0EsT0FBQUEsRUFDQSxPQUFBLE9BQUFBLENBQUEsRUFBQSxPQUFBLENBQUFtRixFQUFBekYsS0FDQXlGLEVBQUFyTCxFQUFBQyxFQUFBMkYsRUFBQSxJQUFBLENBQUEsRUFBQUEsRUFDQXlGLEdBQ0EsRUFBQSxFQUNBLElBQ0EsQ0FDQSxDQUNBLENBQUEsc0lDaEVBLElBQUl3SSxHQUFTLFVBQVksQ0FDdkIsSUFBSUMsRUFBSSxLQUNKQyxFQUFHRCxFQUFJLGVBQ1BFLEVBQUdGLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPQyxFQUFHLGVBQWdCLENBQ3hCLFlBQWEsdUNBQ2IsTUFBTyxDQUNMLFFBQVdGLEVBQUksUUFDZixTQUFZQSxFQUFJLFNBQ2hCLEtBQVFBLEVBQUksS0FDWixLQUFRQSxFQUFJLEtBQ1osTUFBU0EsRUFBSSxLQUNkLEVBQ0QsR0FBSSxDQUNGLE1BQVMsU0FBVTJCLEVBQVEsQ0FDekJBLEVBQU8sZ0JBQWUsQ0FDdkIsQ0FDRixDQUNMLEVBQUssQ0FBQzNCLEVBQUksWUFBY0UsRUFBRyxJQUFLRixFQUFJLEdBQUcsQ0FDbkMsWUFBYSxhQUNqQixFQUFLLElBQUtBLEVBQUksb0JBQW9CQSxFQUFJLE1BQU0sSUFBSSxFQUFHLEVBQUssQ0FBQyxFQUFJQSxFQUFJLEdBQUksRUFBRUEsRUFBSSxXQUFhRSxFQUFHLGNBQWVGLEVBQUksR0FBRyxDQUM3RyxZQUFhLGNBQ2IsTUFBTyxDQUNMLEdBQU0sQ0FDSixLQUFNQSxFQUFJLFFBQ1gsRUFDRCxPQUFVLEVBQ1gsQ0FDTCxFQUFLLGNBQWVBLEVBQUksb0JBQW9CQSxFQUFJLE1BQU0sSUFBSSxFQUFHLEVBQUssQ0FBQyxFQUFJQSxFQUFJLEdBQUksRUFBRUEsRUFBSSxZQUFjRSxFQUFHLHFCQUFzQixDQUN4SCxNQUFPLENBQ0wsT0FBVUYsRUFBSSxPQUNkLEtBQVFBLEVBQUksV0FDWixLQUFRQSxFQUFJLE1BQU0sT0FDbEIsS0FBUUEsRUFBSSxnQkFDYixDQUNMLENBQUcsRUFBSUEsRUFBSSxHQUFFLEVBQUlBLEVBQUksWUFBY0UsRUFBRyxTQUFVRixFQUFJLEdBQUcsQ0FDbkQsWUFBYSxjQUNiLE1BQU8sQ0FDTCxLQUFRLFFBQ1QsRUFDRCxHQUFJLENBQ0YsTUFBUyxTQUFVMkIsRUFBUSxDQUN6QixPQUFPM0IsRUFBSSxNQUFNLFFBQVEsQ0FDMUIsQ0FDRixDQUNGLEVBQUUsU0FBVUEsRUFBSSxvQkFBb0JBLEVBQUksTUFBTSxNQUFNLEVBQUcsRUFBSyxDQUFDLEVBQUlBLEVBQUksR0FBRSxDQUFFLEVBQUcsQ0FBQyxDQUNoRixFQUNJRyxHQUFrQixDQUFFLGNDRHhCQyxHQUFBN04sRUFBQSxVQUFBLG9CQUFBLENBQ0EsTUFBQSxDQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxLQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFdBQUEsQ0FDQSxPQUFBLEtBQUEsU0FBQSxLQUFBLE9BQUEsSUFBQSxDQUNBLEVBRUEsYUFBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLFdBQUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxVQUFBLEdBQUEsQ0FBQSxDQUFBLEtBQUEsUUFDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxXQUFBLEdBQUEsQ0FBQSxDQUFBLEtBQUEsVUFDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxXQUFBLENBQ0EsRUFFQSxrQkFBQSxPQUNBLFFBRUEvQyxFQUFBLEtBQUEsT0FBQSxZQUFBLFlBQUFBLEVBQUEsUUFJQSxLQUFBLFdBQ0EsR0FBQWljLEVBQUFBLFdBQUEsS0FBQSxNQUFBLE1BQUEsS0FBQSxLQUFBLGFBRUEsSUFFQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFVBQUE3WixFQUFBLENBSUEsTUFBQSxDQUFBLEVBQUEsS0FBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQUEsQ0FBQSxJQUFBLEdBQ0EsQ0FDQSxDQUNBLENBQUEsc0lDM0dBLElBQUltTyxHQUFTLFVBQVksQ0FDdkIsSUFBSUMsRUFBSSxLQUNKQyxFQUFHRCxFQUFJLGVBQ1BFLEVBQUdGLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPQyxFQUFHLE1BQU8sQ0FDZixZQUFhLG9CQUNkLEVBQUUsQ0FBQ0YsRUFBSSxhQUFlLENBQUNFLEVBQUcsU0FBVSxDQUNuQyxZQUFhLGNBQ2IsTUFBTyxlQUFlRixFQUFJLE9BQzFCLE1BQU8sQ0FDTCxLQUFRLFNBQ1IsTUFBU0EsRUFBSSxTQUFTQSxFQUFJLElBQUksQ0FDL0IsRUFDRCxHQUFJLENBQ0YsVUFBYSxTQUFVMkIsRUFBUSxDQUM3QixPQUFBQSxFQUFPLGdCQUFlLEVBQ2YzQixFQUFJLHFCQUNaLENBQ0YsQ0FDRixFQUFFLENBQUNBLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBR0UsRUFBRyxLQUFNLENBQ3ZDLFlBQWEsZ0JBQ2IsTUFBTyxDQUNMLFlBQWFGLEVBQUksU0FBUyxJQUMzQixDQUNMLEVBQUtBLEVBQUksR0FBR0EsRUFBSSxNQUFPLFNBQVUxRyxFQUFNMUksRUFBTSxDQUN6QyxPQUFPc1AsRUFBRyxLQUFNLENBQUNGLEVBQUksWUFBWTFHLENBQUksRUFBSTRHLEVBQUcsSUFBSyxDQUMvQyxNQUFPLGFBQWF0UCxJQUNwQixHQUFJLENBQ0YsVUFBYSxTQUFVK1EsRUFBUSxDQUM3QixPQUFBQSxFQUFPLGdCQUFlLEVBQ2YzQixFQUFJLG9CQUFvQnBQLENBQUksQ0FDcEMsRUFDRCxRQUFXLFNBQVUrUSxFQUFRLENBQzNCLE9BQU8zQixFQUFJLGtCQUFrQnBQLENBQUksQ0FDbEMsQ0FDRixDQUNGLEVBQUUsQ0FBQ29QLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFNBQVMxRyxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBSTBHLEVBQUksR0FBRSxDQUFFLENBQUMsQ0FDckQsQ0FBQSxFQUFHLENBQUMsQ0FBQyxFQUFJRSxFQUFHLFNBQVUsQ0FDckIsWUFBYSxjQUNiLE1BQU8sZUFBZUYsRUFBSSxPQUMxQixNQUFPLENBQ0wsS0FBUUEsRUFBSSxVQUFZLFNBQVcsU0FDbkMsTUFBU0EsRUFBSSxTQUFTQSxFQUFJLElBQUksQ0FDL0IsRUFDRCxHQUFJLENBQ0YsTUFBUyxTQUFVMkIsRUFBUSxDQUN6QixPQUFPM0IsRUFBSSxXQUFXQSxFQUFJLE1BQU0sT0FBTyxDQUN4QyxDQUNGLENBQ0YsRUFBRSxDQUFDQSxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQ3BDLEVBQ0lHLEdBQWtCLENBQUUsY0NYeEJDLEdBQUE3TixFQUFBLFVBQUEscUJBQUEsQ0FDQSxPQUFBLENBQUFpVyxFQUFBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsT0FBQSxDQUNBLE9BQUF4TyxFQUFBLEtBQUEsT0FBQSxLQUFBLE9BQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxPQUFBTyxHQUFBLEtBQUEsTUFBQSxDQUNBLEVBRUEsY0FBQSxDQUNBLE9BQUEsT0FBQSxLQUFBLEtBQUEsS0FBQSxFQUFBLE9BQUEsR0FBQSxDQUFBLEtBQUEsTUFBQSxPQUNBLENBQ0EsRUFFQSxRQUFBLENBQ0EsWUFBQWpCLEVBQUEsQ0FFQSxPQUFBQSxFQUFBLFlBQUEsRUFDQSxFQUVBLFdBQUFBLEVBQUExSSxFQUFBLEtBQUEsQ0FDQSxHQUFBLEtBQUEsWUFBQTBJLENBQUEsRUFDQSxLQUFBLFVBQ0EsS0FBQSxnQkFBQSxXQUFBQSxFQUFBMUksQ0FBQSxFQUVBLEtBQUEsUUFBQSxLQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsY0FDQSxNQUFBLENBQUEsS0FBQUEsQ0FBQSxFQUNBLE9BQUEsRUFDQSxDQUFBLE1BR0EsT0FBQSxJQUFBLE1BQUEsMkNBQUEsQ0FFQSxFQUVBLGlCQUFBQSxFQUFBLENBQ0EsS0FBQSxXQUFBLEtBQUEsTUFBQUEsQ0FBQSxFQUFBQSxDQUFBLEVBQ0EsS0FBQSxnQkFBQSxFQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsc0lDNUZBLElBQUltUCxHQUFTLFVBQVksQ0FDdkIsSUFBSUMsRUFBSSxLQUNKQyxFQUFHRCxFQUFJLGVBQ1BFLEVBQUdGLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPRCxFQUFJLFVBQVlFLEVBQUcsTUFBTyxDQUMvQixZQUFhLGdEQUNqQixFQUFLLENBQUNBLEVBQUcsU0FBVSxDQUNmLElBQUssV0FDTCxZQUFhLCtCQUNiLE1BQU8sQ0FDTCxLQUFRLFNBQ1IsTUFBUyxZQUNULFNBQVksQ0FBQ0YsRUFBSSxXQUNsQixFQUNELEdBQUksQ0FDRixNQUFTQSxFQUFJLE1BQ2QsQ0FDTCxDQUFHLEVBQUdFLEVBQUcsU0FBVSxDQUNmLFlBQWEsZ0NBQ2IsTUFBTyxDQUNMLEtBQVEsU0FDUixNQUFTLGFBQ1QsU0FBWSxDQUFDRixFQUFJLFlBQ2xCLEVBQ0QsR0FBSSxDQUNGLE1BQVNBLEVBQUksT0FDZCxDQUNGLENBQUEsQ0FBQyxDQUFDLEVBQUlBLEVBQUksSUFDYixFQUNJRyxHQUFrQixDQUFFLEVDSnhCLE1BQUFDLEdBQUE3TixFQUFBLFVBQUEsaUJBQUEsQ0FDQSxPQUFBLENBQUE4VSxDQUFBLEVBRUEsTUFBQSxDQUNBLFVBQUEsQ0FBQSxLQUFBLENBQUEsUUFBQSxNQUFBLEVBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxZQUFBLEdBQ0EsYUFBQSxHQUNBLGFBQUEsRUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGtCQUFBLENBQ0EsT0FBQS9XLEVBQUFBLFNBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQSxVQUFBLENBQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLENBQUEsS0FBQWlMLEdBQUEsS0FBQSxpQkFDQSxPQUFBQSxFQUNBbVEsR0FBQW5RLEVBQUEsS0FBQSxLQUFBLElBQUFoTixFQUFBLEtBQUEsQ0FDQSxjQUFBbWQsQ0FDQSxDQUFBLENBQUEsRUFDQUEsR0FBQS9RLEVBQUEsTUFBQStRLENBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxLQUFBLENBQUEsTUFBQUMsR0FBQSxLQUFBLGlCQUNBLE9BQUFBLEVBQ0FELEdBQUFDLEVBQUEsS0FBQSxLQUFBLElBQUFwZCxFQUFBLEtBQUEsQ0FDQSxjQUFBbWQsQ0FDQSxDQUFBLENBQUEsRUFDQUEsR0FBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUdBLEtBQUEsTUFBQSxTQUFBLENBQ0EsS0FBQSxLQUFBLGNBQ0EsQ0FBQSxFQUNBLEtBQUEsTUFBQSxPQUFBLENBQ0EsTUFBQSxLQUFBLGNBQ0EsQ0FBQSxFQUNBLEtBQUEsT0FBQSxPQUFBLENBRUEsVUFBQSxHQUNBLFFBQUEsQ0FBQXRNLEVBQUFDLElBQUEsQ0FDQUQsSUFBQUMsR0FDQSxLQUFBLGVBQUEsQ0FFQSxDQUNBLENBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLGlCQUFBdU0sRUFBQSxlQUVBLEdBQUEsQ0FBQSxjQUFBRixHQUFBLEtBQUEsU0FDQSxHQUFBLENBQ0EsTUFBQUcsRUFBQSxPQUFBM1MsR0FBQTFKLEVBQUEsVUFBQSxZQUFBLFlBQUFBLEVBQUEsV0FBQSxZQUFBMEosRUFBQSxLQUFBMUosSUFDQSxLQUFBLGNBQUFxYyxJQUdBLE9BQUFDLEdBQUE1TCxFQUFBLFVBQUEsWUFBQSxZQUFBQSxFQUFBLFlBQUEsWUFBQTRMLEVBQUEsS0FBQTVMLEVBQUEyTCxJQUNBLEtBQUEsYUFBQSxJQUVBQSxJQUNBSCxFQUFBLEtBQUEsTUFBQUcsQ0FBQSxFQUVBLE9BQUFyRSxFQUFBLENBQ0FvRSxJQUNBLFFBQUEsTUFBQXBFLEVBQUFBLEVBQUEsS0FBQUEsRUFBQSxPQUFBLEVBQ0FBLEVBQUEsT0FBQSxlQUNBLE1BQUF1RSxFQUFBQTtBQUFBQTtBQUFBQSxnQkFFQXZFLEVBQUE7QUFBQSxhQUNBLEVBR0EsQ0FDQSxLQUFBLENBQUEsUUFBQXdFLEVBQUEsR0FBQXZlLENBQUEsRUFBQWllLEdBQUEsQ0FBQSxFQUNBLE9BQUFNLE1BQUFDLEVBQUEsS0FBQSxrQkFBQSxZQUFBQSxFQUFBLE9BQUEsTUFBQXhlLEVBQUEsSUFDQSxFQUVBLE1BQUEsZ0JBQUEsQ0FDQSxLQUFBLFlBQUEsQ0FBQSxDQUFBLEtBQUEsS0FHQSxLQUFBLGFBQUEsQ0FBQSxDQUFBLE1BQUEsS0FBQSxpQkFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLFFBQUEsV0FDQSxJQUFBQSxHQUFBK0IsRUFBQSxLQUFBLGtCQUFBLFlBQUFBLEVBQUEsY0FDQSxHQUFBLENBQ0EvQixFQUFBQSxHQUFBLEtBQUEsU0FBQUEsQ0FBQSxFQUVBLEtBQUEsU0FBQSxjQUFBQSxFQUNBLEdBQUEsQ0FDQSxNQUFBb2UsRUFBQSxLQUFBLFVBQUFwZSxFQUFBLEtBQUEsQ0FBQSxFQUNBLE9BQUF5UyxHQUFBaEgsRUFBQSxVQUFBLFlBQUEsWUFBQUEsRUFBQSxZQUFBLFlBQUFnSCxFQUFBLEtBQUFoSCxFQUFBMlMsSUFFQSxNQUFBLEtBQUEsZUFBQSxDQUNBLE9BQUFyRSxFQUFBLENBQ0EsUUFBQSxNQUFBQSxFQUFBQSxFQUFBLEtBQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsT0FBQXpYLEVBQUEsQ0FDQSxRQUFBLE1BQUFBLENBQUEsRUFDQSxNQUFBQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLEVBRUEsTUFBQSxTQUFBLENBQ0EsSUFBQXRDLEVBQUEsTUFBQSxLQUFBLGlCQUFBLEVBQUEsRUFDQSxHQUFBLENBQ0FBLEVBQUFBLEdBQUEsS0FBQSxVQUFBQSxDQUFBLEVBQ0FBLEdBQ0EsS0FBQSxnQkFBQSxRQUFBQSxDQUFBLENBRUEsT0FBQXNDLEVBQUEsQ0FDQSxRQUFBLE1BQUFBLENBQUEsRUFDQSxNQUFBQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLHNJQzVKZW1jLEdBQUEsQ0FDYixNQUFPLENBQ0wsTUFBTyxDQUNMLFVBQVcsRUFDWixDQUNGLEVBRUQsUUFBUyxDQUNQLFdBQVc3TCxFQUFXLENBQUUsV0FBQThMLEVBQWEsR0FBTyxXQUFBQyxFQUFhLEVBQU8sRUFBRyxHQUFJLENBQ2pFLENBQUMsS0FBSyxVQUFZLENBQUMvTCxJQUNyQixLQUFLLFVBQVksQ0FBQyxDQUFDQSxFQUNmOEwsR0FDRixLQUFLLGNBQWMsZ0JBQWdCOUwsQ0FBUyxFQUUxQytMLEdBQ0YsS0FBSyxjQUFjLFdBQVcsS0FBSyxTQUFTLEVBR2pELENBQ0YsQ0FDSCxFQ2JlQyxHQUFBLENBQ2IsT0FBUSxDQUFDckQsR0FBV2tELEVBQVksRUFFaEMsU0FBVSxDQUNSLE1BQU8sQ0FDTCxtQkFBb0IsSUFBTSxLQUUxQixPQUFRLElBQU0sS0FBSyxNQUNuQixhQUFjLElBQU0sS0FBSyxPQUMxQixDQUNGLEVBRUQsTUFBTyxDQUNMLE1BQU8sQ0FDTCxXQUFZLElBQ2IsQ0FDRixFQUVELFNBQVUsQ0FDUixtQkFBb0IsQ0FDbEIsT0FBTyxJQUNSLEVBRUQsVUFBVyxDQUdULE9BQU8sS0FBSyxZQUFhLENBQzFCLEVBRUQsY0FBZSxDQUViLE1BQU8sQ0FBQyxDQUFDLEtBQUssUUFDZixFQUVELGFBQWMsQ0FLWixNQUFPLEVBQ1IsRUFFRCxhQUFjLENBS1osTUFBTTVTLEVBQU8sS0FBSyxjQUNsQixNQUNFLENBQUMsS0FBSyxjQUNOLENBQUMsS0FBSyxhQUNOQSxJQUNFQSxFQUFLLGFBQ0xBLEVBQUssV0FHVixFQUVELGVBQWdCLENBQ2QsT0FDRSxLQUFLLGFBQ0wsa0ZBR0gsRUFFRCxZQUFhLENBQ1gsTUFDRSxDQUFDLEtBQUssYUFDTixDQUFDLEtBQUssU0FFVCxFQUdELFNBQVUsQ0FFUixNQUFPLENBQUMsQ0FBQyxLQUFLLFVBQ2YsRUFFRCxPQUFRLENBR04sT0FBTyxLQUFLLFNBQVUsQ0FDdkIsRUFFRCxpQkFBa0IsQ0FFaEIsS0FBTSxDQUFFLFNBQVVnVCxDQUFRLEVBQUcsS0FBSyxhQUNsQyxHQUFJLEtBQUssY0FBZ0JBLEVBQVEsQ0FDL0IsS0FBTSxDQUFFLEtBQUFuRyxFQUFPLENBQUcsRUFBRyxLQUFLLE9BQVMsQ0FBRSxFQUMvQjNFLEVBQVEyRSxFQUFPbUcsRUFDckIsTUFBTyxDQUFDOUssRUFBT0EsRUFBUThLLEVBQVMsQ0FBQyxDQUNsQyxDQUNGLEVBRUQsYUFBYyxDQUNaLE1BQU01SyxFQUFRLEtBQUssZ0JBQ2IsQ0FBRSxLQUFBeUUsRUFBTSxHQUFHalUsQ0FBTyxFQUFHLEtBQUssT0FBUyxDQUFFLEVBQzNDLE1BQU8sQ0FDTCxHQUFHQSxFQUNILEdBQUl3UCxHQUFTLENBR1gsTUFBT0EsRUFBTSxLQUFLLEdBQUcsQ0FDL0IsQ0FDTyxDQUNGLENBQ0YsRUFFRCxTQUFVLEVBRUosS0FBSyxjQUFnQixLQUFLLGFBQzVCLEtBQUssVUFBVyxDQUVuQixFQUVELFFBQVMsQ0FDUCxhQUFjLFNBR1osT0FBT3pRLEdBQVl6QixFQUFBLEtBQUssZUFBTCxZQUFBQSxFQUFtQixTQUFVLENBQzlDLEtBQU0sYUFDTixTQUFRMEosRUFBQSxLQUFLLHNCQUFMLFlBQUFBLEVBQTBCLFdBQVksSUFDdEQsQ0FBTyxDQUNGLEVBRUQsVUFBVyxDQUNULE1BQU1xVCxFQUFRLEtBQUssT0FBUSxFQUMzQixPQUFPLEtBQUssWUFDUixDQUNBLEdBQUdBLEVBRUgsT0FBUSxNQUNSLFFBQVMsUUFDVCxLQUFNLFFBQ04sTUFBTyxVQUNQLE9BQVEsU0FDUixRQUFTLFNBQ1YsRUFDQ0EsQ0FDTCxFQUdELFdBQVksQ0FDVixLQUFLLFdBQWEsSUFDbkIsRUFHRCxRQUFROWUsRUFBTSxDQUNaLEtBQUssV0FBYUEsQ0FDbkIsRUFFRCxXQUFZLENBSVYsS0FBSyxXQUFZLENBQ2xCLEVBRUQsWUFBYSxDQUNQLEtBQUssYUFDSCxLQUFLLFFBQ1AsS0FBSyxXQUFZLEVBRWpCLEtBQUssU0FBUyxFQUFJLEVBR3ZCLEVBRUQsWUFBYSxDQUNYLEtBQUssU0FBUyxFQUFLLENBQ3BCLEVBRUQsU0FBUytlLEVBQU8sQ0FDVCxLQUFLLGNBQ0pBLEdBQ0YsS0FBSyxVQUFXLEVBRWxCLEtBQUssWUFBYSxFQUVyQixFQUVELFdBQVd4YixFQUFRSixFQUFNLENBQ3ZCLE9BQU9vSyxHQUFZaEssRUFBUUosRUFBTyxDQUFFLEtBQUFBLENBQU0sRUFBRyxDQUFFLEVBQUUsSUFBSSxDQUN0RCxFQUVELGFBQWMsQ0FDWixNQUFNc0IsRUFBUSxLQUFLLFlBQ25CLEtBQUssY0FBYyxDQUFFLE9BQVEsTUFBTyxNQUFBQSxHQUFTLENBQUNzVixFQUFLNVUsSUFBYSxPQUM5RCxHQUFJNFUsR0FDRixHQUFJNVUsRUFBVSxDQUNaLEtBQU0sQ0FBRSxLQUFBbkYsQ0FBSSxFQUFLbUYsRUFDakIsSUFDRW5GLEdBQUEsWUFBQUEsRUFBTSxRQUFTLHNCQUNmK0IsRUFBQSxLQUFLLGlCQUFMLE1BQUFBLEVBQUEsVUFBc0IvQixFQUFLLFNBQzNCLE1BQU8sR0FDRixHQUFJLEtBQUssb0JBQW9CbUYsQ0FBUSxFQUcxQyxNQUFPLEVBRVYsT0FFRCxLQUFLLFFBQVFBLEVBQVMsSUFBSSxFQUMxQixLQUFLLGdCQUFnQixNQUFNLENBRXJDLENBQU8sQ0FDRixFQUVELGtCQUFrQkEsRUFBVSxDQUMxQixPQUFPQSxHQUFBLFlBQUFBLEVBQVUsVUFBVyxHQUM3QixFQUVELG9CQUFvQkEsRUFBVSxDQUM1QixPQUFPQSxHQUFBLFlBQUFBLEVBQVUsVUFBVyxHQUM3QixFQUVELE1BQU0sY0FBYyxDQUNsQixPQUFBSCxFQUNBLFNBQUE3RCxFQUFXLEtBQUssU0FDaEIsTUFBQXNELEVBQ0EsS0FBQXpFLENBQ0QsRUFBRXNCLEVBQVUsQ0FDWCxNQUFNMGQsRUFBaUIsQ0FDckIsV0FBWSxHQUNaLFdBQVksS0FBSyxRQUNsQixFQUNELEtBQUssV0FBVyxHQUFNQSxDQUFjLEVBQ3BDLE1BQU1DLEVBQVUsQ0FBRSxPQUFBamEsRUFBUSxTQUFBN0QsRUFBVSxLQUFBbkIsRUFBTSxNQUFBeUUsQ0FBTyxFQUNqRCxHQUFJLENBQ0YsTUFBTVUsRUFBVyxNQUFNLEtBQUssWUFBWThaLENBQU8sRUFHL0MzZCxFQUFTLEtBQU02RCxDQUFRLENBQ3hCLE9BQVE3QyxFQUFQLENBRUEsS0FBTSxDQUFFLFNBQUE2QyxDQUFRLEVBQUs3QyxFQUNyQixHQUFJLENBQUNoQixFQUFTZ0IsRUFBTzZDLENBQVEsRUFBRyxDQUM5QixNQUFNbkYsRUFBT21GLEdBQUEsWUFBQUEsRUFBVSxLQUNqQm1TLEVBQVEzVSxFQUFBQSxTQUFTM0MsR0FBQSxZQUFBQSxFQUFNLElBQUksRUFDN0JvRSxFQUFRLFNBQUNwRSxFQUFLLElBQUksRUFDbEIsUUFDRWdhLEdBQU9oYSxHQUFBLFlBQUFBLEVBQU0sVUFBV3NDLEVBQzlCLEtBQUssT0FBTyxDQUFFLEtBQU0sUUFBUyxNQUFBZ1YsRUFBTyxLQUFBMEMsRUFBTSxDQUMzQyxDQUNGLENBQ0QsS0FBSyxXQUFXLEdBQU9nRixDQUFjLENBQ3RDLEVBRUQsZUFBZTNhLEVBQVFXLEVBQVEsQ0FFN0IsTUFDRSxDQUFDLE9BQVEsTUFBTyxPQUFPLEVBQUUsU0FBU0EsQ0FBTSxJQUd0Q1gsRUFBTyxlQUFlLENBQUMsV0FBWSxNQUFNLENBQUMsR0FDMUNBLEVBQU8sY0FHWixFQUVELE1BQU0sT0FBT0EsRUFBUSxDQUNuQixNQUFNbEQsRUFBV3FDLEVBQVlhLEVBQU8sT0FBTyxTQUFVLENBQ25ELE9BQVEsS0FBSyxRQUNyQixDQUFPLEVBQ0QsR0FBSWxELEVBQVUsQ0FDWixLQUFNLENBQUUsT0FBQTZELENBQU0sRUFBSzdELEVBQ2JuQixFQUFPLEtBQUssZUFBZXFFLEVBQVFXLENBQU0sRUFDL0MsT0FBTyxLQUFLLGVBQWVYLEVBQVFsRCxFQUFVNkQsRUFBUWhGLENBQUksQ0FDMUQsQ0FDRCxNQUFPLEVBQ1IsRUFFRCxNQUFNLGVBQWVxRSxFQUFRbEQsRUFBVTZELEVBQVFoRixFQUFNLENBQ25ELFFBQUFrZixFQUFVLEdBQ1YsVUFBQUMsRUFDQSxRQUFBQyxFQUNBLGNBQUFDLEVBQWdCLElBQU0sS0FBSyxPQUFPLENBQ2hDLEtBQU0sVUFDTixNQUFPLHFCQUNQLEtBQU0sZ0NBQ2QsQ0FBTyxFQUNELFlBQUFDLEVBQWNoZCxHQUFTLEtBQUssT0FBTyxDQUNqQyxLQUFNLFFBQ04sTUFBTyxnQkFDUCxLQUFNLENBQ0oseUJBQXlCQSxFQUFRLElBQU0sTUFDdkNBLEdBQUEsWUFBQUEsRUFBTyxVQUFXQSxDQUNuQixDQUNULENBQU8sQ0FDRixFQUFHLEdBQUksQ0FDTixPQUFPLElBQUksUUFBUUosR0FBVyxDQUM1QixLQUFLLGNBQ0gsQ0FBRSxPQUFBOEMsRUFBUSxTQUFBN0QsRUFBVSxLQUFBbkIsQ0FBTSxFQUMxQixNQUFPK1osRUFBSzVVLElBQWEsQ0FDdkIsTUFBTW5GLEVBQU9tRixHQUFBLFlBQUFBLEVBQVUsS0FDdkIsR0FBSTRVLEVBQUssQ0FFUCxNQUFNcFMsRUFBUyxLQUFLLGtCQUFrQnhDLENBQVEsR0FBS25GLEVBQUssT0FDeEQsR0FBSTJILEVBQ0YsTUFBTSxLQUFLLHFCQUFxQkEsRUFBUSxFQUFJLE1BQ3ZDLENBQ0wsTUFBTXJGLEVBQVFPLEVBQVEsU0FBQzdDLENBQUksRUFBSUEsRUFBTytaLEVBQ3RDcUYsR0FBQSxNQUFBQSxFQUFVOWMsR0FDVixNQUFNLEtBQUssZ0JBQWdCK0IsRUFBUSxRQUFTLENBQzFDLE9BQVFpYixFQUNSLE1BQUFoZCxDQUNsQixDQUFpQixDQUNGLENBQ0RKLEVBQVEsRUFBSyxDQUMzQixNQUdrQmdkLEdBQVdsZixHQUNiLEtBQUssUUFBUUEsQ0FBSSxFQUVuQm1mLEdBQUEsTUFBQUEsSUFDQSxNQUFNLEtBQUssZ0JBQWdCOWEsRUFBUSxVQUFXLENBQzVDLE9BQVFnYixDQUN4QixDQUFlLEVBQ0RuZCxFQUFRLEVBQUksQ0FFZixDQUNGLENBQ1QsQ0FBTyxDQUNGLEVBRUQsTUFBTSxnQkFBZ0JtQyxFQUFRaEQsRUFBTyxDQUFFLE9BQUE2RixFQUFRLE1BQUE1RSxDQUFLLEVBQUksQ0FHdEQsTUFBTS9CLEVBQVUsSUFBSU8sRUFBWXVELEVBQVEsQ0FDdEMsT0FBUSxHQUNSLEtBQU0sS0FBSyxLQUNYLFVBQVcsS0FBSyxVQUNoQixNQUFBL0IsQ0FDUixDQUFPLEVBQ0tELEVBQU0sTUFBTWdDLEVBQU8sVUFBVWhELEVBQU8sQ0FBRSxRQUFBZCxFQUFTLEVBQ3JELE9BQ0UyRyxHQUVBN0UsSUFBUSxRQUdSLENBQUM5QixFQUFRLGFBRVQyRyxFQUFPNUUsQ0FBSyxFQUVQRCxDQUNSLENBQ0YsQ0FDSCxFQ3RXQSxJQUFJaVEsR0FBUyxVQUFZLENBQ3ZCLElBQUlDLEVBQUksS0FDSkMsRUFBR0QsRUFBSSxlQUNQRSxFQUFHRixFQUFJLE1BQU0sSUFBSUMsRUFFckIsT0FBT0MsRUFBRyxNQUFPLENBQ2YsWUFBYSwrQkFDYixNQUFPLENBQ0wsbUJBQW9CRixFQUFJLGFBQ3pCLEVBQ0QsTUFBTyxDQUNMLGdCQUFpQkEsRUFBSSxhQUFhLElBQ25DLENBQ0wsRUFBSyxDQUFHQSxFQUFJLHFCQUF1QkEsRUFBSSxjQU9oQ0EsRUFBSSxLQVA2Q0UsRUFBRyxjQUFlLENBQ3RFLFdBQVksQ0FBQyxDQUNYLEtBQU0sT0FDTixRQUFTLFNBQ1QsTUFBTyxDQUFDRixFQUFJLFNBQ1osV0FBWSxXQUNsQixDQUFLLENBQ0wsQ0FBRyxFQUFjRSxFQUFHRixFQUFJLGNBQWdCLE1BQVEsT0FBUSxDQUNwRCxXQUFZLENBQUMsQ0FDWCxLQUFNLE9BQ04sUUFBUyxTQUNULE1BQU9BLEVBQUksU0FDWCxXQUFZLFVBQ2xCLENBQUssRUFDRCxJQUFLLFlBQ0wsWUFBYSxjQUNiLEdBQUksQ0FDRixPQUFVLFNBQVUyQixFQUFRLENBQzFCQSxFQUFPLGVBQWMsQ0FDdEIsQ0FDRixDQUNMLEVBQUssQ0FBQ3pCLEVBQUcsU0FBVSxDQUNmLFdBQVksQ0FBQyxDQUNYLEtBQU0sT0FDTixRQUFTLFNBQ1QsTUFBTyxHQUNQLFdBQVksT0FDbEIsQ0FBSyxFQUNELE1BQU8sQ0FDTCxLQUFRLFNBQ1IsU0FBWSxPQUNaLGNBQWUsTUFDaEIsQ0FDTCxDQUFHLEVBQUdBLEVBQUcsY0FBZSxDQUNwQixNQUFPLENBQ0wsT0FBVUYsRUFBSSxPQUNkLFNBQVlBLEVBQUksU0FDaEIsS0FBUUEsRUFBSSxLQUNaLEtBQVFBLEVBQUksS0FDWixNQUFTQSxFQUFJLE1BQ2IsU0FBWUEsRUFBSSxVQUNoQixXQUFjLEVBQ2YsQ0FDTCxFQUFLLENBQUNFLEVBQUcsZUFBZ0IsQ0FDckIsWUFBYSwwREFDYixNQUFPLENBQ0wsS0FBUSxVQUNSLFFBQVdGLEVBQUksY0FDZixTQUFZQSxFQUFJLFNBQ2hCLEtBQVFBLEVBQUksS0FDWixLQUFRQSxFQUFJLEtBQ1osTUFBU0EsRUFBSSxNQUNiLFNBQVlBLEVBQUksU0FDakIsRUFDRCxLQUFNLFNBQ1YsQ0FBRyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUNsQixFQUNJRyxHQUFrQixDQUFFLEVDYnhCLE1BQUFDLEdBQUE3TixFQUFBLFVBQUEsWUFBQSxDQUNBLE9BQUEsQ0FBQTRNLEdBQUFrTixFQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxZQUFBLEtBQ0EsV0FBQSxPQUNBLFVBQUEsS0FDQSxPQUFBLEVBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLENBSUEsTUFBQUUsRUFBQSxLQUFBLFNBQUEsRUFDQSxDQUFBLFdBQUFTLEVBQUEsYUFBQUMsQ0FBQSxFQUFBLEtBQ0EsTUFBQSxDQUNBLEdBQUFWLEVBQ0EsT0FBQVMsRUFBQVQsRUFBQSxPQUFBQSxFQUFBLEtBQ0EsVUFBQVMsRUFBQVQsRUFBQSxRQUFBQSxFQUFBLE1BQ0EsT0FBQVUsRUFBQVYsRUFBQSxPQUFBQSxFQUFBLE1BQ0EsVUFBQVUsRUFBQVYsRUFBQSxVQUFBQSxFQUFBLE1BQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxPQUFBLEtBQUEsa0JBQ0EsS0FBQSxhQUdBLEtBQUEsTUFBQSxDQUFBLEtBQUEsS0FBQSxJQUFBLEVBQ0EsS0FBQSxPQUNBLEdBQUEsQ0FBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE9BQUFuUCxFQUNBOFAsRUFBQSxNQUNBLENBQ0EsT0FBQSxDQUNBLEtBQUEsU0FDQSxPQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsT0FBQSxDQUNBLENBQ0EsRUFFQSxPQUFBLENBQUEsS0FBQSxZQUFBLENBQ0EsS0FBQSxTQUVBLFVBQUEsR0FDQSxPQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsVUFBQXBiLENBQUEsSUFBQUEsRUFBQSxPQUFBLENBQ0EsQ0FDQSxDQUNBLEVBQ0EsS0FBQSxPQUFBLE9BQ0EsQ0FDQSxDQUNBLEVBRUEsVUFBQSxDQUNBLE9BQUEsS0FBQSxhQUFBLEtBQUEsbUJBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsWUFDQSxFQUVBLFlBQUEsQ0FFQSxPQUFBLEtBQUEsUUFBQSxRQUNBLEVBRUEsU0FBQSxPQUNBLE1BQUEsQ0FBQSxLQUFBLFlBQUEsQ0FBQSxHQUFBdEMsRUFBQSxLQUFBLHNCQUFBLE1BQUFBLEVBQUEsUUFDQSxFQUVBLGFBQUEsT0FDQSxRQUFBQSxFQUFBLEtBQUEsc0JBQUEsWUFBQUEsRUFBQSxjQUFBLElBQ0EsRUFFQSxZQUFBLENBSUEsT0FBQSxLQUFBLGFBQUEsTUFDQSxFQUVBLE1BQUEsQ0FFQSxPQUFBLEtBQUEsT0FBQSxNQUFBLElBQ0EsRUFFQSxRQUFBLENBQ0EsT0FBQSxLQUFBLFdBQ0EsS0FDQSxLQUFBLE9BQUEsSUFDQSxFQUVBLFFBQUEsQ0FDQSxPQUFBLEtBQUEsV0FBQSxP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LFFBQUEsUUFBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsQ0FBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsTUFBQSxLQUFBLE9BQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxJQUNBLEVBRUEsT0FBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLEtBQ0EsRUFFQSxVQUFBLENBQ0EsT0FBQSxLQUFBLFVBQUEsUUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLENBQ0EsR0FBQSxLQUFBLEtBQ0EsT0FBQSxLQUFBLE1BQ0EsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBelIsRUFBQSxLQUFBLE9BQUEsVUFBQSxDQUNBLEVBR0EsZ0JBQUEsQ0FDQSxPQUFBLEtBQUEsT0FBQSxRQUNBLEVBRUEsY0FBQSxPQUNBLE1BQUFsTCxHQUFBcEMsRUFBQSxLQUFBLGlCQUFBLFlBQUFBLEVBQUEsS0FDQSxPQUFBb0MsR0FBQSxLQUFBLEtBQUFBLENBQUEsQ0FDQSxFQUVBLG1CQUFBLE9BQ0EsUUFDQXBDLEVBQUEsS0FBQSxlQUFBLFlBQUFBLEVBQUEsUUFBQSxHQUNBLEtBQUEsZUFBQSxZQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FDQSxPQUFBLEtBQUEsY0FDQSxDQUFBLENBRUEsRUFFQSxhQUFBLE9BQ0EsUUFBQUEsRUFBQSxLQUFBLGVBQUEsWUFBQUEsRUFBQSxTQUFBLENBQ0EsRUFFQSxlQUFBLE9BQ0EsUUFBQUEsRUFBQSxLQUFBLGFBQUEsWUFBQUEsRUFBQSxTQUFBLENBQ0EsRUFFQSxZQUFBLENBQ0EsT0FBQSxLQUFBLGNBQUEsS0FBQSxXQUNBLEVBRUEsZUFBQSxPQUNBLEtBQUEsQ0FBQSxlQUFBc2YsQ0FBQSxFQUFBLEtBQ0EsR0FBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxTQUFBQyxHQUFBLEtBQUEsVUFDQUMsRUFBQSxDQUFBLEtBQUEsTUFBQUYsRUFB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TUFDQSxNQUFBLE9BQ0EsVUFBQSxFQUNBLEVBQ0EsTUFBQSxDQUNBLEtBQUEsT0FDQSxNQUFBLE9BQ0EsQ0FDQSxFQUNBLFFBQUEsQ0FDQSxPQUFBLENBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxRQUFBLEVBQ0EsT0FBQSxDQUNBLE9BQUEsQ0FDQSxNQUFBLENBQUEsZ0JBQUFDLEdBQUEsQ0FDQUEsRUFBQSxRQUFBLENBQ0EsS0FBQSxLQUNBLE1BQUEsSUFDQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLENBQ0EsRUFDQSxLQUFBLEtBQUEsT0FBQSxhQUFBLE1BQUEsQ0FDQSxDQUFBLEVBQ0EsR0FBQUQsRUFBQSxDQUNBLEdBQUEsQ0FBQSxLQUFBRSxFQUFBLE1BQUExUSxDQUFBLEVBQUF3USxFQUNBLEdBQUFFLEVBR0EsR0FBQSxDQUNBLElBQUEsSUFBQUEsQ0FBQSxDQUNBLE1BQUEsQ0FDQUEsRUFBQSxVQUFBQSxHQUNBLENBRUFsQixFQUFBLENBQUEsS0FBQWtCLEVBQUEsTUFBQTFRLEVBQUEsQ0FDQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxLQUFBLENBQ0EsTUFBQTJRLEVBQUEsQ0FBQSxFQUNBLE1BQUFDLEVBQUEsQ0FBQSxFQUNBLE1BQUFDLEVBQUEsQ0FBQSxDQUNBLEVBQUEsS0FBQSxPQUNBLE1BQUEsQ0FFQUYsRUFBQSxNQUFBLElBQUFHLE9BQ0FILEVBQUEsUUFBQSxJQUFBSSxTQUNBSixFQUFBLFdBQUEsSUFBQUssWUFDQUwsRUFBQSxRQUFBLElBQUFNLFNBQ0FOLEVBQUEsT0FBQSxJQUFBTyxHQUNBUCxFQUFBLE1BQUEsSUFBQVEsT0FDQVIsRUFBQSxNQUFBLElBQUFTLEdBR0FSLEVBQUEsWUFBQSxJQUFBUyxhQUNBVCxFQUFBLFdBQUEsSUFBQVUsWUFDQSxJQUFBQyxZQUNBWCxFQUFBLFNBQUEsSUFBQVksRUFBQSxRQUFBLENBQUEsT0FBQVosRUFBQSxRQUFBLEVBQ0FBLEVBQUEsZ0JBQUEsSUFBQWEsa0JBQ0FiLEVBQUEsYUFBQUEsRUFBQSxhQUFBLElBQUFjLEVBQUFBLFNBQ0FkLEVBQUEs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
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zY3JvbGwuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvc2VsZWN0aW9uLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdXRpbHMvZGVwcmVjYXRlLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICByZXR1cm4gaXNUZW1wb3JhcnlJZChkYXRhPy5baWRLZXldKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyAoaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IHsgLi4uY29udGV4dCB9KVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT05cbiAgLy8gZGF0YS4gIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZVxuICAvLyB1c2Ugb2YgYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdFxuICAvLyBwYXJlbnQuIElmIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbFxuICAvLyBzb3J0cyBvZiBkYXRhIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBwYXJlbnRJdGVtID1cbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICByZXR1cm4gcGFyZW50SXRlbSAhPT0gdGhpcy5pdGVtID8gcGFyZW50SXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGV4cG9zdXJlIHNpbmNlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCxcbiAgLy8gZS5nLiBuZXN0ZWQgZm9ybXMgaW4gYHByb2Nlc3NEYXRhKClgLiBJbnN0ZWFkLCBiaW5kIGNvbXBvbmVudCB0byBgdGhpc2BcbiAgLy8gb25seSB3aGVyZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRPRE86IFJlbmFtZSB0aGlzIHRvIGBzZWFyY2hUZXJtYCBvciBgc2VhcmNoUXVlcnlgLCB0byBwZXJoYXBzIGZyZWUgYHF1ZXJ5YFxuICAvLyBmb3IgdGhlIGFjdHVhbCBgcmVzb3VyY2VDb21wb25lbnQucXVlcnlgIG9iamVjdD9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3F1ZXJ5JywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVGhlIGVycm9yIGZpZWxkIGlzIG9ubHkgcG9wdWxhdGVkIGluIHRoZSBjb250ZXh0IG9mIGJ1dHRvbnMgdGhhdCBzZW5kXG4gIC8vIHJlcXVlc3RzLCBzZWUgYFJlc291cmNlTWl4aW4uZW1pdEJ1dHRvbkV2ZW50KClgOlxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZXJyb3InLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgd2FzTm90aWZpZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnd2FzTm90aWZpZWQnLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEhlbHBlciBNZXRob2RzXG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQucmVxdWVzdChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGZvcm1hdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB0aGlzLmNvbXBvbmVudC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgbmF2aWdhdGUoKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uID0+IHRoaXMuY29tcG9uZW50Lm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LmRvd25sb2FkKG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZ2V0UmVzb3VyY2VVcmwoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlID0+IHRoaXMuY29tcG9uZW50LmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICB9XG5cbiAgZ2V0IG5vdGlmeSgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICAgIHNldCh0aGlzLCAnd2FzTm90aWZpZWQnLCB0cnVlKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRldmVudHM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIHZlcnNpb25zIG9mIFZ1ZSdzICRvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIC8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3NcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4kZXZlbnRzIHx8ICh0aGlzLiRldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZXZlbnRzW2V2ZW50XSB8fCAoZXZlbnRzW2V2ZW50XSA9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoZXYsIGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlLCBjYWxsYmFja3MgfSA9IGVudHJ5XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcXVldWUgd2l0aCBpdHMgcGFyYW1zLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IG9ubHkgZ2V0cyByZW1vdmVkIG9uY2UgYG5leHQoKWAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjYWxsYmFjay5hcHBseSh0aGlzLCBlbnRyeS5hcmdzKVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgZHVyaW5nIGV2ZW50IGhhbmRsZXIgZm9yICcke2V2ZW50fSc6YCwgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZm9yIHRoZSBldmVudFxuICAgICAgICAgICAgICAvLyB0aGF0IHdhcyBqdXN0IGNvbXBsZXRlZCBieSB0aGUgd3JhcHBlciB0aGF0IGNhbGxlZCBgbmV4dCgpYFxuICAgICAgICAgICAgICBlbnRyeS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pXG4gICAgICAgICAgLy8gRm9yIG5ldyBxdWV1ZXMgKD0gb25seSBvbmUgZW50cnkpIGVtaXQgdGhlIGZpcnN0IGV2ZW50IGltbWVkaWF0ZWx5LFxuICAgICAgICAgIC8vIHRvIGdldCB0aGUgcXVldWUgcnVubmluZy5cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4kZXZlbnRzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Jvb2xlYW4sIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc0RhdGUsXG4gIGlzUmVnRXhwLCBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT4gaXNEYXRlKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PiBpc0FycmF5KHZhbHVlKVxuICA/IHZhbHVlXG4gIDogaXNTdHJpbmcodmFsdWUpXG4gICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKVxuICA/IHZhbHVlXG4gIC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgOiB2YWx1ZSA9PT0gdHJ1ZVxuICAgID8ge31cbiAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PiBpc1JlZ0V4cCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKSA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAuLi5waWNrQnkoXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICApLFxuICAgICAgaWQ6IGAke2lkfWBcbiAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgaW50ZXJuYWwgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHF1ZXJ5IH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSBjYWNoZSAmJiB7XG4gICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgfVtjYWNoZV1cbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9hZENhY2hlICYmIGAke1xuICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J30gJHtcbiAgICAgICAgb3B0aW9ucy51cmx9ICR7XG4gICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb25cbiAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXByZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IHVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT4gKFxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJyxcbiAgbnVsbGlzaDogdHJ1ZVxufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9ucyBmcm9tICcuLi92YWxpZGF0aW9ucy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBldmVudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9ICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAgb2JqZWN0LCB0aGV5XG4gICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICA/IHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBjYWxsYmFjayB9KVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5vdmVycmlkZXMsIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsIGFzQXJyYXksIHBhcnNlRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZSxcbiAgbWFwQ29uY3VycmVudGx5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDb21wb25lbnRzID0ge31cbmNvbnN0IHVua25vd25UeXBlUmVwb3J0ZWQgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudCkge1xuICB0eXBlQ29tcG9uZW50c1t0eXBlXSA9IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbXBvbmVudCh0eXBlLCBhbGxvd051bGwgPSBmYWxzZSkge1xuICBjb25zdCBjb21wb25lbnQgPSB0eXBlQ29tcG9uZW50c1t0eXBlXSB8fCBudWxsXG4gIGlmICghY29tcG9uZW50ICYmICFhbGxvd051bGwgJiYgIXVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0pIHtcbiAgICAvLyBSZXBvcnQgZWFjaCBtaXNzaW5nIHR5cGUgb25seSBvbmNlLCB0byBhdm9pZCBmbG9vZGluZyB0aGUgY29uc29sZTpcbiAgICB1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdID0gdHJ1ZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBEaXRvIGNvbXBvbmVudCB0eXBlOiAnJHt0eXBlfSdgKVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBjYWxsYmFjaykge1xuICBjb25zdCBzY2hlbWFzID0gW1xuICAgIC4uLk9iamVjdC52YWx1ZXMoc2NoZW1hPy50YWJzIHx8IHt9KSxcbiAgICBzY2hlbWFcbiAgXVxuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSlcbiAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZW1hKHNjaGVtYSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiBpc1N0cmluZyhzY2hlbWEudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdmb3JtJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3ZpZXcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLm5hbWUgfHwgc2NoZW1hLmxhYmVsIHx8IHNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYS5jb21wb25lbnQsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgLyR7c2NoZW1hLnBhdGh9YCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICBzY2hlbWEubGV2ZWwgPSBsZXZlbFxuICAvLyBEZWxlZ2F0ZSBzY2hlbWEgcHJvY2Vzc2luZyB0byB0aGUgYWN0dWFsIHR5cGUgY29tcG9uZW50cy5cbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpblxuICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgc2NoZW1hLnBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoY29tcG9uZW50LCBuYW1lKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChwcm9jZXNzQ29tcG9uZW50KGFwaSwgY29tcG9uZW50LCBuYW1lLCByb3V0ZXMsIGxldmVsKSlcbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgZm9ybXMgPSBzY2hlbWEuZm9ybXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhmb3JtcywgcmVzb2x2ZUZvcm0pXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHJlc29sdmVGb3JtKGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsICsgMSlcbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtKGZvcm0pIHtcbiAgZm9ybSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoZm9ybSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oZm9ybSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoZm9ybSl9J2ApXG4gIH1cbiAgaWYgKGZvcm0pIHtcbiAgICBhd2FpdCByZXNvbHZlUGFuZWxzKGZvcm0pXG4gIH1cbiAgcmV0dXJuIGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gaGFzRm9ybVNjaGVtYSh2aWV3U2NoZW1hKVxuICAgICAgPyB2aWV3U2NoZW1hXG4gICAgICAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIDogZm9yRWFjaFNjaGVtYSh2aWV3U2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgICBjb25zdCB2aWV3Q29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHM/Llt2aWV3XVxuICAgICAgICBpZiAoaGFzRm9ybVNjaGVtYSh2aWV3Q29tcG9uZW50KSkge1xuICAgICAgICAgIHJldHVybiB2aWV3Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgcmV0dXJuIHZpZXdcbiAgICA/IHZpZXcubGV2ZWwgPT09IDBcbiAgICAgID8gYC8ke3ZpZXcucGF0aH1gIC8vIEEgc2luZ2xlLWNvbXBvbmVudCB2aWV3XG4gICAgICA6IGAvJHt2aWV3LnBhdGh9LyR7dmlldy5wYXRofWAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlld1xuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBzY2hlbWEgPSB2aWV3XG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVsKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmxhYmVsICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKFxuICAgIHNjaGVtYS5uZXN0ZWQgfHxcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRWYWx1ZVxuICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgIHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVscyhzY2hlbWEpIHtcbiAgY29uc3QgY2hlY2tDb21wb25lbnRzID0gY29tcG9uZW50cyA9PlxuICAgIE9iamVjdC52YWx1ZXMoY29tcG9uZW50cyB8fCB7fSkuc29tZShoYXNMYWJlbClcblxuICByZXR1cm4gKFxuICAgIGNoZWNrQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cykgfHxcbiAgICBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzIHx8IHt9KS5zb21lKGNoZWNrQ29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdHMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLCBkYXRhLCBudWxsLCBudWxsLCBwcm9jZXNzQmVmb3JlLCBudWxsLCBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhXG4gICAgfSkpXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFVzZSBgJHNldCgpYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGB0aGlzLnZhbHVlID0g4oCmYCB0byB1cGRhdGUgdGhlXG4gICAgICAvLyB2YWx1ZSB3aXRob3V0IGNhbGxpbmcgcGFyc2UoKTpcbiAgICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgdmFsdWUpXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgVnVlLnNldChkYXRhLCBuYW1lLCBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIHRocm91Z2ggYCRzZXQoKWAsIHNlZSBhYm92ZTpcbiAgcmV0dXJuIGRhdGFbbmFtZV1cbn1cblxuZnVuY3Rpb24gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgaXRlbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zY2hlbWFPbmx5KSB7XG4gICAgY29uc3QgY29weSA9IHt9XG4gICAgY29uc3QgeyBpZEtleSA9ICdpZCcsIG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICBjb25zdCBpZCA9IGl0ZW1baWRLZXldXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlbaWRLZXldID0gaWRcbiAgICB9XG4gICAgLy8gQ29weSBvdmVyIHR5cGUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgaWYgKGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc291cmNlU2NoZW1hKSkge1xuICAgICAgY29weS50eXBlID0gaXRlbS50eXBlXG4gICAgfVxuICAgIGlmIChvcmRlcktleSkge1xuICAgICAgY29weVtvcmRlcktleV0gPSBpdGVtW29yZGVyS2V5XVxuICAgIH1cbiAgICByZXR1cm4gY29weVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGF0YShzY2hlbWEsIHNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50LFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCBzY2hlbWFPbmx5LCB0YXJnZXQsIHJvb3REYXRhOiBkYXRhIH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSkgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKSA/IC0xXG4gICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gIH1cblxuICBjb25zdCBwcm9jZXNzQWZ0ZXIgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIGV4Y2x1ZGUsIHByb2Nlc3MgfSA9IHNjaGVtYVxuICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGFbbmFtZV1cblxuICAgIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuXG4gICAgLy8gTk9URTogV2UgZG9uJ3QgY2FjaGUgdGhpcyBjb250ZXh0LCBzaW5jZSBgdmFsdWVgIGlzIGNoYW5naW5nLlxuICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiBEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgIC8vIFBhc3MgdGhlIGFscmVhZHkgcHJvY2Vzc2VkIGRhdGEgdG8gYHByb2Nlc3MoKWAsIHNvIGl0IGNhbiBiZSBtb2RpZmllZFxuICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgIHByb2Nlc3NlZERhdGFcbiAgICB9KVxuXG4gICAgLy8gRmlyc3QgdW53cmFwIHRoZSB3cmFwcGVkIHByaW1pdGl2ZXMgYWdhaW4sIHRvIGJyaW5nIHRoZSBkYXRhIGJhY2sgaW50b1xuICAgIC8vIGl0cyBuYXRpdmUgZm9ybS4gU2UgYHByb2Nlc3NCZWZvcmUoKWAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIGZpcnN0LCBpZiBvbmUgaXMgcHJvdmlkZWQsIHNvIHRoYXRcbiAgICAvLyBpdCBjYW4gbW9kaWZ5IGRhdGEgaW4gYHByb2Nlc3NlZERhdGFgIGV2ZW4gaWYgaXQgcHJvdmlkZXMgYGV4Y2x1ZGU6IHRydWVgXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhbHVlID0gcHJvY2VzcyhnZXRDb250ZXh0KCkpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgICAgLy8gU3VwcG9ydCBmdW5jdGlvbnMgbmV4dCB0byBib29sZWFucyBmb3IgYHNjaGVtYS5leGNsdWRlYDpcbiAgICAgIGV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgIGlzRnVuY3Rpb24oZXhjbHVkZSkgJiYgZXhjbHVkZShnZXRDb250ZXh0KCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFYWNoIGNvbXBvbmVudCB0eXBlIGNhbiBwcm92aWRlIGl0cyBvd24gc3RhdGljIGBwcm9jZXNzVmFsdWUoKWAgbWV0aG9kXG4gICAgICAvLyB0byBjb252ZXJ0IHRoZSBkYXRhIGZvciBzdG9yYWdlLlxuICAgICAgY29uc3QgcHJvY2Vzc1ZhbHVlID0gdHlwZU9wdGlvbnM/LnByb2Nlc3NWYWx1ZVxuICAgICAgaWYgKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpXG4gICAgICB9XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT4gZGF0YVBhdGggIT0gbnVsbFxuICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICA6IG51bGxcblxuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmICghaXNOZXN0ZWQoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiB1bm5lc3RlZCBjb21wb25lbnRzLlxuICAgICAgICAgIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YSxcbiAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERhdGFQYXRoID0gZ2V0RGF0YVBhdGgoZGF0YVBhdGgsIG5hbWUpXG5cbiAgICAgICAgICBjb25zdCBwcm9jZXNzSXRlbSA9IChpdGVtLCBpbmRleCA9IG51bGwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFQYXRoID0gaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgPyBnZXREYXRhUGF0aChjb21wb25lbnREYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICAgIDogY29tcG9uZW50RGF0YVBhdGhcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQob3B0aW9ucy5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSXRlbXMgd2l0aG91dCBmb3JtcyBzdGlsbCBnZXQgZnVsbHkgKGJ1dCBzaGFsbG93bHkpIGNsb25lZC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgb2YgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQgLyB1c2VkIGF0IGFsbD9cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0JlZm9yZT8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGlmIChzY2hlbWEudGFicykge1xuICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMpKSB7XG4gICAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBwYW5lbCBvZiBnZXRBbGxQYW5lbFNjaGVtYXMoc2NoZW1hLCBkYXRhUGF0aCkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5zY2hlbWEuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhkZXNjcmlwdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPSBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgID8geyAuLi5kZWZhdWx0cywgLi4uc2NoZW1hIH1cbiAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KGRlc2NyaXB0aW9ucylcbiAgICA/IHRvT2JqZWN0KGRlc2NyaXB0aW9ucywgdmFsdWUgPT4gKFxuICAgICAgaXNPYmplY3QodmFsdWUpID8gdmFsdWUgOiB7XG4gICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgIH1cbiAgICApKVxuICAgIDogaXNPYmplY3QoZGVzY3JpcHRpb25zKVxuICAgICAgPyB0b09iamVjdChcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSxcbiAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgaXNPYmplY3QodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uU2NoZW1hcyhidXR0b25zKSB7XG4gIHJldHVybiBnZXROYW1lZFNjaGVtYXMoXG4gICAgYnV0dG9ucyxcbiAgICB7IHR5cGU6ICdidXR0b24nIH0gLy8gRGVmYXVsdHNcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hT3JUeXBlKSA/IHNjaGVtYU9yVHlwZS50eXBlIDogc2NoZW1hT3JUeXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQoZ2V0VHlwZShzY2hlbWFPclR5cGUpLCB0cnVlKT8ub3B0aW9ucyA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKFxuICAgIGdldFR5cGUoc2NoZW1hT3JUeXBlKVxuICApID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICBzY2hlbWEsXG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBuYW1lLCBhcHBlbmQgaXQgdG8gdGhlIGRhdGFQYXRoLlxuICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgIGRhdGFQYXRoOiBzY2hlbWEubmFtZVxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgIHRhYkNvbXBvbmVudFxuICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hcyhzY2hlbWFzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMgPSBbXSkge1xuICBpZiAoc2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFzKSkge1xuICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbFNjaGVtYShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWxzLnB1c2gocGFuZWwpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgc2NoZW1hLFxuICBkYXRhUGF0aCxcbiAgc2NoZW1hQ29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgc2NoZW1hQ29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxzID0gcGFuZWwgPyBbZ2V0UGFuZWxTY2hlbWEocGFuZWwsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXSA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gJGZpbHRlcik6XG4gIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMpXG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IG51bGwsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEuY29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlVmFsdWUoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgIHsgY29tcG9uZW50OiB0aGlzIH1cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB7IGZvcm1hdCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5mb3JtYXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLnBhcnNlYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gcGFyc2VcbiAgICAgICAgICA/IHBhcnNlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCB0aGlzLm5hbWUsIHRoaXMucGFyc2VkVmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBpdGVtcyB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWRJdGVtLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2xhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGxhYmVsKVxuICAgICAgICAgID8gbGFiZWxcbiAgICAgICAgICA6IGxhYmVsICE9PSBmYWxzZSAmJiB0aGlzLiRvcHRpb25zLmdlbmVyYXRlTGFiZWxcbiAgICAgICAgICAgID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl1cbiAgICB9KSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmdcbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgbmF0aXZlRmllbGQsIHRleHRGaWVsZCB9ID0gdGhpcy4kb3B0aW9uc1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5nZXRMaXN0ZW5lcnMoKVxuICAgICAgY29uc3QgeyBldmVudHMgPSB7fSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgICAvLyBhc3N1bWluZyB0aGV5IGFyZSBuYXRpdmUgZXZlbnRzLlxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgICBsaXN0ZW5lcnNbZXZlbnRdIHx8PSAoKSA9PiB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RlbmVyc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBQcmV2ZW50IHVubmVzdGVkIHR5cGUgY29tcG9uZW50cyBmcm9tIG92ZXJyaWRpbmcgcGFyZW50IGRhdGEgcGF0aHNcbiAgICAgIGlmICh0aGlzLm5lc3RlZCkge1xuICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJDb21wb25lbnQodGhpcywgYWRkKVxuICAgICAgICAvLyBJbnN0YWxsIC8gcmVtb3ZlIHRoZSBmaWVsZCBldmVudHMgdG8gd2F0Y2ggb2YgY2hhbmdlcyBhbmQgaGFuZGxlXG4gICAgICAgIC8vIHZhbGlkYXRpb24gZmxhZ3MuIGBldmVudHNgIGlzIHByb3ZpZGVkIGJ5IGBWYWxpZGF0aW9uTWl4aW4uZXZlbnRzKClgXG4gICAgICAgIHRoaXNbYWRkID8gJ29uJyA6ICdvZmYnXSh0aGlzLmV2ZW50cylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uSW5wdXQsXG4gICAgICAgIGNoYW5nZTogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IFtlbGVtZW50XSA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKVxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGRpc2FibGVkLCBgZm9jdXMoKWAgd2lsbCBsaWtlbHkgbm90IGhhdmUgdGhlXG4gICAgICAgICAgLy8gZGVzaXJlZCBlZmZlY3QuIFVzZSBgc2Nyb2xsSW50b1ZpZXcoKWAgaWYgYXZhaWxhYmxlOlxuICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAoZWxlbWVudC4kZWwgfHwgZWxlbWVudCkuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLmZvY3VzRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDogdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IHZhbHVlOiB0aGlzLnBhcnNlZFZhbHVlIH1cbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzUHJvbWlzZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBjb21wb25lbnRzID0ge31cblxuY29uc3QgRGl0b0NvbXBvbmVudCA9IFZ1ZS5leHRlbmQoe1xuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG4gIG1peGluczogW0RpdG9NaXhpbl0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFR5cGVDb21wb25lbnQsXG5cbiAgICByZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgbWl4aW5zID0gW10pIHtcbiAgICAgIC8vIEEgaGVscGVyIG1ldGhvZCB0byBhbGxvdyB0aHJlZSB0aGluZ3M6XG4gICAgICAvLyAtIFdoZW4gdXNlZCBpbiBhIGNvbXB1dGVkIHByb3BlcnR5LCBpdCByZW1vdmVzIHRoZSBuZWVkIHRvIGhhdmUgdG9cbiAgICAgIC8vICAgbG9hZCBjb21wb25lbnRzIHdpdGggYXN5bmMgZnVuY3Rpb25zIGBjb21wb25lbnQ6ICgpID0+IGltcG9ydCguLi4pYC5cbiAgICAgIC8vICAgaW5zdGVhZCwgdGhleSBjYW4gYmUgZGlyZWN0bHkgcHJvdmlkZWQ6IGBjb21wb25lbnQ6IGltcG9ydCguLi4pYFxuICAgICAgLy8gLSBUaGUgcHJvcGVydGllcyBwYXNzZWQgdG8gc3VjaCBjb21wb25lbnRzIGRvbid0IG5lZWQgdG8gYmUgZGVmaW5lZC5cbiAgICAgIC8vICAgSW5zdGVhZCwgdGhlIHByb3ZpZGVkIG1peGlucyBhcmUgYXV0b21hdGljYWxseSBpbmhlcml0ZWQuXG4gICAgICAvLyAtIFRoZSBjb21wb25lbnQgY2FuIHVzZSBhbGwgaW50ZXJuYWwgY29tcG9uZW50cyBrbm93biB0byBEaXRvLmpzIEFkbWluLlxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgICAgICA/IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBBdCBmaXJzdCwgcmVzb2x2ZSBjb21wb25lbnQgaXMgaXQgaXMgbG9hZGVkIGFzeW5jaHJvbm91c2x5LlxuICAgICAgICAgIGxldCBjb21wID0gaXNGdW5jdGlvbihjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50KClcbiAgICAgICAgICAgIDogaXNQcm9taXNlKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnRcbiAgICAgICAgICAgIDogY29tcG9uZW50XG4gICAgICAgICAgY29tcCA9IGNvbXA/LmRlZmF1bHQgfHwgY29tcFxuICAgICAgICAgIGNvbXAubWl4aW5zID0gbWl4aW5zXG4gICAgICAgICAgY29tcC5jb21wb25lbnRzID0gY29tcG9uZW50c1xuICAgICAgICAgIHJldHVybiBjb21wXG4gICAgICAgIH1cbiAgICAgICAgOiBjb21wb25lbnRcbiAgICB9LFxuXG4gICAgcmVzb2x2ZURpdG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbl0pXG4gICAgfSxcblxuICAgIHJlc29sdmVUeXBlQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW4sIFR5cGVNaXhpbl0pXG4gICAgfVxuICB9XG59KVxuXG5EaXRvQ29tcG9uZW50LmNvbXBvbmVudCA9IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbmFtZSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9XG4gICAgY29uc3QgY3RvciA9IHRoaXMuZXh0ZW5kKG9wdGlvbnMpXG4gICAgY29tcG9uZW50c1tuYW1lXSA9IGN0b3JcbiAgICByZXR1cm4gY3RvclxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdIHx8IFZ1ZS5jb21wb25lbnQobmFtZSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvVXNlciB7XG4gIGhhc1JvbGUoLi4ucm9sZXMpIHtcbiAgICBpZiAodGhpcy5yb2xlcykge1xuICAgICAgZm9yIChjb25zdCByb2xlIG9mIHJvbGVzKSB7XG4gICAgICAgIGlmICh0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWFDb21wb25lbnRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1haW5TY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzWzBdXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYERpdG9TY2hlbWEuY3JlYXRlZCgpL2Rlc3Ryb3llZCgpYCBvbiBpdHNcbiAgICAvLyAkcGFyZW50LCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCB7IGVycm9ycyB9KSA9PlxuICAgICAgICAgIGVycm9ycyAmJiByZXN1bHQgPyByZXN1bHQuY29uY2F0KGVycm9ycykgOiBlcnJvcnMsXG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkpKVxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmVyaWZ5QWxsKG1hdGNoKSlcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQucmVzZXRWYWxpZGF0aW9uKCkpXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQuY2xlYXJFcnJvcnMoKSlcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goXG4gICAgICAgIGl0ID0+IGl0LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Q29tbW9uUHJlZml4IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXMuYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgYmVmb3JlUm91dGVMZWF2ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXMuYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIC8vIFRPRE86IENhbiB0aGlzLiRyb3V0ZS5jdXJyZW50Um91dGUgYmUgb2YgdXNlIHNvbWV3aGVyZSBoZXJlP1xuICAgICAgLy8gUmV0cmlldmUgdGhlIHJvdXRlLXJlY29yZCB0byB3aGljaCB0aGlzIGNvbXBvbmVudCB3YXMgbWFwcGVkIHRvOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzMzgjaXNzdWVjb21tZW50LTI5NjM4MTQ1OVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy4kdm5vZGUuZGF0YS5yb3V0ZXJWaWV3RGVwdGhdXG4gICAgfSxcblxuICAgIGlzTGFzdFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhpcyByb3V0ZXIgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdXG4gICAgfSxcblxuICAgIGlzTGFzdFVubmVzdGVkUm91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZSB0aGF0XG4gICAgICAvLyBuZWVkcyBpdHMgb3duIHJvdXRlci12aWV3ICg9IGlzIG5vdCBuZXN0ZWQpLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgZm9yIChsZXQgaSA9IG1hdGNoZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gbWF0Y2hlZFtpXVxuICAgICAgICBpZiAoIXJlY29yZC5tZXRhLm5lc3RlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSByZWNvcmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzTmVzdGVkUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLm5lc3RlZFxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkLnBhdGgpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWIoKSB7XG4gICAgICBjb25zdCB7IGJyZWFkY3J1bWIgfSA9IHRoaXMuc2NoZW1hIHx8IHt9XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYiB8fCBgJHt0aGlzLmJyZWFkY3J1bWJQcmVmaXh9ICR7dGhpcy5sYWJlbH1gXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9LFxuXG4gICAgcGFyYW0oKSB7XG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciB2dWUtcm91dGVyIG5vdCBiZWluZyBhYmxlIHRvIG1hcCBtdWx0aXBsZSB1cmwgcGFyYW1ldGVyc1xuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBuYW1lIHRvIG11bHRpcGxlIGNvbXBvbmVudHMsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGFyYW1zW3RoaXMubWV0YT8ucGFyYW1dIHx8IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlLCBzZWUgRGl0b0Zvcm1cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gS2VlcCBhIHNoYXJlZCBzdGFjayBvZiByb290IGNvbXBvbmVudHMgZm9yIERpdG9UcmFpbCB0byB1c2UgdG8gcmVuZGVyXG4gICAgLy8gbGFiZWxzLiBDYW4ndCByZWx5IG9uICRyb3V0ZS5tYXRjaGVkW2ldLmluc3RhbmNlcy5kZWZhdWx0IHVuZm9ydHVuYXRlbHksXG4gICAgLy8gYXMgaW5zdGFuY2VzIGFyZW4ndCBpbW1lZGlhdGVseSByZWFkeSwgYW5kIGluc3RhbmNlcyBpcyBub3QgcmVhY3RpdmUuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMucHVzaCh0aGlzKVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgIHJvdXRlQ29tcG9uZW50cy5zcGxpY2Uocm91dGVDb21wb25lbnRzLmluZGV4T2YodGhpcyksIDEpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgICBsZXQgb2sgPSB0cnVlXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSAoXG4gICAgICAgIC8vIE9ubHkgaGFuZGxlIHRoaXMgcm91dGUgY2hhbmdlIGlmIHRoZSBmb3JtIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGVcbiAgICAgICAgLy8gYGZyb21gIHJvdXRlLCBidXQgaW5jbHVkZSBwYXJlbnQgZm9ybXMgb2YgY2xvc2luZyBuZXN0ZWQgZm9ybXMgYXMgYXNcbiAgICAgICAgLy8gd2VsbCwgYnkgbWF0Y2hpbmcgdGhlIHRoZSBzdGFydCBvZiBmcm9tL3RvIHBhdGggYWdhaW5zdCBgdGhpcy5wYXRoYDpcbiAgICAgICAgZnJvbS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAhdG8ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgLy8gRXhjbHVkZSBoYXNoIGNoYW5nZXMgb25seSAoPSB0YWIgY2hhbmdlcyk6XG4gICAgICAgIGZyb20ucGF0aCAhPT0gdG8ucGF0aCAmJiAoXG4gICAgICAgICAgdGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkgfHxcbiAgICAgICAgICAvLyBEZWNpZGUgaWYgd2UncmUgbW92aW5nIHRvd2FyZHMgYSBuZXcgbmVzdGVkIGZvcm0sIG9yIGNsb3NpbmcgL1xuICAgICAgICAgIC8vIHJlcGxhY2luZyBhbiBhbHJlYWR5IG9wZW4gb25lIGJ5IGNvbXBhcmluZyBwYXRoIGxlbmd0aHMuXG4gICAgICAgICAgLy8gVGhlIGNhc2Ugb2YgYD1gIG1hdGNoZXMgdGhlIHJlcGxhY2luZyBvZiBhbiBhbHJlYWR5IG9wZW4gb25lLlxuICAgICAgICAgIHRvLnBhdGgubGVuZ3RoIDw9IGZyb20ucGF0aC5sZW5ndGhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgaWYgKGlzQ2xvc2luZykge1xuICAgICAgICBpZiAodGhpcy5kb2VzTXV0YXRlKSB7XG4gICAgICAgICAgLy8gRm9yIGFjdGl2ZSBkaXJlY3RseSBtdXRhdGluZyAobmVzdGVkKSBmb3JtcyB0aGF0IHdlcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAgIC8vIHlldCwgdmFsaWRhdGUgdGhlbSBvbmNlLiBJZiB0aGUgdXNlciB0aGVuIHN0aWxsIHdhbnRzIHRvIGxlYXZlXG4gICAgICAgICAgLy8gdGhlbSwgdGhleSBjYW4gY2xpY2sgY2xvc2UgLyBuYXZpZ2F0ZSBhd2F5IGFnYWluLlxuICAgICAgICAgIG9rID0gKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCB8fFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbCgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXNuJ3QgZGlyZWN0bHkgbXV0YXRlIGRhdGEuIElmIGl0IGlzIGRpcnR5LCBhc2sgaWYgdXNlclxuICAgICAgICAgIC8vIHdhbnRzIHRvIHBlcnNpc3QgZGF0YSBmaXJzdC5cbiAgICAgICAgICBpZiAodGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICBvayA9IHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgICAgICBgWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmJzLmNhbmNlbFxuICAgICAgICAgICAgICB9P2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHQob2spXG4gICAgfSxcblxuICAgIGdldFJvdXRlUGF0aCh0ZW1wbGF0ZVBhdGgpIHtcbiAgICAgIC8vIE1hcHMgdGhlIHJvdXRlJ3MgYWN0dWFsIHBhdGggdG8gdGhlIG1hdGNoZWQgcm91dGVzIGJ5IGNvdW50aW5nIGl0c1xuICAgICAgLy8gcGFydHMgc2VwYXJhdGVkIGJ5ICcvJywgc3BsaXR0aW5nIHRoZSBwYXRoIGludG8gdGhlIG1hcHBlZCBwYXJ0c1xuICAgICAgLy8gY29udGFpbmluZyBhY3R1YWwgcGFyYW1ldGVycy5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5zbGljZSgwLCB0ZW1wbGF0ZVBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgIC5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIGlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBUaGUgcm91dGUgcGF0aCBpcyB0aGUgcGF0aCB1cCB0byB0aGUgZmlyc3QgLyAoZXhjbHVkaW5nIHRoZSBpbml0aWFsIC8pOlxuICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLnBhdGgubWF0Y2goL14oXFwvW14vXSopLylbMV1cbiAgICAgIHJldHVybiAhZ2V0Q29tbW9uUHJlZml4KHRvLnBhdGgsIGZyb20ucGF0aCkuc3RhcnRzV2l0aChyb290UGF0aClcbiAgICB9XG4gIH1cbn1cbiIsIlxuLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4vLyBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoYW5kbGluZyBpbiBEaXRvRm9ybSwgd2hlcmUgYHYtc2hvd2AgaXNcbi8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50Llxucm91dGVyLXZpZXcoXG4gIHYtaWY9XCIhaXNMYXN0Um91dGVcIlxuICA6a2V5PVwibmFtZVwiXG4pXG4uZGl0by12aWV3LmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudCwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgLi4uY29tcG9uZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDogc2NoZW1hXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIHJldHVybiBzb21lU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICB0aGlzLnZpZXdTY2hlbWEsXG4gICAgICAgIGNvbXBvbmVudCA9PiBoYXNSZXNvdXJjZShjb21wb25lbnQpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICBpZiAodGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICAvLyBMaXN0cyBpbnNpZGUgc2luZ2xlLWNvbXBvbmVudCB2aWV3cyB1c2UgdGhlIHZpZXcncyBwYXRoIGZvciBzdWItcGF0aHM6XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB0aGlzLnBhdGhcbiAgICAgICAgOiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29weURhdGUoZGF0ZSxcbiAge1xuICAgIHllYXIgPSBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gICAgbW9udGggPSBkYXRlPy5nZXRNb250aCgpID8/IDAsXG4gICAgZGF5ID0gZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91ciA9IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgICBtaW51dGUgPSBkYXRlPy5nZXRNaW51dGVzKCkgPz8gMCxcbiAgICBzZWNvbmQgPSBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZCA9IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbiAgfSA9IHt9XG4pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREYXRlKGRhdGUpIHtcbiAgcmV0dXJuIGlzRGF0ZShkYXRlKSA/IGRhdGUgOiBkYXRlID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsXG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldCwgZXZlbnRzKSB7XG4gIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICB9XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24pIHtcbiAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChhcmd1bWVudHNbMF0sIDEwKVxuICB9XG4gIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0byAtIGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgY29uc3QgcGVyVGljayA9IGRpZmZlcmVuY2UgLyBkdXJhdGlvbiAqIDEwXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgKyBwZXJUaWNrXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT09IHRvKSByZXR1cm5cbiAgICAgIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbiAtIDEwKVxuICAgIH0pXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZmllbGQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKGZpZWxkLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgIGNvbnN0IHJhbmdlID0gZmllbGQuY3JlYXRlVGV4dFJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpXG4gICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKVxuICAgIHJhbmdlLnNlbGVjdCgpXG4gICAgZmllbGQuZm9jdXMoKVxuICB9IGVsc2UgaWYgKGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgZmllbGQuZm9jdXMoKVxuICAgIGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBmaWVsZCkge1xuICAgIGZpZWxkLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnRcbiAgICBmaWVsZC5zZWxlY3Rpb25FbmQgPSBlbmRcbiAgICBmaWVsZC5mb2N1cygpXG4gIH1cbn1cbiIsIlxuLmRpdG8tY2FsZW5kYXJcbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiAxIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICApIHt7IHllYXIgfX1cbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNhbGVuZGFyXG4gICAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhblxuICAgICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKGRhdGUuZGF0ZSwgZGF0ZS5zdGF0ZSwgdHJ1ZSlcIlxuICAgICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheShcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSwgeyB5ZWFyOiAxLCBtb250aDogMSwgZGF5OiAxIH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhblxuICAgICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNhbGVuZGFyXG4gICAgbWluLXdpZHRoOiAyNDBweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcblxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICB6LWluZGV4OiAxMDAwXG5cbiAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KVxuICAgICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KVxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheVxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmVcbiAgICAgICYsXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgY29sb3I6IHdoaXRlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogd2hpdGVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5XG4gICAgICBjb2xvcjogIzk5OVxuXG4gIC5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICBzcGFuXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNClcbiAgICAgIG1hcmdpbjogMC41ZW0gMFxuXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNSlcblxuICAuZGl0by1jYWxlbmRhciBhLFxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhblxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBjdXJzb3I6IHBvaW50ZXJcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhblxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGFcbiAgICAgIHBhZGRpbmc6IDAgMC4yZW1cblxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuXG4gIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW5cbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgQGV4dGVuZCAlaW5wdXQtaGVpZ2h0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgdGV4dC1hbGlnbjogY2VudGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICA+IHNwYW5cbiAgICAgIG1hcmdpbjogYXV0b1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgIGFcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG5cbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICB3aWR0aDogNSVcbiAgICBtaW4td2lkdGg6IDJlbVxuICAgIG1heC13aWR0aDogM2VtXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIGZvbnQtc2l6ZTogMS4yNWVtXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldlxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC5J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwqsnXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dFxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC6J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwrsnXG5cbiAgLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5XG4gICAgJjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICdOb3cnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY29weURhdGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTpcbiAgICAgICAgdGhpcy52YWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGN1cnJlbnRWYWx1ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbCB8fCBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIG1vbnRoID09PSB0aGlzLnZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIHllYXIgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSwgc3RhdGUsIGNvcHkgPSBmYWxzZSkge1xuICAgICAgaWYgKHN0YXRlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoZGF0ZSwgeyB5ZWFyLCBtb250aCwgZGF5IH0pIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IGhvciwgdmVyLCBlbnRlciB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRNb2RlLCBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChob3IgfHwgdmVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgaG9yICsgdmVyICogN1xuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBob3IgKyB2ZXIgKiA2XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBob3IgKyB2ZXIgKiA1XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMudmFsdWUpID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KHRvZGF5KSA/ICd0b2RheSdcbiAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKSA/ICdjdXJyZW50J1xuICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgdHJhbnNpdGlvbig6bmFtZT1cInRyYW5zaXRpb25cIilcbiAgICAgIC5kaXRvLXBvcHVwKFxuICAgICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgKVxuICAgICAgICBzbG90KFxuICAgICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG4gIEBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucy9pbmRleC5zYXNzJ1xuXG4gIC5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgLmRpdG8tdHJpZ2dlci1kaXNhYmxlZFxuICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3JcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAqXG4gICAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmZvY3VzXG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmVcblxuICAuZGl0by1wb3B1cFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgIHRvcDogMFxuICAgIGxlZnQ6IDBcbiAgICB6LWluZGV4OiAxMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnY2xpY2snIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tJyB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjdXN0b21DbGFzczogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB6SW5kZXg6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAga2VlcEluVmlldzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGlkZVdoZW5DbGlja091dHNpZGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFsd2F5c1Nob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb3ZlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhpZGVEZWxheTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgcG9wdXBQbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tdHJpZ2dlci1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wdXBDbGFzcygpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgIFtgZGl0by1wb3B1cC0ke2h5cGhlbmF0ZSh0aGlzLnBsYWNlbWVudCl9YF06IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXNbdGhpcy5jdXN0b21DbGFzc10gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBwb3B1cFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID8gYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCA6ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3cgfHwgdGhpcy5hbHdheXNTaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0aGlzLmZvY3VzRXZlbnRzID0gYWRkRXZlbnRzKHRhcmdldCwge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZVdoZW5DbGlja091dHNpZGUgJiYgIXRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgLy8gVXNlICdtb3VzZXVwJyBpbnN0ZWFkIG9mICdjbGljaycsIHNpbmNlIGNsaWNrIGFwcGVhcnMgdG8gaGFwcGVuIGFmdGVyXG4gICAgICAvLyB0aGUgRE9NIGluc2lkZSBvZiBwb3B1cHMgY291bGQgY2hhbmdlIGluIGEgd2F5IHNvIHRoYXQgdGhlIGNoZWNrXG4gICAgICAvLyBgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KWAgd291bGQgZmFpbDpcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCAmJlxuICAgICAgICAgICAgIXBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0cmlnZ2VyLmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNob3dQb3B1cCA9IHRoaXMuc2hvd1xuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gbnVsbFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyh0aGlzLnRhcmdldClcbiAgICAgICAgPyB0aGlzLiRyZWZzW3RoaXMudGFyZ2V0XVxuICAgICAgICA6IHRoaXMudGFyZ2V0XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgICBjb25zdCBlbCA9IHRhcmdldCA9PT0gcG9wdXAgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RDaGlsZFxuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS53aWR0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSAodGFyZ2V0IHx8IHRyaWdnZXIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGggLSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodCAtIHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG5cbiAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZS1wb3NpdGlvbicsIHtcbiAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgcG9wdXAsXG4gICAgICAgIHBsYWNlbWVudDogdGhpcy5wb3B1cFBsYWNlbWVudFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25DbGljaygpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLnNob3dQb3B1cFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkhvdmVyKGVudGVyKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VMZWF2ZVRpbWVyKVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5oaWRlRGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgIH0sIHRoaXMuaGlkZURlbGF5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8taW5wdXRcbiAgaW5wdXQoXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1pbnB1dFxuICAgIGlucHV0KFxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1pbnB1dFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIEBleHRlbmQgJWlucHV0XG4gICAgaW5wdXRcbiAgICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgICAgYWxsOiBpbmhlcml0XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBib3JkZXI6IDBcbiAgICAgIG1hcmdpbjogMFxuICAgICAgcGFkZGluZzogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgdmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgICAvKlxuICAgIGNsZWFyYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gICAgc3VmZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwcmVmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gICAgKi9cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlLFxuICAgICAgICAkYXR0cnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgLi4uJGF0dHJzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIC8vIFJlbW92ZSAnaW5wdXQnIGxpc3RlbmVyIGJlY2F1c2Ugd2UncmUgaGFuZGxpbmcgaXQgc2VwYXJhdGVseSBiZWxvdyxcbiAgICAgIC8vIGJ1dCBwYXNzIG9uIGFsbCBvdGhlcnMgdG8gdGhlIHdyYXBwZWQgbmF0aXZlIGVsZW1lbnQ6XG4gICAgICBjb25zdCB7IGlucHV0LCAuLi5saXN0ZW5lcnMgfSA9IHRoaXMuJGxpc3RlbmVyc1xuICAgICAgcmV0dXJuIGxpc3RlbmVyc1xuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+IHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDBcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKG5ld1ZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICBjYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgIEBpbnB1dD1cInNlbGVjdERhdGVcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRWYWx1ZVwiXG4gICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4gIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIC8vIGljb24odHlwZT1cImNhbGVuZGFyXCIgOmNvbG9yPVwiaWNvbkNvbG9yXCIpXG4gICAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZGF0ZS1waWNrZXJcbiAgICBtaW4td2lkdGg6IDEwZW1cbiAgICAuZGl0by1pbnB1dFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICB3aWR0aDogMTAwJVxuICAuZGl0by1kYXRlLXBpY2tlci1wb3B1cFxuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSkgfHwgJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICBpbnB1dC1maWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICByZWFkb25seVxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICApXG4gIC8vIGljb24odHlwZT1cInRpbWVcIlxuICAvLyAgIDpjb2xvcj1cImRpc2FibGVkID8gJyNiZmJmYmYnIDogKHRleHQgPyAnIzY2NicgOiAnI2JmYmZiZicpXCJcbiAgLy8gKVxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihcbiAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAwXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShcbiAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgICAvLyAgIDpjb2xvcj1cImRpc2FibGVkID8gJyNiZmJmYmYnIDogKHRleHQgPyAnIzY2NicgOiAnI2JmYmZiZicpXCJcbiAgICAvLyApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgIClcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihcbiAgICAgICAgICByZWY9XCJob3VyXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQoXG4gICAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICB3aWR0aDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbWF4LXdpZHRoOiAxNjBweFxuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuXG4gICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweFxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAuZGl0by1pY29uLXRpbWVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIHRvcDogMFxuICAgICAgICByaWdodDogN3B4XG4gICAgICAgIGhlaWdodDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbGlzdC1zdHlsZTogbm9uZVxuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICBvdmVyZmxvdzogaGlkZGVuXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICBmbG9hdDogbGVmdFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci13aWR0aDogMCAxcHggMFxuICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KVxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAmOmxhc3QtY2hpbGRcbiAgICAgIGJvcmRlci1yaWdodDogMFxuICAgIHVsXG4gICAgICBvdmVyZmxvdy14OiBoaWRkZW5cbiAgICAgIG92ZXJmbG93LXk6IGF1dG9cbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXJnaW46IDBcbiAgICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgIHBhZGRpbmc6IDAgMTdweCAwIDBcbiAgICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgJiA+IGxpXG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICAgJi5zZWxlY3RlZDpob3ZlclxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgJi5kaXNhYmxlZFxuICAgICAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcbiAgICAgICAgJi5kaXNhYmxlZDpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQge1xuICBjb3B5RGF0ZSwgc2Nyb2xsVG8sIHNldFNlbGVjdGlvbiwgZ2V0S2V5TmF2aWdhdGlvblxufSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZEhvdXI6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRNaW51dGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRTZWNvbmQ6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IDAsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWVcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5ob3VyKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5taW51dGUpfToke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLnNlY29uZCl9YFxuICAgICAgICA6ICcnXG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2VsZWN0aW9uOiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKDApXG4gICAgICB9XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdChuZXdWYWwgPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuJG9uKCdibHVyJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3Rpb24oZm9yY2UgPSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwIHx8IGZvcmNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gMyAqIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLiRyZWZzLmlucHV0LCBzdGFydCwgc3RhcnQgKyAyKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKGR1cmF0aW9uID0gMTAwKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIC8vIEZpcnN0IGFuZCBhbHN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luXG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRhcmdldC5zY3JvbGxIZWlnaHQgLyAodGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCArIDYpXG4gICAgICAgICAgc2Nyb2xsVG8odGFyZ2V0LCBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodCksIGR1cmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddW3RoaXMuc2VsZWN0aW9uXVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaG9yLCB2ZXIsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICBpZiAoaG9yKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvbiArIGhvclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID1cbiAgICAgICAgICAgIHZhbHVlIDwgMCA/IDJcbiAgICAgICAgICAgIDogdmFsdWUgPiAyID8gMFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKHZlcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tzZWxlY3RlZF0gKyB2ZXJcbiAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy4kcmVmc1tzZWxlY3RlZF0uY2hpbGRyZW5cbiAgICAgICAgICB0aGlzW3NlbGVjdGVkXSA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyB2YWx1ZSArIGxlbmd0aFxuICAgICAgICAgICAgOiB2YWx1ZSA+PSBsZW5ndGggPyB2YWx1ZSAtIGxlbmd0aFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9yIHx8IHZlciB8fCBlbnRlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRydWUpXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gIHJlZj1cInBpY2tlclwiXG4pXG4gIC5kaXRvLXBpY2tlcnMoXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gIClcbiAgICBkYXRlLXBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIDpzaG93LnN5bmM9XCJzaG93RGF0ZVwiXG4gICAgICBAZm9jdXM9XCJkYXRlRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJkYXRlRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2Vob2xkZXIsIGxvY2FsZSwgZGF0ZUZvcm1hdCwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIHRpbWUtcGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIDpzaG93LnN5bmM9XCJzaG93VGltZVwiXG4gICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihcbiAgICByZWY9XCJwaWNrZXJcIlxuICApXG4gICAgLmRpdG8tcGlja2VycyhcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgIClcbiAgICAgIGRhdGUtcGlja2VyKFxuICAgICAgICByZWY9XCJkYXRlXCJcbiAgICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICAgIDpzaG93LnN5bmM9XCJzaG93RGF0ZVwiXG4gICAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2Vob2xkZXIsIGxvY2FsZSwgZGF0ZUZvcm1hdCwgZGlzYWJsZWQgfVwiXG4gICAgICApXG4gICAgICB0aW1lLXBpY2tlcihcbiAgICAgICAgcmVmPVwidGltZVwiXG4gICAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgICA6c2hvdy5zeW5jPVwic2hvd1RpbWVcIlxuICAgICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyXG4gICAgLmRpdG8tcGlja2Vyc1xuICAgICAgQGV4dGVuZCAlaW5wdXRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgLmRpdG8tZGF0ZS1waWNrZXJcbiAgICAgIHdpZHRoOiA2MCVcbiAgICAgIG1pbi13aWR0aDogNi45ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDBcbiAgICAuZGl0by10aW1lLXBpY2tlclxuICAgICAgd2lkdGg6IDQwJVxuICAgICAgbWluLXdpZHRoOiA1LjRlbVxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwXG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvY3VzZWQgfHwgdGhpcy50aW1lRm9jdXNlZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdChuZXdWYWwgPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuJG9uKCdibHVyJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuYmx1cigpXG4gICAgICB0aGlzLiRyZWZzLnRpbWUuYmx1cigpXG4gICAgfVxuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiXG5pLmRpdG8taWNvbig6Y2xhc3M9XCJgZGl0by1pY29uLSR7bmFtZX1gXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpLmRpdG8taWNvbig6Y2xhc3M9XCJgZGl0by1pY29uLSR7bmFtZX1gXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4gIC8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Fzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuICAvLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbiAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuICBAZWFjaCAkbmFtZSBpbiAkaWNvbnNcbiAgICAuZGl0by1pY29uLSN7JG5hbWV9XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFnaW5hdGlvblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKHYtZWxzZSkgMFxuICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgIDpjbGFzcz1cImdldFBhZ2VDbGFzcyhwYWdlKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICkge3sgcGFnZS50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYWdpbmF0aW9uXG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKHYtaWY9XCJ0b3RhbCA+IDBcIikge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICAgIHRlbXBsYXRlKHYtZWxzZSkgMFxuICAgICAgfCAgLyB7eyB0b3RhbCB9fVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgICAgIDpjbGFzcz1cImdldFBhZ2VDbGFzcyhwYWdlKVwiXG4gICAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgKVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgICApIHt7IHBhZ2UudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYWdpbmF0aW9uXG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXBhZ2luYXRpb24tdG90YWxcbiAgICAgICtlbGxpcHNpc1xuICAgICAgbWFyZ2luOiAwIDAuNWVtXG4gICAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodFxuICAgIC5kaXRvLWJ1dHRvblxuICAgICAgdHJhbnNpdGlvbjogYWxsIC4zcyBlYXNlLCBjb2xvciAwcywgYmFja2dyb3VuZCAwcywgYm9yZGVyIDBzXG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgICAmLXByZXYsXG4gICAgICAmLW5leHRcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1hcnJvd1xuICAgICAgJi1wcmV2OjpiZWZvcmVcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG4gICAgICAmLWVsbGlwc2lzLXByZXYsXG4gICAgICAmLWVsbGlwc2lzLW5leHRcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1lbGxpcHNpc1xuICAgICAgICAmOmhvdmVyOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zXG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgICAmOmZvY3VzXG4gICAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgJjphY3RpdmVcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lXG4gICAgICAmLWVsbGlwc2lzLXByZXY6OmJlZm9yZVxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSlcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAgcGFnZTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDEgfSxcbiAgICBwYWdlU2l6ZTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDEwIH0sXG4gICAgc2hvd1RvdGFsOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VSYW5nZTogW10sXG4gICAgICBzaG93UHJldjogdHJ1ZSxcbiAgICAgIHNob3dOZXh0OiB0cnVlLFxuICAgICAgbnVtUGFnZXM6IDAsXG4gICAgICBjdXJyZW50UGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICBjdXJyZW50UGFnZTogdGhpcy5wYWdlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZmlyc3QoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMuY3VycmVudFBhZ2VTaXplICsgMVxuICAgIH0sXG5cbiAgICBsYXN0KCkge1xuICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3QgKyB0aGlzLmN1cnJlbnRQYWdlU2l6ZSAtIDEsIHRoaXMudG90YWwpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdG90YWw6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dQcmV2OiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93TmV4dDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG5cbiAgICBwYWdlKHBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlXG4gICAgfSxcblxuICAgIHBhZ2VTaXplKHBhZ2VTaXplKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHBhZ2VTaXplXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlU2l6ZShjdXJyZW50UGFnZVNpemUpIHtcbiAgICAgIHRoaXMubnVtUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbCAvIGN1cnJlbnRQYWdlU2l6ZSlcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy5udW1QYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5udW1QYWdlc1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgdGhpcy4kZW1pdCgnc2l6ZS1jaGFuZ2UnLCB0aGlzLnBhZ2UsIGN1cnJlbnRQYWdlU2l6ZSlcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IG9sZFZhbCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgbmV3VmFsKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemVcbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGlja1BhZ2UocGFnZSkge1xuICAgICAgaWYgKHBhZ2UuaW5kZXggJiYgIXBhZ2UuZGlzYWJsZWQgJiYgcGFnZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZS5pbmRleFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYWdlQ2xhc3MocGFnZSkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBwYWdlLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKHBhZ2UudHlwZSkge1xuICAgICAgICBjbGFzc2VzW2BkaXRvLWJ1dHRvbi0ke3BhZ2UudHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHVwZGF0ZVBhZ2VSYW5nZSgpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCB0b3RhbCwgY3VycmVudFBhZ2VTaXplLCBjdXJyZW50UGFnZSB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG4gICAgICBjb25zdCBudW1QYWdlcyA9IHRoaXMubnVtUGFnZXMgPSBNYXRoLmNlaWwodG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG5cbiAgICAgIGxldCBzdGFydCA9IDFcbiAgICAgIGxldCBlbmQgPSAxXG4gICAgICBpZiAobnVtUGFnZXMgPD0gc2hvd0xlbmd0aCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA8PSBzaG93UHJldiArIDEpIHtcbiAgICAgICAgZW5kID0gc2hvd0xlbmd0aFxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSBudW1QYWdlcyAtIHNob3dOZXh0KSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICAgIHN0YXJ0ID0gbnVtUGFnZXMgLSBzaG93TGVuZ3RoICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50UGFnZSAtIHNob3dQcmV2XG4gICAgICAgIGVuZCA9IGN1cnJlbnRQYWdlICsgc2hvd05leHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZVJhbmdlID0gW11cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlIC0gMSxcbiAgICAgICAgdHlwZTogJ3ByZXYnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPD0gMVxuICAgICAgfSlcbiAgICAgIGlmIChzdGFydCA+PSAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IDEsIHRleHQ6IDEgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA+IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1heCgxLCBjdXJyZW50UGFnZSAtIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtcHJldidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBhY3RpdmU6IGkgPT09IGN1cnJlbnRQYWdlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDwgbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5taW4obnVtUGFnZXMsIGN1cnJlbnRQYWdlICsgMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1uZXh0J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8PSBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogbnVtUGFnZXMsIHRleHQ6IG51bVBhZ2VzIH0pXG4gICAgICB9XG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSArIDEsXG4gICAgICAgIHR5cGU6ICduZXh0JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlID49IG51bVBhZ2VzXG4gICAgICB9KVxuXG4gICAgICB0aGlzLnBhZ2VSYW5nZSA9IHBhZ2VSYW5nZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc3dpdGNoKFxuICAgIDpjbGFzcz1cImNsYXNzZXNcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgICAgaW5wdXQoXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgIHNwYW4uZGl0by1zd2l0Y2gtbGFiZWwoXG4gICAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgICAgKVxuICAgICAgICBzbG90KFxuICAgICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgICBzbG90KFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLy8gVXNlIHdob2xlIG11bHRpcGxlcyBvZiBgcmVtYCBmb3Igc2l6ZXMgYW5kIGBweGAgbWFyZ2lucy9wYWRkaW5nIGFsb25nXG4gICAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLiBgcmVtYCBpcyBuZWVkZWQgYmVjYXVzZSB3ZVxuICAgIC8vIGNoYW5nZSBgZm9udC1zaXplYCBpbnNpZGUgYC5kaXRvLXN3aXRjaC1idXR0b25gXG4gICAgLS1zd2l0Y2gtd2lkdGg6IDRyZW1cbiAgICAtLXN3aXRjaC1oZWlnaHQ6IDJyZW1cbiAgICAtLXN3aXRjaC1tYXJnaW46IDJweFxuICAgIC0tc3dpdGNoLXBhZGRpbmc6IDNweFxuICAgIC0tc3dpdGNoLXNwZWVkOiAzMDBtc1xuICAgIC0tbGFiZWwtbWFyZ2luOiAwLjVlbVxuXG4gICAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKVxuICAgIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKVxuICAgIC0tb2Zmc2V0OiBjYWxjKHZhcigtLXdpZHRoKSAtIHZhcigtLWhlaWdodCkpXG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICBoZWlnaHQ6IHZhcigtLXN3aXRjaC1oZWlnaHQpXG4gICAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICAgIHZlcnRpY2FsLWFsaWduOiAtMjUlXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgd2lkdGg6IHZhcigtLXdpZHRoKVxuICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpXG4gICAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICB0b3A6IDUwJVxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpXG4gICAgaW5wdXRcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgYXBwZWFyYW5jZTogbm9uZVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuM3MsIGJhY2tncm91bmQtY29sb3IgLjNzXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAvLyBTZXQgZm9udC1zaXplIHRvIGhlaWdodCwgc28gd2UgY2FuIHVzZSB3aWR0aC9oZWlnaHQgPSAxZW0gZm9yIGNpcmNsZTpcbiAgICAgIGZvbnQtc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSlcbiAgICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZylcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG4gICAgICBib3JkZXItcmFkaXVzOiAwLjVlbVxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKVxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pXG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgJi5kaXRvLWNoZWNrZWRcbiAgICAgIGlucHV0XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpXG4gICAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgICAgbGVmdDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgICByaWdodDogdW5zZXRcbiAgICAmLmRpdG8tZGlzYWJsZWRcbiAgICAgIEBleHRlbmQgJWJ1dHRvbi1kaXNhYmxlZFxuICAgICY6Zm9jdXMtd2l0aGluOm5vdCg6aG92ZXIpXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxzOiB7IHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZDogdGhpcy52YWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNoZWNrZWQsIGRpc2FibGVkIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jaGVja2VkJzogY2hlY2tlZCxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsczogeyBjaGVja2VkLCB1bmNoZWNrZWQgfSA9IHt9IH0gPSB0aGlzXG4gICAgICAvLyBDYWxjdWxhdGUgYC0tc3dpdGNoLXdpZHRoYCBpbiBgcmVtYCwgYmFzZWQgb24gbGFiZWwgbGVuZ3RoLlxuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoMCwgY2hlY2tlZD8ubGVuZ3RoLCB1bmNoZWNrZWQ/Lmxlbmd0aClcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLXN3aXRjaC13aWR0aCc6IGxlbmd0aCA/IGAke2xlbmd0aCAqIDEuNX1yZW1gIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBpZCwgbmFtZSwgZGlzYWJsZWQsICRhdHRycyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgaWQsIG5hbWUsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKHZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJGR1cmF0aW9uOiAwLjE1c1xuICAuaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbiAgLmhlaWdodC1sZWF2ZS1hY3RpdmVcbiAgICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgLmhlaWdodC1lbnRlcixcbiAgLmhlaWdodC1sZWF2ZS10b1xuICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcblxuICBwcm9wczoge1xuICAgIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgcmVuZGVyOiAoY3JlYXRlRWxlbWVudCwgY29udGV4dCkgPT4gY3JlYXRlRWxlbWVudChcbiAgICAndHJhbnNpdGlvbicsXG4gICAgY29udGV4dC5wcm9wcy5lbmFibGVkXG4gICAgICA/IHtcbiAgICAgICAgcHJvcHM6IHsgbmFtZTogJ2hlaWdodCcgfSxcbiAgICAgICAgb246IGV2ZW50c1xuICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBjb250ZXh0LmNoaWxkcmVuXG4gIClcbn1cblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgZXZlbnRzID0ge1xuICBhZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6ICdhdXRvJyB9KSlcbiAgfSxcblxuICBlbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIGxlYXZlKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pXG4gICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJ1xuXG4gIC5kaXRvLXJvb3RcbiAgICBoZWlnaHQ6IDEwMCVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1yb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IHtcbiAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICB9W3R5cGVdIHx8ICdOb3RpZmljYXRpb24nXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IHtcbiAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICB9W3R5cGVdIHx8ICdlcnJvcidcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cykpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICAgIHVsLmRpdG8tc2Nyb2xsXG4gICAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLW1lbnVcbiAgICBmbGV4OiBpbml0aWFsXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdWxcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGVcbiAgICBhLFxuICAgIGgxXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgIGgxXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3RcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1saW5rXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gIC5kaXRvLWxpbmtcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1tZW51Jywge30pXG48L3NjcmlwdD5cbiIsIlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4iLCI8dGVtcGxhdGU+XG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIFxuICBuYW1lOiAnUHVsc2VMb2FkZXInLFxuXG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7IFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuICBkYXRhICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICBcdGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgIFx0d2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICBcdG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICBcdGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi8qLnYtc3Bpbm5lclxue1xuICAgIG1hcmdpbjogMTAwcHggYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4qL1xuXG5ALXdlYmtpdC1rZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiXG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gIHNsb3RcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIC5kaXRvLXRyYWlsXG4gICAgICB1bFxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgICBzbG90XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWhlYWRlclxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ibGFja1xuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHNwYW5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXRyYWlsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBoZWlnaHQ6IDNlbVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nXG4gICAgICB1bFxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjRlbVxuICAgICAgICAkYW5nbGU6IDMzZGVnXG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBjb2xvcjogIzk5OVxuICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgICAgY29udGVudDogJydcbiAgICAgICAgICB3aWR0aDogMXB4XG4gICAgICAgICAgaGVpZ2h0OiAxLjJlbVxuICAgICAgICAgIHJpZ2h0OiAtMXB4XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgdG9wOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgYm90dG9tOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbVxuICAgIC5kaXRvLXNwaW5uZXJcbiAgICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyXG4gICAgLmRpdG8tZGlydHlcbiAgICAgICY6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogOHB4XG4gICAgICAgIGhlaWdodDogOHB4XG4gICAgICAgIG1hcmdpbjogMnB4XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbVxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlXG4gICAgLmRpdG8tYWNjb3VudCxcbiAgICAuZGl0by1sb2dpblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IDBcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLWFjY291bnRcbiAgICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bHNlTG9hZGVyIGZyb20gJ3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUnXG5cbmNvbnN0IFNwaW5uZXIgPSBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnc3Bpbm5lcicsIFB1bHNlTG9hZGVyKVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8taGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IFNwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICBjb25zdCB7IHByb3BzIH0gPSBTcGlubmVyLm9wdGlvbnNcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93bihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICApXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBhKFxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApXG4gICAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1hY2NvdW50XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCIpXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLnYtLW1vZGFsLW92ZXJsYXlcbiAgICB6LWluZGV4OiAyMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpbmRvd0V2ZW50czogbnVsbCxcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5uYW1lXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5tYXAoXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgICAgKFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjYW5jZWwnICYmICFzY2hlbWEuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2FuY2VsICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGlkZSgpIHtcbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZShudWxsKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIHYtaWY9XCJjb250ZW50XCJcbiAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb250ZW50XCJcbiAgICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICAgIDpjbGFzcz1cImNsYXNzZXNcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICkge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgKVxuICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gIClcbiAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQuZGl0by1sYWJlbChcbiAgICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gICAgOmlzPVwidGFnXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICApXG4gICAgLmRpdG8tY2hldnJvbihcbiAgICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gICAgKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgfHw9ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGUgaW5kZXguXG4gICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIGlmIChpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBpbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRleHQgPSBgJHtpbmRleCArIDF9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdCA/IHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA6IHRleHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tc2NoZW1hXG4gIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgKVxuICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgKVxuICAgICAgICAvLyBQYXNzIGVkaXQtYnV0dG9ucyB0aHJvdWdoIHRvIGRpdG8tbGFiZWwncyBvd24gZWRpdC1idXR0b25zIHNsb3Q6XG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgIClcbiAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgIGRpdG8tdGFicyhcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICApXG4gICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIClcbiAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgIHYtZm9yPVwiKHNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgOmtleT1cInRhYlwiXG4gICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgOnRhYj1cInRhYlwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgOmVuYWJsZWQ9XCJpbmxpbmVkXCJcbiAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZSAmJiBvcGVuZWRcIlxuICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICBzbG90KFxuICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtaWY9XCJpbmxpbmVkXCIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgIGRpdG8tcGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgICAgKVxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICAgIClcbiAgICAgICAgICAvLyBQYXNzIGVkaXQtYnV0dG9ucyB0aHJvdWdoIHRvIGRpdG8tbGFiZWwncyBvd24gZWRpdC1idXR0b25zIHNsb3Q6XG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICAgIGRpdG8tdGFicyhcbiAgICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgIClcbiAgICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICAgIHYtZm9yPVwiKHNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgICAgOmVuYWJsZWQ9XCJpbmxpbmVkXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZSAmJiBvcGVuZWRcIlxuICAgICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtaWY9XCJpbmxpbmVkXCIpXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICAgIGRpdG8tcGFuZWxzKFxuICAgICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjaGVtYVxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgbWluLWhlaWdodDogMTAwJVxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIGZsZXg6IDEgMSAxMDAlXG4gICAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICAgIGRpc3BsYXk6IGdyaWRcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgID4gKjpvbmx5LWNoaWxkXG4gICAgICAgIGdyaWQtcm93LWVuZDogbm9uZVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZ1xuICAgID4gLmRpdG8tYnV0dG9ucyxcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgZmxleDogMSAxIDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAuZGl0by1wYW5lLXRhYiArIC5kaXRvLXBhbmUtbWFpblxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpbiB0byB0aGUgcnVsZXJcbiAgICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmRcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgICY6b25seS1jaGlsZFxuICAgICAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luXG4gICAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlclxuICAgICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgICAgLmRpdG8tdGFicyxcbiAgICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG9cbiAgICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgYnV0dG9uLmRpdG8tbGFiZWxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1JlZ0V4cCxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLCBnZXRQYW5lbFNjaGVtYXMsIHNldERlZmF1bHRzLCBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEnLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMuJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID0gY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgID8gY3VycmVudFRhYlxuICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIEFueSB0YWIgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgcm91dGVyIGFsc28uXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFiXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKVxuICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIHNldCBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdHMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0cyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgbmFtZSwgZGF0YVtuYW1lXSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCwge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuJHNldChyZWdpc3RyeSwgdWlkLCBlbnRyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGRlbGV0ZShyZWdpc3RyeSwgdWlkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNjaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICAgIDppbmxpbmVkPVwidHJ1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICApXG4gICAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNjaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAgIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICAgIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYW5lXG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIGZsZXgtZmxvdzogcm93IHdyYXBcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lXG4gICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWA6XG4gICAgbWFyZ2luOiAoLSRmb3JtLXNwYWNpbmcpICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRmb3JtLXNwYWNpbmctaGFsZlxuICAgIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgICBmbGV4OiAwJVxuXG4gICAgJi5kaXRvLXBhbmUtbWFpblxuICAgICAgZmxleDogMTAwJVxuXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcjpub3QoLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyKSArICZcbiAgICAgIC8vIENsZWFyIHRvcC1tYXJnaW4gaWYgdGhlIGNvbXBvbmVudHMgYXJlIHByZWNlZGVkIGJ5IGEgc2NoZW1hIGhlYWRlci5cbiAgICAgIG1hcmdpbi10b3A6IDBcblxuICAgIC5kaXRvLWNvbnRhaW5lci5kaXRvLW9taXQtcGFkZGluZyA+ICZcbiAgICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgICAgbWFyZ2luOiAwXG4gICAgICBtYXgtd2lkdGg6IHVuc2V0XG5cbiAgICAuZGl0by1icmVha1xuICAgICAgZmxleDogMTAwJVxuICAgICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldEFsbFBhbmVsU2NoZW1hcywgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2aXNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6IG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICA6IHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgIHN0b3JlOiBuZXN0ZWQgPyB0aGlzLmdldENoaWxkU3RvcmUobmFtZSkgOiB0aGlzLnN0b3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIC8vIEdhdGhlciBhbGwgcGFuZWwgc2NoZW1hcyBmcm9tIGFsbCBjb21wb25lbnQgc2NoZW1hcywgYnkgZmluZGluZyB0aG9zZVxuICAgICAgLy8gdGhhdCB3YW50IHRvIHByb3ZpZGUgYSBwYW5lbC4gU2VlIGBnZXRBbGxQYW5lbFNjaGVtYXMoKWAgZm9yIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTY2hlbWFzLmZsYXRNYXAoXG4gICAgICAgICh7IHNjaGVtYSwgbmVzdGVkRGF0YVBhdGg6IGRhdGFQYXRoIH0pID0+IGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiB0aGlzLnRhYiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4pXG4gIGRpdG8tbGFiZWwoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIGRpdG8tZXJyb3JzKFxuICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gICAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICAgIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbiAgKVxuICAgIGRpdG8tbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgKVxuICAgIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgICApXG4gICAgZGl0by1lcnJvcnMoXG4gICAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAkdGFiLWNvbG9yLWJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWluYWN0aXZlOiAkY29sb3ItbGlnaHRcbiAgJHRhYi1jb2xvci1hY3RpdmU6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWhvdmVyOiAkY29sb3Itd2hpdGVcblxuICAuZGl0by10YWJzXG4gICAgLy8gU2VlOiBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgIGFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaW5hY3RpdmVcbiAgICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvclxuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaG92ZXJcbiAgICAgICY6YWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYWN0aXZlXG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYmFja2dyb3VuZFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJzJywge1xuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2VsZWN0ZWRUYWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbiAgY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gICAgOmlzPVwicGFuZWxUYWdcIlxuICAgIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFuZWxcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nXG4gICAgLmRpdG8tcGFuZWwtdGl0bGVcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgLmRpdG8tcGFuZWwtc2NoZW1hXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcDogMFxuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZ1xuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICAgLmRpdG8tb2JqZWN0XG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgbGFiZWxcbiAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAuZGl0by1wYW5lXG4gICAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAgIC5kaXRvLWNvbnRhaW5lclxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGZcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBEaXRvQ29tcG9uZW50LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICBkaXRvLXBhbmVsKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lbHMoXG4gICAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIGRpdG8tcGFuZWwoXG4gICAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YVxuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBxdWVyeSB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IGlzU3RyaW5nKGRhdGE/LnR5cGUpXG4gICAgICAgICAgICA/IGxhYmVsaXplKGRhdGEudHlwZSlcbiAgICAgICAgICAgIDogJ0Vycm9yJ1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBkYXRhPy5tZXNzYWdlID8/IGVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiAnZXJyb3InLCB0aXRsZSwgdGV4dCB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIC8vIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLyBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIC8vIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLyBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIClcbiAgICBkaXRvLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgbWVyZ2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMsIGlzT2JqZWN0U291cmNlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZSByaWdodFxuICAgICAgICAvLyB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICB0aGlzLmRhdGEgfHwgeyB0eXBlOiB0aGlzLnR5cGUgfSxcbiAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICApIHx8IHt9IC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5kb2VzTXV0YXRlICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmRvZXNNdXRhdGUgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgYXBwbGljYXRpb24gdXBvbiBzdWJtaXQuXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGZvcm0gdG8gY3JlYXRlLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucXVlcnkudHlwZVxuICAgIH0sXG5cbiAgICBpdGVtSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6ICh0aGlzLnBhcmFtID8/IG51bGwpXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucGFyZW50Um91dGVDb21wb25lbnRcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5kb2VzTXV0YXRlKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICB0aGlzLmNsb25lZERhdGEgPSBkYXRhID0gY2xvbmUoZGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICF0aGlzLmlzQ3JlYXRpbmcgJiZcbiAgICAgICAgICBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBvZiBhbiBvYmplY3Qgc291cmNlIGlzIG51bGwsIHJlZGlyZWN0IHRvIGl0cyBjcmVhdGUgcm91dGUuXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiAnY3JlYXRlJywgYXBwZW5kOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgodGhpcy5wYXRoXG4gICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAuc2xpY2UoKHJvdXRlLmlzVmlldyA/IDAgOiByb3V0ZS5wYXRoLmxlbmd0aCkgKyAxKSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZXJyb3JzXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgei1pbmRleDogMVxuICAgIHVsXG4gICAgICBtYXJnaW4tdG9wOiAxcHhcbiAgICAgIGNvbG9yOiAkY29sb3ItZXJyb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2NvcGVzXG4gIHJvdXRlci1saW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgcm91dGVyLWxpbmsoXG4gICAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY29wZXNcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLWJ1dHRvblxuICAgICAgK2VsbGlwc2lzXG4gICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICAgIG1pbi13aWR0aDogM2VtXG4gICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctbGVmdDogMWVtXG4gICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbVxuICAgICAgJiArIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgICAgLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgICAmOmZvY3VzXG4gICAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnBhZ2luYXRpb24oXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuICA6cGFnZS5zeW5jPVwicGFnZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwYWdpbmF0aW9uKFxuICAgIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgICA6dG90YWw9XCJ0b3RhbFwiXG4gICAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdHJlZS1pdGVtXG4gICAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9XG4gICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICAgID4gLmRpdG8tdHJlZS1sZWFmXG4gICAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSlcbiAgICAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgIC5kaXRvLXRyZWUtbGVhZlxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgZmxleDogYXV0b1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBtYXJnaW46IDFweCAwXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by10cmVlLWxhYmVsLFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW1cbiAgICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgLjIpXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAxZW1cbiAgICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyXG4gICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZVxuICAgIC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgICAmLmRpdG8tZHJhZ2dpbmdcbiAgICAgIC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuICAgICYuZGl0by1hY3RpdmVcbiAgICAgID4gLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgID4gLmRpdG8tdHJlZS1icmFuY2hcbiAgICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZVxuICAgICAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWxcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tcHJvcGVydGllc1xuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnRcbiAgICAgID4gdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBjb250ZW50OiAnOiAnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRyZWUtaXRlbScsIHtcbiAgY29tcG9uZW50czogeyBWdWVEcmFnZ2FibGUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBvcGVuID0gY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG51bUNoaWxkcmVuICYmIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgIH1gXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRoKFxuICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgKVxuICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICBzcGFuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICB0clxuICAgICAgdGgoXG4gICAgICAgIHYtZm9yPVwiKGNvbHVtbiwgaW5kZXgpIGluIGNvbHVtbnNcIlxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10YWJsZS1oZWFkXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdHJcbiAgICAgIHRoXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgICBzcGFuXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgICAmOmVtcHR5OjphZnRlclxuICAgICAgICAgICAgLy8gUHJldmVudCBlbXB0eSA8dGg+IGZyb20gY29sbGFwc2luZ1xuICAgICAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICA+IHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBibG9ja1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtaGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgPyAnZGVzYydcbiAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGQoXG4gICAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gICAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4gIClcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1jZWxsJywge1xuICBwcm9wczoge1xuICAgIGNlbGw6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuY2VsbC5jb21wb25lbnQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBBIGNvbXBvbmVudCB0byBzaW1wbHkgcGFzcyB0aHJvdWdoIGFuIGV4aXN0aW5nIHZ1ZSB2bm9kZS5cbi8vIFNlZTogaHR0cHM6Ly9mb3J1bS52dWVqcy5vcmcvdC8yODE2Mi80XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by12bm9kZScsIHtcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiAoaCwgY29udGV4dCkgPT4gY29udGV4dC5wcm9wcy5ub2RlXG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBUeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGUgY29tcG9uZW50c1xuLy8gaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYFR5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgdGhlIGB0eXBlOiAnY29tcG9uZW50J2AgdHlwZXMuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IFR5cGVDb21wb25lbnQgPSBEaXRvQ29tcG9uZW50LmV4dGVuZCh7XG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRQYWRkaW5nOiBmYWxzZVxufSlcblxuVHlwZUNvbXBvbmVudC5yZWdpc3RlciA9IGZ1bmN0aW9uKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChgZGl0by10eXBlLSR7dHlwZXNbMF19YCwgZGVmaW5pdGlvbilcbiAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cblR5cGVDb21wb25lbnQuZ2V0ID0gZ2V0VHlwZUNvbXBvbmVudFxuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50XG4iLCJcbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGV4dFwiXG4gIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbikge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDp0aXRsZT1cInRleHRcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdidXR0b24nLCAnc3VibWl0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyB3b3JrIG5pY2VseTpcbiAgLy8gb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYigpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV0gfHwgdGhpcy5uYW1lXG4gICAgfSxcblxuICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgIGlmIChcbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LmRpdG8tY2hlY2tib3goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJjaGVja2JveFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNoZWNrYm94ZXNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAob3B0aW9uIHx8IFtdKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jb2RlKFxuICByZWY9XCJjb2RlXCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb2RlKFxuICAgIHJlZj1cImNvZGVcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3R5bGU9XCJzdHlsZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY29kZVxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gRm9yIHByb3BlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZSBwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgICAgLy8gdGhlIGRlc2lyZWQgaGVpZ2h0IHdpdGggOnN0eWxlPVwic3R5bGVcIi5cbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX3ByZVxuICAgICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX2NvZGUsXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpXG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDNcbiAgICB9LFxuXG4gICAgc3R5bGUoKSB7XG4gICAgICByZXR1cm4gYGhlaWdodDogY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmNvZGUsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLnNjaGVtYS5sYW5ndWFnZSB8fCAnamF2YXNjcmlwdCcsXG4gICAgICB0YWJTaXplOiB0aGlzLnNjaGVtYS5pbmRlbnRTaXplIHx8IDIsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5jb2RlLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by1jb2xvcihcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4pXG4gIC5kaXRvLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICApXG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICBzaXplPVwiOFwiXG4gICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICApXG4gICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICB2LWlmPVwidmFsdWVcIlxuICAgIClcbiAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1jb2xvcihcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICApXG4gICAgLmRpdG8taW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIClcbiAgICAgIGlucHV0KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgICBzaXplPVwiOFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGhcbiAgLmRpdG8tY29sb3JcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgaW5wdXRcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgJixcbiAgICAgIGRpdlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiAwXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgIC8vIE5PVEU6IHZ1ZS1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgfVtmb3JtYXRdIHx8IGZvcm1hdFxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0FscGhhYD9cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dHNgP1xuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzZWQoZm9jdXNlZCkge1xuICAgICAgaWYgKCFmb2N1c2VkICYmIHRoaXMuY29udmVydGVkSGV4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IoYCMke3RoaXMuY29udmVydGVkSGV4VmFsdWV9YClcbiAgICAgICAgaWYgKGNvbG9yPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gY29sb3IudG9TdHJpbmcodGhpcy5jb2xvckZvcm1hdClcbiAgICAgICAgICAvLyBUT0RPOiBFbWl0ICdpbnB1dCcgaGVyZSBpbnN0ZWFkLCBhbmQgJ2NoYW5nZScgaW4gYmx1ciwgbGlrZSBvdGhlcnMuXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIDppcz1cImNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICB2LWJpbmQ9XCIkcHJvcHNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlVHlwZUNvbXBvbmVudCgpYC4gVGhpcyBjYW5cbi8vIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSlcbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuICAvLyAgaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuICBpbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwidmFsdWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJ0cnVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlIGB2YWx1ZWBcbiAgICAgICAgICAgIC8vIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgICAvLyByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGVcbiAgICBjb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGEgYmV0dGVyXG4gIC8vIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5IHN1cHBvcnRlZFxuICAvLyBhdHRyaWJ1dGVzKVxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGF0ZVZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGF0ZUZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RhdGVGb3JtYXQnLCB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgIH1bdHlwZV1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLCBwcm9jZXNzRm9ybXMsIGdldE5hbWVkU2NoZW1hcywgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMsIGdldFZpZXdTY2hlbWEsXG4gIGhhc0xhYmVscywgaXNDb21wYWN0LCBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLCBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc051bWJlciwgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2UsXG4gICAgICBpZ25vcmVSb3V0ZUNoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSB0byBhIGxpc3Qgb2Ygd3JhcHBlZCBwcmltaXRpdmVzLCBhbmQgcmV0dXJuIGl0LlxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCA/IGRhdGFbMF0gOiBudWxsKVxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBUeXBlTGlzdCBmb3IgRGl0b0Zvcm1DaG9vc2VyLlxuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKHRoaXMuc2NoZW1hLnBhdGgpXG4gICAgfSxcblxuICAgIGRlZmF1bHRRdWVyeSgpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdE9yZGVyOiBvcmRlciB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG9yZGVyID8geyBvcmRlciB9IDoge31cbiAgICB9LFxuXG4gICAgcXVlcnk6IGdldFN0b3JlQWNjZXNzb3IoJ3F1ZXJ5Jywge1xuICAgICAgZ2V0KHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0UXVlcnksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBkaXNwbGF5ZWQgcXVlcnkgcGFyYW1ldGVycyBpbiBzeW5jIHdpdGggdGhlIHN0b3JlZFxuICAgICAgICAvLyBvbmVzLiBVc2Ugc2NvcGUgYW5kIHBhZ2UgZnJvbSB0aGUgbGlzdCBzY2hlbWEgYXMgZGVmYXVsdHMsIGJ1dCBhbGxvd1xuICAgICAgICAvLyB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGVtLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2NvcGUgPSB0aGlzLmRlZmF1bHRTY29wZT8ubmFtZSxcbiAgICAgICAgICBwYWdlID0gdGhpcy5zY2hlbWEucGFnZVxuICAgICAgICB9ID0gdGhpcy5xdWVyeVxuICAgICAgICAvLyBQcmVzZXJ2ZSAvIG1lcmdlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWVzLlxuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgIC4uLihzY29wZSAhPSBudWxsICYmIHsgc2NvcGUgfSksXG4gICAgICAgICAgLi4uKHBhZ2UgIT0gbnVsbCAmJiB7IHBhZ2UgfSksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVxdWFscyhxdWVyeSwgdGhpcy4kcm91dGUucXVlcnkpKSB7XG4gICAgICAgICAgLy8gVGVsbCB0aGUgYCRyb3V0ZWAgd2F0Y2hlciB0byBpZ25vcmUgdGhlIGNoYW5nZWQgdHJpZ2dlcmVkIGhlcmU6XG4gICAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IHRydWVcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHF1ZXJ5LCBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaGFzTGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuc29tZShoYXNMYWJlbHMpXG4gICAgfSxcblxuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLmV2ZXJ5KGlzQ29tcGFjdClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgcGFnaW5hdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdwYWdpbmF0ZScsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgICAgICA/IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gIXRoaXMudmFsdWVcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmICF0aGlzLmlzSW5saW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDEgJiYgZHJhZ2dhYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5saW5lZCAmJiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRoaXMuaWdub3JlUm91dGVDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGZyb20ucGF0aCA9PT0gdG8ucGF0aCAmJiBmcm9tLmhhc2ggPT09IHRvLmhhc2gpIHtcbiAgICAgICAgLy8gUGF0aHMgYW5kIGhhc2hlcyByZW1haW4gdGhlIHNhbWUsIHNvIG9ubHkgcXVlcmllcyBoYXZlIGNoYW5nZWQuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWx0ZXIgYW5kIHJlbG9hZCBkYXRhIHdpdGhvdXQgY2xlYXJpbmcuXG4gICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3cmFwcGVkUHJpbWl0aXZlczoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGhhbmRsZXIobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBvbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IGl0ZW0gJiYgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgaWYgKGl0ZW0gJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0pXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIubWF0Y2gocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICAgICAgeyBwYXRoIH0sXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGlzdHMgd2l0aCBuZXN0ZWQgZm9ybXMgY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXMnXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PiBwYXJhbVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdkaXRvLWZvcm0tbmVzdGVkJyA6ICdkaXRvLWZvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgdGV4dChmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgd2lkdGg6ICc0MCUnXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzYwJScgOiAnZmlsbCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc1BhbmVsKGZpbHRlcnMsIGRhdGFQYXRoLCBwcm94eSkge1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbGVhcjoge1xuICAgICAgICB0ZXh0OiAnQ2xlYXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQucmVzZXREYXRhKClcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICB0ZXh0OiAnRmlsdGVyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSksXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGZpbHRlcnMgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA/IGZpbHRlcnMgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgbmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tuYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiXG4uZGl0by1saXN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tbmF2aWdhdGlvbihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICApXG4gIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1saXN0KFxuICAgIHYtaWY9XCJpc1JlYWR5XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuICApXG4gICAgLmRpdG8tbmF2aWdhdGlvbihcbiAgICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgICAgZGl0by1zY29wZXMoXG4gICAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgICAgKVxuICAgICAgLy8gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAgIC5kaXRvLXNwYWNlcihcbiAgICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICApXG4gICAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWxpc3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGZcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjplbXB0eVxuICAgICAgICBkaXNwbGF5OiBub25lXG4gICAgICAuZGl0by1zY29wZXMsXG4gICAgICAuZGl0by1wYWdpbmF0aW9uXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICAgbWluLXdpZHRoOiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgaGVpZ2h0OiAxMDAlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0RmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgT3JkZXJlZE1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgLy8gQXQgdGhlIHRpbWUgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSBwYW5lbCBzY2hlbWEsIHRoZSBzY2hlbWFDb21wb25lbnQgaXNcbiAgICAgIC8vIG5vdCBmaWxsZWQgeWV0LCBzbyB3ZSBjYW4ndCBnZXQgdGhlIHRhcmdldCBjb21wb25lbnQgKGRhdGFQYXRoKSByaWdodFxuICAgICAgLy8gYXdheS4gVXNlIGEgcHJveHkgYW5kIGEgZ2V0dGVyIGluc3RlYWQsIHRvIGdldCBhcm91bmQgdGhpczpcbiAgICAgIGNvbnN0IGdldExpc3RDb21wb25lbnQgPSAoKSA9PiBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICApXG5cbiAgICAgIHJldHVybiBnZXRGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHsgLy8gQ3JlYXRlIGEgc2ltcGxlIHByb3h5IHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQgcXVlcnkocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZSAmJiB0aGlzLnRvdGFsID4gdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5idXR0b25TY2hlbWFzIHx8XG4gICAgICAgIHRoaXMuY3JlYXRhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkgfHwgdGhpcy5wYXRoXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWwtY29tcG9uZW50XG4gICAgZGlzcGxheTogZmxleFxuICAgIGhlaWdodDogMmVtXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW1hcmt1cChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgKVxuICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbWFya3VwKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgKVxuICAgIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgICByZWY9XCJlZGl0b3JcIlxuICAgICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICAgIClcbiAgICAuZGl0by1yZXNpemUoXG4gICAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLW1hcmt1cFxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAuZGl0by1yZXNpemVcbiAgICAgIEBleHRlbmQgJWljb24tcmVzaXplXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogdW5zZXRcbiAgICAgIGxlZnQ6IHVuc2V0XG4gICAgICByaWdodDogMFxuICAgICAgYm90dG9tOiAwXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuXG4gICAgLlByb3NlTWlycm9yXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG91dGxpbmU6IG5vbmVcblxuICAgIC5kaXRvLW1hcmt1cC1lZGl0b3JcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbFxuICAgICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yXG5cbiAgICAuZGl0by1idXR0b25zLXRvb2xiYXJcbiAgICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDBcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIHAsXG4gICAgdWwsXG4gICAgb2wsXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIG1hcmdpbjogMXJlbSAwXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi10b3A6IDBcbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDNcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgaDFcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtXG4gICAgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgICBjb2RlXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICBwcmVcbiAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgb3ZlcmZsb3cteDogYXV0b1xuICAgICAgY29kZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgIHAgY29kZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAwIDAuM3JlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgYVxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgY29sb3I6IGJsdWVcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG4gICAgdWwsXG4gICAgb2xcbiAgICAgIHBhZGRpbmctbGVmdDogMnJlbVxuICAgIGxpXG4gICAgICAmID4gcCxcbiAgICAgICYgPiBvbCxcbiAgICAgICYgPiB1bFxuICAgICAgICBtYXJnaW46IDBcbiAgICBibG9ja3F1b3RlXG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW1cbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpY1xuICAgICAgcFxuICAgICAgICBtYXJnaW46IDBcblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgRWRpdG9yTWVudUJhciwgTWFyayB9IGZyb20gJ3RpcHRhcCdcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG5pbXBvcnQge1xuICAvLyBNYXJrczpcbiAgQm9sZCwgQ29kZSwgSXRhbGljLCBMaW5rLCBTdHJpa2UsIFVuZGVybGluZSxcbiAgLy8gTm9kZXM6XG4gIEJsb2NrcXVvdGUsIENvZGVCbG9jaywgSGFyZEJyZWFrLCBIZWFkaW5nLCBIb3Jpem9udGFsUnVsZSxcbiAgT3JkZXJlZExpc3QsIEJ1bGxldExpc3QsIExpc3RJdGVtLFxuICAvLyBUT0RPOlxuICAvLyAtIEltYWdlLCBNZW50aW9uLCBDb2RlQmxvY2tIaWdobGlnaHRcbiAgLy8gLSBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVOb2RlcywgVGFibGVSb3csXG4gIC8vIC0gVG9kb0l0ZW0sIFRvZG9MaXN0XG4gIC8vIFRvb2xzOlxuICBIaXN0b3J5XG59IGZyb20gJ3RpcHRhcC1leHRlbnNpb25zJ1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIHVuZGVyc2NvcmUsIGh5cGhlbmF0ZSwgZGVib3VuY2Vcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgRWRpdG9yTWVudUJhcixcbiAgICBJY29uXG4gIH0sXG5cbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBjb21tYW5kID0+IHRoaXMub25DbGlja0xpbmsoY29tbWFuZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cjogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvdGhlck5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4gW1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShnZXRWYWx1ZSA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWx1ZSgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZ2V0SFRNTCB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChnZXRIVE1MKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5jcmVhdGVFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoY29tbWFuZCkge1xuICAgICAgY29uc3QgYXR0cnMgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIGhyZWY6IG51bGwsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHRoaXMuZWRpdG9yLmdldE1hcmtBdHRycygnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCwgcHJlZml4IGl0IHdpdGhcbiAgICAgICAgICAvLyBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cDovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmQoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIHNjaGVtYS5tYXJrczpcbiAgICAgICAgbWFya3MuYm9sZCAmJiBuZXcgQm9sZCgpLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgbmV3IEl0YWxpYygpLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgbmV3IFVuZGVybGluZSgpLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgbmV3IFN0cmlrZSgpLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBuZXcgU21hbGwoKSxcbiAgICAgICAgbWFya3MuY29kZSAmJiBuZXcgQ29kZSgpLFxuICAgICAgICBtYXJrcy5saW5rICYmIG5ldyBMaW5rV2l0aFRpdGxlKCksXG5cbiAgICAgICAgLy8gc2NoZW1hLm5vZGVzOlxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIG5ldyBCbG9ja3F1b3RlKCksXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBuZXcgQ29kZUJsb2NrKCksXG4gICAgICAgIG5ldyBIYXJkQnJlYWsoKSwgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIG5ldyBIZWFkaW5nKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBuZXcgSG9yaXpvbnRhbFJ1bGUoKSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIG5ldyBMaXN0SXRlbSgpLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIG5ldyBCdWxsZXRMaXN0KCksXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIG5ldyBPcmRlcmVkTGlzdCgpLFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0l0ZW0oKSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9MaXN0KCksXG5cbiAgICAgICAgLy8gc2NoZW1hLnRvb2xzOlxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIG5ldyBIaXN0b3J5KClcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuZWRpdG9yLmlzQWN0aXZlW25hbWVdXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmVkaXRvci5jb21tYW5kc1tuYW1lXVxuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogKFxuICAgICAgICAgICAgaXNBY3RpdmU/LihhdHRycykgJiZcbiAgICAgICAgICAgIChpZ25vcmVBY3RpdmUgPT0gbnVsbCB8fCAhaWdub3JlQWN0aXZlKCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBvbkNsaWNrXG4gICAgICAgICAgICA/IG9uQ2xpY2soY29tbWFuZCwgYXR0cnMpXG4gICAgICAgICAgICA6IGNvbW1hbmQoYXR0cnMpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHIsIHZhbHVlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBbYXR0cl06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuXG5jbGFzcyBTbWFsbCBleHRlbmRzIE1hcmsge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gJ3NtYWxsJ1xuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VET006IFtcbiAgICAgICAgeyB0YWc6ICdzbWFsbCcgfVxuICAgICAgXSxcbiAgICAgIHRvRE9NOiAoKSA9PiBbJ3NtYWxsJywgMF1cbiAgICB9XG4gIH1cblxuICBjb21tYW5kcyh7IHR5cGUgfSkge1xuICAgIHJldHVybiAoKSA9PiB0b2dnbGVNYXJrKHR5cGUpXG4gIH1cbn1cbmNsYXNzIExpbmtXaXRoVGl0bGUgZXh0ZW5kcyBMaW5rIHtcbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgaHJlZjoge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgcGFyc2VET006IFt7XG4gICAgICAgIHRhZzogJ2EnLFxuICAgICAgICBnZXRBdHRyczogZG9tID0+ICh7XG4gICAgICAgICAgaHJlZjogZG9tLmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgIHRpdGxlOiBkb20uZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgIH0pXG4gICAgICB9XSxcbiAgICAgIHRvRE9NOiBub2RlID0+IFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbXVsdGlzZWxlY3QoXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gIH1gXG4pXG4gIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbXVsdGlzZWxlY3QoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gICAgfWBcbiAgKVxuICAgIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcbiAgQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbiAgJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGhcbiAgJHRhZy1pY29uLXdpZHRoOiAxLjhlbVxuICAkdGFnLW1hcmdpbjogMnB4XG4gICR0YWctcGFkZGluZzogM3B4XG4gICR0YWctbGluZS1oZWlnaHQ6IDEuMWVtXG5cbiAgLmRpdG8tbXVsdGlzZWxlY3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5tdWx0aXNlbGVjdFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBjb2xvcjogJGNvbG9yLWJsYWNrXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwXG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpblxuXG4gICAgLm11bHRpc2VsZWN0X190YWdcbiAgICAgIGZsb2F0OiBsZWZ0XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpblxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbVxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwXG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbGluZS1oZWlnaHQ6IDBcblxuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogMFxuICAgICAgbWFyZ2luOiAwIDAgMXB4IDBcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcblxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXJcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXJcblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgcGFkZGluZzogMFxuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGhcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoXG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGhcbiAgICAgIGhlaWdodDogaW5oZXJpdFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0XG4gICAgICB3aWR0aDogMFxuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKVxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKVxuXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGluc2V0OiAwXG4gICAgICAgIG1hcmdpbjogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb25cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0XG4gICAgICBoZWlnaHQ6IHVuc2V0XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAmOjphZnRlclxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWctaWNvblxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtXG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgZm9udC1zaXplOiAxLjNlbVxuICAgICAgJjpob3Zlcjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tc2VsZWN0ZWRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZVxuICAgICAgLS1pbnB1dC13aWR0aDogMTAwJVxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZVxuICAgICAgLS1pbnB1dC13aWR0aDogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgIG1hcmdpbjogLTFweCAwIDBcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAmLm11bHRpc2VsZWN0LS1hYm92ZVxuICAgICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuICAgICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHhcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgJi5kaXRvLWhhcy1lcnJvcnNcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvclxuXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICB2YWx1ZSA9PiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWRcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciB8fCAoXG4gICAgICAgIHNlYXJjaGFibGUgJiYgdGFnZ2FibGUgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgIDogc2VhcmNoYWJsZSA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgLy8gb3ZlcnJpZGUgYFR5cGVNaXhpbi5nZXRMaXN0ZW5lcnMoKWAgdG8gcmUtcm91dGUgJ2lucHV0JyB0byBgb25DaGFuZ2UoKWBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlIHRvXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gJydcbiAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID0gbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgW3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOm5vdChbc3RlcF0pXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIG1hcmdpbjogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIGRpdG8tZWRpdC1idXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1vYmplY3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgICApXG4gICAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICApXG4gICAgICBjb21wb25lbnQoXG4gICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgICApXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6cGF0aD1cInBhdGhcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLW9iamVjdFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIG1hcmdpbjogMFxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnRcbiAgICAgIGZsZXg6IDAgMSAxMDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBmbGV4OiAxIDAgMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICByZXR1cm4gcmFuZ2VbMV0gLSByYW5nZVswXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1yYWRpby1idXR0b25zXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1yYWRpby1idXR0b25cbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zZWN0aW9uKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4pXG4gIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zZWN0aW9uKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbiAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKFxuICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbiAgLmRpdG8tc2VsZWN0XG4gICAgc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4gICRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMilcblxuICAuZGl0by1zZWxlY3RcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIHNlbGVjdFxuICAgICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aFxuXG4gICAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHNlbGVjdFxuICAgICAgICB3aWR0aDogMTAwJVxuXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KVxuXG4gICAgJi5kaXRvLWRpc2FibGVkOjphZnRlclxuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgICB2LWlmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNsaWRlclxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXJhbmdlXG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKVxuICAgIC5kaXRvLW51bWJlclxuICAgICAgYm9yZGVyOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5zd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3luYz1cInRydWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN5bmM9XCJ0cnVlXCJcbiAgICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXN3aXRjaFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndGV4dCcsICdlbWFpbCcsICd1cmwnLCAnaG9zdG5hbWUnLCAnZG9tYWluJywgJ3RlbCcsICdwYXNzd29yZCcsICdjcmVkaXRjYXJkJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0VHlwZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgIH1bdGhpcy50eXBlXSB8fCB0aGlzLnR5cGVcbiAgICB9LFxuXG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICB9W3RoaXMudHlwZV1cbiAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnJvd3M9XCJsaW5lc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyZWUtbGlzdFxuICBkaXRvLXNjb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgQGV4dGVuZCAlZmllbGRcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgID4gLmRpdG8tdHJlZS1pdGVtXG4gICAgICAgIGZsZXg6IDEgMSAyNSVcbiAgICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lclxuICAgICAgICBmbGV4OiAwIDEgNzUlXG4gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICB9LFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgfSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICA6IHRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQXJyYXksIGFzQXJyYXksIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5pZiAoaW1wb3J0Lm1ldGEuaG90KSB7XG4gIC8vIFdvcmthcm91bmQgZm9yIGEgc3RyYW5nZSBWaXRlIGhvdC1yZWxvYWRpbmcgYnVnLCBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9pc3N1ZXMvNzgzOSNpc3N1ZWNvbW1lbnQtMTM0MDEwOTY3OVxuICBpbXBvcnQubWV0YS5ob3Qub24oJ3ZpdGU6YmVmb3JlVXBkYXRlJywgb25CZWZvcmVWaXRlVXBkYXRlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuICAgIGFwaS5mb3JtYXRzID0gbWVyZ2Uoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIHRoaXMucm9vdCA9IG5ldyBWdWUoe1xuICAgICAgZWwsXG4gICAgICByb3V0ZXI6IG5ldyBWdWVSb3V0ZXIoe1xuICAgICAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgICAgIGJhc2U6IGRpdG8uYmFzZSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KSxcbiAgICAgIGNvbXBvbmVudHM6IHsgRGl0b1Jvb3QgfSxcbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIHJvb3QgY29udGFpbmVyJ3MgaWQsIGFzIHJlcXVpcmVkIGJ5IGhvdC1yZWxvYWRpbmc6XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaWQ6IGVsLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgICAuLi50eXBlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFR5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtyZXNwb25zZS5zdGF0dXNUZXh0fSlgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6IGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgPyAnaW5jbHVkZSdcbiAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9PyR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKVxuICApLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gb25CZWZvcmVWaXRlVXBkYXRlKGV2ZW50KSB7XG4gIGlmIChldmVudC50eXBlID09PSAndXBkYXRlJykge1xuICAgIC8vIFBhdGNoIGBldmVudC51cGRhdGVzYCB0byByZW1vdmUgdGhlIHZlcnNpb24gcXVlcnkgcGFyYW1ldGVyIGZyb20gcGF0aCxcbiAgICAvLyBzbyB0aGF0IHRoZSB1cGRhdGUgZ2V0cyBwaWNrZWQgdXAuXG4gICAgLy8gV2h5IHRoZSBzdG9yZWQgYGRlcHNgIGFyZSBtaXNzaW5nIHRoaXMgcGFydCBvZiB0aGUgVVJMLCBJIGNhbm5vdCBzYXnigKZcbiAgICBjb25zdCB1cGRhdGVzID0gW11cbiAgICBmb3IgKGNvbnN0IHVwZGF0ZSBvZiBldmVudC51cGRhdGVzKSB7XG4gICAgICB1cGRhdGVzLnB1c2godXBkYXRlKSAvLyBLZWVwIHRoZSBvcmlnaW5hbCB1cGRhdGUuXG4gICAgICBjb25zdCBhY2NlcHRlZFBhdGggPSB1cGRhdGUuYWNjZXB0ZWRQYXRoLnJlcGxhY2UoL1xcP3Y9WzAtOWEtZl0rJi9pLCAnPycpXG4gICAgICBpZiAoYWNjZXB0ZWRQYXRoICE9PSB1cGRhdGUuYWNjZXB0ZWRQYXRoKSB7XG4gICAgICAgIHVwZGF0ZXMucHVzaCh7IC4uLnVwZGF0ZSwgYWNjZXB0ZWRQYXRoIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGV2ZW50LnVwZGF0ZXMgPSB1cGRhdGVzXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJwYXJlbnRJdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImV2ZW50cyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJhc0FycmF5IiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsInR5cGUiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsImhhc1Jlc291cmNlIiwic2NoZW1hIiwiZ2V0UmVzb3VyY2UiLCJkZWZhdWx0cyIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIkRpdG9NaXhpbiIsInVpZCIsImtleU9yRGF0YVBhdGgiLCJkZWYiLCJjb252ZXJ0ZWQiLCJuYW1lIiwibGFiZWxpemUiLCJidXR0b24iLCJ2ZXJiIiwiZHJhZ2dhYmxlIiwiZmFsbGJhY2siLCJxdWVyeSIsImNvbXBvbmVudHMiLCJidXR0b25zIiwic2V0dGluZ3MiLCJyZWplY3QiLCJEaXRvQ29tcG9uZW50IiwidXJsIiwibWV0aG9kIiwiaW50ZXJuYWwiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJpc0RvbWFpbiIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50IiwiaXNTaW5nbGVDb21wb25lbnRWaWV3Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsIl9iIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9taXNlcyIsInByb2Nlc3NGb3JtcyIsImZvcm0iLCJmb3JtcyIsInJlc29sdmVGb3JtIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3U2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJ2aWV3Q29tcG9uZW50IiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsImNvbXB1dGVWYWx1ZSIsInJvb3REYXRhIiwiY29tcHV0ZSIsIlZ1ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImRlc2NyaXB0aW9ucyIsInRvT2JqZWN0IiwiYXJyYXkiLCJ0b1NjaGVtYSIsImNhbWVsaXplIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxTY2hlbWEiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJzY2hlbWFDb21wb25lbnQiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1JZCIsImdldEl0ZW1VaWQiLCJUeXBlTWl4aW4iLCJwYXJzZSIsImxhYmVsIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiYWRkIiwiZWxlbWVudCIsIm1peGlucyIsImNvbXAiLCJjdG9yIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInRvIiwiZnJvbSIsIm1hdGNoZWQiLCJpIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwidGVtcGxhdGVQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJyZW5kZXIiLCJfdm0iLCJfaCIsIl9jIiwic3RhdGljUmVuZGVyRm5zIiwiX192dWUyX3NjcmlwdCIsImlzTG9hZGluZyIsImNvcHlEYXRlIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImFkZEV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJzY3JvbGxUbyIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGVyVGljayIsInNldFNlbGVjdGlvbiIsImZpZWxkIiwic3RhcnQiLCJlbmQiLCJyYW5nZSIsIiRldmVudCIsIndlZWtkYXkiLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJuZXdWYWwiLCJvbGRWYWwiLCJtb2RlIiwib3ZlcnJpZGVzIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsInN0YXRlIiwiaG9yIiwidmVyIiwiZW50ZXIiLCJjdXJyZW50TW9kZSIsInN0YXJ0WWVhciIsImZpcnN0RGF5V2VlayIsIm51bURheXMiLCJwcmV2TW9udGgiLCJwcmV2TW9udGhOdW1EYXlzIiwidG9kYXkiLCJpc0RheSIsIm5leHRNb250aE5lZWQiLCJuZXh0TW9udGgiLCJsb2NhbGVOYW1lcyIsIm5hbWVzIiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsIiQkYSIsIiQkZWwiLCIkJGMiLCIkJHYiLCIkJGkiLCJzaXplIiwidGl0bGUiLCJkaXNhYmxlZCIsInJlYWRvbmx5IiwicGxhY2Vob2xkZXIiLCJhdXRvY29tcGxldGUiLCIkYXR0cnMiLCJpbnB1dCIsImdldExlbmd0aCIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJkZWZhdWx0Rm9ybWF0cyIsImZvcmNlIiwic2Nyb2xsIiwicmVmIiwibGluZUhlaWdodCIsInNlbGVjdGVkIiwibGVuZ3RoIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJwYWdlIiwicGFnZVNpemUiLCJjdXJyZW50UGFnZVNpemUiLCJzaG93UHJldiIsInNob3dOZXh0IiwidG90YWwiLCJjdXJyZW50UGFnZSIsInNob3dMZW5ndGgiLCJudW1QYWdlcyIsInBhZ2VSYW5nZSIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJjcmVhdGVFbGVtZW50Iiwic2V0U3R5bGUiLCJzdHlsZSIsImZvcmNlUmVwYWludCIsIndpZHRoIiwiaGVpZ2h0IiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJoYW5kbGVyIiwiZXJyIiwidGV4dCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3Iiwicm91dGUiLCJTcGlubmVyIiwiUHVsc2VMb2FkZXIiLCJjb2xvciIsInByb3BzIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJkaWFsb2dEYXRhIiwiY29udGVudCIsImFzT2JqZWN0IiwicHJlZml4Iiwic3VmZml4IiwiSXRlbU1peGluIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJUcmFuc2l0aW9uSGVpZ2h0IiwicGFuZSIsImN1cnJlbnRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsImV4cGFuZCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl9yZWYiLCJuZXN0ZWREYXRhUGF0aCIsInN0b3JlIiwicGFyc2VGcmFjdGlvbiIsImRpdmlkZW5kIiwiZGl2aXNvciIsImNvbnRhaW5lckNsYXNzIiwiYmFzaXMiLCJncm93Iiwic2hyaW5rIiwiYmFzaXNJc0F1dG8iLCJ0YWJTY2hlbWEiLCJidXR0b25TY2hlbWEiLCJidXR0b25EYXRhUGF0aCIsIm5vZGUiLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwicmVwb3J0IiwianNvbiIsIl9kIiwiZGVpbmRlbnQiLCIkc2NoZW1hIiwiX2UiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwibWVyZ2UiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsIm5ld1ZhbHVlIiwib2xkVmFsdWUiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInNjb3BlIiwibmF2aWdhdGUiLCJQYWdpbmF0aW9uIiwiT3JkZXJlZE1peGluIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJWdWVEcmFnZ2FibGUiLCJjaGlsZHJlblNjaGVtYSIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsImNvbHVtbiIsIm9yZGVyIiwiZXNjYXBlSHRtbCIsImgiLCJUeXBlQ29tcG9uZW50IiwiVHlwZUNvbXBvbmVudCQxIiwiZGVmaW5pdGlvbiIsIkRhdGFNaXhpbiIsInJlc29sdmVDb3VudGVyIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsIm9uQ2hhbmdlIiwib25Gb2N1cyIsIm9uQmx1ciIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVRpbWVQaWNrZXIiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsInJvdXRlQ29tcG9uZW50IiwiaW5saW5lZCIsInBhcmFtIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJnZXRQYXRoV2l0aFBhcmFtIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGVGb3JtYXQiLCJnZXRGaWx0ZXJzUGFuZWwiLCJmaWx0ZXJzIiwicHJveHkiLCJwYXJzZUZpbHRlcnNEYXRhIiwiZ2V0RmlsdGVyc0NvbXBvbmVudHMiLCJmb3JtYXRGaWx0ZXJzRGF0YSIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiZ2V0TGlzdENvbXBvbmVudCIsIm9iaiIsImZpbHRlcnNEYXRhUGF0aCIsImljb24iLCJpc0FjdGl2ZSIsIm9uQ2xpY2siLCJFZGl0b3JDb250ZW50IiwiRWRpdG9yTWVudUJhciIsIkljb24iLCJjb21tYW5kIiwibWFya0J1dHRvbnMiLCJiYXNpY05vZGVCdXR0b25zIiwib3RoZXJOb2RlQnV0dG9ucyIsInRvb2xCdXR0b25zIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsImdldFZhbHVlIiwib25VcGRhdGUiLCJnZXRIVE1MIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiYXR0cnMiLCJkaWFsb2dDb21wb25lbnQiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiYWRkQnV0dG9uIiwiaWdub3JlQWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsInVuZGVyc2NvcmUiLCJhdHRyIiwiTWFyayIsInRvZ2dsZU1hcmsiLCJMaW5rIiwiZG9tIiwiVnVlTXVsdGlzZWxlY3QiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIiQkc2VsZWN0ZWRWYWwiLCJvIiwidmFsIiwib3B0IiwiU3dpdGNoQnV0dG9uIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsImZpbGUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImZpbGVzIiwidXBsb2FkIiwibG9nZ2VkRGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlIiwiVnVlUm91dGVyIiwiVnVlTW9kYWwiLCJWdWVOb3RpZmljYXRpb25zIiwiRGl0b0FkbWluIiwiZGl0byIsInZpZXdzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJEaXRvUm9vdCIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJmb3JtYXRRdWVyeSIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Im0xQ0FBZSxNQUFBQSxHQUFBLENBQ2IsTUFBTyxHQUNQLGdCQUFpQixDQUFFLEVB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Q0EsS0FBQSxhQUFBLFlBQUEsSUFBQSxLQUFBLE1BQUEsWUFBQSxFQUNBLDZCQUNBQSxJQUFBLEtBQUEsYUFBQSxTQUFBLENBQ0EsQ0FDQSxFQUVBLGFBQUFELEVBQUEsQ0FDQSxNQUFBLENBQ0EsNEJBQ0EsS0FBQSxPQUFBQSxJQUFBLEtBQUEsTUFBQSxZQUFBLEVBQ0EsNkJBQ0FBLElBQUEsS0FBQSxhQUFBLFlBQUEsQ0FDQSxDQUNBLEVBRUEsUUFBQTJCLEVBQUEsQ0FDQSxLQUFBLGFBQUE3QixFQUFBLEtBQUEsYUFBQTZCLENBQUEsQ0FDQSxFQUVBLFdBQUFDLEVBQUEsQ0FDQSxLQUFBLFFBQUEsQ0FDQSxLQUFBLEtBQUEsYUFBQSxZQUFBLEVBQUFBLEVBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxRQUFBRixFQUFBLENBQ0EsS0FBQSxZQUFBQSxDQUNBLEVBRUEsVUFBQUUsRUFBQSxDQUNBLEtBQUEsQ0FBQSxhQUFBQyxDQUFBLEVBQUEsS0FDQSxDQUFBLEtBQUE3QixFQUFBLE1BQUFDLENBQUEsRUFBQSxLQUFBLGFBQ0E0QixFQUFBLFlBQUEsRUFDQUEsRUFBQSxTQUFBLEVBQUFELENBQ0EsRUFDQSxLQUFBLFFBQUEsQ0FDQSxNQUFBM0IsRUFDQSxJQUFBLEtBQUEsSUFDQSxLQUFBLGVBQUFELEVBQUFDLENBQUEsRUFDQSxLQUFBLGFBQUEsUUFBQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsU0FBQTJCLEVBQUEsQ0FDQSxLQUFBLFFBQUEsQ0FDQSxLQUFBLEtBQUEsYUFBQSxZQUFBLEVBQUFBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsV0FBQTdCLEVBQUErQixFQUFBL0csRUFBQSxHQUFBLENBQ0ErRyxJQUFBLGFBQ0EvRyxFQUNBLEtBQUEsUUFBQSxDQUNBLEtBQUFnRixFQUFBLFlBQUEsRUFDQSxNQUFBQSxFQUFBLFNBQUEsRUFDQSxJQUFBQSxFQUFBLFFBQUEsQ0FDQSxDQUFBLEVBRUEsS0FBQSxhQUFBQSxFQUVBLEtBQUEsTUFBQSxRQUFBLEtBQUEsWUFBQSxFQUVBLEVBRUEsWUFBQUUsRUFBQSxDQUNBLEtBQUEsUUFBQSxLQUFBLEVBR0EsS0FBQSxRQUFBLENBQUEsTUFBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxDQUNBLEVBRUEsV0FBQUQsRUFBQSxDQUNBLEtBQUEsUUFBQSxPQUFBLEVBQ0EsS0FBQSxRQUFBLENBQUEsS0FBQUEsRUFBQSxDQUNBLEVBRUEsYUFBQUEsRUFBQUMsRUFBQSxDQUNBLE9BQUFBLEVBQUEsSUFDQUQsSUFDQUMsRUFBQSxHQUNBQSxFQUFBLElBQ0FELElBQ0FDLEVBQUEsSUFFQSxDQUFBLEtBQUFELEVBQUEsTUFBQUMsQ0FBQSxDQUNBLEVBRUEsYUFBQUYsRUFBQSxDQUFBLEtBQUFDLEVBQUEsTUFBQUMsRUFBQSxJQUFBQyxDQUFBLEVBQUEsQ0FDQSxPQUFBSCxFQUFBLGVBQUEsS0FBQSxPQUFBLENBQ0EsS0FBQUMsR0FBQSxVQUNBLE1BQUFDLEdBQUEsT0FDQSxJQUFBQyxHQUFBLFNBQ0EsQ0FBQSxDQUNBLEVBRUEsZUFBQUgsRUFBQSxDQUNBLE1BQUFDLEVBQUEsS0FBQSxxQkFBQUQsRUFBQSxZQUFBLENBQUEsRUFDQSxNQUFBLEdBQUFDLE9BQUFBLEVBQUEsR0FDQSxFQUVBLGVBQUFBLEVBQUFDLEVBQUEsQ0FDQSxPQUFBLElBQUEsS0FBQUQsRUFBQUMsRUFBQSxFQUFBLENBQUEsRUFBQSxRQUFBLENBQ0EsRUFFQSxxQkFBQUQsRUFBQSxDQUVBLE1BQUEsQ0FBQSxHQURBQSxFQUFBLFNBQUEsRUFDQSxNQUFBLEVBQUEsRUFBQSxJQUNBLEVBRUEsU0FBQSxDQUFBLElBQUErQixFQUFBLElBQUFDLEVBQUEsTUFBQUMsQ0FBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFlBQUFDLEVBQUEsYUFBQUwsQ0FBQSxFQUFBLEtBQ0EsR0FBQUUsR0FBQUMsRUFBQSxDQUNBLE9BQUFFLEVBQUEsQ0FDQSxJQUFBLE1BQ0EsS0FBQSxRQUFBLENBQ0EsSUFBQUwsRUFBQSxRQUFBLEVBQUFFLEVBQUFDLEVBQUEsQ0FDQSxDQUFBLEVBQ0EsTUFDQSxJQUFBLFFBQ0EsS0FBQSxRQUFBLENBQ0EsTUFBQUgsRUFBQSxTQUFBLEVBQUFFLEVBQUFDLEVBQUEsQ0FDQSxDQUFBLEVBQ0EsTUFDQSxJQUFBLE9BQ0EsS0FBQSxRQUFBLENBQ0EsS0FBQUgsRUFBQSxZQUFBLEVBQUFFLEVBQUFDLEVBQUEsQ0FDQSxDQUFBLEVBQ0EsS0FDQSxDQUNBLE1BQUEsRUFDQSxTQUFBQyxFQUFBLENBQ0EsT0FBQUMsRUFBQSxDQUNBLElBQUEsTUFDQSxLQUFBLFdBQUFMLENBQUEsRUFDQSxNQUNBLElBQUEsUUFDQSxLQUFBLFFBQUEsS0FBQSxFQUNBLE1BQ0EsSUFBQSxPQUNBLEtBQUEsUUFBQSxPQUFBLEVBQ0EsS0FDQSxDQUNBLE1BQUEsRUFDQSxDQUNBLEVBRUEsaUJBQUEsQ0FDQSxLQUFBLFVBQUEsQ0FBQSxFQUNBLEtBQUEsVUFBQSxDQUFBLEVBRUEsS0FBQSxDQUFBLGFBQUFBLENBQUEsRUFBQSxLQUNBN0IsRUFBQTZCLEVBQUEsWUFBQSxFQUNBNUIsRUFBQTRCLEVBQUEsU0FBQSxFQUNBTSxFQUFBLEtBQUEscUJBQUFuQyxDQUFBLEVBQ0EsUUFBQWpCLEVBQUEsRUFBQUEsRUFBQSxHQUFBQSxJQUNBLEtBQUEsVUFBQSxLQUFBb0QsRUFBQXBELENBQUEsRUFHQSxJQUFBcUQsRUFEQSxJQUFBLEtBQUFwQyxFQUFBQyxFQUFBLENBQUEsRUFDQSxPQUFBLEVBQUEsRUFDQW1DLElBQUEsSUFDQUEsRUFBQSxHQUVBLE1BQUFDLEVBQUEsS0FBQSxlQUFBckMsRUFBQUMsQ0FBQSxFQUNBLEdBQUFtQyxFQUFBLEVBQUEsQ0FDQSxNQUFBRSxFQUFBLEtBQUEsYUFBQXRDLEVBQUFDLEVBQUEsQ0FBQSxFQUNBc0MsRUFBQSxLQUFBLGVBQ0FELEVBQUEsS0FDQUEsRUFBQSxLQUNBLEVBQ0EsUUFBQXZELEVBQUEsRUFBQUEsRUFBQXFELEVBQUFyRCxJQUFBLENBQ0EsTUFBQW1CLEVBQUFxQyxFQUFBSCxFQUFBckQsRUFBQSxFQUNBZ0IsRUFBQSxJQUFBLEtBQUF1QyxFQUFBLEtBQUFBLEVBQUEsTUFBQXBDLENBQUEsRUFDQSxLQUFBLFVBQUEsS0FBQSxDQUNBLEtBQUFBLEVBQ0EsS0FBQUgsRUFDQSxNQUFBLEtBQUEsYUFBQUEsQ0FBQSxFQUFBLFdBQUEsTUFDQSxDQUFBLENBQ0EsQ0FDQSxDQUVBLE1BQUF5QyxFQUFBLElBQUEsS0FDQSxRQUFBekQsRUFBQSxFQUFBQSxHQUFBc0QsRUFBQXRELElBQUEsQ0FDQSxNQUFBZ0IsRUFBQSxJQUFBLEtBQUFDLEVBQUFDLEVBQUFsQixDQUFBLEVBQ0EwRCxFQUFBMUMsR0FBQUEsR0FDQUEsRUFBQSxRQUFBLElBQUFoQixHQUNBZ0IsRUFBQSxZQUFBLElBQUFDLEdBQ0FELEVBQUEsU0FBQSxJQUFBRSxFQUNBNkIsRUFBQVcsRUFBQSxLQUFBLEtBQUEsRUFBQSxTQUNBQSxFQUFBRCxDQUFBLEVBQUEsUUFDQSxLQUFBLGFBQUF6QyxDQUFBLEVBQUEsV0FDQTBDLEVBQUFaLENBQUEsRUFBQSxVQUNBLEtBQ0EsS0FBQSxVQUFBLEtBQUEsQ0FDQSxLQUFBOUMsRUFDQSxLQUFBZ0IsRUFDQSxNQUFBK0IsQ0FDQSxDQUFBLENBQ0EsQ0FFQSxNQUFBWSxFQUFBLEdBQUEsS0FBQSxVQUFBLE9BQ0EsR0FBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQUMsRUFBQSxLQUFBLGFBQUEzQyxFQUFBQyxFQUFBLENBQUEsRUFDQSxRQUFBbEIsRUFBQSxFQUFBQSxHQUFBMkQsRUFBQTNELElBQUEsQ0FDQSxNQUFBZ0IsRUFBQSxJQUFBLEtBQUE0QyxFQUFBLEtBQUFBLEVBQUEsTUFBQTVELENBQUEsRUFDQStDLEVBQUEsS0FBQSxhQUFBL0IsQ0FBQSxFQUFBLFdBQUEsT0FDQSxLQUFBLFVBQUEsS0FBQSxDQUNBLEtBQUFoQixFQUNBLEtBQUFnQixFQUNBLE1BQUErQixDQUNBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxDQUNBLEVBRUFjLEdBQUEsQ0FBQSxFQUdBLFNBQUFyQixHQUFBOU8sRUFBQSxDQUNBLElBQUFvUSxFQUFBRCxHQUFBblEsQ0FBQSxFQUNBLEdBQUEsQ0FBQW9RLEVBQUEsQ0FDQSxNQUFBeEIsRUFBQSxDQUFBLEVBQ0EsUUFBQXRDLEVBQUEsRUFBQUEsRUFBQSxFQUFBQSxJQUFBLENBQ0EsTUFBQWdCLEVBQUEsSUFBQSxLQUFBLEVBQUEsRUFBQWhCLENBQUEsRUFDQXNDLEVBQUEsS0FBQSxDQUNBLEtBQUF0QixFQUFBLGVBQUF0TixFQUFBLENBQUEsUUFBQSxPQUFBLEVBQ0EsTUFBQXNOLEVBQUEsZUFBQXROLEVBQUEsQ0FBQSxRQUFBLFFBQUEsQ0FDQSxDQUFBLENBQ0EsQ0FDQSxNQUFBNk8sRUFBQSxDQUFBLEVBQ0EsUUFBQXZDLEVBQUEsRUFBQUEsR0FBQSxHQUFBQSxJQUFBLENBQ0EsTUFBQWdCLEVBQUEsSUFBQSxLQUFBLEVBQUFoQixFQUFBLENBQUEsRUFDQXVDLEVBQUEsS0FBQSxDQUNBLEtBQUF2QixFQUFBLGVBQUF0TixFQUFBLENBQUEsTUFBQSxPQUFBLEVBQ0EsTUFBQXNOLEVBQUEsZUFBQXROLEVBQUEsQ0FBQSxNQUFBLFFBQUEsQ0FDQSxDQUFBLENBQ0EsQ0FDQW9RLEVBQUFELEdBQUFuUSxDQUFBLEVBQUEsQ0FDQSxhQUFBNE8sRUFDQSxXQUFBQyxDQUNBLENBQ0EsQ0FDQSxPQUFBdUIsQ0FDQSwySUN0ZkEsSUFBSXRELEdBQVMsVUFBWSxDQUN2QixJQUFJQyxFQUFJLEtBQ0pDLEVBQUdELEVBQUksZUFDUEUsRUFBR0YsRUFBSSxNQUFNLElBQUlDLEVBRXJCLE9BQU9DLEVBQUcsTUFBTyxDQUNmLFlBQWEsd0JBQ2QsRUFBRSxDQUFDRixFQUFJLFdBQWFFLEVBQUcsTUFBTyxDQUM3QixJQUFLLFVBQ0wsWUFBYSxlQUNiLE1BQU9GLEVBQUksWUFDWixFQUFFLENBQUNBLEVBQUksR0FBRyxTQUFTLENBQUMsRUFBRyxDQUFDLEVBQUlBLEVBQUksVUFBWSxRQUFVRSxFQUFHLE1BQU8sQ0FDL0QsSUFBSyxVQUNMLFlBQWEsZUFDYixNQUFPRixFQUFJLGFBQ1gsR0FBSSxDQUNGLE1BQVNBLEVBQUksT0FDZCxDQUNGLEVBQUUsQ0FBQ0EsRUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFHLENBQUMsRUFBSUEsRUFBSSxVQUFZLFFBQVVFLEVBQUcsTUFBTyxDQUMvRCxJQUFLLFVBQ0wsWUFBYSxlQUNiLE1BQU9GLEVBQUksYUFDWCxHQUFJLENBQ0YsV0FBYyxTQUFVMkIsRUFBUSxDQUM5QixPQUFPM0IsRUFBSSxRQUFRLEVBQUksQ0FDeEIsRUFDRCxXQUFjLFNBQVUyQixFQUFRLENBQzlCLE9BQU8zQixFQUFJLFFBQVEsRUFBSyxDQUN6QixDQUNGLENBQ0wsRUFBSyxDQUFDQSxFQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUcsQ0FBQyxFQUFJQSxFQUFJLFVBQVksU0FBV0EsRUFBSSxVQUFZLFNBQVdFLEVBQUcsTUFBTyxDQUMzRixJQUFLLFVBQ0wsWUFBYSxlQUNiLE1BQU9GLEVBQUksWUFDWixFQUFFLENBQUNBLEVBQUksR0FBRyxTQUFTLENBQUMsRUFBRyxDQUFDLEVBQUlBLEVBQUksS0FBTUUsRUFBRyxhQUFjLENBQ3RELE1BQU8sQ0FDTCxLQUFRRixFQUFJLFVBQ2IsQ0FDRixFQUFFLENBQUNBLEVBQUksVUFBWSxRQUFVRSxFQUFHLE1BQU8sQ0FDdEMsV0FBWSxDQUFDLENBQ1gsS0FBTSxPQUNOLFFBQVMsU0FDVCxNQUFPRixFQUFJLFVBQ1gsV0FBWSxXQUNsQixDQUFLLEVBQ0QsSUFBSyxRQUNMLFlBQWEsYUFDYixNQUFPQSxFQUFJLFdBQ1gsTUFBT0EsRUFBSSxXQUNYLEdBQUksQ0FDRixXQUFjLFNBQVUyQixFQUFRLENBQzlCLE9BQU8zQixFQUFJLFFBQVEsRUFBSSxDQUN4QixFQUNELFdBQWMsU0FBVTJCLEVBQVEsQ0FDOUIsT0FBTzNCLEVBQUksUUFBUSxFQUFLLENBQ3pCLENBQ0YsQ0FDRixFQUFFLENBQUNBLEVBQUksVUFBWUEsRUFBSSxHQUFHLE9BQU8sRUFBSUEsRUFBSSxHQUFFLENBQUUsRUFBRyxDQUFDLEVBQUlFLEVBQUcsTUFBTyxDQUM5RCxXQUFZLENBQUMsQ0FDWCxLQUFNLE9BQ04sUUFBUyxTQUNULE1BQU9GLEVBQUksVUFDWCxXQUFZLFdBQ2xCLENBQUssRUFDRCxJQUFLLFFBQ0wsWUFBYSxhQUNiLE1BQU9BLEVBQUksV0FDWCxNQUFPQSxFQUFJLFVBQ1osRUFBRSxDQUFDQSxFQUFJLFVBQVlBLEVBQUksR0FBRyxPQUFPLEVBQUlBLEVBQUksR0FBRSxDQUFFLEVBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FDM0QsRUFDSUcsR0FBa0IsQ0FBRSxjQ2dCeEJDLEdBQUEsQ0FDQSxNQUFBLENBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLE9BQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsT0FBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxRQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxXQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsQ0FBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EscUJBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxDQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFVBQUEsS0FBQSxLQUNBLGVBQUEsS0FBQSxTQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsY0FBQSxDQUNBLE1BQUEsQ0FDQSx3QkFBQSxLQUFBLFFBQ0EsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBa0QsRUFBQSxDQUNBLENBQUEsY0FBQTVQLEVBQUEsVUFBQSxLQUFBLFNBQUEsR0FBQSxFQUFBLEVBQ0EsRUFDQSxPQUFBLEtBQUEsY0FDQTRQLEVBQUEsS0FBQSxXQUFBLEVBQUEsSUFFQUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBLEtBQUEsT0FBQSxZQUFBLEtBQUEsU0FBQSxFQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsS0FBQUMsRUFBQSxDQUNBLEtBQUEsVUFBQUEsR0FBQSxLQUFBLFVBQ0EsRUFFQSxVQUFBdkIsRUFBQUMsRUFBQSxDQUNBLENBQUFELEdBQUEsQ0FBQUMsSUFDQSxLQUFBLE1BQUEsY0FBQUQsQ0FBQSxFQUNBQSxHQUNBLEtBQUEsVUFBQSxJQUFBLEtBQUEsZUFBQSxDQUFBLEVBR0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLENBQUEsUUFBQXdCLEVBQUEsTUFBQUMsQ0FBQSxFQUFBLEtBQUEsTUFDQSxHQUFBLEtBQUEsVUFBQSxRQUFBLENBQ0EsTUFBQTFULEVBQUF5VCxFQUFBLGNBQUEsaUJBQUEsRUFDQXpULElBQ0EsS0FBQSxZQUFBZ1IsR0FBQWhSLEVBQUEsQ0FDQSxNQUFBLElBQUEsQ0FDQSxLQUFBLFVBQUEsRUFDQSxFQUNBLEtBQUEsSUFBQSxDQUNBLEtBQUEsVUFBQSxFQUNBLENBQ0EsQ0FBQSxFQUVBLENBRUEsS0FBQSxzQkFBQSxDQUFBLEtBQUEsYUFJQSxLQUFBLFlBQUFnUixHQUFBLE9BQUEsQ0FDQSxRQUFBbFMsR0FBQSxDQUVBLEtBQUEsV0FDQSxDQUFBNFUsRUFBQSxTQUFBNVUsRUFBQSxNQUFBLEdBQ0EsQ0FBQTJVLEVBQUEsU0FBQTNVLEVBQUEsTUFBQSxJQUVBLEtBQUEsVUFBQSxHQUVBLEVBRUEsS0FBQSxJQUFBLENBQ0EsS0FBQSxVQUFBLEVBQ0EsQ0FDQSxDQUFBLEdBR0EsS0FBQSxhQUNBLEtBQUEsVUFBQSxHQUVBLEVBRUEsU0FBQSxDQUNBLEtBQUEsVUFBQSxLQUFBLElBQ0EsRUFFQSxlQUFBLFVBQ0FVLEVBQUEsS0FBQSxjQUFBLE1BQUFBLEVBQUEsVUFDQTJKLEVBQUEsS0FBQSxjQUFBLE1BQUFBLEVBQUEsU0FDQSxLQUFBLGdCQUFBLElBQ0EsRUFFQSxRQUFBLENBQ0EsZ0JBQUEsQ0FDQSxLQUFBLENBQUEsUUFBQXNLLEVBQUEsTUFBQUMsQ0FBQSxFQUFBLEtBQUEsTUFDQSxHQUFBLEtBQUEsTUFBQUEsRUFBQSxjQUFBLEVBQUEsQ0FDQSxXQUFBLElBQUEsS0FBQSxlQUFBLEVBQUEsQ0FBQSxFQUNBLE1BQ0EsQ0FFQSxNQUFBMVQsRUFBQUksRUFBQUEsU0FBQSxLQUFBLE1BQUEsRUFDQSxLQUFBLE1BQUEsS0FBQSxNQUFBLEVBQ0EsS0FBQSxPQUNBLEdBQUFKLEVBQUEsQ0FFQSxNQUFBMlQsRUFBQTNULElBQUEwVCxFQUFBRCxFQUFBQyxFQUFBLFdBQ0FDLEVBQUEsTUFBQSxNQUFBLGlCQUFBM1QsQ0FBQSxFQUFBLEtBQ0EsQ0FFQSxNQUFBNFQsR0FBQTVULEdBQUF5VCxHQUFBLHNCQUFBLEVBQ0FJLEVBQUFELEVBQUEsS0FBQSxPQUFBLFFBQ0FFLEVBQUFGLEVBQUEsSUFBQSxPQUFBLFFBQ0FHLEVBQUFILEVBQUEsTUFDQUksRUFBQUosRUFBQSxPQUNBSyxFQUFBUCxFQUFBLFlBQ0FRLEVBQUFSLEVBQUEsYUFFQSxHQUFBLENBQUFTLEVBQUFDLENBQUEsRUFBQSxLQUFBLGVBQUEsTUFBQSxHQUFBLEdBQUEsQ0FBQSxFQUNBLEdBQUEsS0FBQSxXQUFBLENBQ0EsTUFBQUMsRUFBQSxPQUFBLFdBQ0FDLEVBQUEsT0FBQSxZQUNBSCxJQUFBLE1BQ0FMLEVBQUFJLElBQ0FDLEVBQUEsVUFFQUEsSUFBQSxTQUNBRyxFQUFBUixFQUFBRSxFQUFBRSxJQUNBQyxFQUFBLE9BRUFBLElBQUEsT0FDQU4sRUFBQUksSUFDQUUsRUFBQSxTQUVBQSxJQUFBLFNBQ0FFLEVBQUFSLEVBQUFFLEVBQUFFLElBQ0FFLEVBQUEsUUFJQUMsSUFBQSxNQUNBRSxFQUFBUixFQUFBSSxJQUNBRSxFQUFBLFVBRUFBLElBQUEsU0FDQU4sRUFBQUUsRUFBQUUsSUFDQUUsRUFBQSxPQUVBQSxJQUFBLE9BQ0FDLEVBQUFSLEVBQUFJLElBQ0FHLEVBQUEsU0FFQUEsSUFBQSxTQUNBUCxFQUFBRSxFQUFBRSxJQUNBRyxFQUFBLE9BR0EsQ0FFQSxJQUFB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Q0FBQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxLQUFBLFFBQUEsSUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxPQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLGFBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxPQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUFDLEVBQUEsZUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxXQUFBLEVBQUEsUUFBQSxTQUFBLEVBQ0EsYUFBQSxDQUFBLEtBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxhQUFBLEtBQUEsTUFDQSxVQUFBLEtBQUEsS0FDQSxhQUFBLEdBQ0EsUUFBQSxFQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsU0FBQSxDQUNBLE9BQUEsS0FBQSxjQUFBLEtBQUEsU0FDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBeFMsRUFBQSxPQUFBLEtBQUEsYUFBQSxDQUNBLE9BQUEsS0FBQSxPQUNBLEtBQUEsS0FBQSxXQUNBLEtBQUEsRUFDQSxDQUFBLEdBQUEsRUFDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUE4TyxFQUFBQyxFQUFBLENBQ0EsQ0FBQUQsR0FBQSxDQUFBQyxJQUNBLEtBQUEsYUFBQUQsRUFFQSxFQUVBLGFBQUF6QixFQUFBLENBQ0EsQ0FBQUEsR0FBQSxDQUFBLEtBQUEsUUFDQSxLQUFBLFFBQUEsR0FDQSxLQUFBLE1BQUEsUUFBQUEsQ0FBQSxFQUVBLEVBRUEsS0FBQWdELEVBQUEsQ0FDQSxLQUFBLFVBQUFBLENBQ0EsRUFFQSxVQUFBdkIsRUFBQUMsRUFBQSxDQUNBLENBQUFELEdBQUEsQ0FBQUMsR0FDQSxLQUFB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LENBQUEsUUFBQW1GLEdBQUEsV0FBQUUsQ0FBQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxLQUFBLFFBQUEsSUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxPQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLGFBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsV0FBQSxFQUFBLFFBQUEsU0FBQSxFQUNBLGFBQUEsQ0FBQSxLQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLEVBQ0EsZUFBQSxDQUFBLEtBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxhQUFBLEtBQUEsTUFDQSxVQUFBLEtBQUEsS0FDQSxhQUFBLEdBQ0EsVUFBQSxFQUNBLFFBQUEsRUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsY0FBQSxLQUFBLFNBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQSxLQUFBLGFBQ0EsR0FDQSxLQUFBLFFBQUEsS0FBQSxJQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLE1BQUEsSUFDQSxFQUNBLEVBRUEsYUFBQSxDQUNBLE9BQ0EsS0FBQSxjQUlBbkYsRUFBQSxJQUFBLEtBQUEsQ0FBQSxLQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsRUFBQSxZQUFBLENBQUEsQ0FBQSxDQUVBLEVBRUEsS0FBQSxDQUNBLEtBQUEsQ0FDQSxPQUFBLEtBQUEsWUFBQSxTQUFBLENBQ0EsRUFFQSxJQUFBSyxFQUFBLENBQ0EsS0FBQSxRQUFBLENBQUEsS0FBQUEsRUFBQSxDQUNBLENBQ0EsRUFFQSxPQUFBLENBQ0EsS0FBQSxDQUNBLE9BQUEsS0FBQSxZQUFBLFdBQUEsQ0FDQSxFQUVBLElBQUFDLEVBQUEsQ0FDQSxLQUFBLFFBQUEsQ0FBQSxPQUFBQSxFQUFBLENBQ0EsQ0FDQSxFQUVBLE9BQUEsQ0FDQSxLQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsV0FBQSxDQUNBLEVBRUEsSUFBQUMsRUFBQSxDQUNBLEtBQUEsUUFBQSxDQUFBLE9BQUFBLEVBQUEsQ0FDQSxDQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQW1CLEVBQUFDLEVBQUEsQ0FDQSxDQUFBRCxHQUFBLENBQUFDLElBQ0EsS0FBQSxhQUFBRCxFQUVBLEVBRUEsYUFBQXpCLEVBQUEsQ0FDQSxDQUFBQSxHQUFBLENBQUEsS0FBQSxRQUNBLEtBQUEsUUFBQSxHQUNBLEtBQUEsTUFBQSxRQUFBQSxDQUFBLEVBQ0EsS0FBQSxVQUFBLEVBRUEsRUFFQSxZQUFBLGtCQUVBLFVBQUEsa0JBRUEsS0FBQWdELEVBQUEsQ0FDQSxLQUFBLFVBQUFBLENBQ0EsRUFFQSxVQUFBdkIsRUFBQUMsRUFBQSxDQUNBRCxJQUNBLEtBQUEsZ0JBQUEsRUFDQSxLQUFBLFVBQUEsQ0FBQSxHQUVBLENBQUFBLEdBQUEsQ0FBQUMsR0FDQSxLQUFBLE1BQUEsY0FBQUQsQ0FBQSxDQUVBLEVBRUEsUUFBQUEsRUFBQUMsRUFBQSxDQUNBLENBQUFELEdBQUEsQ0FBQUMsR0FDQSxLQUFBLE1BQUFELEVBQUEsUUFBQSxNQUFBLENBRUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLElBQUEsT0FBQSxJQUFBLENBQ0EsS0FBQSxVQUNBLEtBQUEsUUFBQSxHQUNBLEtBQUEsTUFBQSxTQUFBLEtBQUEsWUFBQSxFQUVBLENBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxRQUFBN1QsRUFBQSxDQUNBLE9BQUEsSUFBQUEsR0FBQSxNQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUFnVSxFQUFBLENBQ0EsS0FBQSxhQUFBN0IsRUFBQSxLQUFBLFlBQUEsQ0FDQSxHQUFBNkIsRUFDQSxZQUFBLENBQ0EsQ0FBQSxD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QUFBLEtBQUEsWUFBQSxHQUFBLEtBQUEsZ0JBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsSUFBQSxLQUFBLE1BQUEsS0FBQSxnQkFBQSxFQUFBLEtBQUEsS0FBQSxDQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxrQkFDQSxTQUFBLGtCQUNBLFNBQUEsa0JBRUEsS0FBQStGLEVBQUEsQ0FDQSxLQUFBLFlBQUFBLENBQ0EsRUFFQSxTQUFBQyxFQUFBLENBQ0EsS0FBQSxnQkFBQUEsQ0FDQSxFQUVBLGdCQUFBQyxFQUFBLENBQ0EsS0FBQSxTQUFBLEtBQUEsS0FBQSxLQUFBLE1BQUFBLENBQUEsRUFDQSxLQUFBLFlBQUEsS0FBQSxXQUNBLEtBQUEsWUFBQSxLQUFBLFVBRUEsS0FBQSxnQkFBQSxFQUNBLEtBQUEsTUFBQSxjQUFBLEtBQUEsS0FBQUEsQ0FBQSxDQUNBLEVBRUEsWUFBQXJFLEVBQUFDLEVBQUEsQ0FDQUQsSUFBQUMsSUFDQSxLQUFBLGdCQUFBLEVBQ0EsS0FBQSxNQUFBLGNBQUFELENBQUEsRUFFQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsWUFBQSxLQUFBLEtBQ0EsS0FBQSxnQkFBQSxLQUFBLFFBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxnQkFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFlBQUFtRSxFQUFBLENBQ0FBLEVBQUEsT0FBQSxDQUFBQSxFQUFBLFVBQUFBLEVBQUEsUUFBQSxLQUFBLGNBQ0EsS0FBQSxZQUFBQSxFQUFBLE1BRUEsRUFFQSxhQUFBQSxFQUFBLENBQ0EsTUFBQTdDLEVBQUEsQ0FDQSxnQkFBQTZDLEVBQUEsTUFDQSxFQUNBLE9BQUFBLEVBQUEsT0FDQTdDLEVBQUEsZUFBQTZDLEVBQUEsTUFBQSxFQUFBLElBRUE3QyxDQUNBLEVBRUEsaUJBQUEsQ0FDQSxLQUFBLENBQUEsU0FBQWdELEVBQUEsU0FBQUMsRUFBQSxNQUFBQyxFQUFBLGdCQUFBSCxFQUFBLFlBQUFJLENBQUEsRUFBQSxLQUNBQyxFQUFBSixFQUFBQyxFQUFBLEVBQ0FJLEVBQUEs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QUFBK00sQ0FDQSxDQUNBLEVBRUEsV0FBQSxPQUNBLE9BQUFuYSxFQUFBLEtBQUEsU0FBQSxZQUFBQSxFQUFBLFNBQ0EsRUFFQSxlQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsQ0FBQSxPQUFBLFNBQUEsV0FBQSxHQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsS0FBQSxPQUFBLEtBQ0EsR0FBQSxLQUFBLFlBQUEsQ0FBQSxPQUFBLFlBQUEsV0FBQSxHQUFBLENBQ0EsQ0FDQSxFQVFBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxPQUFBLEtBQUEsUUFDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBdEMsR0FBQSxLQUFBLFNBQUEsS0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxPQUFBLEtBQUEsU0FDQSxLQUFBLGtCQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsY0FBQWlTLEdBQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE9BQUEsS0FBQSxjQUFBQSxHQUFBQSxFQUFBLFNBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsZUFBQUEsR0FBQUEsRUFBQSxPQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQSxLQUFBLGVBQUFBLEdBQUFBLEVBQUEsV0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQUEsS0FBQSxXQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFNBQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLGFBQUEsQ0FDQSxLQUFBLENBQUEsV0FBQWhOLEdBQUEsS0FBQSxPQUNBLE1BQUEsQ0FBQSxDQUFBQSxH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Q0EsT0FBQSxDQUlBLE1BQUFFLEVBQUEsS0FBQSxTQUFBLEVBQ0EsQ0FBQSxXQUFBUyxFQUFBLGFBQUFDLENBQUEsRUFBQSxLQUNBLE1BQUEsQ0FDQSxHQUFBVixFQUNBLE9BQUFTLEVBQUFULEVBQUEsT0FBQUEsRUFBQSxLQUNBLFVBQUFTLEVBQUFULEVBQUEsUUFBQUEsRUFBQSxNQUNBLE9BQUFVLEVBQUFWLEVBQUEsT0FBQUEsRUFBQSxNQUNBLFVBQUFVLEVBQUFWLEVBQUEsVUFBQUEsRUFBQSxNQUNBLENBQ0EsRUFFQSxRQUFBLENBQ0EsT0FBQSxLQUFBLGtCQUNBLEtBQUEsYUFHQSxLQUFBLE1BQUEsQ0FBQSxLQUFBLEtBQUEsSUFBQSxFQUNBLEtBQUEsT0FDQSxHQUFBLENBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBblAsRUFDQThQLEVBQUEsTUFDQSxDQUNBLE9BQUEsQ0FDQSxLQUFBLFNBQ0EsT0FBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE9BQUEsQ0FDQSxDQUNBLEVBRUEsT0FBQSxDQUFBLEtBQUEsWUFBQSxDQUNBLEtBQUEsU0FFQSxVQUFBLEdBQ0EsT0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLFVBQUFyYixDQUFBLElBQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsQ0FDQSxFQUNBLEtBQUEsT0FBQSxPQUNBLENBQ0EsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFBQSxLQUFBLG1CQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFlBQ0EsRUFFQSxZQUFBLENBRUEsT0FBQSxLQUFBLFFBQUEsUUFDQSxFQUVBLFNBQUEsT0FDQSxNQUFBLENBQUEsS0FBQSxZQUFBLENBQUEsR0FBQXRDLEVBQUEsS0FBQSxzQkFBQSxNQUFBQSxFQUFBLFFBQ0EsRUFFQSxhQUFBLE9BQ0EsUUFBQUEsRUFBQSxLQUFBLHNCQUFBLFlBQUFBLEVBQUEsY0FBQSxJQUNBLEVBRUEsWUFBQSxDQUlBLE9BQUEsS0FBQSxhQUFBLE1BQ0EsRUFFQSxNQUFBLENBRUEsT0FBQSxLQUFBLE9BQUEs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RUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLENBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLElBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxLQUFBLFVBQUEsSUFDQSxFQUVBLE9BQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxLQUNBLEVBRUEsVUFBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLFFBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxDQUNBLEdBQUEsS0FBQSxLQUNBLE9BQUEsS0FBQSxNQUNBLENBQ0EsRUFFQSxZQUFBLENBQ0EsT0FBQXpSLEVBQUEsS0FBQSxPQUFBLFVBQUEsQ0FDQSxFQUdBLGdCQUFBLENBQ0EsT0FBQSxLQUFBLE9BQUEsUUFDQSxFQUVBLGNBQUEsT0FDQSxNQUFBbkwsR0FBQXBDLEVBQUEsS0FBQSxpQkFBQSxZQUFBQSxFQUFBLEtBQ0EsT0FBQW9DLEdBQUEsS0FBQSxLQUFBQSxDQUFBLENBQ0EsRUFFQSxtQkFBQSxPQUNBLFFBQ0FwQyxFQUFBLEtBQUEsZUFBQSxZQUFBQSxFQUFBLFFBQUEsR0FDQSxLQUFBLGVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsT0FBQSxLQUFBLGNBQ0EsQ0FBQSxDQUVBLEVBRUEsYUFBQSxPQUNBLFFBQUFBLEVBQUEsS0FBQSxlQUFBLFlBQUFBLEVBQUEsU0FBQSxDQUNBLEVBRUEsZUFBQSxPQUNBLFFBQUFBLEVBQUEsS0FBQSxhQUFBLFlBQUFBLEVBQUEsU0FBQSxDQUNBLEVBRUEsWUFBQSxDQUNBLE9BQUEsS0FBQSxjQUFBLEtBQUEsV0FDQSxFQUVBLGVBQUEsT0FDQSxLQUFBLENBQUEs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