@citolab/qti-components 6.7.1-43 → 6.7.1-44

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,16 +1,16 @@
1
- import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from"@lit/context";import{LitElement as Gt,html as Qt}from"lit";import{customElement as er,property as Y}from"lit/decorators.js";function b(l,s){let e=h({waitUntilFirstUpdate:!1},s);return(t,r)=>{let{update:n}=t,o=Array.isArray(l)?l:[l];t.update=function(a){o.forEach(c=>{let p=c;if(a.has(p)){let d=a.get(p),m=this[p];d!==m&&(!e.waitUntilFirstUpdate||this.hasUpdated)&&this[r](d,m)}}),n.call(this,a)}}}import{createContext as Jt}from"@lit/context";var _t=[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"unknown",type:"outcome"},{identifier:"numAttempts",cardinality:"single",baseType:"integer",value:"0",type:"response"}],A=Jt("item");var _=class extends Gt{constructor(){super();this.identifier="";this.adaptive="false";this.timeDependent="false";this._handleDisabledChange=(e,t)=>{this._interactionElements.forEach(r=>r.disabled=t)};this._handleReadonlyChange=(e,t)=>this._interactionElements.forEach(r=>r.readonly=t);this._context={identifier:this.getAttribute("identifier"),variables:_t};this._initialContext=y(h({},this._context),{variables:this._context.variables});this._feedbackElements=[];this._interactionElements=[];this.addEventListener("qti-register-variable",e=>{this._context=y(h({},this._context),{variables:[...this._context.variables,e.detail.variable]}),this._initialContext=this._context,e.stopPropagation()}),this.addEventListener("qti-register-feedback",e=>{e.stopPropagation();let t=e.detail;this._feedbackElements.push(t),t.checkShowFeedback(t.outcomeIdentifier)}),this.addEventListener("qti-register-interaction",e=>{e.stopPropagation(),this._interactionElements.push(e.target)}),this.addEventListener("end-attempt",e=>{let{responseIdentifier:t,countAttempt:r}=e.detail;this.updateResponseVariable(t,"true"),this.processResponse(r)}),this.addEventListener("qti-set-outcome-value",e=>{let{outcomeIdentifier:t,value:r}=e.detail;this.updateOutcomeVariable(t,r),e.stopPropagation()}),this.addEventListener("qti-interaction-response",this.handleUpdateResponseVariable)}get variables(){return this._context.variables.map(e=>({identifier:e.identifier,value:e.value,type:e.type}))}set variables(e){if(!Array.isArray(e)||e.some(t=>!("identifier"in t))){console.warn("variables property should be an array of VariableDeclaration");return}this._context=y(h({},this._context),{variables:this._context.variables.map(t=>{let r=e.find(n=>n.identifier===t.identifier);return r?h(h({},t),r):t})}),this._context.variables.forEach(t=>{if(t.type==="response"){let r=this._interactionElements.find(n=>n.responseIdentifier===t.identifier);r&&(r.response=t.value)}t.type==="outcome"&&this._feedbackElements.forEach(r=>r.checkShowFeedback(t.identifier))})}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this._emit("qti-assessment-item-connected",this)}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let n=this._interactionElements.find(o=>o.getAttribute("response-identifier")===t.responseIdentifier);n&&(n.response=t.response)}}render(){return Qt`<slot></slot>`}showCorrectResponse(e){let r=this._context.variables.filter(n=>"correctResponse"in n&&n.correctResponse).map(n=>({responseIdentifier:n.identifier,response:n.correctResponse}));for(let n of r){let o=this._interactionElements.find(a=>a.getAttribute("response-identifier")===n.responseIdentifier);o&&(o.correctResponse=e?n.response:"")}}processResponse(e=!0){var r;let t=this.querySelector("qti-response-processing");return!t||!t.process?!1:(t.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus()),e&&this.updateOutcomeVariable("numAttempts",(+((r=this._context.variables.find(n=>n.identifier==="numAttempts"))==null?void 0:r.value)+1).toString()),this._emit("qti-response-processed"),!0)}resetResponses(){this._context=this._initialContext}getResponse(e){return this.getVariable(e)}getOutcome(e){return this.getVariable(e)}getVariable(e){return this._context.variables.find(t=>t.identifier===e)||null}handleUpdateResponseVariable(e){let{responseIdentifier:t,response:r}=e.detail;this.updateResponseVariable(t,r)}updateResponseVariable(e,t){this._context=y(h({},this._context),{variables:this._context.variables.map(r=>r.identifier!==e?r:y(h({},r),{value:t}))}),this._emit("qti-interaction-changed",{item:this.identifier,responseIdentifier:e,response:t}),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus())}updateOutcomeVariable(e,t){var n;let r=this.getOutcome(e);if(!r){console.warn(`Can not set qti-outcome-identifier: ${e}, it is not available`);return}this._context=y(h({},this._context),{variables:this._context.variables.map(o=>o.identifier!==e?o:y(h({},o),{value:r.cardinality==="single"?t:[...o.value,t]}))}),this._feedbackElements.forEach(o=>o.checkShowFeedback(e)),this._emit("qti-outcome-changed",{item:this.identifier,outcomeIdentifier:e,value:(n=this._context.variables.find(o=>o.identifier===e))==null?void 0:n.value})}_getCompletionStatus(){return this._interactionElements.every(e=>e.validate())?"completed":this._interactionElements.some(e=>e.validate())?"incomplete":"not_attempted"}_emit(e,t=null){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}};i([Y({type:String})],_.prototype,"title",2),i([Y({type:String})],_.prototype,"identifier",2),i([Y({type:String})],_.prototype,"adaptive",2),i([Y({type:String})],_.prototype,"timeDependent",2),i([Y({type:Boolean})],_.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],_.prototype,"_handleDisabledChange",2),i([Y({type:Boolean})],_.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],_.prototype,"_handleReadonlyChange",2),i([Zt({context:A})],_.prototype,"_context",2),_=i([er("qti-assessment-item")],_);import{LitElement as tr,html as rr}from"lit";import{property as te}from"lit/decorators.js";var ir={SPACE:32},q=class extends tr{constructor(){super(...arguments);this.tabindex=0;this.disabled=!1;this.readonly=!1;this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-register-choice",{bubbles:!0,cancelable:!1,composed:!0}))}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-loose-choice",{bubbles:!0,cancelable:!1,composed:!0}))}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){if(!e.altKey)switch(e.keyCode){case ir.SPACE:e.preventDefault(),this._toggleChecked();break;default:}}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.dispatchEvent(new CustomEvent("qti-choice-element-selected",{bubbles:!0,cancelable:!1,composed:!0,detail:{identifier:this.identifier,checked:this.checked}})))}validateAllProps(){return!!this.getAttribute("identifier")}render(){return this.validateAllProps()||console.warn(`Invalid props for ${this.outerHTML}`,"missing identifier"),rr` <slot></slot> `}};i([te({type:String})],q.prototype,"identifier",2),i([te({type:Number,reflect:!0})],q.prototype,"tabindex",2),i([te({reflect:!0,type:Boolean,attribute:"aria-disabled",converter:{toAttribute:e=>e}})],q.prototype,"disabled",2),i([te({reflect:!0,type:Boolean,attribute:"aria-readonly",converter:{toAttribute:e=>e}})],q.prototype,"readonly",2),i([te({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>e}})],q.prototype,"checked",2),i([b("disabled",{waitUntilFirstUpdate:!0})],q.prototype,"handleDisabledChange",1);import{customElement as or}from"lit/decorators.js";import{html as nr,LitElement as ar}from"lit";import{css as sr}from"lit";var Tt=sr`
1
+ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from"@lit/context";import{LitElement as Gt,html as Qt}from"lit";import{customElement as er,property as Y}from"lit/decorators.js";function b(l,s){let e=h({waitUntilFirstUpdate:!1},s);return(t,r)=>{let{update:o}=t,n=Array.isArray(l)?l:[l];t.update=function(a){n.forEach(c=>{let p=c;if(a.has(p)){let d=a.get(p),m=this[p];d!==m&&(!e.waitUntilFirstUpdate||this.hasUpdated)&&this[r](d,m)}}),o.call(this,a)}}}import{createContext as Jt}from"@lit/context";var _t=[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"unknown",type:"outcome"},{identifier:"numAttempts",cardinality:"single",baseType:"integer",value:"0",type:"response"}],A=Jt("item");var _=class extends Gt{constructor(){super();this.identifier="";this.adaptive="false";this.timeDependent="false";this._handleDisabledChange=(e,t)=>{this._interactionElements.forEach(r=>r.disabled=t)};this._handleReadonlyChange=(e,t)=>this._interactionElements.forEach(r=>r.readonly=t);this._context={identifier:this.getAttribute("identifier"),variables:_t};this._initialContext=y(h({},this._context),{variables:this._context.variables});this._feedbackElements=[];this._interactionElements=[];this.addEventListener("qti-register-variable",e=>{this._context=y(h({},this._context),{variables:[...this._context.variables,e.detail.variable]}),this._initialContext=this._context,e.stopPropagation()}),this.addEventListener("qti-register-feedback",e=>{e.stopPropagation();let t=e.detail;this._feedbackElements.push(t),t.checkShowFeedback(t.outcomeIdentifier)}),this.addEventListener("qti-register-interaction",e=>{e.stopPropagation(),this._interactionElements.push(e.target)}),this.addEventListener("end-attempt",e=>{let{responseIdentifier:t,countAttempt:r}=e.detail;this.updateResponseVariable(t,"true"),this.processResponse(r)}),this.addEventListener("qti-set-outcome-value",e=>{let{outcomeIdentifier:t,value:r}=e.detail;this.updateOutcomeVariable(t,r),e.stopPropagation()}),this.addEventListener("qti-interaction-response",this.handleUpdateResponseVariable)}get variables(){return this._context.variables.map(e=>({identifier:e.identifier,value:e.value,type:e.type}))}set variables(e){if(!Array.isArray(e)||e.some(t=>!("identifier"in t))){console.warn("variables property should be an array of VariableDeclaration");return}this._context=y(h({},this._context),{variables:this._context.variables.map(t=>{let r=e.find(o=>o.identifier===t.identifier);return r?h(h({},t),r):t})}),this._context.variables.forEach(t=>{if(t.type==="response"){let r=this._interactionElements.find(o=>o.responseIdentifier===t.identifier);r&&(r.response=t.value)}t.type==="outcome"&&this._feedbackElements.forEach(r=>r.checkShowFeedback(t.identifier))})}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this._emit("qti-assessment-item-connected",this)}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let o=this._interactionElements.find(n=>n.getAttribute("response-identifier")===t.responseIdentifier);o&&(o.response=t.response)}}render(){return Qt`<slot></slot>`}showCorrectResponse(e){let r=this._context.variables.filter(o=>"correctResponse"in o&&o.correctResponse).map(o=>({responseIdentifier:o.identifier,response:o.correctResponse}));for(let o of r){let n=this._interactionElements.find(a=>a.getAttribute("response-identifier")===o.responseIdentifier);n&&(n.correctResponse=e?o.response:"")}}processResponse(e=!0){var r;let t=this.querySelector("qti-response-processing");return!t||!t.process?!1:(t.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus()),e&&this.updateOutcomeVariable("numAttempts",(+((r=this._context.variables.find(o=>o.identifier==="numAttempts"))==null?void 0:r.value)+1).toString()),this._emit("qti-response-processed"),!0)}resetResponses(){this._context=this._initialContext}getResponse(e){return this.getVariable(e)}getOutcome(e){return this.getVariable(e)}getVariable(e){return this._context.variables.find(t=>t.identifier===e)||null}handleUpdateResponseVariable(e){let{responseIdentifier:t,response:r}=e.detail;this.updateResponseVariable(t,r)}updateResponseVariable(e,t){this._context=y(h({},this._context),{variables:this._context.variables.map(r=>r.identifier!==e?r:y(h({},r),{value:t}))}),this._emit("qti-interaction-changed",{item:this.identifier,responseIdentifier:e,response:t}),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus())}updateOutcomeVariable(e,t){var o;let r=this.getOutcome(e);if(!r){console.warn(`Can not set qti-outcome-identifier: ${e}, it is not available`);return}this._context=y(h({},this._context),{variables:this._context.variables.map(n=>n.identifier!==e?n:y(h({},n),{value:r.cardinality==="single"?t:[...n.value,t]}))}),this._feedbackElements.forEach(n=>n.checkShowFeedback(e)),this._emit("qti-outcome-changed",{item:this.identifier,outcomeIdentifier:e,value:(o=this._context.variables.find(n=>n.identifier===e))==null?void 0:o.value})}_getCompletionStatus(){return this._interactionElements.every(e=>e.validate())?"completed":this._interactionElements.some(e=>e.validate())?"incomplete":"not_attempted"}_emit(e,t=null){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}};i([Y({type:String})],_.prototype,"title",2),i([Y({type:String})],_.prototype,"identifier",2),i([Y({type:String})],_.prototype,"adaptive",2),i([Y({type:String})],_.prototype,"timeDependent",2),i([Y({type:Boolean})],_.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],_.prototype,"_handleDisabledChange",2),i([Y({type:Boolean})],_.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],_.prototype,"_handleReadonlyChange",2),i([Zt({context:A})],_.prototype,"_context",2),_=i([er("qti-assessment-item")],_);import{LitElement as tr,html as rr}from"lit";import{property as te}from"lit/decorators.js";var ir={SPACE:32},q=class extends tr{constructor(){super(...arguments);this.tabindex=0;this.disabled=!1;this.readonly=!1;this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-register-choice",{bubbles:!0,cancelable:!1,composed:!0}))}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-loose-choice",{bubbles:!0,cancelable:!1,composed:!0}))}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){if(!e.altKey)switch(e.keyCode){case ir.SPACE:e.preventDefault(),this._toggleChecked();break;default:}}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.dispatchEvent(new CustomEvent("qti-choice-element-selected",{bubbles:!0,cancelable:!1,composed:!0,detail:{identifier:this.identifier,checked:this.checked}})))}validateAllProps(){return!!this.getAttribute("identifier")}render(){return this.validateAllProps()||console.warn(`Invalid props for ${this.outerHTML}`,"missing identifier"),rr` <slot></slot> `}};i([te({type:String})],q.prototype,"identifier",2),i([te({type:Number,reflect:!0})],q.prototype,"tabindex",2),i([te({reflect:!0,type:Boolean,attribute:"aria-disabled",converter:{toAttribute:e=>e}})],q.prototype,"disabled",2),i([te({reflect:!0,type:Boolean,attribute:"aria-readonly",converter:{toAttribute:e=>e}})],q.prototype,"readonly",2),i([te({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>e}})],q.prototype,"checked",2),i([b("disabled",{waitUntilFirstUpdate:!0})],q.prototype,"handleDisabledChange",1);import{customElement as or}from"lit/decorators.js";import{html as nr,LitElement as ar}from"lit";import{css as sr}from"lit";var Tt=sr`
2
2
  :host {
3
3
  display: block;
4
4
  }
5
- `;var j=class extends ar{render(){return nr`<slot name="qti-rubric-block"></slot><slot></slot>`}};j.styles=Tt,j=i([or("qti-item-body")],j);import{html as lr,LitElement as cr}from"lit";import{customElement as pr}from"lit/decorators.js";var Ce=class extends cr{render(){return lr`<slot></slot>`}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}};Ce=i([pr("qti-prompt")],Ce);import{LitElement as dr}from"lit";import{customElement as ur}from"lit/decorators.js";var _e=class extends dr{constructor(){super()}firstUpdated(e){super.firstUpdated(e);let t=this.closest("qti-assessment-item"),r=this.getAttribute("href");if(r!==null){let n=document.createElement("link");n.rel="stylesheet",n.type="text/css",n.media="screen",n.href=r,t.appendChild(n),this.styleLink=n}if(this.textContent!==null){let n=document.createElement("style");n.media="screen",n.textContent=this.textContent,t.appendChild(n),this.styleLink=n}}disconnectedCallback(){let e=this.closest("qti-assessment-item");if(this.styleLink&&this.styleLink.parentElement===this)try{e.removeChild(this.styleLink)}catch(t){console.log("could not remove stylesheet")}}};_e=i([ur("qti-stylesheet")],_e);import{consume as gr}from"@lit/context";import{css as br,html as vr}from"lit";import{customElement as yr,property as Te,state as xr}from"lit/decorators.js";import{html as mr,LitElement as hr}from"lit";import{customElement as fr}from"lit/decorators.js";var P=class extends hr{render(){return mr`<slot></slot>`}defaultValues(s){let e=Array.from(this.querySelectorAll("qti-default-value > qti-value"));if(e.length===0)return null;let t=e.map(r=>r.innerHTML);return t.length>1||s.cardinality==="multiple"||s.cardinality==="ordered"?t:t[0]}};P=i([fr("qti-variabledeclaration")],P);var L=class extends P{render(){var t,r;let e=(r=(t=this.itemContext)==null?void 0:t.variables.find(n=>n.identifier===this.identifier))==null?void 0:r.value;return vr`${JSON.stringify(e,null,2)}`}get interpolationTable(){let e=this.querySelector("qti-interpolation-table");if(e){let t=new Map;for(let r of e.querySelectorAll("qti-interpolation-table-entry")){!r.getAttribute("source-value")&&r.getAttribute("target-value")&&console.error("source-value or target-value is missing in qti-interpolation-table-entry");let n=parseInt(r.getAttribute("source-value")),o=parseInt(r.getAttribute("target-value"));(isNaN(n)||isNaN(o))&&console.error("source-value or target-value is not a number in qti-interpolation-table-entry"),t.set(n,o)}return t}return null}connectedCallback(){super.connectedCallback();let e={identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,type:"outcome",value:null,interpolationTable:this.interpolationTable};e.value=this.defaultValues(e),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:e}}))}};L.styles=[br`
5
+ `;var j=class extends ar{render(){return nr`<slot name="qti-rubric-block"></slot><slot></slot>`}};j.styles=Tt,j=i([or("qti-item-body")],j);import{html as lr,LitElement as cr}from"lit";import{customElement as pr}from"lit/decorators.js";var Ce=class extends cr{render(){return lr`<slot></slot>`}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}};Ce=i([pr("qti-prompt")],Ce);import{LitElement as dr}from"lit";import{customElement as ur}from"lit/decorators.js";var _e=class extends dr{constructor(){super()}firstUpdated(e){super.firstUpdated(e);let t=this.closest("qti-assessment-item"),r=this.getAttribute("href");if(r!==null){let o=document.createElement("link");o.rel="stylesheet",o.type="text/css",o.media="screen",o.href=r,t.appendChild(o),this.styleLink=o}if(this.textContent!==null){let o=document.createElement("style");o.media="screen",o.textContent=this.textContent,t.appendChild(o),this.styleLink=o}}disconnectedCallback(){let e=this.closest("qti-assessment-item");if(this.styleLink&&this.styleLink.parentElement===this)try{e.removeChild(this.styleLink)}catch(t){console.log("could not remove stylesheet")}}};_e=i([ur("qti-stylesheet")],_e);import{consume as gr}from"@lit/context";import{css as br,html as vr}from"lit";import{customElement as yr,property as Te,state as xr}from"lit/decorators.js";import{html as mr,LitElement as hr}from"lit";import{customElement as fr}from"lit/decorators.js";var P=class extends hr{render(){return mr`<slot></slot>`}defaultValues(s){let e=Array.from(this.querySelectorAll("qti-default-value > qti-value"));if(e.length===0)return null;let t=e.map(r=>r.innerHTML);return t.length>1||s.cardinality==="multiple"||s.cardinality==="ordered"?t:t[0]}};P=i([fr("qti-variabledeclaration")],P);var L=class extends P{render(){var t,r;let e=(r=(t=this.itemContext)==null?void 0:t.variables.find(o=>o.identifier===this.identifier))==null?void 0:r.value;return vr`${JSON.stringify(e,null,2)}`}get interpolationTable(){let e=this.querySelector("qti-interpolation-table");if(e){let t=new Map;for(let r of e.querySelectorAll("qti-interpolation-table-entry")){!r.getAttribute("source-value")&&r.getAttribute("target-value")&&console.error("source-value or target-value is missing in qti-interpolation-table-entry");let o=parseInt(r.getAttribute("source-value")),n=parseInt(r.getAttribute("target-value"));(isNaN(o)||isNaN(n))&&console.error("source-value or target-value is not a number in qti-interpolation-table-entry"),t.set(o,n)}return t}return null}connectedCallback(){super.connectedCallback();let e={identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,type:"outcome",value:null,interpolationTable:this.interpolationTable};e.value=this.defaultValues(e),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:e}}))}};L.styles=[br`
6
6
  :host {
7
7
  display: none;
8
8
  }
9
- `],i([Te({type:String,attribute:"base-type"})],L.prototype,"baseType",2),i([Te({type:String,attribute:"external-scored"})],L.prototype,"externalScored",2),i([Te({type:String})],L.prototype,"identifier",2),i([Te({type:String})],L.prototype,"cardinality",2),i([gr({context:A,subscribe:!0}),xr()],L.prototype,"itemContext",2),L=i([yr("qti-outcome-declaration")],L);import{consume as Er}from"@lit/context";import{css as qr,html as Cr}from"lit";import{customElement as _r,property as Ke,state as Tr}from"lit/decorators.js";var D=class extends P{render(){var t,r;let e=(r=(t=this.itemContext)==null?void 0:t.variables.find(n=>n.identifier===this.identifier))==null?void 0:r.value;return Cr`${JSON.stringify(e,null,2)}`}connectedCallback(){super.connectedCallback();let e={baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||"single",mapping:this.mapping,value:null,type:"response",candidateResponse:null};e.value=this.defaultValues(e),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:e}}))}get correctResponse(){let e,t=this.querySelector("qti-correct-response");if(t){let r=t.querySelectorAll("qti-value");if(this.cardinality==="single"&&r.length>0)e=r[0].textContent,r[0].remove();else if(this.cardinality!=="single"){e=[];for(let n=0;n<r.length;n++)e.push(r[n].textContent),r[n].remove()}}return e}get mapping(){return this.querySelector("qti-mapping")}};D.styles=[qr`
9
+ `],i([Te({type:String,attribute:"base-type"})],L.prototype,"baseType",2),i([Te({type:String,attribute:"external-scored"})],L.prototype,"externalScored",2),i([Te({type:String})],L.prototype,"identifier",2),i([Te({type:String})],L.prototype,"cardinality",2),i([gr({context:A,subscribe:!0}),xr()],L.prototype,"itemContext",2),L=i([yr("qti-outcome-declaration")],L);import{consume as Er}from"@lit/context";import{css as qr,html as Cr}from"lit";import{customElement as _r,property as Ke,state as Tr}from"lit/decorators.js";var D=class extends P{render(){var t,r;let e=(r=(t=this.itemContext)==null?void 0:t.variables.find(o=>o.identifier===this.identifier))==null?void 0:r.value;return Cr`${JSON.stringify(e,null,2)}`}connectedCallback(){super.connectedCallback();let e={baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||"single",mapping:this.mapping,value:null,type:"response",candidateResponse:null};e.value=this.defaultValues(e),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:e}}))}get correctResponse(){let e,t=this.querySelector("qti-correct-response");if(t){let r=t.querySelectorAll("qti-value");if(this.cardinality==="single"&&r.length>0)e=r[0].textContent,r[0].remove();else if(this.cardinality!=="single"){e=[];for(let o=0;o<r.length;o++)e.push(r[o].textContent),r[o].remove()}}return e}get mapping(){return this.querySelector("qti-mapping")}};D.styles=[qr`
10
10
  :host {
11
11
  display: none;
12
12
  }
13
- `],i([Ke({type:String,attribute:"base-type"})],D.prototype,"baseType",2),i([Ke({type:String})],D.prototype,"identifier",2),i([Ke({type:String})],D.prototype,"cardinality",2),i([Er({context:A,subscribe:!0}),Tr()],D.prototype,"itemContext",2),D=i([_r("qti-response-declaration")],D);import{LitElement as kr}from"lit";import{customElement as wr}from"lit/decorators.js";var ke=class extends kr{};ke=i([wr("qti-companion-materials-info")],ke);import{LitElement as Rr,html as Ar}from"lit";import{customElement as Lr}from"lit/decorators.js";var we=class extends Rr{render(){return Ar`<slot></slot>`}};we=i([Lr("qti-content-body")],we);import{LitElement as Mr,css as Sr,html as Nr}from"lit";import{customElement as Vr,property as Re}from"lit/decorators.js";var M=class extends Mr{handleclassNamesChange(e,t){this.classNames.split(" ").forEach(n=>{switch(n){case"qti-rubric-discretionary-placement":this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","");break;default:break}})}render(){return Nr`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-rubric-block")}};M.styles=Sr`
13
+ `],i([Ke({type:String,attribute:"base-type"})],D.prototype,"baseType",2),i([Ke({type:String})],D.prototype,"identifier",2),i([Ke({type:String})],D.prototype,"cardinality",2),i([Er({context:A,subscribe:!0}),Tr()],D.prototype,"itemContext",2),D=i([_r("qti-response-declaration")],D);import{LitElement as kr}from"lit";import{customElement as wr}from"lit/decorators.js";var ke=class extends kr{};ke=i([wr("qti-companion-materials-info")],ke);import{LitElement as Rr,html as Ar}from"lit";import{customElement as Lr}from"lit/decorators.js";var we=class extends Rr{render(){return Ar`<slot></slot>`}};we=i([Lr("qti-content-body")],we);import{LitElement as Mr,css as Sr,html as Nr}from"lit";import{customElement as Vr,property as Re}from"lit/decorators.js";var M=class extends Mr{handleclassNamesChange(e,t){this.classNames.split(" ").forEach(o=>{switch(o){case"qti-rubric-discretionary-placement":this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","");break;default:break}})}render(){return Nr`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-rubric-block")}};M.styles=Sr`
14
14
  :host {
15
15
  display: block;
16
16
  }
@@ -38,7 +38,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
38
38
  .off {
39
39
  display: none;
40
40
  }
41
- `,oe=i([Yr("qti-modal-feedback")],oe);import{css as Kr,html as zr}from"lit";import{ifDefined as Je}from"lit/directives/if-defined.js";import{property as We}from"lit/decorators.js";import{LitElement as jr}from"lit";var f=class extends jr{constructor(){super(...arguments);this.responseIdentifier="";this.disabled=!1;this.readonly=!1}set correctResponse(e){console.warn("correctResponse is not implemented")}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,cancelable:!1,composed:!0}))}saveResponse(e){this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,cancelable:!1,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:e}}))}};i([We({attribute:"response-identifier"})],f.prototype,"responseIdentifier",2),i([We({reflect:!0,type:Boolean})],f.prototype,"disabled",2),i([We({reflect:!0,type:Boolean})],f.prototype,"readonly",2);import{ref as Wr,createRef as Jr}from"lit/directives/ref.js";import{customElement as Zr,property as Le,state as Gr}from"lit/decorators.js";var S=class extends f{constructor(){super(...arguments);this.textareaRef=Jr();this._value=""}handleclassNamesChange(e,t){this.classNames.split(" ").forEach(n=>{if(n.startsWith("qti-height-lines")){let o=n.replace("qti-height-lines-","");this.textareaRef&&(this.textareaRef.value.rows=parseInt(o))}})}set response(e){this._value=e!==void 0?e:""}validate(){return this._value!==""}static get styles(){return[Kr`
41
+ `,oe=i([Yr("qti-modal-feedback")],oe);import{css as Kr,html as zr}from"lit";import{ifDefined as Je}from"lit/directives/if-defined.js";import{property as We}from"lit/decorators.js";import{LitElement as jr}from"lit";var f=class extends jr{constructor(){super(...arguments);this.responseIdentifier="";this.disabled=!1;this.readonly=!1}set correctResponse(e){console.warn("correctResponse is not implemented")}connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,cancelable:!1,composed:!0}))}saveResponse(e){this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,cancelable:!1,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:e}}))}};i([We({attribute:"response-identifier"})],f.prototype,"responseIdentifier",2),i([We({reflect:!0,type:Boolean})],f.prototype,"disabled",2),i([We({reflect:!0,type:Boolean})],f.prototype,"readonly",2);import{ref as Wr,createRef as Jr}from"lit/directives/ref.js";import{customElement as Zr,property as Le,state as Gr}from"lit/decorators.js";var S=class extends f{constructor(){super(...arguments);this.textareaRef=Jr();this._value=""}handleclassNamesChange(e,t){this.classNames.split(" ").forEach(o=>{if(o.startsWith("qti-height-lines")){let n=o.replace("qti-height-lines-","");this.textareaRef&&(this.textareaRef.value.rows=parseInt(n))}})}set response(e){this._value=e!==void 0?e:""}validate(){return this._value!==""}static get styles(){return[Kr`
42
42
  /* PK: display host as block, else design will be collapsed */
43
43
  :host {
44
44
  display: block;
@@ -63,7 +63,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
63
63
  ?disabled="${this.disabled}"
64
64
  ?readonly="${this.readonly}"
65
65
  .value=${this._value}
66
- ></textarea>`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this._value=t.value,this.saveResponse(t.value))}reset(){this._value=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};i([Le({type:Number,attribute:"expected-length"})],S.prototype,"expectedLength",2),i([Le({type:String,attribute:"pattern-mask"})],S.prototype,"patternMask",2),i([Le({type:String,attribute:"placeholder-text"})],S.prototype,"placeholderText",2),i([Gr()],S.prototype,"_value",2),i([Le({type:String,attribute:"class"})],S.prototype,"classNames",2),i([b("classNames",{waitUntilFirstUpdate:!0})],S.prototype,"handleclassNamesChange",1),S=i([Zr("qti-extended-text-interaction")],S);import{css as Qr,html as ei}from"lit";import{customElement as ti,property as Me,state as Ze}from"lit/decorators.js";import{ifDefined as wt}from"lit/directives/if-defined.js";import{createRef as ri}from"lit/directives/ref.js";function kt(l,s){let e,t=h({},s);return(r,n)=>{let{connectedCallback:o,disconnectedCallback:a}=r;r.connectedCallback=function(){var d;o.call(this);let c=m=>{let C=Array.from(this.querySelectorAll(l));for(let v of m){let X=Array.from(v.addedNodes).map($=>$),g=Array.from(v.addedNodes).map($=>$);v.type==="childList"&&X.find($=>C.includes($))&&this[n](X,g)}};e=new MutationObserver(c),e.observe(this,{childList:!0,subtree:!0});let p=(d=this.querySelectorAll(l))!=null?d:[];this[n](Array.from(p),[])},r.disconnectedCallback=function(){a.call(this),e.disconnect()}}}var k=class extends f{constructor(){super(...arguments);this._value="";this._correctValue="";this._size=5;this.inputRef=ri()}handleclassNamesChange(e,t){t.split(" ").forEach(n=>{if(n.startsWith("qti-input-width")){let o=n.replace("qti-input-width-","");this._size=parseInt(o)}})}set response(e){this._value=e!==void 0?e:""}validate(){return this._value!==""}static get styles(){return[Qr`
66
+ ></textarea>`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this._value=t.value,this.saveResponse(t.value))}reset(){this._value=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};i([Le({type:Number,attribute:"expected-length"})],S.prototype,"expectedLength",2),i([Le({type:String,attribute:"pattern-mask"})],S.prototype,"patternMask",2),i([Le({type:String,attribute:"placeholder-text"})],S.prototype,"placeholderText",2),i([Gr()],S.prototype,"_value",2),i([Le({type:String,attribute:"class"})],S.prototype,"classNames",2),i([b("classNames",{waitUntilFirstUpdate:!0})],S.prototype,"handleclassNamesChange",1),S=i([Zr("qti-extended-text-interaction")],S);import{css as Qr,html as ei}from"lit";import{customElement as ti,property as Me,state as Ze}from"lit/decorators.js";import{ifDefined as wt}from"lit/directives/if-defined.js";import{createRef as ri}from"lit/directives/ref.js";function kt(l,s){let e,t=h({},s);return(r,o)=>{let{connectedCallback:n,disconnectedCallback:a}=r;r.connectedCallback=function(){var d;n.call(this);let c=m=>{let C=Array.from(this.querySelectorAll(l));for(let v of m){let X=Array.from(v.addedNodes).map($=>$),g=Array.from(v.addedNodes).map($=>$);v.type==="childList"&&X.find($=>C.includes($))&&this[o](X,g)}};e=new MutationObserver(c),e.observe(this,{childList:!0,subtree:!0});let p=(d=this.querySelectorAll(l))!=null?d:[];this[o](Array.from(p),[])},r.disconnectedCallback=function(){a.call(this),e.disconnect()}}}var k=class extends f{constructor(){super(...arguments);this._value="";this._correctValue="";this._size=5;this.inputRef=ri()}handleclassNamesChange(e,t){t.split(" ").forEach(o=>{if(o.startsWith("qti-input-width")){let n=o.replace("qti-input-width-","");this._size=parseInt(n)}})}set response(e){this._value=e!==void 0?e:""}validate(){return this._value!==""}static get styles(){return[Qr`
67
67
  [part='correct'] {
68
68
  position: absolute;
69
69
  width: 100%;
@@ -85,7 +85,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
85
85
  ?disabled="${this.disabled}"
86
86
  ?readonly="${this.readonly}"
87
87
  />
88
- `}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this._value=t.value,this.saveResponse(t.value))}reset(){this._value=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};i([Me({type:Number,attribute:"expected-length"})],k.prototype,"expectedLength",2),i([Me({type:String,attribute:"pattern-mask"})],k.prototype,"patternMask",2),i([Me({type:String,attribute:"placeholder-text"})],k.prototype,"placeholderText",2),i([Ze()],k.prototype,"_value",2),i([Ze()],k.prototype,"_correctValue",2),i([Ze()],k.prototype,"_size",2),i([Me({type:String,attribute:"class"})],k.prototype,"classNames",2),i([b("classNames")],k.prototype,"handleclassNamesChange",1),k=i([ti("qti-text-entry-interaction")],k);import{html as ii}from"lit";import{customElement as si}from"lit/decorators.js";import{property as Rt}from"lit/decorators.js";var x=class extends f{constructor(){super();this._choiceElements=[];this.minChoices=0;this.maxChoices=1;this._handleDisabledChange=(e,t)=>this._choiceElements.forEach(r=>r.disabled=t);this._handleReadonlyChange=(e,t)=>this._choiceElements.forEach(r=>r.readonly=t);this._handleMaxChoicesChange=()=>this._determineInputType();this.addEventListener("qti-register-choice",this._registerChoiceElement),this.addEventListener("qti-loose-choice",this._looseChoiceElement)}validate(){return this._choiceElements.reduce((t,r)=>t+(r.checked?1:0),0)>=this.minChoices}set response(e){let t=Array.isArray(e)?e:[e];this._choiceElements.forEach(r=>{r.checked=!!t.find(n=>n===r.identifier)})}set correctResponse(e){let t=Array.isArray(e)?e:[e];if(e==""){this._choiceElements.forEach(r=>{r.removeAttribute("data-correct-response")});return}this._choiceElements.forEach(r=>{r.setAttribute("data-correct-response",t.find(n=>n===r.identifier)?"true":"false")})}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-choice-element-selected",this._choiceElementSelectedHandler)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-choice-element-selected",this._choiceElementSelectedHandler),this.removeEventListener("qti-register-choice",this._registerChoiceElement)}_registerChoiceElement(e){e.stopPropagation();let t=e.target;this._choiceElements.push(t),this._setInputType(t)}_looseChoiceElement(e){e.stopPropagation();let t=e.target;this._choiceElements.push(t),this._choiceElements=this._choiceElements.filter(r=>r!==t)}_determineInputType(){this._choiceElements.forEach(e=>{this._setInputType(e)})}_setInputType(e){this.maxChoices===1?e.setAttribute("role","radio"):e.setAttribute("role","checkbox")}_choiceElementSelectedHandler(e){this.maxChoices===1&&this._choiceElements.filter(t=>t.identifier!==e.detail.identifier).forEach(t=>{t.checked=!1}),this._choiceElementSelected()}_choiceElementSelected(){let e=this._choiceElements.filter(r=>r.checked).map(r=>r.identifier);this.maxChoices>1&&(this.maxChoices===e.length?this._choiceElements.forEach(r=>r.disabled=!r.checked):this._choiceElements.forEach(r=>r.disabled=!1));let t;this.maxChoices===1?t=e.length>0?e[0]:void 0:t=e,this.saveResponse(t)}};i([Rt({type:Number,attribute:"min-choices"})],x.prototype,"minChoices",2),i([Rt({type:Number,attribute:"max-choices"})],x.prototype,"maxChoices",2),i([b("disabled",{waitUntilFirstUpdate:!0})],x.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],x.prototype,"_handleReadonlyChange",2),i([b("maxChoices",{waitUntilFirstUpdate:!0})],x.prototype,"_handleMaxChoicesChange",2);var Se=class extends x{constructor(){super(...arguments);this.render=()=>ii`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("qti-hottext-interaction","")}};Se=i([si("qti-hottext-interaction")],Se);import{css as oi,html as At}from"lit";import{customElement as ni,property as ai,state as Lt}from"lit/decorators.js";import{unsafeHTML as Mt}from"lit/directives/unsafe-html.js";var O=class extends f{constructor(){super(...arguments);this.options=[];this.correctOption="";this.dataPrompt="select"}static get styles(){return[oi`
88
+ `}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this._value=t.value,this.saveResponse(t.value))}reset(){this._value=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};i([Me({type:Number,attribute:"expected-length"})],k.prototype,"expectedLength",2),i([Me({type:String,attribute:"pattern-mask"})],k.prototype,"patternMask",2),i([Me({type:String,attribute:"placeholder-text"})],k.prototype,"placeholderText",2),i([Ze()],k.prototype,"_value",2),i([Ze()],k.prototype,"_correctValue",2),i([Ze()],k.prototype,"_size",2),i([Me({type:String,attribute:"class"})],k.prototype,"classNames",2),i([b("classNames")],k.prototype,"handleclassNamesChange",1),k=i([ti("qti-text-entry-interaction")],k);import{html as ii}from"lit";import{customElement as si}from"lit/decorators.js";import{property as Rt}from"lit/decorators.js";var x=class extends f{constructor(){super();this._choiceElements=[];this.minChoices=0;this.maxChoices=1;this._handleDisabledChange=(e,t)=>this._choiceElements.forEach(r=>r.disabled=t);this._handleReadonlyChange=(e,t)=>this._choiceElements.forEach(r=>r.readonly=t);this._handleMaxChoicesChange=()=>this._determineInputType();this.addEventListener("qti-register-choice",this._registerChoiceElement),this.addEventListener("qti-loose-choice",this._looseChoiceElement)}validate(){return this._choiceElements.reduce((t,r)=>t+(r.checked?1:0),0)>=this.minChoices}set response(e){let t=Array.isArray(e)?e:[e];this._choiceElements.forEach(r=>{r.checked=!!t.find(o=>o===r.identifier)})}set correctResponse(e){let t=Array.isArray(e)?e:[e];if(e==""){this._choiceElements.forEach(r=>{r.removeAttribute("data-correct-response")});return}this._choiceElements.forEach(r=>{r.setAttribute("data-correct-response",t.find(o=>o===r.identifier)?"true":"false")})}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-choice-element-selected",this._choiceElementSelectedHandler)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-choice-element-selected",this._choiceElementSelectedHandler),this.removeEventListener("qti-register-choice",this._registerChoiceElement)}_registerChoiceElement(e){e.stopPropagation();let t=e.target;this._choiceElements.push(t),this._setInputType(t)}_looseChoiceElement(e){e.stopPropagation();let t=e.target;this._choiceElements.push(t),this._choiceElements=this._choiceElements.filter(r=>r!==t)}_determineInputType(){this._choiceElements.forEach(e=>{this._setInputType(e)})}_setInputType(e){this.maxChoices===1?e.setAttribute("role","radio"):e.setAttribute("role","checkbox")}_choiceElementSelectedHandler(e){this.maxChoices===1&&this._choiceElements.filter(t=>t.identifier!==e.detail.identifier).forEach(t=>{t.checked=!1}),this._choiceElementSelected()}_choiceElementSelected(){let e=this._choiceElements.filter(r=>r.checked).map(r=>r.identifier);this.maxChoices>1&&(this.maxChoices===e.length?this._choiceElements.forEach(r=>r.disabled=!r.checked):this._choiceElements.forEach(r=>r.disabled=!1));let t;this.maxChoices===1?t=e.length>0?e[0]:void 0:t=e,this.saveResponse(t)}};i([Rt({type:Number,attribute:"min-choices"})],x.prototype,"minChoices",2),i([Rt({type:Number,attribute:"max-choices"})],x.prototype,"maxChoices",2),i([b("disabled",{waitUntilFirstUpdate:!0})],x.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],x.prototype,"_handleReadonlyChange",2),i([b("maxChoices",{waitUntilFirstUpdate:!0})],x.prototype,"_handleMaxChoicesChange",2);var Se=class extends x{constructor(){super(...arguments);this.render=()=>ii`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("qti-hottext-interaction","")}};Se=i([si("qti-hottext-interaction")],Se);import{css as oi,html as At}from"lit";import{customElement as ni,property as ai,state as Lt}from"lit/decorators.js";import{unsafeHTML as Mt}from"lit/directives/unsafe-html.js";var O=class extends f{constructor(){super(...arguments);this.options=[];this.correctOption="";this.dataPrompt="select"}static get styles(){return[oi`
89
89
  :host {
90
90
  display: inline-block;
91
91
  }
@@ -156,19 +156,19 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
156
156
  :host {
157
157
  display: none;
158
158
  }
159
- `],F=i([fi("qti-response-processing")],F);import{property as yi}from"lit/decorators.js";import{customElement as gi}from"lit/decorators.js";import{html as bi,LitElement as vi}from"lit";var N=class extends vi{render(){return bi`<slot></slot>`}process(){throw new Error("Not implemented")}};N=i([gi("qti-rule")],N);var Ne=class extends N{get childExpression(){return this.firstElementChild}process(){let e=this.getAttribute("identifier"),t=this.closest("qti-assessment-item").getVariable(e),r;return t.interpolationTable&&(r=t.interpolationTable.get(parseInt(this.childExpression.calculate()))),r==null?(console.warn("lookupOutcomeValue: value is null or undefined"),0):(this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:this.identifier,value:re(r)}})),r)}};i([yi({type:String})],Ne.prototype,"identifier",2);customElements.define("qti-lookup-outcome-value",Ne);import{html as xi}from"lit";var Ge=class extends N{render(){return xi`<slot></slot>`}process(){let s=[...this.children];for(let e=0;e<s.length;e++){let t=s[e];if(t.calculate()){t.process();return}}}};customElements.define("qti-response-condition",Ge);var Qe=class extends N{process(){let s=this.getAttribute("identifier"),e=this.firstElementChild,r=new et(e).process();this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:s,value:Array.isArray(r)?r.map(n=>re(n)):re(r)}}))}},et=class{constructor(s){this.expression=s}process(){let s=this.expression?this.expression.calculate():null;if(s==null){console.warn("setOutcomeValue: value is null or undefined");return}return s}};customElements.define("qti-set-outcome-value",Qe);import{LitElement as Ei,html as qi}from"lit";var ne=class extends Ei{render(){return qi`<slot></slot>`}calculate(){return!0}getSubRules(){return[...this.children]}process(){let s=this.getSubRules();for(let e=0;e<s.length;e++)s[e].process()}};customElements.define("qti-response-else",ne);import{html as Ci}from"lit";var ae=class extends ne{calculate(){return this.firstElementChild.calculate()}getSubRules(){let s=[];for(let e=1;e<this.children.length;e++)s.push(this.children[e]);return s}};customElements.define("qti-response-if",ae);var tt=class extends ae{render(){return Ci`${super.render()}`}};customElements.define("qti-response-else-if",tt);import{LitElement as _i,css as Ti,html as ki}from"lit";import{state as wi}from"lit/decorators.js";var u=class extends _i{constructor(){super(...arguments);this.getVariables=()=>Array.from(this.children).map(e=>{switch(e.tagName.toLowerCase()){case"qti-base-value":return{baseType:e.getAttribute("base-type"),value:e.textContent,cardinality:"single"};case"qti-variable":{let t=e.getAttribute("identifier")||"";return this.assessmentItem.getVariable(t)}case"qti-multiple":{let r=e.getResult();return r.length>0?{identifier:"",baseType:r[0].baseType,value:r.map(n=>n.value),cardinality:"multiple",type:"response"}:null}case"qti-correct":{let t=e.getAttribute("identifier")||"",r=this.assessmentItem.getResponse(t);return{baseType:r.baseType,value:r.correctResponse,cardinality:r.cardinality}}default:{try{return{baseType:"integer",value:e.getResult().toString(),cardinality:"single"}}catch(t){console.warn("default not sufficient")}return null}}}).filter(e=>e!==null)}render(){return ki`<pre>${JSON.stringify(this.result,null,2)}</pre>
159
+ `],F=i([fi("qti-response-processing")],F);import{property as yi}from"lit/decorators.js";import{customElement as gi}from"lit/decorators.js";import{html as bi,LitElement as vi}from"lit";var N=class extends vi{render(){return bi`<slot></slot>`}process(){throw new Error("Not implemented")}};N=i([gi("qti-rule")],N);var Ne=class extends N{get childExpression(){return this.firstElementChild}process(){let e=this.getAttribute("identifier"),t=this.closest("qti-assessment-item").getVariable(e),r;return t.interpolationTable&&(r=t.interpolationTable.get(parseInt(this.childExpression.calculate()))),r==null?(console.warn("lookupOutcomeValue: value is null or undefined"),0):(this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:this.identifier,value:re(r)}})),r)}};i([yi({type:String})],Ne.prototype,"identifier",2);customElements.define("qti-lookup-outcome-value",Ne);import{html as xi}from"lit";var Ge=class extends N{render(){return xi`<slot></slot>`}process(){let s=[...this.children];for(let e=0;e<s.length;e++){let t=s[e];if(t.calculate()){t.process();return}}}};customElements.define("qti-response-condition",Ge);var Qe=class extends N{process(){let s=this.getAttribute("identifier"),e=this.firstElementChild,r=new et(e).process();this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:s,value:Array.isArray(r)?r.map(o=>re(o)):re(r)}}))}},et=class{constructor(s){this.expression=s}process(){let s=this.expression?this.expression.calculate():null;if(s==null){console.warn("setOutcomeValue: value is null or undefined");return}return s}};customElements.define("qti-set-outcome-value",Qe);import{LitElement as Ei,html as qi}from"lit";var ne=class extends Ei{render(){return qi`<slot></slot>`}calculate(){return!0}getSubRules(){return[...this.children]}process(){let s=this.getSubRules();for(let e=0;e<s.length;e++)s[e].process()}};customElements.define("qti-response-else",ne);import{html as Ci}from"lit";var ae=class extends ne{calculate(){return this.firstElementChild.calculate()}getSubRules(){let s=[];for(let e=1;e<this.children.length;e++)s.push(this.children[e]);return s}};customElements.define("qti-response-if",ae);var tt=class extends ae{render(){return Ci`${super.render()}`}};customElements.define("qti-response-else-if",tt);import{LitElement as _i,css as Ti,html as ki}from"lit";import{state as wi}from"lit/decorators.js";var u=class extends _i{constructor(){super(...arguments);this.getVariables=()=>Array.from(this.children).map(e=>{switch(e.tagName.toLowerCase()){case"qti-base-value":return{baseType:e.getAttribute("base-type"),value:e.textContent,cardinality:"single"};case"qti-variable":{let t=e.getAttribute("identifier")||"";return this.assessmentItem.getVariable(t)}case"qti-multiple":{let r=e.getResult();return r.length>0?{identifier:"",baseType:r[0].baseType,value:r.map(o=>o.value),cardinality:"multiple",type:"response"}:null}case"qti-correct":{let t=e.getAttribute("identifier")||"",r=this.assessmentItem.getResponse(t);return{baseType:r.baseType,value:r.correctResponse,cardinality:r.cardinality}}default:{try{return{baseType:"integer",value:e.getResult().toString(),cardinality:"single"}}catch(t){console.warn("default not sufficient")}return null}}}).filter(e=>e!==null)}render(){return ki`<pre>${JSON.stringify(this.result,null,2)}</pre>
160
160
  <slot></slot>`}calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}get assessmentItem(){return this.closest("qti-assessment-item")}};u.styles=Ti`
161
161
  slot {
162
162
  display: none;
163
163
  }
164
- `,i([wi()],u.prototype,"result",2);var w=class extends u{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var Ve=class extends Ri(w){calculate(){return this.calculateChildren(Array.from(this.children))}};function Ri(l){return class extends l{calculateChildren(e){return e.map(r=>{let n=r;if(!n.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let o=n.calculate();if(typeof o=="string")if(o==="true")o=!0;else if(o==="false")o=!1;else return console.error("unexpected value in qti-and, expected boolean"),null;return o}).every(r=>typeof r=="boolean"&&r)}}}customElements.define("qti-and",Ve);import{property as Ai}from"lit/decorators.js";var He=class extends u{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent}};i([Ai({type:String,attribute:"base-type"})],He.prototype,"baseType",2);customElements.define("qti-base-value",He);var rt=class extends w{getResult(){let s=this.getVariables();if(this.children.length===2){let e=s[0],t=s[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let r=e.value,n=t.value;return r.filter(c=>n.includes(c)).length>0}else if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="single"){let r=e.value;return t.value.includes(r)}else console.error("unsupported baseType or cardinality in qti contains, only baseType: directedPair and cardinality: multiple is supported")}else console.error("unexpected number of children in qti contains");return!1}};customElements.define("qti-contains",rt);var it=class extends u{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let s=this.getAttribute("identifier")||"",e=this.closest("qti-assessment-item").getResponse(s);return e.correctResponse,e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",it);import{property as Li}from"lit/decorators.js";var $e=class extends u{constructor(){super(...arguments);this.roundingMode="significantFigures"}get figures(){if(!this.getAttribute("figures"))return console.error("figures attribute is missing"),null;let t=parseInt(this.getAttribute("figures")||"0");return isNaN(t)?(console.error("figures attribute is not a number"),null):t<0?(console.error("figures attribute is negative"),null):t<1&&this.roundingMode==="significantFigures"?(console.error("figures cannot be smaller than 1 for RoundingMode significantFigures"),null):t}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(this.roundingMode===null)return null;if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti equal"),!1;switch(e[0].baseType){case"integer":case"float":{let n=parseFloat(t.value),o=parseFloat(r.value);if(!isNaN(n)&&!isNaN(o))return this.roundingMode==="significantFigures"?n.toPrecision(this.figures)===o.toPrecision(this.figures):Math.round(n*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(o*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${n}, ${o}`);break}default:{console.error("values other than float and int cannot be used in equalRounded operator.");break}}return!1}return console.error("unexpected number of children in qti-equal-rounded"),null}};i([Li({type:String})],$e.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",$e);import{property as Mi}from"lit/decorators.js";var R=class{static compareSingleValues(s,e,t){switch(t){case"identifier":case"string":return s===e;case"integer":{let r=parseInt(s,10),n=parseInt(e,10);if(!isNaN(r)&&!isNaN(n))return r===n;console.error(`Cannot convert ${s} and/or ${e} to int.`);break}case"float":{let r=parseFloat(s),n=parseFloat(e);if(!isNaN(r)&&!isNaN(n))return r===n;console.error(`couldn't convert ${s} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=s.split(" ").sort(),n=e.split(" ").sort();if(r.length===2&&n.length===2)return t==="pair"&&(r.sort(),n.sort()),r.join(" ")===n.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${s} 2: ${e}`);break}}return!1}};var De=class extends u{constructor(){super(...arguments);this.toleranceMode="exact"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];return this.toleranceMode!=="exact"?(console.error("toleranceMode is not supported yet"),!1):t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value)?(console.error("unexpected cardinality in qti equal"),!1):R.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};i([Mi({type:String})],De.prototype,"toleranceMode",2);customElements.define("qti-equal",De);var st=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value>+t.value;console.error("unexpected baseType or cardinality in qti gt")}return console.error("unexpected number of children in qt"),null}};customElements.define("qti-gt",st);var ot=class extends w{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value>=+t.value:(console.error("unexpected baseType or cardinality in qti gte"),null)}return console.log("unexpected number of children in qte"),null}};customElements.define("qti-gte",ot);var nt=class extends u{getResult(){if(this.children.length===1){let s=this.getVariables();if(!s)return!0;let e=s[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",nt);var at=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value<+t.value;console.error("unexpected baseType or cardinality in qti lt")}return console.error("unexpected number of children in lt"),null}};customElements.define("qti-lt",at);var lt=class extends w{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value<=+t.value:(console.error("unexpected baseType or cardinality in qti lte"),null)}return console.log("unexpected number of children in lte"),null}};customElements.define("qti-lte",lt);import{property as Si}from"lit/decorators.js";var Pe=class extends u{getResult(){let e=this.assessmentItem.getResponse(this.identifier);if(!e)return console.warn(`Response ${this.identifier} can not be found`),null;let t=e.mapping,r=Array.isArray(e.value)?e.value:[e.value],n=0;for(let o of r){let a=t.mapEntries.find(c=>R.compareSingleValues(c.mapKey,o,e.baseType));a==null||a.mappedValue==null?n+=t.defaultValue:n+=a.mappedValue}return t.lowerBound!=null&&(n=Math.max(t.lowerBound,n)),t.upperBound!=null&&(n=Math.min(t.upperBound,n)),n}};i([Si({type:String})],Pe.prototype,"identifier",2);customElements.define("qti-map-response",Pe);import{property as ct}from"lit/decorators.js";import{LitElement as Ni}from"lit";var z=class extends Ni{constructor(){super(...arguments);this.defaultValue=0}get mapEntries(){return Array.from(this.querySelectorAll("qti-map-entry")).map(e=>({mapKey:e.getAttribute("map-key"),mappedValue:+e.getAttribute("mapped-value")}))}};i([ct({attribute:"default-value",type:Number})],z.prototype,"defaultValue",2),i([ct({attribute:"lower-bound",type:Number})],z.prototype,"lowerBound",2),i([ct({attribute:"upper-bound",type:Number})],z.prototype,"upperBound",2);customElements.define("qti-mapping",z);var pt=class l extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return l.match(e,t)}return console.error("unexpected number of children in match"),null}static match(s,e){var t;if(e.cardinality==="single")return s.value===null?!1:Array.isArray(s.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):R.compareSingleValues((t=s.value)==null?void 0:t.toString(),e.value.toString(),e.baseType);{if(!Array.isArray(s.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(s.value.length!==e.value.length)return!1;let r=0;for(let n of e.value){if(e.cardinality==="ordered"){let o=s[r];if(!R.compareSingleValues(n,o,e.baseType))return!1}else{let o=null;for(let a of s.value)if(R.compareSingleValues(n,a,e.baseType)){o=a;break}if(o!==null)s.value.splice(s.value.indexOf(o),1);else return!1}r++}return!0}}};customElements.define("qti-match",pt);var dt=class extends u{getResult(){let s=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=s;if(e.baseType!==t.baseType&&console.warn("Which must both have the same base-type"),t.cardinality==="multiple"||t.cardinality==="ordered"||console.warn("and the second must be a multiple or ordered container"),(e.baseType==="float"||t.baseType==="float")&&console.warn("The member operator should not be used on sub-expressions with a base-type of float"),(e.baseType==="duration"||t.baseType==="duration")&&console.warn("It must not be used on sub-expressions with a base-type of duration"),e.value===null||t.value===null)return null;let r=e.value;return t.value.includes(r)}};customElements.define("qti-member",dt);var ut=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return s}};customElements.define("qti-multiple",ut);import{html as Vi}from"lit";var mt=class extends u{render(){return Vi`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",mt);var ht=class extends w{getResult(){return Array.from(this.children).map(e=>{let t=e;if(!t.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let r=t.calculate();if(typeof r=="string")if(r==="true")r=!0;else if(r==="false")r=!1;else return console.error("unexpected value in qti-or, expected boolean"),null;return r}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",ht);var ft=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return s}};customElements.define("qti-ordered",ft);import{consume as Hi}from"@lit/context";import{LitElement as $i,html as Di}from"lit";import{property as Pi,state as Oi}from"lit/decorators.js";var le=class extends $i{render(){var t,r;let e=(r=(t=this.itemContext)==null?void 0:t.variables.find(n=>n.identifier===this.identifier))==null?void 0:r.value;return Di`${JSON.stringify(e,null,2)}`}calculate(){let e=this.closest("qti-assessment-item"),t=this.identifier;return e.getVariable(t).value}};i([Pi({type:String})],le.prototype,"identifier",2),i([Hi({context:A,subscribe:!0}),Oi()],le.prototype,"itemContext",2);customElements.define("qti-printed-variable",le);var gt=class extends u{getResult(){return this.getVariables().reduce((t,r)=>{if(r.baseType=="float"||r.baseType=="integer")try{return t*parseInt(r.value.toString())}catch(n){console.warn("can not convert to number")}else console.warn(`has another baseType ${r.baseType}`);return t},1)}};customElements.define("qti-product",gt);import{property as Ui}from"lit/decorators.js";var Oe=class extends u{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti string-match"),!1;let n=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),o=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return R.compareSingleValues(n,o,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};i([Ui({type:String,attribute:"case-sensitive"})],Oe.prototype,"caseSensitive",2);customElements.define("qti-string-match",Oe);var bt=class extends u{constructor(){super();this._expression=new vt(Array.from(this.children))}getResult(){return this._expression.calculate()}},vt=class{constructor(s){this.expressions=s}calculate(){return this.expressions.map(e=>{if(!e.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let t=e.calculate();return Number.isNaN(t)?(console.error("unexpected value in qti-sum, expected number"),null):Number(t)}).reduce((e,t)=>e+t,0)}};customElements.define("qti-sum",bt);var yt=class extends u{getResult(){let s=this.getAttribute("identifier");return this.closest("qti-assessment-item").getVariable(s).value}};customElements.define("qti-variable",yt);import{css as Fi,html as Ii,LitElement as Bi}from"lit";import{customElement as Xi}from"lit/decorators.js";var ce=class extends Bi{render(){return Ii`<slot></slot>`}process(){let s=new xt,e=[...this.children];s.process(e)}};ce.styles=[Fi`
164
+ `,i([wi()],u.prototype,"result",2);var w=class extends u{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var Ve=class extends Ri(w){calculate(){return this.calculateChildren(Array.from(this.children))}};function Ri(l){return class extends l{calculateChildren(e){return e.map(r=>{let o=r;if(!o.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let n=o.calculate();if(typeof n=="string")if(n==="true")n=!0;else if(n==="false")n=!1;else return console.error("unexpected value in qti-and, expected boolean"),null;return n}).every(r=>typeof r=="boolean"&&r)}}}customElements.define("qti-and",Ve);import{property as Ai}from"lit/decorators.js";var He=class extends u{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent}};i([Ai({type:String,attribute:"base-type"})],He.prototype,"baseType",2);customElements.define("qti-base-value",He);var rt=class extends w{getResult(){let s=this.getVariables();if(this.children.length===2){let e=s[0],t=s[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let r=e.value,o=t.value;return r.filter(c=>o.includes(c)).length>0}else if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="single"){let r=e.value;return t.value.includes(r)}else console.error("unsupported baseType or cardinality in qti contains, only baseType: directedPair and cardinality: multiple is supported")}else console.error("unexpected number of children in qti contains");return!1}};customElements.define("qti-contains",rt);var it=class extends u{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let s=this.getAttribute("identifier")||"",e=this.closest("qti-assessment-item").getResponse(s);return e.correctResponse,e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",it);import{property as Li}from"lit/decorators.js";var $e=class extends u{constructor(){super(...arguments);this.roundingMode="significantFigures"}get figures(){if(!this.getAttribute("figures"))return console.error("figures attribute is missing"),null;let t=parseInt(this.getAttribute("figures")||"0");return isNaN(t)?(console.error("figures attribute is not a number"),null):t<0?(console.error("figures attribute is negative"),null):t<1&&this.roundingMode==="significantFigures"?(console.error("figures cannot be smaller than 1 for RoundingMode significantFigures"),null):t}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(this.roundingMode===null)return null;if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti equal"),!1;switch(e[0].baseType){case"integer":case"float":{let o=parseFloat(t.value),n=parseFloat(r.value);if(!isNaN(o)&&!isNaN(n))return this.roundingMode==="significantFigures"?o.toPrecision(this.figures)===n.toPrecision(this.figures):Math.round(o*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(n*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${o}, ${n}`);break}default:{console.error("values other than float and int cannot be used in equalRounded operator.");break}}return!1}return console.error("unexpected number of children in qti-equal-rounded"),null}};i([Li({type:String})],$e.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",$e);import{property as Mi}from"lit/decorators.js";var R=class{static compareSingleValues(s,e,t){switch(t){case"identifier":case"string":return s===e;case"integer":{let r=parseInt(s,10),o=parseInt(e,10);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`Cannot convert ${s} and/or ${e} to int.`);break}case"float":{let r=parseFloat(s),o=parseFloat(e);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`couldn't convert ${s} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=s.split(" ").sort(),o=e.split(" ").sort();if(r.length===2&&o.length===2)return t==="pair"&&(r.sort(),o.sort()),r.join(" ")===o.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${s} 2: ${e}`);break}}return!1}};var De=class extends u{constructor(){super(...arguments);this.toleranceMode="exact"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];return this.toleranceMode!=="exact"?(console.error("toleranceMode is not supported yet"),!1):t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value)?(console.error("unexpected cardinality in qti equal"),!1):R.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};i([Mi({type:String})],De.prototype,"toleranceMode",2);customElements.define("qti-equal",De);var st=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value>+t.value;console.error("unexpected baseType or cardinality in qti gt")}return console.error("unexpected number of children in qt"),null}};customElements.define("qti-gt",st);var ot=class extends w{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value>=+t.value:(console.error("unexpected baseType or cardinality in qti gte"),null)}return console.log("unexpected number of children in qte"),null}};customElements.define("qti-gte",ot);var nt=class extends u{getResult(){if(this.children.length===1){let s=this.getVariables();if(!s)return!0;let e=s[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",nt);var at=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value<+t.value;console.error("unexpected baseType or cardinality in qti lt")}return console.error("unexpected number of children in lt"),null}};customElements.define("qti-lt",at);var lt=class extends w{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value<=+t.value:(console.error("unexpected baseType or cardinality in qti lte"),null)}return console.log("unexpected number of children in lte"),null}};customElements.define("qti-lte",lt);import{property as Si}from"lit/decorators.js";var Pe=class extends u{getResult(){let e=this.assessmentItem.getResponse(this.identifier);if(!e)return console.warn(`Response ${this.identifier} can not be found`),null;let t=e.mapping,r=Array.isArray(e.value)?e.value:[e.value],o=0;for(let n of r){let a=t.mapEntries.find(c=>R.compareSingleValues(c.mapKey,n,e.baseType));a==null||a.mappedValue==null?o+=t.defaultValue:o+=a.mappedValue}return t.lowerBound!=null&&(o=Math.max(t.lowerBound,o)),t.upperBound!=null&&(o=Math.min(t.upperBound,o)),o}};i([Si({type:String})],Pe.prototype,"identifier",2);customElements.define("qti-map-response",Pe);import{property as ct}from"lit/decorators.js";import{LitElement as Ni}from"lit";var z=class extends Ni{constructor(){super(...arguments);this.defaultValue=0}get mapEntries(){return Array.from(this.querySelectorAll("qti-map-entry")).map(e=>({mapKey:e.getAttribute("map-key"),mappedValue:+e.getAttribute("mapped-value")}))}};i([ct({attribute:"default-value",type:Number})],z.prototype,"defaultValue",2),i([ct({attribute:"lower-bound",type:Number})],z.prototype,"lowerBound",2),i([ct({attribute:"upper-bound",type:Number})],z.prototype,"upperBound",2);customElements.define("qti-mapping",z);var pt=class l extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return l.match(e,t)}return console.error("unexpected number of children in match"),null}static match(s,e){var t;if(e.cardinality==="single")return s.value===null?!1:Array.isArray(s.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):R.compareSingleValues((t=s.value)==null?void 0:t.toString(),e.value.toString(),e.baseType);{if(!Array.isArray(s.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(s.value.length!==e.value.length)return!1;let r=0;for(let o of e.value){if(e.cardinality==="ordered"){let n=s[r];if(!R.compareSingleValues(o,n,e.baseType))return!1}else{let n=null;for(let a of s.value)if(R.compareSingleValues(o,a,e.baseType)){n=a;break}if(n!==null)s.value.splice(s.value.indexOf(n),1);else return!1}r++}return!0}}};customElements.define("qti-match",pt);var dt=class extends u{getResult(){let s=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=s;if(e.baseType!==t.baseType&&console.warn("Which must both have the same base-type"),t.cardinality==="multiple"||t.cardinality==="ordered"||console.warn("and the second must be a multiple or ordered container"),(e.baseType==="float"||t.baseType==="float")&&console.warn("The member operator should not be used on sub-expressions with a base-type of float"),(e.baseType==="duration"||t.baseType==="duration")&&console.warn("It must not be used on sub-expressions with a base-type of duration"),e.value===null||t.value===null)return null;let r=e.value;return t.value.includes(r)}};customElements.define("qti-member",dt);var ut=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return s}};customElements.define("qti-multiple",ut);import{html as Vi}from"lit";var mt=class extends u{render(){return Vi`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",mt);var ht=class extends w{getResult(){return Array.from(this.children).map(e=>{let t=e;if(!t.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let r=t.calculate();if(typeof r=="string")if(r==="true")r=!0;else if(r==="false")r=!1;else return console.error("unexpected value in qti-or, expected boolean"),null;return r}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",ht);var ft=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return s}};customElements.define("qti-ordered",ft);import{consume as Hi}from"@lit/context";import{LitElement as $i,html as Di}from"lit";import{property as Pi,state as Oi}from"lit/decorators.js";var le=class extends $i{render(){var t,r;let e=(r=(t=this.itemContext)==null?void 0:t.variables.find(o=>o.identifier===this.identifier))==null?void 0:r.value;return Di`${JSON.stringify(e,null,2)}`}calculate(){let e=this.closest("qti-assessment-item"),t=this.identifier;return e.getVariable(t).value}};i([Pi({type:String})],le.prototype,"identifier",2),i([Hi({context:A,subscribe:!0}),Oi()],le.prototype,"itemContext",2);customElements.define("qti-printed-variable",le);var gt=class extends u{getResult(){return this.getVariables().reduce((t,r)=>{if(r.baseType=="float"||r.baseType=="integer")try{return t*parseInt(r.value.toString())}catch(o){console.warn("can not convert to number")}else console.warn(`has another baseType ${r.baseType}`);return t},1)}};customElements.define("qti-product",gt);import{property as Ui}from"lit/decorators.js";var Oe=class extends u{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti string-match"),!1;let o=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),n=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return R.compareSingleValues(o,n,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};i([Ui({type:String,attribute:"case-sensitive"})],Oe.prototype,"caseSensitive",2);customElements.define("qti-string-match",Oe);var bt=class extends u{constructor(){super();this._expression=new vt(Array.from(this.children))}getResult(){return this._expression.calculate()}},vt=class{constructor(s){this.expressions=s}calculate(){return this.expressions.map(e=>{if(!e.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let t=e.calculate();return Number.isNaN(t)?(console.error("unexpected value in qti-sum, expected number"),null):Number(t)}).reduce((e,t)=>e+t,0)}};customElements.define("qti-sum",bt);var yt=class extends u{getResult(){let s=this.getAttribute("identifier");return this.closest("qti-assessment-item").getVariable(s).value}};customElements.define("qti-variable",yt);import{css as Fi,html as Ii,LitElement as Bi}from"lit";import{customElement as Xi}from"lit/decorators.js";var ce=class extends Bi{render(){return Ii`<slot></slot>`}process(){let s=new xt,e=[...this.children];s.process(e)}};ce.styles=[Fi`
165
165
  :host {
166
166
  display: none;
167
167
  }
168
- `],ce=i([Xi("qti-outcome-processing")],ce);var xt=class{process(s){for(let e of s)e.process()}};import{html as $t}from"lit";import{customElement as Yi}from"lit/decorators.js";var Ue=class extends f{constructor(){super(...arguments);this._errorMessage=null;this.loadConfig=async(e,t)=>{e=this.removeDoubleSlashes(e);try{let r=await fetch(e);if(r.ok){let o=await r.json();for(let a in o.paths)t&&(o.paths[a]=this.removeDoubleSlashes(`${t}/${o.paths[a]}`));return o}}catch(r){}return null};this.mergeConfigs=async(e,t,r)=>{var n;for(let o in t==null?void 0:t.paths)if(!e.paths[o]){let a=!1;try{let c=(n=t.paths[o])!=null&&n.toLocaleLowerCase().endsWith(".js")?t.paths[o]:t.paths[o]+".js";(await fetch(c)).ok?e.paths[o]=t.paths[o].replace(/\.js$/,""):a=!0}catch(c){a=!0}if(a&&r)if(typeof r=="string")try{let c=await this.loadConfig(r);c!=null&&c.paths[o]&&(e.paths[o]=c.paths[o].replace(/\.js$/,""))}catch(c){}else typeof r=="object"&&r!=null&&r.paths[o]&&(e.paths[o]=r.paths[o].replace(/\.js$/,""));else a&&console.error("Failed to resolve module: "+o)}}}static get properties(){return{responseIdentifier:{type:String,attribute:"response-identifier"},module:{type:String,attribute:"module"},customInteractionTypeIdentifier:{type:String,attribute:"custom-interaction-type-identifier"},_errorMessage:{type:String,state:!0}}}convertQtiVariableJSON(e){for(let t in e)if(e.hasOwnProperty(t)){let r=e[t];if(r){for(let n in r)if(r.hasOwnProperty(n)){let o=r[n];if(Array.isArray(o))return o.map(String);if(o!=null)return String(o)}}}return null}startChecking(){this.intervalId=setInterval(()=>{let e=this.pci.getResponse(),t=this.pci.getResponse(),r=JSON.stringify(e);if(r!==this.rawResponse){this.rawResponse=r;let n=this.convertQtiVariableJSON(t);this.response=n,this.saveResponse(n)}},200)}stopChecking(){this.intervalId!==void 0&&clearInterval(this.intervalId)}validate(){return!0}set response(e){}getTAOConfig(e){let t=e.querySelectorAll("properties"),r={},n=a=>{let c={},p=a.getAttribute("key");if(p){let d=Array.from(a.children),m=d.map(v=>v.getAttribute("key"));m.length>0&&!m.find(v=>!Number.isInteger(+v))?c[p]=d.map(v=>o(v)):c[p]=a.textContent}return c},o=a=>{if(a){let c={};for(let p of a.children)c=h(h({},c),n(p));return c}};for(let a of t)return a.getAttribute("key")||(r=h(h({},r),o(a))),r;return console.log("Can not find qti-custom-interaction config"),null}register(e){this.pci=e;let t=this.parentElement.tagName==="QTI-CUSTOM-INTERACTION"?"TAO":"IMS",r=t=="IMS"?this.querySelector("qti-interaction-markup"):this.querySelector("markup");r.classList.add("qti-customInteraction"),t=="TAO"&&this.querySelector("properties")&&(this.querySelector("properties").style.display="none");let n=t=="IMS"?{properties:this.dataset,onready:()=>{console.log("onready")}}:this.getTAOConfig(this);t=="IMS"?e.getInstance(r,n,void 0):e.initialize(this.customInteractionTypeIdentifier,r.firstElementChild,n),t=="TAO"&&Array.from(this.querySelectorAll("link")).map(a=>a.getAttribute("href")).forEach(a=>{let c=document.createElement("link");c.rel="stylesheet",c.type="text/css",c.media="screen",c.href=a,r.appendChild(c)}),this.startChecking()}connectedCallback(){super.connectedCallback();let e={context:this.customInteractionTypeIdentifier,catchError:!0,paths:{}};if(window.requirePaths&&window.requireShim&&(e.paths=window.requirePaths,e.shim=window.requireShim),!globalThis.require){this._errorMessage="requirejs not found, load with cdn: https://cdnjs.com/libraries/require.js";return}this.registerModules(e).then(()=>{requirejs.config(e)(["require"],r=>{!r.defined("qtiCustomInteractionContext")&&define("qtiCustomInteractionContext",()=>({register:o=>{this.register(o)},notifyReady:()=>{}}));let n=r.defined(this.module);r([this.module],o=>{n&&this.register(o)},o=>{this._errorMessage=o})},r=>{this._errorMessage=r})})}disconnectedCallback(){super.disconnectedCallback(),this.stopChecking()}async registerModules(e){let t=this.getAttribute("data-base-url");if(t){let n=`${t}/modules/module_resolution.js`,o=`${t}/modules/module_resolution_fallback.js`;if(n){let a=await this.loadConfig(n,t);await this.mergeConfigs(e,a,o)}}let r=this.querySelector("qti-interaction-modules");if(r){let n=r.querySelectorAll("qti-interaction-module");for(let o of n){let a=o.getAttribute("id"),c=o.getAttribute("primary-path"),p=o.getAttribute("fallback-path"),d=c?{paths:y(h({},e.paths),{[a]:c})}:null,m=p?{paths:y(h({},e.paths),{[a]:p})}:null;a&&d&&await this.mergeConfigs(e,d,m)}}}removeDoubleSlashes(e){return e.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}render(){return $t`<slot></slot>${this._errorMessage&&$t`<div style="color:red">
168
+ `],ce=i([Xi("qti-outcome-processing")],ce);var xt=class{process(s){for(let e of s)e.process()}};import{html as $t}from"lit";import{customElement as Yi}from"lit/decorators.js";var Ue=class extends f{constructor(){super(...arguments);this._errorMessage=null;this.loadConfig=async(e,t)=>{var r;e=this.removeDoubleSlashes(e);try{let o=await fetch(e);if(o.ok){let a=await o.json();for(let c in a.paths)t&&(a.paths[c]=(r=a.paths[c])!=null&&r.toLocaleLowerCase().startsWith("http")?a.paths[c]:this.removeDoubleSlashes(`${t}/${a.paths[c]}`));return a}}catch(o){}return null};this.mergeConfigs=async(e,t,r)=>{var o;for(let n in t==null?void 0:t.paths)if(!e.paths[n]){let a=!1;try{let c=(o=t.paths[n])!=null&&o.toLocaleLowerCase().endsWith(".js")?t.paths[n]:t.paths[n]+".js";(await fetch(c)).ok?e.paths[n]=t.paths[n].replace(/\.js$/,""):a=!0}catch(c){a=!0}if(a&&r)if(typeof r=="string")try{let c=await this.loadConfig(r);c!=null&&c.paths[n]&&(e.paths[n]=c.paths[n].replace(/\.js$/,""))}catch(c){}else typeof r=="object"&&r!=null&&r.paths[n]&&(e.paths[n]=r.paths[n].replace(/\.js$/,""));else a&&console.error("Failed to resolve module: "+n)}}}static get properties(){return{responseIdentifier:{type:String,attribute:"response-identifier"},module:{type:String,attribute:"module"},customInteractionTypeIdentifier:{type:String,attribute:"custom-interaction-type-identifier"},_errorMessage:{type:String,state:!0}}}convertQtiVariableJSON(e){for(let t in e)if(e.hasOwnProperty(t)){let r=e[t];if(r){for(let o in r)if(r.hasOwnProperty(o)){let n=r[o];if(Array.isArray(n))return n.map(String);if(n!=null)return String(n)}}}return null}startChecking(){this.intervalId=setInterval(()=>{let e=this.pci.getResponse(),t=this.pci.getResponse(),r=JSON.stringify(e);if(r!==this.rawResponse){this.rawResponse=r;let o=this.convertQtiVariableJSON(t);this.response=o,this.saveResponse(o)}},200)}stopChecking(){this.intervalId!==void 0&&clearInterval(this.intervalId)}validate(){return!0}set response(e){}getTAOConfig(e){let t=e.querySelectorAll("properties"),r={},o=a=>{let c={},p=a.getAttribute("key");if(p){let d=Array.from(a.children),m=d.map(v=>v.getAttribute("key"));m.length>0&&!m.find(v=>!Number.isInteger(+v))?c[p]=d.map(v=>n(v)):c[p]=a.textContent}return c},n=a=>{if(a){let c={};for(let p of a.children)c=h(h({},c),o(p));return c}};for(let a of t)return a.getAttribute("key")||(r=h(h({},r),n(a))),r;return console.log("Can not find qti-custom-interaction config"),null}register(e){this.pci=e;let t=this.parentElement.tagName==="QTI-CUSTOM-INTERACTION"?"TAO":"IMS",r=t=="IMS"?this.querySelector("qti-interaction-markup"):this.querySelector("markup");r.classList.add("qti-customInteraction"),t=="TAO"&&this.querySelector("properties")&&(this.querySelector("properties").style.display="none");let o=t=="IMS"?{properties:this.dataset,onready:()=>{console.log("onready")}}:this.getTAOConfig(this);t=="IMS"?e.getInstance(r,o,void 0):e.initialize(this.customInteractionTypeIdentifier,r.firstElementChild,o),t=="TAO"&&Array.from(this.querySelectorAll("link")).map(a=>a.getAttribute("href")).forEach(a=>{let c=document.createElement("link");c.rel="stylesheet",c.type="text/css",c.media="screen",c.href=a,r.appendChild(c)}),this.startChecking()}connectedCallback(){super.connectedCallback();let e={context:this.customInteractionTypeIdentifier,catchError:!0,paths:{}};if(window.requirePaths&&window.requireShim&&(e.paths=window.requirePaths,e.shim=window.requireShim),!globalThis.require){this._errorMessage="requirejs not found, load with cdn: https://cdnjs.com/libraries/require.js";return}this.registerModules(e).then(()=>{requirejs.config(e)(["require"],r=>{!r.defined("qtiCustomInteractionContext")&&define("qtiCustomInteractionContext",()=>({register:n=>{this.register(n)},notifyReady:()=>{}}));let o=r.defined(this.module);r([this.module],n=>{o&&this.register(n)},n=>{this._errorMessage=n})},r=>{this._errorMessage=r})})}disconnectedCallback(){super.disconnectedCallback(),this.stopChecking()}async registerModules(e){let t=this.getAttribute("data-base-url");if(t){let o=`${t}/modules/module_resolution.js`,n=`${t}/modules/module_resolution_fallback.js`;if(o){let a=await this.loadConfig(o,t);await this.mergeConfigs(e,a,n)}}let r=this.querySelector("qti-interaction-modules");if(r){let o=r.querySelectorAll("qti-interaction-module");for(let n of o){let a=n.getAttribute("id"),c=n.getAttribute("primary-path"),p=n.getAttribute("fallback-path"),d=c?{paths:y(h({},e.paths),{[a]:c})}:null,m=p?{paths:y(h({},e.paths),{[a]:p})}:null;a&&d&&await this.mergeConfigs(e,d,m)}}}removeDoubleSlashes(e){return e.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}render(){return $t`<slot></slot>${this._errorMessage&&$t`<div style="color:red">
169
169
  <h1>Error</h1>
170
170
  ${this._errorMessage}
171
- </div>`}`}};Ue=i([Yi("qti-portable-custom-interaction")],Ue);import{LitElement as Ki,css as zi,html as Ot}from"lit";import{customElement as Wi,state as Ji}from"lit/decorators.js";var Fe=class l{constructor(){this._touchBegin=0;this._touchDown=null;this._lastClick=0;this._canDrag=!1;this._dragSrc=null;this._dragCopy=null;this._touchEndCalled=!1;this._dragRunning=!1;this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"};this._copyOffset={x:0,y:0};this._lastTarget=null;this._currentDropContainer=null;this._handleClick=!0;this._DBLCLICKDELAY=500;this._CONTEXTMENUDELAY=1e3;this._DRAGDELTA=5;this._COPYOPACITY=.7;this.copyStylesDragClone=!0;this.dragOnClick=!1;this._createDragCopy=(s,e)=>{if(this._dragCopy===null&&this._dragRunning){this._dragSrc.style.opacity=this._COPYOPACITY,this._dragCopy=this._dragSrc.cloneNode(!0);let t=window.getComputedStyle(this._dragSrc);if(this._dragCopy.style="",this._dragCopy.setAttribute("dragclone",""),this.copyStylesDragClone)for(let r of t)this._dragCopy.style[r]=t.getPropertyValue(r);this._calculateDragCopyPosition(e),this._dragCopy.style.top=e.clientY-this._copyOffset.y+"px",this._dragCopy.style.left=e.clientX-this._copyOffset.x+"px",this._dragCopy.style.position="fixed",this._dragCopy.style.pointerEvents="none",this._dragCopy.style.zIndex="999999",this._dragCopy=document.body.appendChild(this._dragCopy),this._dispatchEvent(this._dragSrc,"dragstart")}if(this._dragRunning){let t=this;requestAnimationFrame(function(){t._touchEndCalled||t._dragCopy===null||(t._dragCopy.style.top=e.clientY-t._copyOffset.y+"px",t._dragCopy.style.left=e.clientX-t._copyOffset.x+"px")});let r=this._findDroppable(s);r!=this._lastTarget&&(this._dispatchEvent(r,"dragenter"),this._dispatchEvent(this._lastTarget,"dragleave"),this._lastTarget=r),this._currentDropContainer=r,this._currentDropContainer&&this._dispatchEvent(r,"dragover")}};return l._instance?l._instance:(l._instance=this,document.addEventListener("touchmove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("mousemove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchend",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("mouseup",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchcancel",this._touchCancel.bind(this),{passive:!1,capture:!1}),this)}addDraggables(s){s.forEach(e=>{e.addEventListener("touchstart",this._touchStart.bind(this),{passive:!1,capture:!1}),e.addEventListener("mousedown",this._touchStart.bind(this),{passive:!1,capture:!1})})}_touchStart(s){this._touchBegin=Date.now();let{x:e,y:t}=this._getPoint(s);if(this._touchDown={x:e,y:t},this._dragSrc=s.currentTarget,this._canDrag=!0,this.dragOnClick){let r={clientX:e,clientY:t};this._dragRunning=!0,this._createDragCopy(s,r)}s.preventDefault()}_touchMove(s){if(this._canDrag&&this._dragSrc){let{x:e,y:t}=this._getPoint(s),r={clientX:e,clientY:t};this._getDelta(r)>=this._DRAGDELTA&&(this._dragRunning=!0),this._createDragCopy(s,r),s.preventDefault()}}_touchEnd(s){var e;if(this._touchEndCalled=!0,this._canDrag=!1,this._currentDropContainer)this._dispatchEvent(this._currentDropContainer,"drop"),this._dispatchEvent(this._dragSrc,"dragend");else if(this._dragRunning){let t=new CustomEvent("dragend",{bubbles:!0,cancelable:!0});t.dataTransfer={dropEffect:"none"},(e=this._dragSrc)==null||e.dispatchEvent(t)}this._reset()}_touchCancel(s){this._reset()}_findDroppable(s){let e=this._getPoint(s);return this.elementFromPoint(e.x,e.y)}elementFromPoint(s,e){let t=document.elementFromPoint(s,e);if(t){for(;t.shadowRoot;){let r=t.shadowRoot.elementFromPoint(s,e);if(r===null||r===t)break;t=r}return t}return null}_getPoint(s,e){return s&&s.touches&&(s=s.touches[0]),{x:e?s.pageX:s.clientX,y:e?s.pageY:s.clientY}}_calculateDragCopyPosition(s){let e=this._dragSrc.getBoundingClientRect();this._copyOffset.x=s.clientX-e.left,this._copyOffset.y=s.clientY-e.top}_getDelta(s){let e=Math.abs(s.clientX-this._touchDown.x),t=Math.abs(s.clientY-this._touchDown.y);return e+t}_dispatchEvent(s,e,t=!0){if(!s)return!1;let r=new CustomEvent(e,{bubbles:t,cancelable:!0});return r.dataTransfer=this._dataTransfer,s.dispatchEvent(r),r.defaultPrevented}_reset(){this._dragRunning&&(this._dragSrc.style.opacity="1.0",this._dragCopy.parentElement.removeChild(this._dragCopy)),this._dragRunning=!1,this._dragSrc=null,this._dragCopy=null,this._canDrag=!1,this._touchBegin=0,this._touchDown=null,this._lastClick=0,this._touchEndCalled=!1,this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"},this._copyOffset={x:0,y:0},this._lastTarget=null,this._currentDropContainer=null,this._handleClick=!0}};import{property as ji}from"lit/decorators.js";var Dt=(l,s,e)=>{class t extends l{constructor(){super(...arguments);this.disabled=!1}firstUpdated(o){if(this.classList.contains("qti-match-tabular"))return;super.firstUpdated(o);let a=Array.from(s?this.shadowRoot.querySelectorAll(e):this.querySelectorAll(e));this.dragoverHandler=this.dragoverHandler.bind(this),this.dragleaveHandler=this.dragleaveHandler.bind(this),this.dragenterHandler=this.dragenterHandler.bind(this),this.dropHandler=this.dropHandler.bind(this),a.forEach(c=>{c.setAttribute("dropzone","move"),c.addEventListener("dragleave",this.dragleaveHandler),this.attachHandler(c)});for(let c of a)this.observer=new MutationObserver(p=>{p.forEach(d=>{if(d.type==="attributes")switch(d.attributeName){case"disabled":{c.hasAttribute("disabled")?this.removeHandler(c):this.attachHandler(c);break}}})}),this.observer.observe(c,{attributes:!0})}attachHandler(o){o.addEventListener("dragover",this.dragoverHandler),o.addEventListener("dragenter",this.dragenterHandler),o.addEventListener("drop",this.dropHandler)}removeHandler(o){o.removeEventListener("dragover",this.dragoverHandler),o.removeEventListener("dragenter",this.dragenterHandler),o.removeEventListener("drop",this.dropHandler)}disconnectedCallback(){var o;this.classList.contains("qti-match-tabular")||(super.disconnectedCallback(),(o=this.observer)==null||o.disconnect())}dragenterHandler(o){o.preventDefault()}dragoverHandler(o){return o.preventDefault(),o.currentTarget.setAttribute("active",""),o.dataTransfer.dropEffect="move",!1}dropHandler(o){o.preventDefault();let a=o.currentTarget,c=this.querySelector(`[identifier=${o.dataTransfer.getData("text")}`),p=c||this.shadowRoot.querySelector(`[identifier=${o.dataTransfer.getData("text")}`);return a?p.parentElement.getAttribute("identifier")!==a.getAttribute("identifier")&&a.appendChild(p):console.error(`cannot find droppable, target: ${o.target?JSON.stringify(o.target):"null"}`),a.removeAttribute("active"),!1}dragleaveHandler(o){return o.preventDefault(),o.currentTarget.removeAttribute("active"),o.dataTransfer.dropEffect="none",!1}}return i([ji({type:Boolean,reflect:!0})],t.prototype,"disabled",2),t};var Pt=(l,s,e)=>{class t extends l{}return t};import{property as W}from"lit/decorators.js";var V=(l,s,e,t)=>{class r extends Pt(Dt(l,e,t),t,s){constructor(){super(...arguments);this.draggables=new Map;this.responseIdentifier="";this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.disabled=!1;this.readonly=!1;this.minAssociations=1;this.maxAssociations=1}reInitDragAndDrop(a,c){if(this.classList.contains("qti-match-tabular"))return;a.filter(d=>!this.draggables||!this.draggables.get(d)).length>0&&(this.dragDropApi.addDraggables(a),a.forEach(d=>{this.draggables.set(d,{parent:d.parentElement,index:Array.from(d.parentNode.children).indexOf(d)}),d.setAttribute("qti-draggable","true"),d.addEventListener("dragstart",m=>{m.dataTransfer.setData("text",m.currentTarget.getAttribute("identifier")),d.setAttribute("dragging","")}),d.addEventListener("dragend",m=>{if(m.preventDefault(),d.removeAttribute("over"),d.removeAttribute("dragging"),(m.dataTransfer.dropEffect==="none"||m.dataTransfer.dropEffect===void 0)&&this.configuration.dragCanBePlacedBack){let C=m.currentTarget,v=this.draggables.get(C),X=v.index<v.parent.children.length?v.index:v.parent.children.length-1,g=v.parent,$=v.parent.children[X];g.insertBefore(C,$),this.saveResponse(),this.checkMaxMatchAssociations()}m.dataTransfer.dropEffect==="move"&&(this.saveResponse(),this.checkMaxMatchAssociations())})}))}handleDragOptionsChanged(a,c){this.dragDropApi.copyStylesDragClone=c.copyStylesDragClone,this.dragDropApi.dragOnClick=c.dragOnClick}handleDisabledChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("disabled",""):d.removeAttribute("disabled"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}handleReadonlyChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("readonly",""):d.removeAttribute("readonly"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}firstUpdated(a){super.firstUpdated(a),this.droppables=Array.from(e?this.shadowRoot.querySelectorAll(t):this.querySelectorAll(t))}connectedCallback(){super.connectedCallback(),this.dragDropApi=new Fe,this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,composed:!0,detail:this}))}reset(a=!0){this.draggables.forEach((c,p)=>{let d=c.parent.children,m=c.index<d.length?c.index:d.length;c.parent.insertBefore(p,d[m])}),a&&this.saveResponse()}checkMaxMatchAssociations(){this.droppables.forEach(a=>{let p=+(a.getAttribute("match-max")||1)<=(a.children.length||0);p?a.setAttribute("disabled",""):a.removeAttribute("disabled"),p?a.removeAttribute("dropzone"):a.setAttribute("dropzone","move")})}set response(a){this.classList.contains("qti-match-tabular")||(this.reset(!1),a!==null&&Array.isArray(a)&&a.forEach(c=>{let[p,...d]=c.split(" ").reverse();if(p){let m=this.droppables.find(C=>C.getAttribute("identifier")===p);d.forEach(C=>{let v=this.querySelector(`[identifier=${C}]`);m?v?(m.appendChild(v),this.checkMaxMatchAssociations()):console.error(`cannot find draggable with identifier: ${C}`):console.error(`cannot find droppable with identifier: ${p}`)})}}))}validate(){let c=(e?Array.from(this.shadowRoot.querySelectorAll(t)):Array.from(this.querySelectorAll(t))).filter(p=>p.childElementCount>0).length;return this.minAssociations<=0||this.minAssociations<=c}saveResponse(){let a=this.droppables.map(c=>{var d;let p="";return((d=c.children)==null?void 0:d.length)>0&&(p+=Array.from(c.children).map(m=>m.getAttribute("identifier")).join(" ")+" "),p+=c.getAttribute("identifier"),p});this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:a}}))}}return i([kt(s)],r.prototype,"reInitDragAndDrop",1),i([W({type:String,attribute:"response-identifier"})],r.prototype,"responseIdentifier",2),i([W({attribute:!1,type:Object})],r.prototype,"configuration",2),i([b("configuration")],r.prototype,"handleDragOptionsChanged",1),i([W({type:Boolean,reflect:!0})],r.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],r.prototype,"handleDisabledChange",1),i([W({type:Boolean,reflect:!0})],r.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],r.prototype,"handleReadonlyChange",1),i([W({type:Number,reflect:!0,attribute:"min-associations"})],r.prototype,"minAssociations",2),i([W({type:Number,reflect:!0,attribute:"max-associations"})],r.prototype,"maxAssociations",2),r};var J=class extends V(Ki,"qti-simple-associable-choice",!0,".dl"){render(){return Ot` <slot name="prompt"></slot>
171
+ </div>`}`}};Ue=i([Yi("qti-portable-custom-interaction")],Ue);import{LitElement as Ki,css as zi,html as Ot}from"lit";import{customElement as Wi,state as Ji}from"lit/decorators.js";var Fe=class l{constructor(){this._touchBegin=0;this._touchDown=null;this._lastClick=0;this._canDrag=!1;this._dragSrc=null;this._dragCopy=null;this._touchEndCalled=!1;this._dragRunning=!1;this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"};this._copyOffset={x:0,y:0};this._lastTarget=null;this._currentDropContainer=null;this._handleClick=!0;this._DBLCLICKDELAY=500;this._CONTEXTMENUDELAY=1e3;this._DRAGDELTA=5;this._COPYOPACITY=.7;this.copyStylesDragClone=!0;this.dragOnClick=!1;this._createDragCopy=(s,e)=>{if(this._dragCopy===null&&this._dragRunning){this._dragSrc.style.opacity=this._COPYOPACITY,this._dragCopy=this._dragSrc.cloneNode(!0);let t=window.getComputedStyle(this._dragSrc);if(this._dragCopy.style="",this._dragCopy.setAttribute("dragclone",""),this.copyStylesDragClone)for(let r of t)this._dragCopy.style[r]=t.getPropertyValue(r);this._calculateDragCopyPosition(e),this._dragCopy.style.top=e.clientY-this._copyOffset.y+"px",this._dragCopy.style.left=e.clientX-this._copyOffset.x+"px",this._dragCopy.style.position="fixed",this._dragCopy.style.pointerEvents="none",this._dragCopy.style.zIndex="999999",this._dragCopy=document.body.appendChild(this._dragCopy),this._dispatchEvent(this._dragSrc,"dragstart")}if(this._dragRunning){let t=this;requestAnimationFrame(function(){t._touchEndCalled||t._dragCopy===null||(t._dragCopy.style.top=e.clientY-t._copyOffset.y+"px",t._dragCopy.style.left=e.clientX-t._copyOffset.x+"px")});let r=this._findDroppable(s);r!=this._lastTarget&&(this._dispatchEvent(r,"dragenter"),this._dispatchEvent(this._lastTarget,"dragleave"),this._lastTarget=r),this._currentDropContainer=r,this._currentDropContainer&&this._dispatchEvent(r,"dragover")}};return l._instance?l._instance:(l._instance=this,document.addEventListener("touchmove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("mousemove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchend",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("mouseup",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchcancel",this._touchCancel.bind(this),{passive:!1,capture:!1}),this)}addDraggables(s){s.forEach(e=>{e.addEventListener("touchstart",this._touchStart.bind(this),{passive:!1,capture:!1}),e.addEventListener("mousedown",this._touchStart.bind(this),{passive:!1,capture:!1})})}_touchStart(s){this._touchBegin=Date.now();let{x:e,y:t}=this._getPoint(s);if(this._touchDown={x:e,y:t},this._dragSrc=s.currentTarget,this._canDrag=!0,this.dragOnClick){let r={clientX:e,clientY:t};this._dragRunning=!0,this._createDragCopy(s,r)}s.preventDefault()}_touchMove(s){if(this._canDrag&&this._dragSrc){let{x:e,y:t}=this._getPoint(s),r={clientX:e,clientY:t};this._getDelta(r)>=this._DRAGDELTA&&(this._dragRunning=!0),this._createDragCopy(s,r),s.preventDefault()}}_touchEnd(s){var e;if(this._touchEndCalled=!0,this._canDrag=!1,this._currentDropContainer)this._dispatchEvent(this._currentDropContainer,"drop"),this._dispatchEvent(this._dragSrc,"dragend");else if(this._dragRunning){let t=new CustomEvent("dragend",{bubbles:!0,cancelable:!0});t.dataTransfer={dropEffect:"none"},(e=this._dragSrc)==null||e.dispatchEvent(t)}this._reset()}_touchCancel(s){this._reset()}_findDroppable(s){let e=this._getPoint(s);return this.elementFromPoint(e.x,e.y)}elementFromPoint(s,e){let t=document.elementFromPoint(s,e);if(t){for(;t.shadowRoot;){let r=t.shadowRoot.elementFromPoint(s,e);if(r===null||r===t)break;t=r}return t}return null}_getPoint(s,e){return s&&s.touches&&(s=s.touches[0]),{x:e?s.pageX:s.clientX,y:e?s.pageY:s.clientY}}_calculateDragCopyPosition(s){let e=this._dragSrc.getBoundingClientRect();this._copyOffset.x=s.clientX-e.left,this._copyOffset.y=s.clientY-e.top}_getDelta(s){let e=Math.abs(s.clientX-this._touchDown.x),t=Math.abs(s.clientY-this._touchDown.y);return e+t}_dispatchEvent(s,e,t=!0){if(!s)return!1;let r=new CustomEvent(e,{bubbles:t,cancelable:!0});return r.dataTransfer=this._dataTransfer,s.dispatchEvent(r),r.defaultPrevented}_reset(){this._dragRunning&&(this._dragSrc.style.opacity="1.0",this._dragCopy.parentElement.removeChild(this._dragCopy)),this._dragRunning=!1,this._dragSrc=null,this._dragCopy=null,this._canDrag=!1,this._touchBegin=0,this._touchDown=null,this._lastClick=0,this._touchEndCalled=!1,this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"},this._copyOffset={x:0,y:0},this._lastTarget=null,this._currentDropContainer=null,this._handleClick=!0}};import{property as ji}from"lit/decorators.js";var Dt=(l,s,e)=>{class t extends l{constructor(){super(...arguments);this.disabled=!1}firstUpdated(n){if(this.classList.contains("qti-match-tabular"))return;super.firstUpdated(n);let a=Array.from(s?this.shadowRoot.querySelectorAll(e):this.querySelectorAll(e));this.dragoverHandler=this.dragoverHandler.bind(this),this.dragleaveHandler=this.dragleaveHandler.bind(this),this.dragenterHandler=this.dragenterHandler.bind(this),this.dropHandler=this.dropHandler.bind(this),a.forEach(c=>{c.setAttribute("dropzone","move"),c.addEventListener("dragleave",this.dragleaveHandler),this.attachHandler(c)});for(let c of a)this.observer=new MutationObserver(p=>{p.forEach(d=>{if(d.type==="attributes")switch(d.attributeName){case"disabled":{c.hasAttribute("disabled")?this.removeHandler(c):this.attachHandler(c);break}}})}),this.observer.observe(c,{attributes:!0})}attachHandler(n){n.addEventListener("dragover",this.dragoverHandler),n.addEventListener("dragenter",this.dragenterHandler),n.addEventListener("drop",this.dropHandler)}removeHandler(n){n.removeEventListener("dragover",this.dragoverHandler),n.removeEventListener("dragenter",this.dragenterHandler),n.removeEventListener("drop",this.dropHandler)}disconnectedCallback(){var n;this.classList.contains("qti-match-tabular")||(super.disconnectedCallback(),(n=this.observer)==null||n.disconnect())}dragenterHandler(n){n.preventDefault()}dragoverHandler(n){return n.preventDefault(),n.currentTarget.setAttribute("active",""),n.dataTransfer.dropEffect="move",!1}dropHandler(n){n.preventDefault();let a=n.currentTarget,c=this.querySelector(`[identifier=${n.dataTransfer.getData("text")}`),p=c||this.shadowRoot.querySelector(`[identifier=${n.dataTransfer.getData("text")}`);return a?p.parentElement.getAttribute("identifier")!==a.getAttribute("identifier")&&a.appendChild(p):console.error(`cannot find droppable, target: ${n.target?JSON.stringify(n.target):"null"}`),a.removeAttribute("active"),!1}dragleaveHandler(n){return n.preventDefault(),n.currentTarget.removeAttribute("active"),n.dataTransfer.dropEffect="none",!1}}return i([ji({type:Boolean,reflect:!0})],t.prototype,"disabled",2),t};var Pt=(l,s,e)=>{class t extends l{}return t};import{property as W}from"lit/decorators.js";var V=(l,s,e,t)=>{class r extends Pt(Dt(l,e,t),t,s){constructor(){super(...arguments);this.draggables=new Map;this.responseIdentifier="";this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.disabled=!1;this.readonly=!1;this.minAssociations=1;this.maxAssociations=1}reInitDragAndDrop(a,c){if(this.classList.contains("qti-match-tabular"))return;a.filter(d=>!this.draggables||!this.draggables.get(d)).length>0&&(this.dragDropApi.addDraggables(a),a.forEach(d=>{this.draggables.set(d,{parent:d.parentElement,index:Array.from(d.parentNode.children).indexOf(d)}),d.setAttribute("qti-draggable","true"),d.addEventListener("dragstart",m=>{m.dataTransfer.setData("text",m.currentTarget.getAttribute("identifier")),d.setAttribute("dragging","")}),d.addEventListener("dragend",m=>{if(m.preventDefault(),d.removeAttribute("over"),d.removeAttribute("dragging"),(m.dataTransfer.dropEffect==="none"||m.dataTransfer.dropEffect===void 0)&&this.configuration.dragCanBePlacedBack){let C=m.currentTarget,v=this.draggables.get(C),X=v.index<v.parent.children.length?v.index:v.parent.children.length-1,g=v.parent,$=v.parent.children[X];g.insertBefore(C,$),this.saveResponse(),this.checkMaxMatchAssociations()}m.dataTransfer.dropEffect==="move"&&(this.saveResponse(),this.checkMaxMatchAssociations())})}))}handleDragOptionsChanged(a,c){this.dragDropApi.copyStylesDragClone=c.copyStylesDragClone,this.dragDropApi.dragOnClick=c.dragOnClick}handleDisabledChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("disabled",""):d.removeAttribute("disabled"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}handleReadonlyChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("readonly",""):d.removeAttribute("readonly"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}firstUpdated(a){super.firstUpdated(a),this.droppables=Array.from(e?this.shadowRoot.querySelectorAll(t):this.querySelectorAll(t))}connectedCallback(){super.connectedCallback(),this.dragDropApi=new Fe,this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,composed:!0,detail:this}))}reset(a=!0){this.draggables.forEach((c,p)=>{let d=c.parent.children,m=c.index<d.length?c.index:d.length;c.parent.insertBefore(p,d[m])}),a&&this.saveResponse()}checkMaxMatchAssociations(){this.droppables.forEach(a=>{let p=+(a.getAttribute("match-max")||1)<=(a.children.length||0);p?a.setAttribute("disabled",""):a.removeAttribute("disabled"),p?a.removeAttribute("dropzone"):a.setAttribute("dropzone","move")})}set response(a){this.classList.contains("qti-match-tabular")||(this.reset(!1),a!==null&&Array.isArray(a)&&a.forEach(c=>{let[p,...d]=c.split(" ").reverse();if(p){let m=this.droppables.find(C=>C.getAttribute("identifier")===p);d.forEach(C=>{let v=this.querySelector(`[identifier=${C}]`);m?v?(m.appendChild(v),this.checkMaxMatchAssociations()):console.error(`cannot find draggable with identifier: ${C}`):console.error(`cannot find droppable with identifier: ${p}`)})}}))}validate(){let c=(e?Array.from(this.shadowRoot.querySelectorAll(t)):Array.from(this.querySelectorAll(t))).filter(p=>p.childElementCount>0).length;return this.minAssociations<=0||this.minAssociations<=c}saveResponse(){let a=this.droppables.map(c=>{var d;let p="";return((d=c.children)==null?void 0:d.length)>0&&(p+=Array.from(c.children).map(m=>m.getAttribute("identifier")).join(" ")+" "),p+=c.getAttribute("identifier"),p});this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:a}}))}}return i([kt(s)],r.prototype,"reInitDragAndDrop",1),i([W({type:String,attribute:"response-identifier"})],r.prototype,"responseIdentifier",2),i([W({attribute:!1,type:Object})],r.prototype,"configuration",2),i([b("configuration")],r.prototype,"handleDragOptionsChanged",1),i([W({type:Boolean,reflect:!0})],r.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],r.prototype,"handleDisabledChange",1),i([W({type:Boolean,reflect:!0})],r.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],r.prototype,"handleReadonlyChange",1),i([W({type:Number,reflect:!0,attribute:"min-associations"})],r.prototype,"minAssociations",2),i([W({type:Number,reflect:!0,attribute:"max-associations"})],r.prototype,"maxAssociations",2),r};var J=class extends V(Ki,"qti-simple-associable-choice",!0,".dl"){render(){return Ot` <slot name="prompt"></slot>
172
172
  <slot name="qti-simple-associable-choice"></slot>
173
173
  ${this._childrenMap.length>0&&Array.from(Array(Math.ceil(this._childrenMap.length/2)).keys()).map((e,t)=>Ot`<div part="associables-container">
174
174
  <div name="left${t}" part="drop-list" class="dl" identifier="droplist${t}_left"></div>
@@ -209,20 +209,20 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
209
209
  flex: 1;
210
210
  gap: 0.5rem;
211
211
  }
212
- `],pe=i([rs("qti-gap-match-interaction")],pe);import{css as is,html as ss,svg as Ft}from"lit";import{customElement as os,query as ns,queryAssignedElements as as,state as Et}from"lit/decorators.js";import{ifDefined as It}from"lit/directives/if-defined.js";import{repeat as ls}from"lit/directives/repeat.js";function G(l,s,e,t){switch(l){case"circle":{let[r,n,o]=s,a=r/e.width*100,c=n/e.height*100,p=o/e.width*100;t.style.left=a-p+"%",t.style.top=c-p+"%",t.style.width=t.style.height=4*p+"px",t.style.borderRadius="9999px"}break;case"rect":{let[r,n,o,a]=s,c=r/e.width*100,p=n/e.height*100,d=o/e.width*100,m=a/e.height*100;t.style.left=c+"%",t.style.top=p+"%",t.style.width=d-c+"%",t.style.height=m-p+"%"}break;case"poly":{let r=s.reduce((g,$,Ct,zt)=>{if(Ct%2===1){let Wt=g.pop();g[g.length]={x:Wt,y:zt[Ct]}}else g.push($);return g},[]),n=Math.min(...r.map(g=>g.x)),o=Math.max(...r.map(g=>g.x)),a=Math.min(...r.map(g=>g.y)),c=Math.max(...r.map(g=>g.y)),p=n/e.width*100,d=a/e.height*100,m=o/e.width*100,C=c/e.height*100;t.style.left=n/e.width*100+"%",t.style.top=a/e.height*100+"%",t.style.width=m-p+"%",t.style.height=C-d+"%";let X=r.map(g=>({x:(g.x-n)/(o-n)*100,y:(g.y-a)/(c-a)*100})).map(g=>Math.round(g.x)+"% "+Math.round(g.y)+"%").join(",");t.style.clipPath=`polygon(${X})`}break;default:break}}var H=class extends f{constructor(){super();this.startPoint=null;this.endPoint=null;this._lines=[];this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}reset(){this._lines=[]}validate(){return this._lines.length>0}set response(e){Array.isArray(e)&&(this._lines=e)}render(){var e,t,r,n;return ss`<slot name="prompt"></slot>
212
+ `],pe=i([rs("qti-gap-match-interaction")],pe);import{css as is,html as ss,svg as Ft}from"lit";import{customElement as os,query as ns,queryAssignedElements as as,state as Et}from"lit/decorators.js";import{ifDefined as It}from"lit/directives/if-defined.js";import{repeat as ls}from"lit/directives/repeat.js";function G(l,s,e,t){switch(l){case"circle":{let[r,o,n]=s,a=r/e.width*100,c=o/e.height*100,p=n/e.width*100;t.style.left=a-p+"%",t.style.top=c-p+"%",t.style.width=t.style.height=4*p+"px",t.style.borderRadius="9999px"}break;case"rect":{let[r,o,n,a]=s,c=r/e.width*100,p=o/e.height*100,d=n/e.width*100,m=a/e.height*100;t.style.left=c+"%",t.style.top=p+"%",t.style.width=d-c+"%",t.style.height=m-p+"%"}break;case"poly":{let r=s.reduce((g,$,Ct,zt)=>{if(Ct%2===1){let Wt=g.pop();g[g.length]={x:Wt,y:zt[Ct]}}else g.push($);return g},[]),o=Math.min(...r.map(g=>g.x)),n=Math.max(...r.map(g=>g.x)),a=Math.min(...r.map(g=>g.y)),c=Math.max(...r.map(g=>g.y)),p=o/e.width*100,d=a/e.height*100,m=n/e.width*100,C=c/e.height*100;t.style.left=o/e.width*100+"%",t.style.top=a/e.height*100+"%",t.style.width=m-p+"%",t.style.height=C-d+"%";let X=r.map(g=>({x:(g.x-o)/(n-o)*100,y:(g.y-a)/(c-a)*100})).map(g=>Math.round(g.x)+"% "+Math.round(g.y)+"%").join(",");t.style.clipPath=`polygon(${X})`}break;default:break}}var H=class extends f{constructor(){super();this.startPoint=null;this.endPoint=null;this._lines=[];this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}reset(){this._lines=[]}validate(){return this._lines.length>0}set response(e){Array.isArray(e)&&(this._lines=e)}render(){var e,t,r,o;return ss`<slot name="prompt"></slot>
213
213
  <line-container>
214
214
  <svg
215
215
  width=${It((e=this.grImage[0])==null?void 0:e.width)}
216
216
  height=${It((t=this.grImage[0])==null?void 0:t.height)}
217
- viewbox="0 0 ${(r=this.grImage[0])==null?void 0:r.width} ${(n=this.grImage[0])==null?void 0:n.height}"
217
+ viewbox="0 0 ${(r=this.grImage[0])==null?void 0:r.width} ${(o=this.grImage[0])==null?void 0:o.height}"
218
218
  >
219
- ${ls(this._lines,o=>o,(o,a)=>Ft`
219
+ ${ls(this._lines,n=>n,(n,a)=>Ft`
220
220
  <line
221
221
  part="line"
222
- x1=${parseInt(this.querySelector("[identifier="+o.split(" ")[0]+"]").style.left)}
223
- y1=${parseInt(this.querySelector("[identifier="+o.split(" ")[0]+"]").style.top)}
224
- x2=${parseInt(this.querySelector("[identifier="+o.split(" ")[1]+"]").style.left)}
225
- y2=${parseInt(this.querySelector("[identifier="+o.split(" ")[1]+"]").style.top)}
222
+ x1=${parseInt(this.querySelector("[identifier="+n.split(" ")[0]+"]").style.left)}
223
+ y1=${parseInt(this.querySelector("[identifier="+n.split(" ")[0]+"]").style.top)}
224
+ x2=${parseInt(this.querySelector("[identifier="+n.split(" ")[1]+"]").style.left)}
225
+ y2=${parseInt(this.querySelector("[identifier="+n.split(" ")[1]+"]").style.top)}
226
226
  stroke="red"
227
227
  stroke-width="3"
228
228
  @click=${c=>{c.stopPropagation(),this._lines=this._lines.filter((p,d)=>d!==a),this.saveResponse(this._lines)}}
@@ -239,7 +239,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
239
239
  />`}
240
240
  </svg>
241
241
  <slot></slot>
242
- </line-container>`}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,n=r.getAttribute("coords"),o=r.getAttribute("shape"),a=n.split(",").map(c=>parseInt(c));G(o,a,t,r)}firstUpdated(e){super.firstUpdated(e),this.hotspots=this.querySelectorAll("qti-associable-hotspot"),document.addEventListener("mousemove",t=>{this.mouseCoord={x:t.clientX-this.grImage[0].getBoundingClientRect().left,y:t.clientY-this.grImage[0].getBoundingClientRect().top}}),this.hotspots.forEach(t=>{t.style.left=t.getAttribute("coords").split(",")[0]+"px",t.style.top=t.getAttribute("coords").split(",")[1]+"px",t.addEventListener("click",r=>{this.startPoint?this.endPoint||(this.endPoint=r.target,this._lines=[...this._lines,this.startPoint.getAttribute("identifier")+" "+this.endPoint.getAttribute("identifier")],this.saveResponse(this._lines),this.startPoint=null,this.endPoint=null):(this.startPoint=r.target,this.startCoord={x:this.startPoint.getAttribute("coords").split(",")[0],y:this.startPoint.getAttribute("coords").split(",")[1]})})})}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};H.styles=[is`
242
+ </line-container>`}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,o=r.getAttribute("coords"),n=r.getAttribute("shape"),a=o.split(",").map(c=>parseInt(c));G(n,a,t,r)}firstUpdated(e){super.firstUpdated(e),this.hotspots=this.querySelectorAll("qti-associable-hotspot"),document.addEventListener("mousemove",t=>{this.mouseCoord={x:t.clientX-this.grImage[0].getBoundingClientRect().left,y:t.clientY-this.grImage[0].getBoundingClientRect().top}}),this.hotspots.forEach(t=>{t.style.left=t.getAttribute("coords").split(",")[0]+"px",t.style.top=t.getAttribute("coords").split(",")[1]+"px",t.addEventListener("click",r=>{this.startPoint?this.endPoint||(this.endPoint=r.target,this._lines=[...this._lines,this.startPoint.getAttribute("identifier")+" "+this.endPoint.getAttribute("identifier")],this.saveResponse(this._lines),this.startPoint=null,this.endPoint=null):(this.startPoint=r.target,this.startCoord={x:this.startPoint.getAttribute("coords").split(",")[0],y:this.startPoint.getAttribute("coords").split(",")[1]})})})}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};H.styles=[is`
243
243
  slot:not([name='prompt']) {
244
244
  // position: relative; /* qti-hotspot-choice relative to the slot */
245
245
  display: block;
@@ -263,7 +263,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
263
263
  left: 0px;
264
264
  }
265
265
  `],i([Et()],H.prototype,"_lines",2),i([Et()],H.prototype,"startCoord",2),i([Et()],H.prototype,"mouseCoord",2),i([ns("svg")],H.prototype,"svgContainer",2),i([as({selector:"img"})],H.prototype,"grImage",2),H=i([os("qti-graphic-associate-interaction")],H);import{css as cs,html as ps,LitElement as ds}from"lit";import{customElement as us}from"lit/decorators.js";var de=class extends V(ds,"qti-gap-img",!1,"qti-associable-hotspot"){render(){return ps` <slot></slot>
266
- <slot name="qti-gap-img"></slot>`}positionHotspotOnRegister(s){let e=this.querySelector("img"),t=s.target,r=t.getAttribute("coords"),n=t.getAttribute("shape"),o=r.split(",").map(a=>parseInt(a));switch(n){case"circle":{let[a,c,p]=o;t.style.left=a-p+"px",t.style.top=c-p+"px",t.style.width=t.style.height=2*p+"px"}break;case"rect":{let[a,c,p,d]=o;t.style.left=a+"px",t.style.top=c+"px",t.style.width=p-a+"px",t.style.height=d-c+"px"}break;default:break}}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};de.styles=cs`
266
+ <slot name="qti-gap-img"></slot>`}positionHotspotOnRegister(s){let e=this.querySelector("img"),t=s.target,r=t.getAttribute("coords"),o=t.getAttribute("shape"),n=r.split(",").map(a=>parseInt(a));switch(o){case"circle":{let[a,c,p]=n;t.style.left=a-p+"px",t.style.top=c-p+"px",t.style.width=t.style.height=2*p+"px"}break;case"rect":{let[a,c,p,d]=n;t.style.left=a+"px",t.style.top=c+"px",t.style.width=p-a+"px",t.style.height=d-c+"px"}break;default:break}}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};de.styles=cs`
267
267
  :host {
268
268
  display: inline-block;
269
269
  position: relative;
@@ -277,7 +277,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
277
277
  <!-- slot for the prompt -->
278
278
  <slot></slot>
279
279
  <!-- slot for the image and hotspots -->
280
- `}setHotspotOrder(e){let{identifier:t}=e.detail,r=this._choiceElements.find(o=>o.getAttribute("identifier")===t),n=this._choiceElements.length;if(!this.choiceOrdering){if(this.choiceOrdering=!0,r.order==null){if(this._choiceElements.filter(o=>o.order>0).length>=n){this.choiceOrdering=!1;return}r.order=this._choiceElements.filter(o=>!!o.order).length+1,this.choiceOrdering=!1;return}else this._choiceElements.forEach(o=>(o.order>o.order&&o.order--,o)),r.order=null;this.choiceOrdering=!1}}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,n=r.getAttribute("coords"),o=r.getAttribute("shape"),a=n.split(",").map(c=>parseInt(c));G(o,a,t,r)}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-choice-element-selected",this.setHotspotOrder),this.addEventListener("qti-register-choice",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-choice-element-selected",this.setHotspotOrder),this.removeEventListener("qti-register-choice",this.positionHotspotOnRegister)}};ue.styles=[ms`
280
+ `}setHotspotOrder(e){let{identifier:t}=e.detail,r=this._choiceElements.find(n=>n.getAttribute("identifier")===t),o=this._choiceElements.length;if(!this.choiceOrdering){if(this.choiceOrdering=!0,r.order==null){if(this._choiceElements.filter(n=>n.order>0).length>=o){this.choiceOrdering=!1;return}r.order=this._choiceElements.filter(n=>!!n.order).length+1,this.choiceOrdering=!1;return}else this._choiceElements.forEach(n=>(n.order>n.order&&n.order--,n)),r.order=null;this.choiceOrdering=!1}}positionHotspotOnRegister(e){let t=this.querySelector("img"),r=e.target,o=r.getAttribute("coords"),n=r.getAttribute("shape"),a=o.split(",").map(c=>parseInt(c));G(n,a,t,r)}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-choice-element-selected",this.setHotspotOrder),this.addEventListener("qti-register-choice",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-choice-element-selected",this.setHotspotOrder),this.removeEventListener("qti-register-choice",this.positionHotspotOnRegister)}};ue.styles=[ms`
281
281
  slot:not([name='prompt']) {
282
282
  position: relative; /* qti-hotspot-choice relative to the slot */
283
283
  display: block;
@@ -293,7 +293,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
293
293
  <!-- slot for the prompt -->
294
294
  <slot></slot>
295
295
  <!-- slot for the image and hotspots -->
296
- `}positionHotspotOnRegister(s){let e=this.querySelector("img"),t=s.target,r=t.getAttribute("coords"),n=t.getAttribute("shape"),o=r.split(",").map(a=>parseInt(a));G(n,o,e,t)}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-choice",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-choice",this.positionHotspotOnRegister)}};me.styles=[gs`
296
+ `}positionHotspotOnRegister(s){let e=this.querySelector("img"),t=s.target,r=t.getAttribute("coords"),o=t.getAttribute("shape"),n=r.split(",").map(a=>parseInt(a));G(o,n,e,t)}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-choice",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-choice",this.positionHotspotOnRegister)}};me.styles=[gs`
297
297
  slot:not([name='prompt']) {
298
298
  position: relative; /* qti-hotspot-choice relative to the slot */
299
299
  display: block;
@@ -317,12 +317,12 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
317
317
  </tr>
318
318
  ${this.rows.map((e,t)=>he`<tr>
319
319
  <td part="c-header">${Bt(e.innerHTML)}</td>
320
- ${this.cols.map((r,n)=>{let o=`${e.getAttribute("identifier")} ${r.getAttribute("identifier")}`;return he`<td>
320
+ ${this.cols.map((r,o)=>{let n=`${e.getAttribute("identifier")} ${r.getAttribute("identifier")}`;return he`<td>
321
321
  <input
322
322
  type="checkbox"
323
323
  value=${r.getAttribute("identifier")}
324
- .checked=${this.response.includes(o)}
325
- @change=${a=>{a.target.checked?this.response.push(o):this.response=this.response.filter(p=>p!==o),this.requestUpdate(),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:this.response}}))}}
324
+ .checked=${this.response.includes(n)}
325
+ @change=${a=>{a.target.checked?this.response.push(n):this.response=this.response.filter(p=>p!==n),this.requestUpdate(),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:this.response}}))}}
326
326
  />
327
327
  </td>`})}
328
328
  </tr>`)}
@@ -405,11 +405,11 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
405
405
  part="point"
406
406
  style=${Xs({position:"absolute",transform:"translate(-50%, -50%)",left:`${e.split(" ")[0]}px`,top:`${e.split(" ")[1]}px`})}
407
407
  aria-label="Remove point at ${e}"
408
- @click=${r=>{r.stopPropagation(),this._points=this._points.filter((n,o)=>o!==t),this.saveResponse(this._points)}}
408
+ @click=${r=>{r.stopPropagation(),this._points=this._points.filter((o,n)=>n!==t),this.saveResponse(this._points)}}
409
409
  ></button>
410
410
  `)}
411
411
  <slot></slot>
412
- </point-container>`}reset(){this._points=[]}validate(){return this._points.length>=this.minChoices&&this._points.length<=this.maxChoices}set response(e){this._points=Array.isArray(e)?e:[e]}connectedCallback(){super.connectedCallback(),this.querySelector("img").addEventListener("click",t=>{let r=t.offsetX,n=t.offsetY;this._points=[...this._points,r+" "+n],this.saveResponse(this._points)})}disconnectedCallback(){super.disconnectedCallback()}};U.styles=[Us`
412
+ </point-container>`}reset(){this._points=[]}validate(){return this._points.length>=this.minChoices&&this._points.length<=this.maxChoices}set response(e){this._points=Array.isArray(e)?e:[e]}connectedCallback(){super.connectedCallback(),this.querySelector("img").addEventListener("click",t=>{let r=t.offsetX,o=t.offsetY;this._points=[...this._points,r+" "+o],this.saveResponse(this._points)})}disconnectedCallback(){super.disconnectedCallback()}};U.styles=[Us`
413
413
  :host {
414
414
  display: block;
415
415
  }
@@ -429,7 +429,7 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
429
429
  ${this.csLive.getPropertyValue("--show-value")=="true"?Xe`<div id="value" part="value">${this.value}</div>`:qt}
430
430
  </div>
431
431
  </div>
432
- </div>`}connectedCallback(){super.connectedCallback(),this.step=1,this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}_onTouchMove(e){let t=a=>{let{x:c}=this.getPositionFromEvent(a),p=c-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(p),a.stopPropagation()},r=()=>{document.removeEventListener("touchmove",t),document.removeEventListener("touchend",r),this.saveResponse(this.value.toString())};document.addEventListener("touchmove",t),document.addEventListener("touchend",r);let{x:n}=this.getPositionFromEvent(e),o=n-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(o),e.stopPropagation()}_onMouseDown(e){let t=o=>{let a=o.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(a),o.preventDefault(),o.stopPropagation()},r=()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),this.saveResponse(this.value.toString())};document.addEventListener("mousemove",t),document.addEventListener("mouseup",r);let n=e.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(n),e.preventDefault(),e.stopPropagation()}calculateValue(e){let t=this.min+(this.max-this.min)*e/this._rail.getBoundingClientRect().width,r=this.min+Math.round((t-this.min)/this._step)*this._step;this.value=r}getPositionFromEvent(e){let t;if(e.type=="touchstart"||e.type=="touchmove"||e.type=="touchend"||e.type=="touchcancel"){let r=typeof e.originalEvent=="undefined"?e:e.originalEvent,n=r.touches[0]||r.changedTouches[0];t={x:n.pageX,y:n.pageY}}else(e.type=="mousedown"||e.type=="mouseup"||e.type=="mousemove"||e.type=="mouseover"||e.type=="mouseout"||e.type=="mouseenter"||e.type=="mouseleave")&&(t={x:e.clientX,y:e.clientY});return t}};E.styles=[Ys``],i([Kt("#knob")],E.prototype,"_knob",2),i([Kt("#rail")],E.prototype,"_rail",2),i([Q({type:Number})],E.prototype,"value",2),i([Q({type:Boolean,attribute:"step-label"})],E.prototype,"stepLabel",2),i([Q({type:Boolean})],E.prototype,"reverse",2),i([Q({type:Number,attribute:"lower-bound"})],E.prototype,"min",1),i([Q({type:Number,attribute:"upper-bound"})],E.prototype,"max",1),i([Q({type:Number,attribute:"step"})],E.prototype,"step",1),i([b("disabled",{waitUntilFirstUpdate:!0})],E.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],E.prototype,"_handleReadonlyChange",2),E=i([js("qti-slider-interaction")],E);import{consume as Ks}from"@lit/context";import{LitElement as zs,html as Ws}from"lit";import{customElement as Js,state as Zs}from"lit/decorators.js";var be=class extends zs{render(){return Ws`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(e){var r,n,o;let t=Array.from((n=(r=this.firstElementChild)==null?void 0:r.childNodes)!=null?n:[]).find(a=>a.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","fn","item",(o=t.textContent)!=null?o:"")}catch(a){console.error("custom-operator contains invalid javascript code",a)}}calculate(){let e={variable:r=>{var n,o,a;return(a=(o=(n=this._context)==null?void 0:n.variables.find(c=>c.identifier===r))==null?void 0:o.value)!=null?a:""},correct:r=>{var n,o,a;return(a=(o=(n=this._context)==null?void 0:n.variables.find(c=>c.identifier===r))==null?void 0:o.correctResponse)!=null?a:""}},t={getVariable:r=>{var n;return(n=this._context)==null?void 0:n.variables.find(o=>o.identifier===r)},updateOutcomeVariable:(r,n)=>{this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:r,value:n}}))}};return this.operatorFunction(this._context,e,t)}};i([Ks({context:A,subscribe:!0}),Zs()],be.prototype,"_context",2),be=i([Js("qti-custom-operator")],be);import{LitElement as Gs,css as Qs,html as eo}from"lit";import{customElement as to}from"lit/decorators.js";var ve=class extends Gs{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-hotspot",{bubbles:!0,cancelable:!1,composed:!0}))}render(){return eo` <slot name="qti-gap-img"></slot> `}};ve.styles=Qs`
432
+ </div>`}connectedCallback(){super.connectedCallback(),this.step=1,this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}_onTouchMove(e){let t=a=>{let{x:c}=this.getPositionFromEvent(a),p=c-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(p),a.stopPropagation()},r=()=>{document.removeEventListener("touchmove",t),document.removeEventListener("touchend",r),this.saveResponse(this.value.toString())};document.addEventListener("touchmove",t),document.addEventListener("touchend",r);let{x:o}=this.getPositionFromEvent(e),n=o-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(n),e.stopPropagation()}_onMouseDown(e){let t=n=>{let a=n.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(a),n.preventDefault(),n.stopPropagation()},r=()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),this.saveResponse(this.value.toString())};document.addEventListener("mousemove",t),document.addEventListener("mouseup",r);let o=e.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(o),e.preventDefault(),e.stopPropagation()}calculateValue(e){let t=this.min+(this.max-this.min)*e/this._rail.getBoundingClientRect().width,r=this.min+Math.round((t-this.min)/this._step)*this._step;this.value=r}getPositionFromEvent(e){let t;if(e.type=="touchstart"||e.type=="touchmove"||e.type=="touchend"||e.type=="touchcancel"){let r=typeof e.originalEvent=="undefined"?e:e.originalEvent,o=r.touches[0]||r.changedTouches[0];t={x:o.pageX,y:o.pageY}}else(e.type=="mousedown"||e.type=="mouseup"||e.type=="mousemove"||e.type=="mouseover"||e.type=="mouseout"||e.type=="mouseenter"||e.type=="mouseleave")&&(t={x:e.clientX,y:e.clientY});return t}};E.styles=[Ys``],i([Kt("#knob")],E.prototype,"_knob",2),i([Kt("#rail")],E.prototype,"_rail",2),i([Q({type:Number})],E.prototype,"value",2),i([Q({type:Boolean,attribute:"step-label"})],E.prototype,"stepLabel",2),i([Q({type:Boolean})],E.prototype,"reverse",2),i([Q({type:Number,attribute:"lower-bound"})],E.prototype,"min",1),i([Q({type:Number,attribute:"upper-bound"})],E.prototype,"max",1),i([Q({type:Number,attribute:"step"})],E.prototype,"step",1),i([b("disabled",{waitUntilFirstUpdate:!0})],E.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],E.prototype,"_handleReadonlyChange",2),E=i([js("qti-slider-interaction")],E);import{consume as Ks}from"@lit/context";import{LitElement as zs,html as Ws}from"lit";import{customElement as Js,state as Zs}from"lit/decorators.js";var be=class extends zs{render(){return Ws`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(e){var r,o,n;let t=Array.from((o=(r=this.firstElementChild)==null?void 0:r.childNodes)!=null?o:[]).find(a=>a.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","fn","item",(n=t.textContent)!=null?n:"")}catch(a){console.error("custom-operator contains invalid javascript code",a)}}calculate(){let e={variable:r=>{var o,n,a;return(a=(n=(o=this._context)==null?void 0:o.variables.find(c=>c.identifier===r))==null?void 0:n.value)!=null?a:""},correct:r=>{var o,n,a;return(a=(n=(o=this._context)==null?void 0:o.variables.find(c=>c.identifier===r))==null?void 0:n.correctResponse)!=null?a:""}},t={getVariable:r=>{var o;return(o=this._context)==null?void 0:o.variables.find(n=>n.identifier===r)},updateOutcomeVariable:(r,o)=>{this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:r,value:o}}))}};return this.operatorFunction(this._context,e,t)}};i([Ks({context:A,subscribe:!0}),Zs()],be.prototype,"_context",2),be=i([Js("qti-custom-operator")],be);import{LitElement as Gs,css as Qs,html as eo}from"lit";import{customElement as to}from"lit/decorators.js";var ve=class extends Gs{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-hotspot",{bubbles:!0,cancelable:!1,composed:!0}))}render(){return eo` <slot name="qti-gap-img"></slot> `}};ve.styles=Qs`
433
433
  :host {
434
434
  position: absolute;
435
435
  }
@@ -448,4 +448,4 @@ import{a as h,b as y,c as i}from"../chunk-JILF7TI5.js";import{provide as Zt}from
448
448
  display: block;
449
449
  }
450
450
  `,qe=i([Eo("qti-simple-choice")],qe);console.log("%cC\xBFTO%cLab%c: qti-components loaded","font-weight:bold; color:green",'font-family: "PT Sans", font-weight:bold; color:green; font-size: smaller;vertical-align: sub',"font-weight:unset");export{f as Interaction,le as QtPrintedVariable,Ve as QtiAnd,_ as QtiAssessmentItem,ve as QtiAssociableHotspot,J as QtiAssociateInteraction,He as QtiBaseValue,q as QtiChoice,K as QtiChoiceInteraction,ke as QtiCompanionMaterialsInfo,w as QtiConditionExpression,rt as QtiContains,we as QtiContentBody,it as QtiCorrect,be as QtiCustomOperator,Z as QtiEndAttemptInteraction,De as QtiEqual,$e as QtiEqualRounded,u as QtiExpression,S as QtiExtendedTextInteraction,ie as QtiFeedbackBlock,se as QtiFeedbackInline,ye as QtiGap,xe as QtiGapImg,pe as QtiGapMatchInteraction,Ee as QtiGapText,H as QtiGraphicAssociateInteraction,de as QtiGraphicGapMatchInteraction,ue as QtiGraphicOrderInteraction,st as QtiGt,ot as QtiGte,ee as QtiHotspotChoice,me as QtiHotspotInteraction,Ye as QtiHottext,Se as QtiHottextInteraction,je as QtiInlineChoice,O as QtiInlineChoiceInteraction,nt as QtiIsNull,Ne as QtiLookupOutcomeValue,at as QtiLt,lt as QtiLte,Pe as QtiMapResponse,z as QtiMapping,pt as QtiMatch,I as QtiMatchInteraction,fe as QtiMediaInteraction,dt as QtiMember,oe as QtiModalFeedback,ut as QtiMultiple,mt as QtiNot,ht as QtiOr,B as QtiOrderInteraction,ft as QtiOrdered,L as QtiOutcomeDeclaration,ce as QtiOutcomeProcessing,xt as QtiOutcomeProcessingProcessor,Ue as QtiPortableCustomInteraction,ge as QtiPositionObjectStage,gt as QtiProduct,Ce as QtiPrompt,Ge as QtiResponseCondition,D as QtiResponseDeclaration,ne as QtiResponseElse,tt as QtiResponseElseIf,ae as QtiResponseIf,F as QtiResponseProcessing,M as QtiRubricBlock,N as QtiRule,Be as QtiSPositionObjectInteraction,U as QtiSelectPointInteraction,Qe as QtiSetOutcomeValue,et as QtiSetOutcomeValueRule,Ie as QtiSimpleAssociableChoice,qe as QtiSimpleChoice,E as QtiSliderInteraction,Oe as QtiStringMatch,_e as QtiStylesheet,bt as QtiSum,vt as QtiSumExpression,k as QtiTextEntryInteraction,yt as QtiVariable,A as itemContext,_t as itemContextVariables,Ri as qtiAndMixin};
451
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaXRlbS1ib2R5L3F0aS1pdGVtLWJvZHkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaXRlbS1ib2R5L3F0aS1pdGVtLWJvZHkuc3R5bGVzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXByb21wdC9xdGktcHJvbXB0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXN0eWxlc2hlZXQvcXRpLXN0eWxlc2hlZXQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcnVicmljLWJsb2NrL3F0aS1jb250ZW50LWJvZHkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcnVicmljLWJsb2NrL3F0aS1ydWJyaWMtYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWJsb2NrL3F0aS1mZWVkYmFjay1ibG9jay50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbnRlcm5hbC91dGlscy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2staW5saW5lL3F0aS1mZWVkYmFjay1pbmxpbmUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLW1vZGFsLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL2RlY29yYXRvcnMvbGl2ZS1xdWVyeS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi5zdHlsZXMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL2ludGVybmFsL3RlbXBsYXRlLXN0cmluZ3MudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktbG9va3VwLW91dGNvbWUtdmFsdWUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJ1bGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktcmVzcG9uc2UtY29uZGl0aW9uL3F0aS1yZXNwb25zZS1jb25kaXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktc2V0LW91dGNvbWUtdmFsdWUvcXRpLXNldC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWVsc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL3F0aS1hbmQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWJhc2V2YWx1ZS9xdGktYmFzZXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbnRhaW5zL3F0aS1jb250YWlucy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb3JyZWN0L3F0aS1jb3JyZWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsLXJvdW5kZWQvcXRpLWVxdWFsLXJvdW5kZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZXF1YWwvcXRpLWVxdWFsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWd0L3F0aS1ndC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndGUvcXRpLWd0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1pcy1udWxsL3F0aS1pcy1udWxsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWx0L3F0aS1sdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdGUvcXRpLWx0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXAtcmVzcG9uc2UvcXRpLW1hcC1yZXNwb25zZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXBwaW5nL3F0aS1tYXBwaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hdGNoL3F0aS1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tZW1iZXIvcXRpLW1lbWJlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tdWx0aXBsZS9xdGktbXVsdGlwbGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbm90L3F0aS1ub3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktb3IvcXRpLW9yLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yZGVyZWQvcXRpLW9yZGVyZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJpbnRlZC12YXJpYWJsZS9xdGktcHJpbnRlZC12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1wcm9kdWN0L3F0aS1wcm9kdWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN0cmluZy1tYXRjaC9xdGktc3RyaW5nLW1hdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN1bS9xdGktc3VtLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXZhcmlhYmxlL3F0aS12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcvcXRpLW91dGNvbWUtcHJvY2Vzc2luZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtYXBpLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcm9wcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9mbGlwcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktY3VzdG9tLW9wZXJhdG9yL3F0aS1jdXN0b20tb3BlcmF0b3IudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWFibGUtaG90c3BvdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtaW1nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtdGV4dC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgcHJvdmlkZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3Rpb25DaGFuZ2VkRGV0YWlscywgT3V0Y29tZUNoYW5nZWREZXRhaWxzIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXZlbnQtdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNwb25zZUludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHR5cGUgeyBWYXJpYWJsZURlY2xhcmF0aW9uLCBWYXJpYWJsZVZhbHVlIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSwgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgdHlwZSB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjayc7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgUXRpUmVzcG9uc2VQcm9jZXNzaW5nIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dFZhcmlhYmxlcyB9IGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcXRpLWFzc2Vzc21lbnQtaXRlbSBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5kbHRubmo4N2wweWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGRlcGVuZGVuY3kgcXRpLWZlZWRiYWNrXG4gKiBAZGVwZW5kZW5jeSBxdGktcmVzcG9uc2Vwcm9jZXNzaW5nXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzIGdvLlxuICpcbiAqIEBldmVudCBxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCAtIEVtaXR0ZWQgd2hlbiBhbiBpbnRlcmFjdGlvbiBpcyBjaGFuZ2VkLlxuICogQGV2ZW50IHF0aS1vdXRjb21lLWNoYW5nZWQgLSBFbWl0dGVkIHdoZW4gYW4gb3V0Y29tZSBoYXMgY2hhbmdlZC5cbiAqIEBldmVudCBxdGktcmVzcG9uc2UtcHJvY2Vzc2luZyAtIEVtaXR0ZWQgd2hlbiByZXNwb25zZS1wcm9jZXNzaW5nIGlzIGNhbGxlZC5cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzZXNzbWVudC1pdGVtJylcbmV4cG9ydCBjbGFzcyBRdGlBc3Nlc3NtZW50SXRlbSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGl0bGU6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgYWRhcHRpdmU6ICd0cnVlJyB8ICdmYWxzZScgPSAnZmFsc2UnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGltZURlcGVuZGVudDogJ3RydWUnIHwgJ2ZhbHNlJyA9ICdmYWxzZSc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZURpc2FibGVkQ2hhbmdlID0gKF86IGJvb2xlYW4sIGRpc2FibGVkOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG4gIH07XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seTogYm9vbGVhbjtcbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2gucmVhZG9ubHkgPSByZWFkb25seSkpO1xuXG4gIEBwcm92aWRlKHsgY29udGV4dDogaXRlbUNvbnRleHQgfSlcbiAgLy8gQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwcml2YXRlIF9jb250ZXh0OiBJdGVtQ29udGV4dCA9IHtcbiAgICBpZGVudGlmaWVyOiB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpLFxuICAgIHZhcmlhYmxlczogaXRlbUNvbnRleHRWYXJpYWJsZXNcbiAgfTtcblxuICBwdWJsaWMgZ2V0IHZhcmlhYmxlcygpOiBWYXJpYWJsZVZhbHVlPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2ID0+ICh7IGlkZW50aWZpZXI6IHYuaWRlbnRpZmllciwgdmFsdWU6IHYudmFsdWUsIHR5cGU6IHYudHlwZSB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhcmlhYmxlcyh2YWx1ZTogVmFyaWFibGVWYWx1ZTxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+W10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLnNvbWUodiA9PiAhKCdpZGVudGlmaWVyJyBpbiB2KSkpIHtcbiAgICAgIGNvbnNvbGUud2FybigndmFyaWFibGVzIHByb3BlcnR5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBWYXJpYWJsZURlY2xhcmF0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVmFsdWUgPSB2YWx1ZS5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi52YXJpYWJsZSwgLi4ubWF0Y2hpbmdWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25FbGVtZW50ID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIChlbDogSW50ZXJhY3Rpb24pID0+IGVsLnJlc3BvbnNlSWRlbnRpZmllciA9PT0gdmFyaWFibGUuaWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb25FbGVtZW50KSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb25FbGVtZW50LnJlc3BvbnNlID0gdmFyaWFibGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdvdXRjb21lJykge1xuICAgICAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2sodmFyaWFibGUuaWRlbnRpZmllcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbENvbnRleHQ6IFJlYWRvbmx5PEl0ZW1Db250ZXh0PiA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcyB9O1xuICBwcml2YXRlIF9mZWVkYmFja0VsZW1lbnRzOiBRdGlGZWVkYmFja1tdID0gW107XG4gIHByaXZhdGUgX2ludGVyYWN0aW9uRWxlbWVudHM6IEludGVyYWN0aW9uW10gPSBbXTtcblxuICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgdGhpcy5fZW1pdDx7IGRldGFpbDogUXRpQXNzZXNzbWVudEl0ZW0gfT4oJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tY29ubmVjdGVkJywgdGhpcyk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHZhcmlhYmxlcyBwcm9wZXJ0eSBpbnN0ZWFkICovXG4gIHNldCByZXNwb25zZXMobXlSZXNwb25zZXM6IFJlc3BvbnNlSW50ZXJhY3Rpb25bXSkge1xuICAgIGlmIChteVJlc3BvbnNlcykge1xuICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBteVJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5nZXRSZXNwb25zZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAocmVzcG9uc2VWYXJpYWJsZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5yZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIGUgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiBbLi4udGhpcy5fY29udGV4dC52YXJpYWJsZXMsIGUuZGV0YWlsLnZhcmlhYmxlXSB9O1xuICAgICAgdGhpcy5faW5pdGlhbENvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIChlOiBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBmZWVkYmFja0VsZW1lbnQgPSBlLmRldGFpbDtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMucHVzaChmZWVkYmFja0VsZW1lbnQpO1xuICAgICAgZmVlZGJhY2tFbGVtZW50LmNoZWNrU2hvd0ZlZWRiYWNrKGZlZWRiYWNrRWxlbWVudC5vdXRjb21lSWRlbnRpZmllcik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCAoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnB1c2goZS50YXJnZXQgYXMgSW50ZXJhY3Rpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZW5kLWF0dGVtcHQnLCAoZTogQ3VzdG9tRXZlbnQ8eyByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZzsgY291bnRBdHRlbXB0OiBib29sZWFuIH0+KSA9PiB7XG4gICAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0IH0gPSBlLmRldGFpbDtcbiAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsICd0cnVlJyk7XG4gICAgICB0aGlzLnByb2Nlc3NSZXNwb25zZShjb3VudEF0dGVtcHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgLy8gd29yZHQgYWFuZ2Vyb2VwZW4gdmFudWl0IGRlIHByb2Nlc3Npbmd0ZW1wbGF0ZVxuICAgICAgJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsXG4gICAgICAoZTogQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4pID0+IHtcbiAgICAgICAgY29uc3QgeyBvdXRjb21lSWRlbnRpZmllciwgdmFsdWUgfSA9IGUuZGV0YWlsO1xuICAgICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShvdXRjb21lSWRlbnRpZmllciwgdmFsdWUpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHRoaXMuaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvcnJlY3RSZXNwb25zZShzaG93OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZXMgPSB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maWx0ZXIoXG4gICAgICAodmFyaTogUmVzcG9uc2VWYXJpYWJsZSB8IE91dGNvbWVWYXJpYWJsZSkgPT4gJ2NvcnJlY3RSZXNwb25zZScgaW4gdmFyaSAmJiB2YXJpLmNvcnJlY3RSZXNwb25zZVxuICAgICkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHJlc3BvbnNlcyA9IHJlc3BvbnNlVmFyaWFibGVzLm1hcChjciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IGNyLmlkZW50aWZpZXIsXG4gICAgICAgIHJlc3BvbnNlOiBjci5jb3JyZWN0UmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgaSA9PiBpLmdldEF0dHJpYnV0ZSgncmVzcG9uc2UtaWRlbnRpZmllcicpID09PSByZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgICBpbnRlcmFjdGlvbiAmJiAoaW50ZXJhY3Rpb24uY29ycmVjdFJlc3BvbnNlID0gc2hvdyA/IHJlc3BvbnNlLnJlc3BvbnNlIDogJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzUmVzcG9uc2UoY291bnROdW1BdHRlbXB0czogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNwb25zZVByb2Nlc3NvciA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnKSBhcyB1bmtub3duIGFzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZztcbiAgICBpZiAoIXJlc3BvbnNlUHJvY2Vzc29yKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHByb2Nlc3NpbmcgdGVtcGxhdGUgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IucHJvY2Vzcykge1xuICAgICAgLy8gY29uc29sZS5pbmZvKCdDbGllbnQgc2lkZSByZXNwb25zZSB3ZWJjb21wb25lbnRzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKCk7XG5cbiAgICBpZiAodGhpcy5hZGFwdGl2ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy8gaWYgYWRhcGF0aXZlLCBjb21wbGV0aW9uU3RhdHVzIGlzIHNldCBieSB0aGUgcHJvY2Vzc2luZyB0ZW1wbGF0ZVxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoJ2NvbXBsZXRpb25TdGF0dXMnLCB0aGlzLl9nZXRDb21wbGV0aW9uU3RhdHVzKCkpO1xuICAgIH1cblxuICAgIGNvdW50TnVtQXR0ZW1wdHMgJiZcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKFxuICAgICAgICAnbnVtQXR0ZW1wdHMnLFxuICAgICAgICAoK3RoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09ICdudW1BdHRlbXB0cycpPy52YWx1ZSArIDEpLnRvU3RyaW5nKClcbiAgICAgICk7XG5cbiAgICB0aGlzLl9lbWl0KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2VkJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRSZXNwb25zZXMoKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2luaXRpYWxDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3BvbnNlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFJlc3BvbnNlVmFyaWFibGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldE91dGNvbWUoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8T3V0Y29tZVZhcmlhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldFZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB8fCBudWxsO1xuICB9XG5cbiAgLy8gc2F2aW5nIHByaXZhdGVzIGhlcmU6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZShldmVudDogQ3VzdG9tRXZlbnQ8UmVzcG9uc2VJbnRlcmFjdGlvbj4pIHtcbiAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UgfSA9IGV2ZW50LmRldGFpbDtcbiAgICB0aGlzLnVwZGF0ZVJlc3BvbnNlVmFyaWFibGUocmVzcG9uc2VJZGVudGlmaWVyLCByZXNwb25zZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVzcG9uc2VWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLl9jb250ZXh0LFxuICAgICAgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5tYXAodiA9PiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyID8gdiA6IHsgLi4udiwgdmFsdWU6IHZhbHVlIH0pKVxuICAgIH07XG5cbiAgICB0aGlzLl9lbWl0PEludGVyYWN0aW9uQ2hhbmdlZERldGFpbHM+KCdxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlOiB2YWx1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYWRhcHRpdmUgPT09ICdmYWxzZScpIHtcbiAgICAgIC8vIGlmIGFkYXBhdGl2ZSwgY29tcGxldGlvblN0YXR1cyBpcyBzZXQgYnkgdGhlIHByb2Nlc3NpbmcgdGVtcGxhdGVcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKCdjb21wbGV0aW9uU3RhdHVzJywgdGhpcy5fZ2V0Q29tcGxldGlvblN0YXR1cygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlT3V0Y29tZVZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5nZXRPdXRjb21lKGlkZW50aWZpZXIpO1xuICAgIGlmICghb3V0Y29tZVZhcmlhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3Qgc2V0IHF0aS1vdXRjb21lLWlkZW50aWZpZXI6ICR7aWRlbnRpZmllcn0sIGl0IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4ge1xuICAgICAgICBpZiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi52LFxuICAgICAgICAgIHZhbHVlOiBvdXRjb21lVmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnID8gdmFsdWUgOiBbLi4udi52YWx1ZSwgdmFsdWUgYXMgc3RyaW5nXVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5fZmVlZGJhY2tFbGVtZW50cy5mb3JFYWNoKGZlID0+IGZlLmNoZWNrU2hvd0ZlZWRiYWNrKGlkZW50aWZpZXIpKTtcblxuICAgIHRoaXMuX2VtaXQ8T3V0Y29tZUNoYW5nZWREZXRhaWxzPigncXRpLW91dGNvbWUtY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIG91dGNvbWVJZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgdmFsdWU6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpPy52YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29tcGxldGlvblN0YXR1cygpOiAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJyB8ICdub3RfYXR0ZW1wdGVkJyB8ICd1bmtub3duJyB7XG4gICAgaWYgKHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZXZlcnkoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdjb21wbGV0ZWQnO1xuICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnNvbWUoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdpbmNvbXBsZXRlJztcbiAgICByZXR1cm4gJ25vdF9hdHRlbXB0ZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdDxUPihuYW1lLCBkZXRhaWwgPSBudWxsKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFQ+KG5hbWUsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nOiBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbnR5cGUgVXBkYXRlSGFuZGxlciA9IChwcmV2PzogdW5rbm93biwgbmV4dD86IHVua25vd24pID0+IHZvaWQ7XG5cbnR5cGUgTm9uVW5kZWZpbmVkPEE+ID0gQSBleHRlbmRzIHVuZGVmaW5lZCA/IG5ldmVyIDogQTtcblxudHlwZSBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiBOb25VbmRlZmluZWQ8VFtLXT4gZXh0ZW5kcyBVcGRhdGVIYW5kbGVyID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuaW50ZXJmYWNlIFdhdGNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlclxuICAgKi9cbiAgd2FpdFVudGlsRmlyc3RVcGRhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJ1bnMgd2hlbiBvYnNlcnZlZCBwcm9wZXJ0aWVzIGNoYW5nZSwgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy4gVG8gd2FpdCBmb3IgYW5cbiAqIHVwZGF0ZSB0byBjb21wbGV0ZSBhZnRlciBhIGNoYW5nZSBvY2N1cnMsIHVzZSBgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZWAgaW4gdGhlIGhhbmRsZXIuIFRvIHN0YXJ0IHdhdGNoaW5nIGFmdGVyIHRoZVxuICogaW5pdGlhbCB1cGRhdGUvcmVuZGVyLCB1c2UgYHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfWAgb3IgYHRoaXMuaGFzVXBkYXRlZGAgaW4gdGhlIGhhbmRsZXIuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogQHdhdGNoKCdwcm9wTmFtZScpXG4gKiBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICogICAuLi5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoKHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM/OiBXYXRjaE9wdGlvbnMpIHtcbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBSZXF1aXJlZDxXYXRjaE9wdGlvbnM+ID0ge1xuICAgIHdhaXRVbnRpbEZpcnN0VXBkYXRlOiBmYWxzZSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIHJldHVybiA8RWxlbUNsYXNzIGV4dGVuZHMgTGl0RWxlbWVudD4ocHJvdG86IEVsZW1DbGFzcywgZGVjb3JhdGVkRm5OYW1lOiBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPEVsZW1DbGFzcz4pID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgY29uc3QgeyB1cGRhdGUgfSA9IHByb3RvO1xuICAgIGNvbnN0IHdhdGNoZWRQcm9wZXJ0aWVzID0gQXJyYXkuaXNBcnJheShwcm9wZXJ0eU5hbWUpID8gcHJvcGVydHlOYW1lIDogW3Byb3BlcnR5TmFtZV07XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcywgY2hhbmdlZFByb3BzOiBNYXA8a2V5b2YgRWxlbUNsYXNzLCBFbGVtQ2xhc3Nba2V5b2YgRWxlbUNsYXNzXT4pIHtcbiAgICAgIHdhdGNoZWRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBwcm9wZXJ0eSBhcyBrZXlvZiBFbGVtQ2xhc3M7XG4gICAgICAgIGlmIChjaGFuZ2VkUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGNoYW5nZWRQcm9wcy5nZXQoa2V5KTtcbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcmVzb2x2ZWRPcHRpb25zLndhaXRVbnRpbEZpcnN0VXBkYXRlIHx8IHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgICAgICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1cGRhdGUuY2FsbCh0aGlzLCBjaGFuZ2VkUHJvcHMpO1xuICAgIH07XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJdGVtQ29udGV4dCB7XG4gIGhyZWY/OiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgdmFyaWFibGVzOiBSZWFkb25seUFycmF5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0VmFyaWFibGVzID0gW1xuICB7XG4gICAgaWRlbnRpZmllcjogJ2NvbXBsZXRpb25TdGF0dXMnLFxuICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJyxcbiAgICBiYXNlVHlwZTogJ3N0cmluZycsXG4gICAgdmFsdWU6ICd1bmtub3duJyxcbiAgICB0eXBlOiAnb3V0Y29tZSdcbiAgfSxcbiAge1xuICAgIGlkZW50aWZpZXI6ICdudW1BdHRlbXB0cycsXG4gICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnLFxuICAgIGJhc2VUeXBlOiAnaW50ZWdlcicsXG4gICAgdmFsdWU6ICcwJyxcbiAgICB0eXBlOiAncmVzcG9uc2UnXG4gIH1cbl0gYXMgVmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT5bXTtcblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxJdGVtQ29udGV4dD4oJ2l0ZW0nKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuY29uc3QgS0VZQ09ERSA9IHtcbiAgU1BBQ0U6IDMyXG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IHF0aS1jaG9pY2UgaXMgdXNlZCBieSBxdGktc2ltcGxlLWNob2ljZSwgcXRpLWlubGluZS1jaG9pY2UsIHF0aS1ob3R0ZXh0LCBxdGktaG90c3BvdC1jaG9pY2UuXG4gKlxuICogQHNpbmNlIDEuMFxuICogQHN0YXR1cyBzdGFibGVcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIHJlZ2lzdGVyIGl0c2VsdmVzIG9uIGEgcXRpLWNob2ljZS1pbnRlcmFjdGlvbiBlbGVtZW50LlxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBkZS1yZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gdGhlIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqXG4gKiBAc2xvdCAtIFRoZSBjaG9pY2VzIHNsb3QgZWxlbWVudFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtZGlzYWJsZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtcmVhZG9ubHknLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtY2hlY2tlZCcsXG4gICAgY29udmVydGVyOiB7XG4gICAgICB0b0F0dHJpYnV0ZTogdmFsdWUgPT4gdmFsdWVcbiAgICB9XG4gIH0pXG4gIGNoZWNrZWQgPSBmYWxzZTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVEaXNhYmxlZENoYW5nZShfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJpbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlVcCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktbG9vc2UtY2hvaWNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIEtFWUNPREUuU1BBQ0U6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZUNoZWNrZWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllciwgY2hlY2tlZDogdGhpcy5jaGVja2VkIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWxsUHJvcHMoKSB7XG4gICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQWxsUHJvcHMoKSkge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHByb3BzIGZvciAke3RoaXMub3V0ZXJIVE1MfWAsIGBtaXNzaW5nIGlkZW50aWZpZXJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlJzogUXRpQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3F0aS1pdGVtLWJvZHkuc3R5bGVzJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAgfSBmcm9tICdsaXQnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBxdGktaXRlbS1ib2R5IG5vZGUgY29udGFpbnMgdGhlIHRleHQsIGdyYXBoaWNzLCBtZWRpYSBvYmplY3RzIGFuZCBpbnRlcmFjdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgaXRlbSdzIGNvbnRlbnQgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhvdyBpdCBpcyBzdHJ1Y3R1cmVkLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zcGhwbzZsdTZ6cWlcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQHNsb3QgLSBpdGVtIGJvZHkgY29udGVudC5cbiAqIEBzbG90IHF0aS1ydWJyaWMtYmxvY2sgLSB0aGUgcXRpIHJ1YnJpYyBibG9jayBpcyBwbGFjZWQgYWJvdmUgdGhlIGl0ZW1cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktaXRlbS1ib2R5JylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aUl0ZW1Cb2R5IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGVzO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicXRpLXJ1YnJpYy1ibG9ja1wiPjwvc2xvdD48c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaXRlbS1ib2R5JzogUXRpSXRlbUJvZHk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjc3NgXG4gIDpob3N0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5AY3VzdG9tRWxlbWVudCgncXRpLXByb21wdCcpXG5leHBvcnQgY2xhc3MgUXRpUHJvbXB0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8vIGlmIHByb21wdHMgYXJlIGluIGludGVyYWN0aW9ucyB0aGV5IHNob3VsZCBoYXZlIGEgc2xvdCwgc28gdGhlIHByb21wdCBoYXMgdG8gZ28gdGhlcmVcbiAgICAvLyBpZiBwcm9tcHQgaXMgaW4gdGhlIGJvZHksIHRoZW4ganVzdCBkaXNwbGF5IHRoZSBwcm9tcHQgdGhlcmUuXG4gICAgLy8gQSBiZXR0ZXIgY2hlY2sgd291bGQgYmUgdGhlIGxhdHRlciwgYnV0IG5vdCBjYW4ndCBnZXQgdGhyb3VnaCB0aGUgc2hhZG93cm9vdCB0byBmaW5kIHRoZSBzbG90XG4gICAgY29uc3QgaW5JbnRlcmFjdGlvbiA9IHRoaXMucGFyZW50RWxlbWVudC50YWdOYW1lLmVuZHNXaXRoKCdJTlRFUkFDVElPTicpO1xuICAgIGluSW50ZXJhY3Rpb24gJiYgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncHJvbXB0Jyk7XG4gICAgLy8gY29uc3QgcHJvbXB0U2xvdCA9IHRoaXMucGFyZW50RWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT0ncHJvbXB0J11cIik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXByb21wdCc6IFF0aVByb21wdDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zdHlsZXNoZWV0JylcbmV4cG9ydCBjbGFzcyBRdGlTdHlsZXNoZWV0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHByaXZhdGUgc3R5bGVMaW5rOiBIVE1MU3R5bGVFbGVtZW50IHwgSFRNTExpbmtFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgaWYgKGxpbmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIHN0eWxlcy5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICBzdHlsZXMudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgIHN0eWxlcy5ocmVmID0gbGluaztcbiAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIHRoaXMuc3R5bGVMaW5rID0gc3R5bGVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICBzdHlsZXMudGV4dENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50O1xuICAgICAgaXRlbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgdGhpcy5zdHlsZUxpbmsgPSBzdHlsZXM7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpO1xuICAgIGlmICh0aGlzLnN0eWxlTGluayAmJiB0aGlzLnN0eWxlTGluay5wYXJlbnRFbGVtZW50ID09PSB0aGlzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpdGVtLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVMaW5rKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgcmVtb3ZlIHN0eWxlc2hlZXQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXN0eWxlc2hlZXQnOiBRdGlTdHlsZXNoZWV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU91dGNvbWVEZWNsYXJhdGlvbiBleHRlbmRzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2V4dGVybmFsLXNjb3JlZCcgfSkgZXh0ZXJuYWxTY29yZWQ6IFN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgZ2V0IGludGVycG9sYXRpb25UYWJsZSgpOiBNYXA8bnVtYmVyLCBudW1iZXI+IHwgbnVsbCB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcnBvbGF0aW9uLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGFibGUucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKSkge1xuICAgICAgICBpZiAoIWVudHJ5LmdldEF0dHJpYnV0ZSgnc291cmNlLXZhbHVlJykgJiYgZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NvdXJjZS12YWx1ZSBvciB0YXJnZXQtdmFsdWUgaXMgbWlzc2luZyBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSk7XG4gICAgICAgIGlmIChpc05hTihzb3VyY2VWYWx1ZSkgfHwgaXNOYU4odGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBub3QgYSBudW1iZXIgaW4gcXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnNldChzb3VyY2VWYWx1ZSwgdGFyZ2V0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGU6IE91dGNvbWVWYXJpYWJsZSA9IHtcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5LFxuICAgICAgYmFzZVR5cGU6IHRoaXMuYmFzZVR5cGUsXG4gICAgICB0eXBlOiAnb3V0Y29tZScsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGludGVycG9sYXRpb25UYWJsZTogdGhpcy5pbnRlcnBvbGF0aW9uVGFibGVcbiAgICB9O1xuICAgIG91dGNvbWVWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhvdXRjb21lVmFyaWFibGUpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItdmFyaWFibGUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgdmFyaWFibGU6IG91dGNvbWVWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nOiBRdGlPdXRjb21lRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS12YXJpYWJsZWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmFsdWVzKHZhcmlhYmxlOiBWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD4pIHtcbiAgICBjb25zdCBodG1sVmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1kZWZhdWx0LXZhbHVlID4gcXRpLXZhbHVlJykpO1xuXG4gICAgaWYgKGh0bWxWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gaHRtbFZhbHVlcy5tYXAobiA9PiBuLmlubmVySFRNTCk7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZXMubGVuZ3RoID4gMSB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJyB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXNbMF07XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXZhcmlhYmxlZGVjbGFyYXRpb24nOiBRdGlWYXJpYWJsZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlNYXBwaW5nIH0gZnJvbSAnLi4vLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hcHBpbmcvcXRpLW1hcHBpbmcnO1xuaW1wb3J0IHsgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRGVjbGFyYXRpb24gZXh0ZW5kcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBjYXJkaW5hbGl0eTogQ2FyZGluYWxpdHk7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHN0YXRpYyBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLml0ZW1Db250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdGhpcy5pZGVudGlmaWVyKT8udmFsdWU7XG4gICAgcmV0dXJuIGh0bWxgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMil9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZTogUmVzcG9uc2VWYXJpYWJsZSA9IHtcbiAgICAgIGJhc2VUeXBlOiB0aGlzLmJhc2VUeXBlLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgY29ycmVjdFJlc3BvbnNlOiB0aGlzLmNvcnJlY3RSZXNwb25zZSxcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5IHx8ICdzaW5nbGUnLFxuICAgICAgbWFwcGluZzogdGhpcy5tYXBwaW5nLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB0eXBlOiAncmVzcG9uc2UnLFxuICAgICAgY2FuZGlkYXRlUmVzcG9uc2U6IG51bGxcbiAgICB9O1xuICAgIHJlc3BvbnNlVmFyaWFibGUudmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZXMocmVzcG9uc2VWYXJpYWJsZSk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyB2YXJpYWJsZTogcmVzcG9uc2VWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb3JyZWN0UmVzcG9uc2UoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICBpZiAoY29ycmVjdFJlc3BvbnNlKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjb3JyZWN0UmVzcG9uc2UucXVlcnlTZWxlY3RvckFsbCgncXRpLXZhbHVlJyk7XG4gICAgICBpZiAodGhpcy5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzWzBdLnRleHRDb250ZW50O1xuICAgICAgICB2YWx1ZXNbMF0ucmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlc1tpXS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgdmFsdWVzW2ldLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBtYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1tYXBwaW5nJykgYXMgUXRpTWFwcGluZztcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nOiBRdGlSZXNwb25zZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbycpXG5leHBvcnQgY2xhc3MgUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbyBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvLyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAvLyAgIHNsb3Qge1xuICAvLyAgICAgZGlzcGxheTogaGlkZGVuO1xuICAvLyAgIH1cbiAgLy8gYDtcbiAgLy8gb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAvLyAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+IGA7XG4gIC8vIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbyc6IFF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm87XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktY29udGVudC1ib2R5JylcbmV4cG9ydCBjbGFzcyBRdGlDb250ZW50Qm9keSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jb250ZW50LWJvZHknOiBRdGlDb250ZW50Qm9keTtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVicmljLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlSdWJyaWNCbG9jayBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgb3ZlcnJpZGUgaWQ7IC8vID1cInF0aUFzcGVjdEluaG91ZFJ1YnJpY0Jsb2NrXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdXNlOiAnaW5zdHJ1Y3Rpb25zJyB8ICdzY29yaW5nJyB8ICduYXZpZ2F0aW9uJzsgLy8gID0gXCJzY29yaW5nXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdmlldzogJ2F1dGhvcicgfCAnY2FuZGlkYXRlJyB8ICdwcm9jdG9yJyB8ICdzY29yZXInIHwgJ3Rlc3RDb25zdHJ1Y3RvcicgfCAndHV0b3InO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGNhc2UgJ3F0aS1ydWJyaWMtZGlzY3JldGlvbmFyeS1wbGFjZW1lbnQnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1ydWJyaWMtYmxvY2snKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncXRpLXJ1YnJpYy1pbmxpbmUnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyBieSBkZWZhdWx0IHB1dCB0aGlzIGluIGEgc2xvdCBpbiB0aGUgaXRlbS1ib2R5XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLXJ1YnJpYy1ibG9jaycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ydWJyaWMtYmxvY2snOiBRdGlSdWJyaWNCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IFByb3BlcnR5VmFsdWVNYXAsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlGZWVkYmFja0Jsb2NrIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAub24ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cImZlZWRiYWNrICR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1Nob3dGZWVkYmFjayh0aGlzLm91dGNvbWVJZGVudGlmaWVyKTtcbiAgfVxufVxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWJsb2NrJzogUXRpRmVlZGJhY2tCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBJc051bGxPclVuZGVmaW5lZCB9IGZyb20gJy4uL2ludGVybmFsL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUZlZWRiYWNrIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnc2hvdy1oaWRlJyB9KVxuICBwcm90ZWN0ZWQgc2hvd0hpZGU6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ291dGNvbWUtaWRlbnRpZmllcicgfSlcbiAgcHVibGljIG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHByb3RlY3RlZCBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzaG93U3RhdHVzOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFF0aUZlZWRiYWNrPigncXRpLXJlZ2lzdGVyLWZlZWRiYWNrJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tTaG93RmVlZGJhY2sob3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZykgeyAgICBcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldE91dGNvbWUob3V0Y29tZUlkZW50aWZpZXIpO1xuXG4gICAgaWYgKHRoaXMub3V0Y29tZUlkZW50aWZpZXIgIT09IG91dGNvbWVJZGVudGlmaWVyIHx8ICFvdXRjb21lVmFyaWFibGUpIHJldHVybjtcbiAgICBsZXQgaXNGb3VuZCA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGNvbWVWYXJpYWJsZS52YWx1ZSkpIHtcbiAgICAgIGlzRm91bmQgPSBvdXRjb21lVmFyaWFibGUudmFsdWUuaW5jbHVkZXModGhpcy5pZGVudGlmaWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNGb3VuZCA9XG4gICAgICAgICghSXNOdWxsT3JVbmRlZmluZWQodGhpcy5pZGVudGlmaWVyKSAmJlxuICAgICAgICAgICFJc051bGxPclVuZGVmaW5lZChvdXRjb21lVmFyaWFibGU/LnZhbHVlKSAmJlxuICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9PT0gb3V0Y29tZVZhcmlhYmxlLnZhbHVlKSB8fFxuICAgICAgICBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGZWVkYmFjayhpc0ZvdW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0ZlZWRiYWNrKHZhbHVlOiBib29sZWFuKSB7ICAgIFxuICAgIHRoaXMuc2hvd1N0YXR1cyA9ICh2YWx1ZSAmJiB0aGlzLnNob3dIaWRlID09PSAnc2hvdycpIHx8ICghdmFsdWUgJiYgdGhpcy5zaG93SGlkZSA9PT0gJ2hpZGUnKSA/ICdvbicgOiAnb2ZmJzsgICAgXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdCgwLjEpLnJlcGxhY2UoL1xcZC9nLCAnJyk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgPSAobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgLy8gY2hlY2sgaWYgdHlwZSBpcyBzdHJpbmdcbiAgaWYgKHR5cGVvZiBudW1iZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICBjb25zdCBkU2VwID0gZGVjaW1hbFNlcGFyYXRvcigpO1xuICBpZiAoZFNlcCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG51bWJlci50b0xvY2FsZVN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoZFNlcCwgJy4nKTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIElzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWlubGluZScpXG5leHBvcnQgY2xhc3MgUXRpRmVlZGJhY2tJbmxpbmUgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWlubGluZSc6IFF0aUZlZWRiYWNrSW5saW5lO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbW9kYWwtZmVlZGJhY2snKVxuZXhwb3J0IGNsYXNzIFF0aU1vZGFsRmVlZGJhY2sgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1vZGFsLWZlZWRiYWNrJzogUXRpTW9kYWxGZWVkYmFjaztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBpZkRlZmluZWQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9pZi1kZWZpbmVkLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVmLCBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgLy8gcHVibGljIHN0YXRpYyByb3dIZWlnaHRDbGFzcyA9IFtdO1xuXG4gIHRleHRhcmVhUmVmID0gY3JlYXRlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCk7XG5cbiAgLyoqIGV4cGVjdGVkIGxlbmd0aCBpcyBtYXBwZWQgdG8gdGhlIHByb3BlcnR5IG1heGxlbmd0aCBvbiB0aGUgdGV4dGFyZWEgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgLyoqIHRleHQgYXBwZWFyaW5nIGluIHRoZSBleHRlbmRlZC10ZXh0LW50ZXJhY3Rpb24gaWYgaXQgaXMgZW1wdHkgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChjbGFzc05hbWUuc3RhcnRzV2l0aCgncXRpLWhlaWdodC1saW5lcycpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaGVpZ2h0LWxpbmVzLScsICcnKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dGFyZWFSZWYpIHtcbiAgICAgICAgICB0aGlzLnRleHRhcmVhUmVmLnZhbHVlLnJvd3MgPSBwYXJzZUludChuclJvd3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICAvKiBQSzogZGlzcGxheSBob3N0IGFzIGJsb2NrLCBlbHNlIGRlc2lnbiB3aWxsIGJlIGNvbGxhcHNlZCAqL1xuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dGFyZWEge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHRleHRhcmVhXG4gICAgICBwYXJ0PVwidGV4dGFyZWFcIlxuICAgICAgJHtyZWYodGhpcy50ZXh0YXJlYVJlZil9XG4gICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIEBrZXlkb3duPVwiJHtldmVudCA9PiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1cIlxuICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICBAY2hhbmdlPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIiR7aWZEZWZpbmVkKHRoaXMucGxhY2Vob2xkZXJUZXh0ID8gdGhpcy5wbGFjZWhvbGRlclRleHQgOiB1bmRlZmluZWQpfVwiXG4gICAgICBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIlxuICAgICAgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAudmFsdWU9JHt0aGlzLl92YWx1ZX1cbiAgICA+PC90ZXh0YXJlYT5gO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRleHRDaGFuZ2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuc2V0RW1wdHlBdHRyaWJ1dGUoaW5wdXQudmFsdWUpO1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gaW5wdXQudmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZShpbnB1dC52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0RW1wdHlBdHRyaWJ1dGUodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2VtcHR5JywgdGV4dCA9PT0gJycgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbic6IFF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEludGVyYWN0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqIGRpc2FibGVkIHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiogcmVhZG9ubHkgc2hvdWxkIGJlIGV4cG9zZWQgdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIGFjY2Vzc2libGUgYXMgcHJvcGVydHkgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seSA9IGZhbHNlO1xuXG4gIGFic3RyYWN0IHZhbGlkYXRlKCk6IGJvb2xlYW47XG4gIGFic3RyYWN0IHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPik7XG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBjb25zb2xlLndhcm4oJ2NvcnJlY3RSZXNwb25zZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhdmVSZXNwb25zZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgIHJlc3BvbnNlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVRleHRFbnRyeUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2V4cGVjdGVkLWxlbmd0aCcgfSkgZXhwZWN0ZWRMZW5ndGg6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BhdHRlcm4tbWFzaycgfSkgcGF0dGVybk1hc2s6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BsYWNlaG9sZGVyLXRleHQnIH0pIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29ycmVjdFZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfc2l6ZSA9IDU7XG5cbiAgaW5wdXRSZWYgPSBjcmVhdGVSZWY8SFRNTElucHV0RWxlbWVudD4oKTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnKVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgY2xhc3Nlczogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3F0aS1pbnB1dC13aWR0aCcpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaW5wdXQtd2lkdGgtJywgJycpO1xuICAgICAgICB0aGlzLl9zaXplID0gcGFyc2VJbnQobnJSb3dzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIFtwYXJ0PSdjb3JyZWN0J10ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb3JyZWN0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgcGFydD1cImNvcnJlY3RcIj4ke3RoaXMuX2NvcnJlY3RWYWx1ZX08L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBwYXJ0PVwiaW5wdXRcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgdHlwZT1cIiR7dGhpcy5wYXR0ZXJuTWFzayA9PSAnWzAtOV0qJyA/ICdudW1iZXInIDogJ3RleHQnfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiJHtpZkRlZmluZWQodGhpcy5wbGFjZWhvbGRlclRleHQgPyB0aGlzLnBsYWNlaG9sZGVyVGV4dCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl92YWx1ZX1cIlxuICAgICAgICBzaXplPVwiJHt0aGlzLl9zaXplfVwiXG4gICAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgLz5cbiAgICBgO1xuICB9XG4gIC8vXG4gIC8vIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nOiBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8vIEB3YXRjaCBkZWNvcmF0b3Jcbi8vXG4vLyBSdW5zIHdoZW4gYW4gb2JzZXJ2ZWQgcHJvcGVydHkgY2hhbmdlcywgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy5cbi8vXG4vLyBUbyB3YWl0IGZvciBhbiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydFxuLy8gd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuLy9cbi8vIFVzYWdlOlxuLy9cbi8vICBAd2F0Y2goJ3Byb3BOYW1lJylcbi8vICBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuLy8gICAgLi4uXG4vLyAgfVxuXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBMaXZlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGl2ZVF1ZXJ5KHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgb3B0aW9ucz86IExpdmVRdWVyeU9wdGlvbnMpIHtcbiAgbGV0IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPExpdmVRdWVyeU9wdGlvbnM+ID0ge1xuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50PihcbiAgICBwcm90bzogRWxlbUNsYXNzLFxuICAgIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+XG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgY29ubmVjdGVkQ2FsbGJhY2ssIGRpc2Nvbm5lY3RlZENhbGxiYWNrIH0gPSBwcm90bztcblxuICAgIHByb3RvLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c1RvV2F0Y2ggPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSk7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4gICAgICAgICAgY29uc3QgYWRkZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcykubWFwKGUgPT4gZSBhcyBFbGVtZW50KTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIGFkZGVkTm9kZXMuZmluZChuID0+IGVsZW1lbnRzVG9XYXRjaC5pbmNsdWRlcyhuKSkpIHtcbiAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgZWxlbWVudHNBZGRlZCA9IHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSA/PyBbXTtcbiAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShBcnJheS5mcm9tKGVsZW1lbnRzQWRkZWQpLCBbXSk7XG4gICAgfTtcblxuICAgIHByb3RvLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHRleHRJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdxdGktaG90dGV4dC1pbnRlcmFjdGlvbicsICcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgPHNsb3Q+PC9zbG90PmA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJzogUXRpSG90dGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi4vY2hvaWNlL3F0aS1jaG9pY2UnO1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENob2ljZXMgZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudHM6IFF0aUNob2ljZVtdID0gW107XG5cbiAgLyoqIHRoZSBtaW5pbWFsIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgLyoqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSwgdGhlIG90aGVyIG9wdGlvbnMgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIG1heCBvcHRpb25zIGlzIGNoZWNrZWQgKi9cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSAxO1xuXG4gIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikgPT5cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLnJlYWRvbmx5ID0gcmVhZG9ubHkpKTtcblxuICBAd2F0Y2goJ21heENob2ljZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVNYXhDaG9pY2VzQ2hhbmdlID0gKCkgPT4gdGhpcy5fZGV0ZXJtaW5lSW5wdXRUeXBlKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWxvb3NlLWNob2ljZScsIHRoaXMuX2xvb3NlQ2hvaWNlRWxlbWVudCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuclNlbGVjdGVkID0gdGhpcy5fY2hvaWNlRWxlbWVudHMucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xuICAgICAgcmV0dXJuIGFjYyArICh2YWwuY2hlY2tlZCA/IDEgOiAwKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gbnJTZWxlY3RlZCA+PSB0aGlzLm1pbkNob2ljZXM7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCByZXNwb25zZVZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlVmFsdWUpID8gcmVzcG9uc2VWYWx1ZSA6IFtyZXNwb25zZVZhbHVlXTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgIGNlLmNoZWNrZWQgPSByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyB0cnVlIDogZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHJlc3BvbnNlVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgaWYgKHJlc3BvbnNlVmFsdWUgPT0gJycpIHtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgICBjZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtY29ycmVjdC1yZXNwb25zZScpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgY2Uuc2V0QXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnLCByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9vc2VDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMgPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5maWx0ZXIoY2ggPT4gY2ggIT09IGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGV0ZXJtaW5lSW5wdXRUeXBlKCkge1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2hvaWNlRWxlbWVudCA9PiB7XG4gICAgICB0aGlzLl9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudDogUXRpQ2hvaWNlKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgLy8gaWYgemVybyB0aGVuIHlvdSBjYW4gY2hvb3NlIGhvdyBtdWNoIHlvdSB3YW50XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdyYWRpbycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdjaGVja2JveCcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcihldmVudDogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSAxKSB7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50c1xuICAgICAgICAuZmlsdGVyKGNlID0+IGNlLmlkZW50aWZpZXIgIT09IGV2ZW50LmRldGFpbC5pZGVudGlmaWVyKVxuICAgICAgICAuZm9yRWFjaChjZSA9PiB7XG4gICAgICAgICAgY2UuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkZW50aWZpZXJzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNlID0+IGNlLmNoZWNrZWQpLm1hcChjZSA9PiBjZS5pZGVudGlmaWVyKTtcblxuICAgIGlmICh0aGlzLm1heENob2ljZXMgPiAxKSB7XG4gICAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSBzZWxlY3RlZElkZW50aWZpZXJzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9ICFjZS5jaGVja2VkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJZGVudGlmaWVyc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICB0aGlzLnNhdmVSZXNwb25zZShyZXN1bHQpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuaW50ZXJmYWNlIE9wdGlvblR5cGUge1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBpbnB1dFdpZHRoQ2xhc3MgPSBbXG4gICAgJycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0yJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC00JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTYnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTUnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMjAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNzInXG4gIF07XG5cbiAgQHN0YXRlKCkgb3B0aW9uczogT3B0aW9uVHlwZVtdID0gW107XG5cbiAgQHN0YXRlKCkgY29ycmVjdE9wdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0YS1wcm9tcHQnLCB0eXBlOiBTdHJpbmcgfSlcbiAgZGF0YVByb21wdDogc3RyaW5nID0gJ3NlbGVjdCc7XG5cbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2VsZWN0IHBhcnQ9XCJzZWxlY3RcIiBAY2hhbmdlPVwiJHt0aGlzLmNob2ljZVNlbGVjdGVkfVwiID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIiA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCI+XG4gICAgICAgICR7dGhpcy5vcHRpb25zLm1hcChcbiAgICAgICAgICBvcHRpb24gPT4gaHRtbGBcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIke29wdGlvbi52YWx1ZX1cIiA/c2VsZWN0ZWQ9XCIke29wdGlvbi5zZWxlY3RlZH1cIj4ke3Vuc2FmZUhUTUwob3B0aW9uLnRleHRDb250ZW50KX08L29wdGlvbj5cbiAgICAgICAgICBgXG4gICAgICAgICl9XG4gICAgICA8L3NlbGVjdD5cblxuICAgICAgJHt1bnNhZmVIVE1MKHRoaXMuY29ycmVjdE9wdGlvbil9XG4gICAgYDtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWlubGluZS1jaG9pY2UnKSk7XG4gICAgdGhpcy5vcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0Q29udGVudDogdGhpcy5kYXRhUHJvbXB0LFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIC4uLmNob2ljZXMubWFwKGNob2ljZSA9PiAoe1xuICAgICAgICB0ZXh0Q29udGVudDogY2hvaWNlLmlubmVySFRNTCxcbiAgICAgICAgdmFsdWU6IGNob2ljZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICBdO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi5zZWxlY3RlZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uID8gc2VsZWN0ZWRPcHRpb24udmFsdWUgIT09ICcnIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiAoeyAuLi5vcHRpb24sIHNlbGVjdGVkOiBpID09PSAwIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIHZhbHVlID09PSBvcHRpb24udmFsdWUgJiYgKG9wdGlvbi5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSBgPHNwYW4gcGFydD1cImNvcnJlY3Qtb3B0aW9uXCI+JHtcbiAgICAgIHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKS50ZXh0Q29udGVudFxuICAgIH08L3NwYW4+YDtcbiAgfVxuXG4gIHB1YmxpYyBjaG9pY2VTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvblZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvblZhbHVlIH0pKTtcbiAgICB0aGlzLnNhdmVSZXNwb25zZShzZWxlY3RlZE9wdGlvblZhbHVlKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic6IFF0aUlubGluZUNob2ljZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9xdGktY2hvaWNlLWludGVyYWN0aW9uLnN0eWxlcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBDaG9pY2VJbnRlcmFjdGlvbi5UeXBlIChxdGktY2hvaWNlLWludGVyYWN0aW9uKSBpbnRlcmFjdGlvbiBwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgY2hvaWNlcyB0byB0aGUgY2FuZGlkYXRlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIDxxdGktc2ltcGxlLWNob2ljZT4gbXVzdCBiZSBwbGFjZWQuXG4gKiBAc2xvdCBwcm9tcHQgLSBzbG90IHdoZXJlIHRoZSBwcm9tcHQgaXMgcGxhY2VkLlxuICovXG5cbkBjdXN0b21FbGVtZW50KCdxdGktY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBzdGF0aWMgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlcztcblxuICAvKiogb3JpZW50YXRpb24gb2YgY2hvaWNlcyAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD48c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nOiBRdGlDaG9pY2VJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG4vLyBpbXBvcnQgY29tcG9uZW50U3R5bGVzIGZyb20gJy4uLy4uL3V0aWxpdGllcy9zdHlsZXMvY29tcG9uZW50LnN0eWxlcyc7XG5cbi8qICR7Y29tcG9uZW50U3R5bGVzfSAqL1xuZXhwb3J0IGRlZmF1bHQgY3NzYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC8vIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICB9XG5gO1xuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZU1hcCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBtYXBSZXNwb25zZSwgbWFwUmVzcG9uc2VQb2ludCwgbWF0Y2hDb3JyZWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdGVtcGxhdGUtc3RyaW5ncyc7XG5pbXBvcnQgeyB0eXBlIFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZS9xdGktcnVsZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZycpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdGlSZXNwb25zZVByb2Nlc3NpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IHJ1bGVzID0gWy4uLnRoaXMuY2hpbGRyZW5dIGFzIFF0aVJ1bGVbXTtcblxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgcnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVNYXA8YW55PiB8IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ3RlbXBsYXRlJykpIHtcbiAgICAgIGNvbnN0IHNwbGl0dGVkVGVtcGxhdGVOYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3RlbXBsYXRlJykhLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZU5hbWUgPSBzcGxpdHRlZFRlbXBsYXRlTmFtZVtzcGxpdHRlZFRlbXBsYXRlTmFtZS5sZW5ndGggLSAxXS5yZXBsYWNlKCcueG1sJywgJycpO1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSAnJztcbiAgICAgIHN3aXRjaCAodGVtcGxhdGVOYW1lKSB7XG4gICAgICAgIGNhc2UgJ21hcF9yZXNwb25zZSc6IHtcbiAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRoaXMuZnJhZ21lbnRGcm9tU3RyaW5nKG1hcFJlc3BvbnNlKS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbWFwX3Jlc3BvbnNlX3BvaW50Jzoge1xuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWFwUmVzcG9uc2VQb2ludCkuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21hdGNoX2NvcnJlY3QnOlxuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWF0Y2hDb3JyZWN0KS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmcmFnbWVudEZyb21TdHJpbmcoc3RySFRNTDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHN0ckhUTUwpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJzogUXRpUmVzcG9uc2VQcm9jZXNzaW5nO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IG1hdGNoQ29ycmVjdCA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLW1hdGNoPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgICA8cXRpLWNvcnJlY3QgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktY29ycmVjdD5cbiAgICAgIDwvcXRpLW1hdGNoPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MTwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4wPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWVsc2U+XG4gIDwvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbjwvcXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+YDtcblxuZXhwb3J0IGNvbnN0IG1hcFJlc3BvbnNlID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktaXMtbnVsbD5cbiAgICAgICAgPHF0aS12YXJpYWJsZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS12YXJpYWJsZT5cbiAgICAgIDwvcXRpLWlzLW51bGw+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4wLjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtaWY+XG4gICAgPHF0aS1yZXNwb25zZS1lbHNlPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1tYXAtcmVzcG9uc2UgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+IDwvcXRpLW1hcC1yZXNwb25zZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWVsc2U+XG4gIDwvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbjwvcXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+YDtcblxuZXhwb3J0IGNvbnN0IG1hcFJlc3BvbnNlUG9pbnQgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1pcy1udWxsPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgPC9xdGktaXMtbnVsbD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtaWY+XG4gICAgPHF0aS1yZXNwb25zZS1lbHNlPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1tYXAtcmVzcG9uc2UtcG9pbnQgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktbWFwLXJlc3BvbnNlLXBvaW50PlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuIiwgImltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSB9IGZyb20gJ0BjaXRvbGFiL3F0aS1jb21wb25lbnRzL3F0aS1jb21wb25lbnRzJztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC91dGlscyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuLyoqXG4gKiBUaGUgbG9va3VwT3V0Y29tZVZhbHVlIHJ1bGUgc2V0cyB0aGUgdmFsdWUgb2YgYW4gb3V0Y29tZSB2YXJpYWJsZSB0byB0aGUgdmFsdWUgb2J0YWluZWRcbiAqIGJ5IGxvb2tpbmcgdXAgdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGV4cHJlc3Npb24gaW4gdGhlIGxvb2t1cFRhYmxlIGFzc29jaWF0ZWRcbiAqIHdpdGggdGhlIG91dGNvbWUncyBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF0aUxvb2t1cE91dGNvbWVWYWx1ZSBleHRlbmRzIFF0aVJ1bGUge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIGdldCBjaGlsZEV4cHJlc3Npb24oKTogUXRpRXhwcmVzc2lvbjxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPHN0cmluZz47XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpOiBudW1iZXIge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpIGFzIE91dGNvbWVWYXJpYWJsZTtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG91dGNvbWVWYXJpYWJsZS5pbnRlcnBvbGF0aW9uVGFibGUpIHtcbiAgICAgIHZhbHVlID0gb3V0Y29tZVZhcmlhYmxlLmludGVycG9sYXRpb25UYWJsZS5nZXQocGFyc2VJbnQodGhpcy5jaGlsZEV4cHJlc3Npb24uY2FsY3VsYXRlKCkpKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignbG9va3VwT3V0Y29tZVZhbHVlOiB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgb3V0Y29tZUlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgICAgICB2YWx1ZTogY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlJywgUXRpTG9va3VwT3V0Y29tZVZhbHVlKTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlJzogUXRpTG9va3VwT3V0Y29tZVZhbHVlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJ1bGUnKVxuZXhwb3J0IGNsYXNzIFF0aVJ1bGUgZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgUXRpUnVsZUJhc2Uge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXRpUnVsZUJhc2Uge1xuICBwcm9jZXNzKCk6IGFueTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJ1bGUnOiBRdGlSdWxlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlQ29uZGl0aW9uIGV4dGVuZHMgUXRpUnVsZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCkge1xuICAgIGNvbnN0IGJyYW5jaGVzID0gWy4uLnRoaXMuY2hpbGRyZW5dIGFzIFF0aUV4cHJlc3Npb248YW55PltdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBicmFuY2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYnJhbmNoID0gYnJhbmNoZXNbaV07XG5cbiAgICAgIGlmIChicmFuY2guY2FsY3VsYXRlKCkpIHtcbiAgICAgICAgKGJyYW5jaCBhcyB1bmtub3duIGFzIFF0aVJ1bGUpLnByb2Nlc3MoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWNvbmRpdGlvbicsIFF0aVJlc3BvbnNlQ29uZGl0aW9uKTtcbiIsICJpbXBvcnQgeyBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24sIFF0aUV4cHJlc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSwgUXRpUnVsZUJhc2UgfSBmcm9tICcuLi9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlTZXRPdXRjb21lVmFsdWUgZXh0ZW5kcyBRdGlSdWxlIHtcbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKSB7XG4gICAgY29uc3Qgb3V0Y29tZUlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxzdHJpbmc+O1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBRdGlTZXRPdXRjb21lVmFsdWVSdWxlKGV4cHJlc3Npb24pO1xuICAgIGNvbnN0IHZhbHVlID0gcnVsZS5wcm9jZXNzKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBvdXRjb21lSWRlbnRpZmllcixcbiAgICAgICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWUubWFwKCh2OiBzdHJpbmcpID0+IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHYpKVxuICAgICAgICAgICAgOiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlTZXRPdXRjb21lVmFsdWVSdWxlPFQ+IGltcGxlbWVudHMgUXRpUnVsZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4cHJlc3Npb246IFF0aUV4cHJlc3Npb25CYXNlPFQ+KSB7fVxuXG4gIHByb2Nlc3MoKTogYW55IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbiA/IHRoaXMuZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSA6IG51bGw7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdzZXRPdXRjb21lVmFsdWU6IHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIFF0aVNldE91dGNvbWVWYWx1ZSk7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUvcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VFbHNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWJSdWxlcygpOiBRdGlSdWxlW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3Qgc3ViUnVsZXMgPSB0aGlzLmdldFN1YlJ1bGVzKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJSdWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3ViUnVsZSA9IHN1YlJ1bGVzW2ldO1xuICAgICAgc3ViUnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWVsc2UnLCBRdGlSZXNwb25zZUVsc2UpO1xuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpUmVzcG9uc2VJZiB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1pZic7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUVsc2VJZiBleHRlbmRzIFF0aVJlc3BvbnNlSWYge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgJHtzdXBlci5yZW5kZXIoKX1gO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWVsc2UtaWYnLCBRdGlSZXNwb25zZUVsc2VJZik7XG4iLCAiaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi8uLi9xdGktcnVsZS9xdGktcnVsZSc7XG5pbXBvcnQgeyBRdGlSZXNwb25zZUVsc2UgfSBmcm9tICcuLi9xdGktcmVzcG9uc2UtZWxzZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUlmIGV4dGVuZHMgUXRpUmVzcG9uc2VFbHNlIHtcbiAgcHVibGljIG92ZXJyaWRlIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+O1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4cHJlc3Npb24uY2FsY3VsYXRlKCkgYXMgYm9vbGVhbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFN1YlJ1bGVzKCk6IFF0aVJ1bGVbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1pZicsIFF0aVJlc3BvbnNlSWYpO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUsIFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgUXRpTXVsdGlwbGUgfSBmcm9tICcuL3F0aS1tdWx0aXBsZS9xdGktbXVsdGlwbGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF0aUV4cHJlc3Npb25CYXNlPFQ+IHtcbiAgLy8gZ2V0IGFzc2Vzc21lbnRJdGVtKCk6IFF0aUFzc2Vzc21lbnRJdGVtO1xuXG4gIC8vIGdldFZhcmlhYmxlcygpOiBWYXJpYWJsZURlY2xhcmF0aW9uPG51bWJlciB8IHN0cmluZyB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBudWxsPltdO1xuICBjYWxjdWxhdGUoKTogUmVhZG9ubHk8VD47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlFeHByZXNzaW9uPFQ+IGV4dGVuZHMgTGl0RWxlbWVudCBpbXBsZW1lbnRzIFF0aUV4cHJlc3Npb25CYXNlPFQ+IHtcbiAgQHN0YXRlKClcbiAgcHJvdGVjdGVkIHJlc3VsdDogYW55O1xuXG4gIC8vIGhpZGUgdGhlIHNsb3Qgd2l0aCBjc3NcbiAgc3RhdGljIHN0eWxlcyA9IGNzc2BcbiAgICBzbG90IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8cHJlPiR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZXN1bHQsIG51bGwsIDIpfTwvcHJlPlxuICAgICAgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PFQ+IHtcbiAgICB0aGlzLnJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0KCk7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJlc3VsdCgpOiBSZWFkb25seTxUPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldCBhc3Nlc3NtZW50SXRlbSgpOiBRdGlBc3Nlc3NtZW50SXRlbSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzID0gKCk6IFZhcmlhYmxlRGVjbGFyYXRpb248bnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSB8IG51bGw+W10gPT5cbiAgICAvLyBGSVhNRTogaWYgdGhpcyBpdHNlbGYgaXMgbXVsdGlwbGUsIHRoaXMgd2lsbCBuZXZlciBlbnRlciB0aGUgcXRpLW11bHRpcGxlIHN3aXRjaFxuICAgIC8vIFNlZSB0aGlzIGV4YW1wbGUgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tLzFFZFRlY2gvcXRpLWV4YW1wbGVzL2Jsb2IvbWFzdGVyL3F0aXYzLWV4YW1wbGVzL3BhY2thZ2luZy9pdGVtcy9FeGFtcGxlMDUtZmVlZGJhY2tCbG9jay1hZGFwdGl2ZS54bWxcblxuICAgIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbilcbiAgICAgIC5tYXAoKGU6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgc3dpdGNoIChlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3F0aS1iYXNlLXZhbHVlJzoge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmFzZVR5cGU6IGUuZ2V0QXR0cmlidXRlKCdiYXNlLXR5cGUnKSxcbiAgICAgICAgICAgICAgdmFsdWU6IGUudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJ1xuICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktdmFyaWFibGUnOiB7XG4gICAgICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncXRpLW11bHRpcGxlJzoge1xuICAgICAgICAgICAgY29uc3QgbXVsdGlwbGUgPSBlIGFzIFF0aU11bHRpcGxlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbXVsdGlwbGUuZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiAnJyxcbiAgICAgICAgICAgICAgICBiYXNlVHlwZTogdmFsdWVzWzBdLmJhc2VUeXBlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXMubWFwKHYgPT4gdi52YWx1ZSksXG4gICAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdtdWx0aXBsZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJ1xuICAgICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncXRpLWNvcnJlY3QnOiB7XG4gICAgICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFJlc3BvbnNlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmFzZVR5cGU6IHJlc3BvbnNlVmFyaWFibGUuYmFzZVR5cGUsXG4gICAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZSxcbiAgICAgICAgICAgICAgY2FyZGluYWxpdHk6IHJlc3BvbnNlVmFyaWFibGUuY2FyZGluYWxpdHlcbiAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gYWRkZWQgZm9yIHVzZSBvZiBxdGktZXF1YWwtcm91bmRlZFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IGUgYXMgUXRpRXhwcmVzc2lvbjxudW1iZXI+O1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV4cHJlc3Npb24uZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmFzZVR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZSdcbiAgICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkZWZhdWx0IG5vdCBzdWZmaWNpZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG59XG4iLCAiaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0KCk7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3VsdCgpOiBSZWFkb25seTxib29sZWFuPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5leHBvcnQgY2xhc3MgUXRpQW5kIGV4dGVuZHMgcXRpQW5kTWl4aW4oUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFF0aUNvbmRpdGlvbkV4cHJlc3Npb24+KSB7XG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlQ2hpbGRyZW4oQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuIGFzIHVua25vd24gYXMgUXRpRXhwcmVzc2lvbjxhbnk+W10pKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNb2NrUXRpRXhwcmVzc2lvbjxUPiA9IHsgY2FsY3VsYXRlOiAoKSA9PiBUIH07XG50eXBlIE1vY2tDb25zdHJ1Y3RvciA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIHF0aUFuZE1peGluPFRCYXNlIGV4dGVuZHMgTW9ja0NvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkge1xuICByZXR1cm4gY2xhc3MgTW9ja1F0aUFuZCBleHRlbmRzIEJhc2Uge1xuICAgIHB1YmxpYyBjYWxjdWxhdGVDaGlsZHJlbihjaGlsZHJlbjogQXJyYXk8TW9ja1F0aUV4cHJlc3Npb248YW55Pj4pIHtcbiAgICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgICBjb25zdCB2YWx1ZXMgPSBjaGlsZHJlbi5tYXAoYyA9PiB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGMgYXMgTW9ja1F0aUV4cHJlc3Npb248YW55PjtcbiAgICAgICAgaWYgKCFjb25kaXRpb24uY2FsY3VsYXRlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgUXRpQ29uZGl0aW9uRXhwcmVzc2lvblwiKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBjb25kaXRpb24uY2FsY3VsYXRlKCkgYXMgQm9vbGVhbjtcbiAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdmFsdWUgdG8gYm9vbGVhbiBhbmQgcmV0dXJuIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIHZhbHVlIGluIHF0aS1hbmQsIGV4cGVjdGVkIGJvb2xlYW4nKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB2YWx1ZXMuZXZlcnkoZSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZSA9PT0gJ2Jvb2xlYW4nICYmIGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgUXRpQW5kIH0gZnJvbSAnLi9xdGktYW5kJztcbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWFuZCcsIFF0aUFuZCk7XG5cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFuZCc7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hbmQnOiBRdGlBbmQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEJhc2VUeXBlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcbmV4cG9ydCBjbGFzcyBRdGlCYXNlVmFsdWUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZz4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlID0gJ3N0cmluZyc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy50ZXh0Q29udGVudDtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktYmFzZS12YWx1ZScsIFF0aUJhc2VWYWx1ZSk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpQ29udGFpbnMgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgdHlwZXMgdGhhbiBkaXJlY3RlZFBhaXJcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTIuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24xID0gdmFsdWUxLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgZW51bWVyYWJsZSA9IHByb2plY3Rpb24xLmZpbHRlcih4ID0+IHByb2plY3Rpb24yLmluY2x1ZGVzKHgpKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBlbnVtZXJhYmxlLmxlbmd0aCA+IDA7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB2YWx1ZTEuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ID09PSAnc2luZ2xlJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24xID0gdmFsdWUxLnZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjIgPSB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIHJldHVybiBwcm9qZWN0aW9uMi5pbmNsdWRlcyhwcm9qZWN0aW9uMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICd1bnN1cHBvcnRlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgY29udGFpbnMsIG9ubHkgYmFzZVR5cGU6IGRpcmVjdGVkUGFpciBhbmQgY2FyZGluYWxpdHk6IG11bHRpcGxlIGlzIHN1cHBvcnRlZCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIGNvbnRhaW5zJyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1jb250YWlucycsIFF0aUNvbnRhaW5zKTtcbiIsICJpbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpQ29ycmVjdCBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgZ2V0IGludGVycHJldGF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnaW50ZXJwcmV0YXRpb24nKSB8fCAnJztcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB8fCAnJztcbiAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRSZXNwb25zZShpZGVudGlmaWVyKTtcbiAgICByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZTtcbiAgICBpZiAocmVzcG9uc2VWYXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZS5sZW5ndGggPiAwID8gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2VbMF0gOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlO1xuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1jb3JyZWN0JywgUXRpQ29ycmVjdCk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlFcXVhbFJvdW5kZWQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHJvdW5kaW5nTW9kZTogJ2RlY2ltYWxQbGFjZXMnIHwgJ3NpZ25pZmljYW50RmlndXJlcycgPSAnc2lnbmlmaWNhbnRGaWd1cmVzJztcblxuICBnZXQgZmlndXJlcygpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZpZ3VyZXMnKTtcbiAgICBpZiAoIWF0dHIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG1pc3NpbmcnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWd1cmVzID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoJ2ZpZ3VyZXMnKSB8fCAnMCcpO1xuICAgIGlmIChpc05hTihmaWd1cmVzKSkge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbm90IGEgbnVtYmVyJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZpZ3VyZXMgPCAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBuZWdhdGl2ZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChmaWd1cmVzIDwgMSAmJiB0aGlzLnJvdW5kaW5nTW9kZSA9PT0gJ3NpZ25pZmljYW50RmlndXJlcycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAxIGZvciBSb3VuZGluZ01vZGUgc2lnbmlmaWNhbnRGaWd1cmVzJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZpZ3VyZXM7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodGhpcy5yb3VuZGluZ01vZGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgdmFsdWUyLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMS52YWx1ZSkgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIudmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgZXF1YWwnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh2YWx1ZXNbMF0uYmFzZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgIGNhc2UgJ2Zsb2F0Jzoge1xuICAgICAgICAgIGNvbnN0IGZsb2F0MSA9IHBhcnNlRmxvYXQodmFsdWUxLnZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgY29uc3QgZmxvYXQyID0gcGFyc2VGbG9hdCh2YWx1ZTIudmFsdWUgYXMgc3RyaW5nKTtcblxuICAgICAgICAgIGlmICghaXNOYU4oZmxvYXQxKSAmJiAhaXNOYU4oZmxvYXQyKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSAnc2lnbmlmaWNhbnRGaWd1cmVzJykge1xuICAgICAgICAgICAgICByZXR1cm4gZmxvYXQxLnRvUHJlY2lzaW9uKHRoaXMuZmlndXJlcykgPT09IGZsb2F0Mi50b1ByZWNpc2lvbih0aGlzLmZpZ3VyZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGZsb2F0MSAqIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpKSAvIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpID09PVxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoZmxvYXQyICogTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykpIC8gTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgdmFsdWUgY2Fubm90IGJlIGNhc3RlZCB0byBudW1lcmljIHZhbHVlIGluIGVxdWFsUm91bmRlZCBvcGVyYXRvcjogJHtmbG9hdDF9LCAke2Zsb2F0Mn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHZhbHVlcyBvdGhlciB0aGFuIGZsb2F0IGFuZCBpbnQgY2Fubm90IGJlIHVzZWQgaW4gZXF1YWxSb3VuZGVkIG9wZXJhdG9yLmApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1lcXVhbC1yb3VuZGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZXF1YWwtcm91bmRlZCcsIFF0aUVxdWFsUm91bmRlZCk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUVxdWFsIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB0b2xlcmFuY2VNb2RlOiAnZXhhY3QnIHwgJ3JlbGF0aXZlJyB8ICdhYnNvbHV0ZScgPSAnZXhhY3QnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh0aGlzLnRvbGVyYW5jZU1vZGUgIT09ICdleGFjdCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndG9sZXJhbmNlTW9kZSBpcyBub3Qgc3VwcG9ydGVkIHlldCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgdmFsdWUyLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMS52YWx1ZSkgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIudmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgZXF1YWwnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nLCB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nLCB2YWx1ZTEuYmFzZVR5cGUpO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGktZXF1YWwnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1lcXVhbCcsIFF0aUVxdWFsKTtcbiIsICJpbXBvcnQgeyBCYXNlVHlwZSB9IGZyb20gJy4uLy4uJztcblxuZXhwb3J0IGNsYXNzIFNjb3JpbmdIZWxwZXIge1xuICBwdWJsaWMgc3RhdGljIGNvbXBhcmVTaW5nbGVWYWx1ZXModmFsdWUxOiBSZWFkb25seTxzdHJpbmc+LCB2YWx1ZTI6IFJlYWRvbmx5PHN0cmluZz4sIGJhc2VUeXBlOiBCYXNlVHlwZSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoYmFzZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2lkZW50aWZpZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlMSA9PT0gdmFsdWUyO1xuICAgICAgY2FzZSAnaW50ZWdlcic6IHtcbiAgICAgICAgY29uc3QgaW50MSA9IHBhcnNlSW50KHZhbHVlMSwgMTApO1xuICAgICAgICBjb25zdCBpbnQyID0gcGFyc2VJbnQodmFsdWUyLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4oaW50MSkgJiYgIWlzTmFOKGludDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGludDEgPT09IGludDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGNvbnZlcnQgJHt2YWx1ZTF9IGFuZC9vciAke3ZhbHVlMn0gdG8gaW50LmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZmxvYXQnOiB7XG4gICAgICAgIGNvbnN0IGZsb2F0MSA9IHBhcnNlRmxvYXQodmFsdWUxKTtcbiAgICAgICAgY29uc3QgZmxvYXQyID0gcGFyc2VGbG9hdCh2YWx1ZTIpO1xuICAgICAgICBpZiAoIWlzTmFOKGZsb2F0MSkgJiYgIWlzTmFOKGZsb2F0MikpIHtcbiAgICAgICAgICByZXR1cm4gZmxvYXQxID09PSBmbG9hdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgY291bGRuJ3QgY29udmVydCAke3ZhbHVlMX0gYW5kL29yICR7dmFsdWUyfSB0byBmbG9hdC5gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3BhaXInOlxuICAgICAgY2FzZSAnZGlyZWN0ZWRQYWlyJzoge1xuICAgICAgICBjb25zdCBwYWlyMSA9IHZhbHVlMS5zcGxpdCgnICcpLnNvcnQoKTtcbiAgICAgICAgY29uc3QgcGFpcjIgPSB2YWx1ZTIuc3BsaXQoJyAnKS5zb3J0KCk7XG4gICAgICAgIGlmIChwYWlyMS5sZW5ndGggPT09IDIgJiYgcGFpcjIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKGJhc2VUeXBlID09PSAncGFpcicpIHtcbiAgICAgICAgICAgIHBhaXIxLnNvcnQoKTtcbiAgICAgICAgICAgIHBhaXIyLnNvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBhaXIxLmpvaW4oJyAnKSA9PT0gcGFpcjIuam9pbignICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNvbXBhcmVkIHR3byBwYWlyIGJ1dCBvbmUgb2YgdGhlIHZhbHVlcyBkb2VzIG5vdCBoYXZlIDIgdmFsdWVzOiAxOiAke3ZhbHVlMX0gMjogJHt2YWx1ZTJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpR3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlID4gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGd0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZ3QnLCBRdGlHdCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpR3RlIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA+PSArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgZ3RlJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRlJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZ3RlJywgUXRpR3RlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUlzTnVsbCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBpZiAoIXZhcmlhYmxlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gdmFyaWFibGVzWzBdLnZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIE51bGwnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1pcy1udWxsJywgUXRpSXNOdWxsKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlMdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPCArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgbHQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gbHQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1sdCcsIFF0aUx0KTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlMdGUgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlIDw9ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBsdGUnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBsdGUnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1sdGUnLCBRdGlMdGUpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTWFwUmVzcG9uc2UgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPG51bWJlcj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogbnVtYmVyIHtcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0UmVzcG9uc2UodGhpcy5pZGVudGlmaWVyKTtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFJlc3BvbnNlICR7dGhpcy5pZGVudGlmaWVyfSBjYW4gbm90IGJlIGZvdW5kYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWFwcGluZyA9IHJlc3BvbnNlLm1hcHBpbmc7XG4gICAgY29uc3QgY2FuZGlkYXRlUmVzcG9uc2VzID0gIUFycmF5LmlzQXJyYXkocmVzcG9uc2UudmFsdWUpID8gW3Jlc3BvbnNlLnZhbHVlXSA6IHJlc3BvbnNlLnZhbHVlO1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlUmVzcG9uc2Ugb2YgY2FuZGlkYXRlUmVzcG9uc2VzKSB7XG4gICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IG1hcHBpbmcubWFwRW50cmllcy5maW5kKGVudHJ5ID0+IHtcbiAgICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhlbnRyeS5tYXBLZXksIGNhbmRpZGF0ZVJlc3BvbnNlLCByZXNwb25zZS5iYXNlVHlwZSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghKG1hcHBlZFZhbHVlID09IG51bGwgfHwgbWFwcGVkVmFsdWUubWFwcGVkVmFsdWUgPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXN1bHQgKz0gbWFwcGVkVmFsdWUubWFwcGVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gbWFwcGluZy5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXBwaW5nLmxvd2VyQm91bmQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gTWF0aC5tYXgobWFwcGluZy5sb3dlckJvdW5kLCByZXN1bHQpO1xuICAgIH1cbiAgICBpZiAobWFwcGluZy51cHBlckJvdW5kICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IE1hdGgubWluKG1hcHBpbmcudXBwZXJCb3VuZCwgcmVzdWx0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tYXAtcmVzcG9uc2UnLCBRdGlNYXBSZXNwb25zZSk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tIFwibGl0L2RlY29yYXRvcnMuanNcIjtcbmltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tIFwibGl0XCI7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXBwaW5nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogXCJkZWZhdWx0LXZhbHVlXCIsIHR5cGU6IE51bWJlciB9KSBkZWZhdWx0VmFsdWU6IG51bWJlciA9IDA7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogXCJsb3dlci1ib3VuZFwiLCB0eXBlOiBOdW1iZXIgfSkgbG93ZXJCb3VuZDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IFwidXBwZXItYm91bmRcIiwgdHlwZTogTnVtYmVyIH0pIHVwcGVyQm91bmQ6IG51bWJlcjtcblxuICBcbiAgcHVibGljIGdldCBtYXBFbnRyaWVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChcInF0aS1tYXAtZW50cnlcIikpLm1hcCgoZWwpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcEtleTogZWwuZ2V0QXR0cmlidXRlKFwibWFwLWtleVwiKSxcbiAgICAgICAgbWFwcGVkVmFsdWU6ICtlbC5nZXRBdHRyaWJ1dGUoXCJtYXBwZWQtdmFsdWVcIiksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInF0aS1tYXBwaW5nXCIsIFF0aU1hcHBpbmcpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTWF0Y2ggZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgLy9QSyA6IEZJWE1FLlxuICAvLyBUaGlzIHdhcyBhIGxpdHRsZSBleHBlcmltZW50IGlmIHdlIGNvdWxkIGNhbGwgdGhlIG1hdGNoIGZ1bmN0aW9uIGFzIGEgc3RhdGljIGZ1bmN0aW9uLFxuICAvLyBUaGlzIGNhbiBiZSB1c2VkIGZvciBhbGwga2luZCBvZiB0aGluZ3MsIGJ1dCBub3cgZXNwZWNpYWxseSBmb3IgdXNlIGluXG4gIC8vIHF0aS1yZXNwb25zZS1jb25kaXRpb24tc2NyaXB0XG4gIC8vIGluIHdoaWNoIHdlIHBhc3MgdGhlIGV4cHJlc3Npb25zIGFzIHB1cmUgZnVuY3Rpb25zLCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuXG4gIC8vIFNBRExZLCB0aGUgZ2V0VmFyaWFibGVzIHRocm93cyByb2V0IGluIGRlIGV0ZW4uLiB3ZWV0IG5vZyBuaWV0IHByZWNpZXMgaG9lIGRlemUgd2Vya3QuXG4gIC8vIE1hYXIgaWsgZ2EgZXJpbiBkdWlrZW4uXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlVG9NYXAgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCBjb3JyZWN0VmFsdWVJbmZvID0gdmFsdWVzWzFdO1xuICAgICAgcmV0dXJuIFF0aU1hdGNoLm1hdGNoKHZhbHVlVG9NYXAsIGNvcnJlY3RWYWx1ZUluZm8pO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIG1hdGNoJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1hdGNoKHZhbHVlVG9NYXA6IFJlc3BvbnNlVmFyaWFibGUsIGNvcnJlY3RWYWx1ZUluZm86IFJlc3BvbnNlVmFyaWFibGUpIHtcbiAgICBpZiAoY29ycmVjdFZhbHVlSW5mby5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCBBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoXG4gICAgICAgIHZhbHVlVG9NYXAudmFsdWU/LnRvU3RyaW5nKCksXG4gICAgICAgIGNvcnJlY3RWYWx1ZUluZm8udmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIGxlbmd0aCBpcyBub3QgZXF1YWwsIGRvbid0IGNoZWNrLCBpdCdzIGluY29ycmVjdC5cbiAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aCAhPT0gY29ycmVjdFZhbHVlSW5mby52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbGV0IGFuc3dlckluZGV4ID0gMDtcbiAgICAgIGZvciAoY29uc3QgY29ycmVjdEFuc3dlciBvZiBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSB7XG4gICAgICAgIGlmIChjb3JyZWN0VmFsdWVJbmZvLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVUb01hcCA9IHZhbHVlVG9NYXBbYW5zd2VySW5kZXhdO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhjb3JyZWN0QW5zd2VyLCBjdXJyZW50VmFsdWVUb01hcCwgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZSk7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2VxdWVuY2UgZG9lcyBub3QgbWF0dGVyLCBmaW5kIHZhbHVlIHNvbWV3aGVyZSBpbiB0aGUgYXJyYXlcbiAgICAgICAgICAvLyBhbmQgcmVtb3ZlIHdoZW4gZm91bmQuXG4gICAgICAgICAgbGV0IG1hdGNoaW5nVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgIGZvciAoY29uc3QgbXYgb2YgdmFsdWVUb01hcC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKGNvcnJlY3RBbnN3ZXIsIG12LCBjb3JyZWN0VmFsdWVJbmZvLmJhc2VUeXBlKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgbWF0Y2hpbmdWYWx1ZSA9IG12O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICh2YWx1ZVRvTWFwLnZhbHVlIGFzIHN0cmluZ1tdKS5zcGxpY2UodmFsdWVUb01hcC52YWx1ZS5pbmRleE9mKG1hdGNoaW5nVmFsdWUpLCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhbnN3ZXJJbmRleCsrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7IC8vIGlmIGV2ZXJ5dGhpbmcgbWF0Y2hlcyBpdCdzIGNvcnJlY3Q7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hdGNoJywgUXRpTWF0Y2gpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1lbWJlciBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbiB8IG51bGw+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcblxuICAgIGlmICghKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSkge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHRha2VzIHR3byBzdWItZXhwcmVzc2lvbnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdmFsdWUxLCB2YWx1ZTJdID0gdmFsdWVzO1xuXG4gICAgaWYgKCEodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1doaWNoIG11c3QgYm90aCBoYXZlIHRoZSBzYW1lIGJhc2UtdHlwZScpO1xuICAgIH1cbiAgICBpZiAoISh2YWx1ZTIuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZScgfHwgdmFsdWUyLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2FuZCB0aGUgc2Vjb25kIG11c3QgYmUgYSBtdWx0aXBsZSBvciBvcmRlcmVkIGNvbnRhaW5lcicpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHNob3VsZCBub3QgYmUgdXNlZCBvbiBzdWItZXhwcmVzc2lvbnMgd2l0aCBhIGJhc2UtdHlwZSBvZiBmbG9hdCcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZHVyYXRpb24nIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2R1cmF0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJdCBtdXN0IG5vdCBiZSB1c2VkIG9uIHN1Yi1leHByZXNzaW9ucyB3aXRoIGEgYmFzZS10eXBlIG9mIGR1cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgZWl0aGVyIHN1Yi1leHByZXNzaW9uIGlzIE5VTEwgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRvciBpcyBOVUxMXG4gICAgaWYgKHZhbHVlMS52YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZTIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRoZSByZXN1bHQgaXMgYSBzaW5nbGUgYm9vbGVhbiB3aXRoIGEgdmFsdWUgb2YgJ3RydWUnIGlmIHRoZSB2YWx1ZSBnaXZlbiBieSB0aGUgZmlyc3Qgc3ViLWV4cHJlc3Npb24gaXMgaW4gdGhlIGNvbnRhaW5lciBkZWZpbmVkIGJ5IHRoZSBzZWNvbmQgc3ViLWV4cHJlc3Npb24uXG4gICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgIHJldHVybiBwcm9qZWN0aW9uMi5pbmNsdWRlcyhwcm9qZWN0aW9uMSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWVtYmVyJywgUXRpTWVtYmVyKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlLCBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpTXVsdGlwbGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+W10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBSZXNwb25zZVZhcmlhYmxlW10ge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgaWYgKHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnbXVsdGlwbGUnICYmIHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3QgdmFsdWVzID0gdmFyaWFibGVzLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgIC8vIGNvbnNvbGUubG9nKHZhcmlhYmxlcyk7XG4gICAgLy8gY29uc3QgZmxhdHRlbmVkQXJyYXkgPSB2YWx1ZXMucmVkdWNlKChhY2M6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAvLyAgIHJldHVybiBhY2MuY29uY2F0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IHZhbHVlKTtcbiAgICAvLyB9LCBbXSk7XG4gICAgLy8gcmV0dXJuIGZsYXR0ZW5lZEFycmF5O1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tdWx0aXBsZScsIFF0aU11bHRpcGxlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlOb3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCR7c3VwZXIucmVuZGVyKCl9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxib29sZWFuPjtcbiAgICBjb25zdCByZXN1bHQgPSBleHByZXNzaW9uLmNhbGN1bGF0ZSgpIGFzIGJvb2xlYW47XG4gICAgcmV0dXJuICFyZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbm90JywgUXRpTm90KTtcbiIsICJpbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlPciBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5tYXAoYyA9PiB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSBjIGFzIFF0aUV4cHJlc3Npb248YW55PjtcbiAgICAgIGlmICghY29uZGl0aW9uLmNhbGN1bGF0ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgLy8gY29udmVydCBzdHJpbmcgdmFsdWUgdG8gYm9vbGVhbiBhbmQgcmV0dXJuIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktb3IsIGV4cGVjdGVkIGJvb2xlYW4nKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMuc29tZShlID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgZSA9PT0gJ2Jvb2xlYW4nICYmIGU7XG4gICAgfSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3InLCBRdGlPcik7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aU9yZGVyZWQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFJlc3BvbnNlVmFyaWFibGVbXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IFJlc3BvbnNlVmFyaWFibGVbXSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2YgdmFyaWFibGVzKSB7XG4gICAgICBpZiAodmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdvcmRlcmVkJyAmJiB2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgb3JkZXJlZCcpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3JkZXJlZCcsIFF0aU9yZGVyZWQpO1xuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICdzcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcblxuZXhwb3J0IGNsYXNzIFF0UHJpbnRlZFZhcmlhYmxlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgLy8gY29uc3RydWN0b3IoKSB7XG4gIC8vICAgc3VwZXIoKTtcbiAgLy8gICBjb25zdCBhc3Nlc3NtZW50SXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICAvLyAgIGFzc2Vzc21lbnRJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZXNwb25zZS1wcm9jZXNzZWQnLCAoKSA9PiB7XG4gIC8vICAgICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICAvLyBwdWJsaWMgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gIC8vICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgLy8gICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gICAgY29uc3QgYXNzZXNzbWVudEl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5pZGVudGlmaWVyO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpLnZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJpbnRlZC12YXJpYWJsZScsIFF0UHJpbnRlZFZhcmlhYmxlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlQcm9kdWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnZmxvYXQnIHx8IGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKiBwYXJzZUludChjdXJyZW50VmFsdWUudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBjYW4gbm90IGNvbnZlcnQgdG8gbnVtYmVyYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgaGFzIGFub3RoZXIgYmFzZVR5cGUgJHtjdXJyZW50VmFsdWUuYmFzZVR5cGV9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfSwgMSk7XG4gICAgcmV0dXJuIHByb2R1Y3Q7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJvZHVjdCcsIFF0aVByb2R1Y3QpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlTdHJpbmdNYXRjaCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Nhc2Utc2Vuc2l0aXZlJyB9KSBjYXNlU2Vuc2l0aXZlID0gJ3RydWUnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBzdHJpbmctbWF0Y2gnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgdjEgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMS52YWx1ZSA6ICh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdjIgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMi52YWx1ZSA6ICh2YWx1ZTIudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyh2MSBhcyBzdHJpbmcsIHYyIGFzIHN0cmluZywgdmFsdWUxLmJhc2VUeXBlKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLXN0cmluZy1tYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXN0cmluZy1tYXRjaCcsIFF0aVN0cmluZ01hdGNoKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uLCBRdGlFeHByZXNzaW9uQmFzZSB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVN1bSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIHByaXZhdGUgX2V4cHJlc3Npb246IFF0aVN1bUV4cHJlc3Npb247XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZXhwcmVzc2lvbiA9IG5ldyBRdGlTdW1FeHByZXNzaW9uKEFycmF5LmZyb20odGhpcy5jaGlsZHJlbiBhcyB1bmtub3duIGFzIFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj5bXSkpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZXhwcmVzc2lvbi5jYWxjdWxhdGUoKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVN1bUV4cHJlc3Npb24gaW1wbGVtZW50cyBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHByZXNzaW9uczogUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPltdKSB7fVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5leHByZXNzaW9ucy5tYXAoYyA9PiB7XG4gICAgICBpZiAoIWMuY2FsY3VsYXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBjLmNhbGN1bGF0ZSgpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktc3VtLCBleHBlY3RlZCBudW1iZXInKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc3VtJywgUXRpU3VtKTtcbiIsICJpbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpVmFyaWFibGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKS52YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXZhcmlhYmxlJywgUXRpVmFyaWFibGUpO1xuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpUnVsZSwgUXRpUnVsZUJhc2UgfSBmcm9tICcuLic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3V0Y29tZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgbG9naWMgPSBuZXcgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IoKTtcbiAgICBjb25zdCBydWxlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gICAgbG9naWMucHJvY2VzcyhydWxlcyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtcHJvY2Vzc2luZyc6IFF0aU91dGNvbWVQcm9jZXNzaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZ1Byb2Nlc3NvciB7XG4gIHB1YmxpYyBwcm9jZXNzKHJ1bGVzOiBRdGlSdWxlQmFzZVtdKSB7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24sIElNU3BjaSwgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZywgUXRpVmFyaWFibGVKU09OIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5kZWNsYXJlIGNvbnN0IHJlcXVpcmVqczogYW55O1xuZGVjbGFyZSBjb25zdCBkZWZpbmU6IGFueTtcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByaXZhdGUgbW9kdWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcjogc3RyaW5nO1xuICBwcml2YXRlIF9lcnJvck1lc3NhZ2U6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgaW50ZXJ2YWxJZDogYW55O1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwY2k6IElNU3BjaTx1bmtub3duPjtcblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInXG4gICAgICB9LFxuICAgICAgbW9kdWxlOiB7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnbW9kdWxlJyB9LFxuICAgICAgY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGF0dHJpYnV0ZTogJ2N1c3RvbS1pbnRlcmFjdGlvbi10eXBlLWlkZW50aWZpZXInXG4gICAgICB9LFxuICAgICAgX2Vycm9yTWVzc2FnZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHN0YXRlOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRRdGlWYXJpYWJsZUpTT04oaW5wdXQ6IFF0aVZhcmlhYmxlSlNPTik6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBmb3IgKGNvbnN0IHRvcExldmVsS2V5IGluIGlucHV0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkodG9wTGV2ZWxLZXkpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZE9iamVjdCA9IGlucHV0W3RvcExldmVsS2V5IGFzICdsaXN0JyB8ICdiYXNlJ107XG4gICAgICAgIGlmIChuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZEtleSBpbiBuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIGlmIChuZXN0ZWRPYmplY3QuaGFzT3duUHJvcGVydHkobmVzdGVkS2V5KSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5lc3RlZE9iamVjdFtuZXN0ZWRLZXkgYXMga2V5b2YgdHlwZW9mIG5lc3RlZE9iamVjdF07XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoU3RyaW5nKTsgLy8gQ29udmVydCBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsgLy8gQ29udmVydCB0aGUgc2luZ2xlIHZhbHVlIHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENoZWNraW5nKCk6IHZvaWQge1xuICAgIC8vIGJlY2F1c2UgdGhlIHBjaSBkb2Vzbid0IGhhdmUgYSBtZXRob2QgdG8gY2hlY2sgZm9yIGNoYW5nZXMgd2UnbGwgdXNlIGFuIGludGVydmFsXG4gICAgLy8gdG8gY2hlY2sgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFuZ2VkLiBJZiBjaGFuZ2VkIHdlJ2xsIHNhdmUgdGhlIHJlc3BvbnNlXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3QgbmV3UmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XG4gICAgICBpZiAoc3RyaW5naWZpZWQgIT09IHRoaXMucmF3UmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yYXdSZXNwb25zZSA9IHN0cmluZ2lmaWVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udmVydFF0aVZhcmlhYmxlSlNPTihuZXdSZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BDaGVja2luZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gRk9SIE5PV1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIC8vIE9ubHkgc2V0IHN0YXRlIGlzIHN1cHBvcnRlZCBpbiBhIFBDSVxuICB9XG5cbiAgZ2V0VEFPQ29uZmlnKG5vZGUpIHtcbiAgICBjb25zdCBhID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdwcm9wZXJ0aWVzJyk7XG4gICAgbGV0IGNvbmZpZyA9IHt9O1xuXG4gICAgY29uc3QgZ2V0UHJvcGVydHlWYWx1ZSA9IGVsID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0ge307XG4gICAgICBjb25zdCBrZXkgPSBlbC5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWwuY2hpbGRyZW4pO1xuICAgICAgICBjb25zdCBhbGxLZXkgPSBjaGlsZHJlbi5tYXAoKGM6IEhUTUxFbGVtZW50KSA9PiBjLmdldEF0dHJpYnV0ZSgna2V5JykpO1xuICAgICAgICBjb25zdCBpc0FycmF5ID0gYWxsS2V5Lmxlbmd0aCA+IDAgJiYgIWFsbEtleS5maW5kKGsgPT4gIU51bWJlci5pc0ludGVnZXIoK2spKTtcbiAgICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gY2hpbGRyZW4ubWFwKGMgPT4gZ2V0Q2hpbGRQcm9wZXJ0aWVzKGMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gZWwudGV4dENvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Q2hpbGRQcm9wZXJ0aWVzID0gKGVsKToge30gfCB2b2lkID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBsZXQgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IHsgLi4ucHJvcGVydGllcywgLi4uZ2V0UHJvcGVydHlWYWx1ZShjaGlsZCkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0aWVzIG9mIGEpIHtcbiAgICAgIGNvbnN0IGtleSA9IHByb3BlcnRpZXMuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5nZXRDaGlsZFByb3BlcnRpZXMocHJvcGVydGllcykgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdDYW4gbm90IGZpbmQgcXRpLWN1c3RvbS1pbnRlcmFjdGlvbiBjb25maWcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlZ2lzdGVyKHBjaTogSU1TcGNpPHVua25vd24+KSB7XG4gICAgdGhpcy5wY2kgPSBwY2k7XG5cbiAgICBjb25zdCB0eXBlID0gdGhpcy5wYXJlbnRFbGVtZW50LnRhZ05hbWUgPT09ICdRVEktQ1VTVE9NLUlOVEVSQUNUSU9OJyA/ICdUQU8nIDogJ0lNUyc7XG4gICAgY29uc3QgZG9tOiBIVE1MRWxlbWVudCA9XG4gICAgICB0eXBlID09ICdJTVMnID8gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktaW50ZXJhY3Rpb24tbWFya3VwJykgOiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ21hcmt1cCcpO1xuICAgIGRvbS5jbGFzc0xpc3QuYWRkKCdxdGktY3VzdG9tSW50ZXJhY3Rpb24nKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nICYmIHRoaXMucXVlcnlTZWxlY3RvcigncHJvcGVydGllcycpKSB7XG4gICAgICAodGhpcy5xdWVyeVNlbGVjdG9yKCdwcm9wZXJ0aWVzJykgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBhbnkgPVxuICAgICAgdHlwZSA9PSAnSU1TJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZGF0YXNldCxcbiAgICAgICAgICAgIG9ucmVhZHk6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29ucmVhZHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogdGhpcy5nZXRUQU9Db25maWcodGhpcyk7XG5cbiAgICB0eXBlID09ICdJTVMnXG4gICAgICA/IHBjaS5nZXRJbnN0YW5jZShkb20sIGNvbmZpZywgdW5kZWZpbmVkKVxuICAgICAgOiAocGNpIGFzIGFueSkuaW5pdGlhbGl6ZSh0aGlzLmN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXIsIGRvbS5maXJzdEVsZW1lbnRDaGlsZCwgY29uZmlnKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rJykpLm1hcChhY2MgPT4gYWNjLmdldEF0dHJpYnV0ZSgnaHJlZicpKTtcbiAgICAgIGxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgc3R5bGVzLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgc3R5bGVzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgICAgc3R5bGVzLmhyZWYgPSBsaW5rO1xuICAgICAgICBkb20uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0Q2hlY2tpbmcoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgcmVxdWlyZUNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IHtcbiAgICAgIGNvbnRleHQ6IHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcixcbiAgICAgIGNhdGNoRXJyb3I6IHRydWUsXG4gICAgICBwYXRoczoge31cbiAgICB9O1xuXG4gICAgLy8gcGs6IGMnZXN0IHRyZXMgdWdseS4uIHR5cGVzY3JpcHQgd2h5dW5vc3ByZWFkIGFkZCBwcm9wcz8hP1xuICAgIGlmICh3aW5kb3dbJ3JlcXVpcmVQYXRocyddICYmIHdpbmRvd1sncmVxdWlyZVNoaW0nXSkge1xuICAgICAgcmVxdWlyZUNvbmZpZ1sncGF0aHMnXSA9IHdpbmRvd1sncmVxdWlyZVBhdGhzJ107XG4gICAgICByZXF1aXJlQ29uZmlnWydzaGltJ10gPSB3aW5kb3dbJ3JlcXVpcmVTaGltJ107XG4gICAgfVxuICAgIGlmICghZ2xvYmFsVGhpcy5yZXF1aXJlKSB7XG4gICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgcmVxdWlyZWpzIG5vdCBmb3VuZCwgbG9hZCB3aXRoIGNkbjogaHR0cHM6Ly9jZG5qcy5jb20vbGlicmFyaWVzL3JlcXVpcmUuanNgO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbml0aWFsIGNoZWNrIGluIGNhc2UgdGhlIGNoaWxkcmVuIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICB0aGlzLnJlZ2lzdGVyTW9kdWxlcyhyZXF1aXJlQ29uZmlnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVQQ0kgPSByZXF1aXJlanMuY29uZmlnKHJlcXVpcmVDb25maWcpO1xuXG4gICAgICByZXF1aXJlUENJKFxuICAgICAgICBbJ3JlcXVpcmUnXSxcbiAgICAgICAgcmVxdWlyZSA9PiB7XG4gICAgICAgICAgIXJlcXVpcmUuZGVmaW5lZCgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JykgJiZcbiAgICAgICAgICAgIGRlZmluZSgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyOiBjdHhBID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoY3R4QSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub3RpZnlSZWFkeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGluIHRoZSBUQU8gdmVyc2lvbiAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIFBLOiB0aGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJhY3Rpb24gaXMgb25seSByZWdpc3RlcmVkIG9uY2VcbiAgICAgICAgICAvLyBJZiBpdCB3YXMgcHJldmlzb3VseSBsb2FkZWQsIHRoZSByZWdpc3RlciB3aWxsIG5vZyBraWNrIGluLCBiZWNhdXNlIHRoZSBjbGFzcyBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICAgICAgICAvLyBhbmQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBQQ0ksIHRoZSByZWdpc3RlciBpcyBjYWxsZWQuXG4gICAgICAgICAgLy8gU28gbm93IGl0IGlzIGFscmVhZGx5IGRlZmluZWQsIHdlIGp1c3QgcmVnaXN0ZXIgaXQgb3Vyc2VsdmVzLlxuXG4gICAgICAgICAgY29uc3Qgd2FzUHJldmlvdXNseUxvYWRlZCA9IHJlcXVpcmUuZGVmaW5lZCh0aGlzLm1vZHVsZSk7XG5cbiAgICAgICAgICByZXF1aXJlKFt0aGlzLm1vZHVsZV0sIGN0eEEgPT4ge1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgaXQgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBsb2FkZWRcbiAgICAgICAgICAgIHdhc1ByZXZpb3VzbHlMb2FkZWQgJiYgdGhpcy5yZWdpc3RlcihjdHhBKTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IGVycjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zdG9wQ2hlY2tpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyTW9kdWxlcyhjb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcpIHtcbiAgICAvLyBnZXQgdGhlIHZhbHVlIG9mIGF0dHJpYnV0ZTogZGF0YS1iYXNlLXVybFxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpO1xuICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICBjb25zdCBtb2R1bGVSZXNvbHV0aW9uUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb24uanNgO1xuICAgICAgY29uc3QgbW9kdWxlUmVzb2x1dGlvbkZhbGxiYWNrUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb25fZmFsbGJhY2suanNgO1xuICAgICAgaWYgKG1vZHVsZVJlc29sdXRpb25QYXRoKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWcgPSBhd2FpdCB0aGlzLmxvYWRDb25maWcobW9kdWxlUmVzb2x1dGlvblBhdGgsIGJhc2VVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIG1vZHVsZVJlc29sdXRpb25GYWxsYmFja1BhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBHZXQgdGhlIHF0aS1pbnRlcmFjdGlvbi1tb2R1bGVzIGVsZW1lbnRcbiAgICBjb25zdCBpbnRlcmFjdGlvbk1vZHVsZXMgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGVzJyk7XG4gICAgaWYgKGludGVyYWN0aW9uTW9kdWxlcykge1xuICAgICAgLy8gR2V0IGFsbCBxdGktaW50ZXJhY3Rpb24tbW9kdWxlIGVsZW1lbnRzXG4gICAgICBjb25zdCBtb2R1bGVzID0gaW50ZXJhY3Rpb25Nb2R1bGVzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGUnKTtcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG1vZHVsZSBhbmQgcmVnaXN0ZXIgaXQgd2l0aCBSZXF1aXJlSlNcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlSWQgPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwcmltYXJ5UGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ3ByaW1hcnktcGF0aCcpO1xuICAgICAgICBjb25zdCBmYWxsYmFja1BhdGggPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdmYWxsYmFjay1wYXRoJyk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcgPSBwcmltYXJ5UGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogcHJpbWFyeVBhdGggfSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IGZhbGxiYWNrUGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogZmFsbGJhY2tQYXRoIH0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKG1vZHVsZUlkICYmIHByaW1hcnlDb25maWcpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIGZhbGxiYWNrQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRG91YmxlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IHNpbmdsZUZvcndhcmRTbGFzaGVzID0gc3RyXG4gICAgICAucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKVxuICAgICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgICAucmVwbGFjZSgnaHR0cDovJywgJ2h0dHA6Ly8nKVxuICAgICAgLnJlcGxhY2UoJ2h0dHBzOi8nLCAnaHR0cHM6Ly8nKTtcbiAgICByZXR1cm4gc2luZ2xlRm9yd2FyZFNsYXNoZXM7XG4gIH1cblxuICBsb2FkQ29uZmlnID0gYXN5bmMgKHVybDogc3RyaW5nLCBiYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTxNb2R1bGVSZXNvbHV0aW9uQ29uZmlnPiA9PiB7XG4gICAgdXJsID0gdGhpcy5yZW1vdmVEb3VibGVTbGFzaGVzKHVybCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVDb25maWcgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgaWYgKHJlcXVpcmVDb25maWcub2spIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVxdWlyZUNvbmZpZy5qc29uKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmcgPSBjb25maWcgYXMgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZztcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBtb2R1bGVDb25nLnBhdGhzKSB7XG4gICAgICAgICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgICAgIG1vZHVsZUNvbmcucGF0aHNbbW9kdWxlSWRdID0gdGhpcy5yZW1vdmVEb3VibGVTbGFzaGVzKGAke2Jhc2VVcmx9LyR7bW9kdWxlQ29uZy5wYXRoc1ttb2R1bGVJZF19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVDb25nO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgbWVyZ2VDb25maWdzID0gYXN5bmMgKFxuICAgIGNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyxcbiAgICBwcmltYXJ5Q29uZmlnOiBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnLFxuICAgIGZhbGxiYWNrOiBzdHJpbmcgfCBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnXG4gICkgPT4ge1xuICAgIGZvciAoY29uc3QgbW9kdWxlSWQgaW4gcHJpbWFyeUNvbmZpZz8ucGF0aHMpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB0aGUgY29uZmlnXG4gICAgICBpZiAoIWNvbmZpZy5wYXRoc1ttb2R1bGVJZF0pIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgZmlsZSBleGlzdHNcbiAgICAgICAgbGV0IGZhaWxlZFRvUmVzb2x2ZSA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhdGhXaXRoRXh0ZW5zaW9uID0gcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF0/LnRvTG9jYWxlTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5qcycpXG4gICAgICAgICAgICA/IHByaW1hcnlDb25maWcucGF0aHNbbW9kdWxlSWRdXG4gICAgICAgICAgICA6IHByaW1hcnlDb25maWcucGF0aHNbbW9kdWxlSWRdICsgJy5qcyc7XG4gICAgICAgICAgY29uc3QgbSA9IGF3YWl0IGZldGNoKHBhdGhXaXRoRXh0ZW5zaW9uKTtcbiAgICAgICAgICBpZiAobS5vaykge1xuICAgICAgICAgICAgY29uZmlnLnBhdGhzW21vZHVsZUlkXSA9IHByaW1hcnlDb25maWcucGF0aHNbbW9kdWxlSWRdLnJlcGxhY2UoL1xcLmpzJC8sICcnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmFpbGVkVG9SZXNvbHZlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGZhaWxlZFRvUmVzb2x2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhaWxlZFRvUmVzb2x2ZSAmJiBmYWxsYmFjaykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZmFsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZyA9IGF3YWl0IHRoaXMubG9hZENvbmZpZyhmYWxsYmFjayk7XG4gICAgICAgICAgICAgIGlmIChmYWxsYmFja0NvbmZpZz8ucGF0aHNbbW9kdWxlSWRdKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW21vZHVsZUlkXSA9IGZhbGxiYWNrQ29uZmlnLnBhdGhzW21vZHVsZUlkXS5yZXBsYWNlKC9cXC5qcyQvLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChmYWxsYmFjaz8ucGF0aHNbbW9kdWxlSWRdKSB7XG4gICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gPSBmYWxsYmFjay5wYXRoc1ttb2R1bGVJZF0ucmVwbGFjZSgvXFwuanMkLywgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmYWlsZWRUb1Jlc29sdmUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBtb2R1bGU6ICcgKyBtb2R1bGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD4ke3RoaXMuX2Vycm9yTWVzc2FnZSAmJlxuICAgICAgaHRtbGA8ZGl2IHN0eWxlPVwiY29sb3I6cmVkXCI+XG4gICAgICAgIDxoMT5FcnJvcjwvaDE+XG4gICAgICAgICR7dGhpcy5fZXJyb3JNZXNzYWdlfVxuICAgICAgPC9kaXY+YH1gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nOiBRdGlQb3J0YWJsZUN1c3RvbUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcblxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpQXNzb2NpYXRlSW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oXG4gIExpdEVsZW1lbnQsXG4gICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyxcbiAgdHJ1ZSxcbiAgJy5kbCdcbikge1xuICBAc3RhdGUoKSBwcml2YXRlIF9jaGlsZHJlbk1hcDogRWxlbWVudFtdO1xuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7IC8qIG5lY2Vzc2FyeSB0byBjYWxjdWxhdGUgc2NhbGluZyBwb3NpdGlvbiAqL1xuICAgIH1cbiAgICBzbG90W25hbWU9J3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnXSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgZ2FwOiAwLjVyZW07XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxzbG90IG5hbWU9XCJxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlXCI+PC9zbG90PlxuICAgICAgJHt0aGlzLl9jaGlsZHJlbk1hcC5sZW5ndGggPiAwICYmXG4gICAgICBBcnJheS5mcm9tKEFycmF5KE1hdGguY2VpbCh0aGlzLl9jaGlsZHJlbk1hcC5sZW5ndGggLyAyKSkua2V5cygpKS5tYXAoXG4gICAgICAgIChfLCBpbmRleCkgPT5cbiAgICAgICAgICBodG1sYDxkaXYgcGFydD1cImFzc29jaWFibGVzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBuYW1lPVwibGVmdCR7aW5kZXh9XCIgcGFydD1cImRyb3AtbGlzdFwiIGNsYXNzPVwiZGxcIiBpZGVudGlmaWVyPVwiZHJvcGxpc3Qke2luZGV4fV9sZWZ0XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IG5hbWU9XCJyaWdodCR7aW5kZXh9XCIgcGFydD1cImRyb3AtbGlzdFwiIGNsYXNzPVwiZGxcIiBpZGVudGlmaWVyPVwiZHJvcGxpc3Qke2luZGV4fV9yaWdodFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PmBcbiAgICAgICl9YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fY2hpbGRyZW5NYXAgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJzogUXRpQXNzb2NpYXRlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgVG91Y2hEcmFnQW5kRHJvcCB7XG4gIHByaXZhdGUgX3RvdWNoQmVnaW4gPSAwOyAvLyB0aW1lc3RhbXAgb2YgZmlyc3QgdG91Y2hcbiAgcHJpdmF0ZSBfdG91Y2hEb3duID0gbnVsbDsgLy8gcG9pbnQgb2YgZmlyc3QgdG91Y2hcbiAgcHJpdmF0ZSBfbGFzdENsaWNrID0gMDsgLy8gdGltZXN0YW1wIG9mIHByZXZpb3VzIGNsaWNrICh0b3VjaHN0YXJ0ICsgdG91Y2hlbmQpXG4gIHByaXZhdGUgX2NhbkRyYWcgPSBmYWxzZTsgLy8gd2hldGhlciB0aGVyZSBpcyBhbiBlbGVtZW50IHdoaWNoIGNhbiBiZSBkcmFnZ2VkXG4gIHByaXZhdGUgX2RyYWdTcmMgPSBudWxsOyAvLyB0aGUgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgZHJhZ2dlZFxuICBwcml2YXRlIF9kcmFnQ29weSA9IG51bGw7IC8vIGNvcHkgb2YgZHJhZyBzb3VyY2UgZm9yIGRyYWcgZmVlZGJhY2tcbiAgcHJpdmF0ZSBfdG91Y2hFbmRDYWxsZWQgPSBmYWxzZTsgLy8gd2hldGhlciB0b3VjaEVuZCBvY2N1cmVkXG4gIHByaXZhdGUgX2RyYWdSdW5uaW5nID0gZmFsc2U7IC8vIHdoZXRoZXIgYSBkcmFnIHByb2Nlc3MgaXMgcnVubmluZyBhdCB0aGUgbW9tZW50XG5cbiAgcHJpdmF0ZSBfZGF0YVRyYW5zZmVyID0ge1xuICAgIGRhdGE6IHt9LFxuICAgIHNldERhdGE6IGZ1bmN0aW9uICh0eXBlLCB2YWwpIHtcbiAgICAgIHRoaXMuZGF0YVt0eXBlXSA9IHZhbDtcbiAgICB9LFxuICAgIGdldERhdGE6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhW3R5cGVdO1xuICAgIH0sXG4gICAgZWZmZWN0QWxsb3dlZDogJ21vdmUnXG4gIH07XG4gIHByaXZhdGUgX2NvcHlPZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTsgLy8gT2Zmc2V0IGZvciBwb3NpdGlvbmluZyB0aGUgZHJhZyBjb3B5XG5cbiAgcHJpdmF0ZSBfbGFzdFRhcmdldCA9IG51bGw7IC8vIFRoZSBsYXN0IHJlZ2lzdGVyZWQgdG91Y2ggdGFyZ2V0XG4gIHByaXZhdGUgX2N1cnJlbnREcm9wQ29udGFpbmVyID0gbnVsbDsgLy8gVGhlIGN1cnJlbnQgZHJvcCBjb250YWluZXI7IGZhbHNlIGlmIGVsZW1lbnQgaXMgbm90IGRyb3BwYWJsZVxuICBwcml2YXRlIF9oYW5kbGVDbGljayA9IHRydWU7IC8vIFNwZWNpZmllc1xuXG4gIHByaXZhdGUgX0RCTENMSUNLREVMQVkgPSA1MDA7IC8vIG1heGltdW0gZGVsYXkgaW4gd2hpY2ggYSBzZWNvbmQgY2xpY2sgbXVzdCBvY2N1clxuICBwcml2YXRlIF9DT05URVhUTUVOVURFTEFZID0gMTAwMDsgLy8gaG9sZCBkZWxheSBhZnRlciB3aGljaCBjb250ZXh0IG1lbnUgaXMgc2hvd25cbiAgcHJpdmF0ZSBfRFJBR0RFTFRBID0gNTsgLy8gTWluaW11bSBvZiBwaXhlbHMgd2hpY2ggdGhlIGZpbmdlciBtdXN0IGJlIG1vdmVkIHRvIHN0YXJ0IGRyYWdcbiAgcHJpdmF0ZSBfQ09QWU9QQUNJVFkgPSAwLjc7IC8vIE9wYWNpdHkgb2YgdGhlIGRyYWcgY29weSBlbGVtZW50XG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVG91Y2hEcmFnQW5kRHJvcDtcblxuICBjb3B5U3R5bGVzRHJhZ0Nsb25lOiBib29sZWFuID0gdHJ1ZTtcbiAgZHJhZ09uQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBDaGVjayBzaW5nbGV0b25cbiAgICBpZiAoVG91Y2hEcmFnQW5kRHJvcC5faW5zdGFuY2UpIHtcbiAgICAgIC8vICB0aHJvdyBuZXcgRXJyb3IoXCJUb3VjaERyYWdBbmREcm9wIGNhbid0IGJlIGluc3RhbnRpYXRlZCBtb3JlIHRoYW4gb25jZS5cIik7XG4gICAgICByZXR1cm4gVG91Y2hEcmFnQW5kRHJvcC5faW5zdGFuY2U7XG4gICAgfVxuICAgIFRvdWNoRHJhZ0FuZERyb3AuX2luc3RhbmNlID0gdGhpcztcblxuICAgIC8vIHRoaXMuX2luaXRpYWxpemVGaWVsZHMoKTtcblxuICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnNcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX3RvdWNoTW92ZS5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl90b3VjaE1vdmUuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX3RvdWNoRW5kLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl90b3VjaEVuZC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy5fdG91Y2hDYW5jZWwuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZERyYWdnYWJsZXMoZHJhZ2dhYmxlczogRWxlbWVudFtdKSB7XG4gICAgZHJhZ2dhYmxlcy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl90b3VjaFN0YXJ0LmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fdG91Y2hTdGFydC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hzdGFydCBldmVudCBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlXG4gICAqL1xuICBwcml2YXRlIF90b3VjaFN0YXJ0KGUpIHtcbiAgICAvLyBTYXZlIGN1cnJlbnQgdGltZXN0YW1wXG4gICAgdGhpcy5fdG91Y2hCZWdpbiA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX2dldFBvaW50KGUpO1xuXG4gICAgdGhpcy5fdG91Y2hEb3duID0geyB4LCB5IH07XG5cbiAgICB0aGlzLl9kcmFnU3JjID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgIHRoaXMuX2NhbkRyYWcgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZHJhZ09uQ2xpY2spIHtcbiAgICAgIGNvbnN0IF90b3VjaGVzID0geyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH07XG4gICAgICB0aGlzLl9kcmFnUnVubmluZyA9IHRydWU7XG4gICAgICB0aGlzLl9jcmVhdGVEcmFnQ29weShlLCBfdG91Y2hlcyk7XG4gICAgfVxuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaG1vdmUgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hNb3ZlKGUpIHtcbiAgICBpZiAodGhpcy5fY2FuRHJhZyAmJiB0aGlzLl9kcmFnU3JjKSB7XG4gICAgICAvLyBDcmVhdGUgY29weSBvZiBlbGVtZW50IGZvciB2aXN1YWwgZHJhZyBmZWVkYmFja1xuXG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuX2dldFBvaW50KGUpO1xuICAgICAgY29uc3QgX3RvdWNoZXMgPSB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTtcblxuICAgICAgaWYgKHRoaXMuX2dldERlbHRhKF90b3VjaGVzKSA+PSB0aGlzLl9EUkFHREVMVEEpIHtcbiAgICAgICAgdGhpcy5fZHJhZ1J1bm5pbmcgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jcmVhdGVEcmFnQ29weShlLCBfdG91Y2hlcyk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRHJhZ0NvcHkgPSAoZTogYW55LCBfdG91Y2hlczogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9KSA9PiB7XG4gICAgaWYgKHRoaXMuX2RyYWdDb3B5ID09PSBudWxsICYmIHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICB0aGlzLl9kcmFnU3JjLnN0eWxlLm9wYWNpdHkgPSB0aGlzLl9DT1BZT1BBQ0lUWTtcbiAgICAgIHRoaXMuX2RyYWdDb3B5ID0gdGhpcy5fZHJhZ1NyYy5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBjb25zdCBlbGVtZW50U3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fZHJhZ1NyYyk7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlID0gJyc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zZXRBdHRyaWJ1dGUoJ2RyYWdjbG9uZScsICcnKTtcblxuICAgICAgaWYgKHRoaXMuY29weVN0eWxlc0RyYWdDbG9uZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHN0eWxlIG9mIGVsZW1lbnRTdHlsZXMpIHtcbiAgICAgICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZVtzdHlsZV0gPSBlbGVtZW50U3R5bGVzLmdldFByb3BlcnR5VmFsdWUoc3R5bGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGN1bGF0ZURyYWdDb3B5UG9zaXRpb24oX3RvdWNoZXMpO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS50b3AgPSBfdG91Y2hlcy5jbGllbnRZIC0gdGhpcy5fY29weU9mZnNldC55ICsgJ3B4JztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLmxlZnQgPSBfdG91Y2hlcy5jbGllbnRYIC0gdGhpcy5fY29weU9mZnNldC54ICsgJ3B4JztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS56SW5kZXggPSAnOTk5OTk5JztcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2RyYWdDb3B5KTtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fZHJhZ1NyYywgJ2RyYWdzdGFydCcpO1xuICAgIH1cblxuICAgIC8vIERyYWcgaXMgcnVubmluZywgbW92ZSBkcmFnIGNvcHkgYW5kIGZpcmUgZXZlbnRzXG4gICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fdG91Y2hFbmRDYWxsZWQgfHwgX3RoaXMuX2RyYWdDb3B5ID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIF90aGlzLl9kcmFnQ29weS5zdHlsZS50b3AgPSBfdG91Y2hlcy5jbGllbnRZIC0gX3RoaXMuX2NvcHlPZmZzZXQueSArICdweCc7XG4gICAgICAgIF90aGlzLl9kcmFnQ29weS5zdHlsZS5sZWZ0ID0gX3RvdWNoZXMuY2xpZW50WCAtIF90aGlzLl9jb3B5T2Zmc2V0LnggKyAncHgnO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX2ZpbmREcm9wcGFibGUoZSk7XG5cbiAgICAgIC8vIEZpcmUgZHJhZ2xlYXZlIGFuZCBkcmFnZW50ZXIgZXZlbnRzIHdoZW4gdGFyZ2V0IGhhcyBjaGFuZ2VkIGR1cmluZyBtb3ZlXG4gICAgICBpZiAodGFyZ2V0ICE9IHRoaXMuX2xhc3RUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0YXJnZXQsICdkcmFnZW50ZXInKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9sYXN0VGFyZ2V0LCAnZHJhZ2xlYXZlJyk7XG4gICAgICAgIHRoaXMuX2xhc3RUYXJnZXQgPSB0YXJnZXQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE1ha2UgY3VycmVudCBkcm9wIGNvbnRhaW5lciBjbGFzc3dpZGUgYXZhaWxhYmxlIGFuZCBmaXJlIGRyYWdvdmVyIGlmIGl0J3MgcmVhbGx5IGEgZHJvcCBjb250YWluZXIuXG4gICAgICB0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lciA9IHRhcmdldDtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lcikgdGhpcy5fZGlzcGF0Y2hFdmVudCh0YXJnZXQsICdkcmFnb3ZlcicpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNoZW5kIGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoRW5kKGUpIHtcbiAgICB0aGlzLl90b3VjaEVuZENhbGxlZCA9IHRydWU7XG4gICAgdGhpcy5fY2FuRHJhZyA9IGZhbHNlO1xuXG4gICAgLy8gY29uc29sZS5sb2coMSwgZS50YXJnZXQsIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKTtcblxuICAgIC8vIFVzZXIgc2VlbXMgdG8gY2xpY2tcbiAgICAvLyBpZiAoIXRoaXMuX2RyYWdSdW5uaW5nICYmIHRoaXMuX2hhbmRsZUNsaWNrKSB7XG4gICAgLy8gICB0aGlzLl9kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LCAnY2xpY2snKTtcbiAgICAvLyAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgaWYgKHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyLCAnZHJvcCcpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9kcmFnU3JjLCAnZHJhZ2VuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaXJlIGRyYWdFdmVudCBldmVuIGlmIHRoZWlyIGlzIG5vIGRyb3BwYWJsZS4gQW5kIGFzc2lnbiBkcm9wRWZmZWN0IG5vbmUuXG4gICAgICAvLyBmb3Igb3VyIHB1cnBvc2UsIHRoaXMgd2lsbCBicmluZyBiYWNrIHRoZSBkcmFnIHRvIGl0cyBzdGFydCBwb3NpdGlvbiwgc2VlbCBkcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4udHNcbiAgICAgIGlmICh0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnZHJhZ2VuZCcsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgZXZlbnRbJ2RhdGFUcmFuc2ZlciddID0geyBkcm9wRWZmZWN0OiAnbm9uZScgfTtcbiAgICAgICAgdGhpcy5fZHJhZ1NyYz8uZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hjYW5jZWwgZXZlbnQgbGlzdGVuZXIsIGluIGNhc2UgYnJvd3NlciBzdXBwb3J0cyB0aGlzLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoQ2FuY2VsKGUpIHtcbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG5leHQgZHJvcHBhYmxlIGVsZW1lbnQgYXQgY3VycmVudCBwb2ludC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHB0XG4gICAqL1xuICBwcml2YXRlIF9maW5kRHJvcHBhYmxlKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRGcm9tVG91Y2hFdmVudCA9IHRoaXMuX2dldFBvaW50KGV2ZW50KTtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50RnJvbVBvaW50KHBvaW50RnJvbVRvdWNoRXZlbnQueCwgcG9pbnRGcm9tVG91Y2hFdmVudC55KTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZWxlbWVudEZyb21Qb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEVsZW1lbnQge1xuICAgIGxldCBlbCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSk7XG4gICAgaWYgKGVsKSB7XG4gICAgICB3aGlsZSAoZWwuc2hhZG93Um9vdCkge1xuICAgICAgICBjb25zdCBjdXN0b21FbCA9IGVsLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsID09PSBudWxsIHx8IGN1c3RvbUVsID09PSBlbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVsID0gY3VzdG9tRWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UG9pbnQoZXZlbnQsIHBhZ2U/KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnQudG91Y2hlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHBhZ2UgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFgsXG4gICAgICB5OiBwYWdlID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBvZmZzZXQgZm9yIGRpc3BsYXlpbmcgdGhlIGRyYWcgY29weSB0byBoYXZlIGEgc2VhbWxlc3MgZHJhZ2dpbmcuXG4gICAqIEBwYXJhbSB7VG91Y2h9IHRvdWNoIFRoZSBjdXJyZW50IHRvdWNoLlxuICAgKi9cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlRHJhZ0NvcHlQb3NpdGlvbih0b3VjaCkge1xuICAgIGNvbnN0IGNsaWVudFJlY3QgPSB0aGlzLl9kcmFnU3JjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuX2NvcHlPZmZzZXQueCA9IHRvdWNoLmNsaWVudFggLSBjbGllbnRSZWN0LmxlZnQ7XG4gICAgdGhpcy5fY29weU9mZnNldC55ID0gdG91Y2guY2xpZW50WSAtIGNsaWVudFJlY3QudG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBpeGVsIGRlbHRhIGJldHdlZW4gZmlyc3QgdG91Y2ggYW5kIHRoZSBjdXJyZW50IHRvdWNoIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdG91Y2hcbiAgICovXG4gIHByaXZhdGUgX2dldERlbHRhKHRvdWNoKSB7XG4gICAgY29uc3QgeCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSB0aGlzLl90b3VjaERvd24ueCk7XG4gICAgY29uc3QgeSA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSB0aGlzLl90b3VjaERvd24ueSk7XG5cbiAgICByZXR1cm4geCArIHk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlIFRoZSBldmVudCdzIHRhcmdldCBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHtib29sfSBidWJibGUgU2V0cyB3aGV0aGVyIHRoZSBldmVudCBzaG91bGQgYnViYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hFdmVudChlLCBldmVudFR5cGUsIGJ1YmJsZSA9IHRydWUpIHtcbiAgICBpZiAoIWUpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50VHlwZSwgeyBidWJibGVzOiBidWJibGUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgZXZlbnRbJ2RhdGFUcmFuc2ZlciddID0gdGhpcy5fZGF0YVRyYW5zZmVyO1xuICAgIGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIGFsbCB2YXJpYWJsZXMgYW5kIHByZXBhcmVzIGZvciBuZXcgRHJhZyBhbmQgRHJvcC5cbiAgICovXG4gIHByaXZhdGUgX3Jlc2V0KCkge1xuICAgIGlmICh0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgdGhpcy5fZHJhZ1NyYy5zdHlsZS5vcGFjaXR5ID0gJzEuMCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2RyYWdDb3B5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kcmFnUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2RyYWdTcmMgPSBudWxsO1xuICAgIHRoaXMuX2RyYWdDb3B5ID0gbnVsbDtcbiAgICB0aGlzLl9jYW5EcmFnID0gZmFsc2U7XG5cbiAgICB0aGlzLl90b3VjaEJlZ2luID0gMDtcbiAgICB0aGlzLl90b3VjaERvd24gPSBudWxsO1xuICAgIHRoaXMuX2xhc3RDbGljayA9IDA7XG4gICAgdGhpcy5fdG91Y2hFbmRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kYXRhVHJhbnNmZXIgPSB7XG4gICAgICBkYXRhOiB7fSxcbiAgICAgIHNldERhdGE6IGZ1bmN0aW9uICh0eXBlLCB2YWwpIHtcbiAgICAgICAgdGhpcy5kYXRhW3R5cGVdID0gdmFsO1xuICAgICAgfSxcbiAgICAgIGdldERhdGE6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFbdHlwZV07XG4gICAgICB9LFxuICAgICAgZWZmZWN0QWxsb3dlZDogJ21vdmUnXG4gICAgfTtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0ID0geyB4OiAwLCB5OiAwIH07XG5cbiAgICB0aGlzLl9sYXN0VGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lciA9IG51bGw7XG4gICAgdGhpcy5faGFuZGxlQ2xpY2sgPSB0cnVlO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBfZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZTogYW55KToge1xuICAvLyAgIHg6IG51bWJlcjtcbiAgLy8gICB5OiBudW1iZXI7XG4gIC8vIH0ge1xuICAvLyAgIGxldCBfdG91Y2hNb3ZlO1xuICAvLyAgIGlmIChlLnR5cGUgPT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PSAndG91Y2htb3ZlJyB8fCBlLnR5cGUgPT0gJ3RvdWNoZW5kJyB8fCBlLnR5cGUgPT0gJ3RvdWNoY2FuY2VsJykge1xuICAvLyAgICAgY29uc3QgZXZ0ID0gdHlwZW9mIGUub3JpZ2luYWxFdmVudCA9PT0gJ3VuZGVmaW5lZCcgPyBlIDogZS5vcmlnaW5hbEV2ZW50O1xuICAvLyAgICAgY29uc3QgdG91Y2ggPSBldnQudG91Y2hlc1swXSB8fCBldnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gIC8vICAgICBfdG91Y2hNb3ZlID0ge1xuICAvLyAgICAgICB4OiB0b3VjaC5wYWdlWCxcbiAgLy8gICAgICAgeTogdG91Y2gucGFnZVlcbiAgLy8gICAgIH07XG4gIC8vICAgfSBlbHNlIGlmIChcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2Vkb3duJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZXVwJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW1vdmUnIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlb3ZlcicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VvdXQnIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlZW50ZXInIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlbGVhdmUnXG4gIC8vICAgKSB7XG4gIC8vICAgICBfdG91Y2hNb3ZlID0ge1xuICAvLyAgICAgICB4OiBlLmNsaWVudFgsXG4gIC8vICAgICAgIHk6IGUuY2xpZW50WVxuICAvLyAgICAgfTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIF90b3VjaE1vdmU7XG4gIC8vIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuZGVjbGFyZSBjbGFzcyBEcm9wcGFibGVzSW50ZXJmYWNlIHt9XG5cbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG5leHBvcnQgY29uc3QgRHJvcHBhYmxlc01peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4gIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3Q6IGJvb2xlYW4sXG4gIGRyb3BwYWJsZXNTZWxlY3Rvcjogc3RyaW5nXG4pID0+IHtcbiAgY2xhc3MgRHJvcHBhYmxlc0VsZW1lbnQgZXh0ZW5kcyBzdXBlckNsYXNzIHtcbiAgICBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcyk6IHZvaWQge1xuICAgICAgLy8gZm9yIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiB0aGUgZHJhZyBpbnRlcmFjdGlvbiBjYW4gYmUgcmVwbGFjZSB3aXRoIGEgcXRpLW1hdGNoLXRhYnVsYXIgY2xhc3NcbiAgICAgIC8vIHdoaWNoIHNob3dzIHRoZSBkYXRhIGluIGEgYSB0YWJ1bGFyIHdheSwgc28gbm8gZHJhZyBkcm9wIHNob3VsZCBiZSBpbnZvbHZlZCB0aGVuXG4gICAgICBpZiAodGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ3F0aS1tYXRjaC10YWJ1bGFyJykpIHJldHVybjtcblxuICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcyk7XG5cbiAgICAgIGNvbnN0IGRyb3BwYWJsZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAgICAgPyB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICAgICAgOiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5kcmFnb3ZlckhhbmRsZXIgPSB0aGlzLmRyYWdvdmVySGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kcmFnbGVhdmVIYW5kbGVyID0gdGhpcy5kcmFnbGVhdmVIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRyYWdlbnRlckhhbmRsZXIgPSB0aGlzLmRyYWdlbnRlckhhbmRsZXIuYmluZCh0aGlzKTtcblxuICAgICAgdGhpcy5kcm9wSGFuZGxlciA9IHRoaXMuZHJvcEhhbmRsZXIuYmluZCh0aGlzKTtcblxuICAgICAgZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4ge1xuICAgICAgICBkLnNldEF0dHJpYnV0ZSgnZHJvcHpvbmUnLCAnbW92ZScpO1xuICAgICAgICBkLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIHRoaXMuZHJhZ2xlYXZlSGFuZGxlcik7XG5cbiAgICAgICAgdGhpcy5hdHRhY2hIYW5kbGVyKGQpO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGRyb3BwYWJsZSBvZiBkcm9wcGFibGVzKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge1xuICAgICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKG11dGF0aW9uID0+IHtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycpIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lO1xuICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BOYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzYWJsZWQnOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGRyb3BwYWJsZS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoSGFuZGxlcihkcm9wcGFibGUpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVIYW5kbGVyKGRyb3BwYWJsZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkcm9wcGFibGUsIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlIC8vY29uZmlndXJlIGl0IHRvIGxpc3RlbiB0byBhdHRyaWJ1dGUgY2hhbmdlc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dGFjaEhhbmRsZXIoZHJvcHBhYmxlOiBFbGVtZW50KSB7XG4gICAgICBkcm9wcGFibGUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdvdmVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcy5kcmFnZW50ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5kcm9wSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVIYW5kbGVyKGRyb3BwYWJsZTogRWxlbWVudCkge1xuICAgICAgZHJvcHBhYmxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnb3ZlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuZHJhZ2VudGVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMuZHJvcEhhbmRsZXIpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgLy8gZm9yIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiB0aGUgZHJhZyBpbnRlcmFjdGlvbiBjYW4gYmUgcmVwbGFjZSB3aXRoIGEgcXRpLW1hdGNoLXRhYnVsYXIgY2xhc3NcbiAgICAgIC8vIHdoaWNoIHNob3dzIHRoZSBkYXRhIGluIGEgYSB0YWJ1bGFyIHdheSwgc28gbm8gZHJhZyBkcm9wIHNob3VsZCBiZSBpbnZvbHZlZCB0aGVuXG4gICAgICBpZiAodGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ3F0aS1tYXRjaC10YWJ1bGFyJykpIHJldHVybjtcblxuICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBkcmFnZW50ZXJIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgZHJhZ292ZXJIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBkcm9wcGFibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgLy8gZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgLy8gPyBkcm9wcGFibGUuc2V0QXR0cmlidXRlKCdwYXJ0JywgZHJvcHBhYmxlLmdldEF0dHJpYnV0ZSgncGFydCcpICsgJyBhY3RpdmUnKSA6XG4gICAgICBkcm9wcGFibGUuc2V0QXR0cmlidXRlKCdhY3RpdmUnLCAnJyk7XG5cbiAgICAgIGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZHJvcEhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAvLyBwazogZHJhZ2dhYmxlcyBpbiBsaWdodCBkb20gY2FuIGJlIGRyYWdnZWQgdG8gc2hhZG93ZG9tLCB0aGlzIGlzIG9uZSBvZiB0aGUgcnVsZXMgb2Ygd2ViY29tcG9uZW50cy5cbiAgICAgIC8vIFRoZXkgbWF5IG5vdCBjcmVhdGUgbmV3IGVsZW1lbnRzIGluIGxpZ2h0IGRvbS4gU29tZSBzb21ldGltZXNzIGRyb3Agem9uZXMgc2hvdWxkIGJlIGdlbmVyYXRlZFxuICAgICAgLy8gYnkgdGhlIHdlYmNvbXBvbmVudC4gVGhlbiBhIGRyYWdnYWJsZSAoIHdoaWNoIGlzIGFsd2F5cyBhbHJlYWR5IGNyZWF0ZWQgYnkgYSB3ZWJjb21wb25lbnQgKVxuICAgICAgLy8gY2FuIGJlIGluIGxpZ2h0IGRvbSwgZW4gY2FuIGJlIGRyYWdnZWQgdG8gc2hhZG93IGRvbS5cbiAgICAgIC8vIHRoaW5raW5nIG9mIGFub3RoZXIgd2F5IHdoZXJlIHdlIGp1c3QgY2hhbmdlIHNsb3RzLiBNYXliZSB0aGF0cyBiZXR0ZXIuLlxuICAgICAgY29uc3QgZHJhZ2dhYmxlSW5MaWdodERvbSA9IHRoaXMucXVlcnlTZWxlY3RvcihgW2lkZW50aWZpZXI9JHtldi5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dCcpfWApO1xuICAgICAgY29uc3QgZHJhZ2dhYmxlID0gZHJhZ2dhYmxlSW5MaWdodERvbVxuICAgICAgICA/IGRyYWdnYWJsZUluTGlnaHREb21cbiAgICAgICAgOiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2lkZW50aWZpZXI9JHtldi5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dCcpfWApO1xuXG4gICAgICBpZiAoIWRyb3BwYWJsZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBjYW5ub3QgZmluZCBkcm9wcGFibGUsIHRhcmdldDogJHtldi50YXJnZXQgPyBKU09OLnN0cmluZ2lmeShldi50YXJnZXQpIDogJ251bGwnfWApO1xuICAgICAgfSBlbHNlIGlmIChkcmFnZ2FibGUucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSAhPT0gZHJvcHBhYmxlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKSB7XG4gICAgICAgIGRyb3BwYWJsZS5hcHBlbmRDaGlsZChkcmFnZ2FibGUpO1xuICAgICAgfVxuICAgICAgLy8gZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgLy8gPyBkcm9wcGFibGUuc2V0QXR0cmlidXRlKCdwYXJ0JywgZHJvcHBhYmxlLmdldEF0dHJpYnV0ZSgncGFydCcpLnJlcGxhY2UoJ2FjdGl2ZScsICcnKS50cmltKCkpIDpcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ2FjdGl2ZScpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZHJhZ2xlYXZlSGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCBkcm9wcGFibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgZHJvcHBhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnYWN0aXZlJyk7XG4gICAgICBldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gRHJvcHBhYmxlc0VsZW1lbnQgYXMgQ29uc3RydWN0b3I8RHJvcHBhYmxlc0ludGVyZmFjZT4gJiBUO1xufTtcbiIsICIvLyBUSElTIElTIEEgTUlYSU4sIFRISVMgSVMgQSBNSVhJTlxuLy8gVVNFIExJS0UgVEhJU1xuLy8gYGBgY2xhc3MgRHJvcExpc3QgZXh0ZW5kcyBGbGlwcGFibGVzKExpdEVsZW1lbnQpIHtgYGBcbi8vIG1peGluIHdoaWNoIGFuaW1hdGVzIGNoaWxkcmVuIHdpdGggRkxJUFxuLy8gYSBjb21iaW5hdGlvbiBiZXR3ZWVuIHRoaXMgZGlyZWN0aXZlOlxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbi8vIGFuZCBhIHR1dG9yaWFsIGhvdyB0byBtYWtlIGEgbWl4aW5cbi8vIGh0dHBzOi8vbGl0LmRldi9kb2NzL2NvbXBvc2l0aW9uL21peGlucy9cblxuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBGbGlwcGFibGVzSW50ZXJmYWNlIHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZDtcbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZDtcbn1cblxuLy8ganVzdCBhIGNvbnZlcnNpb24gb2YgYSBhbmd1bGFyIEZMSVAgZGlyZWN0aXZlLCBtYWRlIGFzIGEgTWl4aW5cbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG5leHBvcnQgY29uc3QgRmxpcHBhYmxlc01peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4gIGRyb3BwYWJsZXNTZWw6IHN0cmluZyxcbiAgZHJhZ2dhYmxlc1NlbDogc3RyaW5nXG4pID0+IHtcbiAgY2xhc3MgRmxpcHBhYmxlc0VsZW1lbnQgZXh0ZW5kcyBzdXBlckNsYXNzIHtcbiAgICAvLyBwcml2YXRlIHN0YXRlID0gbmV3IE1hcDxFbGVtZW50LCBhbnk+KCk7XG4gICAgLy8gcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgICAvLyBmbGlwcGFibGVzU2VsZWN0b3I6IHN0cmluZztcbiAgICAvLyBvdmVycmlkZSBhc3luYyBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKSB7XG4gICAgLy8gICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOyAvLyBwazogdGhpcyBpcyB0aGUga2V5IHRvIGNhbGN1bGF0ZSBjb3JyZWN0IHByb3BvcnRpb25zXG4gICAgLy8gICBjb25zdCBkcmFnZ2FibGVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJhZ2dhYmxlc1NlbCkpO1xuICAgIC8vICAgZHJhZ2dhYmxlcy5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vICAgICB0aGlzLnN0YXRlLnNldChlbGVtLCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAvLyAgIH0pO1xuICAgIC8vICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuYW5pbWF0ZU1lKTtcbiAgICAvLyAgIGNvbnN0IGRyb3BwYWJsZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsKSk7XG4gICAgLy8gICBkcm9wcGFibGVzLmZvckVhY2goKGRyYWdnYWJsZSkgPT4ge1xuICAgIC8vICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZHJhZ2dhYmxlLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICAvLyAgIH0pO1xuICAgIC8vICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIC8vICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcyk7XG4gICAgLy8gfVxuICAgIC8vIHByaXZhdGUgYW5pbWF0ZU1lID0gKCkgPT4ge1xuICAgIC8vICAgdGhpcy5zdGF0ZS5mb3JFYWNoKCh2YWx1ZSwgZWxlbSkgPT4ge1xuICAgIC8vICAgICBjb25zdCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAvLyAgICAgaWYgKHRoaXMuc3RhdGUuZ2V0KGVsZW0pID09IG51bGwpIHtcbiAgICAvLyAgICAgICB0aGlzLnN0YXRlLnNldChlbGVtLCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBjb25zdCBjYWNoZSA9IHRoaXMuc3RhdGUuZ2V0KGVsZW0pO1xuICAgIC8vICAgICBjb25zdCBkZWx0YVggPSBjYWNoZS5sZWZ0IC0gbGVmdDtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFZID0gY2FjaGUudG9wIC0gdG9wO1xuICAgIC8vICAgICBjb25zdCBkZWx0YVcgPSBjYWNoZS53aWR0aCAvIHdpZHRoO1xuICAgIC8vICAgICBjb25zdCBkZWx0YUggPSBjYWNoZS5oZWlnaHQgLyBoZWlnaHQ7XG4gICAgLy8gICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgICBjb25zdCB7IGR1cmF0aW9uLCBlYXNpbmcgfSA9IHsgZHVyYXRpb246IDM1MCwgZWFzaW5nOiAnY3ViaWMtYmV6aWVyKDAuMjYsIDAuODYsIDAuNDQsIDAuOTg1KScgfTtcbiAgICAvLyAgICAgZWxlbS5hbmltYXRlKFxuICAgIC8vICAgICAgIFtcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm06IGBcbiAgICAvLyB0cmFuc2xhdGUoJHtkZWx0YVh9cHgsICR7ZGVsdGFZfXB4KVxuICAgIC8vIHNjYWxlKCR7ZGVsdGFXfSwgJHtkZWx0YUh9KVxuICAgIC8vIGAsXG4gICAgLy8gICAgICAgICAgIC8vIHdpZHRoOiBjYWNoZS53aWR0aCxcbiAgICAvLyAgICAgICAgICAgLy8gaGVpZ2h0OiBjYWNoZS5oZWlnaHQrICdweCcsXG4gICAgLy8gICAgICAgICAgIC8vIG9wYWNpdHk6IGNhY2hlLm9wYWNpdHksXG4gICAgLy8gICAgICAgICB9LFxuICAgIC8vICAgICAgICAge1xuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybTogJ25vbmUnLFxuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICBdLFxuICAgIC8vICAgICAgIHtcbiAgICAvLyAgICAgICAgIGR1cmF0aW9uLFxuICAgIC8vICAgICAgICAgZWFzaW5nLFxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH0pO1xuICAgIC8vIH07XG4gICAgLy8gb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgLy8gICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgLy8gfVxuICB9XG4gIHJldHVybiBGbGlwcGFibGVzRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxGbGlwcGFibGVzSW50ZXJmYWNlPiAmIFQ7XG59O1xuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgRHJvcHBhYmxlc01peGluIH0gZnJvbSAnLi9kcm9wcGFibGVzLW1peGluJztcbmltcG9ydCB7IEZsaXBwYWJsZXNNaXhpbiB9IGZyb20gJy4vZmxpcHBhYmxlcy1taXhpbic7XG5pbXBvcnQgeyBJSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBUb3VjaERyYWdBbmREcm9wIH0gZnJvbSAnLi9kcmFnLWRyb3AtYXBpJztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IGxpdmVRdWVyeSB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvbGl2ZS1xdWVyeSc7XG4vLyBrZXlib2FyZCBuYXZpZ2F0YWJsZSBkcmFnIGRyb3A6IGh0dHBzOi8vY29kZXBlbi5pby9TaXRlUG9pbnQvcGVuL3ZFelhialxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTUyNDIxOTYvdHlwZXNjcmlwdC1hbGxvd3MtdG8tdXNlLXByb3Blci1tdWx0aXBsZS1pbmhlcml0YW5jZS13aXRoLW1peGlucy1idXQtZmFpbHMtdG8tY1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xNzc0NCNpc3N1ZWNvbW1lbnQtNTU4OTkwMzgxXG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuaW50ZXJmYWNlIEludGVyYWN0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGNvcHlTdHlsZXNEcmFnQ2xvbmU6IGJvb2xlYW47XG4gIGRyYWdDYW5CZVBsYWNlZEJhY2s6IGJvb2xlYW47XG4gIGRyYWdPbkNsaWNrOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oXG4gIHN1cGVyQ2xhc3M6IFQsXG4gIGRyYWdnYWJsZXNTZWxlY3Rvcjogc3RyaW5nLFxuICBkcm9wcGFibGVzSW5TaGFkb3dSb290OiBib29sZWFuLFxuICBkcm9wcGFibGVzU2VsZWN0b3I6IHN0cmluZ1xuKSA9PiB7XG4gIGNsYXNzIERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IGV4dGVuZHMgRmxpcHBhYmxlc01peGluKFxuICAgIERyb3BwYWJsZXNNaXhpbihzdXBlckNsYXNzLCBkcm9wcGFibGVzSW5TaGFkb3dSb290LCBkcm9wcGFibGVzU2VsZWN0b3IpLFxuICAgIGRyb3BwYWJsZXNTZWxlY3RvcixcbiAgICBkcmFnZ2FibGVzU2VsZWN0b3JcbiAgKSB7XG4gICAgcHJvdGVjdGVkIGRyYWdnYWJsZXMgPSBuZXcgTWFwPEVsZW1lbnQsIHsgcGFyZW50OiBFbGVtZW50OyBpbmRleDogbnVtYmVyIH0+KCk7XG4gICAgcHJvdGVjdGVkIGRyb3BwYWJsZXM6IEVsZW1lbnRbXTtcbiAgICBkcmFnRHJvcEFwaTogVG91Y2hEcmFnQW5kRHJvcDtcblxuICAgIEBsaXZlUXVlcnkoZHJhZ2dhYmxlc1NlbGVjdG9yKVxuICAgIHJlSW5pdERyYWdBbmREcm9wKGRyYWdzQWRkZWQ6IEVsZW1lbnRbXSwgZHJhZ3NSZW1vdmVkOiBFbGVtZW50W10pIHtcbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICAvLyBjaGVjayBpZiBhZGRlZCBlbGVtZW50cyBhcmUgbm90IGFscmVhZHkgaW4gbGlzdFxuICAgICAgY29uc3QgZHJhZ2dhYmxlcyA9IGRyYWdzQWRkZWQuZmlsdGVyKGQgPT4gIXRoaXMuZHJhZ2dhYmxlcyB8fCAhdGhpcy5kcmFnZ2FibGVzLmdldChkKSk7XG5cbiAgICAgIGlmIChkcmFnZ2FibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5kcmFnRHJvcEFwaS5hZGREcmFnZ2FibGVzKGRyYWdzQWRkZWQpO1xuXG4gICAgICAgIGRyYWdzQWRkZWQuZm9yRWFjaChlbGVtID0+IHtcbiAgICAgICAgICAvLyBzdG9yZSBpbml0aWFsIHBvc2l0aW9ucyBvZiBlbGVtZW50cywgYW5kIG9mY291cnNlLCBqdXN0IHRoZSBlbGVtZW50cyBmb3IgbG9vcGluZyBhbmQgc3VjaFxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlcy5zZXQoZWxlbSwge1xuICAgICAgICAgICAgcGFyZW50OiBlbGVtLnBhcmVudEVsZW1lbnQsXG4gICAgICAgICAgICBpbmRleDogQXJyYXkuZnJvbShlbGVtLnBhcmVudE5vZGUuY2hpbGRyZW4pLmluZGV4T2YoZWxlbSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScsICd0cnVlJyk7XG4gICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCAoZXY6IGFueSkgPT4ge1xuICAgICAgICAgICAgZXYuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQnLCBldi5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZShgaWRlbnRpZmllcmApKTtcbiAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdkcmFnZ2luZycsICcnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIChldjogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoJ292ZXInKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCdkcmFnZ2luZycpO1xuXG4gICAgICAgICAgICAvLyBwazogaWYgbm90IGRyb3BwZWQgb24gYSBkcm9wIGxvY2F0aW9uIHB1dCBpdCBiYWNrIHdoZXJlIGl0IGJlbG9uZ3NcbiAgICAgICAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gJ25vbmUnIHx8IGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5kcmFnQ2FuQmVQbGFjZWRCYWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZHJhZ2dhYmxlcy5nZXQoZHJhZ2dhYmxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbi5pbmRleCA8IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBwb3NpdGlvbi5pbmRleFxuICAgICAgICAgICAgICAgICAgICA6IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aW9uID0gcG9zaXRpb24ucGFyZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGdhcFRleHQgPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW5baW5kZXhdO1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmluc2VydEJlZm9yZShkcmFnZ2FibGUsIGdhcFRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gJ21vdmUnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlLCB0eXBlOiBPYmplY3QgfSkgY29uZmlndXJhdGlvbjogSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgY29weVN0eWxlc0RyYWdDbG9uZTogdHJ1ZSxcbiAgICAgIGRyYWdDYW5CZVBsYWNlZEJhY2s6IHRydWUsXG4gICAgICBkcmFnT25DbGljazogZmFsc2VcbiAgICB9O1xuICAgIEB3YXRjaCgnY29uZmlndXJhdGlvbicpXG4gICAgaGFuZGxlRHJhZ09wdGlvbnNDaGFuZ2VkKG9sZCwgZHJhZ09wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuY29weVN0eWxlc0RyYWdDbG9uZSA9IGRyYWdPcHRpb25zLmNvcHlTdHlsZXNEcmFnQ2xvbmU7XG4gICAgICB0aGlzLmRyYWdEcm9wQXBpLmRyYWdPbkNsaWNrID0gZHJhZ09wdGlvbnMuZHJhZ09uQ2xpY2s7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gICAgaGFuZGxlRGlzYWJsZWRDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHMsIGNoKSA9PiB7XG4gICAgICAgIGRpc2FibGVkID8gY2guc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKSA6IGNoLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgZGlzYWJsZWQgPyBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnKSA6IGNoLnNldEF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScsICd0cnVlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgICBoYW5kbGVSZWFkb25seUNoYW5nZShvbGQsIHJlYWRvbmx5OiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocywgY2gpID0+IHtcbiAgICAgICAgcmVhZG9ubHkgPyBjaC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpIDogY2gucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgICAgICByZWFkb25seSA/IGNoLnJlbW92ZUF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScpIDogY2guc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAnbWluLWFzc29jaWF0aW9ucycgfSkgbWluQXNzb2NpYXRpb25zID0gMTtcbiAgICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogJ21heC1hc3NvY2lhdGlvbnMnIH0pIG1heEFzc29jaWF0aW9ucyA9IDE7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuICAgICAgLy8gUEs6IE1heWJlIGxhdGVyLCBmb3Igbm93IHdlIGFzc3VtZSBkcm9wcGFibGVzIGFyZSBub3QgZHluYW1pY2x5IGFkZGVkIG9yIHJlbW92ZWRcbiAgICAgIC8vIC5maWx0ZXIoKGVsZW0pID0+ICF0aGlzLmRyb3BwYWJsZXMgfHwgIXRoaXMuZHJvcHBhYmxlcy5pbmNsdWRlcyhlbGVtKSk7XG4gICAgICAvLyB0aGlzLmRyb3BwYWJsZXMgPSB0aGlzLmRyb3BwYWJsZXMgPyB0aGlzLmRyb3BwYWJsZXMuY29uY2F0KG5ld0Ryb3BwYWJsZXMpIDogbmV3RHJvcHBhYmxlcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkgPSBuZXcgVG91Y2hEcmFnQW5kRHJvcCgpO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudDxEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudD4oJ3F0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbicsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldChzYXZlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHBvc2l0aW9uLCBkcmFnZ2FibGUpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcG9zaXRpb24uaW5kZXggPCBjaGlsZHJlbi5sZW5ndGggPyBwb3NpdGlvbi5pbmRleCA6IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb24ucGFyZW50Lmluc2VydEJlZm9yZShkcmFnZ2FibGUsIGNoaWxkcmVuW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICAgIHNhdmUgJiYgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpIHtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4ge1xuICAgICAgICBjb25zdCBtYXhNYXRjaCA9ICsoZC5nZXRBdHRyaWJ1dGUoJ21hdGNoLW1heCcpIHx8IDEpO1xuICAgICAgICAvLyBjb25zdCBtYXhNaW4gPSArKGQuZ2V0QXR0cmlidXRlKCdtYXRjaC1taW4nKSB8fCAwKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZSA9IG1heE1hdGNoIDw9IChkLmNoaWxkcmVuLmxlbmd0aCB8fCAwKTtcbiAgICAgICAgZGlzYWJsZSA/IGQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKSA6IGQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICBkaXNhYmxlID8gZC5yZW1vdmVBdHRyaWJ1dGUoJ2Ryb3B6b25lJykgOiBkLnNldEF0dHJpYnV0ZSgnZHJvcHpvbmUnLCAnbW92ZScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0IHJlc3BvbnNlKHJlc3BvbnNlOiBzdHJpbmdbXSkge1xuICAgICAgLy8gZm9yIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiB0aGUgZHJhZyBpbnRlcmFjdGlvbiBjYW4gYmUgcmVwbGFjZSB3aXRoIGEgcXRpLW1hdGNoLXRhYnVsYXIgY2xhc3NcbiAgICAgIC8vIHdoaWNoIHNob3dzIHRoZSBkYXRhIGluIGEgYSB0YWJ1bGFyIHdheSwgc28gbm8gZHJhZyBkcm9wIHNob3VsZCBiZSBpbnZvbHZlZCB0aGVuXG4gICAgICBpZiAodGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ3F0aS1tYXRjaC10YWJ1bGFyJykpIHJldHVybjtcblxuICAgICAgdGhpcy5yZXNldChmYWxzZSk7XG4gICAgICBpZiAocmVzcG9uc2UgIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgIHJlc3BvbnNlLmZvckVhY2gocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGNvbnN0IFtkcm9wSWQsIC4uLmRyYWdJZHNdID0gcmVzcG9uc2Uuc3BsaXQoJyAnKS5yZXZlcnNlKCk7XG4gICAgICAgICAgaWYgKGRyb3BJZCkge1xuICAgICAgICAgICAgY29uc3QgZHJvcHBhYmxlID0gdGhpcy5kcm9wcGFibGVzLmZpbmQoZHJvcCA9PiBkcm9wLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpID09PSBkcm9wSWQpO1xuICAgICAgICAgICAgZHJhZ0lkcy5mb3JFYWNoKGRyYWdJZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRyYWdnYWJsZSA9IHRoaXMucXVlcnlTZWxlY3RvcihgW2lkZW50aWZpZXI9JHtkcmFnSWR9XWApO1xuICAgICAgICAgICAgICBpZiAoIWRyb3BwYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyb3BwYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJvcElkfWApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkcmFnZ2FibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBjYW5ub3QgZmluZCBkcmFnZ2FibGUgd2l0aCBpZGVudGlmaWVyOiAke2RyYWdJZH1gKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkcm9wcGFibGUuYXBwZW5kQ2hpbGQoZHJhZ2dhYmxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgIGNvbnN0IGRyb3BwYWJsZXMgPSBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAgID8gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpKVxuICAgICAgICA6IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpO1xuICAgICAgY29uc3QgYXNzb2NpYXRpb25zID0gZHJvcHBhYmxlcy5maWx0ZXIoZCA9PiBkLmNoaWxkRWxlbWVudENvdW50ID4gMCkubGVuZ3RoO1xuICAgICAgcmV0dXJuIHRoaXMubWluQXNzb2NpYXRpb25zIDw9IDAgfHwgdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gYXNzb2NpYXRpb25zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzYXZlUmVzcG9uc2UoKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuZHJvcHBhYmxlcy5tYXAoZHJvcHBhYmxlID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlU3RyaW5nID0gJyc7XG4gICAgICAgIGlmIChkcm9wcGFibGUuY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXNwb25zZVN0cmluZyArPVxuICAgICAgICAgICAgQXJyYXkuZnJvbShkcm9wcGFibGUuY2hpbGRyZW4pXG4gICAgICAgICAgICAgIC5tYXAoZCA9PiBkLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKVxuICAgICAgICAgICAgICAuam9pbignICcpICsgYCBgO1xuICAgICAgICB9XG4gICAgICAgIHJlc3BvbnNlU3RyaW5nICs9IGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlU3RyaW5nO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogdGhpcy5yZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxJSW50ZXJhY3Rpb24+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpRW5kQXR0ZW1wdEludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NvdW50LWF0dGVtcHQnIH0pXG4gIHB1YmxpYyBjb3VudEF0dGVtcHQ6IHN0cmluZyA9ICd0cnVlJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIHRpdGxlOiAnZW5kIGF0dGVtcHQnO1xuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiB1bmRlZmluZWQpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPGJ1dHRvbiA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfSBwYXJ0PVwiYnV0dG9uXCIgQGNsaWNrPSR7dGhpcy5lbmRBdHRlbXB0fT4ke3RoaXMudGl0bGV9PC9idXR0b24+YDtcbiAgfVxuICBwdWJsaWMgZW5kQXR0ZW1wdChlOiBFdmVudCkge1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgnZW5kLWF0dGVtcHQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0OiB0aGlzLmNvdW50QXR0ZW1wdCA9PT0gJ3RydWUnIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24nOiBRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihMaXRFbGVtZW50LCAncXRpLWdhcC10ZXh0JywgZmFsc2UsICdxdGktZ2FwJykge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtdG9wKSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtYm90dG9tKSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1sZWZ0KSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtcmlnaHQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgW3BhcnQ9J2RyYWdzJ10sXG4gICAgICBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZHJhZ3NcIiBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgcGFydD1cImRyb3BzXCI+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic6IFF0aUdhcE1hdGNoSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBsaXQvbm8taW52YWxpZC1odG1sICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIHN2ZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBxdWVyeSwgcXVlcnlBc3NpZ25lZEVsZW1lbnRzLCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzJztcbmltcG9ydCB7IHBvc2l0aW9uSG90c3BvdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90JztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUdyYXBoaWNBc3NvY2lhdGVJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgY2hvaWNlT3JkZXJpbmc6IGJvb2xlYW47XG4gIGhvdHNwb3RzO1xuICBzdGFydFBvaW50ID0gbnVsbDtcbiAgZW5kUG9pbnQgPSBudWxsO1xuICBAc3RhdGUoKSBfbGluZXMgPSBbXTtcbiAgQHN0YXRlKCkgc3RhcnRDb29yZDogeyB4OiBhbnk7IHk6IGFueSB9O1xuICBAc3RhdGUoKSBtb3VzZUNvb3JkOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIEBxdWVyeSgnc3ZnJykgc3ZnQ29udGFpbmVyO1xuICBAcXVlcnlBc3NpZ25lZEVsZW1lbnRzKHsgc2VsZWN0b3I6ICdpbWcnIH0pIGdySW1hZ2U7XG5cbiAgLy8gdGFyZ2V0IHRoZSBtYWluIHNsb3QgbWFrZSBpdCByZWxhdGl2ZSBhbmQgZml0IHdpdGggdGhlIGNvbnRlblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIHNsb3Q6bm90KFtuYW1lPSdwcm9tcHQnXSkge1xuICAgICAgICAvLyBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHF0aS1ob3RzcG90LWNob2ljZSByZWxhdGl2ZSB0byB0aGUgc2xvdCAqL1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50OyAvKiBob3RzcG90cyBub3Qgc3RyZXRjaGluZyBmdXJ0aGVyIGlmIGltYWdlIGlzIGF0IG1heCBzaXplICovXG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIC8qIGltYWdlIG5vdCBzZWxlY3RhYmxlIGFueW1vcmUgKi9cbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKHF0aS1hc3NvY2lhYmxlLWhvdHNwb3QpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB9XG4gICAgICBsaW5lLWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgICBzdmcge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMHB4O1xuICAgICAgICBsZWZ0OiAwcHg7XG4gICAgICB9XG4gICAgYFxuICBdO1xuICBzdmc6IFNWR1NWR0VsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2xpbmVzID0gW107XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aCA+IDA7XG4gIH1cbiAgc2V0IHJlc3BvbnNlKHZhbDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICB0aGlzLl9saW5lcyA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxsaW5lLWNvbnRhaW5lcj5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgIHdpZHRoPSR7aWZEZWZpbmVkKHRoaXMuZ3JJbWFnZVswXT8ud2lkdGgpfVxuICAgICAgICAgIGhlaWdodD0ke2lmRGVmaW5lZCh0aGlzLmdySW1hZ2VbMF0/LmhlaWdodCl9XG4gICAgICAgICAgdmlld2JveD1cIjAgMCAke3RoaXMuZ3JJbWFnZVswXT8ud2lkdGh9ICR7dGhpcy5nckltYWdlWzBdPy5oZWlnaHR9XCJcbiAgICAgICAgPlxuICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgdGhpcy5fbGluZXMsXG4gICAgICAgICAgICBsaW5lID0+IGxpbmUsXG4gICAgICAgICAgICAobGluZSwgaW5kZXgpID0+IHN2Z2BcbiAgICAgICAgICAgICAgPGxpbmVcbiAgICAgICAgICAgICAgICBwYXJ0PVwibGluZVwiXG4gICAgICAgICAgICAgICAgeDE9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzBdICsgJ10nKS5zdHlsZS5sZWZ0KX1cbiAgICAgICAgICAgICAgICB5MT0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMF0gKyAnXScpLnN0eWxlLnRvcCl9XG4gICAgICAgICAgICAgICAgeDI9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzFdICsgJ10nKS5zdHlsZS5sZWZ0KX1cbiAgICAgICAgICAgICAgICB5Mj0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMV0gKyAnXScpLnN0eWxlLnRvcCl9XG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwicmVkXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9saW5lcyA9IHRoaXMuX2xpbmVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy5fbGluZXMpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgKX1cbiAgICAgICAgICAke3RoaXMuc3RhcnRQb2ludCAmJlxuICAgICAgICAgIHN2Z2A8bGluZVxuICAgICAgICAgICAgcGFydD1cInBvaW50XCJcbiAgICAgICAgICAgIHgxPSR7dGhpcy5zdGFydENvb3JkLnh9XG4gICAgICAgICAgICB5MT0ke3RoaXMuc3RhcnRDb29yZC55fVxuICAgICAgICAgICAgeDI9JHt0aGlzLm1vdXNlQ29vcmQueH1cbiAgICAgICAgICAgIHkyPSR7dGhpcy5tb3VzZUNvb3JkLnl9XG4gICAgICAgICAgICBzdHJva2U9XCJyZWRcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiXG4gICAgICAgICAgLz5gfVxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9saW5lLWNvbnRhaW5lcj5gO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKGU6IEN1c3RvbUV2ZW50PFF0aUhvdHNwb3RDaG9pY2U+KTogdm9pZCB7XG4gICAgY29uc3QgaW1nID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbWcnKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGNvbnN0IGhvdHNwb3QgPSBlLnRhcmdldCBhcyBRdGlIb3RzcG90Q2hvaWNlO1xuICAgIGNvbnN0IGNvb3JkcyA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKTtcbiAgICBjb25zdCBzaGFwZSA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdzaGFwZScpO1xuICAgIGNvbnN0IGNvb3Jkc051bWJlciA9IGNvb3Jkcy5zcGxpdCgnLCcpLm1hcChzID0+IHBhcnNlSW50KHMpKTtcbiAgICBwb3NpdGlvbkhvdHNwb3RzKHNoYXBlLCBjb29yZHNOdW1iZXIsIGltZywgaG90c3BvdCk7XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoZSk6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChlKTtcblxuICAgIHRoaXMuaG90c3BvdHMgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnKTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGV2ZW50ID0+IHtcbiAgICAgIHRoaXMubW91c2VDb29yZCA9IHtcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCAtIHRoaXMuZ3JJbWFnZVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LFxuICAgICAgICB5OiBldmVudC5jbGllbnRZIC0gdGhpcy5nckltYWdlWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuaG90c3BvdHMuZm9yRWFjaChob3RzcG90ID0+IHtcbiAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzBdICsgJ3B4JztcbiAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMV0gKyAncHgnO1xuXG4gICAgICBob3RzcG90LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRQb2ludCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgIHRoaXMuc3RhcnRDb29yZCA9IHtcbiAgICAgICAgICAgIHg6IHRoaXMuc3RhcnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMF0sXG4gICAgICAgICAgICB5OiB0aGlzLnN0YXJ0UG9pbnQuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzFdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5lbmRQb2ludCkge1xuICAgICAgICAgIHRoaXMuZW5kUG9pbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICB0aGlzLl9saW5lcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2xpbmVzLFxuICAgICAgICAgICAgdGhpcy5zdGFydFBvaW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpICsgJyAnICsgdGhpcy5lbmRQb2ludC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKVxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy5fbGluZXMpO1xuICAgICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5lbmRQb2ludCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY0Fzc29jaWF0ZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uLy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkhvdHNwb3RzKFxuICBzaGFwZTogc3RyaW5nLFxuICBjb29yZHNOdW1iZXI6IG51bWJlcltdLFxuICBpbWc6IEhUTUxJbWFnZUVsZW1lbnQsXG4gIGhvdHNwb3Q6IFF0aUhvdHNwb3RDaG9pY2Vcbikge1xuICBzd2l0Y2ggKHNoYXBlKSB7XG4gICAgY2FzZSAnY2lyY2xlJzpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgW2NlbnRlclgsIGNlbnRlclksIHJhZGl1c10gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlclhQZXIgPSAoY2VudGVyWCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IGNlbnRlcllQZXIgPSAoY2VudGVyWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBjb25zdCByYWRpdXNQZXIgPSAocmFkaXVzIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gY2VudGVyWFBlciAtIHJhZGl1c1BlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSBjZW50ZXJZUGVyIC0gcmFkaXVzUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gaG90c3BvdC5zdHlsZS5oZWlnaHQgPSA0ICogcmFkaXVzUGVyICsgJ3B4JztcbiAgICAgICAgaG90c3BvdC5zdHlsZS5ib3JkZXJSYWRpdXMgPSBgOTk5OXB4YDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncmVjdCc6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IFtsZWZ0WCwgdG9wWSwgcmlnaHRYLCBib3R0b21ZXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgY29uc3QgbGVmdFhQZXIgPSAobGVmdFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCB0b3BZUGVyID0gKHRvcFkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmlnaHRYUGVyID0gKHJpZ2h0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbVlQZXIgPSAoYm90dG9tWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBsZWZ0WFBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSB0b3BZUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYUGVyIC0gbGVmdFhQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWVBlciAtIHRvcFlQZXIgKyAnJSc7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvbHknOlxuICAgICAge1xuICAgICAgICAvLyBmcm9tIGEsYixjLGQsZSxmID0+IFt7eDphLCB5OmJ9LHt4OmMsIHk6ZH0se3g6ZSwgeTpmfV1cbiAgICAgICAgY29uc3QgcG9seWNvb3JkcyA9IGNvb3Jkc051bWJlci5yZWR1Y2UoKGFjYywgY3VycmVudFZhbHVlLCBjdXJyZW50SW5kZXgsIHBvbHlDKSA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RWYWwgPSBhY2MucG9wKCk7XG4gICAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSB7IHg6IGxhc3RWYWwsIHk6IHBvbHlDW2N1cnJlbnRJbmRleF0gfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBib3VuZGluZyBib3ggYnkgZmluZGluZyB0aGUgbWF4IGF4IG1pbiBjb29yZGluYXRlcyBvZiB4IGFuZCB5XG4gICAgICAgIGNvbnN0IGxlZnRYID0gTWF0aC5taW4oLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueCkpO1xuICAgICAgICBjb25zdCByaWdodFggPSBNYXRoLm1heCguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC54KSk7XG4gICAgICAgIGNvbnN0IHRvcFkgPSBNYXRoLm1pbiguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC55KSk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVkgPSBNYXRoLm1heCguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC55KSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSByZWxhdGl2ZSBkaXN0YW5jZSBjYXVzZSB3ZSB3YW50IHRvIHVzZSBwZXJjZW50YWdlc1xuICAgICAgICBjb25zdCBsZWZ0WFBlciA9IChsZWZ0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHRvcFlQZXIgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBjb25zdCByaWdodFhQZXIgPSAocmlnaHRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgYm90dG9tWVBlciA9IChib3R0b21ZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBob3RzcG90IG9uIHgseSBhbmQgc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGluIHBlcmNlbnRhZ2VzXG4gICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IChsZWZ0WCAvIGltZy53aWR0aCkgKiAxMDAgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gKHRvcFkgLyBpbWcuaGVpZ2h0KSAqIDEwMCArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IHJpZ2h0WFBlciAtIGxlZnRYUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLmhlaWdodCA9IGJvdHRvbVlQZXIgLSB0b3BZUGVyICsgJyUnO1xuXG4gICAgICAgIC8vIGFsbCB0aGUgcG9seWdvbiBwb2ludHMgc2hvdWxkIGJlIGNvcnJlY3RlZCBjYXVzZWQgdGhleSBhcmUgZnJvbVxuICAgICAgICAvLyBpbWFnZSAwLDAgcG9pbnQsIGFuZCBzaG91bGQgYmUgZnJvbSB0aGUgaG90c3BvdCBwb2ludCB3aGljaCBhbHJlYWR5XG4gICAgICAgIC8vIGhhcyBiZWVuIG9mZnNldHRlZCBmcm9tIHRoZSBpbWFnZSBpbiB0aGUgcHJldmlvdXMgZmV3IGxpbmVzIG9mIGNvZGVcbiAgICAgICAgLy8gYWxzbyB0aGUgcG9pbnRzIGhhdmUgYSByZWxhdGl2ZSBkaXN0YW5jZSB0byB0aGUgaW1hZ2UsIGJ1dCBub3cgaGF2ZVxuICAgICAgICAvLyB0byBoYXZlIGEgcmVsYXRpdmUgZGlzdGFuY2UgZnJvbSB0aGUgd2lkdGggb2YgdGhlIGhvdHNwb3RcbiAgICAgICAgY29uc3QgcG9seWdvbkRhdGEgPSBwb2x5Y29vcmRzLm1hcChwb2ludCA9PiAoe1xuICAgICAgICAgIHg6ICgocG9pbnQueCAtIGxlZnRYKSAvIChyaWdodFggLSBsZWZ0WCkpICogMTAwLFxuICAgICAgICAgIHk6ICgocG9pbnQueSAtIHRvcFkpIC8gKGJvdHRvbVkgLSB0b3BZKSkgKiAxMDBcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBjbGlwIHBhdGggY29vcmRpbmF0ZSBzdHlsZSBpbiBwZXJjZW50YWdlc1xuICAgICAgICBjb25zdCBwb2x5RCA9IHBvbHlnb25EYXRhLm1hcChwID0+IE1hdGgucm91bmQocC54KSArICclICcgKyBNYXRoLnJvdW5kKHAueSkgKyAnJScpLmpvaW4oJywnKTtcblxuICAgICAgICAvLyA1MCUgMCUsIDEwMCUgNTAlLCA1MCUgMTAwJSwgMCUgNTAlXG4gICAgICAgIGhvdHNwb3Quc3R5bGUuY2xpcFBhdGggPSBgcG9seWdvbigke3BvbHlEfSlgO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUdyYXBoaWNHYXBNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKFxuICBMaXRFbGVtZW50LFxuICAncXRpLWdhcC1pbWcnLFxuICBmYWxzZSxcbiAgJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnXG4pIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLWdhcC1pbWcnXSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZ2FwOiAxcmVtO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDxzbG90IG5hbWU9XCJxdGktZ2FwLWltZ1wiPjwvc2xvdD5gO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKGU6IEN1c3RvbUV2ZW50PG51bGw+KTogdm9pZCB7XG4gICAgY29uc3QgaW1nID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbWcnKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGNvbnN0IGhvdHNwb3QgPSBlLnRhcmdldCBhcyBRdGlIb3RzcG90Q2hvaWNlO1xuICAgIGNvbnN0IGNvb3JkcyA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKTtcbiAgICBjb25zdCBzaGFwZSA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdzaGFwZScpO1xuICAgIGNvbnN0IGNvb3Jkc051bWJlciA9IGNvb3Jkcy5zcGxpdCgnLCcpLm1hcChzID0+IHBhcnNlSW50KHMpKTtcblxuICAgIC8vIHBvc2l0aW9uSG90c3BvdHMoc2hhcGUsIGNvb3Jkc051bWJlciwgaW1nLCBob3RzcG90KTtcbiAgICBzd2l0Y2ggKHNoYXBlKSB7XG4gICAgICBjYXNlICdjaXJjbGUnOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgW2NlbnRlclgsIGNlbnRlclksIHJhZGl1c10gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gY2VudGVyWCAtIHJhZGl1cyArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSBjZW50ZXJZIC0gcmFkaXVzICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gaG90c3BvdC5zdHlsZS5oZWlnaHQgPSAyICogcmFkaXVzICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBbbGVmdFgsIHRvcFksIHJpZ2h0WCwgYm90dG9tWV0gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gbGVmdFggKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gdG9wWSArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IHJpZ2h0WCAtIGxlZnRYICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmhlaWdodCA9IGJvdHRvbVkgLSB0b3BZICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNHYXBNYXRjaEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvbkhvdHNwb3RzIH0gZnJvbSAnLi4vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzIHtcbiAgY2hvaWNlT3JkZXJpbmc6IGJvb2xlYW47XG5cbiAgLy8gZG8gbm90IHNlbGVjdCAoIGhpZ2hsaWdodCBibHVlLCB0aGUgaW1hZ2UpXG4gIC8vIHRhcmdldCB0aGUgbWFpbiBzbG90IG1ha2UgaXQgcmVsYXRpdmUgYW5kIGZpdCB3aXRoIHRoZSBjb250ZW5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBzbG90Om5vdChbbmFtZT0ncHJvbXB0J10pIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBxdGktaG90c3BvdC1jaG9pY2UgcmVsYXRpdmUgdG8gdGhlIHNsb3QgKi9cbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsgLyogaG90c3BvdHMgbm90IHN0cmV0Y2hpbmcgZnVydGhlciBpZiBpbWFnZSBpcyBhdCBtYXggc2l6ZSAqL1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICAvKiBpbWFnZSBub3Qgc2VsZWN0YWJsZSBhbnltb3JlICovXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIHByb21wdCAtLT5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIGltYWdlIGFuZCBob3RzcG90cyAtLT5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3RzcG90T3JkZXIoZTogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcbiAgICBjb25zdCB7IGlkZW50aWZpZXIgfSA9IGUuZGV0YWlsO1xuXG4gICAgY29uc3QgaG90c3BvdCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbmQoZWwgPT4gZWwuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGlkZW50aWZpZXIpIGFzIFF0aUhvdHNwb3RDaG9pY2U7XG5cbiAgICBjb25zdCBtYXhTZWxlY3Rpb24gPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKCF0aGlzLmNob2ljZU9yZGVyaW5nKSB7XG4gICAgICB0aGlzLmNob2ljZU9yZGVyaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChob3RzcG90Lm9yZGVyID09IG51bGwpIHtcbiAgICAgICAgaWYgKCh0aGlzLl9jaG9pY2VFbGVtZW50cyBhcyBRdGlIb3RzcG90Q2hvaWNlW10pLmZpbHRlcihpID0+IGkub3JkZXIgPiAwKS5sZW5ndGggPj0gbWF4U2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjsgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgdXNlciBhbHJlYWR5IHNlbGVjdGVkIDUgaW1hZ2VzLlxuICAgICAgICB9XG4gICAgICAgIGhvdHNwb3Qub3JkZXIgPSAodGhpcy5fY2hvaWNlRWxlbWVudHMgYXMgUXRpSG90c3BvdENob2ljZVtdKS5maWx0ZXIoaSA9PiAhIWkub3JkZXIpLmxlbmd0aCArIDE7XG4gICAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHRoaXMuX2Nob2ljZUVsZW1lbnRzIGFzIFF0aUhvdHNwb3RDaG9pY2VbXSkuZm9yRWFjaChob3RzcG90ID0+IHtcbiAgICAgICAgICBpZiAoaG90c3BvdC5vcmRlciA+IGhvdHNwb3Qub3JkZXIpIHtcbiAgICAgICAgICAgIGhvdHNwb3Qub3JkZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhvdHNwb3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBob3RzcG90Lm9yZGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCcsIHRoaXMuc2V0SG90c3BvdE9yZGVyKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLnNldEhvdHNwb3RPcmRlcik7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNPcmRlckludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcbmltcG9ydCB7IHBvc2l0aW9uSG90c3BvdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90JztcbmltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHNwb3RJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICAvLyBkbyBub3Qgc2VsZWN0ICggaGlnaGxpZ2h0IGJsdWUsIHRoZSBpbWFnZSlcbiAgLy8gdGFyZ2V0IHRoZSBtYWluIHNsb3QgbWFrZSBpdCByZWxhdGl2ZSBhbmQgZml0IHdpdGggdGhlIGNvbnRlblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIHNsb3Q6bm90KFtuYW1lPSdwcm9tcHQnXSkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHF0aS1ob3RzcG90LWNob2ljZSByZWxhdGl2ZSB0byB0aGUgc2xvdCAqL1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50OyAvKiBob3RzcG90cyBub3Qgc3RyZXRjaGluZyBmdXJ0aGVyIGlmIGltYWdlIGlzIGF0IG1heCBzaXplICovXG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIC8qIGltYWdlIG5vdCBzZWxlY3RhYmxlIGFueW1vcmUgKi9cbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAvKiB3aWR0aDoxMDAlOyAqL1xuICAgICAgfVxuICAgIGBcbiAgXTtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIHByb21wdCAtLT5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIGltYWdlIGFuZCBob3RzcG90cyAtLT5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKGU6IEN1c3RvbUV2ZW50PFF0aUhvdHNwb3RDaG9pY2U+KTogdm9pZCB7XG4gICAgY29uc3QgaW1nID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbWcnKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGNvbnN0IGhvdHNwb3QgPSBlLnRhcmdldCBhcyBRdGlIb3RzcG90Q2hvaWNlO1xuICAgIGNvbnN0IGNvb3JkcyA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKTtcbiAgICBjb25zdCBzaGFwZSA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdzaGFwZScpO1xuICAgIGNvbnN0IGNvb3Jkc051bWJlciA9IGNvb3Jkcy5zcGxpdCgnLCcpLm1hcChzID0+IHBhcnNlSW50KHMpKTtcblxuICAgIHBvc2l0aW9uSG90c3BvdHMoc2hhcGUsIGNvb3Jkc051bWJlciwgaW1nLCBob3RzcG90KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24nOiBRdGlIb3RzcG90SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVIVE1MIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VJbnRlcmFjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCAnLi4vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5pbXBvcnQgeyBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlIH0gZnJvbSAnLi4vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5cbmludGVyZmFjZSBDb2x1bW4ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSb3cge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGlzQ2hlY2tlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpTWF0Y2hJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0OmZpcnN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScsXG4gIGZhbHNlLFxuICAncXRpLXNpbXBsZS1tYXRjaC1zZXQ6bGFzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnXG4pIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtdO1xuICByb3dzOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlW107XG4gIGNvbHM6IFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2VbXTtcblxuICBAc3RhdGUoKSByZXNwb25zZSA9IFtdO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJvd3MgPSBBcnJheS5mcm9tPFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2U+KFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLW1hdGNoLXNldDpmaXJzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuICAgICk7XG4gICAgdGhpcy5jb2xzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlPihcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1tYXRjaC1zZXQ6bGFzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuICAgICk7XG5cbiAgICB0aGlzLnJlc3BvbnNlID0gW107XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD4gPHNsb3Q+PC9zbG90PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICR7dGhpcy5jb2xzLm1hcCgoY29sLCBpKSA9PiBodG1sYDx0aCBwYXJ0PVwici1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwoY29sLmlubmVySFRNTCl9PC90aD5gKX1cbiAgICAgICAgPC90cj5cbiAgICAgICAgJHt0aGlzLnJvd3MubWFwKFxuICAgICAgICAgIChyb3csIHJJbmRleCkgPT5cbiAgICAgICAgICAgIGh0bWxgPHRyPlxuICAgICAgICAgICAgICA8dGQgcGFydD1cImMtaGVhZGVyXCI+JHt1bnNhZmVIVE1MKHJvdy5pbm5lckhUTUwpfTwvdGQ+XG4gICAgICAgICAgICAgICR7dGhpcy5jb2xzLm1hcCgoY29sLCBjSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGAke3Jvdy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKX0gJHtjb2wuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGA8dGQ+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9JHtjb2wuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC5jaGVja2VkPSR7dGhpcy5yZXNwb25zZS5pbmNsdWRlcyh2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHtlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2UucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlLmZpbHRlcih2ID0+IHYgIT09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50PFJlc3BvbnNlSW50ZXJhY3Rpb24+KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC90ZD5gO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdHI+YFxuICAgICAgICApfVxuICAgICAgPC90YWJsZT5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1tYXRjaC1pbnRlcmFjdGlvbic6IFF0aU1hdGNoSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbi8vIHRzbGludDpkaXNhYmxlOiBpbmRlbnRcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIC8vIHBrOiBUaGlzIG5lZWRzIHNvbWUgZXhwbGFuYXRpb25cbiAgLy8gaW4gdGhlIGFzc29jaWF0ZSBpbnRlcmFjdGlvbiB0aGVyZSBpcyBhIHNwZWNpYWwgc2xvdCBmb3IgdGhlc2UgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZXNcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpO1xuICB9XG5cbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiBxdGktbWF0Y2gtaW50ZXJhY3Rpb24sIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgdXNlZCB0byBkZW5vdGUgdGhlXG4gIC8vIGRyYWdnYWJsZSwgYnV0IGFsc28gdGhlIGRyb3BwYWJsZS4gV0VJUkQuLiBidXQgbGV0cyBkZWFsIHdpdGggaXQuXG4gIC8vIFNvIHdlIGhhdmUgYSBzbG90IGZvciB3aGVuZXZlciBhbm90aGVyIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgZHJvcHBlZCBpbiBoZXJlLlxuICAvLyBBbmQgd2UgaGF2ZSBzbG90IGZvciBjb250ZW50IGxpa2UgaW4gdGhpcyBhc3NvY2lhdGUgaW50ZXJhY3Rpb25cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJzogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbWVkaWEtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU1lZGlhSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHZhbHVlID0gMDtcbiAgcmVzZXQoKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiB1bmRlZmluZWQpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkludGVyYWN0aW9uLnByb3BlcnRpZXMsXG4gICAgICAuLi57XG4gICAgICAgIHN0ZXA6IHtcbiAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgYXR0cmlidXRlOiAnc3RlcCcsXG4gICAgICAgICAgZGVmYXVsdDogMTBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIGdldCBhdWRpbywgdmlkZW8gb2Ygb2JqZWN0IHRhZy5cbiAgICBjb25zdCBtZWRpYU9iamVjdCA9IHRoaXMucXVlcnlTZWxlY3RvcignYXVkaW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJykgfHwgdGhpcy5xdWVyeVNlbGVjdG9yKCdvYmplY3QnKTtcbiAgICBpZiAobWVkaWFPYmplY3QpIHtcbiAgICAgIC8vIGxpc3RlbiB0byBlbmRlZCBldmVudFxuICAgICAgbWVkaWFPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCAoKSA9PiB7XG4gICAgICAgIC8vIHNldCB2YWx1ZSB0byAwXG4gICAgICAgIHRoaXMudmFsdWUrKztcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbWVkaWEtaW50ZXJhY3Rpb24nOiBRdGlNZWRpYUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3JkZXItaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU9yZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oTGl0RWxlbWVudCwgYHF0aS1zaW1wbGUtY2hvaWNlYCwgdHJ1ZSwgJ2Ryb3AtbGlzdCcpIHtcbiAgY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lczogc3RyaW5nO1xuICBwcml2YXRlIF9vcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcblxuICBwdWJsaWMgc3RhdGljIGxheW91dENsYXNzID0gWydxdGktY2hvaWNlcy10b3AnLCAncXRpLWNob2ljZXMtYm90dG9tJywgJ3F0aS1jaG9pY2VzLWxlZnQnLCAncXRpLWNob2ljZXMtcmlnaHQnXTtcblxuICAvKiogb3JpZW50YXRpb24gb2YgY2hvaWNlcyAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogMWZyO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiByb3c7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdkcm9wLWxpc3QnXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtYm90dG9tKSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtbGVmdCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj4gPC9zbG90PlxuICAgICAgPGRpdiBwYXJ0PVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxzbG90IHBhcnQ9XCJkcmFnc1wiPiA8L3Nsb3Q+XG4gICAgICAgIDxkaXYgcGFydD1cImRyb3BzXCI+XG4gICAgICAgICAgJHtBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1jaG9pY2UnKSkubWFwKFxuICAgICAgICAgICAgKF8sIGkpID0+IGh0bWxgPGRyb3AtbGlzdCBwYXJ0PVwiZHJvcC1saXN0XCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpfVwiPjwvZHJvcC1saXN0PmBcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIElORlJJTkdFTUVOVC4uXG4gICAgLy8gUEs6IGlmIGNoaWxkcmVuIGFyZSBkcm9wcGVkIGludG8gc2hhZG93ZG9tLCBzdHlsaW5nIGlzIGxvc3QsIHNvIHdlIGFkZCBhIHBhcnQgc2VsZWN0b3Igb24gYWxsIGNoaWxkcmVuXG4gICAgLy8gSSB0aGV5IGdldCBsb3N0IGludG8gc2hhZG93IGRvbSBhZnRlciBkcm9wcGVkLCB0aGV5IGNhbiBzdGlsbCBiZSBzdHlsZWQgdmlhIGxpZ2h0ZG9tIHBhcnQgc2VsZWN0b3JzXG4gICAgdGhpcy5jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWNob2ljZScpKTtcbiAgICB0aGlzLmNoaWxkcmVuTWFwLmZvckVhY2goZWwgPT4gZWwuc2V0QXR0cmlidXRlKCdwYXJ0JywgJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vcmRlci1pbnRlcmFjdGlvbic6IFF0aU9yZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY2xhc3MgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGN1cnNvcjogbW92ZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIGBcbiAgXTtcbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uJywgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24pO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZScpXG5leHBvcnQgY2xhc3MgUXRpUG9zaXRpb25PYmplY3RTdGFnZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcbiAgc3RhcnRYOiBhbnk7XG4gIHN0YXJ0WTogYW55O1xuICBkcmFnRWxlbWVudDogYW55O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lciA9IHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIgPSB0aGlzLmRyYWdFbGVtZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgLy8gRGVmaW5lIGEgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBtb3VzZW1vdmUgZXZlbnQgb24gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gIGRyYWdFbGVtZW50SGFuZGxlcihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRoZSBtb3VzZSBoYXMgbW92ZWQgc2luY2UgdGhlIGxhc3QgZXZlbnRcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgY29uc3QgZGVsdGFZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLmRyYWdFbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldExlZnQgKyBkZWx0YVggKyAncHgnO1xuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5kcmFnRWxlbWVudC5vZmZzZXRUb3AgKyBkZWx0YVkgKyAncHgnO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGEpOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoYSk7XG5cbiAgICAvLyBHZXQgdGhlIGRyYWdnYWJsZSBhbmQgZHJvcCB6b25lIGVsZW1lbnRzXG4gICAgdGhpcy5kcmFnRWxlbWVudCA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbj5pbWcnKTtcbiAgICAvLyBjb25zdCBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhcycpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMgZm9yIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLnN0YXJ0WCA9IDA7XG4gICAgdGhpcy5zdGFydFkgPSAwO1xuXG4gICAgLy8gQWRkIGEgbW91c2Vkb3duIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAvLyBTYXZlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcblxuICAgICAgLy8gQWRkIGEgbW91c2Vtb3ZlIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkb2N1bWVudFxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIsIHRydWUpO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cblxuICByZW1vdmVNb3ZlTGlzdGVuZXIoZXZlbnQpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1wb3NpdGlvbi1vYmplY3Qtc3RhZ2UnOiBRdGlQb3NpdGlvbk9iamVjdFN0YWdlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWF4Q2hvaWNlczogbnVtYmVyID0gMDtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfcG9pbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxwb2ludC1jb250YWluZXI+XG4gICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgIHRoaXMuX3BvaW50cyxcbiAgICAgICAgICBwb2ludCA9PiBwb2ludCxcbiAgICAgICAgICAocG9pbnQsIGluZGV4KSA9PiBodG1sYFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwYXJ0PVwicG9pbnRcIlxuICAgICAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknLFxuICAgICAgICAgICAgICAgIGxlZnQ6IGAke3BvaW50LnNwbGl0KCcgJylbMF19cHhgLFxuICAgICAgICAgICAgICAgIHRvcDogYCR7cG9pbnQuc3BsaXQoJyAnKVsxXX1weGBcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZW1vdmUgcG9pbnQgYXQgJHtwb2ludH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9JHsoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BvaW50cyA9IHRoaXMuX3BvaW50cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIGBcbiAgICAgICAgKX1cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9wb2ludC1jb250YWluZXI+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIHBvaW50LWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3BvaW50cyA9IFtdO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BvaW50cy5sZW5ndGggPj0gdGhpcy5taW5DaG9pY2VzICYmIHRoaXMuX3BvaW50cy5sZW5ndGggPD0gdGhpcy5tYXhDaG9pY2VzO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKHZhbDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLl9wb2ludHMgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuXG4gICAgLy8gQXR0YWNoIGEgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGltYWdlIGVsZW1lbnRcbiAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICBjb25zdCB4ID0gZXZlbnQub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5vZmZzZXRZO1xuXG4gICAgICB0aGlzLl9wb2ludHMgPSBbLi4udGhpcy5fcG9pbnRzLCB4ICsgJyAnICsgeV07XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgIH0pO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic6IFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHF1ZXJ5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIFNsaWRlckludGVyYWN0aW9uLlR5cGUgKHF0aS1zbGlkZXItaW50ZXJhY3Rpb24pIHByZXNlbnRzIHRoZSBjYW5kaWRhdGUgd2l0aCBhIGNvbnRyb2wgZm9yIHNlbGVjdGluZyBhIG51bWVyaWNhbCB2YWx1ZSBiZXR3ZWVuIGEgbG93ZXIgYW5kIHVwcGVyIGJvdW5kLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zNjF4Y3JqNHFjeWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQGNzc3Byb3AgLS1zaG93LXZhbHVlIC0gc2hvd3MgdGhlIGN1cnJlbnQgdmFsdWUgd2hpbGUgc2xpZGluZ1xuICogQGNzc3Byb3AgLS1zaG93LXRpY2tzIC0gc2hvd3MgdGhlIHRpY2tzIGFjY29yZGluZyB0byBzdGVwc1xuICogQGNzc3Byb3AgLS1zaG93LWJvdW5kcyAtIHNob3dzIHZhbHVlIGZvciBsb3dlciBhbmQgdXBwZXIgYm91bmRhcnlcbiAqXG4gKiBAY3NzcGFydCBzbGlkZXIgLS0gc2xpZGVyIGlubHVkaW5nLCBib3VuZHMgYW5kIHRpY2tzIGFuZCB2YWx1ZSwgdXNlIGl0IGZvciBwYWRkaW5ncyBhbmQgbWFyZ2luc1xuICogQGNzc3BhcnQgYm91bmRzIC0tIGRpdiBmb3IgYm91bmRzLCBjb250YWluaW5nIHR3byBkaXZzIGZvciB3aXRoIG1pbiwgYW5kIG1heCBib3VuZHMgdmFsdWVcbiAqIEBjc3NwYXJ0IHRpY2tzIC0tIGRpdiBmb3IgdGlja3MsIHVzZSBsaW5lYWlyIGdyYWRpZW50IGFuZCBleHBvc2VkIGNzcyB2YXJpYWJsZXMgZm9yIHN0eWxpbmdcbiAqIEBjc3NwYXJ0IHJhaWwgLS0gZGl2IGZvciByYWlsLCBzdHlsZSBhY2NvcmRpbmcgdG8gbmVlZHNcbiAqIEBjc3NwYXJ0IGtub2IgLS0gZGl2LCBzaG91bGQgYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGVcbiAqIEBjc3NwYXJ0IHZhbHVlIC0tIGRpdiwgY29udGFpbmluZyB2YWx1ZVxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSA8cXRpLXNpbXBsZS1jaG9pY2U+IG11c3QgYmUgcGxhY2VkLlxuICogQHNsb3QgcHJvbXB0IC0gc2xvdCB3aGVyZSB0aGUgcHJvbXB0IGlzIHBsYWNlZC5cbiAqL1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNsaWRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2xpZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIGNzTGl2ZTogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcblxuICBAcXVlcnkoJyNrbm9iJylcbiAgcHJpdmF0ZSBfa25vYjogSFRNTEVsZW1lbnQ7XG5cbiAgQHF1ZXJ5KCcjcmFpbCcpXG4gIHByaXZhdGUgX3JhaWw6IEhUTUxFbGVtZW50O1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciB9KSB2YWx1ZTogbnVtYmVyO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3N0ZXAtbGFiZWwnIH0pIHN0ZXBMYWJlbCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcmV2ZXJzZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX21pbjogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2xvd2VyLWJvdW5kJyB9KSBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1taW4nLCBgJHt0aGlzLl9taW59YCk7XG4gIH1cbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cblxuICBwcml2YXRlIF9tYXg6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICd1cHBlci1ib3VuZCcgfSkgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgnLCBgJHt0aGlzLl9tYXh9YCk7XG4gIH1cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cblxuICBwcml2YXRlIF9zdGVwOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnc3RlcCcgfSkgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXN0ZXAnLCBgJHt0aGlzLl9zdGVwfWApO1xuICB9XG4gIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gIH1cblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAob2xkLCBkaXNhYmxlZCkgPT4ge307XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKG9sZCwgcmVhZG9ubHkpID0+IHt9O1xuXG4gIHJlc2V0KCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHN0YXRpYyBzaGFkb3dSb290T3B0aW9uczogU2hhZG93Um9vdEluaXQgPSB7IC4uLkxpdEVsZW1lbnQuc2hhZG93Um9vdE9wdGlvbnMsIGRlbGVnYXRlc0ZvY3VzOiB0cnVlLCBtb2RlOiAnb3BlbicgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qIHRoZSBjb21wdXRlZCBzdHlsZSBpcyBhIGxpdmUgcHJvcGVydHksIHdlIHVzZSB0aGlzIHRvIGdldCBjc3MgdmFyaWFibGVzXG4gICAgc2VlIHJlbmRlciB0ZW1wbGF0ZSAqL1xuICAgIHRoaXMuY3NMaXZlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTtcbiAgfVxuXG4gIHNldCByZXNwb25zZShteVJlc3BvbnNlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG15UmVzcG9uc2UpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdRdGlTbGlkZXJJbnRlcmFjdGlvbjogcmVzcG9uc2UgaXMgYW4gYXJyYXksIGJ1dCBzaG91bGQgYmUgYSBzaW5nbGUgdmFsdWUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChteVJlc3BvbnNlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgY29uc29sZS5lcnJvcignUXRpU2xpZGVySW50ZXJhY3Rpb246IHJlc3BvbnNlIGlzIG5vdCBhIG51bWJlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgLy8gY29udmVydCB0aGUgdmFsdWUsIHdoaWNoIGlzIHRoZSByZWFsIHNsaWRlciB2YWx1ZSB0byBhIHBlcmNlbnRhZ2UgZm9yIHRoZSBkb20uXG4gICAgdGhpcy52YWx1ZSA8IHRoaXMubWluICYmICh0aGlzLnZhbHVlID0gdGhpcy5taW4pO1xuICAgIHRoaXMudmFsdWUgPiB0aGlzLm1heCAmJiAodGhpcy52YWx1ZSA9IHRoaXMubWF4KTtcbiAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpICogMTAwO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdmFsdWUtcGVyY2VudGFnZScsIGAke3ZhbHVlUGVyY2VudGFnZX0lYCk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxkaXYgaWQ9XCJzbGlkZXJcIiBwYXJ0PVwic2xpZGVyXCI+XG4gICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LWJvdW5kcycpID09ICd0cnVlJ1xuICAgICAgICAgID8gaHRtbGA8ZGl2IGlkPVwiYm91bmRzXCIgcGFydD1cImJvdW5kc1wiPlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWlufTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWF4fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctdGlja3MnKSA9PSAndHJ1ZScgPyBodG1sYDxkaXYgaWQ9XCJ0aWNrc1wiIHBhcnQ9XCJ0aWNrc1wiPjwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGlkPVwicmFpbFwiIHBhcnQ9XCJyYWlsXCIgQG1vdXNlZG93bj0ke3RoaXMuX29uTW91c2VEb3dufSBAdG91Y2hzdGFydD0ke3RoaXMuX29uVG91Y2hNb3ZlfT5cbiAgICAgICAgICA8ZGl2IGlkPVwia25vYlwiIHBhcnQ9XCJrbm9iXCI+XG4gICAgICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy12YWx1ZScpID09ICd0cnVlJ1xuICAgICAgICAgICAgICA/IGh0bWxgPGRpdiBpZD1cInZhbHVlXCIgcGFydD1cInZhbHVlXCI+JHt0aGlzLnZhbHVlfTwvZGl2PmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdzbGlkZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyB4IH0gPSB0aGlzLmdldFBvc2l0aW9uRnJvbUV2ZW50KGV2ZW50KTtcbiAgICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICBjb25zdCB7IHggfSA9IHRoaXMuZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICAgIGNvbnN0IGRpZmZYID0gZXZlbnQucGFnZVggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcblxuICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqIGNhbGN1bGF0ZVZhbHVlIGdldHMgeCBwb3NpdGlvbiBhbmQgY29tcGFyZXMgdGhpcyB3aXRoIHRoZSB0b3RhbCB3aWR0aCBpbiBwaXhlbHMgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVWYWx1ZShkaWZmWDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWVOb3cgPSB0aGlzLm1pbiArICgodGhpcy5tYXggLSB0aGlzLm1pbikgKiBkaWZmWCkgLyB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIGNvbnN0IHJvdW5kZWRTdGVwVmFsdWUgPSB0aGlzLm1pbiArIE1hdGgucm91bmQoKHZhbHVlTm93IC0gdGhpcy5taW4pIC8gdGhpcy5fc3RlcCkgKiB0aGlzLl9zdGVwO1xuICAgIHRoaXMudmFsdWUgPSByb3VuZGVkU3RlcFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfSB7XG4gICAgbGV0IF90b3VjaE1vdmU7XG4gICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgICApIHtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IGUuY2xpZW50WCxcbiAgICAgICAgeTogZS5jbGllbnRZXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2xpZGVyLWludGVyYWN0aW9uJzogUXRpU2xpZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBpdGVtQ29udGV4dCxcbiAgdHlwZSBDYWxjdWxhdGUsXG4gIHR5cGUgSXRlbUNvbnRleHQsXG4gIHR5cGUgUmVzcG9uc2VWYXJpYWJsZVxufSBmcm9tICdAY2l0b2xhYi9xdGktY29tcG9uZW50cy9xdGktY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbi8qKlxuICogaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5maTI5cThkdWJqZ3dcbiAqIDxxdGktY3VzdG9tLW9wZXJhdG9yIGNsYXNzPVwianMub3JnXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJzdHJpbmdcIj48IVtDREFUQVtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjb250ZXh0LnZhcmlhYmxlcyk7XG4gICAgICAgICAgcmV0dXJuICdCJ1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbicpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBdXT48L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktY3VzdG9tLW9wZXJhdG9yPlxuICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWN1c3RvbS1vcGVyYXRvcicpXG5leHBvcnQgY2xhc3MgUXRpQ3VzdG9tT3BlcmF0b3IgZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgQ2FsY3VsYXRlIHtcbiAgcHJpdmF0ZSBvcGVyYXRvckZ1bmN0aW9uOiBGdW5jdGlvbjtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuaGFuZGxlU2xvdENoYW5nZX0+PC9zbG90PmA7XG4gIH1cblxuICBoYW5kbGVTbG90Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIGV4cGVjdGluZyA8WyFDREFUQVsgLi4uIF1dPiBpcyBjb252ZXJ0ZWQgaW50byA8IS0tIC4uLiAtLT4gd2l0aCBxdGktdHJhbnNmb3JtOiBjRGF0YVRvQ29tbWVudFxuICAgIGNvbnN0IGNvbW1lbnROb2RlID0gQXJyYXkuZnJvbSh0aGlzLmZpcnN0RWxlbWVudENoaWxkPy5jaGlsZE5vZGVzID8/IFtdKS5maW5kKFxuICAgICAgbm9kZSA9PiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BlcmF0b3JGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbignY29udGV4dCcsICdmbicsICdpdGVtJywgY29tbWVudE5vZGUudGV4dENvbnRlbnQgPz8gJycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2N1c3RvbS1vcGVyYXRvciBjb250YWlucyBpbnZhbGlkIGphdmFzY3JpcHQgY29kZScsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgZm4gPSB7XG4gICAgICB2YXJpYWJsZTogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKT8udmFsdWUgPz8gJycsXG4gICAgICBjb3JyZWN0OiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgICh0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlKVxuICAgICAgICAgID8uY29ycmVjdFJlc3BvbnNlID8/ICcnXG4gICAgfTtcbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgZ2V0VmFyaWFibGU6ICh2YXJpYWJsZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgdGhpcy5fY29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICB1cGRhdGVPdXRjb21lVmFyaWFibGU6IChvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvckZ1bmN0aW9uKHRoaXMuX2NvbnRleHQsIGZuLCBpdGVtKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLW9wZXJhdG9yJzogUXRpQ3VzdG9tT3BlcmF0b3I7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnKVxuZXhwb3J0IGNsYXNzIFF0aUFzc29jaWFibGVIb3RzcG90IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci1ob3RzcG90Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC1pbWdcIj48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWFibGUtaG90c3BvdCc6IFF0aUFzc29jaWFibGVIb3RzcG90O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAnKVxuZXhwb3J0IGNsYXNzIFF0aUdhcCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcCc6IFF0aUdhcDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLWltZycpXG5leHBvcnQgY2xhc3MgUXRpR2FwSW1nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLWltZycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtaW1nJzogUXRpR2FwSW1nO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAtdGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpR2FwVGV4dCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLXRleHQnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLXRleHQnOiBRdGlHYXBUZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8vIHR5cGUgc2hhcGUgPSB7IHNoYXBlOiAncmVjdCcgfCAnY2lyY2xlJyB8ICdwb2x5JzsgY29vcmRzOiBudW1iZXJbXSB9O1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHNwb3QtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlIb3RzcG90Q2hvaWNlIGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXJpYS1vcmRlcnZhbHVlJywgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIG9yZGVyOiBudW1iZXI7XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1jaG9pY2UnOiBRdGlIb3RzcG90Q2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90dGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpSG90dGV4dCBleHRlbmRzIFF0aUNob2ljZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHBhcnQ9XCJjaFwiPjxkaXYgcGFydD1cImNoYVwiPjwvZGl2PjwvZGl2PlxuICAgICAgPHNsb3Q+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0JzogUXRpSG90dGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHt9XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1pbmxpbmUtY2hvaWNlJzogUXRpSW5saW5lQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENTU1Jlc3VsdEdyb3VwLCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8qKlxuICogQHN1bW1hcnkgU2hvcnQgc3VtbWFyeSBvZiB0aGUgY29tcG9uZW50J3MgaW50ZW5kZWQgdXNlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGV2ZW50IHF0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCAtIEVtaXR0ZWQgd2hlbiBhIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqIEBldmVudCBxdGktcmVnaXN0ZXItY2hvaWNlIC0gRW1pdHRlZCB3aGVuIGFuIGNob2ljZSBpcyBhZGRlZFxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBFbWl0dGVkIHdoZW4gYSBjaG9pY2UgaXMgcmVtb3ZlZFxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVDaG9pY2UgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuICAgIHNsb3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgcGFydD1cImNoXCI+PGRpdiBwYXJ0PVwiY2hhXCI+PC9kaXY+PC9kaXY+XG4gICAgICA8c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWNob2ljZSc6IFF0aVNpbXBsZUNob2ljZTtcbiAgfVxufVxuIiwgIi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9ldmVudC10eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvdmFyaWFibGVzJztcbi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaXRlbS1ib2R5L3F0aS1pdGVtLWJvZHknO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcHJvbXB0L3F0aS1wcm9tcHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktc3R5bGVzaGVldC9xdGktc3R5bGVzaGVldCc7XG4vKiBzdGFydCByZXNwb25zZSBhbmQgb3V0Y29tZSAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uL3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbic7XG4vKiBlbmQgcmVzcG9uc2UgYW5kIG91dGNvbWUgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrJztcbi8qIHN0YXJ0IGZlZWRiYWNrICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2stYmxvY2svcXRpLWZlZWRiYWNrLWJsb2NrJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1pbmxpbmUvcXRpLWZlZWRiYWNrLWlubGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2svcXRpLW1vZGFsLWZlZWRiYWNrJztcbi8qIGVuZCBmZWVkYmFjayAqL1xuLyogc3RhcnQgdGV4dGVudHJ5aW50ZXJhY3Rpb24gKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uL3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uL3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJztcbi8qIGVuZCB0ZXh0ZW50cnlpbnRlcmFjdGlvbiAqL1xuLyogc3RhcnQgaG90dGV4dCAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nO1xuLyogZW5kIGhvdHRleHQgKi9cbi8qIHN0YXJ0IGlubGluZWNob2ljZSAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24nO1xuLyogZW5kIGlubGluZWNob2ljZSAqL1xuLyogc3RhcnQgY2hvaWNlaW50ZXJhY3Rpb24gKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgY2hvaWNlaW50ZXJhY3Rpb24gKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktb3V0Y29tZS1wcm9jZXNzaW5nL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcnO1xuLyogc3RhcnQgY3VzdG9tIGludGVyYWN0aW9ucyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uJztcbi8qIGVuZCBjdXN0b20gaW50ZXJhY3Rpb25zICovXG4vKiBzdGFydCBvbmx5IHByZXZpZXcgaXRlbXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uJztcbi8qIGVuZCBvbmx5IHByZXZpZXcgaXRlbXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktY3VzdG9tLW9wZXJhdG9yL3F0aS1jdXN0b20tb3BlcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWFibGUtaG90c3BvdCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtaW1nJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWNob2ljZSc7XG5cbmNvbnNvbGUubG9nKFxuICAnJWNDXHUwMEJGVE8lY0xhYiVjOiBxdGktY29tcG9uZW50cyBsb2FkZWQnLFxuICAnZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Z3JlZW4nLFxuICAnZm9udC1mYW1pbHk6IFwiUFQgU2Fuc1wiLCBmb250LXdlaWdodDpib2xkOyBjb2xvcjpncmVlbjsgZm9udC1zaXplOiBzbWFsbGVyO3ZlcnRpY2FsLWFsaWduOiBzdWInLFxuICAnZm9udC13ZWlnaHQ6dW5zZXQnXG4pO1xuXG4vLyBjc3MgZm9yIGZvbnQgcHQtc2FucyBhbmQgc3Vic2NyaXB0IGFuZCBncmVlblxuIl0sCiAgIm1hcHBpbmdzIjogInVEQUFBLE9BQVMsV0FBQUEsT0FBZSxlQUN4QixPQUFTLGNBQUFDLEdBQVksUUFBQUMsT0FBWSxNQUNqQyxPQUFTLGlCQUFBQyxHQUFlLFlBQUFDLE1BQWdCLG9CQzJCakMsU0FBU0MsRUFBTUMsRUFBaUNDLEVBQXdCLENBQzdFLElBQU1DLEVBQTBDQyxFQUFBLENBQzlDLHFCQUFz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R0FDOEQscUJBRDlEQSxHQUFORyxFQUFBLENBRE5FLEdBQWMsb0JBQW9CLEdBQ3RCTCxJQ1BiLE9BQVMsaUJBQUFNLE9BQXFCLG9CQUU5QixPQUFTLFFBQUFDLE9BQVksTUFHZCxJQUFNQyxHQUFOLGNBQXlCQyxDQUFVLENBQy9CLFFBQVMsQ0FDaEIsT0FBT0M7QUFBQSxxQkFFVCxDQUNGLEVBTGFGLEdBQU5HLEVBQUEsQ0FETkMsR0FBYyxhQUFhLEdBQ2ZKLElDTGIsT0FBUyxjQUFBSyxPQUFrQixNQUMzQixPQUFTLGlCQUFBQyxPQUFxQixvQkFHdkIsSUFBTUMsR0FBTixjQUE4QkMsRUFBVyxDQUFDLEVBQXBDRCxHQUFORSxFQUFBLENBRE5DLEdBQWMsbUJBQW1CLEdBQ3JCSCxJQ0piLE9BQVMsaUJBQUFJLE9BQXFCLG9CQUM5QixPQUF5QixPQUFBQyxHQUFLLFFBQUFDLE9BQVksTUFnQm5DLElBQU1DLEdBQU4sY0FBOEJDLENBQVUsQ0FXcEMsUUFBUyxDQUNoQixPQUFPQztBQUFBLGlDQUVULENBQ0YsRUFmYUYsR0FDSixPQUFTRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFETEgsR0FBTkksRUFBQSxDQUROQyxHQUFjLG1CQUFtQixHQUNyQkwsSUNxRGIsUUFBUSxJQUNOLDBDQUNBLGdDQUNBLGdHQUNBLG1CQUNGIiwKICAibmFtZXMiOiBbInByb3ZpZGUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvcGVydHlOYW1lIiwgIm9wdGlvbnMiLCAicmVzb2x2ZWRPcHRpb25zIiwgIl9fc3ByZWFkVmFsdWVzIiwgInByb3RvIiwgImRlY29yYXRlZEZuTmFtZSIsICJ1cGRhdGUiLCAid2F0Y2hlZFByb3BlcnRpZXMiLCAiY2hhbmdlZFByb3BzIiwgInByb3BlcnR5IiwgImtleSIsICJvbGRWYWx1ZSIsICJuZXdWYWx1ZSIsICJjcmVhdGVDb250ZXh0IiwgIml0ZW1Db250ZXh0VmFyaWFibGVzIiwgIml0ZW1Db250ZXh0IiwgIlF0aUFzc2Vzc21lbnRJdGVtIiwgIkxpdEVsZW1lbnQiLCAiXyIsICJkaXNhYmxlZCIsICJjaCIsICJyZWFkb25seSIsICJpdGVtQ29udGV4dFZhcmlhYmxlcyIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZlZWRiYWNrRWxlbWVudCIsICJyZXNwb25zZUlkZW50aWZpZXIiLCAiY291bnRBdHRlbXB0IiwgIm91dGNvbWVJZGVudGlmaWVyIiwgInZhbHVlIiwgInYiLCAidmFyaWFibGUiLCAibWF0Y2hpbmdWYWx1ZSIsICJpbnRlcmFjdGlvbkVsZW1lbnQiLCAiZWwiLCAiZmUiLCAibXlSZXNwb25zZXMiLCAicmVzcG9uc2UiLCAiaW50ZXJhY3Rpb24iLCAiaSIsICJodG1sIiwgInNob3ciLCAicmVzcG9uc2VzIiwgInZhcmkiLCAiY3IiLCAiY291bnROdW1BdHRlbXB0cyIsICJfYSIsICJyZXNwb25zZVByb2Nlc3NvciIsICJpZGVudGlmaWVyIiwgImV2ZW50IiwgIm91dGNvbWVWYXJpYWJsZSIsICJuYW1lIiwgImRldGFpbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvdmlkZSIsICJpdGVtQ29udGV4dCIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJwcm9wZXJ0eSIsICJLRVlDT0RFIiwgIlF0aUNob2ljZSIsICJMaXRFbGVtZW50IiwgIl8iLCAiZGlzYWJsZWQiLCAiZXZlbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAidmFsdWUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiUXRpSXRlbUJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpUHJvbXB0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpU3R5bGVzaGVldCIsICJMaXRFbGVtZW50IiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJpdGVtIiwgImxpbmsiLCAic3R5bGVzIiwgImVycm9yIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJ2YXJpYWJsZSIsICJodG1sVmFsdWVzIiwgImRlZmF1bHRWYWx1ZXMiLCAibiIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAidGFibGUiLCAiZW50cmllcyIsICJlbnRyeSIsICJzb3VyY2VWYWx1ZSIsICJ0YXJnZXRWYWx1ZSIsICJvdXRjb21lVmFyaWFibGUiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aVJlc3BvbnNlRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJyZXN1bHQiLCAiY29ycmVjdFJlc3BvbnNlIiwgInZhbHVlcyIsICJpIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQ29udGVudEJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlSdWJyaWNCbG9jayIsICJMaXRFbGVtZW50IiwgIm9sZCIsICJkaXNhYmxlZCIsICJjbGFzc05hbWUiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgInByb3BlcnR5IiwgImRlY2ltYWxTZXBhcmF0b3IiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAibnVtYmVyIiwgImRTZXAiLCAiSXNOdWxsT3JVbmRlZmluZWQiLCAidmFsdWUiLCAiUXRpRmVlZGJhY2siLCAiTGl0RWxlbWVudCIsICJvdXRjb21lSWRlbnRpZmllciIsICJvdXRjb21lVmFyaWFibGUiLCAiaXNGb3VuZCIsICJJc051bGxPclVuZGVmaW5lZCIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpRmVlZGJhY2tCbG9jayIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlGZWVkYmFja0lubGluZSIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1vZGFsRmVlZGJhY2siLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiaWZEZWZpbmVkIiwgInByb3BlcnR5IiwgIkxpdEVsZW1lbnQiLCAiSW50ZXJhY3Rpb24iLCAiTGl0RWxlbWVudCIsICJ2YWwiLCAidmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInJlZiIsICJjcmVhdGVSZWYiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImRpc2FibGVkIiwgImNsYXNzTmFtZSIsICJuclJvd3MiLCAidmFsdWUiLCAiY3NzIiwgImh0bWwiLCAicmVmIiwgImV2ZW50IiwgImlmRGVmaW5lZCIsICJpbnB1dCIsICJ0ZXh0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiaWZEZWZpbmVkIiwgImNyZWF0ZVJlZiIsICJsaXZlUXVlcnkiLCAicXVlcnlTZWxlY3RvciIsICJvcHRpb25zIiwgIm9ic2VydmVyIiwgInJlc29sdmVkT3B0aW9ucyIsICJfX3NwcmVhZFZhbHVlcyIsICJwcm90byIsICJkZWNvcmF0ZWRGbk5hbWUiLCAiY29ubmVjdGVkQ2FsbGJhY2siLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCAiX2EiLCAiY2FsbGJhY2siLCAibXV0YXRpb25MaXN0IiwgImVsZW1lbnRzVG9XYXRjaCIsICJtdXRhdGlvbiIsICJhZGRlZE5vZGVzIiwgImUiLCAicmVtb3ZlZE5vZGVzIiwgIm4iLCAiZWxlbWVudHNBZGRlZCIsICJRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImNsYXNzZXMiLCAiY2xhc3NOYW1lIiwgIm5yUm93cyIsICJ2YWx1ZSIsICJjc3MiLCAiaHRtbCIsICJldmVudCIsICJpZkRlZmluZWQiLCAiaW5wdXQiLCAidGV4dCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiQ2hvaWNlcyIsICJJbnRlcmFjdGlvbiIsICJfIiwgImRpc2FibGVkIiwgImNoIiwgInJlYWRvbmx5IiwgImFjYyIsICJ2YWwiLCAicmVzcG9uc2VWYWx1ZSIsICJyZXNwb25zZVZhbHVlQXJyYXkiLCAiY2UiLCAicnYiLCAiY2hvaWNlRWxlbWVudCIsICJldmVudCIsICJzZWxlY3RlZElkZW50aWZpZXJzIiwgInJlc3VsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiUXRpSG90dGV4dEludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiUXRpSW5saW5lQ2hvaWNlSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3NzIiwgImh0bWwiLCAib3B0aW9uIiwgInVuc2FmZUhUTUwiLCAiY2hvaWNlcyIsICJjaG9pY2UiLCAic2VsZWN0ZWRPcHRpb24iLCAiaSIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgInZhbHVlIiwgImV2ZW50IiwgInNlbGVjdGVkT3B0aW9uVmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJodG1sIiwgImNzcyIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIlF0aUNob2ljZUludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJtYXRjaENvcnJlY3QiLCAibWFwUmVzcG9uc2UiLCAibWFwUmVzcG9uc2VQb2ludCIsICJRdGlSZXNwb25zZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInJ1bGVzIiwgInJ1bGUiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgInNwbGl0dGVkVGVtcGxhdGVOYW1lIiwgInRlbXBsYXRlTmFtZSIsICJtYXBSZXNwb25zZSIsICJtYXBSZXNwb25zZVBvaW50IiwgIm1hdGNoQ29ycmVjdCIsICJzdHJIVE1MIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJRdGlSdWxlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlMb29rdXBPdXRjb21lVmFsdWUiLCAiUXRpUnVsZSIsICJpZGVudGlmaWVyIiwgIm91dGNvbWVWYXJpYWJsZSIsICJ2YWx1ZSIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiaHRtbCIsICJRdGlSZXNwb25zZUNvbmRpdGlvbiIsICJRdGlSdWxlIiwgImh0bWwiLCAiYnJhbmNoZXMiLCAiaSIsICJicmFuY2giLCAiUXRpU2V0T3V0Y29tZVZhbHVlIiwgIlF0aVJ1bGUiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAiZXhwcmVzc2lvbiIsICJ2YWx1ZSIsICJRdGlTZXRPdXRjb21lVmFsdWVSdWxlIiwgInYiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIlF0aVJlc3BvbnNlRWxzZSIsICJzdWJSdWxlcyIsICJpIiwgImh0bWwiLCAiUXRpUmVzcG9uc2VJZiIsICJRdGlSZXNwb25zZUVsc2UiLCAicmVzdWx0IiwgImkiLCAiUXRpUmVzcG9uc2VFbHNlSWYiLCAiUXRpUmVzcG9uc2VJZiIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3RhdGUiLCAiUXRpRXhwcmVzc2lvbiIsICJMaXRFbGVtZW50IiwgImlkZW50aWZpZXIiLCAidmFsdWVzIiwgInYiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJlcnJvciIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJRdGlFeHByZXNzaW9uIiwgIlF0aUFuZCIsICJxdGlBbmRNaXhpbiIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgIkJhc2UiLCAiY2hpbGRyZW4iLCAiYyIsICJjb25kaXRpb24iLCAidmFsdWUiLCAiZSIsICJRdGlBbmQiLCAicHJvcGVydHkiLCAiUXRpQmFzZVZhbHVlIiwgIlF0aUV4cHJlc3Npb24iLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUNvbnRhaW5zIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAicHJvamVjdGlvbjEiLCAicHJvamVjdGlvbjIiLCAieCIsICJRdGlDb3JyZWN0IiwgIlF0aUV4cHJlc3Npb24iLCAiaWRlbnRpZmllciIsICJyZXNwb25zZVZhcmlhYmxlIiwgInByb3BlcnR5IiwgIlF0aUVxdWFsUm91bmRlZCIsICJRdGlFeHByZXNzaW9uIiwgImZpZ3VyZXMiLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiZmxvYXQxIiwgImZsb2F0MiIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicHJvcGVydHkiLCAiU2NvcmluZ0hlbHBlciIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgImJhc2VUeXBlIiwgImludDEiLCAiaW50MiIsICJmbG9hdDEiLCAiZmxvYXQyIiwgInBhaXIxIiwgInBhaXIyIiwgIlF0aUVxdWFsIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpR3QiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlHdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlJc051bGwiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFsdWUiLCAiUXRpTHQiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlMdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9wZXJ0eSIsICJRdGlNYXBSZXNwb25zZSIsICJRdGlFeHByZXNzaW9uIiwgInJlc3BvbnNlIiwgIm1hcHBpbmciLCAiY2FuZGlkYXRlUmVzcG9uc2VzIiwgInJlc3VsdCIsICJjYW5kaWRhdGVSZXNwb25zZSIsICJtYXBwZWRWYWx1ZSIsICJlbnRyeSIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJMaXRFbGVtZW50IiwgIlF0aU1hcHBpbmciLCAiTGl0RWxlbWVudCIsICJlbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpTWF0Y2giLCAiX1F0aU1hdGNoIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlVG9NYXAiLCAiY29ycmVjdFZhbHVlSW5mbyIsICJfYSIsICJTY29yaW5nSGVscGVyIiwgImFuc3dlckluZGV4IiwgImNvcnJlY3RBbnN3ZXIiLCAiY3VycmVudFZhbHVlVG9NYXAiLCAibWF0Y2hpbmdWYWx1ZSIsICJtdiIsICJRdGlNZW1iZXIiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9qZWN0aW9uMSIsICJRdGlNdWx0aXBsZSIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YXJpYWJsZSIsICJodG1sIiwgIlF0aU5vdCIsICJRdGlFeHByZXNzaW9uIiwgImh0bWwiLCAiUXRpT3IiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJjIiwgImNvbmRpdGlvbiIsICJ2YWx1ZSIsICJRdGlPcmRlcmVkIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhcmlhYmxlIiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0UHJpbnRlZFZhcmlhYmxlIiwgIkxpdEVsZW1lbnQiLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgImFzc2Vzc21lbnRJdGVtIiwgImlkZW50aWZpZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiUXRpUHJvZHVjdCIsICJRdGlFeHByZXNzaW9uIiwgImFjY3VtdWxhdG9yIiwgImN1cnJlbnRWYWx1ZSIsICJlcnJvciIsICJwcm9wZXJ0eSIsICJRdGlTdHJpbmdNYXRjaCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInYxIiwgInYyIiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aVN1bSIsICJRdGlFeHByZXNzaW9uIiwgIlF0aVN1bUV4cHJlc3Npb24iLCAiZXhwcmVzc2lvbnMiLCAiYyIsICJ2YWx1ZSIsICJhIiwgImIiLCAiUXRpVmFyaWFibGUiLCAiUXRpRXhwcmVzc2lvbiIsICJpZGVudGlmaWVyIiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lUHJvY2Vzc2luZyIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAibG9naWMiLCAiUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IiLCAicnVsZXMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgInJ1bGUiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidXJsIiwgImJhc2VVcmwiLCAicmVxdWlyZUNvbmZpZyIsICJtb2R1bGVDb25nIiwgIm1vZHVsZUlkIiwgImUiLCAiY29uZmlnIiwgInByaW1hcnlDb25maWciLCAiZmFsbGJhY2siLCAiX2EiLCAiZmFpbGVkVG9SZXNvbHZlIiwgInBhdGhXaXRoRXh0ZW5zaW9uIiwgImZhbGxiYWNrQ29uZmlnIiwgImlucHV0IiwgInRvcExldmVsS2V5IiwgIm5lc3RlZE9iamVjdCIsICJuZXN0ZWRLZXkiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAibmV3UmVzcG9uc2UiLCAic3RyaW5naWZpZWQiLCAidmFsIiwgIm5vZGUiLCAiYSIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgImVsIiwgInByb3BlcnR5IiwgImtleSIsICJjaGlsZHJlbiIsICJhbGxLZXkiLCAiYyIsICJrIiwgImdldENoaWxkUHJvcGVydGllcyIsICJwcm9wZXJ0aWVzIiwgImNoaWxkIiwgIl9fc3ByZWFkVmFsdWVzIiwgInBjaSIsICJ0eXBlIiwgImRvbSIsICJhY2MiLCAibGluayIsICJzdHlsZXMiLCAicmVxdWlyZSIsICJjdHhBIiwgIndhc1ByZXZpb3VzbHlMb2FkZWQiLCAiZXJyIiwgIm1vZHVsZVJlc29sdXRpb25QYXRoIiwgIm1vZHVsZVJlc29sdXRpb25GYWxsYmFja1BhdGgiLCAiaW50ZXJhY3Rpb25Nb2R1bGVzIiwgIm1vZHVsZXMiLCAibW9kdWxlIiwgInByaW1hcnlQYXRoIiwgImZhbGxiYWNrUGF0aCIsICJfX3NwcmVhZFByb3BzIiwgInN0ciIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJzdGF0ZSIsICJUb3VjaERyYWdBbmREcm9wIiwgIl9Ub3VjaERyYWdBbmREcm9wIiwgInR5cGUiLCAidmFsIiwgImUiLCAiX3RvdWNoZXMiLCAiZWxlbWVudFN0eWxlcyIsICJzdHlsZSIsICJfdGhpcyIsICJ0YXJnZXQiLCAiZHJhZ2dhYmxlcyIsICJlbCIsICJ4IiwgInkiLCAiX2EiLCAiZXZlbnQiLCAicG9pbnRGcm9tVG91Y2hFdmVudCIsICJjdXN0b21FbCIsICJwYWdlIiwgInRvdWNoIiwgImNsaWVudFJlY3QiLCAiZXZlbnRUeXBlIiwgImJ1YmJsZSIsICJwcm9wZXJ0eSIsICJEcm9wcGFibGVzTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcm9wcGFibGVzSW5TaGFkb3dSb290IiwgImRyb3BwYWJsZXNTZWxlY3RvciIsICJEcm9wcGFibGVzRWxlbWVudCIsICJjaGFuZ2VkUHJvcHMiLCAiZHJvcHBhYmxlcyIsICJkIiwgImRyb3BwYWJsZSIsICJtdXRhdGlvbnMiLCAibXV0YXRpb24iLCAiX2EiLCAiZXYiLCAiZHJhZ2dhYmxlSW5MaWdodERvbSIsICJkcmFnZ2FibGUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIkZsaXBwYWJsZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgImRyb3BwYWJsZXNTZWwiLCAiZHJhZ2dhYmxlc1NlbCIsICJGbGlwcGFibGVzRWxlbWVudCIsICJwcm9wZXJ0eSIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcmFnZ2FibGVzU2VsZWN0b3IiLCAiZHJvcHBhYmxlc0luU2hhZG93Um9vdCIsICJkcm9wcGFibGVzU2VsZWN0b3IiLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQiLCAiRmxpcHBhYmxlc01peGluIiwgIkRyb3BwYWJsZXNNaXhpbiIsICJkcmFnc0FkZGVkIiwgImRyYWdzUmVtb3ZlZCIsICJlbGVtIiwgImV2IiwgImRyYWdnYWJsZSIsICJwb3NpdGlvbiIsICJpbmRleCIsICJpbnRlcmFjdGlvbiIsICJnYXBUZXh0IiwgIm9sZCIsICJkcmFnT3B0aW9ucyIsICJkaXNhYmxlZCIsICJzIiwgImNoIiwgInJlYWRvbmx5IiwgImNoYW5nZWRQcm9wcyIsICJUb3VjaERyYWdBbmREcm9wIiwgInNhdmUiLCAiY2hpbGRyZW4iLCAiZCIsICJkaXNhYmxlIiwgInJlc3BvbnNlIiwgImRyb3BJZCIsICJkcmFnSWRzIiwgImRyb3BwYWJsZSIsICJkcm9wIiwgImRyYWdJZCIsICJhc3NvY2lhdGlvbnMiLCAiX2EiLCAicmVzcG9uc2VTdHJpbmciLCAiX19kZWNvcmF0ZUNsYXNzIiwgImxpdmVRdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl8iLCAiaW5kZXgiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdhcE1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3ZnIiwgImN1c3RvbUVsZW1lbnQiLCAicXVlcnkiLCAicXVlcnlBc3NpZ25lZEVsZW1lbnRzIiwgInN0YXRlIiwgImlmRGVmaW5lZCIsICJyZXBlYXQiLCAicG9zaXRpb25Ib3RzcG90cyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAiaW1nIiwgImhvdHNwb3QiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhZGl1cyIsICJjZW50ZXJYUGVyIiwgImNlbnRlcllQZXIiLCAicmFkaXVzUGVyIiwgImxlZnRYIiwgInRvcFkiLCAicmlnaHRYIiwgImJvdHRvbVkiLCAibGVmdFhQZXIiLCAidG9wWVBlciIsICJyaWdodFhQZXIiLCAiYm90dG9tWVBlciIsICJwb2x5Y29vcmRzIiwgImFjYyIsICJjdXJyZW50VmFsdWUiLCAiY3VycmVudEluZGV4IiwgInBvbHlDIiwgImxhc3RWYWwiLCAicG9pbnQiLCAicG9seUQiLCAicCIsICJRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgImh0bWwiLCAiaWZEZWZpbmVkIiwgInJlcGVhdCIsICJsaW5lIiwgImluZGV4IiwgInN2ZyIsICJlIiwgIl8iLCAiaSIsICJpbWciLCAiaG90c3BvdCIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJldmVudCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInF1ZXJ5IiwgInF1ZXJ5QXNzaWduZWRFbGVtZW50cyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlHcmFwaGljR2FwTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImUiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgImNlbnRlclgiLCAiY2VudGVyWSIsICJyYWRpdXMiLCAibGVmdFgiLCAidG9wWSIsICJyaWdodFgiLCAiYm90dG9tWSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlHcmFwaGljT3JkZXJJbnRlcmFjdGlvbiIsICJDaG9pY2VzIiwgImh0bWwiLCAiaWRlbnRpZmllciIsICJob3RzcG90IiwgImVsIiwgIm1heFNlbGVjdGlvbiIsICJpIiwgImltZyIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlIb3RzcG90SW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgImUiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImNvbCIsICJpIiwgInVuc2FmZUhUTUwiLCAicm93IiwgInJJbmRleCIsICJjSW5kZXgiLCAidmFsdWUiLCAiZSIsICJ2IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTWVkaWFJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJodG1sIiwgIm1lZGlhT2JqZWN0IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpT3JkZXJJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl8iLCAiaSIsICJlbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbiIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpUG9zaXRpb25PYmplY3RTdGFnZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZXZlbnQiLCAiZGVsdGFYIiwgImRlbHRhWSIsICJhIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInJlcGVhdCIsICJzdHlsZU1hcCIsICJRdGlTZWxlY3RQb2ludEludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImh0bWwiLCAicmVwZWF0IiwgInBvaW50IiwgImluZGV4IiwgInN0eWxlTWFwIiwgImUiLCAiXyIsICJpIiwgInZhbCIsICJldmVudCIsICJ4IiwgInkiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIm5vdGhpbmciLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJxdWVyeSIsICJRdGlTbGlkZXJJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJvbGQiLCAiZGlzYWJsZWQiLCAicmVhZG9ubHkiLCAidmFsdWUiLCAibXlSZXNwb25zZSIsICJ2YWx1ZVBlcmNlbnRhZ2UiLCAiaHRtbCIsICJub3RoaW5nIiwgImV2ZW50IiwgImhhbmRsZVRvdWNoTW92ZSIsICJ4IiwgImRpZmZYIiwgImhhbmRsZVRvdWNoRW5kIiwgImhhbmRsZU1vdXNlTW92ZSIsICJoYW5kbGVNb3VzZVVwIiwgInZhbHVlTm93IiwgInJvdW5kZWRTdGVwVmFsdWUiLCAiX3RvdWNoTW92ZSIsICJldnQiLCAidG91Y2giLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJxdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAic3RhdGUiLCAiUXRpQ3VzdG9tT3BlcmF0b3IiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImV2ZW50IiwgIl9hIiwgIl9iIiwgIl9jIiwgImNvbW1lbnROb2RlIiwgIm5vZGUiLCAiZSIsICJmbiIsICJyZXNwb25zZUlkZW50aWZpZXIiLCAidiIsICJpdGVtIiwgInZhcmlhYmxlSWRlbnRpZmllciIsICJvdXRjb21lSWRlbnRpZmllciIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlBc3NvY2lhYmxlSG90c3BvdCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcEltZyIsICJMaXRFbGVtZW50IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcFRleHQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUhvdHNwb3RDaG9pY2UiLCAiUXRpQ2hvaWNlIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiUXRpSG90dGV4dCIsICJRdGlDaG9pY2UiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpSW5saW5lQ2hvaWNlIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJRdGlTaW1wbGVDaG9pY2UiLCAiUXRpQ2hvaWNlIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50Il0KfQo=
451
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaXRlbS1ib2R5L3F0aS1pdGVtLWJvZHkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaXRlbS1ib2R5L3F0aS1pdGVtLWJvZHkuc3R5bGVzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXByb21wdC9xdGktcHJvbXB0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXN0eWxlc2hlZXQvcXRpLXN0eWxlc2hlZXQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24vcXRpLW91dGNvbWUtZGVjbGFyYXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcnVicmljLWJsb2NrL3F0aS1jb250ZW50LWJvZHkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcnVicmljLWJsb2NrL3F0aS1ydWJyaWMtYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWJsb2NrL3F0aS1mZWVkYmFjay1ibG9jay50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbnRlcm5hbC91dGlscy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2staW5saW5lL3F0aS1mZWVkYmFjay1pbmxpbmUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLW1vZGFsLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL2RlY29yYXRvcnMvbGl2ZS1xdWVyeS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi5zdHlsZXMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL2ludGVybmFsL3RlbXBsYXRlLXN0cmluZ3MudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktbG9va3VwLW91dGNvbWUtdmFsdWUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJ1bGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktcmVzcG9uc2UtY29uZGl0aW9uL3F0aS1yZXNwb25zZS1jb25kaXRpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcnVsZS9xdGktc2V0LW91dGNvbWUtdmFsdWUvcXRpLXNldC1vdXRjb21lLXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWVsc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYvcXRpLXJlc3BvbnNlLWVsc2UtaWYudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktcmVzcG9uc2UtZWxzZS9xdGktcmVzcG9uc2UtaWYvcXRpLXJlc3BvbnNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL3F0aS1hbmQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktYW5kL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWJhc2V2YWx1ZS9xdGktYmFzZXZhbHVlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbnRhaW5zL3F0aS1jb250YWlucy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb3JyZWN0L3F0aS1jb3JyZWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsLXJvdW5kZWQvcXRpLWVxdWFsLXJvdW5kZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZXF1YWwvcXRpLWVxdWFsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWd0L3F0aS1ndC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndGUvcXRpLWd0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1pcy1udWxsL3F0aS1pcy1udWxsLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWx0L3F0aS1sdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdGUvcXRpLWx0ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXAtcmVzcG9uc2UvcXRpLW1hcC1yZXNwb25zZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXBwaW5nL3F0aS1tYXBwaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hdGNoL3F0aS1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tZW1iZXIvcXRpLW1lbWJlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tdWx0aXBsZS9xdGktbXVsdGlwbGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbm90L3F0aS1ub3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktb3IvcXRpLW9yLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yZGVyZWQvcXRpLW9yZGVyZWQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJpbnRlZC12YXJpYWJsZS9xdGktcHJpbnRlZC12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1wcm9kdWN0L3F0aS1wcm9kdWN0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN0cmluZy1tYXRjaC9xdGktc3RyaW5nLW1hdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXN1bS9xdGktc3VtLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXZhcmlhYmxlL3F0aS12YXJpYWJsZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcvcXRpLW91dGNvbWUtcHJvY2Vzc2luZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtYXBpLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcm9wcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9mbGlwcGFibGVzLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktY3VzdG9tLW9wZXJhdG9yL3F0aS1jdXN0b20tb3BlcmF0b3IudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWFibGUtaG90c3BvdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtaW1nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtdGV4dC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgcHJvdmlkZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3Rpb25DaGFuZ2VkRGV0YWlscywgT3V0Y29tZUNoYW5nZWREZXRhaWxzIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXZlbnQtdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNwb25zZUludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHR5cGUgeyBWYXJpYWJsZURlY2xhcmF0aW9uLCBWYXJpYWJsZVZhbHVlIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSwgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgdHlwZSB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjayc7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgUXRpUmVzcG9uc2VQcm9jZXNzaW5nIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dFZhcmlhYmxlcyB9IGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcXRpLWFzc2Vzc21lbnQtaXRlbSBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5kbHRubmo4N2wweWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGRlcGVuZGVuY3kgcXRpLWZlZWRiYWNrXG4gKiBAZGVwZW5kZW5jeSBxdGktcmVzcG9uc2Vwcm9jZXNzaW5nXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzIGdvLlxuICpcbiAqIEBldmVudCBxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCAtIEVtaXR0ZWQgd2hlbiBhbiBpbnRlcmFjdGlvbiBpcyBjaGFuZ2VkLlxuICogQGV2ZW50IHF0aS1vdXRjb21lLWNoYW5nZWQgLSBFbWl0dGVkIHdoZW4gYW4gb3V0Y29tZSBoYXMgY2hhbmdlZC5cbiAqIEBldmVudCBxdGktcmVzcG9uc2UtcHJvY2Vzc2luZyAtIEVtaXR0ZWQgd2hlbiByZXNwb25zZS1wcm9jZXNzaW5nIGlzIGNhbGxlZC5cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzZXNzbWVudC1pdGVtJylcbmV4cG9ydCBjbGFzcyBRdGlBc3Nlc3NtZW50SXRlbSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGl0bGU6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgYWRhcHRpdmU6ICd0cnVlJyB8ICdmYWxzZScgPSAnZmFsc2UnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGltZURlcGVuZGVudDogJ3RydWUnIHwgJ2ZhbHNlJyA9ICdmYWxzZSc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZURpc2FibGVkQ2hhbmdlID0gKF86IGJvb2xlYW4sIGRpc2FibGVkOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG4gIH07XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seTogYm9vbGVhbjtcbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2gucmVhZG9ubHkgPSByZWFkb25seSkpO1xuXG4gIEBwcm92aWRlKHsgY29udGV4dDogaXRlbUNvbnRleHQgfSlcbiAgLy8gQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwcml2YXRlIF9jb250ZXh0OiBJdGVtQ29udGV4dCA9IHtcbiAgICBpZGVudGlmaWVyOiB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpLFxuICAgIHZhcmlhYmxlczogaXRlbUNvbnRleHRWYXJpYWJsZXNcbiAgfTtcblxuICBwdWJsaWMgZ2V0IHZhcmlhYmxlcygpOiBWYXJpYWJsZVZhbHVlPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2ID0+ICh7IGlkZW50aWZpZXI6IHYuaWRlbnRpZmllciwgdmFsdWU6IHYudmFsdWUsIHR5cGU6IHYudHlwZSB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhcmlhYmxlcyh2YWx1ZTogVmFyaWFibGVWYWx1ZTxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+W10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLnNvbWUodiA9PiAhKCdpZGVudGlmaWVyJyBpbiB2KSkpIHtcbiAgICAgIGNvbnNvbGUud2FybigndmFyaWFibGVzIHByb3BlcnR5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBWYXJpYWJsZURlY2xhcmF0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVmFsdWUgPSB2YWx1ZS5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi52YXJpYWJsZSwgLi4ubWF0Y2hpbmdWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25FbGVtZW50ID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIChlbDogSW50ZXJhY3Rpb24pID0+IGVsLnJlc3BvbnNlSWRlbnRpZmllciA9PT0gdmFyaWFibGUuaWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb25FbGVtZW50KSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb25FbGVtZW50LnJlc3BvbnNlID0gdmFyaWFibGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdvdXRjb21lJykge1xuICAgICAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2sodmFyaWFibGUuaWRlbnRpZmllcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbENvbnRleHQ6IFJlYWRvbmx5PEl0ZW1Db250ZXh0PiA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcyB9O1xuICBwcml2YXRlIF9mZWVkYmFja0VsZW1lbnRzOiBRdGlGZWVkYmFja1tdID0gW107XG4gIHByaXZhdGUgX2ludGVyYWN0aW9uRWxlbWVudHM6IEludGVyYWN0aW9uW10gPSBbXTtcblxuICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgdGhpcy5fZW1pdDx7IGRldGFpbDogUXRpQXNzZXNzbWVudEl0ZW0gfT4oJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tY29ubmVjdGVkJywgdGhpcyk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHZhcmlhYmxlcyBwcm9wZXJ0eSBpbnN0ZWFkICovXG4gIHNldCByZXNwb25zZXMobXlSZXNwb25zZXM6IFJlc3BvbnNlSW50ZXJhY3Rpb25bXSkge1xuICAgIGlmIChteVJlc3BvbnNlcykge1xuICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBteVJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5nZXRSZXNwb25zZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAocmVzcG9uc2VWYXJpYWJsZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5yZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIGUgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiBbLi4udGhpcy5fY29udGV4dC52YXJpYWJsZXMsIGUuZGV0YWlsLnZhcmlhYmxlXSB9O1xuICAgICAgdGhpcy5faW5pdGlhbENvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIChlOiBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBmZWVkYmFja0VsZW1lbnQgPSBlLmRldGFpbDtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMucHVzaChmZWVkYmFja0VsZW1lbnQpO1xuICAgICAgZmVlZGJhY2tFbGVtZW50LmNoZWNrU2hvd0ZlZWRiYWNrKGZlZWRiYWNrRWxlbWVudC5vdXRjb21lSWRlbnRpZmllcik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCAoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnB1c2goZS50YXJnZXQgYXMgSW50ZXJhY3Rpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZW5kLWF0dGVtcHQnLCAoZTogQ3VzdG9tRXZlbnQ8eyByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZzsgY291bnRBdHRlbXB0OiBib29sZWFuIH0+KSA9PiB7XG4gICAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0IH0gPSBlLmRldGFpbDtcbiAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsICd0cnVlJyk7XG4gICAgICB0aGlzLnByb2Nlc3NSZXNwb25zZShjb3VudEF0dGVtcHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgLy8gd29yZHQgYWFuZ2Vyb2VwZW4gdmFudWl0IGRlIHByb2Nlc3Npbmd0ZW1wbGF0ZVxuICAgICAgJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsXG4gICAgICAoZTogQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4pID0+IHtcbiAgICAgICAgY29uc3QgeyBvdXRjb21lSWRlbnRpZmllciwgdmFsdWUgfSA9IGUuZGV0YWlsO1xuICAgICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShvdXRjb21lSWRlbnRpZmllciwgdmFsdWUpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHRoaXMuaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvcnJlY3RSZXNwb25zZShzaG93OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZXMgPSB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maWx0ZXIoXG4gICAgICAodmFyaTogUmVzcG9uc2VWYXJpYWJsZSB8IE91dGNvbWVWYXJpYWJsZSkgPT4gJ2NvcnJlY3RSZXNwb25zZScgaW4gdmFyaSAmJiB2YXJpLmNvcnJlY3RSZXNwb25zZVxuICAgICkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHJlc3BvbnNlcyA9IHJlc3BvbnNlVmFyaWFibGVzLm1hcChjciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IGNyLmlkZW50aWZpZXIsXG4gICAgICAgIHJlc3BvbnNlOiBjci5jb3JyZWN0UmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgaSA9PiBpLmdldEF0dHJpYnV0ZSgncmVzcG9uc2UtaWRlbnRpZmllcicpID09PSByZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgICBpbnRlcmFjdGlvbiAmJiAoaW50ZXJhY3Rpb24uY29ycmVjdFJlc3BvbnNlID0gc2hvdyA/IHJlc3BvbnNlLnJlc3BvbnNlIDogJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzUmVzcG9uc2UoY291bnROdW1BdHRlbXB0czogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNwb25zZVByb2Nlc3NvciA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnKSBhcyB1bmtub3duIGFzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZztcbiAgICBpZiAoIXJlc3BvbnNlUHJvY2Vzc29yKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHByb2Nlc3NpbmcgdGVtcGxhdGUgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IucHJvY2Vzcykge1xuICAgICAgLy8gY29uc29sZS5pbmZvKCdDbGllbnQgc2lkZSByZXNwb25zZSB3ZWJjb21wb25lbnRzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKCk7XG5cbiAgICBpZiAodGhpcy5hZGFwdGl2ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy8gaWYgYWRhcGF0aXZlLCBjb21wbGV0aW9uU3RhdHVzIGlzIHNldCBieSB0aGUgcHJvY2Vzc2luZyB0ZW1wbGF0ZVxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoJ2NvbXBsZXRpb25TdGF0dXMnLCB0aGlzLl9nZXRDb21wbGV0aW9uU3RhdHVzKCkpO1xuICAgIH1cblxuICAgIGNvdW50TnVtQXR0ZW1wdHMgJiZcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKFxuICAgICAgICAnbnVtQXR0ZW1wdHMnLFxuICAgICAgICAoK3RoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09ICdudW1BdHRlbXB0cycpPy52YWx1ZSArIDEpLnRvU3RyaW5nKClcbiAgICAgICk7XG5cbiAgICB0aGlzLl9lbWl0KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2VkJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRSZXNwb25zZXMoKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2luaXRpYWxDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3BvbnNlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFJlc3BvbnNlVmFyaWFibGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldE91dGNvbWUoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8T3V0Y29tZVZhcmlhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldFZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB8fCBudWxsO1xuICB9XG5cbiAgLy8gc2F2aW5nIHByaXZhdGVzIGhlcmU6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZShldmVudDogQ3VzdG9tRXZlbnQ8UmVzcG9uc2VJbnRlcmFjdGlvbj4pIHtcbiAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UgfSA9IGV2ZW50LmRldGFpbDtcbiAgICB0aGlzLnVwZGF0ZVJlc3BvbnNlVmFyaWFibGUocmVzcG9uc2VJZGVudGlmaWVyLCByZXNwb25zZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVzcG9uc2VWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLl9jb250ZXh0LFxuICAgICAgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5tYXAodiA9PiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyID8gdiA6IHsgLi4udiwgdmFsdWU6IHZhbHVlIH0pKVxuICAgIH07XG5cbiAgICB0aGlzLl9lbWl0PEludGVyYWN0aW9uQ2hhbmdlZERldGFpbHM+KCdxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlOiB2YWx1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYWRhcHRpdmUgPT09ICdmYWxzZScpIHtcbiAgICAgIC8vIGlmIGFkYXBhdGl2ZSwgY29tcGxldGlvblN0YXR1cyBpcyBzZXQgYnkgdGhlIHByb2Nlc3NpbmcgdGVtcGxhdGVcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKCdjb21wbGV0aW9uU3RhdHVzJywgdGhpcy5fZ2V0Q29tcGxldGlvblN0YXR1cygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlT3V0Y29tZVZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5nZXRPdXRjb21lKGlkZW50aWZpZXIpO1xuICAgIGlmICghb3V0Y29tZVZhcmlhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3Qgc2V0IHF0aS1vdXRjb21lLWlkZW50aWZpZXI6ICR7aWRlbnRpZmllcn0sIGl0IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4ge1xuICAgICAgICBpZiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi52LFxuICAgICAgICAgIHZhbHVlOiBvdXRjb21lVmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnID8gdmFsdWUgOiBbLi4udi52YWx1ZSwgdmFsdWUgYXMgc3RyaW5nXVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5fZmVlZGJhY2tFbGVtZW50cy5mb3JFYWNoKGZlID0+IGZlLmNoZWNrU2hvd0ZlZWRiYWNrKGlkZW50aWZpZXIpKTtcblxuICAgIHRoaXMuX2VtaXQ8T3V0Y29tZUNoYW5nZWREZXRhaWxzPigncXRpLW91dGNvbWUtY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIG91dGNvbWVJZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgdmFsdWU6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpPy52YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29tcGxldGlvblN0YXR1cygpOiAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJyB8ICdub3RfYXR0ZW1wdGVkJyB8ICd1bmtub3duJyB7XG4gICAgaWYgKHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZXZlcnkoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdjb21wbGV0ZWQnO1xuICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnNvbWUoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdpbmNvbXBsZXRlJztcbiAgICByZXR1cm4gJ25vdF9hdHRlbXB0ZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdDxUPihuYW1lLCBkZXRhaWwgPSBudWxsKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFQ+KG5hbWUsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nOiBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbnR5cGUgVXBkYXRlSGFuZGxlciA9IChwcmV2PzogdW5rbm93biwgbmV4dD86IHVua25vd24pID0+IHZvaWQ7XG5cbnR5cGUgTm9uVW5kZWZpbmVkPEE+ID0gQSBleHRlbmRzIHVuZGVmaW5lZCA/IG5ldmVyIDogQTtcblxudHlwZSBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiBOb25VbmRlZmluZWQ8VFtLXT4gZXh0ZW5kcyBVcGRhdGVIYW5kbGVyID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuaW50ZXJmYWNlIFdhdGNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlclxuICAgKi9cbiAgd2FpdFVudGlsRmlyc3RVcGRhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJ1bnMgd2hlbiBvYnNlcnZlZCBwcm9wZXJ0aWVzIGNoYW5nZSwgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy4gVG8gd2FpdCBmb3IgYW5cbiAqIHVwZGF0ZSB0byBjb21wbGV0ZSBhZnRlciBhIGNoYW5nZSBvY2N1cnMsIHVzZSBgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZWAgaW4gdGhlIGhhbmRsZXIuIFRvIHN0YXJ0IHdhdGNoaW5nIGFmdGVyIHRoZVxuICogaW5pdGlhbCB1cGRhdGUvcmVuZGVyLCB1c2UgYHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfWAgb3IgYHRoaXMuaGFzVXBkYXRlZGAgaW4gdGhlIGhhbmRsZXIuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogQHdhdGNoKCdwcm9wTmFtZScpXG4gKiBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICogICAuLi5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoKHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM/OiBXYXRjaE9wdGlvbnMpIHtcbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBSZXF1aXJlZDxXYXRjaE9wdGlvbnM+ID0ge1xuICAgIHdhaXRVbnRpbEZpcnN0VXBkYXRlOiBmYWxzZSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIHJldHVybiA8RWxlbUNsYXNzIGV4dGVuZHMgTGl0RWxlbWVudD4ocHJvdG86IEVsZW1DbGFzcywgZGVjb3JhdGVkRm5OYW1lOiBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPEVsZW1DbGFzcz4pID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgY29uc3QgeyB1cGRhdGUgfSA9IHByb3RvO1xuICAgIGNvbnN0IHdhdGNoZWRQcm9wZXJ0aWVzID0gQXJyYXkuaXNBcnJheShwcm9wZXJ0eU5hbWUpID8gcHJvcGVydHlOYW1lIDogW3Byb3BlcnR5TmFtZV07XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcywgY2hhbmdlZFByb3BzOiBNYXA8a2V5b2YgRWxlbUNsYXNzLCBFbGVtQ2xhc3Nba2V5b2YgRWxlbUNsYXNzXT4pIHtcbiAgICAgIHdhdGNoZWRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBwcm9wZXJ0eSBhcyBrZXlvZiBFbGVtQ2xhc3M7XG4gICAgICAgIGlmIChjaGFuZ2VkUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGNoYW5nZWRQcm9wcy5nZXQoa2V5KTtcbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcmVzb2x2ZWRPcHRpb25zLndhaXRVbnRpbEZpcnN0VXBkYXRlIHx8IHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgICAgICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1cGRhdGUuY2FsbCh0aGlzLCBjaGFuZ2VkUHJvcHMpO1xuICAgIH07XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJdGVtQ29udGV4dCB7XG4gIGhyZWY/OiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgdmFyaWFibGVzOiBSZWFkb25seUFycmF5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0VmFyaWFibGVzID0gW1xuICB7XG4gICAgaWRlbnRpZmllcjogJ2NvbXBsZXRpb25TdGF0dXMnLFxuICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJyxcbiAgICBiYXNlVHlwZTogJ3N0cmluZycsXG4gICAgdmFsdWU6ICd1bmtub3duJyxcbiAgICB0eXBlOiAnb3V0Y29tZSdcbiAgfSxcbiAge1xuICAgIGlkZW50aWZpZXI6ICdudW1BdHRlbXB0cycsXG4gICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnLFxuICAgIGJhc2VUeXBlOiAnaW50ZWdlcicsXG4gICAgdmFsdWU6ICcwJyxcbiAgICB0eXBlOiAncmVzcG9uc2UnXG4gIH1cbl0gYXMgVmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT5bXTtcblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxJdGVtQ29udGV4dD4oJ2l0ZW0nKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuY29uc3QgS0VZQ09ERSA9IHtcbiAgU1BBQ0U6IDMyXG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IHF0aS1jaG9pY2UgaXMgdXNlZCBieSBxdGktc2ltcGxlLWNob2ljZSwgcXRpLWlubGluZS1jaG9pY2UsIHF0aS1ob3R0ZXh0LCBxdGktaG90c3BvdC1jaG9pY2UuXG4gKlxuICogQHNpbmNlIDEuMFxuICogQHN0YXR1cyBzdGFibGVcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIHJlZ2lzdGVyIGl0c2VsdmVzIG9uIGEgcXRpLWNob2ljZS1pbnRlcmFjdGlvbiBlbGVtZW50LlxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBkZS1yZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gdGhlIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqXG4gKiBAc2xvdCAtIFRoZSBjaG9pY2VzIHNsb3QgZWxlbWVudFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtZGlzYWJsZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtcmVhZG9ubHknLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtY2hlY2tlZCcsXG4gICAgY29udmVydGVyOiB7XG4gICAgICB0b0F0dHJpYnV0ZTogdmFsdWUgPT4gdmFsdWVcbiAgICB9XG4gIH0pXG4gIGNoZWNrZWQgPSBmYWxzZTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVEaXNhYmxlZENoYW5nZShfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJpbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlVcCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktbG9vc2UtY2hvaWNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIEtFWUNPREUuU1BBQ0U6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZUNoZWNrZWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllciwgY2hlY2tlZDogdGhpcy5jaGVja2VkIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWxsUHJvcHMoKSB7XG4gICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQWxsUHJvcHMoKSkge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHByb3BzIGZvciAke3RoaXMub3V0ZXJIVE1MfWAsIGBtaXNzaW5nIGlkZW50aWZpZXJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlJzogUXRpQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3F0aS1pdGVtLWJvZHkuc3R5bGVzJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAgfSBmcm9tICdsaXQnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBxdGktaXRlbS1ib2R5IG5vZGUgY29udGFpbnMgdGhlIHRleHQsIGdyYXBoaWNzLCBtZWRpYSBvYmplY3RzIGFuZCBpbnRlcmFjdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgaXRlbSdzIGNvbnRlbnQgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhvdyBpdCBpcyBzdHJ1Y3R1cmVkLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zcGhwbzZsdTZ6cWlcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQHNsb3QgLSBpdGVtIGJvZHkgY29udGVudC5cbiAqIEBzbG90IHF0aS1ydWJyaWMtYmxvY2sgLSB0aGUgcXRpIHJ1YnJpYyBibG9jayBpcyBwbGFjZWQgYWJvdmUgdGhlIGl0ZW1cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktaXRlbS1ib2R5JylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aUl0ZW1Cb2R5IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGVzO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicXRpLXJ1YnJpYy1ibG9ja1wiPjwvc2xvdD48c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaXRlbS1ib2R5JzogUXRpSXRlbUJvZHk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjc3NgXG4gIDpob3N0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5AY3VzdG9tRWxlbWVudCgncXRpLXByb21wdCcpXG5leHBvcnQgY2xhc3MgUXRpUHJvbXB0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8vIGlmIHByb21wdHMgYXJlIGluIGludGVyYWN0aW9ucyB0aGV5IHNob3VsZCBoYXZlIGEgc2xvdCwgc28gdGhlIHByb21wdCBoYXMgdG8gZ28gdGhlcmVcbiAgICAvLyBpZiBwcm9tcHQgaXMgaW4gdGhlIGJvZHksIHRoZW4ganVzdCBkaXNwbGF5IHRoZSBwcm9tcHQgdGhlcmUuXG4gICAgLy8gQSBiZXR0ZXIgY2hlY2sgd291bGQgYmUgdGhlIGxhdHRlciwgYnV0IG5vdCBjYW4ndCBnZXQgdGhyb3VnaCB0aGUgc2hhZG93cm9vdCB0byBmaW5kIHRoZSBzbG90XG4gICAgY29uc3QgaW5JbnRlcmFjdGlvbiA9IHRoaXMucGFyZW50RWxlbWVudC50YWdOYW1lLmVuZHNXaXRoKCdJTlRFUkFDVElPTicpO1xuICAgIGluSW50ZXJhY3Rpb24gJiYgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncHJvbXB0Jyk7XG4gICAgLy8gY29uc3QgcHJvbXB0U2xvdCA9IHRoaXMucGFyZW50RWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT0ncHJvbXB0J11cIik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXByb21wdCc6IFF0aVByb21wdDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zdHlsZXNoZWV0JylcbmV4cG9ydCBjbGFzcyBRdGlTdHlsZXNoZWV0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHByaXZhdGUgc3R5bGVMaW5rOiBIVE1MU3R5bGVFbGVtZW50IHwgSFRNTExpbmtFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgaWYgKGxpbmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIHN0eWxlcy5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICBzdHlsZXMudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgIHN0eWxlcy5ocmVmID0gbGluaztcbiAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIHRoaXMuc3R5bGVMaW5rID0gc3R5bGVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICBzdHlsZXMudGV4dENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50O1xuICAgICAgaXRlbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgdGhpcy5zdHlsZUxpbmsgPSBzdHlsZXM7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpO1xuICAgIGlmICh0aGlzLnN0eWxlTGluayAmJiB0aGlzLnN0eWxlTGluay5wYXJlbnRFbGVtZW50ID09PSB0aGlzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpdGVtLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVMaW5rKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgcmVtb3ZlIHN0eWxlc2hlZXQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXN0eWxlc2hlZXQnOiBRdGlTdHlsZXNoZWV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU91dGNvbWVEZWNsYXJhdGlvbiBleHRlbmRzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2V4dGVybmFsLXNjb3JlZCcgfSkgZXh0ZXJuYWxTY29yZWQ6IFN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgZ2V0IGludGVycG9sYXRpb25UYWJsZSgpOiBNYXA8bnVtYmVyLCBudW1iZXI+IHwgbnVsbCB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcnBvbGF0aW9uLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGFibGUucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKSkge1xuICAgICAgICBpZiAoIWVudHJ5LmdldEF0dHJpYnV0ZSgnc291cmNlLXZhbHVlJykgJiYgZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NvdXJjZS12YWx1ZSBvciB0YXJnZXQtdmFsdWUgaXMgbWlzc2luZyBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSk7XG4gICAgICAgIGlmIChpc05hTihzb3VyY2VWYWx1ZSkgfHwgaXNOYU4odGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBub3QgYSBudW1iZXIgaW4gcXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnNldChzb3VyY2VWYWx1ZSwgdGFyZ2V0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGU6IE91dGNvbWVWYXJpYWJsZSA9IHtcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5LFxuICAgICAgYmFzZVR5cGU6IHRoaXMuYmFzZVR5cGUsXG4gICAgICB0eXBlOiAnb3V0Y29tZScsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGludGVycG9sYXRpb25UYWJsZTogdGhpcy5pbnRlcnBvbGF0aW9uVGFibGVcbiAgICB9O1xuICAgIG91dGNvbWVWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhvdXRjb21lVmFyaWFibGUpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItdmFyaWFibGUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgdmFyaWFibGU6IG91dGNvbWVWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nOiBRdGlPdXRjb21lRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS12YXJpYWJsZWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmFsdWVzKHZhcmlhYmxlOiBWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD4pIHtcbiAgICBjb25zdCBodG1sVmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1kZWZhdWx0LXZhbHVlID4gcXRpLXZhbHVlJykpO1xuXG4gICAgaWYgKGh0bWxWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gaHRtbFZhbHVlcy5tYXAobiA9PiBuLmlubmVySFRNTCk7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZXMubGVuZ3RoID4gMSB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJyB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXNbMF07XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXZhcmlhYmxlZGVjbGFyYXRpb24nOiBRdGlWYXJpYWJsZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlNYXBwaW5nIH0gZnJvbSAnLi4vLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hcHBpbmcvcXRpLW1hcHBpbmcnO1xuaW1wb3J0IHsgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRGVjbGFyYXRpb24gZXh0ZW5kcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBjYXJkaW5hbGl0eTogQ2FyZGluYWxpdHk7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHN0YXRpYyBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLml0ZW1Db250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdGhpcy5pZGVudGlmaWVyKT8udmFsdWU7XG4gICAgcmV0dXJuIGh0bWxgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMil9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZTogUmVzcG9uc2VWYXJpYWJsZSA9IHtcbiAgICAgIGJhc2VUeXBlOiB0aGlzLmJhc2VUeXBlLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgY29ycmVjdFJlc3BvbnNlOiB0aGlzLmNvcnJlY3RSZXNwb25zZSxcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5IHx8ICdzaW5nbGUnLFxuICAgICAgbWFwcGluZzogdGhpcy5tYXBwaW5nLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB0eXBlOiAncmVzcG9uc2UnLFxuICAgICAgY2FuZGlkYXRlUmVzcG9uc2U6IG51bGxcbiAgICB9O1xuICAgIHJlc3BvbnNlVmFyaWFibGUudmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZXMocmVzcG9uc2VWYXJpYWJsZSk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyB2YXJpYWJsZTogcmVzcG9uc2VWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb3JyZWN0UmVzcG9uc2UoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICBpZiAoY29ycmVjdFJlc3BvbnNlKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjb3JyZWN0UmVzcG9uc2UucXVlcnlTZWxlY3RvckFsbCgncXRpLXZhbHVlJyk7XG4gICAgICBpZiAodGhpcy5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzWzBdLnRleHRDb250ZW50O1xuICAgICAgICB2YWx1ZXNbMF0ucmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlc1tpXS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgdmFsdWVzW2ldLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBtYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1tYXBwaW5nJykgYXMgUXRpTWFwcGluZztcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nOiBRdGlSZXNwb25zZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbycpXG5leHBvcnQgY2xhc3MgUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbyBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvLyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAvLyAgIHNsb3Qge1xuICAvLyAgICAgZGlzcGxheTogaGlkZGVuO1xuICAvLyAgIH1cbiAgLy8gYDtcbiAgLy8gb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAvLyAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+IGA7XG4gIC8vIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbyc6IFF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm87XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktY29udGVudC1ib2R5JylcbmV4cG9ydCBjbGFzcyBRdGlDb250ZW50Qm9keSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jb250ZW50LWJvZHknOiBRdGlDb250ZW50Qm9keTtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVicmljLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlSdWJyaWNCbG9jayBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgb3ZlcnJpZGUgaWQ7IC8vID1cInF0aUFzcGVjdEluaG91ZFJ1YnJpY0Jsb2NrXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdXNlOiAnaW5zdHJ1Y3Rpb25zJyB8ICdzY29yaW5nJyB8ICduYXZpZ2F0aW9uJzsgLy8gID0gXCJzY29yaW5nXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdmlldzogJ2F1dGhvcicgfCAnY2FuZGlkYXRlJyB8ICdwcm9jdG9yJyB8ICdzY29yZXInIHwgJ3Rlc3RDb25zdHJ1Y3RvcicgfCAndHV0b3InO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGNhc2UgJ3F0aS1ydWJyaWMtZGlzY3JldGlvbmFyeS1wbGFjZW1lbnQnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1ydWJyaWMtYmxvY2snKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncXRpLXJ1YnJpYy1pbmxpbmUnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyBieSBkZWZhdWx0IHB1dCB0aGlzIGluIGEgc2xvdCBpbiB0aGUgaXRlbS1ib2R5XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLXJ1YnJpYy1ibG9jaycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ydWJyaWMtYmxvY2snOiBRdGlSdWJyaWNCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IFByb3BlcnR5VmFsdWVNYXAsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlGZWVkYmFja0Jsb2NrIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAub24ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cImZlZWRiYWNrICR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1Nob3dGZWVkYmFjayh0aGlzLm91dGNvbWVJZGVudGlmaWVyKTtcbiAgfVxufVxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWJsb2NrJzogUXRpRmVlZGJhY2tCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBJc051bGxPclVuZGVmaW5lZCB9IGZyb20gJy4uL2ludGVybmFsL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUZlZWRiYWNrIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnc2hvdy1oaWRlJyB9KVxuICBwcm90ZWN0ZWQgc2hvd0hpZGU6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ291dGNvbWUtaWRlbnRpZmllcicgfSlcbiAgcHVibGljIG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHByb3RlY3RlZCBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzaG93U3RhdHVzOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFF0aUZlZWRiYWNrPigncXRpLXJlZ2lzdGVyLWZlZWRiYWNrJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tTaG93RmVlZGJhY2sob3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZykgeyAgICBcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldE91dGNvbWUob3V0Y29tZUlkZW50aWZpZXIpO1xuXG4gICAgaWYgKHRoaXMub3V0Y29tZUlkZW50aWZpZXIgIT09IG91dGNvbWVJZGVudGlmaWVyIHx8ICFvdXRjb21lVmFyaWFibGUpIHJldHVybjtcbiAgICBsZXQgaXNGb3VuZCA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGNvbWVWYXJpYWJsZS52YWx1ZSkpIHtcbiAgICAgIGlzRm91bmQgPSBvdXRjb21lVmFyaWFibGUudmFsdWUuaW5jbHVkZXModGhpcy5pZGVudGlmaWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNGb3VuZCA9XG4gICAgICAgICghSXNOdWxsT3JVbmRlZmluZWQodGhpcy5pZGVudGlmaWVyKSAmJlxuICAgICAgICAgICFJc051bGxPclVuZGVmaW5lZChvdXRjb21lVmFyaWFibGU/LnZhbHVlKSAmJlxuICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9PT0gb3V0Y29tZVZhcmlhYmxlLnZhbHVlKSB8fFxuICAgICAgICBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGZWVkYmFjayhpc0ZvdW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0ZlZWRiYWNrKHZhbHVlOiBib29sZWFuKSB7ICAgIFxuICAgIHRoaXMuc2hvd1N0YXR1cyA9ICh2YWx1ZSAmJiB0aGlzLnNob3dIaWRlID09PSAnc2hvdycpIHx8ICghdmFsdWUgJiYgdGhpcy5zaG93SGlkZSA9PT0gJ2hpZGUnKSA/ICdvbicgOiAnb2ZmJzsgICAgXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdCgwLjEpLnJlcGxhY2UoL1xcZC9nLCAnJyk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgPSAobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgLy8gY2hlY2sgaWYgdHlwZSBpcyBzdHJpbmdcbiAgaWYgKHR5cGVvZiBudW1iZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICBjb25zdCBkU2VwID0gZGVjaW1hbFNlcGFyYXRvcigpO1xuICBpZiAoZFNlcCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG51bWJlci50b0xvY2FsZVN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoZFNlcCwgJy4nKTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIElzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWlubGluZScpXG5leHBvcnQgY2xhc3MgUXRpRmVlZGJhY2tJbmxpbmUgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWlubGluZSc6IFF0aUZlZWRiYWNrSW5saW5lO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbW9kYWwtZmVlZGJhY2snKVxuZXhwb3J0IGNsYXNzIFF0aU1vZGFsRmVlZGJhY2sgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgLm9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cIiR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1vZGFsLWZlZWRiYWNrJzogUXRpTW9kYWxGZWVkYmFjaztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBpZkRlZmluZWQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9pZi1kZWZpbmVkLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVmLCBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1leHRlbmRlZC10ZXh0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgLy8gcHVibGljIHN0YXRpYyByb3dIZWlnaHRDbGFzcyA9IFtdO1xuXG4gIHRleHRhcmVhUmVmID0gY3JlYXRlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCk7XG5cbiAgLyoqIGV4cGVjdGVkIGxlbmd0aCBpcyBtYXBwZWQgdG8gdGhlIHByb3BlcnR5IG1heGxlbmd0aCBvbiB0aGUgdGV4dGFyZWEgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgLyoqIHRleHQgYXBwZWFyaW5nIGluIHRoZSBleHRlbmRlZC10ZXh0LW50ZXJhY3Rpb24gaWYgaXQgaXMgZW1wdHkgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChjbGFzc05hbWUuc3RhcnRzV2l0aCgncXRpLWhlaWdodC1saW5lcycpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaGVpZ2h0LWxpbmVzLScsICcnKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dGFyZWFSZWYpIHtcbiAgICAgICAgICB0aGlzLnRleHRhcmVhUmVmLnZhbHVlLnJvd3MgPSBwYXJzZUludChuclJvd3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICAvKiBQSzogZGlzcGxheSBob3N0IGFzIGJsb2NrLCBlbHNlIGRlc2lnbiB3aWxsIGJlIGNvbGxhcHNlZCAqL1xuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dGFyZWEge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHRleHRhcmVhXG4gICAgICBwYXJ0PVwidGV4dGFyZWFcIlxuICAgICAgJHtyZWYodGhpcy50ZXh0YXJlYVJlZil9XG4gICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIEBrZXlkb3duPVwiJHtldmVudCA9PiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1cIlxuICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICBAY2hhbmdlPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIiR7aWZEZWZpbmVkKHRoaXMucGxhY2Vob2xkZXJUZXh0ID8gdGhpcy5wbGFjZWhvbGRlclRleHQgOiB1bmRlZmluZWQpfVwiXG4gICAgICBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIlxuICAgICAgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAudmFsdWU9JHt0aGlzLl92YWx1ZX1cbiAgICA+PC90ZXh0YXJlYT5gO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRleHRDaGFuZ2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuc2V0RW1wdHlBdHRyaWJ1dGUoaW5wdXQudmFsdWUpO1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gaW5wdXQudmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZShpbnB1dC52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0RW1wdHlBdHRyaWJ1dGUodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2VtcHR5JywgdGV4dCA9PT0gJycgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbic6IFF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEludGVyYWN0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqIGRpc2FibGVkIHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiogcmVhZG9ubHkgc2hvdWxkIGJlIGV4cG9zZWQgdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIGFjY2Vzc2libGUgYXMgcHJvcGVydHkgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seSA9IGZhbHNlO1xuXG4gIGFic3RyYWN0IHZhbGlkYXRlKCk6IGJvb2xlYW47XG4gIGFic3RyYWN0IHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPik7XG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBjb25zb2xlLndhcm4oJ2NvcnJlY3RSZXNwb25zZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhdmVSZXNwb25zZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgIHJlc3BvbnNlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVRleHRFbnRyeUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2V4cGVjdGVkLWxlbmd0aCcgfSkgZXhwZWN0ZWRMZW5ndGg6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BhdHRlcm4tbWFzaycgfSkgcGF0dGVybk1hc2s6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BsYWNlaG9sZGVyLXRleHQnIH0pIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29ycmVjdFZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfc2l6ZSA9IDU7XG5cbiAgaW5wdXRSZWYgPSBjcmVhdGVSZWY8SFRNTElucHV0RWxlbWVudD4oKTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnKVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgY2xhc3Nlczogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3F0aS1pbnB1dC13aWR0aCcpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaW5wdXQtd2lkdGgtJywgJycpO1xuICAgICAgICB0aGlzLl9zaXplID0gcGFyc2VJbnQobnJSb3dzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIFtwYXJ0PSdjb3JyZWN0J10ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb3JyZWN0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgcGFydD1cImNvcnJlY3RcIj4ke3RoaXMuX2NvcnJlY3RWYWx1ZX08L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBwYXJ0PVwiaW5wdXRcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgdHlwZT1cIiR7dGhpcy5wYXR0ZXJuTWFzayA9PSAnWzAtOV0qJyA/ICdudW1iZXInIDogJ3RleHQnfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiJHtpZkRlZmluZWQodGhpcy5wbGFjZWhvbGRlclRleHQgPyB0aGlzLnBsYWNlaG9sZGVyVGV4dCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl92YWx1ZX1cIlxuICAgICAgICBzaXplPVwiJHt0aGlzLl9zaXplfVwiXG4gICAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgLz5cbiAgICBgO1xuICB9XG4gIC8vXG4gIC8vIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nOiBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8vIEB3YXRjaCBkZWNvcmF0b3Jcbi8vXG4vLyBSdW5zIHdoZW4gYW4gb2JzZXJ2ZWQgcHJvcGVydHkgY2hhbmdlcywgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy5cbi8vXG4vLyBUbyB3YWl0IGZvciBhbiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydFxuLy8gd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuLy9cbi8vIFVzYWdlOlxuLy9cbi8vICBAd2F0Y2goJ3Byb3BOYW1lJylcbi8vICBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuLy8gICAgLi4uXG4vLyAgfVxuXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBMaXZlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGl2ZVF1ZXJ5KHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgb3B0aW9ucz86IExpdmVRdWVyeU9wdGlvbnMpIHtcbiAgbGV0IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPExpdmVRdWVyeU9wdGlvbnM+ID0ge1xuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50PihcbiAgICBwcm90bzogRWxlbUNsYXNzLFxuICAgIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+XG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgY29ubmVjdGVkQ2FsbGJhY2ssIGRpc2Nvbm5lY3RlZENhbGxiYWNrIH0gPSBwcm90bztcblxuICAgIHByb3RvLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c1RvV2F0Y2ggPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSk7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4gICAgICAgICAgY29uc3QgYWRkZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcykubWFwKGUgPT4gZSBhcyBFbGVtZW50KTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIGFkZGVkTm9kZXMuZmluZChuID0+IGVsZW1lbnRzVG9XYXRjaC5pbmNsdWRlcyhuKSkpIHtcbiAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgZWxlbWVudHNBZGRlZCA9IHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSA/PyBbXTtcbiAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShBcnJheS5mcm9tKGVsZW1lbnRzQWRkZWQpLCBbXSk7XG4gICAgfTtcblxuICAgIHByb3RvLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHRleHRJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdxdGktaG90dGV4dC1pbnRlcmFjdGlvbicsICcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgPHNsb3Q+PC9zbG90PmA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJzogUXRpSG90dGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi4vY2hvaWNlL3F0aS1jaG9pY2UnO1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENob2ljZXMgZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudHM6IFF0aUNob2ljZVtdID0gW107XG5cbiAgLyoqIHRoZSBtaW5pbWFsIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgLyoqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSwgdGhlIG90aGVyIG9wdGlvbnMgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIG1heCBvcHRpb25zIGlzIGNoZWNrZWQgKi9cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSAxO1xuXG4gIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikgPT5cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLnJlYWRvbmx5ID0gcmVhZG9ubHkpKTtcblxuICBAd2F0Y2goJ21heENob2ljZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVNYXhDaG9pY2VzQ2hhbmdlID0gKCkgPT4gdGhpcy5fZGV0ZXJtaW5lSW5wdXRUeXBlKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWxvb3NlLWNob2ljZScsIHRoaXMuX2xvb3NlQ2hvaWNlRWxlbWVudCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuclNlbGVjdGVkID0gdGhpcy5fY2hvaWNlRWxlbWVudHMucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xuICAgICAgcmV0dXJuIGFjYyArICh2YWwuY2hlY2tlZCA/IDEgOiAwKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gbnJTZWxlY3RlZCA+PSB0aGlzLm1pbkNob2ljZXM7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCByZXNwb25zZVZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlVmFsdWUpID8gcmVzcG9uc2VWYWx1ZSA6IFtyZXNwb25zZVZhbHVlXTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgIGNlLmNoZWNrZWQgPSByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyB0cnVlIDogZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHJlc3BvbnNlVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgaWYgKHJlc3BvbnNlVmFsdWUgPT0gJycpIHtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgICBjZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtY29ycmVjdC1yZXNwb25zZScpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgY2Uuc2V0QXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnLCByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9vc2VDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMgPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5maWx0ZXIoY2ggPT4gY2ggIT09IGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGV0ZXJtaW5lSW5wdXRUeXBlKCkge1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2hvaWNlRWxlbWVudCA9PiB7XG4gICAgICB0aGlzLl9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudDogUXRpQ2hvaWNlKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgLy8gaWYgemVybyB0aGVuIHlvdSBjYW4gY2hvb3NlIGhvdyBtdWNoIHlvdSB3YW50XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdyYWRpbycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdjaGVja2JveCcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcihldmVudDogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSAxKSB7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50c1xuICAgICAgICAuZmlsdGVyKGNlID0+IGNlLmlkZW50aWZpZXIgIT09IGV2ZW50LmRldGFpbC5pZGVudGlmaWVyKVxuICAgICAgICAuZm9yRWFjaChjZSA9PiB7XG4gICAgICAgICAgY2UuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkZW50aWZpZXJzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNlID0+IGNlLmNoZWNrZWQpLm1hcChjZSA9PiBjZS5pZGVudGlmaWVyKTtcblxuICAgIGlmICh0aGlzLm1heENob2ljZXMgPiAxKSB7XG4gICAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSBzZWxlY3RlZElkZW50aWZpZXJzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9ICFjZS5jaGVja2VkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJZGVudGlmaWVyc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICB0aGlzLnNhdmVSZXNwb25zZShyZXN1bHQpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuaW50ZXJmYWNlIE9wdGlvblR5cGUge1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBpbnB1dFdpZHRoQ2xhc3MgPSBbXG4gICAgJycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0yJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC00JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTYnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTUnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMjAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNzInXG4gIF07XG5cbiAgQHN0YXRlKCkgb3B0aW9uczogT3B0aW9uVHlwZVtdID0gW107XG5cbiAgQHN0YXRlKCkgY29ycmVjdE9wdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0YS1wcm9tcHQnLCB0eXBlOiBTdHJpbmcgfSlcbiAgZGF0YVByb21wdDogc3RyaW5nID0gJ3NlbGVjdCc7XG5cbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2VsZWN0IHBhcnQ9XCJzZWxlY3RcIiBAY2hhbmdlPVwiJHt0aGlzLmNob2ljZVNlbGVjdGVkfVwiID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIiA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCI+XG4gICAgICAgICR7dGhpcy5vcHRpb25zLm1hcChcbiAgICAgICAgICBvcHRpb24gPT4gaHRtbGBcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIke29wdGlvbi52YWx1ZX1cIiA/c2VsZWN0ZWQ9XCIke29wdGlvbi5zZWxlY3RlZH1cIj4ke3Vuc2FmZUhUTUwob3B0aW9uLnRleHRDb250ZW50KX08L29wdGlvbj5cbiAgICAgICAgICBgXG4gICAgICAgICl9XG4gICAgICA8L3NlbGVjdD5cblxuICAgICAgJHt1bnNhZmVIVE1MKHRoaXMuY29ycmVjdE9wdGlvbil9XG4gICAgYDtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWlubGluZS1jaG9pY2UnKSk7XG4gICAgdGhpcy5vcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0Q29udGVudDogdGhpcy5kYXRhUHJvbXB0LFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIC4uLmNob2ljZXMubWFwKGNob2ljZSA9PiAoe1xuICAgICAgICB0ZXh0Q29udGVudDogY2hvaWNlLmlubmVySFRNTCxcbiAgICAgICAgdmFsdWU6IGNob2ljZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICBdO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi5zZWxlY3RlZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uID8gc2VsZWN0ZWRPcHRpb24udmFsdWUgIT09ICcnIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiAoeyAuLi5vcHRpb24sIHNlbGVjdGVkOiBpID09PSAwIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIHZhbHVlID09PSBvcHRpb24udmFsdWUgJiYgKG9wdGlvbi5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSBgPHNwYW4gcGFydD1cImNvcnJlY3Qtb3B0aW9uXCI+JHtcbiAgICAgIHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKS50ZXh0Q29udGVudFxuICAgIH08L3NwYW4+YDtcbiAgfVxuXG4gIHB1YmxpYyBjaG9pY2VTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvblZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvblZhbHVlIH0pKTtcbiAgICB0aGlzLnNhdmVSZXNwb25zZShzZWxlY3RlZE9wdGlvblZhbHVlKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic6IFF0aUlubGluZUNob2ljZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9xdGktY2hvaWNlLWludGVyYWN0aW9uLnN0eWxlcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBDaG9pY2VJbnRlcmFjdGlvbi5UeXBlIChxdGktY2hvaWNlLWludGVyYWN0aW9uKSBpbnRlcmFjdGlvbiBwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgY2hvaWNlcyB0byB0aGUgY2FuZGlkYXRlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIDxxdGktc2ltcGxlLWNob2ljZT4gbXVzdCBiZSBwbGFjZWQuXG4gKiBAc2xvdCBwcm9tcHQgLSBzbG90IHdoZXJlIHRoZSBwcm9tcHQgaXMgcGxhY2VkLlxuICovXG5cbkBjdXN0b21FbGVtZW50KCdxdGktY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBzdGF0aWMgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlcztcblxuICAvKiogb3JpZW50YXRpb24gb2YgY2hvaWNlcyAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD48c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nOiBRdGlDaG9pY2VJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG4vLyBpbXBvcnQgY29tcG9uZW50U3R5bGVzIGZyb20gJy4uLy4uL3V0aWxpdGllcy9zdHlsZXMvY29tcG9uZW50LnN0eWxlcyc7XG5cbi8qICR7Y29tcG9uZW50U3R5bGVzfSAqL1xuZXhwb3J0IGRlZmF1bHQgY3NzYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC8vIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICB9XG5gO1xuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZU1hcCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBtYXBSZXNwb25zZSwgbWFwUmVzcG9uc2VQb2ludCwgbWF0Y2hDb3JyZWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdGVtcGxhdGUtc3RyaW5ncyc7XG5pbXBvcnQgeyB0eXBlIFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZS9xdGktcnVsZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZycpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdGlSZXNwb25zZVByb2Nlc3NpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IHJ1bGVzID0gWy4uLnRoaXMuY2hpbGRyZW5dIGFzIFF0aVJ1bGVbXTtcblxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgcnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVNYXA8YW55PiB8IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ3RlbXBsYXRlJykpIHtcbiAgICAgIGNvbnN0IHNwbGl0dGVkVGVtcGxhdGVOYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3RlbXBsYXRlJykhLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZU5hbWUgPSBzcGxpdHRlZFRlbXBsYXRlTmFtZVtzcGxpdHRlZFRlbXBsYXRlTmFtZS5sZW5ndGggLSAxXS5yZXBsYWNlKCcueG1sJywgJycpO1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSAnJztcbiAgICAgIHN3aXRjaCAodGVtcGxhdGVOYW1lKSB7XG4gICAgICAgIGNhc2UgJ21hcF9yZXNwb25zZSc6IHtcbiAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRoaXMuZnJhZ21lbnRGcm9tU3RyaW5nKG1hcFJlc3BvbnNlKS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbWFwX3Jlc3BvbnNlX3BvaW50Jzoge1xuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWFwUmVzcG9uc2VQb2ludCkuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21hdGNoX2NvcnJlY3QnOlxuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWF0Y2hDb3JyZWN0KS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmcmFnbWVudEZyb21TdHJpbmcoc3RySFRNTDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHN0ckhUTUwpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJzogUXRpUmVzcG9uc2VQcm9jZXNzaW5nO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IG1hdGNoQ29ycmVjdCA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLW1hdGNoPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgICA8cXRpLWNvcnJlY3QgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktY29ycmVjdD5cbiAgICAgIDwvcXRpLW1hdGNoPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MTwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4wPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWVsc2U+XG4gIDwvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbjwvcXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+YDtcblxuZXhwb3J0IGNvbnN0IG1hcFJlc3BvbnNlID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktaXMtbnVsbD5cbiAgICAgICAgPHF0aS12YXJpYWJsZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS12YXJpYWJsZT5cbiAgICAgIDwvcXRpLWlzLW51bGw+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4wLjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtaWY+XG4gICAgPHF0aS1yZXNwb25zZS1lbHNlPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1tYXAtcmVzcG9uc2UgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+IDwvcXRpLW1hcC1yZXNwb25zZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWVsc2U+XG4gIDwvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbjwvcXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+YDtcblxuZXhwb3J0IGNvbnN0IG1hcFJlc3BvbnNlUG9pbnQgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1pcy1udWxsPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgPC9xdGktaXMtbnVsbD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtaWY+XG4gICAgPHF0aS1yZXNwb25zZS1lbHNlPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1tYXAtcmVzcG9uc2UtcG9pbnQgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktbWFwLXJlc3BvbnNlLXBvaW50PlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuIiwgImltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSB9IGZyb20gJ0BjaXRvbGFiL3F0aS1jb21wb25lbnRzL3F0aS1jb21wb25lbnRzJztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC91dGlscyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuLyoqXG4gKiBUaGUgbG9va3VwT3V0Y29tZVZhbHVlIHJ1bGUgc2V0cyB0aGUgdmFsdWUgb2YgYW4gb3V0Y29tZSB2YXJpYWJsZSB0byB0aGUgdmFsdWUgb2J0YWluZWRcbiAqIGJ5IGxvb2tpbmcgdXAgdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGV4cHJlc3Npb24gaW4gdGhlIGxvb2t1cFRhYmxlIGFzc29jaWF0ZWRcbiAqIHdpdGggdGhlIG91dGNvbWUncyBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF0aUxvb2t1cE91dGNvbWVWYWx1ZSBleHRlbmRzIFF0aVJ1bGUge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIGdldCBjaGlsZEV4cHJlc3Npb24oKTogUXRpRXhwcmVzc2lvbjxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPHN0cmluZz47XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpOiBudW1iZXIge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpIGFzIE91dGNvbWVWYXJpYWJsZTtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG91dGNvbWVWYXJpYWJsZS5pbnRlcnBvbGF0aW9uVGFibGUpIHtcbiAgICAgIHZhbHVlID0gb3V0Y29tZVZhcmlhYmxlLmludGVycG9sYXRpb25UYWJsZS5nZXQocGFyc2VJbnQodGhpcy5jaGlsZEV4cHJlc3Npb24uY2FsY3VsYXRlKCkpKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignbG9va3VwT3V0Y29tZVZhbHVlOiB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgb3V0Y29tZUlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgICAgICB2YWx1ZTogY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlJywgUXRpTG9va3VwT3V0Y29tZVZhbHVlKTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlJzogUXRpTG9va3VwT3V0Y29tZVZhbHVlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJ1bGUnKVxuZXhwb3J0IGNsYXNzIFF0aVJ1bGUgZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgUXRpUnVsZUJhc2Uge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXRpUnVsZUJhc2Uge1xuICBwcm9jZXNzKCk6IGFueTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJ1bGUnOiBRdGlSdWxlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlQ29uZGl0aW9uIGV4dGVuZHMgUXRpUnVsZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCkge1xuICAgIGNvbnN0IGJyYW5jaGVzID0gWy4uLnRoaXMuY2hpbGRyZW5dIGFzIFF0aUV4cHJlc3Npb248YW55PltdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBicmFuY2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYnJhbmNoID0gYnJhbmNoZXNbaV07XG5cbiAgICAgIGlmIChicmFuY2guY2FsY3VsYXRlKCkpIHtcbiAgICAgICAgKGJyYW5jaCBhcyB1bmtub3duIGFzIFF0aVJ1bGUpLnByb2Nlc3MoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWNvbmRpdGlvbicsIFF0aVJlc3BvbnNlQ29uZGl0aW9uKTtcbiIsICJpbXBvcnQgeyBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24sIFF0aUV4cHJlc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSwgUXRpUnVsZUJhc2UgfSBmcm9tICcuLi9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlTZXRPdXRjb21lVmFsdWUgZXh0ZW5kcyBRdGlSdWxlIHtcbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKSB7XG4gICAgY29uc3Qgb3V0Y29tZUlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxzdHJpbmc+O1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBRdGlTZXRPdXRjb21lVmFsdWVSdWxlKGV4cHJlc3Npb24pO1xuICAgIGNvbnN0IHZhbHVlID0gcnVsZS5wcm9jZXNzKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBvdXRjb21lSWRlbnRpZmllcixcbiAgICAgICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWUubWFwKCh2OiBzdHJpbmcpID0+IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHYpKVxuICAgICAgICAgICAgOiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlTZXRPdXRjb21lVmFsdWVSdWxlPFQ+IGltcGxlbWVudHMgUXRpUnVsZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4cHJlc3Npb246IFF0aUV4cHJlc3Npb25CYXNlPFQ+KSB7fVxuXG4gIHByb2Nlc3MoKTogYW55IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbiA/IHRoaXMuZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSA6IG51bGw7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdzZXRPdXRjb21lVmFsdWU6IHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIFF0aVNldE91dGNvbWVWYWx1ZSk7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUvcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VFbHNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWJSdWxlcygpOiBRdGlSdWxlW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3Qgc3ViUnVsZXMgPSB0aGlzLmdldFN1YlJ1bGVzKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJSdWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3ViUnVsZSA9IHN1YlJ1bGVzW2ldO1xuICAgICAgc3ViUnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWVsc2UnLCBRdGlSZXNwb25zZUVsc2UpO1xuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpUmVzcG9uc2VJZiB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1pZic7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUVsc2VJZiBleHRlbmRzIFF0aVJlc3BvbnNlSWYge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgJHtzdXBlci5yZW5kZXIoKX1gO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWVsc2UtaWYnLCBRdGlSZXNwb25zZUVsc2VJZik7XG4iLCAiaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi8uLi9xdGktcnVsZS9xdGktcnVsZSc7XG5pbXBvcnQgeyBRdGlSZXNwb25zZUVsc2UgfSBmcm9tICcuLi9xdGktcmVzcG9uc2UtZWxzZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUlmIGV4dGVuZHMgUXRpUmVzcG9uc2VFbHNlIHtcbiAgcHVibGljIG92ZXJyaWRlIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+O1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4cHJlc3Npb24uY2FsY3VsYXRlKCkgYXMgYm9vbGVhbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFN1YlJ1bGVzKCk6IFF0aVJ1bGVbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1pZicsIFF0aVJlc3BvbnNlSWYpO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUsIFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgUXRpTXVsdGlwbGUgfSBmcm9tICcuL3F0aS1tdWx0aXBsZS9xdGktbXVsdGlwbGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF0aUV4cHJlc3Npb25CYXNlPFQ+IHtcbiAgLy8gZ2V0IGFzc2Vzc21lbnRJdGVtKCk6IFF0aUFzc2Vzc21lbnRJdGVtO1xuXG4gIC8vIGdldFZhcmlhYmxlcygpOiBWYXJpYWJsZURlY2xhcmF0aW9uPG51bWJlciB8IHN0cmluZyB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBudWxsPltdO1xuICBjYWxjdWxhdGUoKTogUmVhZG9ubHk8VD47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlFeHByZXNzaW9uPFQ+IGV4dGVuZHMgTGl0RWxlbWVudCBpbXBsZW1lbnRzIFF0aUV4cHJlc3Npb25CYXNlPFQ+IHtcbiAgQHN0YXRlKClcbiAgcHJvdGVjdGVkIHJlc3VsdDogYW55O1xuXG4gIC8vIGhpZGUgdGhlIHNsb3Qgd2l0aCBjc3NcbiAgc3RhdGljIHN0eWxlcyA9IGNzc2BcbiAgICBzbG90IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8cHJlPiR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZXN1bHQsIG51bGwsIDIpfTwvcHJlPlxuICAgICAgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PFQ+IHtcbiAgICB0aGlzLnJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0KCk7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJlc3VsdCgpOiBSZWFkb25seTxUPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldCBhc3Nlc3NtZW50SXRlbSgpOiBRdGlBc3Nlc3NtZW50SXRlbSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzID0gKCk6IFZhcmlhYmxlRGVjbGFyYXRpb248bnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSB8IG51bGw+W10gPT5cbiAgICAvLyBGSVhNRTogaWYgdGhpcyBpdHNlbGYgaXMgbXVsdGlwbGUsIHRoaXMgd2lsbCBuZXZlciBlbnRlciB0aGUgcXRpLW11bHRpcGxlIHN3aXRjaFxuICAgIC8vIFNlZSB0aGlzIGV4YW1wbGUgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tLzFFZFRlY2gvcXRpLWV4YW1wbGVzL2Jsb2IvbWFzdGVyL3F0aXYzLWV4YW1wbGVzL3BhY2thZ2luZy9pdGVtcy9FeGFtcGxlMDUtZmVlZGJhY2tCbG9jay1hZGFwdGl2ZS54bWxcblxuICAgIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbilcbiAgICAgIC5tYXAoKGU6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgc3dpdGNoIChlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3F0aS1iYXNlLXZhbHVlJzoge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmFzZVR5cGU6IGUuZ2V0QXR0cmlidXRlKCdiYXNlLXR5cGUnKSxcbiAgICAgICAgICAgICAgdmFsdWU6IGUudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJ1xuICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktdmFyaWFibGUnOiB7XG4gICAgICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncXRpLW11bHRpcGxlJzoge1xuICAgICAgICAgICAgY29uc3QgbXVsdGlwbGUgPSBlIGFzIFF0aU11bHRpcGxlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbXVsdGlwbGUuZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiAnJyxcbiAgICAgICAgICAgICAgICBiYXNlVHlwZTogdmFsdWVzWzBdLmJhc2VUeXBlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXMubWFwKHYgPT4gdi52YWx1ZSksXG4gICAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdtdWx0aXBsZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJ1xuICAgICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncXRpLWNvcnJlY3QnOiB7XG4gICAgICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFJlc3BvbnNlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmFzZVR5cGU6IHJlc3BvbnNlVmFyaWFibGUuYmFzZVR5cGUsXG4gICAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZSxcbiAgICAgICAgICAgICAgY2FyZGluYWxpdHk6IHJlc3BvbnNlVmFyaWFibGUuY2FyZGluYWxpdHlcbiAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gYWRkZWQgZm9yIHVzZSBvZiBxdGktZXF1YWwtcm91bmRlZFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IGUgYXMgUXRpRXhwcmVzc2lvbjxudW1iZXI+O1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV4cHJlc3Npb24uZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmFzZVR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZSdcbiAgICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkZWZhdWx0IG5vdCBzdWZmaWNpZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG59XG4iLCAiaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0KCk7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3VsdCgpOiBSZWFkb25seTxib29sZWFuPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5leHBvcnQgY2xhc3MgUXRpQW5kIGV4dGVuZHMgcXRpQW5kTWl4aW4oUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFF0aUNvbmRpdGlvbkV4cHJlc3Npb24+KSB7XG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlQ2hpbGRyZW4oQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuIGFzIHVua25vd24gYXMgUXRpRXhwcmVzc2lvbjxhbnk+W10pKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNb2NrUXRpRXhwcmVzc2lvbjxUPiA9IHsgY2FsY3VsYXRlOiAoKSA9PiBUIH07XG50eXBlIE1vY2tDb25zdHJ1Y3RvciA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIHF0aUFuZE1peGluPFRCYXNlIGV4dGVuZHMgTW9ja0NvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkge1xuICByZXR1cm4gY2xhc3MgTW9ja1F0aUFuZCBleHRlbmRzIEJhc2Uge1xuICAgIHB1YmxpYyBjYWxjdWxhdGVDaGlsZHJlbihjaGlsZHJlbjogQXJyYXk8TW9ja1F0aUV4cHJlc3Npb248YW55Pj4pIHtcbiAgICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgICBjb25zdCB2YWx1ZXMgPSBjaGlsZHJlbi5tYXAoYyA9PiB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGMgYXMgTW9ja1F0aUV4cHJlc3Npb248YW55PjtcbiAgICAgICAgaWYgKCFjb25kaXRpb24uY2FsY3VsYXRlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgUXRpQ29uZGl0aW9uRXhwcmVzc2lvblwiKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBjb25kaXRpb24uY2FsY3VsYXRlKCkgYXMgQm9vbGVhbjtcbiAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdmFsdWUgdG8gYm9vbGVhbiBhbmQgcmV0dXJuIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIHZhbHVlIGluIHF0aS1hbmQsIGV4cGVjdGVkIGJvb2xlYW4nKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB2YWx1ZXMuZXZlcnkoZSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZSA9PT0gJ2Jvb2xlYW4nICYmIGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgUXRpQW5kIH0gZnJvbSAnLi9xdGktYW5kJztcbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWFuZCcsIFF0aUFuZCk7XG5cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFuZCc7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hbmQnOiBRdGlBbmQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEJhc2VUeXBlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcbmV4cG9ydCBjbGFzcyBRdGlCYXNlVmFsdWUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZz4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlID0gJ3N0cmluZyc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy50ZXh0Q29udGVudDtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktYmFzZS12YWx1ZScsIFF0aUJhc2VWYWx1ZSk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpQ29udGFpbnMgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgdHlwZXMgdGhhbiBkaXJlY3RlZFBhaXJcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTIuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24xID0gdmFsdWUxLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgZW51bWVyYWJsZSA9IHByb2plY3Rpb24xLmZpbHRlcih4ID0+IHByb2plY3Rpb24yLmluY2x1ZGVzKHgpKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBlbnVtZXJhYmxlLmxlbmd0aCA+IDA7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB2YWx1ZTEuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ID09PSAnc2luZ2xlJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24xID0gdmFsdWUxLnZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjIgPSB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIHJldHVybiBwcm9qZWN0aW9uMi5pbmNsdWRlcyhwcm9qZWN0aW9uMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICd1bnN1cHBvcnRlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgY29udGFpbnMsIG9ubHkgYmFzZVR5cGU6IGRpcmVjdGVkUGFpciBhbmQgY2FyZGluYWxpdHk6IG11bHRpcGxlIGlzIHN1cHBvcnRlZCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIGNvbnRhaW5zJyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1jb250YWlucycsIFF0aUNvbnRhaW5zKTtcbiIsICJpbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpQ29ycmVjdCBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgZ2V0IGludGVycHJldGF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnaW50ZXJwcmV0YXRpb24nKSB8fCAnJztcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB8fCAnJztcbiAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRSZXNwb25zZShpZGVudGlmaWVyKTtcbiAgICByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZTtcbiAgICBpZiAocmVzcG9uc2VWYXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZS5sZW5ndGggPiAwID8gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2VbMF0gOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlO1xuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1jb3JyZWN0JywgUXRpQ29ycmVjdCk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlFcXVhbFJvdW5kZWQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHJvdW5kaW5nTW9kZTogJ2RlY2ltYWxQbGFjZXMnIHwgJ3NpZ25pZmljYW50RmlndXJlcycgPSAnc2lnbmlmaWNhbnRGaWd1cmVzJztcblxuICBnZXQgZmlndXJlcygpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZpZ3VyZXMnKTtcbiAgICBpZiAoIWF0dHIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG1pc3NpbmcnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWd1cmVzID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoJ2ZpZ3VyZXMnKSB8fCAnMCcpO1xuICAgIGlmIChpc05hTihmaWd1cmVzKSkge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbm90IGEgbnVtYmVyJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZpZ3VyZXMgPCAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBuZWdhdGl2ZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChmaWd1cmVzIDwgMSAmJiB0aGlzLnJvdW5kaW5nTW9kZSA9PT0gJ3NpZ25pZmljYW50RmlndXJlcycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAxIGZvciBSb3VuZGluZ01vZGUgc2lnbmlmaWNhbnRGaWd1cmVzJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZpZ3VyZXM7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodGhpcy5yb3VuZGluZ01vZGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgdmFsdWUyLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMS52YWx1ZSkgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIudmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgZXF1YWwnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh2YWx1ZXNbMF0uYmFzZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgIGNhc2UgJ2Zsb2F0Jzoge1xuICAgICAgICAgIGNvbnN0IGZsb2F0MSA9IHBhcnNlRmxvYXQodmFsdWUxLnZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgY29uc3QgZmxvYXQyID0gcGFyc2VGbG9hdCh2YWx1ZTIudmFsdWUgYXMgc3RyaW5nKTtcblxuICAgICAgICAgIGlmICghaXNOYU4oZmxvYXQxKSAmJiAhaXNOYU4oZmxvYXQyKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSAnc2lnbmlmaWNhbnRGaWd1cmVzJykge1xuICAgICAgICAgICAgICByZXR1cm4gZmxvYXQxLnRvUHJlY2lzaW9uKHRoaXMuZmlndXJlcykgPT09IGZsb2F0Mi50b1ByZWNpc2lvbih0aGlzLmZpZ3VyZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGZsb2F0MSAqIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpKSAvIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpID09PVxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoZmxvYXQyICogTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykpIC8gTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgdmFsdWUgY2Fubm90IGJlIGNhc3RlZCB0byBudW1lcmljIHZhbHVlIGluIGVxdWFsUm91bmRlZCBvcGVyYXRvcjogJHtmbG9hdDF9LCAke2Zsb2F0Mn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHZhbHVlcyBvdGhlciB0aGFuIGZsb2F0IGFuZCBpbnQgY2Fubm90IGJlIHVzZWQgaW4gZXF1YWxSb3VuZGVkIG9wZXJhdG9yLmApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1lcXVhbC1yb3VuZGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZXF1YWwtcm91bmRlZCcsIFF0aUVxdWFsUm91bmRlZCk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUVxdWFsIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB0b2xlcmFuY2VNb2RlOiAnZXhhY3QnIHwgJ3JlbGF0aXZlJyB8ICdhYnNvbHV0ZScgPSAnZXhhY3QnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh0aGlzLnRvbGVyYW5jZU1vZGUgIT09ICdleGFjdCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndG9sZXJhbmNlTW9kZSBpcyBub3Qgc3VwcG9ydGVkIHlldCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgdmFsdWUyLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMS52YWx1ZSkgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIudmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgZXF1YWwnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nLCB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nLCB2YWx1ZTEuYmFzZVR5cGUpO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGktZXF1YWwnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1lcXVhbCcsIFF0aUVxdWFsKTtcbiIsICJpbXBvcnQgeyBCYXNlVHlwZSB9IGZyb20gJy4uLy4uJztcblxuZXhwb3J0IGNsYXNzIFNjb3JpbmdIZWxwZXIge1xuICBwdWJsaWMgc3RhdGljIGNvbXBhcmVTaW5nbGVWYWx1ZXModmFsdWUxOiBSZWFkb25seTxzdHJpbmc+LCB2YWx1ZTI6IFJlYWRvbmx5PHN0cmluZz4sIGJhc2VUeXBlOiBCYXNlVHlwZSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoYmFzZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2lkZW50aWZpZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlMSA9PT0gdmFsdWUyO1xuICAgICAgY2FzZSAnaW50ZWdlcic6IHtcbiAgICAgICAgY29uc3QgaW50MSA9IHBhcnNlSW50KHZhbHVlMSwgMTApO1xuICAgICAgICBjb25zdCBpbnQyID0gcGFyc2VJbnQodmFsdWUyLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4oaW50MSkgJiYgIWlzTmFOKGludDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGludDEgPT09IGludDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGNvbnZlcnQgJHt2YWx1ZTF9IGFuZC9vciAke3ZhbHVlMn0gdG8gaW50LmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZmxvYXQnOiB7XG4gICAgICAgIGNvbnN0IGZsb2F0MSA9IHBhcnNlRmxvYXQodmFsdWUxKTtcbiAgICAgICAgY29uc3QgZmxvYXQyID0gcGFyc2VGbG9hdCh2YWx1ZTIpO1xuICAgICAgICBpZiAoIWlzTmFOKGZsb2F0MSkgJiYgIWlzTmFOKGZsb2F0MikpIHtcbiAgICAgICAgICByZXR1cm4gZmxvYXQxID09PSBmbG9hdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgY291bGRuJ3QgY29udmVydCAke3ZhbHVlMX0gYW5kL29yICR7dmFsdWUyfSB0byBmbG9hdC5gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3BhaXInOlxuICAgICAgY2FzZSAnZGlyZWN0ZWRQYWlyJzoge1xuICAgICAgICBjb25zdCBwYWlyMSA9IHZhbHVlMS5zcGxpdCgnICcpLnNvcnQoKTtcbiAgICAgICAgY29uc3QgcGFpcjIgPSB2YWx1ZTIuc3BsaXQoJyAnKS5zb3J0KCk7XG4gICAgICAgIGlmIChwYWlyMS5sZW5ndGggPT09IDIgJiYgcGFpcjIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKGJhc2VUeXBlID09PSAncGFpcicpIHtcbiAgICAgICAgICAgIHBhaXIxLnNvcnQoKTtcbiAgICAgICAgICAgIHBhaXIyLnNvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBhaXIxLmpvaW4oJyAnKSA9PT0gcGFpcjIuam9pbignICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNvbXBhcmVkIHR3byBwYWlyIGJ1dCBvbmUgb2YgdGhlIHZhbHVlcyBkb2VzIG5vdCBoYXZlIDIgdmFsdWVzOiAxOiAke3ZhbHVlMX0gMjogJHt2YWx1ZTJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpR3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlID4gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGd0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZ3QnLCBRdGlHdCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpR3RlIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA+PSArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgZ3RlJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRlJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZ3RlJywgUXRpR3RlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUlzTnVsbCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBpZiAoIXZhcmlhYmxlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gdmFyaWFibGVzWzBdLnZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIE51bGwnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1pcy1udWxsJywgUXRpSXNOdWxsKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlMdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPCArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgbHQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gbHQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1sdCcsIFF0aUx0KTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlMdGUgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlIDw9ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBsdGUnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBsdGUnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1sdGUnLCBRdGlMdGUpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTWFwUmVzcG9uc2UgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPG51bWJlcj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogbnVtYmVyIHtcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0UmVzcG9uc2UodGhpcy5pZGVudGlmaWVyKTtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFJlc3BvbnNlICR7dGhpcy5pZGVudGlmaWVyfSBjYW4gbm90IGJlIGZvdW5kYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWFwcGluZyA9IHJlc3BvbnNlLm1hcHBpbmc7XG4gICAgY29uc3QgY2FuZGlkYXRlUmVzcG9uc2VzID0gIUFycmF5LmlzQXJyYXkocmVzcG9uc2UudmFsdWUpID8gW3Jlc3BvbnNlLnZhbHVlXSA6IHJlc3BvbnNlLnZhbHVlO1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlUmVzcG9uc2Ugb2YgY2FuZGlkYXRlUmVzcG9uc2VzKSB7XG4gICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IG1hcHBpbmcubWFwRW50cmllcy5maW5kKGVudHJ5ID0+IHtcbiAgICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhlbnRyeS5tYXBLZXksIGNhbmRpZGF0ZVJlc3BvbnNlLCByZXNwb25zZS5iYXNlVHlwZSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghKG1hcHBlZFZhbHVlID09IG51bGwgfHwgbWFwcGVkVmFsdWUubWFwcGVkVmFsdWUgPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXN1bHQgKz0gbWFwcGVkVmFsdWUubWFwcGVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gbWFwcGluZy5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXBwaW5nLmxvd2VyQm91bmQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gTWF0aC5tYXgobWFwcGluZy5sb3dlckJvdW5kLCByZXN1bHQpO1xuICAgIH1cbiAgICBpZiAobWFwcGluZy51cHBlckJvdW5kICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IE1hdGgubWluKG1hcHBpbmcudXBwZXJCb3VuZCwgcmVzdWx0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tYXAtcmVzcG9uc2UnLCBRdGlNYXBSZXNwb25zZSk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tIFwibGl0L2RlY29yYXRvcnMuanNcIjtcbmltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tIFwibGl0XCI7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXBwaW5nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogXCJkZWZhdWx0LXZhbHVlXCIsIHR5cGU6IE51bWJlciB9KSBkZWZhdWx0VmFsdWU6IG51bWJlciA9IDA7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogXCJsb3dlci1ib3VuZFwiLCB0eXBlOiBOdW1iZXIgfSkgbG93ZXJCb3VuZDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IFwidXBwZXItYm91bmRcIiwgdHlwZTogTnVtYmVyIH0pIHVwcGVyQm91bmQ6IG51bWJlcjtcblxuICBcbiAgcHVibGljIGdldCBtYXBFbnRyaWVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChcInF0aS1tYXAtZW50cnlcIikpLm1hcCgoZWwpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcEtleTogZWwuZ2V0QXR0cmlidXRlKFwibWFwLWtleVwiKSxcbiAgICAgICAgbWFwcGVkVmFsdWU6ICtlbC5nZXRBdHRyaWJ1dGUoXCJtYXBwZWQtdmFsdWVcIiksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInF0aS1tYXBwaW5nXCIsIFF0aU1hcHBpbmcpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTWF0Y2ggZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgLy9QSyA6IEZJWE1FLlxuICAvLyBUaGlzIHdhcyBhIGxpdHRsZSBleHBlcmltZW50IGlmIHdlIGNvdWxkIGNhbGwgdGhlIG1hdGNoIGZ1bmN0aW9uIGFzIGEgc3RhdGljIGZ1bmN0aW9uLFxuICAvLyBUaGlzIGNhbiBiZSB1c2VkIGZvciBhbGwga2luZCBvZiB0aGluZ3MsIGJ1dCBub3cgZXNwZWNpYWxseSBmb3IgdXNlIGluXG4gIC8vIHF0aS1yZXNwb25zZS1jb25kaXRpb24tc2NyaXB0XG4gIC8vIGluIHdoaWNoIHdlIHBhc3MgdGhlIGV4cHJlc3Npb25zIGFzIHB1cmUgZnVuY3Rpb25zLCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuXG4gIC8vIFNBRExZLCB0aGUgZ2V0VmFyaWFibGVzIHRocm93cyByb2V0IGluIGRlIGV0ZW4uLiB3ZWV0IG5vZyBuaWV0IHByZWNpZXMgaG9lIGRlemUgd2Vya3QuXG4gIC8vIE1hYXIgaWsgZ2EgZXJpbiBkdWlrZW4uXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlVG9NYXAgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCBjb3JyZWN0VmFsdWVJbmZvID0gdmFsdWVzWzFdO1xuICAgICAgcmV0dXJuIFF0aU1hdGNoLm1hdGNoKHZhbHVlVG9NYXAsIGNvcnJlY3RWYWx1ZUluZm8pO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIG1hdGNoJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1hdGNoKHZhbHVlVG9NYXA6IFJlc3BvbnNlVmFyaWFibGUsIGNvcnJlY3RWYWx1ZUluZm86IFJlc3BvbnNlVmFyaWFibGUpIHtcbiAgICBpZiAoY29ycmVjdFZhbHVlSW5mby5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCBBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoXG4gICAgICAgIHZhbHVlVG9NYXAudmFsdWU/LnRvU3RyaW5nKCksXG4gICAgICAgIGNvcnJlY3RWYWx1ZUluZm8udmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlVG9NYXAudmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIGxlbmd0aCBpcyBub3QgZXF1YWwsIGRvbid0IGNoZWNrLCBpdCdzIGluY29ycmVjdC5cbiAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aCAhPT0gY29ycmVjdFZhbHVlSW5mby52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbGV0IGFuc3dlckluZGV4ID0gMDtcbiAgICAgIGZvciAoY29uc3QgY29ycmVjdEFuc3dlciBvZiBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSB7XG4gICAgICAgIGlmIChjb3JyZWN0VmFsdWVJbmZvLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVUb01hcCA9IHZhbHVlVG9NYXBbYW5zd2VySW5kZXhdO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhjb3JyZWN0QW5zd2VyLCBjdXJyZW50VmFsdWVUb01hcCwgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZSk7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2VxdWVuY2UgZG9lcyBub3QgbWF0dGVyLCBmaW5kIHZhbHVlIHNvbWV3aGVyZSBpbiB0aGUgYXJyYXlcbiAgICAgICAgICAvLyBhbmQgcmVtb3ZlIHdoZW4gZm91bmQuXG4gICAgICAgICAgbGV0IG1hdGNoaW5nVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgIGZvciAoY29uc3QgbXYgb2YgdmFsdWVUb01hcC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKGNvcnJlY3RBbnN3ZXIsIG12LCBjb3JyZWN0VmFsdWVJbmZvLmJhc2VUeXBlKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgbWF0Y2hpbmdWYWx1ZSA9IG12O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICh2YWx1ZVRvTWFwLnZhbHVlIGFzIHN0cmluZ1tdKS5zcGxpY2UodmFsdWVUb01hcC52YWx1ZS5pbmRleE9mKG1hdGNoaW5nVmFsdWUpLCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhbnN3ZXJJbmRleCsrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7IC8vIGlmIGV2ZXJ5dGhpbmcgbWF0Y2hlcyBpdCdzIGNvcnJlY3Q7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hdGNoJywgUXRpTWF0Y2gpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1lbWJlciBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbiB8IG51bGw+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcblxuICAgIGlmICghKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSkge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHRha2VzIHR3byBzdWItZXhwcmVzc2lvbnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdmFsdWUxLCB2YWx1ZTJdID0gdmFsdWVzO1xuXG4gICAgaWYgKCEodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1doaWNoIG11c3QgYm90aCBoYXZlIHRoZSBzYW1lIGJhc2UtdHlwZScpO1xuICAgIH1cbiAgICBpZiAoISh2YWx1ZTIuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZScgfHwgdmFsdWUyLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2FuZCB0aGUgc2Vjb25kIG11c3QgYmUgYSBtdWx0aXBsZSBvciBvcmRlcmVkIGNvbnRhaW5lcicpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHNob3VsZCBub3QgYmUgdXNlZCBvbiBzdWItZXhwcmVzc2lvbnMgd2l0aCBhIGJhc2UtdHlwZSBvZiBmbG9hdCcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZHVyYXRpb24nIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2R1cmF0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJdCBtdXN0IG5vdCBiZSB1c2VkIG9uIHN1Yi1leHByZXNzaW9ucyB3aXRoIGEgYmFzZS10eXBlIG9mIGR1cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgZWl0aGVyIHN1Yi1leHByZXNzaW9uIGlzIE5VTEwgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRvciBpcyBOVUxMXG4gICAgaWYgKHZhbHVlMS52YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZTIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRoZSByZXN1bHQgaXMgYSBzaW5nbGUgYm9vbGVhbiB3aXRoIGEgdmFsdWUgb2YgJ3RydWUnIGlmIHRoZSB2YWx1ZSBnaXZlbiBieSB0aGUgZmlyc3Qgc3ViLWV4cHJlc3Npb24gaXMgaW4gdGhlIGNvbnRhaW5lciBkZWZpbmVkIGJ5IHRoZSBzZWNvbmQgc3ViLWV4cHJlc3Npb24uXG4gICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgIHJldHVybiBwcm9qZWN0aW9uMi5pbmNsdWRlcyhwcm9qZWN0aW9uMSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWVtYmVyJywgUXRpTWVtYmVyKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlLCBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpTXVsdGlwbGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+W10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBSZXNwb25zZVZhcmlhYmxlW10ge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgaWYgKHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnbXVsdGlwbGUnICYmIHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3QgdmFsdWVzID0gdmFyaWFibGVzLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgIC8vIGNvbnNvbGUubG9nKHZhcmlhYmxlcyk7XG4gICAgLy8gY29uc3QgZmxhdHRlbmVkQXJyYXkgPSB2YWx1ZXMucmVkdWNlKChhY2M6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAvLyAgIHJldHVybiBhY2MuY29uY2F0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IHZhbHVlKTtcbiAgICAvLyB9LCBbXSk7XG4gICAgLy8gcmV0dXJuIGZsYXR0ZW5lZEFycmF5O1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tdWx0aXBsZScsIFF0aU11bHRpcGxlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlOb3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCR7c3VwZXIucmVuZGVyKCl9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxib29sZWFuPjtcbiAgICBjb25zdCByZXN1bHQgPSBleHByZXNzaW9uLmNhbGN1bGF0ZSgpIGFzIGJvb2xlYW47XG4gICAgcmV0dXJuICFyZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbm90JywgUXRpTm90KTtcbiIsICJpbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlPciBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5tYXAoYyA9PiB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSBjIGFzIFF0aUV4cHJlc3Npb248YW55PjtcbiAgICAgIGlmICghY29uZGl0aW9uLmNhbGN1bGF0ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgLy8gY29udmVydCBzdHJpbmcgdmFsdWUgdG8gYm9vbGVhbiBhbmQgcmV0dXJuIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktb3IsIGV4cGVjdGVkIGJvb2xlYW4nKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMuc29tZShlID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgZSA9PT0gJ2Jvb2xlYW4nICYmIGU7XG4gICAgfSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3InLCBRdGlPcik7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aU9yZGVyZWQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFJlc3BvbnNlVmFyaWFibGVbXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IFJlc3BvbnNlVmFyaWFibGVbXSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2YgdmFyaWFibGVzKSB7XG4gICAgICBpZiAodmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdvcmRlcmVkJyAmJiB2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgb3JkZXJlZCcpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3JkZXJlZCcsIFF0aU9yZGVyZWQpO1xuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICdzcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcblxuZXhwb3J0IGNsYXNzIFF0UHJpbnRlZFZhcmlhYmxlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgLy8gY29uc3RydWN0b3IoKSB7XG4gIC8vICAgc3VwZXIoKTtcbiAgLy8gICBjb25zdCBhc3Nlc3NtZW50SXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICAvLyAgIGFzc2Vzc21lbnRJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZXNwb25zZS1wcm9jZXNzZWQnLCAoKSA9PiB7XG4gIC8vICAgICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICAvLyBwdWJsaWMgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gIC8vICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgLy8gICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gICAgY29uc3QgYXNzZXNzbWVudEl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5pZGVudGlmaWVyO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpLnZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJpbnRlZC12YXJpYWJsZScsIFF0UHJpbnRlZFZhcmlhYmxlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlQcm9kdWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnZmxvYXQnIHx8IGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKiBwYXJzZUludChjdXJyZW50VmFsdWUudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBjYW4gbm90IGNvbnZlcnQgdG8gbnVtYmVyYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgaGFzIGFub3RoZXIgYmFzZVR5cGUgJHtjdXJyZW50VmFsdWUuYmFzZVR5cGV9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfSwgMSk7XG4gICAgcmV0dXJuIHByb2R1Y3Q7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJvZHVjdCcsIFF0aVByb2R1Y3QpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlTdHJpbmdNYXRjaCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Nhc2Utc2Vuc2l0aXZlJyB9KSBjYXNlU2Vuc2l0aXZlID0gJ3RydWUnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBzdHJpbmctbWF0Y2gnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgdjEgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMS52YWx1ZSA6ICh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdjIgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMi52YWx1ZSA6ICh2YWx1ZTIudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyh2MSBhcyBzdHJpbmcsIHYyIGFzIHN0cmluZywgdmFsdWUxLmJhc2VUeXBlKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLXN0cmluZy1tYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXN0cmluZy1tYXRjaCcsIFF0aVN0cmluZ01hdGNoKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uLCBRdGlFeHByZXNzaW9uQmFzZSB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVN1bSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIHByaXZhdGUgX2V4cHJlc3Npb246IFF0aVN1bUV4cHJlc3Npb247XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZXhwcmVzc2lvbiA9IG5ldyBRdGlTdW1FeHByZXNzaW9uKEFycmF5LmZyb20odGhpcy5jaGlsZHJlbiBhcyB1bmtub3duIGFzIFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj5bXSkpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZXhwcmVzc2lvbi5jYWxjdWxhdGUoKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVN1bUV4cHJlc3Npb24gaW1wbGVtZW50cyBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHByZXNzaW9uczogUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPltdKSB7fVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5leHByZXNzaW9ucy5tYXAoYyA9PiB7XG4gICAgICBpZiAoIWMuY2FsY3VsYXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBjLmNhbGN1bGF0ZSgpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktc3VtLCBleHBlY3RlZCBudW1iZXInKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc3VtJywgUXRpU3VtKTtcbiIsICJpbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpVmFyaWFibGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKS52YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXZhcmlhYmxlJywgUXRpVmFyaWFibGUpO1xuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpUnVsZSwgUXRpUnVsZUJhc2UgfSBmcm9tICcuLic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3V0Y29tZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgbG9naWMgPSBuZXcgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IoKTtcbiAgICBjb25zdCBydWxlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gICAgbG9naWMucHJvY2VzcyhydWxlcyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtcHJvY2Vzc2luZyc6IFF0aU91dGNvbWVQcm9jZXNzaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZ1Byb2Nlc3NvciB7XG4gIHB1YmxpYyBwcm9jZXNzKHJ1bGVzOiBRdGlSdWxlQmFzZVtdKSB7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24sIElNU3BjaSwgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZywgUXRpVmFyaWFibGVKU09OIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5kZWNsYXJlIGNvbnN0IHJlcXVpcmVqczogYW55O1xuZGVjbGFyZSBjb25zdCBkZWZpbmU6IGFueTtcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByaXZhdGUgbW9kdWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcjogc3RyaW5nO1xuICBwcml2YXRlIF9lcnJvck1lc3NhZ2U6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgaW50ZXJ2YWxJZDogYW55O1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwY2k6IElNU3BjaTx1bmtub3duPjtcblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInXG4gICAgICB9LFxuICAgICAgbW9kdWxlOiB7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnbW9kdWxlJyB9LFxuICAgICAgY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGF0dHJpYnV0ZTogJ2N1c3RvbS1pbnRlcmFjdGlvbi10eXBlLWlkZW50aWZpZXInXG4gICAgICB9LFxuICAgICAgX2Vycm9yTWVzc2FnZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHN0YXRlOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRRdGlWYXJpYWJsZUpTT04oaW5wdXQ6IFF0aVZhcmlhYmxlSlNPTik6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBmb3IgKGNvbnN0IHRvcExldmVsS2V5IGluIGlucHV0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkodG9wTGV2ZWxLZXkpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZE9iamVjdCA9IGlucHV0W3RvcExldmVsS2V5IGFzICdsaXN0JyB8ICdiYXNlJ107XG4gICAgICAgIGlmIChuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZEtleSBpbiBuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIGlmIChuZXN0ZWRPYmplY3QuaGFzT3duUHJvcGVydHkobmVzdGVkS2V5KSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5lc3RlZE9iamVjdFtuZXN0ZWRLZXkgYXMga2V5b2YgdHlwZW9mIG5lc3RlZE9iamVjdF07XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoU3RyaW5nKTsgLy8gQ29udmVydCBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsgLy8gQ29udmVydCB0aGUgc2luZ2xlIHZhbHVlIHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENoZWNraW5nKCk6IHZvaWQge1xuICAgIC8vIGJlY2F1c2UgdGhlIHBjaSBkb2Vzbid0IGhhdmUgYSBtZXRob2QgdG8gY2hlY2sgZm9yIGNoYW5nZXMgd2UnbGwgdXNlIGFuIGludGVydmFsXG4gICAgLy8gdG8gY2hlY2sgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFuZ2VkLiBJZiBjaGFuZ2VkIHdlJ2xsIHNhdmUgdGhlIHJlc3BvbnNlXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3QgbmV3UmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XG4gICAgICBpZiAoc3RyaW5naWZpZWQgIT09IHRoaXMucmF3UmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yYXdSZXNwb25zZSA9IHN0cmluZ2lmaWVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udmVydFF0aVZhcmlhYmxlSlNPTihuZXdSZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BDaGVja2luZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gRk9SIE5PV1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIC8vIE9ubHkgc2V0IHN0YXRlIGlzIHN1cHBvcnRlZCBpbiBhIFBDSVxuICB9XG5cbiAgZ2V0VEFPQ29uZmlnKG5vZGUpIHtcbiAgICBjb25zdCBhID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdwcm9wZXJ0aWVzJyk7XG4gICAgbGV0IGNvbmZpZyA9IHt9O1xuXG4gICAgY29uc3QgZ2V0UHJvcGVydHlWYWx1ZSA9IGVsID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0ge307XG4gICAgICBjb25zdCBrZXkgPSBlbC5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWwuY2hpbGRyZW4pO1xuICAgICAgICBjb25zdCBhbGxLZXkgPSBjaGlsZHJlbi5tYXAoKGM6IEhUTUxFbGVtZW50KSA9PiBjLmdldEF0dHJpYnV0ZSgna2V5JykpO1xuICAgICAgICBjb25zdCBpc0FycmF5ID0gYWxsS2V5Lmxlbmd0aCA+IDAgJiYgIWFsbEtleS5maW5kKGsgPT4gIU51bWJlci5pc0ludGVnZXIoK2spKTtcbiAgICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gY2hpbGRyZW4ubWFwKGMgPT4gZ2V0Q2hpbGRQcm9wZXJ0aWVzKGMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gZWwudGV4dENvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Q2hpbGRQcm9wZXJ0aWVzID0gKGVsKToge30gfCB2b2lkID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBsZXQgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IHsgLi4ucHJvcGVydGllcywgLi4uZ2V0UHJvcGVydHlWYWx1ZShjaGlsZCkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0aWVzIG9mIGEpIHtcbiAgICAgIGNvbnN0IGtleSA9IHByb3BlcnRpZXMuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5nZXRDaGlsZFByb3BlcnRpZXMocHJvcGVydGllcykgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdDYW4gbm90IGZpbmQgcXRpLWN1c3RvbS1pbnRlcmFjdGlvbiBjb25maWcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlZ2lzdGVyKHBjaTogSU1TcGNpPHVua25vd24+KSB7XG4gICAgdGhpcy5wY2kgPSBwY2k7XG5cbiAgICBjb25zdCB0eXBlID0gdGhpcy5wYXJlbnRFbGVtZW50LnRhZ05hbWUgPT09ICdRVEktQ1VTVE9NLUlOVEVSQUNUSU9OJyA/ICdUQU8nIDogJ0lNUyc7XG4gICAgY29uc3QgZG9tOiBIVE1MRWxlbWVudCA9XG4gICAgICB0eXBlID09ICdJTVMnID8gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktaW50ZXJhY3Rpb24tbWFya3VwJykgOiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ21hcmt1cCcpO1xuICAgIGRvbS5jbGFzc0xpc3QuYWRkKCdxdGktY3VzdG9tSW50ZXJhY3Rpb24nKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nICYmIHRoaXMucXVlcnlTZWxlY3RvcigncHJvcGVydGllcycpKSB7XG4gICAgICAodGhpcy5xdWVyeVNlbGVjdG9yKCdwcm9wZXJ0aWVzJykgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBhbnkgPVxuICAgICAgdHlwZSA9PSAnSU1TJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZGF0YXNldCxcbiAgICAgICAgICAgIG9ucmVhZHk6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29ucmVhZHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogdGhpcy5nZXRUQU9Db25maWcodGhpcyk7XG5cbiAgICB0eXBlID09ICdJTVMnXG4gICAgICA/IHBjaS5nZXRJbnN0YW5jZShkb20sIGNvbmZpZywgdW5kZWZpbmVkKVxuICAgICAgOiAocGNpIGFzIGFueSkuaW5pdGlhbGl6ZSh0aGlzLmN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXIsIGRvbS5maXJzdEVsZW1lbnRDaGlsZCwgY29uZmlnKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rJykpLm1hcChhY2MgPT4gYWNjLmdldEF0dHJpYnV0ZSgnaHJlZicpKTtcbiAgICAgIGxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgc3R5bGVzLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgc3R5bGVzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgICAgc3R5bGVzLmhyZWYgPSBsaW5rO1xuICAgICAgICBkb20uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0Q2hlY2tpbmcoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgcmVxdWlyZUNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IHtcbiAgICAgIGNvbnRleHQ6IHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcixcbiAgICAgIGNhdGNoRXJyb3I6IHRydWUsXG4gICAgICBwYXRoczoge31cbiAgICB9O1xuXG4gICAgLy8gcGs6IGMnZXN0IHRyZXMgdWdseS4uIHR5cGVzY3JpcHQgd2h5dW5vc3ByZWFkIGFkZCBwcm9wcz8hP1xuICAgIGlmICh3aW5kb3dbJ3JlcXVpcmVQYXRocyddICYmIHdpbmRvd1sncmVxdWlyZVNoaW0nXSkge1xuICAgICAgcmVxdWlyZUNvbmZpZ1sncGF0aHMnXSA9IHdpbmRvd1sncmVxdWlyZVBhdGhzJ107XG4gICAgICByZXF1aXJlQ29uZmlnWydzaGltJ10gPSB3aW5kb3dbJ3JlcXVpcmVTaGltJ107XG4gICAgfVxuICAgIGlmICghZ2xvYmFsVGhpcy5yZXF1aXJlKSB7XG4gICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgcmVxdWlyZWpzIG5vdCBmb3VuZCwgbG9hZCB3aXRoIGNkbjogaHR0cHM6Ly9jZG5qcy5jb20vbGlicmFyaWVzL3JlcXVpcmUuanNgO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbml0aWFsIGNoZWNrIGluIGNhc2UgdGhlIGNoaWxkcmVuIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICB0aGlzLnJlZ2lzdGVyTW9kdWxlcyhyZXF1aXJlQ29uZmlnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVQQ0kgPSByZXF1aXJlanMuY29uZmlnKHJlcXVpcmVDb25maWcpO1xuXG4gICAgICByZXF1aXJlUENJKFxuICAgICAgICBbJ3JlcXVpcmUnXSxcbiAgICAgICAgcmVxdWlyZSA9PiB7XG4gICAgICAgICAgIXJlcXVpcmUuZGVmaW5lZCgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JykgJiZcbiAgICAgICAgICAgIGRlZmluZSgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyOiBjdHhBID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoY3R4QSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub3RpZnlSZWFkeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGluIHRoZSBUQU8gdmVyc2lvbiAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIFBLOiB0aGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJhY3Rpb24gaXMgb25seSByZWdpc3RlcmVkIG9uY2VcbiAgICAgICAgICAvLyBJZiBpdCB3YXMgcHJldmlzb3VseSBsb2FkZWQsIHRoZSByZWdpc3RlciB3aWxsIG5vZyBraWNrIGluLCBiZWNhdXNlIHRoZSBjbGFzcyBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICAgICAgICAvLyBhbmQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBQQ0ksIHRoZSByZWdpc3RlciBpcyBjYWxsZWQuXG4gICAgICAgICAgLy8gU28gbm93IGl0IGlzIGFscmVhZGx5IGRlZmluZWQsIHdlIGp1c3QgcmVnaXN0ZXIgaXQgb3Vyc2VsdmVzLlxuXG4gICAgICAgICAgY29uc3Qgd2FzUHJldmlvdXNseUxvYWRlZCA9IHJlcXVpcmUuZGVmaW5lZCh0aGlzLm1vZHVsZSk7XG5cbiAgICAgICAgICByZXF1aXJlKFt0aGlzLm1vZHVsZV0sIGN0eEEgPT4ge1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgaXQgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBsb2FkZWRcbiAgICAgICAgICAgIHdhc1ByZXZpb3VzbHlMb2FkZWQgJiYgdGhpcy5yZWdpc3RlcihjdHhBKTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IGVycjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zdG9wQ2hlY2tpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyTW9kdWxlcyhjb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcpIHtcbiAgICAvLyBnZXQgdGhlIHZhbHVlIG9mIGF0dHJpYnV0ZTogZGF0YS1iYXNlLXVybFxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpO1xuICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICBjb25zdCBtb2R1bGVSZXNvbHV0aW9uUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb24uanNgO1xuICAgICAgY29uc3QgbW9kdWxlUmVzb2x1dGlvbkZhbGxiYWNrUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb25fZmFsbGJhY2suanNgO1xuICAgICAgaWYgKG1vZHVsZVJlc29sdXRpb25QYXRoKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWcgPSBhd2FpdCB0aGlzLmxvYWRDb25maWcobW9kdWxlUmVzb2x1dGlvblBhdGgsIGJhc2VVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIG1vZHVsZVJlc29sdXRpb25GYWxsYmFja1BhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBHZXQgdGhlIHF0aS1pbnRlcmFjdGlvbi1tb2R1bGVzIGVsZW1lbnRcbiAgICBjb25zdCBpbnRlcmFjdGlvbk1vZHVsZXMgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGVzJyk7XG4gICAgaWYgKGludGVyYWN0aW9uTW9kdWxlcykge1xuICAgICAgLy8gR2V0IGFsbCBxdGktaW50ZXJhY3Rpb24tbW9kdWxlIGVsZW1lbnRzXG4gICAgICBjb25zdCBtb2R1bGVzID0gaW50ZXJhY3Rpb25Nb2R1bGVzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGUnKTtcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG1vZHVsZSBhbmQgcmVnaXN0ZXIgaXQgd2l0aCBSZXF1aXJlSlNcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlSWQgPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwcmltYXJ5UGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ3ByaW1hcnktcGF0aCcpO1xuICAgICAgICBjb25zdCBmYWxsYmFja1BhdGggPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdmYWxsYmFjay1wYXRoJyk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcgPSBwcmltYXJ5UGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogcHJpbWFyeVBhdGggfSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IGZhbGxiYWNrUGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogZmFsbGJhY2tQYXRoIH0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKG1vZHVsZUlkICYmIHByaW1hcnlDb25maWcpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIGZhbGxiYWNrQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRG91YmxlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IHNpbmdsZUZvcndhcmRTbGFzaGVzID0gc3RyXG4gICAgICAucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKVxuICAgICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgICAucmVwbGFjZSgnaHR0cDovJywgJ2h0dHA6Ly8nKVxuICAgICAgLnJlcGxhY2UoJ2h0dHBzOi8nLCAnaHR0cHM6Ly8nKTtcbiAgICByZXR1cm4gc2luZ2xlRm9yd2FyZFNsYXNoZXM7XG4gIH1cblxuICBsb2FkQ29uZmlnID0gYXN5bmMgKHVybDogc3RyaW5nLCBiYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTxNb2R1bGVSZXNvbHV0aW9uQ29uZmlnPiA9PiB7XG4gICAgdXJsID0gdGhpcy5yZW1vdmVEb3VibGVTbGFzaGVzKHVybCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVDb25maWcgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgaWYgKHJlcXVpcmVDb25maWcub2spIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVxdWlyZUNvbmZpZy5qc29uKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmcgPSBjb25maWcgYXMgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZztcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBtb2R1bGVDb25nLnBhdGhzKSB7XG4gICAgICAgICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgICAgIG1vZHVsZUNvbmcucGF0aHNbbW9kdWxlSWRdID0gbW9kdWxlQ29uZy5wYXRoc1ttb2R1bGVJZF0/LnRvTG9jYWxlTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnaHR0cCcpXG4gICAgICAgICAgICAgID8gbW9kdWxlQ29uZy5wYXRoc1ttb2R1bGVJZF1cbiAgICAgICAgICAgICAgOiB0aGlzLnJlbW92ZURvdWJsZVNsYXNoZXMoYCR7YmFzZVVybH0vJHttb2R1bGVDb25nLnBhdGhzW21vZHVsZUlkXX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUNvbmc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBtZXJnZUNvbmZpZ3MgPSBhc3luYyAoXG4gICAgY29uZmlnOiBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnLFxuICAgIHByaW1hcnlDb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcsXG4gICAgZmFsbGJhY2s6IHN0cmluZyB8IE1vZHVsZVJlc29sdXRpb25Db25maWdcbiAgKSA9PiB7XG4gICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBwcmltYXJ5Q29uZmlnPy5wYXRocykge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHRoZSBjb25maWdcbiAgICAgIGlmICghY29uZmlnLnBhdGhzW21vZHVsZUlkXSkge1xuICAgICAgICAvLyBjaGVjayBpZiBmaWxlIGV4aXN0c1xuICAgICAgICBsZXQgZmFpbGVkVG9SZXNvbHZlID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGF0aFdpdGhFeHRlbnNpb24gPSBwcmltYXJ5Q29uZmlnLnBhdGhzW21vZHVsZUlkXT8udG9Mb2NhbGVMb3dlckNhc2UoKS5lbmRzV2l0aCgnLmpzJylcbiAgICAgICAgICAgID8gcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF1cbiAgICAgICAgICAgIDogcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gKyAnLmpzJztcbiAgICAgICAgICBjb25zdCBtID0gYXdhaXQgZmV0Y2gocGF0aFdpdGhFeHRlbnNpb24pO1xuICAgICAgICAgIGlmIChtLm9rKSB7XG4gICAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF0ucmVwbGFjZSgvXFwuanMkLywgJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmYWlsZWRUb1Jlc29sdmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgZmFpbGVkVG9SZXNvbHZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbGVkVG9SZXNvbHZlICYmIGZhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gYXdhaXQgdGhpcy5sb2FkQ29uZmlnKGZhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrQ29uZmlnPy5wYXRoc1ttb2R1bGVJZF0pIHtcbiAgICAgICAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gZmFsbGJhY2tDb25maWcucGF0aHNbbW9kdWxlSWRdLnJlcGxhY2UoL1xcLmpzJC8sICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZhbGxiYWNrID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrPy5wYXRoc1ttb2R1bGVJZF0pIHtcbiAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW21vZHVsZUlkXSA9IGZhbGxiYWNrLnBhdGhzW21vZHVsZUlkXS5yZXBsYWNlKC9cXC5qcyQvLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZhaWxlZFRvUmVzb2x2ZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIG1vZHVsZTogJyArIG1vZHVsZUlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PiR7dGhpcy5fZXJyb3JNZXNzYWdlICYmXG4gICAgICBodG1sYDxkaXYgc3R5bGU9XCJjb2xvcjpyZWRcIj5cbiAgICAgICAgPGgxPkVycm9yPC9oMT5cbiAgICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2V9XG4gICAgICA8L2Rpdj5gfWA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbic6IFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnLFxuICB0cnVlLFxuICAnLmRsJ1xuKSB7XG4gIEBzdGF0ZSgpIHByaXZhdGUgX2NoaWxkcmVuTWFwOiBFbGVtZW50W107XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jazsgLyogbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBzY2FsaW5nIHBvc2l0aW9uICovXG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSddIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBnYXA6IDAuNXJlbTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgICAke3RoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCA+IDAgJiZcbiAgICAgIEFycmF5LmZyb20oQXJyYXkoTWF0aC5jZWlsKHRoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCAvIDIpKS5rZXlzKCkpLm1hcChcbiAgICAgICAgKF8sIGluZGV4KSA9PlxuICAgICAgICAgIGh0bWxgPGRpdiBwYXJ0PVwiYXNzb2NpYWJsZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IG5hbWU9XCJsZWZ0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X2xlZnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgbmFtZT1cInJpZ2h0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X3JpZ2h0XCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgKX1gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nOiBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBUb3VjaERyYWdBbmREcm9wIHtcbiAgcHJpdmF0ZSBfdG91Y2hCZWdpbiA9IDA7IC8vIHRpbWVzdGFtcCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF90b3VjaERvd24gPSBudWxsOyAvLyBwb2ludCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF9sYXN0Q2xpY2sgPSAwOyAvLyB0aW1lc3RhbXAgb2YgcHJldmlvdXMgY2xpY2sgKHRvdWNoc3RhcnQgKyB0b3VjaGVuZClcbiAgcHJpdmF0ZSBfY2FuRHJhZyA9IGZhbHNlOyAvLyB3aGV0aGVyIHRoZXJlIGlzIGFuIGVsZW1lbnQgd2hpY2ggY2FuIGJlIGRyYWdnZWRcbiAgcHJpdmF0ZSBfZHJhZ1NyYyA9IG51bGw7IC8vIHRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSBkcmFnZ2VkXG4gIHByaXZhdGUgX2RyYWdDb3B5ID0gbnVsbDsgLy8gY29weSBvZiBkcmFnIHNvdXJjZSBmb3IgZHJhZyBmZWVkYmFja1xuICBwcml2YXRlIF90b3VjaEVuZENhbGxlZCA9IGZhbHNlOyAvLyB3aGV0aGVyIHRvdWNoRW5kIG9jY3VyZWRcbiAgcHJpdmF0ZSBfZHJhZ1J1bm5pbmcgPSBmYWxzZTsgLy8gd2hldGhlciBhIGRyYWcgcHJvY2VzcyBpcyBydW5uaW5nIGF0IHRoZSBtb21lbnRcblxuICBwcml2YXRlIF9kYXRhVHJhbnNmZXIgPSB7XG4gICAgZGF0YToge30sXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgdGhpcy5kYXRhW3R5cGVdID0gdmFsO1xuICAgIH0sXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbdHlwZV07XG4gICAgfSxcbiAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgfTtcbiAgcHJpdmF0ZSBfY29weU9mZnNldCA9IHsgeDogMCwgeTogMCB9OyAvLyBPZmZzZXQgZm9yIHBvc2l0aW9uaW5nIHRoZSBkcmFnIGNvcHlcblxuICBwcml2YXRlIF9sYXN0VGFyZ2V0ID0gbnVsbDsgLy8gVGhlIGxhc3QgcmVnaXN0ZXJlZCB0b3VjaCB0YXJnZXRcbiAgcHJpdmF0ZSBfY3VycmVudERyb3BDb250YWluZXIgPSBudWxsOyAvLyBUaGUgY3VycmVudCBkcm9wIGNvbnRhaW5lcjsgZmFsc2UgaWYgZWxlbWVudCBpcyBub3QgZHJvcHBhYmxlXG4gIHByaXZhdGUgX2hhbmRsZUNsaWNrID0gdHJ1ZTsgLy8gU3BlY2lmaWVzXG5cbiAgcHJpdmF0ZSBfREJMQ0xJQ0tERUxBWSA9IDUwMDsgLy8gbWF4aW11bSBkZWxheSBpbiB3aGljaCBhIHNlY29uZCBjbGljayBtdXN0IG9jY3VyXG4gIHByaXZhdGUgX0NPTlRFWFRNRU5VREVMQVkgPSAxMDAwOyAvLyBob2xkIGRlbGF5IGFmdGVyIHdoaWNoIGNvbnRleHQgbWVudSBpcyBzaG93blxuICBwcml2YXRlIF9EUkFHREVMVEEgPSA1OyAvLyBNaW5pbXVtIG9mIHBpeGVscyB3aGljaCB0aGUgZmluZ2VyIG11c3QgYmUgbW92ZWQgdG8gc3RhcnQgZHJhZ1xuICBwcml2YXRlIF9DT1BZT1BBQ0lUWSA9IDAuNzsgLy8gT3BhY2l0eSBvZiB0aGUgZHJhZyBjb3B5IGVsZW1lbnRcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gIGNvcHlTdHlsZXNEcmFnQ2xvbmU6IGJvb2xlYW4gPSB0cnVlO1xuICBkcmFnT25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIENoZWNrIHNpbmdsZXRvblxuICAgIGlmIChUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZSkge1xuICAgICAgLy8gIHRocm93IG5ldyBFcnJvcihcIlRvdWNoRHJhZ0FuZERyb3AgY2FuJ3QgYmUgaW5zdGFudGlhdGVkIG1vcmUgdGhhbiBvbmNlLlwiKTtcbiAgICAgIHJldHVybiBUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZTtcbiAgICB9XG4gICAgVG91Y2hEcmFnQW5kRHJvcC5faW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgLy8gdGhpcy5faW5pdGlhbGl6ZUZpZWxkcygpO1xuXG4gICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fdG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX3RvdWNoTW92ZS5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fdG91Y2hFbmQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX3RvdWNoRW5kLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLl90b3VjaENhbmNlbC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkRHJhZ2dhYmxlcyhkcmFnZ2FibGVzOiBFbGVtZW50W10pIHtcbiAgICBkcmFnZ2FibGVzLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX3RvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl90b3VjaFN0YXJ0LmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaHN0YXJ0IGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoU3RhcnQoZSkge1xuICAgIC8vIFNhdmUgY3VycmVudCB0aW1lc3RhbXBcbiAgICB0aGlzLl90b3VjaEJlZ2luID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG5cbiAgICB0aGlzLl90b3VjaERvd24gPSB7IHgsIHkgfTtcblxuICAgIHRoaXMuX2RyYWdTcmMgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgdGhpcy5fY2FuRHJhZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5kcmFnT25DbGljaykge1xuICAgICAgY29uc3QgX3RvdWNoZXMgPSB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTtcbiAgICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNobW92ZSBldmVudCBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlXG4gICAqL1xuICBwcml2YXRlIF90b3VjaE1vdmUoZSkge1xuICAgIGlmICh0aGlzLl9jYW5EcmFnICYmIHRoaXMuX2RyYWdTcmMpIHtcbiAgICAgIC8vIENyZWF0ZSBjb3B5IG9mIGVsZW1lbnQgZm9yIHZpc3VhbCBkcmFnIGZlZWRiYWNrXG5cbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG4gICAgICBjb25zdCBfdG91Y2hlcyA9IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9O1xuXG4gICAgICBpZiAodGhpcy5fZ2V0RGVsdGEoX3RvdWNoZXMpID49IHRoaXMuX0RSQUdERUxUQSkge1xuICAgICAgICB0aGlzLl9kcmFnUnVubmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEcmFnQ29weSA9IChlOiBhbnksIF90b3VjaGVzOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pID0+IHtcbiAgICBpZiAodGhpcy5fZHJhZ0NvcHkgPT09IG51bGwgJiYgdGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuX2RyYWdTcmMuc3R5bGUub3BhY2l0eSA9IHRoaXMuX0NPUFlPUEFDSVRZO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkgPSB0aGlzLl9kcmFnU3JjLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9kcmFnU3JjKTtcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUgPSAnJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnNldEF0dHJpYnV0ZSgnZHJhZ2Nsb25lJywgJycpO1xuXG4gICAgICBpZiAodGhpcy5jb3B5U3R5bGVzRHJhZ0Nsb25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3R5bGUgb2YgZWxlbWVudFN0eWxlcykge1xuICAgICAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlW3N0eWxlXSA9IGVsZW1lbnRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsY3VsYXRlRHJhZ0NvcHlQb3NpdGlvbihfdG91Y2hlcyk7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSB0aGlzLl9jb3B5T2Zmc2V0LnkgKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUubGVmdCA9IF90b3VjaGVzLmNsaWVudFggLSB0aGlzLl9jb3B5T2Zmc2V0LnggKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnpJbmRleCA9ICc5OTk5OTknO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weSA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9kcmFnU3JjLCAnZHJhZ3N0YXJ0Jyk7XG4gICAgfVxuXG4gICAgLy8gRHJhZyBpcyBydW5uaW5nLCBtb3ZlIGRyYWcgY29weSBhbmQgZmlyZSBldmVudHNcbiAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl90b3VjaEVuZENhbGxlZCB8fCBfdGhpcy5fZHJhZ0NvcHkgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSBfdGhpcy5fY29weU9mZnNldC55ICsgJ3B4JztcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLmxlZnQgPSBfdG91Y2hlcy5jbGllbnRYIC0gX3RoaXMuX2NvcHlPZmZzZXQueCArICdweCc7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZmluZERyb3BwYWJsZShlKTtcblxuICAgICAgLy8gRmlyZSBkcmFnbGVhdmUgYW5kIGRyYWdlbnRlciBldmVudHMgd2hlbiB0YXJnZXQgaGFzIGNoYW5nZWQgZHVyaW5nIG1vdmVcbiAgICAgIGlmICh0YXJnZXQgIT0gdGhpcy5fbGFzdFRhcmdldCkge1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdlbnRlcicpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2xhc3RUYXJnZXQsICdkcmFnbGVhdmUnKTtcbiAgICAgICAgdGhpcy5fbGFzdFRhcmdldCA9IHRhcmdldDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBjdXJyZW50IGRyb3AgY29udGFpbmVyIGNsYXNzd2lkZSBhdmFpbGFibGUgYW5kIGZpcmUgZHJhZ292ZXIgaWYgaXQncyByZWFsbHkgYSBkcm9wIGNvbnRhaW5lci5cbiAgICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gdGFyZ2V0O1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKSB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdvdmVyJyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hlbmQgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hFbmQoZSkge1xuICAgIHRoaXMuX3RvdWNoRW5kQ2FsbGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5EcmFnID0gZmFsc2U7XG5cbiAgICAvLyBjb25zb2xlLmxvZygxLCBlLnRhcmdldCwgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIpO1xuXG4gICAgLy8gVXNlciBzZWVtcyB0byBjbGlja1xuICAgIC8vIGlmICghdGhpcy5fZHJhZ1J1bm5pbmcgJiYgdGhpcy5faGFuZGxlQ2xpY2spIHtcbiAgICAvLyAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQoZS50YXJnZXQsICdjbGljaycpO1xuICAgIC8vICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5fY3VycmVudERyb3BDb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fY3VycmVudERyb3BDb250YWluZXIsICdkcm9wJyk7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2RyYWdTcmMsICdkcmFnZW5kJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpcmUgZHJhZ0V2ZW50IGV2ZW4gaWYgdGhlaXIgaXMgbm8gZHJvcHBhYmxlLiBBbmQgYXNzaWduIGRyb3BFZmZlY3Qgbm9uZS5cbiAgICAgIC8vIGZvciBvdXIgcHVycG9zZSwgdGhpcyB3aWxsIGJyaW5nIGJhY2sgdGhlIGRyYWcgdG8gaXRzIHN0YXJ0IHBvc2l0aW9uLCBzZWVsIGRyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbi50c1xuICAgICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdkcmFnZW5kJywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgICAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB7IGRyb3BFZmZlY3Q6ICdub25lJyB9O1xuICAgICAgICB0aGlzLl9kcmFnU3JjPy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaGNhbmNlbCBldmVudCBsaXN0ZW5lciwgaW4gY2FzZSBicm93c2VyIHN1cHBvcnRzIHRoaXMuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hDYW5jZWwoZSkge1xuICAgIHRoaXMuX3Jlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbmV4dCBkcm9wcGFibGUgZWxlbWVudCBhdCBjdXJyZW50IHBvaW50LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHRcbiAgICovXG4gIHByaXZhdGUgX2ZpbmREcm9wcGFibGUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludEZyb21Ub3VjaEV2ZW50ID0gdGhpcy5fZ2V0UG9pbnQoZXZlbnQpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRGcm9tUG9pbnQocG9pbnRGcm9tVG91Y2hFdmVudC54LCBwb2ludEZyb21Ub3VjaEV2ZW50LnkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBlbGVtZW50RnJvbVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRWxlbWVudCB7XG4gICAgbGV0IGVsID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHdoaWxlIChlbC5zaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsID0gZWwuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgICAgICBpZiAoY3VzdG9tRWwgPT09IG51bGwgfHwgY3VzdG9tRWwgPT09IGVsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWwgPSBjdXN0b21FbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQb2ludChldmVudCwgcGFnZT8pIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgZXZlbnQgPSBldmVudC50b3VjaGVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgeDogcGFnZSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IHBhZ2UgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG9mZnNldCBmb3IgZGlzcGxheWluZyB0aGUgZHJhZyBjb3B5IHRvIGhhdmUgYSBzZWFtbGVzcyBkcmFnZ2luZy5cbiAgICogQHBhcmFtIHtUb3VjaH0gdG91Y2ggVGhlIGN1cnJlbnQgdG91Y2guXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVEcmFnQ29weVBvc2l0aW9uKHRvdWNoKSB7XG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHRoaXMuX2RyYWdTcmMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5fY29weU9mZnNldC54ID0gdG91Y2guY2xpZW50WCAtIGNsaWVudFJlY3QubGVmdDtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0LnkgPSB0b3VjaC5jbGllbnRZIC0gY2xpZW50UmVjdC50b3A7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcGl4ZWwgZGVsdGEgYmV0d2VlbiBmaXJzdCB0b3VjaCBhbmQgdGhlIGN1cnJlbnQgdG91Y2ggcG9zaXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0b3VjaFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0RGVsdGEodG91Y2gpIHtcbiAgICBjb25zdCB4ID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRoaXMuX3RvdWNoRG93bi54KTtcbiAgICBjb25zdCB5ID0gTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRoaXMuX3RvdWNoRG93bi55KTtcblxuICAgIHJldHVybiB4ICsgeTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGUgVGhlIGV2ZW50J3MgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0ge2Jvb2x9IGJ1YmJsZSBTZXRzIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBidWJibGUuXG4gICAqL1xuICBwcml2YXRlIF9kaXNwYXRjaEV2ZW50KGUsIGV2ZW50VHlwZSwgYnViYmxlID0gdHJ1ZSkge1xuICAgIGlmICghZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnRUeXBlLCB7IGJ1YmJsZXM6IGJ1YmJsZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB0aGlzLl9kYXRhVHJhbnNmZXI7XG4gICAgZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgYWxsIHZhcmlhYmxlcyBhbmQgcHJlcGFyZXMgZm9yIG5ldyBEcmFnIGFuZCBEcm9wLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICB0aGlzLl9kcmFnU3JjLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgIH1cblxuICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fZHJhZ1NyYyA9IG51bGw7XG4gICAgdGhpcy5fZHJhZ0NvcHkgPSBudWxsO1xuICAgIHRoaXMuX2NhbkRyYWcgPSBmYWxzZTtcblxuICAgIHRoaXMuX3RvdWNoQmVnaW4gPSAwO1xuICAgIHRoaXMuX3RvdWNoRG93biA9IG51bGw7XG4gICAgdGhpcy5fbGFzdENsaWNrID0gMDtcbiAgICB0aGlzLl90b3VjaEVuZENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2RhdGFUcmFuc2ZlciA9IHtcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWw7XG4gICAgICB9LFxuICAgICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0eXBlXTtcbiAgICAgIH0sXG4gICAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgICB9O1xuICAgIHRoaXMuX2NvcHlPZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgIHRoaXMuX2xhc3RUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gbnVsbDtcbiAgICB0aGlzLl9oYW5kbGVDbGljayA9IHRydWU7XG4gIH1cblxuICAvLyBwcml2YXRlIF9nZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gIC8vICAgeDogbnVtYmVyO1xuICAvLyAgIHk6IG51bWJlcjtcbiAgLy8gfSB7XG4gIC8vICAgbGV0IF90b3VjaE1vdmU7XG4gIC8vICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gIC8vICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gIC8vICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAvLyAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAvLyAgICAgfTtcbiAgLy8gICB9IGVsc2UgaWYgKFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgLy8gICApIHtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IGUuY2xpZW50WCxcbiAgLy8gICAgICAgeTogZS5jbGllbnRZXG4gIC8vICAgICB9O1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgLy8gfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5kZWNsYXJlIGNsYXNzIERyb3BwYWJsZXNJbnRlcmZhY2Uge31cblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBEcm9wcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc0luU2hhZG93Um9vdDogYm9vbGVhbixcbiAgZHJvcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBEcm9wcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcblxuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmRyYWdvdmVySGFuZGxlciA9IHRoaXMuZHJhZ292ZXJIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIgPSB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZHJhZ2VudGVySGFuZGxlciA9IHRoaXMuZHJhZ2VudGVySGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICB0aGlzLmRyb3BIYW5kbGVyID0gdGhpcy5kcm9wSGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICBkcm9wcGFibGVzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgdGhpcy5kcmFnbGVhdmVIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLmF0dGFjaEhhbmRsZXIoZCk7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZHJvcHBhYmxlIG9mIGRyb3BwYWJsZXMpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7XG4gICAgICAgICAgbXV0YXRpb25zLmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJykge1xuICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IG11dGF0aW9uLmF0dHJpYnV0ZU5hbWU7XG4gICAgICAgICAgICAgIHN3aXRjaCAocHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkaXNhYmxlZCc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gZHJvcHBhYmxlLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hIYW5kbGVyKGRyb3BwYWJsZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRyb3BwYWJsZSwge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUgLy9jb25maWd1cmUgaXQgdG8gbGlzdGVuIHRvIGF0dHJpYnV0ZSBjaGFuZ2VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoSGFuZGxlcihkcm9wcGFibGU6IEVsZW1lbnQpIHtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmRyYWdlbnRlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlOiBFbGVtZW50KSB7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdvdmVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcy5kcmFnZW50ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5kcm9wSGFuZGxlcik7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIGRyYWdlbnRlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBkcmFnb3ZlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykgKyAnIGFjdGl2ZScpIDpcbiAgICAgIGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ2FjdGl2ZScsICcnKTtcblxuICAgICAgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcm9wSGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIC8vIHBrOiBkcmFnZ2FibGVzIGluIGxpZ2h0IGRvbSBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3dkb20sIHRoaXMgaXMgb25lIG9mIHRoZSBydWxlcyBvZiB3ZWJjb21wb25lbnRzLlxuICAgICAgLy8gVGhleSBtYXkgbm90IGNyZWF0ZSBuZXcgZWxlbWVudHMgaW4gbGlnaHQgZG9tLiBTb21lIHNvbWV0aW1lc3MgZHJvcCB6b25lcyBzaG91bGQgYmUgZ2VuZXJhdGVkXG4gICAgICAvLyBieSB0aGUgd2ViY29tcG9uZW50LiBUaGVuIGEgZHJhZ2dhYmxlICggd2hpY2ggaXMgYWx3YXlzIGFscmVhZHkgY3JlYXRlZCBieSBhIHdlYmNvbXBvbmVudCApXG4gICAgICAvLyBjYW4gYmUgaW4gbGlnaHQgZG9tLCBlbiBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3cgZG9tLlxuICAgICAgLy8gdGhpbmtpbmcgb2YgYW5vdGhlciB3YXkgd2hlcmUgd2UganVzdCBjaGFuZ2Ugc2xvdHMuIE1heWJlIHRoYXRzIGJldHRlci4uXG4gICAgICBjb25zdCBkcmFnZ2FibGVJbkxpZ2h0RG9tID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG4gICAgICBjb25zdCBkcmFnZ2FibGUgPSBkcmFnZ2FibGVJbkxpZ2h0RG9tXG4gICAgICAgID8gZHJhZ2dhYmxlSW5MaWdodERvbVxuICAgICAgICA6IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG5cbiAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyb3BwYWJsZSwgdGFyZ2V0OiAke2V2LnRhcmdldCA/IEpTT04uc3RyaW5naWZ5KGV2LnRhcmdldCkgOiAnbnVsbCd9YCk7XG4gICAgICB9IGVsc2UgaWYgKGRyYWdnYWJsZS5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpICE9PSBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpIHtcbiAgICAgICAgZHJvcHBhYmxlLmFwcGVuZENoaWxkKGRyYWdnYWJsZSk7XG4gICAgICB9XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykucmVwbGFjZSgnYWN0aXZlJywgJycpLnRyaW0oKSkgOlxuICAgICAgZHJvcHBhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnYWN0aXZlJyk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcmFnbGVhdmVIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlQXR0cmlidXRlKCdhY3RpdmUnKTtcbiAgICAgIGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBEcm9wcGFibGVzRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxEcm9wcGFibGVzSW50ZXJmYWNlPiAmIFQ7XG59O1xuIiwgIi8vIFRISVMgSVMgQSBNSVhJTiwgVEhJUyBJUyBBIE1JWElOXG4vLyBVU0UgTElLRSBUSElTXG4vLyBgYGBjbGFzcyBEcm9wTGlzdCBleHRlbmRzIEZsaXBwYWJsZXMoTGl0RWxlbWVudCkge2BgYFxuLy8gbWl4aW4gd2hpY2ggYW5pbWF0ZXMgY2hpbGRyZW4gd2l0aCBGTElQXG4vLyBhIGNvbWJpbmF0aW9uIGJldHdlZW4gdGhpcyBkaXJlY3RpdmU6XG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuLy8gYW5kIGEgdHV0b3JpYWwgaG93IHRvIG1ha2UgYSBtaXhpblxuLy8gaHR0cHM6Ly9saXQuZGV2L2RvY3MvY29tcG9zaXRpb24vbWl4aW5zL1xuXG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEZsaXBwYWJsZXNJbnRlcmZhY2Uge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xufVxuXG4vLyBqdXN0IGEgY29udmVyc2lvbiBvZiBhIGFuZ3VsYXIgRkxJUCBkaXJlY3RpdmUsIG1hZGUgYXMgYSBNaXhpblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBGbGlwcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc1NlbDogc3RyaW5nLFxuICBkcmFnZ2FibGVzU2VsOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBGbGlwcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIC8vIHByaXZhdGUgc3RhdGUgPSBuZXcgTWFwPEVsZW1lbnQsIGFueT4oKTtcbiAgICAvLyBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICAgIC8vIGZsaXBwYWJsZXNTZWxlY3Rvcjogc3RyaW5nO1xuICAgIC8vIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpIHtcbiAgICAvLyAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7IC8vIHBrOiB0aGlzIGlzIHRoZSBrZXkgdG8gY2FsY3VsYXRlIGNvcnJlY3QgcHJvcG9ydGlvbnNcbiAgICAvLyAgIGNvbnN0IGRyYWdnYWJsZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChkcmFnZ2FibGVzU2VsKSk7XG4gICAgLy8gICBkcmFnZ2FibGVzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5hbmltYXRlTWUpO1xuICAgIC8vICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWwpKTtcbiAgICAvLyAgIGRyb3BwYWJsZXMuZm9yRWFjaCgoZHJhZ2dhYmxlKSA9PiB7XG4gICAgLy8gICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkcmFnZ2FibGUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgLy8gICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAvLyB9XG4gICAgLy8gcHJpdmF0ZSBhbmltYXRlTWUgPSAoKSA9PiB7XG4gICAgLy8gICB0aGlzLnN0YXRlLmZvckVhY2goKHZhbHVlLCBlbGVtKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vICAgICBpZiAodGhpcy5zdGF0ZS5nZXQoZWxlbSkgPT0gbnVsbCkge1xuICAgIC8vICAgICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGNhY2hlID0gdGhpcy5zdGF0ZS5nZXQoZWxlbSk7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWCA9IGNhY2hlLmxlZnQgLSBsZWZ0O1xuICAgIC8vICAgICBjb25zdCBkZWx0YVkgPSBjYWNoZS50b3AgLSB0b3A7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhVyA9IGNhY2hlLndpZHRoIC8gd2lkdGg7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhSCA9IGNhY2hlLmhlaWdodCAvIGhlaWdodDtcbiAgICAvLyAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICAgIGNvbnN0IHsgZHVyYXRpb24sIGVhc2luZyB9ID0geyBkdXJhdGlvbjogMzUwLCBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpJyB9O1xuICAgIC8vICAgICBlbGVtLmFuaW1hdGUoXG4gICAgLy8gICAgICAgW1xuICAgIC8vICAgICAgICAge1xuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybTogYFxuICAgIC8vIHRyYW5zbGF0ZSgke2RlbHRhWH1weCwgJHtkZWx0YVl9cHgpXG4gICAgLy8gc2NhbGUoJHtkZWx0YVd9LCAke2RlbHRhSH0pXG4gICAgLy8gYCxcbiAgICAvLyAgICAgICAgICAgLy8gd2lkdGg6IGNhY2hlLndpZHRoLFxuICAgIC8vICAgICAgICAgICAvLyBoZWlnaHQ6IGNhY2hlLmhlaWdodCsgJ3B4JyxcbiAgICAvLyAgICAgICAgICAgLy8gb3BhY2l0eTogY2FjaGUub3BhY2l0eSxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtOiAnbm9uZScsXG4gICAgLy8gICAgICAgICB9LFxuICAgIC8vICAgICAgIF0sXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgZHVyYXRpb24sXG4gICAgLy8gICAgICAgICBlYXNpbmcsXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICApO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfTtcbiAgICAvLyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvLyAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyB9XG4gIH1cbiAgcmV0dXJuIEZsaXBwYWJsZXNFbGVtZW50IGFzIENvbnN0cnVjdG9yPEZsaXBwYWJsZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBEcm9wcGFibGVzTWl4aW4gfSBmcm9tICcuL2Ryb3BwYWJsZXMtbWl4aW4nO1xuaW1wb3J0IHsgRmxpcHBhYmxlc01peGluIH0gZnJvbSAnLi9mbGlwcGFibGVzLW1peGluJztcbmltcG9ydCB7IElJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IFRvdWNoRHJhZ0FuZERyb3AgfSBmcm9tICcuL2RyYWctZHJvcC1hcGknO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgbGl2ZVF1ZXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9saXZlLXF1ZXJ5Jztcbi8vIGtleWJvYXJkIG5hdmlnYXRhYmxlIGRyYWcgZHJvcDogaHR0cHM6Ly9jb2RlcGVuLmlvL1NpdGVQb2ludC9wZW4vdkV6WGJqXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTI0MjE5Ni90eXBlc2NyaXB0LWFsbG93cy10by11c2UtcHJvcGVyLW11bHRpcGxlLWluaGVyaXRhbmNlLXdpdGgtbWl4aW5zLWJ1dC1mYWlscy10by1jXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3NzQ0I2lzc3VlY29tbWVudC01NTg5OTAzODFcbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5pbnRlcmZhY2UgSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uIHtcbiAgY29weVN0eWxlc0RyYWdDbG9uZTogYm9vbGVhbjtcbiAgZHJhZ0NhbkJlUGxhY2VkQmFjazogYm9vbGVhbjtcbiAgZHJhZ09uQ2xpY2s6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJhZ2dhYmxlc1NlbGVjdG9yOiBzdHJpbmcsXG4gIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3Q6IGJvb2xlYW4sXG4gIGRyb3BwYWJsZXNTZWxlY3Rvcjogc3RyaW5nXG4pID0+IHtcbiAgY2xhc3MgRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQgZXh0ZW5kcyBGbGlwcGFibGVzTWl4aW4oXG4gICAgRHJvcHBhYmxlc01peGluKHN1cGVyQ2xhc3MsIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3QsIGRyb3BwYWJsZXNTZWxlY3RvciksXG4gICAgZHJvcHBhYmxlc1NlbGVjdG9yLFxuICAgIGRyYWdnYWJsZXNTZWxlY3RvclxuICApIHtcbiAgICBwcm90ZWN0ZWQgZHJhZ2dhYmxlcyA9IG5ldyBNYXA8RWxlbWVudCwgeyBwYXJlbnQ6IEVsZW1lbnQ7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgICBwcm90ZWN0ZWQgZHJvcHBhYmxlczogRWxlbWVudFtdO1xuICAgIGRyYWdEcm9wQXBpOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gICAgQGxpdmVRdWVyeShkcmFnZ2FibGVzU2VsZWN0b3IpXG4gICAgcmVJbml0RHJhZ0FuZERyb3AoZHJhZ3NBZGRlZDogRWxlbWVudFtdLCBkcmFnc1JlbW92ZWQ6IEVsZW1lbnRbXSkge1xuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIC8vIGNoZWNrIGlmIGFkZGVkIGVsZW1lbnRzIGFyZSBub3QgYWxyZWFkeSBpbiBsaXN0XG4gICAgICBjb25zdCBkcmFnZ2FibGVzID0gZHJhZ3NBZGRlZC5maWx0ZXIoZCA9PiAhdGhpcy5kcmFnZ2FibGVzIHx8ICF0aGlzLmRyYWdnYWJsZXMuZ2V0KGQpKTtcblxuICAgICAgaWYgKGRyYWdnYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wQXBpLmFkZERyYWdnYWJsZXMoZHJhZ3NBZGRlZCk7XG5cbiAgICAgICAgZHJhZ3NBZGRlZC5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgIC8vIHN0b3JlIGluaXRpYWwgcG9zaXRpb25zIG9mIGVsZW1lbnRzLCBhbmQgb2Zjb3Vyc2UsIGp1c3QgdGhlIGVsZW1lbnRzIGZvciBsb29waW5nIGFuZCBzdWNoXG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVzLnNldChlbGVtLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IGVsZW0ucGFyZW50RWxlbWVudCxcbiAgICAgICAgICAgIGluZGV4OiBBcnJheS5mcm9tKGVsZW0ucGFyZW50Tm9kZS5jaGlsZHJlbikuaW5kZXhPZihlbGVtKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChldjogYW55KSA9PiB7XG4gICAgICAgICAgICBldi5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsIGV2LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKGBpZGVudGlmaWVyYCkpO1xuICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2RyYWdnaW5nJywgJycpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgKGV2OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnb3ZlcicpO1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoJ2RyYWdnaW5nJyk7XG5cbiAgICAgICAgICAgIC8vIHBrOiBpZiBub3QgZHJvcHBlZCBvbiBhIGRyb3AgbG9jYXRpb24gcHV0IGl0IGJhY2sgd2hlcmUgaXQgYmVsb25nc1xuICAgICAgICAgICAgaWYgKGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSAnbm9uZScgfHwgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmRyYWdDYW5CZVBsYWNlZEJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnZ2FibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5kcmFnZ2FibGVzLmdldChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLmluZGV4IDwgcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IHBvc2l0aW9uLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIDogcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBwb3NpdGlvbi5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2FwVGV4dCA9IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbltpbmRleF07XG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uaW5zZXJ0QmVmb3JlKGRyYWdnYWJsZSwgZ2FwVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSAnbW92ZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSkgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcgPSAnJztcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UsIHR5cGU6IE9iamVjdCB9KSBjb25maWd1cmF0aW9uOiBJbnRlcmFjdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBjb3B5U3R5bGVzRHJhZ0Nsb25lOiB0cnVlLFxuICAgICAgZHJhZ0NhbkJlUGxhY2VkQmFjazogdHJ1ZSxcbiAgICAgIGRyYWdPbkNsaWNrOiBmYWxzZVxuICAgIH07XG4gICAgQHdhdGNoKCdjb25maWd1cmF0aW9uJylcbiAgICBoYW5kbGVEcmFnT3B0aW9uc0NoYW5nZWQob2xkLCBkcmFnT3B0aW9ucykge1xuICAgICAgdGhpcy5kcmFnRHJvcEFwaS5jb3B5U3R5bGVzRHJhZ0Nsb25lID0gZHJhZ09wdGlvbnMuY29weVN0eWxlc0RyYWdDbG9uZTtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuZHJhZ09uQ2xpY2sgPSBkcmFnT3B0aW9ucy5kcmFnT25DbGljaztcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgICBoYW5kbGVEaXNhYmxlZENoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocywgY2gpID0+IHtcbiAgICAgICAgZGlzYWJsZWQgPyBjaC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogY2gucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICBkaXNhYmxlZCA/IGNoLnJlbW92ZUF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScpIDogY2guc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIGhhbmRsZVJlYWRvbmx5Q2hhbmdlKG9sZCwgcmVhZG9ubHk6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuZHJhZ2dhYmxlcy5mb3JFYWNoKChzLCBjaCkgPT4ge1xuICAgICAgICByZWFkb25seSA/IGNoLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJykgOiBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5Jyk7XG4gICAgICAgIHJlYWRvbmx5ID8gY2gucmVtb3ZlQXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJykgOiBjaC5zZXRBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnLCAndHJ1ZScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlLCBhdHRyaWJ1dGU6ICdtaW4tYXNzb2NpYXRpb25zJyB9KSBtaW5Bc3NvY2lhdGlvbnMgPSAxO1xuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAnbWF4LWFzc29jaWF0aW9ucycgfSkgbWF4QXNzb2NpYXRpb25zID0gMTtcblxuICAgIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuICAgICAgdGhpcy5kcm9wcGFibGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgICAgID8gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgICAgIDogdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICk7XG4gICAgICAvLyBQSzogTWF5YmUgbGF0ZXIsIGZvciBub3cgd2UgYXNzdW1lIGRyb3BwYWJsZXMgYXJlIG5vdCBkeW5hbWljbHkgYWRkZWQgb3IgcmVtb3ZlZFxuICAgICAgLy8gLmZpbHRlcigoZWxlbSkgPT4gIXRoaXMuZHJvcHBhYmxlcyB8fCAhdGhpcy5kcm9wcGFibGVzLmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgIC8vIHRoaXMuZHJvcHBhYmxlcyA9IHRoaXMuZHJvcHBhYmxlcyA/IHRoaXMuZHJvcHBhYmxlcy5jb25jYXQobmV3RHJvcHBhYmxlcykgOiBuZXdEcm9wcGFibGVzO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgICAgdGhpcy5kcmFnRHJvcEFwaSA9IG5ldyBUb3VjaERyYWdBbmREcm9wKCk7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50PERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50PigncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc2V0KHNhdmUgPSB0cnVlKTogdm9pZCB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocG9zaXRpb24sIGRyYWdnYWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwb3NpdGlvbi5pbmRleCA8IGNoaWxkcmVuLmxlbmd0aCA/IHBvc2l0aW9uLmluZGV4IDogY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBwb3NpdGlvbi5wYXJlbnQuaW5zZXJ0QmVmb3JlKGRyYWdnYWJsZSwgY2hpbGRyZW5baW5kZXhdKTtcbiAgICAgIH0pO1xuICAgICAgc2F2ZSAmJiB0aGlzLnNhdmVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCkge1xuICAgICAgdGhpcy5kcm9wcGFibGVzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGNvbnN0IG1heE1hdGNoID0gKyhkLmdldEF0dHJpYnV0ZSgnbWF0Y2gtbWF4JykgfHwgMSk7XG4gICAgICAgIC8vIGNvbnN0IG1heE1pbiA9ICsoZC5nZXRBdHRyaWJ1dGUoJ21hdGNoLW1pbicpIHx8IDApO1xuICAgICAgICBjb25zdCBkaXNhYmxlID0gbWF4TWF0Y2ggPD0gKGQuY2hpbGRyZW4ubGVuZ3RoIHx8IDApO1xuICAgICAgICBkaXNhYmxlID8gZC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIGRpc2FibGUgPyBkLnJlbW92ZUF0dHJpYnV0ZSgnZHJvcHpvbmUnKSA6IGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgcmVzcG9uc2UocmVzcG9uc2U6IHN0cmluZ1tdKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgcmVzcG9uc2UuZm9yRWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgY29uc3QgW2Ryb3BJZCwgLi4uZHJhZ0lkc10gPSByZXNwb25zZS5zcGxpdCgnICcpLnJldmVyc2UoKTtcbiAgICAgICAgICBpZiAoZHJvcElkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wcGFibGUgPSB0aGlzLmRyb3BwYWJsZXMuZmluZChkcm9wID0+IGRyb3AuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGRyb3BJZCk7XG4gICAgICAgICAgICBkcmFnSWRzLmZvckVhY2goZHJhZ0lkID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2RyYWdJZH1dYCk7XG4gICAgICAgICAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlIHdpdGggaWRlbnRpZmllcjogJHtkcm9wSWR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyYWdnYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJhZ0lkfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRyb3BwYWJsZS5hcHBlbmRDaGlsZChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgPyBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpXG4gICAgICAgIDogQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKSk7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBkcm9wcGFibGVzLmZpbHRlcihkID0+IGQuY2hpbGRFbGVtZW50Q291bnQgPiAwKS5sZW5ndGg7XG4gICAgICByZXR1cm4gdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gMCB8fCB0aGlzLm1pbkFzc29jaWF0aW9ucyA8PSBhc3NvY2lhdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNhdmVSZXNwb25zZSgpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kcm9wcGFibGVzLm1hcChkcm9wcGFibGUgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2VTdHJpbmcgPSAnJztcbiAgICAgICAgaWYgKGRyb3BwYWJsZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3BvbnNlU3RyaW5nICs9XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRyb3BwYWJsZS5jaGlsZHJlbilcbiAgICAgICAgICAgICAgLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpXG4gICAgICAgICAgICAgIC5qb2luKCcgJykgKyBgIGA7XG4gICAgICAgIH1cbiAgICAgICAgcmVzcG9uc2VTdHJpbmcgKz0gZHJvcHBhYmxlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VTdHJpbmc7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IGFzIENvbnN0cnVjdG9yPElJbnRlcmFjdGlvbj4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5AY3VzdG9tRWxlbWVudCgncXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY291bnQtYXR0ZW1wdCcgfSlcbiAgcHVibGljIGNvdW50QXR0ZW1wdDogc3RyaW5nID0gJ3RydWUnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwdWJsaWMgdGl0bGU6ICdlbmQgYXR0ZW1wdCc7XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8YnV0dG9uID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9IHBhcnQ9XCJidXR0b25cIiBAY2xpY2s9JHt0aGlzLmVuZEF0dGVtcHR9PiR7dGhpcy50aXRsZX08L2J1dHRvbj5gO1xuICB9XG4gIHB1YmxpYyBlbmRBdHRlbXB0KGU6IEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdlbmQtYXR0ZW1wdCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLCBjb3VudEF0dGVtcHQ6IHRoaXMuY291bnRBdHRlbXB0ID09PSAndHJ1ZScgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbic6IFF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHYXBNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKExpdEVsZW1lbnQsICdxdGktZ2FwLXRleHQnLCBmYWxzZSwgJ3F0aS1nYXAnKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgICBbcGFydD0nZHJhZ3MnXSxcbiAgICAgIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IHBhcnQ9XCJkcmFnc1wiIG5hbWU9XCJxdGktZ2FwLXRleHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdCBwYXJ0PVwiZHJvcHNcIj48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJzogUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIGxpdC9uby1pbnZhbGlkLWh0bWwgKi9cbmltcG9ydCB7IGNzcywgaHRtbCwgc3ZnIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHF1ZXJ5LCBxdWVyeUFzc2lnbmVkRWxlbWVudHMsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQuanMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY0Fzc29jaWF0ZUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcbiAgaG90c3BvdHM7XG4gIHN0YXJ0UG9pbnQgPSBudWxsO1xuICBlbmRQb2ludCA9IG51bGw7XG4gIEBzdGF0ZSgpIF9saW5lcyA9IFtdO1xuICBAc3RhdGUoKSBzdGFydENvb3JkOiB7IHg6IGFueTsgeTogYW55IH07XG4gIEBzdGF0ZSgpIG1vdXNlQ29vcmQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgQHF1ZXJ5KCdzdmcnKSBzdmdDb250YWluZXI7XG4gIEBxdWVyeUFzc2lnbmVkRWxlbWVudHMoeyBzZWxlY3RvcjogJ2ltZycgfSkgZ3JJbWFnZTtcblxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIC8vIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQocXRpLWFzc29jaWFibGUtaG90c3BvdCkge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIH1cbiAgICAgIGxpbmUtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICAgIHN2ZyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwcHg7XG4gICAgICAgIGxlZnQ6IDBweDtcbiAgICAgIH1cbiAgICBgXG4gIF07XG4gIHN2ZzogU1ZHU1ZHRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbGluZXMgPSBbXTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RoID4gMDtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHRoaXMuX2xpbmVzID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPGxpbmUtY29udGFpbmVyPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgd2lkdGg9JHtpZkRlZmluZWQodGhpcy5nckltYWdlWzBdPy53aWR0aCl9XG4gICAgICAgICAgaGVpZ2h0PSR7aWZEZWZpbmVkKHRoaXMuZ3JJbWFnZVswXT8uaGVpZ2h0KX1cbiAgICAgICAgICB2aWV3Ym94PVwiMCAwICR7dGhpcy5nckltYWdlWzBdPy53aWR0aH0gJHt0aGlzLmdySW1hZ2VbMF0/LmhlaWdodH1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgICB0aGlzLl9saW5lcyxcbiAgICAgICAgICAgIGxpbmUgPT4gbGluZSxcbiAgICAgICAgICAgIChsaW5lLCBpbmRleCkgPT4gc3ZnYFxuICAgICAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgICAgIHBhcnQ9XCJsaW5lXCJcbiAgICAgICAgICAgICAgICB4MT0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMF0gKyAnXScpLnN0eWxlLmxlZnQpfVxuICAgICAgICAgICAgICAgIHkxPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVswXSArICddJykuc3R5bGUudG9wKX1cbiAgICAgICAgICAgICAgICB4Mj0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMV0gKyAnXScpLnN0eWxlLmxlZnQpfVxuICAgICAgICAgICAgICAgIHkyPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVsxXSArICddJykuc3R5bGUudG9wKX1cbiAgICAgICAgICAgICAgICBzdHJva2U9XCJyZWRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgIEBjbGljaz0keyhlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzID0gdGhpcy5fbGluZXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9saW5lcyk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICApfVxuICAgICAgICAgICR7dGhpcy5zdGFydFBvaW50ICYmXG4gICAgICAgICAgc3ZnYDxsaW5lXG4gICAgICAgICAgICBwYXJ0PVwicG9pbnRcIlxuICAgICAgICAgICAgeDE9JHt0aGlzLnN0YXJ0Q29vcmQueH1cbiAgICAgICAgICAgIHkxPSR7dGhpcy5zdGFydENvb3JkLnl9XG4gICAgICAgICAgICB4Mj0ke3RoaXMubW91c2VDb29yZC54fVxuICAgICAgICAgICAgeTI9JHt0aGlzLm1vdXNlQ29vcmQueX1cbiAgICAgICAgICAgIHN0cm9rZT1cInJlZFwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAvPmB9XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8L2xpbmUtY29udGFpbmVyPmA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuICAgIHBvc2l0aW9uSG90c3BvdHMoc2hhcGUsIGNvb3Jkc051bWJlciwgaW1nLCBob3RzcG90KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChlKTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGUpO1xuXG4gICAgdGhpcy5ob3RzcG90cyA9IHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWFzc29jaWFibGUtaG90c3BvdCcpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5tb3VzZUNvb3JkID0ge1xuICAgICAgICB4OiBldmVudC5jbGllbnRYIC0gdGhpcy5nckltYWdlWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSB0aGlzLmdySW1hZ2VbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5ob3RzcG90cy5mb3JFYWNoKGhvdHNwb3QgPT4ge1xuICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMF0gKyAncHgnO1xuICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVsxXSArICdweCc7XG5cbiAgICAgIGhvdHNwb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydFBvaW50KSB7XG4gICAgICAgICAgdGhpcy5zdGFydFBvaW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgdGhpcy5zdGFydENvb3JkID0ge1xuICAgICAgICAgICAgeDogdGhpcy5zdGFydFBvaW50LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVswXSxcbiAgICAgICAgICAgIHk6IHRoaXMuc3RhcnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMV1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuZFBvaW50KSB7XG4gICAgICAgICAgdGhpcy5lbmRQb2ludCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgIHRoaXMuX2xpbmVzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5fbGluZXMsXG4gICAgICAgICAgICB0aGlzLnN0YXJ0UG9pbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgKyAnICcgKyB0aGlzLmVuZFBvaW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9saW5lcyk7XG4gICAgICAgICAgdGhpcy5zdGFydFBvaW50ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmVuZFBvaW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nOiBRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uSG90c3BvdHMoXG4gIHNoYXBlOiBzdHJpbmcsXG4gIGNvb3Jkc051bWJlcjogbnVtYmVyW10sXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgaG90c3BvdDogUXRpSG90c3BvdENob2ljZVxuKSB7XG4gIHN3aXRjaCAoc2hhcGUpIHtcbiAgICBjYXNlICdjaXJjbGUnOlxuICAgICAge1xuICAgICAgICBjb25zdCBbY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgY29uc3QgY2VudGVyWFBlciA9IChjZW50ZXJYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgY2VudGVyWVBlciA9IChjZW50ZXJZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJhZGl1c1BlciA9IChyYWRpdXMgLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBjZW50ZXJYUGVyIC0gcmFkaXVzUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGNlbnRlcllQZXIgLSByYWRpdXNQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSBob3RzcG90LnN0eWxlLmhlaWdodCA9IDQgKiByYWRpdXNQZXIgKyAncHgnO1xuICAgICAgICBob3RzcG90LnN0eWxlLmJvcmRlclJhZGl1cyA9IGA5OTk5cHhgO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyZWN0JzpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgW2xlZnRYLCB0b3BZLCByaWdodFgsIGJvdHRvbVldID0gY29vcmRzTnVtYmVyO1xuICAgICAgICBjb25zdCBsZWZ0WFBlciA9IChsZWZ0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHRvcFlQZXIgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBjb25zdCByaWdodFhQZXIgPSAocmlnaHRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgYm90dG9tWVBlciA9IChib3R0b21ZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGxlZnRYUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IHRvcFlQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSByaWdodFhQZXIgLSBsZWZ0WFBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS5oZWlnaHQgPSBib3R0b21ZUGVyIC0gdG9wWVBlciArICclJztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9seSc6XG4gICAgICB7XG4gICAgICAgIC8vIGZyb20gYSxiLGMsZCxlLGYgPT4gW3t4OmEsIHk6Yn0se3g6YywgeTpkfSx7eDplLCB5OmZ9XVxuICAgICAgICBjb25zdCBwb2x5Y29vcmRzID0gY29vcmRzTnVtYmVyLnJlZHVjZSgoYWNjLCBjdXJyZW50VmFsdWUsIGN1cnJlbnRJbmRleCwgcG9seUMpID0+IHtcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbCA9IGFjYy5wb3AoKTtcbiAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IHsgeDogbGFzdFZhbCwgeTogcG9seUNbY3VycmVudEluZGV4XSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MucHVzaChjdXJyZW50VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIGJvdW5kaW5nIGJveCBieSBmaW5kaW5nIHRoZSBtYXggYXggbWluIGNvb3JkaW5hdGVzIG9mIHggYW5kIHlcbiAgICAgICAgY29uc3QgbGVmdFggPSBNYXRoLm1pbiguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC54KSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0WCA9IE1hdGgubWF4KC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LngpKTtcbiAgICAgICAgY29uc3QgdG9wWSA9IE1hdGgubWluKC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LnkpKTtcbiAgICAgICAgY29uc3QgYm90dG9tWSA9IE1hdGgubWF4KC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LnkpKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHJlbGF0aXZlIGRpc3RhbmNlIGNhdXNlIHdlIHdhbnQgdG8gdXNlIHBlcmNlbnRhZ2VzXG4gICAgICAgIGNvbnN0IGxlZnRYUGVyID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgdG9wWVBlciA9ICh0b3BZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJpZ2h0WFBlciA9IChyaWdodFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCBib3R0b21ZUGVyID0gKGJvdHRvbVkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcblxuICAgICAgICAvLyBzZXQgdGhlIGhvdHNwb3Qgb24geCx5IGFuZCBzZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgaW4gcGVyY2VudGFnZXNcbiAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMCArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYUGVyIC0gbGVmdFhQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWVBlciAtIHRvcFlQZXIgKyAnJSc7XG5cbiAgICAgICAgLy8gYWxsIHRoZSBwb2x5Z29uIHBvaW50cyBzaG91bGQgYmUgY29ycmVjdGVkIGNhdXNlZCB0aGV5IGFyZSBmcm9tXG4gICAgICAgIC8vIGltYWdlIDAsMCBwb2ludCwgYW5kIHNob3VsZCBiZSBmcm9tIHRoZSBob3RzcG90IHBvaW50IHdoaWNoIGFscmVhZHlcbiAgICAgICAgLy8gaGFzIGJlZW4gb2Zmc2V0dGVkIGZyb20gdGhlIGltYWdlIGluIHRoZSBwcmV2aW91cyBmZXcgbGluZXMgb2YgY29kZVxuICAgICAgICAvLyBhbHNvIHRoZSBwb2ludHMgaGF2ZSBhIHJlbGF0aXZlIGRpc3RhbmNlIHRvIHRoZSBpbWFnZSwgYnV0IG5vdyBoYXZlXG4gICAgICAgIC8vIHRvIGhhdmUgYSByZWxhdGl2ZSBkaXN0YW5jZSBmcm9tIHRoZSB3aWR0aCBvZiB0aGUgaG90c3BvdFxuICAgICAgICBjb25zdCBwb2x5Z29uRGF0YSA9IHBvbHljb29yZHMubWFwKHBvaW50ID0+ICh7XG4gICAgICAgICAgeDogKChwb2ludC54IC0gbGVmdFgpIC8gKHJpZ2h0WCAtIGxlZnRYKSkgKiAxMDAsXG4gICAgICAgICAgeTogKChwb2ludC55IC0gdG9wWSkgLyAoYm90dG9tWSAtIHRvcFkpKSAqIDEwMFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIGNsaXAgcGF0aCBjb29yZGluYXRlIHN0eWxlIGluIHBlcmNlbnRhZ2VzXG4gICAgICAgIGNvbnN0IHBvbHlEID0gcG9seWdvbkRhdGEubWFwKHAgPT4gTWF0aC5yb3VuZChwLngpICsgJyUgJyArIE1hdGgucm91bmQocC55KSArICclJykuam9pbignLCcpO1xuXG4gICAgICAgIC8vIDUwJSAwJSwgMTAwJSA1MCUsIDUwJSAxMDAlLCAwJSA1MCVcbiAgICAgICAgaG90c3BvdC5zdHlsZS5jbGlwUGF0aCA9IGBwb2x5Z29uKCR7cG9seUR9KWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oXG4gIExpdEVsZW1lbnQsXG4gICdxdGktZ2FwLWltZycsXG4gIGZhbHNlLFxuICAncXRpLWFzc29jaWFibGUtaG90c3BvdCdcbikge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgc2xvdFtuYW1lPSdxdGktZ2FwLWltZyddIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDFyZW07XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3Q+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1nYXAtaW1nXCI+PC9zbG90PmA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgLy8gcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICAgIHN3aXRjaCAoc2hhcGUpIHtcbiAgICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBbY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBjZW50ZXJYIC0gcmFkaXVzICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGNlbnRlclkgLSByYWRpdXMgKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSBob3RzcG90LnN0eWxlLmhlaWdodCA9IDIgKiByYWRpdXMgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IFtsZWZ0WCwgdG9wWSwgcmlnaHRYLCBib3R0b21ZXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBsZWZ0WCArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSB0b3BZICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYIC0gbGVmdFggKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWSAtIHRvcFkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgQ2hvaWNlcyB9IGZyb20gJy4uL2ludGVybmFsL2Nob2ljZXMvY2hvaWNlcyc7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHBvc2l0aW9uSG90c3BvdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90JztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHcmFwaGljT3JkZXJJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcblxuICAvLyBkbyBub3Qgc2VsZWN0ICggaGlnaGxpZ2h0IGJsdWUsIHRoZSBpbWFnZSlcbiAgLy8gdGFyZ2V0IHRoZSBtYWluIHNsb3QgbWFrZSBpdCByZWxhdGl2ZSBhbmQgZml0IHdpdGggdGhlIGNvbnRlblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIHNsb3Q6bm90KFtuYW1lPSdwcm9tcHQnXSkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHF0aS1ob3RzcG90LWNob2ljZSByZWxhdGl2ZSB0byB0aGUgc2xvdCAqL1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50OyAvKiBob3RzcG90cyBub3Qgc3RyZXRjaGluZyBmdXJ0aGVyIGlmIGltYWdlIGlzIGF0IG1heCBzaXplICovXG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIC8qIGltYWdlIG5vdCBzZWxlY3RhYmxlIGFueW1vcmUgKi9cbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHNldEhvdHNwb3RPcmRlcihlOiBDdXN0b21FdmVudDx7IGlkZW50aWZpZXI6IHN0cmluZzsgY2hlY2tlZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuICAgIGNvbnN0IHsgaWRlbnRpZmllciB9ID0gZS5kZXRhaWw7XG5cbiAgICBjb25zdCBob3RzcG90ID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmluZChlbCA9PiBlbC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSA9PT0gaWRlbnRpZmllcikgYXMgUXRpSG90c3BvdENob2ljZTtcblxuICAgIGNvbnN0IG1heFNlbGVjdGlvbiA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoIXRoaXMuY2hvaWNlT3JkZXJpbmcpIHtcbiAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSB0cnVlO1xuICAgICAgaWYgKGhvdHNwb3Qub3JkZXIgPT0gbnVsbCkge1xuICAgICAgICBpZiAoKHRoaXMuX2Nob2ljZUVsZW1lbnRzIGFzIFF0aUhvdHNwb3RDaG9pY2VbXSkuZmlsdGVyKGkgPT4gaS5vcmRlciA+IDApLmxlbmd0aCA+PSBtYXhTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmNob2ljZU9yZGVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuOyAvLyBkb24ndCBkbyBhbnl0aGluZyBpZiB1c2VyIGFscmVhZHkgc2VsZWN0ZWQgNSBpbWFnZXMuXG4gICAgICAgIH1cbiAgICAgICAgaG90c3BvdC5vcmRlciA9ICh0aGlzLl9jaG9pY2VFbGVtZW50cyBhcyBRdGlIb3RzcG90Q2hvaWNlW10pLmZpbHRlcihpID0+ICEhaS5vcmRlcikubGVuZ3RoICsgMTtcbiAgICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAodGhpcy5fY2hvaWNlRWxlbWVudHMgYXMgUXRpSG90c3BvdENob2ljZVtdKS5mb3JFYWNoKGhvdHNwb3QgPT4ge1xuICAgICAgICAgIGlmIChob3RzcG90Lm9yZGVyID4gaG90c3BvdC5vcmRlcikge1xuICAgICAgICAgICAgaG90c3BvdC5vcmRlci0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaG90c3BvdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGhvdHNwb3Qub3JkZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Ib3RzcG90T25SZWdpc3RlcihlOiBDdXN0b21FdmVudDxRdGlIb3RzcG90Q2hvaWNlPik6IHZvaWQge1xuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJykgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBjb25zdCBob3RzcG90ID0gZS50YXJnZXQgYXMgUXRpSG90c3BvdENob2ljZTtcbiAgICBjb25zdCBjb29yZHMgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJyk7XG4gICAgY29uc3Qgc2hhcGUgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnc2hhcGUnKTtcbiAgICBjb25zdCBjb29yZHNOdW1iZXIgPSBjb29yZHMuc3BsaXQoJywnKS5tYXAocyA9PiBwYXJzZUludChzKSk7XG5cbiAgICBwb3NpdGlvbkhvdHNwb3RzKHNoYXBlLCBjb29yZHNOdW1iZXIsIGltZywgaG90c3BvdCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5zZXRIb3RzcG90T3JkZXIpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCcsIHRoaXMuc2V0SG90c3BvdE9yZGVyKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90c3BvdC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSG90c3BvdEludGVyYWN0aW9uIGV4dGVuZHMgQ2hvaWNlcyB7XG4gIC8vIGRvIG5vdCBzZWxlY3QgKCBoaWdobGlnaHQgYmx1ZSwgdGhlIGltYWdlKVxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIC8qIHdpZHRoOjEwMCU7ICovXG4gICAgICB9XG4gICAgYFxuICBdO1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1pbnRlcmFjdGlvbic6IFF0aUhvdHNwb3RJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZUludGVyYWN0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0ICcuLi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcbmltcG9ydCB7IFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UgfSBmcm9tICcuLi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcblxuaW50ZXJmYWNlIENvbHVtbiB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJvdyB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNDaGVja2VkOiBib29sZWFuO1xufVxuXG5AY3VzdG9tRWxlbWVudCgncXRpLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKFxuICBMaXRFbGVtZW50LFxuICAncXRpLXNpbXBsZS1tYXRjaC1zZXQ6Zmlyc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyxcbiAgZmFsc2UsXG4gICdxdGktc2ltcGxlLW1hdGNoLXNldDpsYXN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSdcbikge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW107XG4gIHJvd3M6IFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2VbXTtcbiAgY29sczogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZVtdO1xuXG4gIEBzdGF0ZSgpIHJlc3BvbnNlID0gW107XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSkgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcgPSAnJztcblxuICBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucm93cyA9IEFycmF5LmZyb208UXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZT4oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0OmZpcnN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpXG4gICAgKTtcbiAgICB0aGlzLmNvbHMgPSBBcnJheS5mcm9tPFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2U+KFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLW1hdGNoLXNldDpsYXN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpXG4gICAgKTtcblxuICAgIHRoaXMucmVzcG9uc2UgPSBbXTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSB7XG4gICAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PiA8c2xvdD48L3Nsb3Q+YDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGkpID0+IGh0bWxgPHRoIHBhcnQ9XCJyLWhlYWRlclwiPiR7dW5zYWZlSFRNTChjb2wuaW5uZXJIVE1MKX08L3RoPmApfVxuICAgICAgICA8L3RyPlxuICAgICAgICAke3RoaXMucm93cy5tYXAoXG4gICAgICAgICAgKHJvdywgckluZGV4KSA9PlxuICAgICAgICAgICAgaHRtbGA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBwYXJ0PVwiYy1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwocm93LmlubmVySFRNTCl9PC90ZD5cbiAgICAgICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGNJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYCR7cm93LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpfSAke2NvbC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ke2NvbC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKX1cbiAgICAgICAgICAgICAgICAgICAgLmNoZWNrZWQ9JHt0aGlzLnJlc3BvbnNlLmluY2x1ZGVzKHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0ke2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrYm94ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZSA9IHRoaXMucmVzcG9uc2UuZmlsdGVyKHYgPT4gdiAhPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8UmVzcG9uc2VJbnRlcmFjdGlvbj4oJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogdGhpcy5yZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6IHRoaXMucmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gXG4gICAgICAgICl9XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1hdGNoLWludGVyYWN0aW9uJzogUXRpTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuLy8gdHNsaW50OmRpc2FibGU6IGluZGVudFxuZXhwb3J0IGNsYXNzIFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiB0aGUgYXNzb2NpYXRlIGludGVyYWN0aW9uIHRoZXJlIGlzIGEgc3BlY2lhbCBzbG90IGZvciB0aGVzZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlc1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGFydCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gIH1cblxuICAvLyBwazogVGhpcyBuZWVkcyBzb21lIGV4cGxhbmF0aW9uXG4gIC8vIGluIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiwgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyB1c2VkIHRvIGRlbm90ZSB0aGVcbiAgLy8gZHJhZ2dhYmxlLCBidXQgYWxzbyB0aGUgZHJvcHBhYmxlLiBXRUlSRC4uIGJ1dCBsZXRzIGRlYWwgd2l0aCBpdC5cbiAgLy8gU28gd2UgaGF2ZSBhIHNsb3QgZm9yIHdoZW5ldmVyIGFub3RoZXIgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyBkcm9wcGVkIGluIGhlcmUuXG4gIC8vIEFuZCB3ZSBoYXZlIHNsb3QgZm9yIGNvbnRlbnQgbGlrZSBpbiB0aGlzIGFzc29jaWF0ZSBpbnRlcmFjdGlvblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZVwiPjwvc2xvdD5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpTWVkaWFJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgdmFsdWUgPSAwO1xuICByZXNldCgpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uSW50ZXJhY3Rpb24ucHJvcGVydGllcyxcbiAgICAgIC4uLntcbiAgICAgICAgc3RlcDoge1xuICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdzdGVwJyxcbiAgICAgICAgICBkZWZhdWx0OiAxMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbY3NzYGBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gZ2V0IGF1ZGlvLCB2aWRlbyBvZiBvYmplY3QgdGFnLlxuICAgIGNvbnN0IG1lZGlhT2JqZWN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdhdWRpbycpIHx8IHRoaXMucXVlcnlTZWxlY3RvcigndmlkZW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ29iamVjdCcpO1xuICAgIGlmIChtZWRpYU9iamVjdCkge1xuICAgICAgLy8gbGlzdGVuIHRvIGVuZGVkIGV2ZW50XG4gICAgICBtZWRpYU9iamVjdC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsICgpID0+IHtcbiAgICAgICAgLy8gc2V0IHZhbHVlIHRvIDBcbiAgICAgICAgdGhpcy52YWx1ZSsrO1xuICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbic6IFF0aU1lZGlhSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1vcmRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpT3JkZXJJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihMaXRFbGVtZW50LCBgcXRpLXNpbXBsZS1jaG9pY2VgLCB0cnVlLCAnZHJvcC1saXN0Jykge1xuICBjaGlsZHJlbk1hcDogRWxlbWVudFtdO1xuICBwcml2YXRlIF9jbGFzc05hbWVzOiBzdHJpbmc7XG4gIHByaXZhdGUgX29yaWVudGF0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuXG4gIHB1YmxpYyBzdGF0aWMgbGF5b3V0Q2xhc3MgPSBbJ3F0aS1jaG9pY2VzLXRvcCcsICdxdGktY2hvaWNlcy1ib3R0b20nLCAncXRpLWNob2ljZXMtbGVmdCcsICdxdGktY2hvaWNlcy1yaWdodCddO1xuXG4gIC8qKiBvcmllbnRhdGlvbiBvZiBjaG9pY2VzICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwdWJsaWMgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiAxZnI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IHJvdztcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2Ryb3AtbGlzdCddIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLXRvcCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1sZWZ0KSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLXJpZ2h0KSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPiA8L3Nsb3Q+XG4gICAgICA8ZGl2IHBhcnQ9XCJjb250YWluZXJcIj5cbiAgICAgICAgPHNsb3QgcGFydD1cImRyYWdzXCI+IDwvc2xvdD5cbiAgICAgICAgPGRpdiBwYXJ0PVwiZHJvcHNcIj5cbiAgICAgICAgICAke0FycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWNob2ljZScpKS5tYXAoXG4gICAgICAgICAgICAoXywgaSkgPT4gaHRtbGA8ZHJvcC1saXN0IHBhcnQ9XCJkcm9wLWxpc3RcIiBpZGVudGlmaWVyPVwiZHJvcGxpc3Qke2l9XCI+PC9kcm9wLWxpc3Q+YFxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gSU5GUklOR0VNRU5ULi5cbiAgICAvLyBQSzogaWYgY2hpbGRyZW4gYXJlIGRyb3BwZWQgaW50byBzaGFkb3dkb20sIHN0eWxpbmcgaXMgbG9zdCwgc28gd2UgYWRkIGEgcGFydCBzZWxlY3RvciBvbiBhbGwgY2hpbGRyZW5cbiAgICAvLyBJIHRoZXkgZ2V0IGxvc3QgaW50byBzaGFkb3cgZG9tIGFmdGVyIGRyb3BwZWQsIHRoZXkgY2FuIHN0aWxsIGJlIHN0eWxlZCB2aWEgbGlnaHRkb20gcGFydCBzZWxlY3RvcnNcbiAgICB0aGlzLmNoaWxkcmVuTWFwID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgIHRoaXMuY2hpbGRyZW5NYXAuZm9yRWFjaChlbCA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW9yZGVyLWludGVyYWN0aW9uJzogUXRpT3JkZXJJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBjbGFzcyBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgYFxuICBdO1xufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nLCBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJylcbmV4cG9ydCBjbGFzcyBRdGlQb3NpdGlvbk9iamVjdFN0YWdlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIGNob2ljZU9yZGVyaW5nOiBib29sZWFuO1xuICBzdGFydFg6IGFueTtcbiAgc3RhcnRZOiBhbnk7XG4gIGRyYWdFbGVtZW50OiBhbnk7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyID0gdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciA9IHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICAvLyBEZWZpbmUgYSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG1vdXNlbW92ZSBldmVudCBvbiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgZHJhZ0VsZW1lbnRIYW5kbGVyKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdGhlIG1vdXNlIGhhcyBtb3ZlZCBzaW5jZSB0aGUgbGFzdCBldmVudFxuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcbiAgICBjb25zdCBkZWx0YVkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5zdGFydFk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuZHJhZ0VsZW1lbnQub2Zmc2V0TGVmdCArIGRlbHRhWCArICdweCc7XG4gICAgdGhpcy5kcmFnRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldFRvcCArIGRlbHRhWSArICdweCc7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LmNsaWVudFk7XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoYSk6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChhKTtcblxuICAgIC8vIEdldCB0aGUgZHJhZ2dhYmxlIGFuZCBkcm9wIHpvbmUgZWxlbWVudHNcbiAgICB0aGlzLmRyYWdFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uPmltZycpO1xuICAgIC8vIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmb3IgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuc3RhcnRYID0gMDtcbiAgICB0aGlzLnN0YXJ0WSA9IDA7XG5cbiAgICAvLyBBZGQgYSBtb3VzZWRvd24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gICAgdGhpcy5kcmFnRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIFNhdmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgICAvLyBBZGQgYSBtb3VzZW1vdmUgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZU1vdmVMaXN0ZW5lcihldmVudCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLCB0cnVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZSc6IFF0aVBvc2l0aW9uT2JqZWN0U3RhZ2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzJztcbmltcG9ydCB7IHN0eWxlTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvc3R5bGUtbWFwLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21pbi1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWluQ2hvaWNlczogbnVtYmVyID0gMDtcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF9wb2ludHM6IHN0cmluZ1tdID0gW107XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHBvaW50LWNvbnRhaW5lcj5cbiAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgdGhpcy5fcG9pbnRzLFxuICAgICAgICAgIHBvaW50ID0+IHBvaW50LFxuICAgICAgICAgIChwb2ludCwgaW5kZXgpID0+IGh0bWxgXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHBhcnQ9XCJwb2ludFwiXG4gICAgICAgICAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScsXG4gICAgICAgICAgICAgICAgbGVmdDogYCR7cG9pbnQuc3BsaXQoJyAnKVswXX1weGAsXG4gICAgICAgICAgICAgICAgdG9wOiBgJHtwb2ludC5zcGxpdCgnICcpWzFdfXB4YFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBwb2ludCBhdCAke3BvaW50fVwiXG4gICAgICAgICAgICAgIEBjbGljaz0keyhlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9pbnRzID0gdGhpcy5fcG9pbnRzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX3BvaW50cyk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgYFxuICAgICAgICApfVxuICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8L3BvaW50LWNvbnRhaW5lcj5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgcG9pbnQtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcG9pbnRzID0gW107XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcG9pbnRzLmxlbmd0aCA+PSB0aGlzLm1pbkNob2ljZXMgJiYgdGhpcy5fcG9pbnRzLmxlbmd0aCA8PSB0aGlzLm1heENob2ljZXM7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UodmFsOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIHRoaXMuX3BvaW50cyA9IEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJyk7XG5cbiAgICAvLyBBdHRhY2ggYSBjbGljayBldmVudCBsaXN0ZW5lciB0byB0aGUgaW1hZ2UgZWxlbWVudFxuICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHggPSBldmVudC5vZmZzZXRYO1xuICAgICAgY29uc3QgeSA9IGV2ZW50Lm9mZnNldFk7XG5cbiAgICAgIHRoaXMuX3BvaW50cyA9IFsuLi50aGlzLl9wb2ludHMsIHggKyAnICcgKyB5XTtcbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX3BvaW50cyk7XG4gICAgfSk7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uJzogUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgcXVlcnkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgU2xpZGVySW50ZXJhY3Rpb24uVHlwZSAocXRpLXNsaWRlci1pbnRlcmFjdGlvbikgcHJlc2VudHMgdGhlIGNhbmRpZGF0ZSB3aXRoIGEgY29udHJvbCBmb3Igc2VsZWN0aW5nIGEgbnVtZXJpY2FsIHZhbHVlIGJldHdlZW4gYSBsb3dlciBhbmQgdXBwZXIgYm91bmQuXG4gKiBAZG9jdW1lbnRhdGlvbiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLnM2MXhjcmo0cWN5alxuICogQHN0YXR1cyBzdGFibGVcbiAqIEBzaW5jZSA2LjBcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiB3YW50cyB0byByZWdpc3RlciBpdHNlbGZcbiAqIEBldmVudCBxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UgLSBlbWl0dGVkIHdoZW4gdGhlIGludGVyYWN0aW9uIGNoYW5nZXNcbiAqXG4gKiBAY3NzcHJvcCAtLXNob3ctdmFsdWUgLSBzaG93cyB0aGUgY3VycmVudCB2YWx1ZSB3aGlsZSBzbGlkaW5nXG4gKiBAY3NzcHJvcCAtLXNob3ctdGlja3MgLSBzaG93cyB0aGUgdGlja3MgYWNjb3JkaW5nIHRvIHN0ZXBzXG4gKiBAY3NzcHJvcCAtLXNob3ctYm91bmRzIC0gc2hvd3MgdmFsdWUgZm9yIGxvd2VyIGFuZCB1cHBlciBib3VuZGFyeVxuICpcbiAqIEBjc3NwYXJ0IHNsaWRlciAtLSBzbGlkZXIgaW5sdWRpbmcsIGJvdW5kcyBhbmQgdGlja3MgYW5kIHZhbHVlLCB1c2UgaXQgZm9yIHBhZGRpbmdzIGFuZCBtYXJnaW5zXG4gKiBAY3NzcGFydCBib3VuZHMgLS0gZGl2IGZvciBib3VuZHMsIGNvbnRhaW5pbmcgdHdvIGRpdnMgZm9yIHdpdGggbWluLCBhbmQgbWF4IGJvdW5kcyB2YWx1ZVxuICogQGNzc3BhcnQgdGlja3MgLS0gZGl2IGZvciB0aWNrcywgdXNlIGxpbmVhaXIgZ3JhZGllbnQgYW5kIGV4cG9zZWQgY3NzIHZhcmlhYmxlcyBmb3Igc3R5bGluZ1xuICogQGNzc3BhcnQgcmFpbCAtLSBkaXYgZm9yIHJhaWwsIHN0eWxlIGFjY29yZGluZyB0byBuZWVkc1xuICogQGNzc3BhcnQga25vYiAtLSBkaXYsIHNob3VsZCBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZVxuICogQGNzc3BhcnQgdmFsdWUgLS0gZGl2LCBjb250YWluaW5nIHZhbHVlXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIDxxdGktc2ltcGxlLWNob2ljZT4gbXVzdCBiZSBwbGFjZWQuXG4gKiBAc2xvdCBwcm9tcHQgLSBzbG90IHdoZXJlIHRoZSBwcm9tcHQgaXMgcGxhY2VkLlxuICovXG5cbkBjdXN0b21FbGVtZW50KCdxdGktc2xpZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlTbGlkZXJJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgY3NMaXZlOiBDU1NTdHlsZURlY2xhcmF0aW9uO1xuXG4gIEBxdWVyeSgnI2tub2InKVxuICBwcml2YXRlIF9rbm9iOiBIVE1MRWxlbWVudDtcblxuICBAcXVlcnkoJyNyYWlsJylcbiAgcHJpdmF0ZSBfcmFpbDogSFRNTEVsZW1lbnQ7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyIH0pIHZhbHVlOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnc3RlcC1sYWJlbCcgfSkgc3RlcExhYmVsID0gZmFsc2U7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSByZXZlcnNlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfbWluOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnbG93ZXItYm91bmQnIH0pIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLW1pbicsIGAke3RoaXMuX21pbn1gKTtcbiAgfVxuICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuXG4gIHByaXZhdGUgX21heDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ3VwcGVyLWJvdW5kJyB9KSBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXggPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLW1heCcsIGAke3RoaXMuX21heH1gKTtcbiAgfVxuICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfVxuXG4gIHByaXZhdGUgX3N0ZXA6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdzdGVwJyB9KSBzZXQgc3RlcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RlcCA9IHZhbHVlO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3RlcCcsIGAke3RoaXMuX3N0ZXB9YCk7XG4gIH1cbiAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RlcDtcbiAgfVxuXG4gIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChvbGQsIGRpc2FibGVkKSA9PiB7fTtcblxuICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlUmVhZG9ubHlDaGFuZ2UgPSAob2xkLCByZWFkb25seSkgPT4ge307XG5cbiAgcmVzZXQoKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gc3RhdGljIHNoYWRvd1Jvb3RPcHRpb25zOiBTaGFkb3dSb290SW5pdCA9IHsgLi4uTGl0RWxlbWVudC5zaGFkb3dSb290T3B0aW9ucywgZGVsZWdhdGVzRm9jdXM6IHRydWUsIG1vZGU6ICdvcGVuJyB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLyogdGhlIGNvbXB1dGVkIHN0eWxlIGlzIGEgbGl2ZSBwcm9wZXJ0eSwgd2UgdXNlIHRoaXMgdG8gZ2V0IGNzcyB2YXJpYWJsZXNcbiAgICBzZWUgcmVuZGVyIHRlbXBsYXRlICovXG4gICAgdGhpcy5jc0xpdmUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMpO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKG15UmVzcG9uc2U6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobXlSZXNwb25zZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1F0aVNsaWRlckludGVyYWN0aW9uOiByZXNwb25zZSBpcyBhbiBhcnJheSwgYnV0IHNob3VsZCBiZSBhIHNpbmdsZSB2YWx1ZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KG15UmVzcG9uc2UpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdRdGlTbGlkZXJJbnRlcmFjdGlvbjogcmVzcG9uc2UgaXMgbm90IGEgbnVtYmVyJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbY3NzYGBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICAvLyBjb252ZXJ0IHRoZSB2YWx1ZSwgd2hpY2ggaXMgdGhlIHJlYWwgc2xpZGVyIHZhbHVlIHRvIGEgcGVyY2VudGFnZSBmb3IgdGhlIGRvbS5cbiAgICB0aGlzLnZhbHVlIDwgdGhpcy5taW4gJiYgKHRoaXMudmFsdWUgPSB0aGlzLm1pbik7XG4gICAgdGhpcy52YWx1ZSA+IHRoaXMubWF4ICYmICh0aGlzLnZhbHVlID0gdGhpcy5tYXgpO1xuICAgIGNvbnN0IHZhbHVlUGVyY2VudGFnZSA9ICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSkgKiAxMDA7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS12YWx1ZS1wZXJjZW50YWdlJywgYCR7dmFsdWVQZXJjZW50YWdlfSVgKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPGRpdiBpZD1cInNsaWRlclwiIHBhcnQ9XCJzbGlkZXJcIj5cbiAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctYm91bmRzJykgPT0gJ3RydWUnXG4gICAgICAgICAgPyBodG1sYDxkaXYgaWQ9XCJib3VuZHNcIiBwYXJ0PVwiYm91bmRzXCI+XG4gICAgICAgICAgICAgIDxkaXY+JHt0aGlzLl9taW59PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+JHt0aGlzLl9tYXh9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy10aWNrcycpID09ICd0cnVlJyA/IGh0bWxgPGRpdiBpZD1cInRpY2tzXCIgcGFydD1cInRpY2tzXCI+PC9kaXY+YCA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgaWQ9XCJyYWlsXCIgcGFydD1cInJhaWxcIiBAbW91c2Vkb3duPSR7dGhpcy5fb25Nb3VzZURvd259IEB0b3VjaHN0YXJ0PSR7dGhpcy5fb25Ub3VjaE1vdmV9PlxuICAgICAgICAgIDxkaXYgaWQ9XCJrbm9iXCIgcGFydD1cImtub2JcIj5cbiAgICAgICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LXZhbHVlJykgPT0gJ3RydWUnXG4gICAgICAgICAgICAgID8gaHRtbGA8ZGl2IGlkPVwidmFsdWVcIiBwYXJ0PVwidmFsdWVcIj4ke3RoaXMudmFsdWV9PC9kaXY+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zdGVwID0gMTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3NsaWRlcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCB7IHggfSA9IHRoaXMuZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZXZlbnQpO1xuICAgICAgY29uc3QgZGlmZlggPSB4IC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGhhbmRsZVRvdWNoRW5kKTtcblxuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgaGFuZGxlVG91Y2hNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGhhbmRsZVRvdWNoRW5kKTtcblxuICAgIGNvbnN0IHsgeCB9ID0gdGhpcy5nZXRQb3NpdGlvbkZyb21FdmVudChldmVudCk7XG4gICAgY29uc3QgZGlmZlggPSB4IC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9vbk1vdXNlRG93bihldmVudCkge1xuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgLy8gaWYgdGhlIHF0aS1zbGlkZXItaW50ZXJhY3Rpb24gaGFzIGFuIGFic29sdXRlIGxlZnQgcG9zaXRpb24gYW5kIGJvZHkgaXMgc2Nyb2xsZWQgYSBiaXQsIHRha2UgYWNjb3VudCBmb3IgdGhhdFxuICAgICAgY29uc3QgZGlmZlggPSBldmVudC5wYWdlWCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gICAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlTW91c2VVcCk7XG5cbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXG4gICAgLy8gaWYgdGhlIHF0aS1zbGlkZXItaW50ZXJhY3Rpb24gaGFzIGFuIGFic29sdXRlIGxlZnQgcG9zaXRpb24gYW5kIGJvZHkgaXMgc2Nyb2xsZWQgYSBiaXQsIHRha2UgYWNjb3VudCBmb3IgdGhhdFxuICAgIGNvbnN0IGRpZmZYID0gZXZlbnQucGFnZVggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKiogY2FsY3VsYXRlVmFsdWUgZ2V0cyB4IHBvc2l0aW9uIGFuZCBjb21wYXJlcyB0aGlzIHdpdGggdGhlIHRvdGFsIHdpZHRoIGluIHBpeGVscyAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVZhbHVlKGRpZmZYOiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZU5vdyA9IHRoaXMubWluICsgKCh0aGlzLm1heCAtIHRoaXMubWluKSAqIGRpZmZYKSAvIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3Qgcm91bmRlZFN0ZXBWYWx1ZSA9IHRoaXMubWluICsgTWF0aC5yb3VuZCgodmFsdWVOb3cgLSB0aGlzLm1pbikgLyB0aGlzLl9zdGVwKSAqIHRoaXMuX3N0ZXA7XG4gICAgdGhpcy52YWx1ZSA9IHJvdW5kZWRTdGVwVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aW9uRnJvbUV2ZW50KGU6IGFueSk6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9IHtcbiAgICBsZXQgX3RvdWNoTW92ZTtcbiAgICBpZiAoZS50eXBlID09ICd0b3VjaHN0YXJ0JyB8fCBlLnR5cGUgPT0gJ3RvdWNobW92ZScgfHwgZS50eXBlID09ICd0b3VjaGVuZCcgfHwgZS50eXBlID09ICd0b3VjaGNhbmNlbCcpIHtcbiAgICAgIGNvbnN0IGV2dCA9IHR5cGVvZiBlLm9yaWdpbmFsRXZlbnQgPT09ICd1bmRlZmluZWQnID8gZSA6IGUub3JpZ2luYWxFdmVudDtcbiAgICAgIGNvbnN0IHRvdWNoID0gZXZ0LnRvdWNoZXNbMF0gfHwgZXZ0LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgX3RvdWNoTW92ZSA9IHtcbiAgICAgICAgeDogdG91Y2gucGFnZVgsXG4gICAgICAgIHk6IHRvdWNoLnBhZ2VZXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBlLnR5cGUgPT0gJ21vdXNlZG93bicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2V1cCcgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2Vtb3ZlJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW92ZXInIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlb3V0JyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZWVudGVyJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZWxlYXZlJ1xuICAgICkge1xuICAgICAgX3RvdWNoTW92ZSA9IHtcbiAgICAgICAgeDogZS5jbGllbnRYLFxuICAgICAgICB5OiBlLmNsaWVudFlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfdG91Y2hNb3ZlO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nOiBRdGlTbGlkZXJJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIGl0ZW1Db250ZXh0LFxuICB0eXBlIENhbGN1bGF0ZSxcbiAgdHlwZSBJdGVtQ29udGV4dCxcbiAgdHlwZSBSZXNwb25zZVZhcmlhYmxlXG59IGZyb20gJ0BjaXRvbGFiL3F0aS1jb21wb25lbnRzL3F0aS1jb21wb25lbnRzJztcbmltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuLyoqXG4gKiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLmZpMjlxOGR1Ympnd1xuICogPHF0aS1jdXN0b20tb3BlcmF0b3IgY2xhc3M9XCJqcy5vcmdcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cInN0cmluZ1wiPjwhW0NEQVRBW1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnRleHQudmFyaWFibGVzKTtcbiAgICAgICAgICByZXR1cm4gJ0InXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJykuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIF1dPjwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1jdXN0b20tb3BlcmF0b3I+XG4gICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktY3VzdG9tLW9wZXJhdG9yJylcbmV4cG9ydCBjbGFzcyBRdGlDdXN0b21PcGVyYXRvciBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBDYWxjdWxhdGUge1xuICBwcml2YXRlIG9wZXJhdG9yRnVuY3Rpb246IEZ1bmN0aW9uO1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwcml2YXRlIF9jb250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5oYW5kbGVTbG90Q2hhbmdlfT48L3Nsb3Q+YDtcbiAgfVxuXG4gIGhhbmRsZVNsb3RDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gZXhwZWN0aW5nIDxbIUNEQVRBWyAuLi4gXV0+IGlzIGNvbnZlcnRlZCBpbnRvIDwhLS0gLi4uIC0tPiB3aXRoIHF0aS10cmFuc2Zvcm06IGNEYXRhVG9Db21tZW50XG4gICAgY29uc3QgY29tbWVudE5vZGUgPSBBcnJheS5mcm9tKHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQ/LmNoaWxkTm9kZXMgPz8gW10pLmZpbmQoXG4gICAgICBub2RlID0+IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuQ09NTUVOVF9OT0RFXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGVyYXRvckZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKCdjb250ZXh0JywgJ2ZuJywgJ2l0ZW0nLCBjb21tZW50Tm9kZS50ZXh0Q29udGVudCA/PyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignY3VzdG9tLW9wZXJhdG9yIGNvbnRhaW5zIGludmFsaWQgamF2YXNjcmlwdCBjb2RlJywgZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCBmbiA9IHtcbiAgICAgIHZhcmlhYmxlOiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgIHRoaXMuX2NvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSByZXNwb25zZUlkZW50aWZpZXIpPy52YWx1ZSA/PyAnJyxcbiAgICAgIGNvcnJlY3Q6IChyZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgKHRoaXMuX2NvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSByZXNwb25zZUlkZW50aWZpZXIpIGFzIFJlc3BvbnNlVmFyaWFibGUpXG4gICAgICAgICAgPy5jb3JyZWN0UmVzcG9uc2UgPz8gJydcbiAgICB9O1xuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICBnZXRWYXJpYWJsZTogKHZhcmlhYmxlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgIHVwZGF0ZU91dGNvbWVWYXJpYWJsZTogKG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgb3V0Y29tZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yRnVuY3Rpb24odGhpcy5fY29udGV4dCwgZm4sIGl0ZW0pO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jdXN0b20tb3BlcmF0b3InOiBRdGlDdXN0b21PcGVyYXRvcjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWFzc29jaWFibGUtaG90c3BvdCcpXG5leHBvcnQgY2xhc3MgUXRpQXNzb2NpYWJsZUhvdHNwb3QgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJxdGktZ2FwLWltZ1wiPjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzb2NpYWJsZS1ob3RzcG90JzogUXRpQXNzb2NpYWJsZUhvdHNwb3Q7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdhcCcpXG5leHBvcnQgY2xhc3MgUXRpR2FwIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJxdGktZ2FwLXRleHRcIj48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwJzogUXRpR2FwO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAtaW1nJylcbmV4cG9ydCBjbGFzcyBRdGlHYXBJbWcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1nYXAtaW1nJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcC1pbWcnOiBRdGlHYXBJbWc7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdhcC10ZXh0JylcbmV4cG9ydCBjbGFzcyBRdGlHYXBUZXh0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1nYXAtdGV4dCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtdGV4dCc6IFF0aUdhcFRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlDaG9pY2UgfSBmcm9tICcuL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcblxuLy8gdHlwZSBzaGFwZSA9IHsgc2hhcGU6ICdyZWN0JyB8ICdjaXJjbGUnIHwgJ3BvbHknOyBjb29yZHM6IG51bWJlcltdIH07XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90c3BvdC1jaG9pY2UnKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHNwb3RDaG9pY2UgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhcmlhLW9yZGVydmFsdWUnLCB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgb3JkZXI6IG51bWJlcjtcblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIGA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3RzcG90LWNob2ljZSc6IFF0aUhvdHNwb3RDaG9pY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ob3R0ZXh0JylcbmV4cG9ydCBjbGFzcyBRdGlIb3R0ZXh0IGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgcGFydD1cImNoXCI+PGRpdiBwYXJ0PVwiY2hhXCI+PC9kaXY+PC9kaXY+XG4gICAgICA8c2xvdD48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWhvdHRleHQnOiBRdGlIb3R0ZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWlubGluZS1jaG9pY2UnKVxuZXhwb3J0IGNsYXNzIFF0aUlubGluZUNob2ljZSBleHRlbmRzIExpdEVsZW1lbnQge31cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWlubGluZS1jaG9pY2UnOiBRdGlJbmxpbmVDaG9pY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQ1NTUmVzdWx0R3JvdXAsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlDaG9pY2UgfSBmcm9tICcuL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcblxuLyoqXG4gKiBAc3VtbWFyeSBTaG9ydCBzdW1tYXJ5IG9mIHRoZSBjb21wb25lbnQncyBpbnRlbmRlZCB1c2UuXG4gKiBAZG9jdW1lbnRhdGlvbiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLmo5bnUxb2ExdHUzYlxuICogQHN0YXR1cyBzdGFibGVcbiAqIEBzaW5jZSA0LjBcbiAqXG4gKiBAZXZlbnQgcXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkIC0gRW1pdHRlZCB3aGVuIGEgY2hvaWNlIGlzIHNlbGVjdGVkLlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1jaG9pY2UgLSBFbWl0dGVkIHdoZW4gYW4gY2hvaWNlIGlzIGFkZGVkXG4gKiBAZXZlbnQgcXRpLWxvb3NlLWNob2ljZSAtIEVtaXR0ZWQgd2hlbiBhIGNob2ljZSBpcyByZW1vdmVkXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90LlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLXNpbXBsZS1jaG9pY2UnKVxuZXhwb3J0IGNsYXNzIFF0aVNpbXBsZUNob2ljZSBleHRlbmRzIFF0aUNob2ljZSB7XG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG4gICAgc2xvdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBwYXJ0PVwiY2hcIj48ZGl2IHBhcnQ9XCJjaGFcIj48L2Rpdj48L2Rpdj5cbiAgICAgIDxzbG90IHBhcnQ9XCJzbG90XCI+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zaW1wbGUtY2hvaWNlJzogUXRpU2ltcGxlQ2hvaWNlO1xuICB9XG59XG4iLCAiLyogb25seSBleHBvcnRlZCB0byBvdmVycmlkZSBvciBleHRlbmQgZm9yIHNwZWNpZmljIHB1cnBvc2VzICovXG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V2ZW50LXR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvZXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuLyogb25seSBleHBvcnRlZCB0byBvdmVycmlkZSBvciBleHRlbmQgZm9yIHNwZWNpZmljIHB1cnBvc2VzICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pdGVtLWJvZHkvcXRpLWl0ZW0tYm9keSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1wcm9tcHQvcXRpLXByb21wdCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0Jztcbi8qIHN0YXJ0IHJlc3BvbnNlIGFuZCBvdXRjb21lICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktb3V0Y29tZS1kZWNsYXJhdGlvbi9xdGktb3V0Y29tZS1kZWNsYXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uJztcbi8qIGVuZCByZXNwb25zZSBhbmQgb3V0Y29tZSAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcnVicmljLWJsb2NrL3F0aS1jb250ZW50LWJvZHknO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcnVicmljLWJsb2NrL3F0aS1ydWJyaWMtYmxvY2snO1xuLyogc3RhcnQgZmVlZGJhY2sgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2snO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2snO1xuLyogZW5kIGZlZWRiYWNrICovXG4vKiBzdGFydCB0ZXh0ZW50cnlpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nO1xuLyogZW5kIHRleHRlbnRyeWludGVyYWN0aW9uICovXG4vKiBzdGFydCBob3R0ZXh0ICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbic7XG4vKiBlbmQgaG90dGV4dCAqL1xuLyogc3RhcnQgaW5saW5lY2hvaWNlICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgaW5saW5lY2hvaWNlICovXG4vKiBzdGFydCBjaG9pY2VpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uJztcbi8qIGVuZCBjaG9pY2VpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcvcXRpLW91dGNvbWUtcHJvY2Vzc2luZyc7XG4vKiBzdGFydCBjdXN0b20gaW50ZXJhY3Rpb25zICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nO1xuLyogZW5kIGN1c3RvbSBpbnRlcmFjdGlvbnMgKi9cbi8qIHN0YXJ0IG9ubHkgcHJldmlldyBpdGVtcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nO1xuLyogZW5kIG9ubHkgcHJldmlldyBpdGVtcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1jdXN0b20tb3BlcmF0b3IvcXRpLWN1c3RvbS1vcGVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYWJsZS1ob3RzcG90JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1pbWcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC10ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtY2hvaWNlJztcblxuY29uc29sZS5sb2coXG4gICclY0NcdTAwQkZUTyVjTGFiJWM6IHF0aS1jb21wb25lbnRzIGxvYWRlZCcsXG4gICdmb250LXdlaWdodDpib2xkOyBjb2xvcjpncmVlbicsXG4gICdmb250LWZhbWlseTogXCJQVCBTYW5zXCIsIGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOmdyZWVuOyBmb250LXNpemU6IHNtYWxsZXI7dmVydGljYWwtYWxpZ246IHN1YicsXG4gICdmb250LXdlaWdodDp1bnNldCdcbik7XG5cbi8vIGNzcyBmb3IgZm9udCBwdC1zYW5zIGFuZCBzdWJzY3JpcHQgYW5kIGdyZWVuXG4iXSwKICAibWFwcGluZ3MiOiAidURBQUEsT0FBUyxXQUFBQSxPQUFlLGVBQ3hCLE9B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TkUsR0FBYyxjQUFjLEdBQ2hCTCxJQ0piLE9BQVMsT0FBQU0sT0FBVyxNQUNwQixPQUFTLGlCQUFBQyxHQUFlLFlBQUFDLE9BQWdCLG9CQU1qQyxJQUFNQyxHQUFOLGNBQStCQyxDQUFVLENBUWhELEVBUmFELEdBR0ssT0FBU0U7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUZnREMsRUFBQSxDQUF4RUMsR0FBUyxDQUFFLFVBQVcsa0JBQW1CLEtBQU0sT0FBUSxRQUFTLEVBQUssQ0FBQyxHQUQ1REosR0FDOEQscUJBRDlEQSxHQUFORyxFQUFBLENBRE5FLEdBQWMsb0JBQW9CLEdBQ3RCTCxJQ1BiLE9BQVMsaUJBQUFNLE9BQXFCLG9CQUU5QixPQUFTLFFBQUFDLE9BQVksTUFHZCxJQUFNQyxHQUFOLGNBQXlCQyxDQUFVLENBQy9CLFFBQVMsQ0FDaEIsT0FBT0M7QUFBQSxxQkFFVCxDQUNGLEVBTGFGLEdBQU5HLEVBQUEsQ0FETkMsR0FBYyxhQUFhLEdBQ2ZKLElDTGIsT0FBUyxjQUFBSyxPQUFrQixNQUMzQixPQUFTLGlCQUFBQyxPQUFxQixvQkFHdkIsSUFBTUMsR0FBTixjQUE4QkMsRUFBVyxDQUFDLEVBQXBDRCxHQUFORSxFQUFBLENBRE5DLEdBQWMsbUJBQW1CLEdBQ3JCSCxJQ0piLE9BQVMsaUJBQUFJLE9BQXFCLG9CQUM5QixPQUF5QixPQUFBQyxHQUFLLFFBQUFDLE9BQVksTUFnQm5DLElBQU1DLEdBQU4sY0FBOEJDLENBQVUsQ0FXcEMsUUFBUyxDQUNoQixPQUFPQztBQUFBLGlDQUVULENBQ0YsRUFmYUYsR0FDSixPQUFTRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFETEgsR0FBTkksRUFBQSxDQUROQyxHQUFjLG1CQUFtQixHQUNyQkwsSUNxRGIsUUFBUSxJQUNOLDBDQUNBLGdDQUNBLGdHQUNBLG1CQUNGIiwKICAibmFtZXMiOiBbInByb3ZpZGUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvcGVydHlOYW1lIiwgIm9wdGlvbnMiLCAicmVzb2x2ZWRPcHRpb25zIiwgIl9fc3ByZWFkVmFsdWVzIiwgInByb3RvIiwgImRlY29yYXRlZEZuTmFtZSIsICJ1cGRhdGUiLCAid2F0Y2hlZFByb3BlcnRpZXMiLCAiY2hhbmdlZFByb3BzIiwgInByb3BlcnR5IiwgImtleSIsICJvbGRWYWx1ZSIsICJuZXdWYWx1ZSIsICJjcmVhdGVDb250ZXh0IiwgIml0ZW1Db250ZXh0VmFyaWFibGVzIiwgIml0ZW1Db250ZXh0IiwgIlF0aUFzc2Vzc21lbnRJdGVtIiwgIkxpdEVsZW1lbnQiLCAiXyIsICJkaXNhYmxlZCIsICJjaCIsICJyZWFkb25seSIsICJpdGVtQ29udGV4dFZhcmlhYmxlcyIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZlZWRiYWNrRWxlbWVudCIsICJyZXNwb25zZUlkZW50aWZpZXIiLCAiY291bnRBdHRlbXB0IiwgIm91dGNvbWVJZGVudGlmaWVyIiwgInZhbHVlIiwgInYiLCAidmFyaWFibGUiLCAibWF0Y2hpbmdWYWx1ZSIsICJpbnRlcmFjdGlvbkVsZW1lbnQiLCAiZWwiLCAiZmUiLCAibXlSZXNwb25zZXMiLCAicmVzcG9uc2UiLCAiaW50ZXJhY3Rpb24iLCAiaSIsICJodG1sIiwgInNob3ciLCAicmVzcG9uc2VzIiwgInZhcmkiLCAiY3IiLCAiY291bnROdW1BdHRlbXB0cyIsICJfYSIsICJyZXNwb25zZVByb2Nlc3NvciIsICJpZGVudGlmaWVyIiwgImV2ZW50IiwgIm91dGNvbWVWYXJpYWJsZSIsICJuYW1lIiwgImRldGFpbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvdmlkZSIsICJpdGVtQ29udGV4dCIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJwcm9wZXJ0eSIsICJLRVlDT0RFIiwgIlF0aUNob2ljZSIsICJMaXRFbGVtZW50IiwgIl8iLCAiZGlzYWJsZWQiLCAiZXZlbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAidmFsdWUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiUXRpSXRlbUJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpUHJvbXB0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpU3R5bGVzaGVldCIsICJMaXRFbGVtZW50IiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJpdGVtIiwgImxpbmsiLCAic3R5bGVzIiwgImVycm9yIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJ2YXJpYWJsZSIsICJodG1sVmFsdWVzIiwgImRlZmF1bHRWYWx1ZXMiLCAibiIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAidGFibGUiLCAiZW50cmllcyIsICJlbnRyeSIsICJzb3VyY2VWYWx1ZSIsICJ0YXJnZXRWYWx1ZSIsICJvdXRjb21lVmFyaWFibGUiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aVJlc3BvbnNlRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJyZXN1bHQiLCAiY29ycmVjdFJlc3BvbnNlIiwgInZhbHVlcyIsICJpIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQ29udGVudEJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlSdWJyaWNCbG9jayIsICJMaXRFbGVtZW50IiwgIm9sZCIsICJkaXNhYmxlZCIsICJjbGFzc05hbWUiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgInByb3BlcnR5IiwgImRlY2ltYWxTZXBhcmF0b3IiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAibnVtYmVyIiwgImRTZXAiLCAiSXNOdWxsT3JVbmRlZmluZWQiLCAidmFsdWUiLCAiUXRpRmVlZGJhY2siLCAiTGl0RWxlbWVudCIsICJvdXRjb21lSWRlbnRpZmllciIsICJvdXRjb21lVmFyaWFibGUiLCAiaXNGb3VuZCIsICJJc051bGxPclVuZGVmaW5lZCIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpRmVlZGJhY2tCbG9jayIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlGZWVkYmFja0lubGluZSIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1vZGFsRmVlZGJhY2siLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiaWZEZWZpbmVkIiwgInByb3BlcnR5IiwgIkxpdEVsZW1lbnQiLCAiSW50ZXJhY3Rpb24iLCAiTGl0RWxlbWVudCIsICJ2YWwiLCAidmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInJlZiIsICJjcmVhdGVSZWYiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImRpc2FibGVkIiwgImNsYXNzTmFtZSIsICJuclJvd3MiLCAidmFsdWUiLCAiY3NzIiwgImh0bWwiLCAicmVmIiwgImV2ZW50IiwgImlmRGVmaW5lZCIsICJpbnB1dCIsICJ0ZXh0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiaWZEZWZpbmVkIiwgImNyZWF0ZVJlZiIsICJsaXZlUXVlcnkiLCAicXVlcnlTZWxlY3RvciIsICJvcHRpb25zIiwgIm9ic2VydmVyIiwgInJlc29sdmVkT3B0aW9ucyIsICJfX3NwcmVhZFZhbHVlcyIsICJwcm90byIsICJkZWNvcmF0ZWRGbk5hbWUiLCAiY29ubmVjdGVkQ2FsbGJhY2siLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCAiX2EiLCAiY2FsbGJhY2siLCAibXV0YXRpb25MaXN0IiwgImVsZW1lbnRzVG9XYXRjaCIsICJtdXRhdGlvbiIsICJhZGRlZE5vZGVzIiwgImUiLCAicmVtb3ZlZE5vZGVzIiwgIm4iLCAiZWxlbWVudHNBZGRlZCIsICJRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImNsYXNzZXMiLCAiY2xhc3NOYW1lIiwgIm5yUm93cyIsICJ2YWx1ZSIsICJjc3MiLCAiaHRtbCIsICJldmVudCIsICJpZkRlZmluZWQiLCAiaW5wdXQiLCAidGV4dCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiQ2hvaWNlcyIsICJJbnRlcmFjdGlvbiIsICJfIiwgImRpc2FibGVkIiwgImNoIiwgInJlYWRvbmx5IiwgImFjYyIsICJ2YWwiLCAicmVzcG9uc2VWYWx1ZSIsICJyZXNwb25zZVZhbHVlQXJyYXkiLCAiY2UiLCAicnYiLCAiY2hvaWNlRWxlbWVudCIsICJldmVudCIsICJzZWxlY3RlZElkZW50aWZpZXJzIiwgInJlc3VsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiUXRpSG90dGV4dEludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiUXRpSW5saW5lQ2hvaWNlSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3NzIiwgImh0bWwiLCAib3B0aW9uIiwgInVuc2FmZUhUTUwiLCAiY2hvaWNlcyIsICJjaG9pY2UiLCAic2VsZWN0ZWRPcHRpb24iLCAiaSIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgInZhbHVlIiwgImV2ZW50IiwgInNlbGVjdGVkT3B0aW9uVmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJodG1sIiwgImNzcyIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIlF0aUNob2ljZUludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJtYXRjaENvcnJlY3QiLCAibWFwUmVzcG9uc2UiLCAibWFwUmVzcG9uc2VQb2ludCIsICJRdGlSZXNwb25zZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInJ1bGVzIiwgInJ1bGUiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgInNwbGl0dGVkVGVtcGxhdGVOYW1lIiwgInRlbXBsYXRlTmFtZSIsICJtYXBSZXNwb25zZSIsICJtYXBSZXNwb25zZVBvaW50IiwgIm1hdGNoQ29ycmVjdCIsICJzdHJIVE1MIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJRdGlSdWxlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlMb29rdXBPdXRjb21lVmFsdWUiLCAiUXRpUnVsZSIsICJpZGVudGlmaWVyIiwgIm91dGNvbWVWYXJpYWJsZSIsICJ2YWx1ZSIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiaHRtbCIsICJRdGlSZXNwb25zZUNvbmRpdGlvbiIsICJRdGlSdWxlIiwgImh0bWwiLCAiYnJhbmNoZXMiLCAiaSIsICJicmFuY2giLCAiUXRpU2V0T3V0Y29tZVZhbHVlIiwgIlF0aVJ1bGUiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAiZXhwcmVzc2lvbiIsICJ2YWx1ZSIsICJRdGlTZXRPdXRjb21lVmFsdWVSdWxlIiwgInYiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIlF0aVJlc3BvbnNlRWxzZSIsICJzdWJSdWxlcyIsICJpIiwgImh0bWwiLCAiUXRpUmVzcG9uc2VJZiIsICJRdGlSZXNwb25zZUVsc2UiLCAicmVzdWx0IiwgImkiLCAiUXRpUmVzcG9uc2VFbHNlSWYiLCAiUXRpUmVzcG9uc2VJZiIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3RhdGUiLCAiUXRpRXhwcmVzc2lvbiIsICJMaXRFbGVtZW50IiwgImlkZW50aWZpZXIiLCAidmFsdWVzIiwgInYiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJlcnJvciIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJRdGlFeHByZXNzaW9uIiwgIlF0aUFuZCIsICJxdGlBbmRNaXhpbiIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgIkJhc2UiLCAiY2hpbGRyZW4iLCAiYyIsICJjb25kaXRpb24iLCAidmFsdWUiLCAiZSIsICJRdGlBbmQiLCAicHJvcGVydHkiLCAiUXRpQmFzZVZhbHVlIiwgIlF0aUV4cHJlc3Npb24iLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUNvbnRhaW5zIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAicHJvamVjdGlvbjEiLCAicHJvamVjdGlvbjIiLCAieCIsICJRdGlDb3JyZWN0IiwgIlF0aUV4cHJlc3Npb24iLCAiaWRlbnRpZmllciIsICJyZXNwb25zZVZhcmlhYmxlIiwgInByb3BlcnR5IiwgIlF0aUVxdWFsUm91bmRlZCIsICJRdGlFeHByZXNzaW9uIiwgImZpZ3VyZXMiLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiZmxvYXQxIiwgImZsb2F0MiIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicHJvcGVydHkiLCAiU2NvcmluZ0hlbHBlciIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgImJhc2VUeXBlIiwgImludDEiLCAiaW50MiIsICJmbG9hdDEiLCAiZmxvYXQyIiwgInBhaXIxIiwgInBhaXIyIiwgIlF0aUVxdWFsIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpR3QiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlHdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlJc051bGwiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFsdWUiLCAiUXRpTHQiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlMdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9wZXJ0eSIsICJRdGlNYXBSZXNwb25zZSIsICJRdGlFeHByZXNzaW9uIiwgInJlc3BvbnNlIiwgIm1hcHBpbmciLCAiY2FuZGlkYXRlUmVzcG9uc2VzIiwgInJlc3VsdCIsICJjYW5kaWRhdGVSZXNwb25zZSIsICJtYXBwZWRWYWx1ZSIsICJlbnRyeSIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJMaXRFbGVtZW50IiwgIlF0aU1hcHBpbmciLCAiTGl0RWxlbWVudCIsICJlbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpTWF0Y2giLCAiX1F0aU1hdGNoIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlVG9NYXAiLCAiY29ycmVjdFZhbHVlSW5mbyIsICJfYSIsICJTY29yaW5nSGVscGVyIiwgImFuc3dlckluZGV4IiwgImNvcnJlY3RBbnN3ZXIiLCAiY3VycmVudFZhbHVlVG9NYXAiLCAibWF0Y2hpbmdWYWx1ZSIsICJtdiIsICJRdGlNZW1iZXIiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9qZWN0aW9uMSIsICJRdGlNdWx0aXBsZSIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YXJpYWJsZSIsICJodG1sIiwgIlF0aU5vdCIsICJRdGlFeHByZXNzaW9uIiwgImh0bWwiLCAiUXRpT3IiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJjIiwgImNvbmRpdGlvbiIsICJ2YWx1ZSIsICJRdGlPcmRlcmVkIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhcmlhYmxlIiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0UHJpbnRlZFZhcmlhYmxlIiwgIkxpdEVsZW1lbnQiLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgImFzc2Vzc21lbnRJdGVtIiwgImlkZW50aWZpZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiUXRpUHJvZHVjdCIsICJRdGlFeHByZXNzaW9uIiwgImFjY3VtdWxhdG9yIiwgImN1cnJlbnRWYWx1ZSIsICJlcnJvciIsICJwcm9wZXJ0eSIsICJRdGlTdHJpbmdNYXRjaCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInYxIiwgInYyIiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aVN1bSIsICJRdGlFeHByZXNzaW9uIiwgIlF0aVN1bUV4cHJlc3Npb24iLCAiZXhwcmVzc2lvbnMiLCAiYyIsICJ2YWx1ZSIsICJhIiwgImIiLCAiUXRpVmFyaWFibGUiLCAiUXRpRXhwcmVzc2lvbiIsICJpZGVudGlmaWVyIiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lUHJvY2Vzc2luZyIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAibG9naWMiLCAiUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IiLCAicnVsZXMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgInJ1bGUiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidXJsIiwgImJhc2VVcmwiLCAiX2EiLCAicmVxdWlyZUNvbmZpZyIsICJtb2R1bGVDb25nIiwgIm1vZHVsZUlkIiwgImUiLCAiY29uZmlnIiwgInByaW1hcnlDb25maWciLCAiZmFsbGJhY2siLCAiZmFpbGVkVG9SZXNvbHZlIiwgInBhdGhXaXRoRXh0ZW5zaW9uIiwgImZhbGxiYWNrQ29uZmlnIiwgImlucHV0IiwgInRvcExldmVsS2V5IiwgIm5lc3RlZE9iamVjdCIsICJuZXN0ZWRLZXkiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAibmV3UmVzcG9uc2UiLCAic3RyaW5naWZpZWQiLCAidmFsIiwgIm5vZGUiLCAiYSIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgImVsIiwgInByb3BlcnR5IiwgImtleSIsICJjaGlsZHJlbiIsICJhbGxLZXkiLCAiYyIsICJrIiwgImdldENoaWxkUHJvcGVydGllcyIsICJwcm9wZXJ0aWVzIiwgImNoaWxkIiwgIl9fc3ByZWFkVmFsdWVzIiwgInBjaSIsICJ0eXBlIiwgImRvbSIsICJhY2MiLCAibGluayIsICJzdHlsZXMiLCAicmVxdWlyZSIsICJjdHhBIiwgIndhc1ByZXZpb3VzbHlMb2FkZWQiLCAiZXJyIiwgIm1vZHVsZVJlc29sdXRpb25QYXRoIiwgIm1vZHVsZVJlc29sdXRpb25GYWxsYmFja1BhdGgiLCAiaW50ZXJhY3Rpb25Nb2R1bGVzIiwgIm1vZHVsZXMiLCAibW9kdWxlIiwgInByaW1hcnlQYXRoIiwgImZhbGxiYWNrUGF0aCIsICJfX3NwcmVhZFByb3BzIiwgInN0ciIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJzdGF0ZSIsICJUb3VjaERyYWdBbmREcm9wIiwgIl9Ub3VjaERyYWdBbmREcm9wIiwgInR5cGUiLCAidmFsIiwgImUiLCAiX3RvdWNoZXMiLCAiZWxlbWVudFN0eWxlcyIsICJzdHlsZSIsICJfdGhpcyIsICJ0YXJnZXQiLCAiZHJhZ2dhYmxlcyIsICJlbCIsICJ4IiwgInkiLCAiX2EiLCAiZXZlbnQiLCAicG9pbnRGcm9tVG91Y2hFdmVudCIsICJjdXN0b21FbCIsICJwYWdlIiwgInRvdWNoIiwgImNsaWVudFJlY3QiLCAiZXZlbnRUeXBlIiwgImJ1YmJsZSIsICJwcm9wZXJ0eSIsICJEcm9wcGFibGVzTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcm9wcGFibGVzSW5TaGFkb3dSb290IiwgImRyb3BwYWJsZXNTZWxlY3RvciIsICJEcm9wcGFibGVzRWxlbWVudCIsICJjaGFuZ2VkUHJvcHMiLCAiZHJvcHBhYmxlcyIsICJkIiwgImRyb3BwYWJsZSIsICJtdXRhdGlvbnMiLCAibXV0YXRpb24iLCAiX2EiLCAiZXYiLCAiZHJhZ2dhYmxlSW5MaWdodERvbSIsICJkcmFnZ2FibGUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIkZsaXBwYWJsZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgImRyb3BwYWJsZXNTZWwiLCAiZHJhZ2dhYmxlc1NlbCIsICJGbGlwcGFibGVzRWxlbWVudCIsICJwcm9wZXJ0eSIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcmFnZ2FibGVzU2VsZWN0b3IiLCAiZHJvcHBhYmxlc0luU2hhZG93Um9vdCIsICJkcm9wcGFibGVzU2VsZWN0b3IiLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQiLCAiRmxpcHBhYmxlc01peGluIiwgIkRyb3BwYWJsZXNNaXhpbiIsICJkcmFnc0FkZGVkIiwgImRyYWdzUmVtb3ZlZCIsICJlbGVtIiwgImV2IiwgImRyYWdnYWJsZSIsICJwb3NpdGlvbiIsICJpbmRleCIsICJpbnRlcmFjdGlvbiIsICJnYXBUZXh0IiwgIm9sZCIsICJkcmFnT3B0aW9ucyIsICJkaXNhYmxlZCIsICJzIiwgImNoIiwgInJlYWRvbmx5IiwgImNoYW5nZWRQcm9wcyIsICJUb3VjaERyYWdBbmREcm9wIiwgInNhdmUiLCAiY2hpbGRyZW4iLCAiZCIsICJkaXNhYmxlIiwgInJlc3BvbnNlIiwgImRyb3BJZCIsICJkcmFnSWRzIiwgImRyb3BwYWJsZSIsICJkcm9wIiwgImRyYWdJZCIsICJhc3NvY2lhdGlvbnMiLCAiX2EiLCAicmVzcG9uc2VTdHJpbmciLCAiX19kZWNvcmF0ZUNsYXNzIiwgImxpdmVRdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl8iLCAiaW5kZXgiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdhcE1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3ZnIiwgImN1c3RvbUVsZW1lbnQiLCAicXVlcnkiLCAicXVlcnlBc3NpZ25lZEVsZW1lbnRzIiwgInN0YXRlIiwgImlmRGVmaW5lZCIsICJyZXBlYXQiLCAicG9zaXRpb25Ib3RzcG90cyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAiaW1nIiwgImhvdHNwb3QiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhZGl1cyIsICJjZW50ZXJYUGVyIiwgImNlbnRlcllQZXIiLCAicmFkaXVzUGVyIiwgImxlZnRYIiwgInRvcFkiLCAicmlnaHRYIiwgImJvdHRvbVkiLCAibGVmdFhQZXIiLCAidG9wWVBlciIsICJyaWdodFhQZXIiLCAiYm90dG9tWVBlciIsICJwb2x5Y29vcmRzIiwgImFjYyIsICJjdXJyZW50VmFsdWUiLCAiY3VycmVudEluZGV4IiwgInBvbHlDIiwgImxhc3RWYWwiLCAicG9pbnQiLCAicG9seUQiLCAicCIsICJRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgImh0bWwiLCAiaWZEZWZpbmVkIiwgInJlcGVhdCIsICJsaW5lIiwgImluZGV4IiwgInN2ZyIsICJlIiwgIl8iLCAiaSIsICJpbWciLCAiaG90c3BvdCIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJldmVudCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInF1ZXJ5IiwgInF1ZXJ5QXNzaWduZWRFbGVtZW50cyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlHcmFwaGljR2FwTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImUiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgImNlbnRlclgiLCAiY2VudGVyWSIsICJyYWRpdXMiLCAibGVmdFgiLCAidG9wWSIsICJyaWdodFgiLCAiYm90dG9tWSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlHcmFwaGljT3JkZXJJbnRlcmFjdGlvbiIsICJDaG9pY2VzIiwgImh0bWwiLCAiaWRlbnRpZmllciIsICJob3RzcG90IiwgImVsIiwgIm1heFNlbGVjdGlvbiIsICJpIiwgImltZyIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlIb3RzcG90SW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgImUiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImNvbCIsICJpIiwgInVuc2FmZUhUTUwiLCAicm93IiwgInJJbmRleCIsICJjSW5kZXgiLCAidmFsdWUiLCAiZSIsICJ2IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTWVkaWFJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJodG1sIiwgIm1lZGlhT2JqZWN0IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpT3JkZXJJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl8iLCAiaSIsICJlbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbiIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpUG9zaXRpb25PYmplY3RTdGFnZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZXZlbnQiLCAiZGVsdGFYIiwgImRlbHRhWSIsICJhIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInJlcGVhdCIsICJzdHlsZU1hcCIsICJRdGlTZWxlY3RQb2ludEludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImh0bWwiLCAicmVwZWF0IiwgInBvaW50IiwgImluZGV4IiwgInN0eWxlTWFwIiwgImUiLCAiXyIsICJpIiwgInZhbCIsICJldmVudCIsICJ4IiwgInkiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIm5vdGhpbmciLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJxdWVyeSIsICJRdGlTbGlkZXJJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJvbGQiLCAiZGlzYWJsZWQiLCAicmVhZG9ubHkiLCAidmFsdWUiLCAibXlSZXNwb25zZSIsICJ2YWx1ZVBlcmNlbnRhZ2UiLCAiaHRtbCIsICJub3RoaW5nIiwgImV2ZW50IiwgImhhbmRsZVRvdWNoTW92ZSIsICJ4IiwgImRpZmZYIiwgImhhbmRsZVRvdWNoRW5kIiwgImhhbmRsZU1vdXNlTW92ZSIsICJoYW5kbGVNb3VzZVVwIiwgInZhbHVlTm93IiwgInJvdW5kZWRTdGVwVmFsdWUiLCAiX3RvdWNoTW92ZSIsICJldnQiLCAidG91Y2giLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJxdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAic3RhdGUiLCAiUXRpQ3VzdG9tT3BlcmF0b3IiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImV2ZW50IiwgIl9hIiwgIl9iIiwgIl9jIiwgImNvbW1lbnROb2RlIiwgIm5vZGUiLCAiZSIsICJmbiIsICJyZXNwb25zZUlkZW50aWZpZXIiLCAidiIsICJpdGVtIiwgInZhcmlhYmxlSWRlbnRpZmllciIsICJvdXRjb21lSWRlbnRpZmllciIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlBc3NvY2lhYmxlSG90c3BvdCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcEltZyIsICJMaXRFbGVtZW50IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcFRleHQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUhvdHNwb3RDaG9pY2UiLCAiUXRpQ2hvaWNlIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiUXRpSG90dGV4dCIsICJRdGlDaG9pY2UiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpSW5saW5lQ2hvaWNlIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJRdGlTaW1wbGVDaG9pY2UiLCAiUXRpQ2hvaWNlIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50Il0KfQo=