@datagrok/eda 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/146.js +1 -1
- package/dist/{d711f70338306e5bddc4.wasm → 191bd97af33c713bf78e.wasm} +0 -0
- package/dist/package.js +2 -2
- package/package.json +49 -48
- package/src/EDAui.ts +19 -15
- package/src/package.ts +46 -26
- package/wasm/EDA.wasm +0 -0
- package/wasm/PLS/pls.cpp +2 -173
- package/src/demos.ts +0 -38
package/dist/package.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var eda;(()=>{"use strict";var e={m:{},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},u:e=>e+".js"};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!t;)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href;var t={};e.r(t),e.d(t,{PCA:()=>Pt,PLS:()=>Ft,_package:()=>St,applyLinearKernelSVM:()=>Tt,applyPolynomialKernelSVM:()=>Mt,applyRBFkernelSVM:()=>xt,applySigmoidKernelSVM:()=>$t,demoScript:()=>It,info:()=>kt,init:()=>Dt,testDataLinearNonSeparable:()=>Lt,testDataLinearSeparable:()=>Et,trainLinearKernelSVM:()=>Rt,trainPolynomialKernelSVM:()=>Nt,trainRBFkernelSVM:()=>Vt,trainSigmoidKernelSVM:()=>Bt});const n=grok,r=ui,o=DG;var a;function i(e){return t=this,n=void 0,o=function*(){yield new Promise((t=>setTimeout(t,e)))},new((r=void 0)||(r=Promise))((function(e,a){function i(e){try{l(o.next(e))}catch(e){a(e)}}function s(e){try{l(o.throw(e))}catch(e){a(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(i,s)}l((o=o.apply(t,n||[])).next())}));var t,n,r,o}!function(e){e.notNull=function(e,t){if(null==e)throw new Error(`${null==t?"Value":t} not defined`)}}(a||(a={}));var s=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};class l{constructor(e,t){this.name="",this.description="",this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h1(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._stopStartBtn=r.button(r.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=r.button(r.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this.name=e,this.description=t,this._progress.max=0,this._progress.value=1,l.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._header),this._headerDiv.append(this._stopStartBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=r.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var e;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let t=0;t<this.stepNumber;t++){const n=r.iconFA("clock"),o=r.div(this._steps[t].name,"grok-tutorial-entry-instruction"),a=r.div(null===(e=this._steps[t].options)||void 0===e?void 0:e.description,"grok-tutorial-step-description hidden"),i=r.divH([n,o],"grok-tutorial-entry");this._activity.append(i,a)}}_initRoot(){n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1,n.shell.dockManager.dock(this._root,o.DOCK_TYPE.RIGHT,null,this.name,.3).container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_startScript(){var e,t;return s(this,void 0,void 0,(function*(){const n=this._activity.getElementsByClassName("grok-tutorial-entry"),r=this._activity.getElementsByClassName("grok-icon"),o=this._activity.getElementsByClassName("grok-tutorial-step-description");for(let a=this._currentStep;a<this.stepNumber&&!this._isStopped&&!this._isCancelled;a++){r[a].className="grok-icon far fa-spinner-third fa-spin",o[a].classList.remove("hidden"),o[a].classList.add("visible");const s=n[a];yield this._steps[a].func(),this._scrollTo(this._root,s.offsetTop-this._mainHeader.offsetHeight),yield i((null===(e=this._steps[a].options)||void 0===e?void 0:e.delay)?null===(t=this._steps[a].options)||void 0===t?void 0:t.delay:2e3),r[a].className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++}this._currentStep===this.stepNumber&&this._stopStartBtn.replaceWith(this._restartBtn)}))}_scrollTo(e,t){e.focus(),e.scrollTop=t}_changeStopState(){const e=this._stopStartBtn.getElementsByClassName("grok-icon");e[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(e[0].className="grok-icon fal fa-pause",this._startScript())}_restartScript(){const e=Array.from(n.shell.dockManager.rootNode.children)[1];e.container.containerElement.classList.contains("tutorials-demo-script-container")&&(n.shell.dockManager.close(e),n.shell.closeAll()),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h1(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause"}cancelScript(){this._isCancelled=!0,l.currentObject=null}step(e,t,n){return this._steps[this.steps.length]={name:e,func:t,options:n},this}start(){return s(this,void 0,void 0,(function*(){this._initRoot(),this._startScript()}))}}l.currentObject=null,Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const u="num",c="floatColumn",m="intColumn",d="floatColumns",f="newFloatColumns",p="intColumns",h="newIntColumns",y="newFloatColumn",w="newIntColumn",v="column",g="_callResult",b="numOfRows",C="numOfColumns",_="ref",A="value",S="tableFromColumns",k="objects",D="int",P="double",F={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function I(e,t){let n,r=[],o=0;for(const a in e){const i=e[a],s=i.type;if(a!==g){switch(s){case u:case D:case P:i.data=t[o],o++;break;case m:case c:let r,a=t[o];r=a.type===D&&s===m||a.type===P&&s===c?a.getRawData():new F[s](a.getRawData()),i.data={array:r,numOfRows:r.length},o++;break;case w:case y:let l=0;n=i[b][_],l=e[n].type===u?e[n].data:e[n].data[i[b][A]],i.data={numOfRows:l},o++;break;case p:case d:let v=[];for(let e of t[o].toList())e.type===D&&s===m||e.type===P&&s===c?v.push(e.getRawData()):v.push(new F[s](e.getRawData()));i.data={arrays:v,numOfRows:v[0].length,numOfColumns:v.length},o++;break;case h:case f:let g=0,S=0;n=i[b][_],g=e[n].type===u?e[n].data:e[n].data[i[b][A]],n=i[C][_],S=e[n].type===u?e[n].data:e[n].data[i[C][A]],i.data={numOfRows:g,numOfColumns:S},o++;break;default:return}r.push(i)}}return r}function E(e,t){e.arguments._callResult=t.callResult,function(e,t){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in e){const a=e[o];switch(a.type){case u:case D:case P:case m:case c:case d:case p:break;case y:case w:let e;null==a.name?e=(0).toString():s=a.name,a.column=n[a.type](e,t[r].array);break;case h:case f:let o=[],i=t[r].arrays.length,s=[];if(null==a.names)for(let e=1;e<=i;e++)s.push(e.toString());else s=a.names;for(let e=0;e<i;e++)o.push(n[a.type](s[e],t[r].arrays[e]));a.columns=o}r++}}(e.arguments,t.args);let n=function(e){let t=e.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(t.type){case u:case D:case P:return e.arguments[t.source];case v:return e.arguments[t.source].column;case S:return DG.DataFrame.fromColumns(e.arguments[t.source].columns);case k:let r=[];for(let o of t.source){let t=e.arguments[o];r.push(t[n[t.type]])}return r}}(e);return function(e){for(const t in e){const n=e[t];switch(n.type){case u:case D:case P:case m:case c:case p:case d:break;case w:case y:n.column=null;break;case h:case f:n.columns=null}}}(e.arguments),n}const L=1,R=1,T=1,V=0,x=100,N=1e8,M="components must be positive.",B="components must not be greater than feautures count.",$="min must be less than max.",O="features must be positive.",j="samples must be positive.",H="violators percentage must be from the range from 0 to 100.",G="dataframe is too big.";function z(e,t){if(t<L)throw new Error(M);if(t>e.length)throw new Error(B);if(e.length*e.byIndex(0).length>N)throw new Error(G)}var W=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};function U(t,n,r,o){return W(this,void 0,void 0,(function*(){let t;z(n,o);let a=async function(t,n,r,o){return new Promise(((t,a)=>{const i=new Worker(new URL(e.p+e.u(93),e.b));i.postMessage(I(EDA.partialLeastSquareRegression.arguments,[n,r,o])),i.onmessage=function(e){i.terminate(),t(E(EDA.partialLeastSquareRegression,e.data))}}))}(0,n,r,o);return yield a.then((e=>{t=e}),(e=>{throw new Error(`Error: ${e}`)})),t}))}function K(e,t,r,a){let i=n.shell.getTableView(e.name);i.addViewer(function(e,t){t.name=e.name+"(predicted)";let n=o.DataFrame.fromColumns([e,t]);return n.name="Reference vs. Predicted",o.Viewer.scatterPlot(n,{title:n.name,x:e.name,y:t.name,showRegressionLine:!0,markerType:"circle"})}(r,a[0])),i.addViewer(function(e,t){t.name="regression coefficient";let n=[];for(const t of e)n.push(t.name);let r=o.Column.fromStrings("feature",n),a=o.DataFrame.fromColumns([r,t]);return a.name="Regression Coefficients",o.Viewer.barChart(a,{title:a.name,split:"feature",value:"regression coefficient",valueAggrType:"avg"})}(t,a[1])),i.addViewer(function(e,t){let n=[];for(let t=0;t<e.length;t++)e[t].name=`x.score.t${t+1}`,n.push(e[t]);for(let e=0;e<t.length;e++)t[e].name=`y.score.u${e+1}`,n.push(t[e]);let r=o.DataFrame.fromColumns(n);return r.name="Scores",o.Viewer.scatterPlot(r,{title:r.name,x:e[0].name,y:t[0].name,markerType:"circle"})}(a[2],a[3])),i.addViewer(function(e,t){let n=[],r=[];for(let t of e)r.push(t.name);n.push(o.Column.fromStrings("labels",r));for(let e=0;e<t.length;e++)t[e].name=`x.loading.p${e+1}`,n.push(t[e]);let a=o.DataFrame.fromColumns(n);return a.name="Loadings",o.Viewer.scatterPlot(a,{title:a.name,x:t[0].name,y:t[t.length-1].name,markerType:"circle",labels:"labels"})}(t,a[4]))}var Y=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))},q=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};const J=0,Q=1,X="Feature #",Z="Label";function ee(){return o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])}function te(t,n,r,a,i,s,l,u){return q(this,void 0,void 0,(function*(){!function(e,t,n,r,o){if(n>=r)throw new Error($);if(t<T)throw new Error(O);if(e<R)throw new Error(j);if(o<V||o>x)throw new Error(H)}(a,i,s,l,u);const c=o.Column.fromList("double","kernelParams",n);let m,d=async function(t,n,r,o,a,i,s){return new Promise(((l,u)=>{const c=new Worker(new URL(e.p+e.u(584),e.b));c.postMessage(I(EDA.generateDataset.arguments,[t,n,r,o,a,i,s])),c.onmessage=function(e){c.terminate(),l(E(EDA.generateDataset,e.data))}}))}(t,c,a,i,s,l,u);yield d.then((e=>{m=e}),(e=>{throw new Error(`Error: ${e}`)})),m[Q].name=Z;for(const e of m[J])e.name=X+e.name;const f=o.DataFrame.fromColumns(m[J]);return f.name=r,f.columns.add(m[Q]),f}))}var ne=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};const re=0,oe=1,ae=2,ie=3,se=4,le=0,ue=1,ce=2,me=3,de=4,fe=5,pe=6,he=7,ye=0,we=1,ve=2,ge=3,be=0,Ce=0,_e=1,Ae=0,Se=1,ke=0,De=0,Pe=0,Fe=0,Ie="gamma must be strictly positive.",Ee="sigma must be strictly positive.",Le="c must be strictly positive.",Re="d must be strictly positive.",Te="incorrect kernel.",Ve="Labels",xe="predicted",Ne="correctness",Me="Confusion matrix",Be="mean",$e="std dev",Oe="alpha",je="weight",He="gamma",Ge="kernel",ze="kernel params",We="kernel param 1",Ue="kernel param 2",Ke="features count",Ye="train samples count",qe="Train error,%",Je=["linear","polynomial","RBF","sigmoid"],Qe="positive (P)",Xe="negative (N)",Ze="predicted positive (PP)",et="predicted negative (PN)",tt="Sensitivity",nt="Specificity",rt="Balanced accuracy",ot="Positive predicitve value",at="Negative predicitve value",it="Model report",st="Predicted labels",lt="Train labels",ut="Prediction correctness",ct="prediction",mt=4,dt=3,ft=2,pt=0,ht=1,yt=2,wt=0,vt=1;function gt(t,n,r){return ne(this,void 0,void 0,(function*(){let a=n.columns,i=a.byName(r);return a.remove(r),yield function(t,n,r){return ne(this,void 0,void 0,(function*(){!function(e){if(e.gamma<=ke)throw new Error(Ie);switch(e.kernel){case re:return;case ae:if(e.sigma<=De)throw new Error(Ee);return;case oe:if(e.cParam<=Pe)throw new Error(Le);if(e.dParam<=Fe)throw new Error(Re);return;case ie:return;default:throw new Error(Te)}}(t);const a=[wt,wt];switch(t.kernel){case re:break;case ae:a[be]=t.sigma;break;case oe:a[Ce]=t.cParam,a[_e]=t.dParam;break;case ie:a[Ae]=t.kappa,a[Se]=t.theta;break;default:throw new Error(Te)}let i,s=o.Column.fromList("double",ze,a),l=n.toList(),u=l[0].length+vt,c=l.length+vt,m=se,d=async function(t,n,r,o,a,i,s,l){return new Promise(((u,c)=>{const m=new Worker(new URL(e.p+e.u(111),e.b));m.postMessage(I(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,a,i,s,l])),m.onmessage=function(e){m.terminate(),u(E(EDA.trainAndAnalyzeLSSVM,e.data))}}))}(t.gamma,t.kernel,s,u,c,m,n,r);yield d.then((e=>{i=e}),(e=>{throw new Error(`Error: ${e}`)})),i[ue].name=Be,i[ce].name=$e,i[me].name=Oe,i[de].name=je,i[fe].name=xe,i[pe].name=Ne,i[he].name=Me;let f={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(i[le]),means:i[ue],stdDevs:i[ce],modelParams:i[me],modelWeights:i[de],predictedLabels:i[fe],correctness:i[pe],confusionMatrix:i[he],trainError:void 0,featuresCount:l.length,trainSamplesCount:l[0].length};return function(e){let t=e.confusionMatrix.getRawData(),n=t[ye],r=t[ge],o=t[ve],a=t[we],i=n+a,s=o+r,l=n/i,u=r/s,c=n/(n+o),m=r/(r+a),d=(n+r)/(i+s),f=(l+u)/2;e.sensitivity=l,e.specificity=u,e.balancedAccuracy=f,e.positivePredicitveValue=c,e.negativePredicitveValue=m,e.trainError=100*(1-d)}(f),f}))}(t,a,i)}))}function bt(e,t){e.name=it,e.columns.add(t.trainLabels),e.columns.add(t.predictedLabels),e.columns.add(t.correctness);let r=n.shell.addTableView(e);r.addViewer(o.Viewer.form(function(e){let t=e.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",He,[e.trainGamma]),o.Column.fromStrings(Ge,[Je[e.kernelType]]),o.Column.fromList("double",We,[t[0]]),o.Column.fromList("double",Ue,[t[1]]),o.Column.fromList("double",Ke,[e.featuresCount]),o.Column.fromList("double",Ye,[e.trainSamplesCount]),o.Column.fromList("double",qe,[e.trainError]),o.Column.fromList("double",rt,[e.balancedAccuracy]),o.Column.fromList("double",tt,[e.sensitivity]),o.Column.fromList("double",nt,[e.specificity]),o.Column.fromList("double",ot,[e.positivePredicitveValue]),o.Column.fromList("double",at,[e.negativePredicitveValue])])}(t))),r.addViewer(o.Viewer.scatterPlot(e,{title:st,color:t.predictedLabels.name})),r.addViewer(o.Viewer.scatterPlot(e,{title:lt,color:t.trainLabels.name})),r.addViewer(o.Viewer.grid(function(e){let t=e.confusionMatrix.getRawData();return o.DataFrame.fromColumns([o.Column.fromStrings("",[Qe,Xe]),o.Column.fromList("int",Ze,[t[ye],t[ve]]),o.Column.fromList("int",et,[t[we],t[ge]])])}(t))),r.addViewer(o.Viewer.scatterPlot(e,{title:ut,color:t.correctness.name}))}function Ct(e){let t=e.normalizedTrainData.columns,n=e.trainSamplesCount,r=e.featuresCount,o=new Uint8Array(mt*(dt+ft+n+r+r+n+vt+r+vt+r*n)),a=o.buffer,i=0,s=new Int32Array(a,i,dt);s[pt]=e.kernelType,s[ht]=n,s[yt]=r,i+=dt*mt;let l=new Float32Array(a,i,ft);l.set(e.kernelParams.getRawData()),i+=ft*mt,l=new Float32Array(a,i,n),l.set(e.trainLabels.getRawData()),i+=n*mt,l=new Float32Array(a,i,r),l.set(e.means.getRawData()),i+=r*mt,l=new Float32Array(a,i,r),l.set(e.stdDevs.getRawData()),i+=r*mt,l=new Float32Array(a,i,n+vt),l.set(e.modelParams.getRawData()),i+=(n+vt)*mt,l=new Float32Array(a,i,r+vt),l.set(e.modelWeights.getRawData()),i+=(r+vt)*mt;for(const e of t)l=new Float32Array(a,i,r),l.set(e.getRawData()),i+=r*mt;return o}function _t(t,n){return ne(this,void 0,void 0,(function*(){let r=function(e){let t=e.buffer,n=0,r=new Int32Array(t,n,dt);n+=dt*mt;let a=r[ht],i=r[yt];const s=o.Column.fromFloat32Array(ze,new Float32Array(t,n,ft));n+=ft*mt;const l=o.Column.fromFloat32Array(Ve,new Float32Array(t,n,a));n+=a*mt;const u=o.Column.fromFloat32Array(Be,new Float32Array(t,n,i));n+=i*mt;const c=o.Column.fromFloat32Array($e,new Float32Array(t,n,i));n+=i*mt;const m=o.Column.fromFloat32Array(Oe,new Float32Array(t,n,a+vt));n+=(a+vt)*mt;const d=o.Column.fromFloat32Array(je,new Float32Array(t,n,i+vt));n+=(i+vt)*mt;let f=[];for(let e=0;e<a;e++)f.push(o.Column.fromFloat32Array(e.toString(),new Float32Array(t,n,i))),n+=i*mt;const p=o.DataFrame.fromColumns(f);return{kernelType:r[pt],kernelParams:s,trainLabels:l,means:u,stdDevs:c,modelParams:m,modelWeights:d,normalizedTrainData:p}}(new Uint8Array(n)),a=yield function(t,n){return ne(this,void 0,void 0,(function*(){let r,o=async function(t,n,r,o,a,i,s,l,u){return new Promise(((c,m)=>{const d=new Worker(new URL(e.p+e.u(604),e.b));d.postMessage(I(EDA.predictByLSSVM.arguments,[t,n,r,o,a,i,s,l,u])),d.onmessage=function(e){d.terminate(),c(E(EDA.predictByLSSVM,e.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((e=>{r=e}),(e=>{throw new Error(`Error: ${e}`)})),r}))}(r,t.columns);return a.name=ct,o.DataFrame.fromColumns([a])}))}var At=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};const St=new o.Package;function kt(){n.shell.info(St.webRoot)}function Dt(){return At(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function Pt(t,n,r,o,a){return At(this,void 0,void 0,(function*(){return function(e){for(const t of e.columns.toList())t.name="_PCA"+t.name;return e}(yield function(t,n,r,o,a){return W(this,void 0,void 0,(function*(){z(n,r);let t,i=async function(t,n,r,o,a){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(155),e.b));s.postMessage(I(EDA.principalComponentAnalysis.arguments,[n,r,o,a])),s.onmessage=function(e){s.terminate(),t(E(EDA.principalComponentAnalysis,e.data))}}))}(0,n,r,o?1:0,a?1:0);return yield i.then((e=>{t=e}),(e=>{throw new Error(`Error: ${e}`)})),t}))}(0,n,r,o,a))}))}function Ft(e,t,n,r){return At(this,void 0,void 0,(function*(){const o=yield U(0,t,n,r);K(e,t,n,o)}))}function It(){return At(this,void 0,void 0,(function*(){const e=new l("Multivariate analysis","Provides partial least sqaure regression analysis of the given data."),t=ee(),a=t.columns.byName("price"),i=t.columns.remove("price").remove("model"),s=yield U(0,i,a,3),u=ee();n.shell.addTableView(u),u.name="Cars",n.shell.getTableView(u.name),yield e.step("Run",(()=>At(this,void 0,void 0,(function*(){}))),{description:"Test dataframe is loaded, and multivariate analysis is performed.",delay:0}).step("Study",(()=>At(this,void 0,void 0,(function*(){K(u,i,a,s)}))),{description:"Investigate results.",delay:4e3}).step("Try",(()=>At(this,void 0,void 0,(function*(){const e={items:1e4,features:100,components:3},t=o.Property.js("items",o.TYPE.INT),a=o.Property.js("features",o.TYPE.INT),i=o.Property.js("components",o.TYPE.INT);r.dialog({title:"Set"}).add(r.input.form(e,[t,a,i])).addButton("Run",(()=>At(this,void 0,void 0,(function*(){return yield function(e,t,r){return Y(this,void 0,void 0,(function*(){if(e<=0||t<=0||r<=0||r>t)return void(new o.Balloon).error("Incorrect inputs.");const a="Reference",i=n.data.testData("random walk",e,t);i.name=`${e} x ${t}`;for(const e of i.columns)e.name="Feature "+e.name;i.columns.byIndex(0).name=a,n.shell.addTableView(i);let s=i.columns.byName(a),l=i.columns.remove(a);K(i,l,s,yield U(0,l,s,r)),i.columns.add(s)}))}(e.items,e.features,e.components)})))).show()}))),{description:"Random walk test dataframe of the given size is generated, and its multivariate analysis is performed."}).start()}))}function Et(e,t,n,r,o,a){return At(this,void 0,void 0,(function*(){return yield te(re,[0,0],e,t,n,r,o,a)}))}function Lt(e,t,n,r,o,a,i){return At(this,void 0,void 0,(function*(){return yield te(ae,[t,0],e,n,r,o,a,i)}))}function Rt(e,t,n,r){return At(this,void 0,void 0,(function*(){const o=yield gt({gamma:n,kernel:re},e,t);return r&&bt(e,o),Ct(o)}))}function Tt(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}function Vt(e,t,n,r,o){return At(this,void 0,void 0,(function*(){const a=yield gt({gamma:n,kernel:ae,sigma:r},e,t);return o&&bt(e,a),Ct(a)}))}function xt(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}function Nt(e,t,n,r,o,a){return At(this,void 0,void 0,(function*(){const i=yield gt({gamma:n,kernel:oe,cParam:r,dParam:o},e,t);return a&&bt(e,i),Ct(i)}))}function Mt(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}function Bt(e,t,n,r,o,a){return At(this,void 0,void 0,(function*(){const i=yield gt({gamma:n,kernel:ie,kappa:r,theta:o},e,t);return a&&bt(e,i),Ct(i)}))}function $t(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}eda=t})();
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPQyxNQUFPQSxHQUFTbkYsRUFBSXlFLEdBRzlHLE9BRkkyRyxHQUNBM0QsR0FBZ0J6SCxFQUFJcUwsR0FDakJ2RCxHQUFldUQsRUFDMUIsR0FDSixDQU9PLFNBQVNTLEdBQXNCOUwsRUFBSXlGLEdBQ3RDLE9BQU8sR0FBVXBXLFVBQU0sT0FBUSxHQUFRLFlBQ25DLGFBQWFpWixHQUFjdEksRUFBSXlGLEVBQ25DLEdBQ0osQyIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9lZGEvZXh0ZXJuYWwgdmFyIFwiZ3Jva1wiIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJ1aVwiIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJER1wiIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3R1dG9yaWFscy9zcmMvZGVtby1zY3JpcHQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9jYWxsV2FzbS5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyLmpzIiwid2VicGFjazovL2VkYS8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvRURBdG9vbHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9FREFBUEkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL0VEQXVpLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9kZW1vcy50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvZGF0YUdlbmVyYXRvcnMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3N2bS50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvcGFja2FnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmpzXCI7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgIXNjcmlwdFVybCkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDM1OTogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBncm9rOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB1aTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gREc7IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5leHBvcnQgY29uc3QgdGVzdHMgPSB7fTtcbmNvbnN0IGF1dG9UZXN0c0NhdE5hbWUgPSAnQXV0byBUZXN0cyc7XG5jb25zdCB3YXNSZWdpc3RlcmVkID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTtcbmV4cG9ydCB2YXIgYXNzdXJlO1xuKGZ1bmN0aW9uIChhc3N1cmUpIHtcbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBhc3N1cmUubm90TnVsbCA9IG5vdE51bGw7XG59KShhc3N1cmUgfHwgKGFzc3VyZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKGNhdGNoVW5oYW5kbGVkLCByZXBvcnQpIHtcbiAgICAgICAgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwb3J0ID0gZmFsc2U7XG4gICAgICAgIGlmIChjYXRjaFVuaGFuZGxlZCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgICAgICBpZiAocmVwb3J0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLnJlcG9ydCA9IHJlcG9ydDtcbiAgICB9XG4gICAgO1xufVxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9hID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAob3B0aW9ucy50aW1lb3V0ID0gMzAwMDApO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnRlc3QgPSAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCB0ZXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdEV2ZW50KGV2ZW50LCBoYW5kbGVyLCB0cmlnZ2VyLCBtcyA9IDApIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3ViO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgICAgICAgICAgIHJlamVjdCgndGltZW91dCcpO1xuICAgICAgICAgICAgfSwgbXMpO1xuICAgICAgICAgICAgdHJpZ2dlcigpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWUsIHRlc3QsIG9wdGlvbnMpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG4vKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWwsIGV4cGVjdGVkID0gdHJ1ZSwgZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IpXG4gICAgICAgIGVycm9yID0gYCR7ZXJyb3J9LCBgO1xuICAgIGVsc2VcbiAgICAgICAgZXJyb3IgPSAnJztcbiAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWwsIGV4cGVjdGVkLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3IpIHtcbiAgICBpZiAoKGFjdHVhbCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICYmIGV4cGVjdGVkID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHx8XG4gICAgICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgICAgICAoYWN0dWFsID09PSBOdW1iZXIuTmFOICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTmFOKSB8fCAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gICAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbiAgICBpZiAoIWFyZUVxdWFsKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0VGFibGUoYWN0dWFsLCBleHBlY3RlZCwgZXJyb3IpIHtcbiAgICBjb25zdCBleHBlY3RlZFJvd0NvdW50ID0gZXhwZWN0ZWQucm93Q291bnQ7XG4gICAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gICAgZXhwZWN0KGFjdHVhbFJvd0NvdW50LCBleHBlY3RlZFJvd0NvdW50LCBgJHtlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJ30sIHJvdyBjb3VudGApO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgaWYgKGFjdHVhbENvbHVtbiA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgIGlmIChhY3R1YWxDb2x1bW4udHlwZSAhPSBjb2x1bW4udHlwZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgICAgICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgdmFsdWUsIDAuMDAwMSwgZXJyb3IpO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5EQVRFX1RJTUUpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLmlzU2FtZSh2YWx1ZSksIHRydWUsIGVycm9yKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgICAgIGlmICghYWN0dWFsLmhhc093blByb3BlcnR5KGV4cGVjdGVkS2V5KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcHJvcGVydHkgXCIke2V4cGVjdGVkS2V5fVwiIG5vdCBmb3VuZGApO1xuICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgICAgIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPSBleHBlY3RlZFZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAoJHtleHBlY3RlZFZhbHVlfSkgZm9yIGtleSAnJHtleHBlY3RlZEtleX0nLCBnb3QgKCR7YWN0dWFsVmFsdWV9KWApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheShhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDtcbiAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcbiAgICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsTGVuZ3RofSBgICtcbiAgICAgICAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWRMZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgICB9XG59XG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeSwgdGVzdHMpIHtcbiAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0ZXN0cygpO1xufVxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZSkge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcikge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cbmZ1bmN0aW9uIGFkZE5hbWVzcGFjZShzLCBmKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbml0QXV0b1Rlc3RzKHBhY2thZ2VJZCwgbW9kdWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbW9kdWxlVGVzdHMgPSBtb2R1bGUgPyBtb2R1bGUudGVzdHMgOiB0ZXN0cztcbiAgICAgICAgaWYgKG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gICAgICAgIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSB5aWVsZCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gICAgICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoLy4qXFwvXFwvXFxzKnNraXBbOlxcc10qKC4qKSQvKTtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIHBhY2tGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RzID0gZi5vcHRpb25zWyd0ZXN0J107XG4gICAgICAgICAgICBpZiAoISh0ZXN0cyAmJiBBcnJheS5pc0FycmF5KHRlc3RzKSAmJiB0ZXN0cy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNraXBSZWFzb25zID0gdGVzdHNbaV0ubWF0Y2gocmVnKTtcbiAgICAgICAgICAgICAgICBsZXQgc2tpcFJlYXNvbjtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcFJlYXNvbnMgJiYgKHNraXBSZWFzb25zID09PSBudWxsIHx8IHNraXBSZWFzb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBza2lwUmVhc29ucy5sZW5ndGgpID4gMSlcbiAgICAgICAgICAgICAgICAgICAgc2tpcFJlYXNvbiA9IHNraXBSZWFzb25zWzFdO1xuICAgICAgICAgICAgICAgIG1vZHVsZUF1dG9UZXN0cy5wdXNoKG5ldyBUZXN0KGF1dG9UZXN0c0NhdE5hbWUsIHRlc3RzLmxlbmd0aCA9PT0gMSA/IGYubmFtZSA6IGAke2YubmFtZX0gJHtpICsgMX1gLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGdyb2suZnVuY3Rpb25zLmV2YWwoYWRkTmFtZXNwYWNlKHRlc3RzW2ldLCBmKSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBgRmFpbGVkOiAke3Rlc3RzW2ldfWA7XG4gICAgICAgICAgICAgICAgfSksIHsgc2tpcFJlYXNvbjogc2tpcFJlYXNvbiB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFtb2R1bGVBdXRvVGVzdHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZUF1dG9UZXN0cyB9O1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgdmFyIF9lO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VfID0gKF9iID0gKF9hID0gZ3Jvay5mdW5jdGlvbnMuZ2V0Q3VycmVudENhbGwoKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZ1bmMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYWNrYWdlO1xuICAgICAgICB5aWVsZCBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfLmlkKTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9jID0gKF9lID0gb3B0aW9ucykudGVzdENvbnRleHQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IChfZS50ZXN0Q29udGV4dCA9IG5ldyBUZXN0Q29udGV4dCgpKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeSkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYmVmb3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHQgPSAoX2QgPSB2YWx1ZS50ZXN0cykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogW107XG4gICAgICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICByZXMucHVzaCh5aWVsZCBleGVjVGVzdCh0W2ldLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGVzdCkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9ICh5aWVsZCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYWZ0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0LmNhdGNoVW5oYW5kbGVkKSB7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSgxMDAwKTtcbiAgICAgICAgICAgIGlmIChncm9rLnNoZWxsLmxhc3RFcnJvci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleGNlcHRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBncm9rLnNoZWxsLmxhc3RFcnJvciwgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0LnJlcG9ydCkge1xuICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IERHLkxvZ2dlcigpO1xuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc2Z1bCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLnN1Y2Nlc3MpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHNraXBwZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5za2lwcGVkKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gIXIuc3VjY2Vzcyk7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICdQYWNrYWdlIEBwYWNrYWdlIHRlc3RlZDogQHN1Y2Nlc3NmdWwgc3VjY2Vzc2Z1bCwgQHNraXBwZWQgc2tpcHBlZCwgQGZhaWxlZCBmYWlsZWQgdGVzdHMnO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWw6IHN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICAgICAgc2tpcHBlZDogc2tpcHBlZCxcbiAgICAgICAgICAgICAgICBmYWlsZWQ6IGZhaWxlZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcGFja2FnZTogcGFja2FnZV9cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHIgb2YgZmFpbGVkKVxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7IFtgJHtyLmNhdGVnb3J5fSB8ICR7ci5uYW1lfWBdOiByLnJlc3VsdCB9KTtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coZGVzY3JpcHRpb24sIHBhcmFtcywgJ3BhY2thZ2UtdGVzdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleGVjVGVzdCh0LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgY29uc3Qgc2tpcCA9ICgoX2EgPSB0Lm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5za2lwUmVhc29uKSB8fCBmaWx0ZXI7XG4gICAgICAgIGNvbnN0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiAoX2IgPSB0Lm9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5za2lwUmVhc29uO1xuICAgICAgICBpZiAoIXNraXApXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2tpcClcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24sIG1zOiAwLCBza2lwcGVkOiB0cnVlIH07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAoX2MgPSB5aWVsZCB0LnRlc3QoKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHgudG9TdHJpbmcoKSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgci5tcyA9IHN0b3AgLSBzdGFydDtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGZvciAke3IubXN9IG1zYCk7XG4gICAgICAgIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICAgICAgICByLm5hbWUgPSB0Lm5hbWU7XG4gICAgICAgIHJldHVybiByO1xuICAgIH0pO1xufVxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXIsIGVycm9yID0gJ1RpbWVvdXQgZXhjZWVkZWQnLCB3YWl0ID0gNTAwLCBpbnRlcnZhbCA9IDUwKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvcikpO1xuICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0hhbmRsZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RpYWxvZ1ByZXNlbnQoZGlhbG9nVGl0bGUpIHtcbiAgICBjb25zdCBkaWFsb2dzID0gREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkaWFsb2dzW2ldLnRpdGxlID09IGRpYWxvZ1RpdGxlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0Vmlld2VyKHYsIGRmLCBkZXRlY3RTZW1hbnRpY1R5cGVzID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoZGV0ZWN0U2VtYW50aWNUeXBlcylcbiAgICAgICAgICAgIHlpZWxkIGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgICAgICAgY29uc3QgdHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gICAgICAgIGNvbnN0IHZpZXdlck5hbWUgPSBgW25hbWU9dmlld2VyLSR7di5yZXBsYWNlKC9cXHMrL2csICctJyl9IGldYDtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgJHt2aWV3ZXJOYW1lfSBjYW52YXMsJHt2aWV3ZXJOYW1lfSBzdmcsJHt2aWV3ZXJOYW1lfSBpbWcsXG4gICAgJHt2aWV3ZXJOYW1lfSBpbnB1dCwke3ZpZXdlck5hbWV9IGgxLCR7dmlld2VyTmFtZX0gYWA7XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHZpZXdlciA9IHR2LmFkZFZpZXdlcih2KTtcbiAgICAgICAgICAgIHlpZWxkIGF3YWl0Q2hlY2soKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgIT09IG51bGwsICdjYW5ub3QgbG9hZCB2aWV3ZXInLCAzMDAwKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKEFycmF5LmZyb20odHYudmlld2VycykubGVuZ3RoKTtcbiAgICAgICAgICAgIEFycmF5LmZyb20oZGYucm93KDApLmNlbGxzKS5mb3JFYWNoKChjKSA9PiBjLnZhbHVlID0gbnVsbCk7XG4gICAgICAgICAgICBkZi5yb3dzLnNlbGVjdCgocm93KSA9PiByb3cuaWR4ID4gMSAmJiByb3cuaWR4IDwgNyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gNzsgaSA8IDEyOyBpKyspXG4gICAgICAgICAgICAgICAgZGYuZmlsdGVyLnNldChpLCBmYWxzZSk7XG4gICAgICAgICAgICBkZi5jdXJyZW50Um93SWR4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdmlld2VyLmdldE9wdGlvbnModHJ1ZSkubG9vaztcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb3BzID0ge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKChrKSA9PiB0eXBlb2YgcHJvcHNba10gPT09ICdib29sZWFuJykuZm9yRWFjaCgoaykgPT4gbmV3UHJvcHNba10gPSAhcHJvcHNba10pO1xuICAgICAgICAgICAgdmlld2VyLnNldE9wdGlvbnMobmV3UHJvcHMpO1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoMjUwKTtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dCA9IHR2LnNhdmVMYXlvdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFByb3BzID0gdmlld2VyLmdldE9wdGlvbnMoKS5sb29rO1xuICAgICAgICAgICAgdHYucmVzZXRMYXlvdXQoKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKEFycmF5LmZyb20odHYudmlld2VycykubGVuZ3RoKTtcbiAgICAgICAgICAgIHR2LmxvYWRMYXlvdXQobGF5b3V0KTtcbiAgICAgICAgICAgIHlpZWxkIGF3YWl0Q2hlY2soKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgIT09IG51bGwsICdjYW5ub3QgbG9hZCB2aWV3ZXIgZnJvbSBsYXlvdXQnLCAzMDAwKTtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDI1MCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICB2aWV3ZXIgPSBBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmZpbmQoKHYpID0+IHYudHlwZSAhPT0gJ0dyaWQnKTtcbiAgICAgICAgICAgIGV4cGVjdEFycmF5KHJlcywgWzIsIDEsIDJdKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh2aWV3ZXIuZ2V0T3B0aW9ucygpLmxvb2spLCBKU09OLnN0cmluZ2lmeShvbGRQcm9wcykpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHYuY2xvc2UoKTtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuY2xvc2VUYWJsZShkZik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVTXhReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJTM1JETEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkxaQ3hGUVVGRkxFTkJRVU03UVVGRlVDeE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExGbEJRVmtzUTBGQlF6dEJRVU4wUXl4TlFVRk5MR0ZCUVdFc1IwRkJOa0lzUlVGQlJTeERRVUZETzBGQlEyNUVMRTFCUVUwc1EwRkJReXhKUVVGSkxHVkJRWFZDTEVOQlFVTTdRVUZGYmtNc1RVRkJUU3hMUVVGWExFMUJRVTBzUTBGTGRFSTdRVUZNUkN4WFFVRnBRaXhOUVVGTk8wbEJRM0pDTEZOQlFXZENMRTlCUVU4c1EwRkJReXhMUVVGVkxFVkJRVVVzU1VGQllUdFJRVU12UXl4SlFVRkpMRXRCUVVzc1NVRkJTU3hKUVVGSk8xbEJRMllzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hqUVVGakxFTkJRVU1zUTBGQlF6dEpRVU53UlN4RFFVRkRPMGxCU0dVc1kwRkJUeXhWUVVkMFFpeERRVUZCTzBGQlEwZ3NRMEZCUXl4RlFVeG5RaXhOUVVGTkxFdEJRVTRzVFVGQlRTeFJRVXQwUWp0QlFWRkVMRTFCUVUwc1QwRkJUeXhYUVVGWE8wbEJTWFJDTEZsQlFWa3NZMEZCZDBJc1JVRkJSU3hOUVVGblFqdFJRVWgwUkN4dFFrRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU4wUWl4WFFVRk5MRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJSMklzU1VGQlNTeGpRVUZqTEV0QlFVc3NVMEZCVXp0WlFVRkZMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzWTBGQll5eERRVUZETzFGQlEzWkZMRWxCUVVrc1RVRkJUU3hMUVVGTExGTkJRVk03V1VGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRKUVVOcVJDeERRVUZETzBsQlFVRXNRMEZCUXp0RFFVTklPMEZCUlVRc1RVRkJUU3hQUVVGUExFbEJRVWs3U1VGTlppeFpRVUZaTEZGQlFXZENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN08xRkJRM3BHTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4TlFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExHOURRVUZtTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVzc1MwRkJTeXhGUVVGRE8xRkJRekZDTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8xRkJRM1pDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJkVUlzUlVGQlJUdFpRVU51UXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVThzVDBGQlR5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkZPMmRDUVVNelF5eEpRVUZKTEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNN1owSkJRMmhDTEVsQlFVazdiMEpCUTBZc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeEZRVUZGTEVOQlFVTTdhVUpCUTNaQ08yZENRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMjlDUVVObUxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkRXRHRuUWtGRFJDeFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRiRUlzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXp0UlFVTk1MRU5CUVVNc1EwRkJRU3hEUVVGRE8wbEJRMG9zUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4VlFVRm5RaXhUUVVGVExFTkJRVWtzUzBGQmIwSXNSVUZEY2tRc1QwRkJNRUlzUlVGQlJTeFBRVUZ0UWl4RlFVRkZMRXRCUVdFc1EwRkJRenM3VVVGREwwUXNTVUZCU1N4SFFVRnBRaXhEUVVGRE8xRkJRM1JDTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVTdXVUZEY2tNc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHRuUWtGRE4wSXNTVUZCU1R0dlFrRkRSaXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdhVUpCUTJZN1owSkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdiMEpCUTFZc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVTllPMmRDUVVORUxFZEJRVWNzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0blFrRkRiRUlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJoQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEwZ3NWVUZCVlN4RFFVRkRMRWRCUVVjc1JVRkJSVHRuUWtGRFpDeEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1owSkJRMnhDTEhkRVFVRjNSRHRuUWtGRGVFUXNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJRM0JDTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVOUUxFOUJRVThzUlVGQlJTeERRVUZETzFGQlExb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRUQ3hEUVVGRE8wTkJRVUU3UVVGRlJDeE5RVUZOTEZWQlFWVXNTVUZCU1N4RFFVRkRMRWxCUVZrc1JVRkJSU3hKUVVGM1FpeEZRVUZGTEU5QlFYRkNPMGxCUTJoR0xFbEJRVWtzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SlFVRkpMRk5CUVZNN1VVRkRja01zUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVNNVFpeEpRVUZKTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVTBGQlV6dFJRVU16UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTndReXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNTMEZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzSkdMRU5CUVVNN1FVRkZSQ3huUmtGQlowWTdRVUZEYUVZc1RVRkJUU3hWUVVGVkxFMUJRVTBzUTBGQlF5eE5RVUZYTEVWQlFVVXNWMEZCWjBJc1NVRkJTU3hGUVVGRkxFdEJRV003U1VGRGRFVXNTVUZCU1N4TFFVRkxPMUZCUTFBc1MwRkJTeXhIUVVGSExFZEJRVWNzUzBGQlN5eEpRVUZKTEVOQlFVTTdPMUZCUTJ4Q0xFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEYUVJc1NVRkJTU3hOUVVGTkxFdEJRVXNzVVVGQlVUdFJRVU55UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExFZEJRVWNzUzBGQlN5eGhRVUZoTEZGQlFWRXNWMEZCVnl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1pGTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1YwRkJWeXhEUVVGRExFMUJRV01zUlVGQlJTeFJRVUZuUWl4RlFVRkZMRk5CUVZNc1IwRkJSeXhMUVVGTExFVkJRVVVzUzBGQll6dEpRVU0zUml4SlFVRkpMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3hSUVVGUkxFdEJRVXNzVFVGQlRTeERRVUZETEdsQ1FVRnBRaXhEUVVGRE8xRkJRemxGTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4UlFVRlJMRXRCUVVzc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUXpsRkxFTkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrc1VVRkJVU3hMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRNVVlzVDBGQlR6dEpRVU5VTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEZGQlFWRXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJRenRKUVVONlJDeE5RVUZOTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1JVRkJSU3hIUVVGSExFdEJRVXNzWVVGQlRDeExRVUZMTEdOQlFVd3NTMEZCU3l4SFFVRkpMRVZCUVVVc2FVSkJRV2xDTEZOQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRjRVVzU1VGQlNTeERRVUZETEZGQlFWRTdVVUZEV0N4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVmtzVVVGQlVTeFRRVUZUTEUxQlFVMHNhVUpCUVdsQ0xGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZEVZc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCYVVJc1JVRkJSU3hSUVVGdFFpeEZRVUZGTEV0QlFXTTdTVUZEYUVZc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRE8wbEJRek5ETEUxQlFVMHNZMEZCWXl4SFFVRkhMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU03U1VGRGRrTXNUVUZCVFN4RFFVRkRMR05CUVdNc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4SFFVRkhMRXRCUVVzc1lVRkJUQ3hMUVVGTExHTkJRVXdzUzBGQlN5eEhRVUZKTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1NVRkZkRVVzUzBGQlN5eE5RVUZOTEUxQlFVMHNTVUZCU1N4UlFVRlJMRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRM0pETEUxQlFVMHNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVONFJDeEpRVUZKTEZsQlFWa3NTVUZCU1N4SlFVRkpPMWxCUTNSQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNWVUZCVlN4TlFVRk5MRU5CUVVNc1NVRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF6dFJRVU55UkN4SlFVRkpMRmxCUVZrc1EwRkJReXhKUVVGSkxFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVazdXVUZEYkVNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFZRVUZWTEUxQlFVMHNRMEZCUXl4SlFVRkpMR3RDUVVGclFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4UlFVRlJMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEycEhMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4blFrRkJaMElzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjZReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRelZDTEUxQlFVMHNWMEZCVnl4SFFVRkhMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTenRuUWtGRE9VSXNWMEZCVnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMmxDUVVNMVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTzJkQ1FVTjJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdPMmRDUVVVdlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFRRVU55UXp0TFFVTkdPMEZCUTBnc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFpRVUZaTEVOQlFVTXNUVUZCT0VJc1JVRkJSU3hSUVVGblF6dEpRVU16Uml4TFFVRkxMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQllTeERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJUdFJRVU51UlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eFhRVUZYTEVOQlFVTTdXVUZEY2tNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eHpRa0ZCYzBJc1YwRkJWeXhoUVVGaExFTkJRVU1zUTBGQlF6dFJRVVZzUlN4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdVVUZEZUVNc1NVRkJTU3hYUVVGWExGbEJRVmtzUzBGQlN5eEpRVUZKTEdGQlFXRXNXVUZCV1N4TFFVRkxPMWxCUTJoRkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRja01zU1VGQlNTeFhRVUZYTEZsQlFWa3NUVUZCVFN4SlFVRkpMR0ZCUVdFc1dVRkJXU3hOUVVGTk8xbEJRM1pGTEZsQlFWa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFTkJRVU03WVVGRGRFTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRE8xbEJRM0pGTEZkQlFWY3NRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFTkJRVU03WVVGRGNrTXNTVUZCU1N4WFFVRlhMRWxCUVVrc1lVRkJZVHRaUVVOdVF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMR0ZCUVdFc1lVRkJZU3hqUVVGakxGZEJRVmNzVjBGQlZ5eFhRVUZYTEVkQlFVY3NRMEZCUXl4RFFVRkRPMHRCUTJwSE8wRkJRMGdzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1RVRkJjMElzUlVGQlJTeFJRVUYzUWp0SlFVTXhSU3hOUVVGTkxGbEJRVmtzUjBGQlJ5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTI1RExFMUJRVTBzWTBGQll5eEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkZka01zU1VGQlNTeFpRVUZaTEVsQlFVa3NZMEZCWXl4RlFVRkZPMUZCUTJ4RExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNNRVJCUVRCRUxGbEJRVmtzUjBGQlJ6dFpRVU4yUml4blEwRkJaME1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTnlSRHRKUVVWRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhaUVVGWkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdVVUZEY2tNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NTMEZCU3l4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldTeExRVUZMTzFsQlF6VkVMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRGFrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzVFVGQlRTeEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hOUVVGTk8xbEJRMjVGTEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRiRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU12UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVmtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03UzBGRGFrWTdRVUZEU0N4RFFVRkRPMEZCUlVRc01rSkJRVEpDTzBGQlF6TkNMRTFCUVUwc1ZVRkJWU3hSUVVGUkxFTkJRVU1zVVVGQlowSXNSVUZCUlN4TFFVRnBRanRKUVVNeFJDeGxRVUZsTEVkQlFVY3NVVUZCVVN4RFFVRkRPMGxCUXpOQ0xFdEJRVXNzUlVGQlJTeERRVUZETzBGQlExWXNRMEZCUXp0QlFVVkVMSFZHUVVGMVJqdEJRVU4yUml4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExFMUJRVEpDTzBsQlEyaEVMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVONlF5eERRVUZETzBGQlJVUXNjMFpCUVhOR08wRkJRM1JHTEUxQlFVMHNWVUZCVlN4TFFVRkxMRU5CUVVNc1MwRkJNRUk3U1VGRE9VTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzVTBGQlV6dFJRVU55UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlF6bENMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNaRExFTkJRVU03UVVGRlJDeFRRVUZUTEZsQlFWa3NRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJWVHRKUVVONlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZGtRc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlowSXNZVUZCWVN4RFFVRkRMRk5CUVdsQ0xFVkJRVVVzVFVGQldUczdVVUZEYWtVc1NVRkJTU3hoUVVGaExFTkJRVU1zVTBGQlV5eERRVUZETzFsQlFVVXNUMEZCVHp0UlFVTnlReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTnNSQ3hKUVVGSkxGZEJRVmNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExGTkJRVk1zUlVGQlJUdFpRVU12UXl4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzFsQlEyaERMRTlCUVU4N1UwRkRVanRSUVVORUxFMUJRVTBzWlVGQlpTeEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTXpRaXhOUVVGTkxHRkJRV0VzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTTNSaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eERRVUZETzFGQlEyNUVMRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzWVVGQllTeEZRVUZGTzFsQlF6ZENMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRhRU1zU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRuUWtGQlJTeFRRVUZUTzFsQlF5OUVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTnlReXhOUVVGTkxGZEJRVmNzUjBGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTndSQ3hKUVVGSkxGVkJRVlVzUTBGQlF6dG5Ra0ZEWml4SlFVRkpMRmRCUVZjc1NVRkJTU3hEUVVGQkxGZEJRVmNzWVVGQldDeFhRVUZYTEhWQ1FVRllMRmRCUVZjc1EwRkJSU3hOUVVGTkxFbEJRVWNzUTBGQlF6dHZRa0ZCUlN4VlFVRlZMRWRCUVVjc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRSU3hsUVVGbExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEZRVUZGTEV0QlFVc3NRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFZEJRVk1zUlVGQlJUdHZRa0ZETjBjc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEycEZMRFJEUVVFMFF6dHZRa0ZETlVNc1NVRkJTU3hIUVVGSExFdEJRVXNzU1VGQlNUdDNRa0ZCUlN4TlFVRk5MRmRCUVZjc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdaMEpCUTJoRUxFTkJRVU1zUTBGQlFTeEZRVUZGTEVWQlFVTXNWVUZCVlN4RlFVRkZMRlZCUVZVc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU12UWp0VFFVTkdPMUZCUTBRc1lVRkJZU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEUxQlFVMDdXVUZCUlN4UFFVRlBPMUZCUTNCRExGZEJRVmNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhIUVVGSExFVkJRVU1zUzBGQlN5eEZRVUZGTEdWQlFXVXNSVUZCUXl4RFFVRkRPMGxCUXpORUxFTkJRVU03UTBGQlFUdEJRVVZFTEUxQlFVMHNWVUZCWjBJc1VVRkJVU3hEUVVGRExFOUJRWFZGT3pzN08xRkJRM0JITEUxQlFVMHNVVUZCVVN4SFFVRkhMRTFCUVVFc1RVRkJRU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEdOQlFXTXNSVUZCUlN3d1EwRkJSU3hKUVVGSkxEQkRRVUZGTEU5QlFVOHNRMEZCUXp0UlFVTm9SU3hOUVVGTkxHRkJRV0VzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRha01zVFVGQlRTeFBRVUZQTEVkQlEzVkVMRVZCUVVVc1EwRkJRenRSUVVOMlJTeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRE8xRkJRemRDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4WlFVRkJMRTlCUVZFc1JVRkJReXhYUVVGWExIVkRRVUZZTEZkQlFWY3NSMEZCU3l4SlFVRkpMRmRCUVZjc1JVRkJSU3hGUVVGRE8xRkJRek5ETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU14UWl4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdFpRVU5vUkN4SlFVRkpMRU5CUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRkZCUVZFc1MwRkJTU3hUUVVGVExFVkJRVVU3WjBKQlEyeERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4UlFVRlJMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03YjBKQlEyaEZMRk5CUVZNN1lVRkRXanRaUVVORUxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJReXhEUVVGRE8xbEJRM1pETEVsQlFVazdaMEpCUTBZc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRUdHZRa0ZEWkN4TlFVRk5MRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dGhRVU40UWp0WlFVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yZENRVU5tTEV0QlFVc3NRMEZCUXl4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzJGQlEyNURPMWxCUTBRc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlFTeExRVUZMTEVOQlFVTXNTMEZCU3l4dFEwRkJTU3hGUVVGRkxFTkJRVU03V1VGRE5VSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRMllzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMmRDUVVNdlFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBMR0ZCUVZBc1QwRkJUeXgxUWtGQlVDeFBRVUZQTEVOQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOb1JDeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRTFCUVUwc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1NVRkJTU3hUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU16UlN4SlFVRkpPMmRDUVVOR0xFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVczdiMEpCUTJJc1RVRkJUU3hMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdZVUZEZGtJN1dVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdG5Ra0ZEWml4TFFVRkxMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0aFFVTnNRenRaUVVORUxFbEJRVWtzUzBGQlN5eERRVUZETEZkQlFWYzdaMEpCUTI1Q0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhYUVVGWExFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpkSExFbEJRVWtzUzBGQlN5eERRVUZETEZsQlFWazdaMEpCUTNCQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhaUVVGWkxFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpsSExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOMlFqdFJRVU5FTEVsQlFVa3NUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhqUVVGakxFVkJRVVU3V1VGRGRFTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRGJFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMmRDUVVOdVF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRPMjlDUVVOWUxGRkJRVkVzUlVGQlJTeHpRa0ZCYzBJN2IwSkJRMmhETEVsQlFVa3NSVUZCUlN4WlFVRlpPMjlDUVVOc1FpeE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTzJsQ1FVTndSU3hEUVVGRExFTkJRVU03WVVGRFNqdFRRVU5HTzFGQlEwUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUlVGQlJUdFpRVU01UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xbEJRek5FTEUxQlFVMHNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZEZUVRc1RVRkJUU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRha1FzVFVGQlRTeFhRVUZYTEVkQlFVY3NlVVpCUVhsR0xFTkJRVU03V1VGRE9VY3NUVUZCVFN4TlFVRk5MRWRCUVVjN1owSkJRMklzVlVGQlZTeEZRVUZGTEZWQlFWVTdaMEpCUTNSQ0xFOUJRVThzUlVGQlJTeFBRVUZQTzJkQ1FVTm9RaXhOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMDdaMEpCUTNKQ0xFOUJRVThzUlVGQlJTeFJRVUZSTzJGQlEyeENMRU5CUVVNN1dVRkRSaXhMUVVGTExFMUJRVTBzUTBGQlF5eEpRVUZKTEUxQlFVMDdaMEpCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjZSaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0VFFVTnVSRHRSUVVORUxFOUJRVThzVDBGQlR5eERRVUZET3p0RFFVTm9RanRCUVVWRUxGTkJRV1VzVVVGQlVTeERRVUZETEVOQlFVOHNSVUZCUlN4VFFVRTJRanM3TzFGQlF6VkVMRWxCUVVrc1EwRkJkVWNzUTBGQlF6dFJRVU0xUnl4TlFVRk5MRTFCUVUwc1IwRkJSeXhUUVVGVExFbEJRVWtzVTBGQlV5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4VFFVRlRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkhMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVUVzVFVGQlFTeERRVUZETEVOQlFVTXNUMEZCVHl3d1EwRkJSU3hWUVVGVkxFdEJRVWtzVFVGQlRTeERRVUZETzFGQlF6ZERMRTFCUVUwc1ZVRkJWU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGQkxFTkJRVU1zUTBGQlF5eFBRVUZQTERCRFFVRkZMRlZCUVZVc1EwRkJRenRSUVVNNVJDeEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVTlFMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNVVUZCVVN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEycEVMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZWtJc1NVRkJTVHRaUVVOR0xFbEJRVWtzU1VGQlNUdG5Ra0ZEVGl4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VlFVRlhMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4RlFVRkRMRU5CUVVNN08yZENRVVV2UkN4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRkJMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeHRRMEZCU1N4SlFVRkpMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkRMRU5CUVVNN1UwRkRPVVU3VVVGQlF5eFBRVUZQTEVOQlFVMHNSVUZCUlR0WlFVTm1MRU5CUVVNc1IwRkJSeXhGUVVGRExFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF6dFRRVU51UlR0UlFVTkVMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZUVJc1lVRkJZVHRSUVVOaUxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NTVUZCU1N4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOd1FpeEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVTlFMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNVVUZCVVN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRha1VzUTBGQlF5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRM2hDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU5vUWl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UTBGRFZqdEJRVVZFTERaQ1FVRTJRanRCUVVNM1FpeE5RVUZOTEZWQlFXZENMRXRCUVVzc1EwRkJReXhGUVVGVk96dFJRVU53UXl4TlFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZET1VNc1EwRkJRenREUVVGQk8wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VlFVRlZMRU5CUVVNc1dVRkJNa0lzUlVGRE1VUXNVVUZCWjBJc2EwSkJRV3RDTEVWQlFVVXNUMEZCWlN4SFFVRkhMRVZCUVVVc1YwRkJiVUlzUlVGQlJUczdVVUZETjBVc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVVc1JVRkJSVHRaUVVOeVF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZPMmRDUVVOa0xHRkJRV0VzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0blFrRkRNVUlzVFVGQlRTeERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRE0wSXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRMVFzWVVGQllUdFpRVU5pTEUxQlFVMHNWVUZCVlN4SFFVRlpMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVU3WjBKQlF6TkRMRWxCUVVrc1dVRkJXU3hGUVVGRkxFVkJRVVU3YjBKQlEyeENMR0ZCUVdFc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dHZRa0ZETVVJc1QwRkJUeXhGUVVGRkxFTkJRVU03YVVKQlExZzdXVUZEU0N4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRFppeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1EwRkJRVHRCUVVWRUxFMUJRVTBzVlVGQlZTeGxRVUZsTEVOQlFVTXNWMEZCYlVJN1NVRkRha1FzVFVGQlRTeFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dEpRVU16UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU4yUXl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NWMEZCVnp0WlFVTnFReXhQUVVGUExFbEJRVWtzUTBGQlF6dExRVU5tTzBsQlEwUXNUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VlFVRlZMRU5CUVVNc1EwRkJVeXhGUVVGRkxFVkJRV2RDTEVWQlFVVXNjMEpCUVN0Q0xFdEJRVXM3TzFGQlEyaEhMRWxCUVVrc2JVSkJRVzFDTzFsQlFVVXNUVUZCVFN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBGTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFMUJRVTBzVlVGQlZTeEhRVUZITEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJReTlFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWRCUVVjc1ZVRkJWU3hYUVVGWExGVkJRVlVzVVVGQlVTeFZRVUZWTzAxQlEycEZMRlZCUVZVc1ZVRkJWU3hWUVVGVkxFOUJRVThzVlVGQlZTeEpRVUZKTEVOQlFVTTdVVUZEZUVRc1RVRkJUU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyWXNTVUZCU1R0WlFVTkdMRWxCUVVrc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkROMElzVFVGQlRTeFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1VVRkJVU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUXpsRUxHOUNRVUZ2UWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRemxDTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGVFTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTXpSQ3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTndSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZCUlN4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRja1FzUlVGQlJTeERRVUZETEdGQlFXRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRja0lzVFVGQlRTeExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZETTBNc1RVRkJUU3hSUVVGUkxFZEJRVFJDTEVWQlFVVXNRMEZCUXp0WlFVTTNReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNUMEZCVHl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzVTBGQlV5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjRSeXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEVWQlFVVXNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRaUVVNdlFpeE5RVUZOTEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6RkRMRVZCUVVVc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFpRVU5xUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFsQlEzaERMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEZEVJc1RVRkJUU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlF6bEVMR2REUVVGblF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpGRExFMUJRVTBzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4TlFVRk5MRU5CUVVVc1EwRkJRenRaUVVOb1JTeFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZETlVVN1owSkJRVk03V1VGRFVpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRXQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVNelFqdEpRVU5JTEVOQlFVTTdRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJR2R5YjJzZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyZHliMnNuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibWx0Y0c5eWRDQjdUMkp6WlhKMllXSnNaU3dnVTNWaWMyTnlhWEIwYVc5dWZTQm1jbTl0SUNkeWVHcHpKenRjYm1sdGNHOXlkQ0JVYVcxbGIzVjBJRDBnVG05a1pVcFRMbFJwYldWdmRYUTdYRzVwYlhCdmNuUWdlMFJoZEdGR2NtRnRaWDBnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElIUmxjM1J6T2lCN1hHNGdJRnRyWlhrNklITjBjbWx1WjEwNklIdGNiaUFnSUNCMFpYTjBjejg2SUZSbGMzUmJYU3dnWW1WbWIzSmxQem9nS0NrZ1BUNGdVSEp2YldselpUeDJiMmxrUGl3Z1lXWjBaWEkvT2lBb0tTQTlQaUJRY205dGFYTmxQSFp2YVdRK0xGeHVJQ0FnSUdKbFptOXlaVk4wWVhSMWN6ODZJSE4wY21sdVp5d2dZV1owWlhKVGRHRjBkWE0vT2lCemRISnBibWRjYmlBZ2ZWeHVmU0E5SUh0OU8xeHVYRzVqYjI1emRDQmhkWFJ2VkdWemRITkRZWFJPWVcxbElEMGdKMEYxZEc4Z1ZHVnpkSE1uTzF4dVkyOXVjM1FnZDJGelVtVm5hWE4wWlhKbFpEb2dlMXRyWlhrNklITjBjbWx1WjEwNklHSnZiMnhsWVc1OUlEMGdlMzA3WEc1bGVIQnZjblFnYkdWMElHTjFjbkpsYm5SRFlYUmxaMjl5ZVRvZ2MzUnlhVzVuTzF4dVhHNWxlSEJ2Y25RZ2JtRnRaWE53WVdObElHRnpjM1Z5WlNCN1hHNGdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnViM1JPZFd4c0tIWmhiSFZsT2lCaGJua3NJRzVoYldVL09pQnpkSEpwYm1jcElIdGNiaUFnSUNCcFppQW9kbUZzZFdVZ1BUMGdiblZzYkNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnSkh0dVlXMWxJRDA5SUc1MWJHd2dQeUFuVm1Gc2RXVW5JRG9nYm1GdFpYMGdibTkwSUdSbFptbHVaV1JnS1R0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElGUmxjM1JQY0hScGIyNXpJSHRjYmlBZ2RHbHRaVzkxZEQ4NklHNTFiV0psY2p0Y2JpQWdkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnYzJ0cGNGSmxZWE52Ymo4NklITjBjbWx1Wnp0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGUmxjM1JEYjI1MFpYaDBJSHRjYmlBZ1kyRjBZMmhWYm1oaGJtUnNaV1FnUFNCMGNuVmxPMXh1SUNCeVpYQnZjblFnUFNCbVlXeHpaVHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhqWVhSamFGVnVhR0Z1Wkd4bFpEODZJR0p2YjJ4bFlXNHNJSEpsY0c5eWREODZJR0p2YjJ4bFlXNHBJSHRjYmlBZ0lDQnBaaUFvWTJGMFkyaFZibWhoYm1Sc1pXUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjeTVqWVhSamFGVnVhR0Z1Wkd4bFpDQTlJR05oZEdOb1ZXNW9ZVzVrYkdWa08xeHVJQ0FnSUdsbUlDaHlaWEJ2Y25RZ0lUMDlJSFZ1WkdWbWFXNWxaQ2tnZEdocGN5NXlaWEJ2Y25RZ1BTQnlaWEJ2Y25RN1hHNGdJSDA3WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVVpYTjBJSHRjYmlBZ2RHVnpkRG9nS0NrZ1BUNGdVSEp2YldselpUeGhibmsrTzF4dUlDQnVZVzFsT2lCemRISnBibWM3WEc0Z0lHTmhkR1ZuYjNKNU9pQnpkSEpwYm1jN1hHNGdJRzl3ZEdsdmJuTS9PaUJVWlhOMFQzQjBhVzl1Y3p0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loallYUmxaMjl5ZVRvZ2MzUnlhVzVuTENCdVlXMWxPaUJ6ZEhKcGJtY3NJSFJsYzNRNklDZ3BJRDArSUZCeWIyMXBjMlU4WVc1NVBpd2diM0IwYVc5dWN6ODZJRlJsYzNSUGNIUnBiMjV6S1NCN1hHNGdJQ0FnZEdocGN5NWpZWFJsWjI5eWVTQTlJR05oZEdWbmIzSjVPMXh1SUNBZ0lIUm9hWE11Ym1GdFpTQTlJRzVoYldVN1hHNGdJQ0FnYjNCMGFXOXVjeUEvUHowZ2UzMDdYRzRnSUNBZ2IzQjBhVzl1Y3k1MGFXMWxiM1YwSUQ4L1BTQXpNREF3TUR0Y2JpQWdJQ0IwYUdsekxtOXdkR2x2Ym5NZ1BTQnZjSFJwYjI1ek8xeHVJQ0FnSUhSb2FYTXVkR1Z6ZENBOUlHRnplVzVqSUNncE9pQlFjbTl0YVhObFBHRnVlVDRnUFQ0Z2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiR1YwSUhKbGMzVnNkQ0E5SUNjbk8xeHVJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlHRjNZV2wwSUhSbGMzUW9LVHRjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlRvZ1lXNTVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnFaV04wS0dVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9jbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMDdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlIUmxjM1JGZG1WdWREeFVQaWhsZG1WdWREb2dUMkp6WlhKMllXSnNaVHhVUGl4Y2JpQWdhR0Z1Wkd4bGNqb2dLR0Z5WjNNNklGUXBJRDArSUhadmFXUXNJSFJ5YVdkblpYSTZJQ2dwSUQwK0lIWnZhV1FzSUcxek9pQnVkVzFpWlhJZ1BTQXdLVG9nVUhKdmJXbHpaVHh6ZEhKcGJtYytJSHRjYmlBZ2JHVjBJSE4xWWpvZ1UzVmljMk55YVhCMGFXOXVPMXh1SUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lITjFZaUE5SUdWMlpXNTBMbk4xWW5OamNtbGlaU2dvWVhKbmN5a2dQVDRnZTF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdhR0Z1Wkd4bGNpaGhjbWR6S1R0Y2JpQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjM1ZpTG5WdWMzVmljMk55YVdKbEtDazdYRzRnSUNBZ0lDQnlaWE52YkhabEtDZFBTeWNwTzF4dUlDQWdJSDBwTzF4dUlDQWdJSE5sZEZScGJXVnZkWFFvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdjM1ZpTG5WdWMzVmljMk55YVdKbEtDazdYRzRnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdjSEpsWm1WeUxYQnliMjFwYzJVdGNtVnFaV04wTFdWeWNtOXljMXh1SUNBZ0lDQWdjbVZxWldOMEtDZDBhVzFsYjNWMEp5azdYRzRnSUNBZ2ZTd2diWE1wTzF4dUlDQWdJSFJ5YVdkblpYSW9LVHRjYmlBZ2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMFpYTjBLRzVoYldVNklITjBjbWx1Wnl3Z2RHVnpkRG9nS0NrZ1BUNGdVSEp2YldselpUeGhibmsrTENCdmNIUnBiMjV6UHpvZ1ZHVnpkRTl3ZEdsdmJuTXBPaUIyYjJsa0lIdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFQwZ2RXNWtaV1pwYm1Wa0tWeHVJQ0FnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMGdQU0I3ZlR0Y2JpQWdhV1lnS0hSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVkR1Z6ZEhNZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQU0JiWFR0Y2JpQWdkR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFM1MFpYTjBjeUV1Y0hWemFDaHVaWGNnVkdWemRDaGpkWEp5Wlc1MFEyRjBaV2R2Y25rc0lHNWhiV1VzSUhSbGMzUXNJRzl3ZEdsdmJuTXBLVHRjYm4xY2JseHVMeW9nVkdWemRITWdkSGR2SUc5aWFtVmpkSE1nWm05eUlHVnhkV0ZzYVhSNUxDQjBhSEp2ZDNNZ1lXNGdaWGhqWlhCMGFXOXVJR2xtSUhSb1pYa2dZWEpsSUc1dmRDQmxjWFZoYkM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNRb1lXTjBkV0ZzT2lCaGJua3NJR1Y0Y0dWamRHVmtPaUJoYm5rZ1BTQjBjblZsTENCbGNuSnZjajg2SUhOMGNtbHVaeWs2SUhadmFXUWdlMXh1SUNCcFppQW9aWEp5YjNJcFhHNGdJQ0FnWlhKeWIzSWdQU0JnSkh0bGNuSnZjbjBzSUdBN1hHNGdJR1ZzYzJVZ1pYSnliM0lnUFNBbkp6dGNiaUFnYVdZZ0tHRmpkSFZoYkNBaFBUMGdaWGh3WldOMFpXUXBYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dBa2UyVnljbTl5ZlVWNGNHVmpkR1ZrSUZ3aUpIdGxlSEJsWTNSbFpIMWNJaXdnWjI5MElGd2lKSHRoWTNSMVlXeDlYQ0pnS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRFWnNiMkYwS0dGamRIVmhiRG9nYm5WdFltVnlMQ0JsZUhCbFkzUmxaRG9nYm5WdFltVnlMQ0IwYjJ4bGNtRnVZMlVnUFNBd0xqQXdNU3dnWlhKeWIzSS9PaUJ6ZEhKcGJtY3BPaUIyYjJsa0lIdGNiaUFnYVdZZ0tDaGhZM1IxWVd3Z1BUMDlJRTUxYldKbGNpNVFUMU5KVkVsV1JWOUpUa1pKVGtsVVdTQW1KaUJsZUhCbFkzUmxaQ0E5UFQwZ1RuVnRZbVZ5TGxCUFUwbFVTVlpGWDBsT1JrbE9TVlJaS1NCOGZGeHVJQ0FnSUNBZ0tHRmpkSFZoYkNBOVBUMGdUblZ0WW1WeUxrNUZSMEZVU1ZaRlgwbE9Sa2xPU1ZSWklDWW1JR1Y0Y0dWamRHVmtJRDA5UFNCT2RXMWlaWEl1VGtWSFFWUkpWa1ZmU1U1R1NVNUpWRmtwSUh4OFhHNGdJQ0FnSUNBb1lXTjBkV0ZzSUQwOVBTQk9kVzFpWlhJdVRtRk9JQ1ltSUdWNGNHVmpkR1ZrSUQwOVBTQk9kVzFpWlhJdVRtRk9LU0I4ZkNBb2FYTk9ZVTRvWVdOMGRXRnNLU0FtSmlCcGMwNWhUaWhsZUhCbFkzUmxaQ2twS1Z4dUlDQWdJSEpsZEhWeWJqdGNiaUFnWTI5dWMzUWdZWEpsUlhGMVlXd2dQU0JOWVhSb0xtRmljeWhoWTNSMVlXd2dMU0JsZUhCbFkzUmxaQ2tnUENCMGIyeGxjbUZ1WTJVN1hHNGdJR1Y0Y0dWamRDaGhjbVZGY1hWaGJDd2dkSEoxWlN3Z1lDUjdaWEp5YjNJZ1B6OGdKeWQ5SUNoMGIyeGxjbUZ1WTJVZ1BTQWtlM1J2YkdWeVlXNWpaWDBwWUNrN1hHNGdJR2xtSUNnaFlYSmxSWEYxWVd3cFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JGZUhCbFkzUmxaQ0FrZTJWNGNHVmpkR1ZrZlN3Z1oyOTBJQ1I3WVdOMGRXRnNmU0FvZEc5c1pYSmhibU5sSUQwZ0pIdDBiMnhsY21GdVkyVjlLV0FwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWGh3WldOMFZHRmliR1VvWVdOMGRXRnNPaUJFWVhSaFJuSmhiV1VzSUdWNGNHVmpkR1ZrT2lCRVlYUmhSbkpoYldVc0lHVnljbTl5UHpvZ2MzUnlhVzVuS1RvZ2RtOXBaQ0I3WEc0Z0lHTnZibk4wSUdWNGNHVmpkR1ZrVW05M1EyOTFiblFnUFNCbGVIQmxZM1JsWkM1eWIzZERiM1Z1ZER0Y2JpQWdZMjl1YzNRZ1lXTjBkV0ZzVW05M1EyOTFiblFnUFNCaFkzUjFZV3d1Y205M1EyOTFiblE3WEc0Z0lHVjRjR1ZqZENoaFkzUjFZV3hTYjNkRGIzVnVkQ3dnWlhod1pXTjBaV1JTYjNkRGIzVnVkQ3dnWUNSN1pYSnliM0lnUHo4Z0p5ZDlMQ0J5YjNjZ1kyOTFiblJnS1R0Y2JseHVJQ0JtYjNJZ0tHTnZibk4wSUdOdmJIVnRiaUJ2WmlCbGVIQmxZM1JsWkM1amIyeDFiVzV6S1NCN1hHNGdJQ0FnWTI5dWMzUWdZV04wZFdGc1EyOXNkVzF1SUQwZ1lXTjBkV0ZzTG1OdmJIVnRibk11WW5sT1lXMWxLR052YkhWdGJpNXVZVzFsS1R0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzUTI5c2RXMXVJRDA5SUc1MWJHd3BYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFTnZiSFZ0YmlBa2UyTnZiSFZ0Ymk1dVlXMWxmU0J1YjNRZ1ptOTFibVJnS1R0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzUTI5c2RXMXVMblI1Y0dVZ0lUMGdZMjlzZFcxdUxuUjVjR1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YkhWdGJpQWtlMk52YkhWdGJpNXVZVzFsZlNCMGVYQmxJR1Y0Y0dWamRHVmtJQ1I3WTI5c2RXMXVMblI1Y0dWOUlHZHZkQ0FrZTJGamRIVmhiRU52YkhWdGJpNTBlWEJsZldBcE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pYaHdaV04wWldSU2IzZERiM1Z1ZERzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQjJZV3gxWlNBOUlHTnZiSFZ0Ymk1blpYUW9hU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRU52YkhWdGJpNW5aWFFvYVNrN1hHNGdJQ0FnSUNCcFppQW9ZMjlzZFcxdUxuUjVjR1VnUFQwZ1JFY3VWRmxRUlM1R1RFOUJWQ2xjYmlBZ0lDQWdJQ0FnWlhod1pXTjBSbXh2WVhRb1lXTjBkV0ZzVm1Gc2RXVXNJSFpoYkhWbExDQXdMakF3TURFc0lHVnljbTl5S1R0Y2JpQWdJQ0FnSUdWc2MyVWdhV1lnS0dOdmJIVnRiaTUwZVhCbElEMDlJRVJITGxSWlVFVXVSRUZVUlY5VVNVMUZLVnh1SUNBZ0lDQWdJQ0JsZUhCbFkzUW9ZV04wZFdGc1ZtRnNkV1V1YVhOVFlXMWxLSFpoYkhWbEtTd2dkSEoxWlN3Z1pYSnliM0lwTzF4dUlDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQmxlSEJsWTNRb1lXTjBkV0ZzVm1Gc2RXVXNJSFpoYkhWbExDQmxjbkp2Y2lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbGVIQmxZM1JQWW1wbFkzUW9ZV04wZFdGc09pQjdJRnRyWlhrNklITjBjbWx1WjEwNklHRnVlU0I5TENCbGVIQmxZM1JsWkRvZ2V5QmJhMlY1T2lCemRISnBibWRkT2lCaGJua2dmU2tnZTF4dUlDQm1iM0lnS0dOdmJuTjBJRnRsZUhCbFkzUmxaRXRsZVN3Z1pYaHdaV04wWldSV1lXeDFaVjBnYjJZZ1QySnFaV04wTG1WdWRISnBaWE1vWlhod1pXTjBaV1FwS1NCN1hHNGdJQ0FnYVdZZ0tDRmhZM1IxWVd3dWFHRnpUM2R1VUhKdmNHVnlkSGtvWlhod1pXTjBaV1JMWlhrcEtWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNCd2NtOXdaWEowZVNCY0lpUjdaWGh3WldOMFpXUkxaWGw5WENJZ2JtOTBJR1p2ZFc1a1lDazdYRzVjYmlBZ0lDQmpiMjV6ZENCaFkzUjFZV3hXWVd4MVpTQTlJR0ZqZEhWaGJGdGxlSEJsWTNSbFpFdGxlVjA3WEc0Z0lDQWdhV1lnS0dGamRIVmhiRlpoYkhWbElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdaWGh3WldOMFpXUldZV3gxWlNCcGJuTjBZVzVqWlc5bUlFRnljbUY1S1Z4dUlDQWdJQ0FnWlhod1pXTjBRWEp5WVhrb1lXTjBkV0ZzVm1Gc2RXVXNJR1Y0Y0dWamRHVmtWbUZzZFdVcE8xeHVJQ0FnSUdWc2MyVWdhV1lnS0dGamRIVmhiRlpoYkhWbElHbHVjM1JoYm1ObGIyWWdUMkpxWldOMElDWW1JR1Y0Y0dWamRHVmtWbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQlBZbXBsWTNRcFhHNGdJQ0FnSUNCbGVIQmxZM1JQWW1wbFkzUW9ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tFNTFiV0psY2k1cGMwWnBibWwwWlNoaFkzUjFZV3hXWVd4MVpTa2dKaVlnVG5WdFltVnlMbWx6Um1sdWFYUmxLR1Y0Y0dWamRHVmtWbUZzZFdVcEtWeHVJQ0FnSUNBZ1pYaHdaV04wUm14dllYUW9ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJQ0U5SUdWNGNHVmpkR1ZrVm1Gc2RXVXBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lDZ2tlMlY0Y0dWamRHVmtWbUZzZFdWOUtTQm1iM0lnYTJWNUlDY2tlMlY0Y0dWamRHVmtTMlY1ZlNjc0lHZHZkQ0FvSkh0aFkzUjFZV3hXWVd4MVpYMHBZQ2s3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRUZ5Y21GNUtHRmpkSFZoYkRvZ1FYSnlZWGxNYVd0bFBHRnVlVDRzSUdWNGNHVmpkR1ZrT2lCQmNuSmhlVXhwYTJVOFlXNTVQaWtnZTF4dUlDQmpiMjV6ZENCaFkzUjFZV3hNWlc1bmRHZ2dQU0JoWTNSMVlXd3ViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQmxlSEJsWTNSbFpFeGxibWQwYUNBOUlHVjRjR1ZqZEdWa0xteGxibWQwYUR0Y2JseHVJQ0JwWmlBb1lXTjBkV0ZzVEdWdVozUm9JQ0U5SUdWNGNHVmpkR1ZrVEdWdVozUm9LU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkJjbkpoZVhNZ1lYSmxJRzltSUdScFptWmxjbVZ1ZENCc1pXNW5kR2c2SUdGamRIVmhiQ0JoY25KaGVTQnNaVzVuZEdnZ2FYTWdKSHRoWTNSMVlXeE1aVzVuZEdoOUlHQWdLMXh1SUNBZ0lDQWdZR0Z1WkNCbGVIQmxZM1JsWkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0bGVIQmxZM1JsWkV4bGJtZDBhSDFnS1R0Y2JpQWdmVnh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZV04wZFdGc1RHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvWVdOMGRXRnNXMmxkSUdsdWMzUmhibU5sYjJZZ1FYSnlZWGtnSmlZZ1pYaHdaV04wWldSYmFWMGdhVzV6ZEdGdVkyVnZaaUJCY25KaGVTbGNiaUFnSUNBZ0lHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJGdHBYU3dnWlhod1pXTjBaV1JiYVYwcE8xeHVJQ0FnSUdWc2MyVWdhV1lnS0dGamRIVmhiRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENBbUppQmxlSEJsWTNSbFpGdHBYU0JwYm5OMFlXNWpaVzltSUU5aWFtVmpkQ2xjYmlBZ0lDQWdJR1Y0Y0dWamRFOWlhbVZqZENoaFkzUjFZV3hiYVYwc0lHVjRjR1ZqZEdWa1cybGRLVHRjYmlBZ0lDQmxiSE5sSUdsbUlDaGhZM1IxWVd4YmFWMGdJVDBnWlhod1pXTjBaV1JiYVYwcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUNSN1pYaHdaV04wWldSYmFWMTlJR0YwSUhCdmMybDBhVzl1SUNSN2FYMHNJR2R2ZENBa2UyRmpkSFZoYkZ0cFhYMWdLVHRjYmlBZ2ZWeHVmVnh1WEc0dktpQkVaV1pwYm1WeklHRWdkR1Z6ZENCemRXbDBaUzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCallYUmxaMjl5ZVNoallYUmxaMjl5ZVRvZ2MzUnlhVzVuTENCMFpYTjBjem9nS0NrZ1BUNGdkbTlwWkNrNklIWnZhV1FnZTF4dUlDQmpkWEp5Wlc1MFEyRjBaV2R2Y25rZ1BTQmpZWFJsWjI5eWVUdGNiaUFnZEdWemRITW9LVHRjYm4xY2JseHVMeW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0psWm05eVpTQjBhR1VnZEdWemRITWdhVzRnZEdocGN5QmpZWFJsWjI5eWVTQmhjbVVnWlhobFkzVjBaV1F1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1ltVm1iM0psS0dKbFptOXlaVG9nS0NrZ1BUNGdVSEp2YldselpUeDJiMmxrUGlrNklIWnZhV1FnZTF4dUlDQnBaaUFvZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlQU0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdkR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOUlIdDlPMXh1SUNCMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRMbUpsWm05eVpTQTlJR0psWm05eVpUdGNibjFjYmx4dUx5b2dSR1ZtYVc1bGN5QmhJR1oxYm1OMGFXOXVJSFJ2SUdKbElHVjRaV04xZEdWa0lHRm1kR1Z5SUhSb1pTQjBaWE4wY3lCcGJpQjBhR2x6SUdOaGRHVm5iM0o1SUdGeVpTQmxlR1ZqZFhSbFpDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoWm5SbGNpaGhablJsY2pvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1GbWRHVnlJRDBnWVdaMFpYSTdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHRmtaRTVoYldWemNHRmpaU2h6T2lCemRISnBibWNzSUdZNklFUkhMa1oxYm1NcE9pQnpkSEpwYm1jZ2UxeHVJQ0J5WlhSMWNtNGdjeTV5WlhCc1lXTmxLRzVsZHlCU1pXZEZlSEFvWmk1dVlXMWxMQ0FuWjJrbktTd2daaTV1Y1U1aGJXVXBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1lYTjVibU1nWm5WdVkzUnBiMjRnYVc1cGRFRjFkRzlVWlhOMGN5aHdZV05yWVdkbFNXUTZJSE4wY21sdVp5d2diVzlrZFd4bFB6b2dZVzU1S1NCN1hHNGdJR2xtSUNoM1lYTlNaV2RwYzNSbGNtVmtXM0JoWTJ0aFoyVkpaRjBwSUhKbGRIVnlianRjYmlBZ1kyOXVjM1FnYlc5a2RXeGxWR1Z6ZEhNZ1BTQnRiMlIxYkdVZ1B5QnRiMlIxYkdVdWRHVnpkSE1nT2lCMFpYTjBjenRjYmlBZ2FXWWdLRzF2WkhWc1pWUmxjM1J6VzJGMWRHOVVaWE4wYzBOaGRFNWhiV1ZkSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQjNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwZ1BTQjBjblZsTzF4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dUlDQmpiMjV6ZENCdGIyUjFiR1ZCZFhSdlZHVnpkSE1nUFNCYlhUdGNiaUFnWTI5dWMzUWdjR0ZqYTBaMWJtTjBhVzl1Y3lBOUlHRjNZV2wwSUdkeWIyc3VaR0Z3YVM1bWRXNWpkR2x2Ym5NdVptbHNkR1Z5S0dCd1lXTnJZV2RsTG1sa0lEMGdYQ0lrZTNCaFkydGhaMlZKWkgxY0ltQXBMbXhwYzNRb0tUdGNiaUFnWTI5dWMzUWdjbVZuSUQwZ2JtVjNJRkpsWjBWNGNDZ3ZMaXBjWEM5Y1hDOWNYSE1xYzJ0cGNGczZYRnh6WFNvb0xpb3BKQzhwTzF4dUlDQm1iM0lnS0dOdmJuTjBJR1lnYjJZZ2NHRmphMFoxYm1OMGFXOXVjeWtnZTF4dUlDQWdJR052Ym5OMElIUmxjM1J6SUQwZ1ppNXZjSFJwYjI1eld5ZDBaWE4wSjEwN1hHNGdJQ0FnYVdZZ0tDRW9kR1Z6ZEhNZ0ppWWdRWEp5WVhrdWFYTkJjbkpoZVNoMFpYTjBjeWtnSmlZZ2RHVnpkSE11YkdWdVozUm9LU2tnWTI5dWRHbHVkV1U3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwWlhOMGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjMnRwY0ZKbFlYTnZibk1nUFNBb2RHVnpkSE5iYVYwZ1lYTWdjM1J5YVc1bktTNXRZWFJqYUNoeVpXY3BPMXh1SUNBZ0lDQWdiR1YwSUhOcmFYQlNaV0Z6YjI0N1hHNGdJQ0FnSUNCcFppQW9jMnRwY0ZKbFlYTnZibk1nSmlZZ2MydHBjRkpsWVhOdmJuTS9MbXhsYm1kMGFDQStJREVwSUhOcmFYQlNaV0Z6YjI0Z1BTQnphMmx3VW1WaGMyOXVjMXN4WFR0Y2JpQWdJQ0FnSUcxdlpIVnNaVUYxZEc5VVpYTjBjeTV3ZFhOb0tHNWxkeUJVWlhOMEtHRjFkRzlVWlhOMGMwTmhkRTVoYldVc0lIUmxjM1J6TG14bGJtZDBhQ0E5UFQwZ01TQS9JR1l1Ym1GdFpTQTZJR0FrZTJZdWJtRnRaWDBnSkh0cElDc2dNWDFnTENCaGMzbHVZeUFvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxjeUE5SUdGM1lXbDBJR2R5YjJzdVpuVnVZM1JwYjI1ekxtVjJZV3dvWVdSa1RtRnRaWE53WVdObEtIUmxjM1J6VzJsZExDQm1LU2s3WEc0Z0lDQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MTBhSEp2ZHkxc2FYUmxjbUZzWEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWE1nSVQwOUlIUnlkV1VwSUhSb2NtOTNJR0JHWVdsc1pXUTZJQ1I3ZEdWemRITmJhVjE5WUR0Y2JpQWdJQ0FnSUgwc0lIdHphMmx3VW1WaGMyOXVPaUJ6YTJsd1VtVmhjMjl1ZlNrcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCM1lYTlNaV2RwYzNSbGNtVmtXM0JoWTJ0aFoyVkpaRjBnUFNCMGNuVmxPMXh1SUNCcFppQW9JVzF2WkhWc1pVRjFkRzlVWlhOMGN5NXNaVzVuZEdncElISmxkSFZ5Ymp0Y2JpQWdiVzlrZFd4bFZHVnpkSE5iWVhWMGIxUmxjM1J6UTJGMFRtRnRaVjBnUFNCN2RHVnpkSE02SUcxdlpIVnNaVUYxZEc5VVpYTjBjMzA3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCeWRXNVVaWE4wY3lodmNIUnBiMjV6UHpvZ2UyTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQjBaWE4wUHpvZ2MzUnlhVzVuTENCMFpYTjBRMjl1ZEdWNGREODZJRlJsYzNSRGIyNTBaWGgwZlNrZ2UxeHVJQ0JqYjI1emRDQndZV05yWVdkbFh5QTlJR2R5YjJzdVpuVnVZM1JwYjI1ekxtZGxkRU4xY25KbGJuUkRZV3hzS0NrL0xtWjFibU0vTG5CaFkydGhaMlU3WEc0Z0lHRjNZV2wwSUdsdWFYUkJkWFJ2VkdWemRITW9jR0ZqYTJGblpWOHVhV1FwTzF4dUlDQmpiMjV6ZENCeVpYTjFiSFJ6T2lCN0lHTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQnVZVzFsUHpvZ2MzUnlhVzVuTENCemRXTmpaWE56T2lCaWIyOXNaV0Z1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjM1ZzZERvZ2MzUnlhVzVuTENCdGN6b2diblZ0WW1WeUxDQnphMmx3Y0dWa09pQmliMjlzWldGdUlIMWJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emIyeGxMbXh2WnloZ1VuVnVibWx1WnlCMFpYTjBjMkFwTzF4dUlDQnZjSFJwYjI1eklEOC9QU0I3ZlR0Y2JpQWdiM0IwYVc5dWN5RXVkR1Z6ZEVOdmJuUmxlSFFnUHo4OUlHNWxkeUJVWlhOMFEyOXVkR1Y0ZENncE8xeHVJQ0JuY205ckxuTm9aV3hzTG14aGMzUkZjbkp2Y2lBOUlDY25PMXh1SUNCbWIzSWdLR052Ym5OMElGdHJaWGtzSUhaaGJIVmxYU0J2WmlCUFltcGxZM1F1Wlc1MGNtbGxjeWgwWlhOMGN5a3BJSHRjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjejh1WTJGMFpXZHZjbmtnSVQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvSVd0bGVTNTBiMHh2ZDJWeVEyRnpaU2dwTG5OMFlYSjBjMWRwZEdnb2IzQjBhVzl1Y3o4dVkyRjBaV2R2Y25rdWRHOU1iM2RsY2tOaGMyVW9LU2twWEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6YjJ4bExteHZaeWhnVTNSaGNuUmxaQ0FrZTJ0bGVYMGdZMkYwWldkdmNubGdLVHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnYVdZZ0tIWmhiSFZsTG1KbFptOXlaU2xjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkbUZzZFdVdVltVm1iM0psS0NrN1hHNGdJQ0FnZlNCallYUmphQ0FvZURvZ1lXNTVLU0I3WEc0Z0lDQWdJQ0IyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1nUFNCNExuUnZVM1J5YVc1bktDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJSFFnUFNCMllXeDFaUzUwWlhOMGN5QS9QeUJiWFR0Y2JpQWdJQ0JqYjI1emRDQnlaWE1nUFNCYlhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0J5WlhNdWNIVnphQ2hoZDJGcGRDQmxlR1ZqVkdWemRDaDBXMmxkTENCdmNIUnBiMjV6UHk1MFpYTjBLU2s3WEc0Z0lDQWdZMjl1YzNRZ1pHRjBZU0E5SUNoaGQyRnBkQ0JRY205dGFYTmxMbUZzYkNoeVpYTXBLUzVtYVd4MFpYSW9LR1FwSUQwK0lHUXVjbVZ6ZFd4MElDRTlJQ2R6YTJsd2NHVmtKeWs3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlM1aFpuUmxjaWxjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkbUZzZFdVdVlXWjBaWElvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2g0T2lCaGJua3BJSHRjYmlBZ0lDQWdJSFpoYkhWbExtRm1kR1Z5VTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RtRnNkV1V1WVdaMFpYSlRkR0YwZFhNcFhHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2UyTmhkR1ZuYjNKNU9pQnJaWGtzSUc1aGJXVTZJQ2RwYm1sMEp5d2djbVZ6ZFd4ME9pQjJZV3gxWlM1aFpuUmxjbE4wWVhSMWN5d2djM1ZqWTJWemN6b2dabUZzYzJVc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCbVlXeHpaWDBwTzF4dUlDQWdJR2xtSUNoMllXeDFaUzVpWldadmNtVlRkR0YwZFhNcFhHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2UyTmhkR1ZuYjNKNU9pQnJaWGtzSUc1aGJXVTZJQ2RwYm1sMEp5d2djbVZ6ZFd4ME9pQjJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXNJSE4xWTJObGMzTTZJR1poYkhObExDQnRjem9nTUN3Z2MydHBjSEJsWkRvZ1ptRnNjMlY5S1R0Y2JpQWdJQ0J5WlhOMWJIUnpMbkIxYzJnb0xpNHVaR0YwWVNrN1hHNGdJSDFjYmlBZ2FXWWdLRzl3ZEdsdmJuTXVkR1Z6ZEVOdmJuUmxlSFF1WTJGMFkyaFZibWhoYm1Sc1pXUXBJSHRjYmlBZ0lDQmhkMkZwZENCa1pXeGhlU2d4TURBd0tUdGNiaUFnSUNCcFppQW9aM0p2YXk1emFHVnNiQzVzWVhOMFJYSnliM0l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ2NtVnpkV3gwY3k1d2RYTm9LSHRjYmlBZ0lDQWdJQ0FnWTJGMFpXZHZjbms2SUNkVmJtaGhibVJzWldRZ1pYaGpaWEIwYVc5dWN5Y3NYRzRnSUNBZ0lDQWdJRzVoYldVNklDZGxlR05sY0hScGIyNXpKeXhjYmlBZ0lDQWdJQ0FnY21WemRXeDBPaUJuY205ckxuTm9aV3hzTG14aGMzUkZjbkp2Y2l3Z2MzVmpZMlZ6Y3pvZ1ptRnNjMlVzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUJtWVd4elpWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lHbG1JQ2h2Y0hScGIyNXpMblJsYzNSRGIyNTBaWGgwTG5KbGNHOXlkQ2tnZTF4dUlDQWdJR052Ym5OMElHeHZaMmRsY2lBOUlHNWxkeUJFUnk1TWIyZG5aWElvS1R0Y2JpQWdJQ0JqYjI1emRDQnpkV05qWlhOelpuVnNJRDBnY21WemRXeDBjeTVtYVd4MFpYSW9LSElwSUQwK0lISXVjM1ZqWTJWemN5a3ViR1Z1WjNSb08xeHVJQ0FnSUdOdmJuTjBJSE5yYVhCd1pXUWdQU0J5WlhOMWJIUnpMbVpwYkhSbGNpZ29jaWtnUFQ0Z2NpNXphMmx3Y0dWa0tTNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdabUZwYkdWa0lEMGdjbVZ6ZFd4MGN5NW1hV3gwWlhJb0tISXBJRDArSUNGeUxuTjFZMk5sYzNNcE8xeHVJQ0FnSUdOdmJuTjBJR1JsYzJOeWFYQjBhVzl1SUQwZ0oxQmhZMnRoWjJVZ1FIQmhZMnRoWjJVZ2RHVnpkR1ZrT2lCQWMzVmpZMlZ6YzJaMWJDQnpkV05qWlhOelpuVnNMQ0JBYzJ0cGNIQmxaQ0J6YTJsd2NHVmtMQ0JBWm1GcGJHVmtJR1poYVd4bFpDQjBaWE4wY3ljN1hHNGdJQ0FnWTI5dWMzUWdjR0Z5WVcxeklEMGdlMXh1SUNBZ0lDQWdjM1ZqWTJWemMyWjFiRG9nYzNWalkyVnpjMloxYkN4Y2JpQWdJQ0FnSUhOcmFYQndaV1E2SUhOcmFYQndaV1FzWEc0Z0lDQWdJQ0JtWVdsc1pXUTZJR1poYVd4bFpDNXNaVzVuZEdnc1hHNGdJQ0FnSUNCd1lXTnJZV2RsT2lCd1lXTnJZV2RsWDF4dUlDQWdJSDA3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0J5SUc5bUlHWmhhV3hsWkNrZ1QySnFaV04wTG1GemMybG5iaWh3WVhKaGJYTXNJSHRiWUNSN2NpNWpZWFJsWjI5eWVYMGdmQ0FrZTNJdWJtRnRaWDFnWFRvZ2NpNXlaWE4xYkhSOUtUdGNiaUFnSUNCc2IyZG5aWEl1Ykc5bktHUmxjMk55YVhCMGFXOXVMQ0J3WVhKaGJYTXNJQ2R3WVdOcllXZGxMWFJsYzNSbFpDY3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnlaWE4xYkhSek8xeHVmVnh1WEc1aGMzbHVZeUJtZFc1amRHbHZiaUJsZUdWalZHVnpkQ2gwT2lCVVpYTjBMQ0J3Y21Wa2FXTmhkR1U2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0JzWlhRZ2Nqb2dleUJqWVhSbFoyOXllVDg2SUhOMGNtbHVaeXdnYm1GdFpUODZJSE4wY21sdVp5d2djM1ZqWTJWemN6b2dZbTl2YkdWaGJpd2djbVZ6ZFd4ME9pQnpkSEpwYm1jc0lHMXpPaUJ1ZFcxaVpYSXNJSE5yYVhCd1pXUTZJR0p2YjJ4bFlXNGdmVHRjYmlBZ1kyOXVjM1FnWm1sc2RHVnlJRDBnY0hKbFpHbGpZWFJsSUNFOUlIVnVaR1ZtYVc1bFpDQW1KaUFvSVhRdWJtRnRaUzUwYjB4dmQyVnlRMkZ6WlNncExuTjBZWEowYzFkcGRHZ29jSEpsWkdsallYUmxMblJ2VEc5M1pYSkRZWE5sS0NrcEtUdGNiaUFnWTI5dWMzUWdjMnRwY0NBOUlIUXViM0IwYVc5dWN6OHVjMnRwY0ZKbFlYTnZiaUI4ZkNCbWFXeDBaWEk3WEc0Z0lHTnZibk4wSUhOcmFYQlNaV0Z6YjI0Z1BTQm1hV3gwWlhJZ1B5QW5jMnRwY0hCbFpDY2dPaUIwTG05d2RHbHZibk0vTG5OcmFYQlNaV0Z6YjI0N1hHNGdJR2xtSUNnaGMydHBjQ2xjYmlBZ0lDQmpiMjV6YjJ4bExteHZaeWhnVTNSaGNuUmxaQ0FrZTNRdVkyRjBaV2R2Y25sOUlDUjdkQzV1WVcxbGZXQXBPMXh1SUNCamIyNXpkQ0J6ZEdGeWRDQTlJRzVsZHlCRVlYUmxLQ2s3WEc0Z0lIUnllU0I3WEc0Z0lDQWdhV1lnS0hOcmFYQXBYRzRnSUNBZ0lDQnlJRDBnZTNOMVkyTmxjM002SUhSeWRXVXNJSEpsYzNWc2REb2djMnRwY0ZKbFlYTnZiaUVzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUIwY25WbGZUdGNiaUFnSUNCbGJITmxYRzRnSUNBZ0lDQnlJRDBnZTNOMVkyTmxjM002SUhSeWRXVXNJSEpsYzNWc2REb2dZWGRoYVhRZ2RDNTBaWE4wS0NrZ1B6OGdKMDlMSnl3Z2JYTTZJREFzSUhOcmFYQndaV1E2SUdaaGJITmxmVHRjYmlBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQm1ZV3h6WlN3Z2NtVnpkV3gwT2lCNExuUnZVM1J5YVc1bktDa3NJRzF6T2lBd0xDQnphMmx3Y0dWa09pQm1ZV3h6WlgwN1hHNGdJSDFjYmlBZ1kyOXVjM1FnYzNSdmNDQTlJRzVsZHlCRVlYUmxLQ2s3WEc0Z0lDOHZJRUIwY3kxcFoyNXZjbVZjYmlBZ2NpNXRjeUE5SUhOMGIzQWdMU0J6ZEdGeWREdGNiaUFnYVdZZ0tDRnphMmx3S1Z4dUlDQWdJR052Ym5OdmJHVXViRzluS0dCR2FXNXBjMmhsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmU0JtYjNJZ0pIdHlMbTF6ZlNCdGMyQXBPMXh1SUNCeUxtTmhkR1ZuYjNKNUlEMGdkQzVqWVhSbFoyOXllVHRjYmlBZ2NpNXVZVzFsSUQwZ2RDNXVZVzFsTzF4dUlDQnlaWFIxY200Z2NqdGNibjFjYmx4dUx5b2dWMkZwZEhNZ1cyMXpYU0J0YVd4c2FYTmxZMjl1WkhNZ0tpOWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCa1pXeGhlU2h0Y3pvZ2JuVnRZbVZ5S1NCN1hHNGdJR0YzWVdsMElHNWxkeUJRY205dGFYTmxLQ2h5S1NBOVBpQnpaWFJVYVcxbGIzVjBLSElzSUcxektTazdYRzU5WEc1Y2JtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJoZDJGcGRFTm9aV05yS0dOb1pXTnJTR0Z1Wkd4bGNqb2dLQ2tnUFQ0Z1ltOXZiR1ZoYml4Y2JpQWdaWEp5YjNJNklITjBjbWx1WnlBOUlDZFVhVzFsYjNWMElHVjRZMlZsWkdWa0p5d2dkMkZwZERvZ2JuVnRZbVZ5SUQwZ05UQXdMQ0JwYm5SbGNuWmhiRG9nYm5WdFltVnlJRDBnTlRBcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0J6WlhSVWFXMWxiM1YwS0NncElEMCtJSHRjYmlBZ0lDQWdJR05zWldGeVNXNTBaWEoyWVd3b2FXNTBaWEoyWVd4SlpDazdYRzRnSUNBZ0lDQnlaV3BsWTNRb2JtVjNJRVZ5Y205eUtHVnljbTl5S1NrN1hHNGdJQ0FnZlN3Z2QyRnBkQ2s3WEc0Z0lDQWdMeThnUUhSekxXbG5ibTl5WlZ4dUlDQWdJR052Ym5OMElHbHVkR1Z5ZG1Gc1NXUTZJRlJwYldWdmRYUWdQU0J6WlhSSmJuUmxjblpoYkNnb0tTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb1kyaGxZMnRJWVc1a2JHVnlLQ2twSUh0Y2JpQWdJQ0FnSUNBZ1kyeGxZWEpKYm5SbGNuWmhiQ2hwYm5SbGNuWmhiRWxrS1R0Y2JpQWdJQ0FnSUNBZ2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwc0lHbHVkR1Z5ZG1Gc0tUdGNiaUFnZlNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzBScFlXeHZaMUJ5WlhObGJuUW9aR2xoYkc5blZHbDBiR1U2SUhOMGNtbHVaeWs2SUdKdmIyeGxZVzRnZTF4dUlDQmpiMjV6ZENCa2FXRnNiMmR6SUQwZ1JFY3VSR2xoYkc5bkxtZGxkRTl3Wlc1RWFXRnNiMmR6S0NrN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWkdsaGJHOW5jeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaGthV0ZzYjJkelcybGRMblJwZEd4bElEMDlJR1JwWVd4dloxUnBkR3hsS1Z4dUlDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdaaGJITmxPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1lYTjVibU1nWm5WdVkzUnBiMjRnZEdWemRGWnBaWGRsY2loMk9pQnpkSEpwYm1jc0lHUm1PaUJFUnk1RVlYUmhSbkpoYldVc0lHUmxkR1ZqZEZObGJXRnVkR2xqVkhsd1pYTTZJR0p2YjJ4bFlXNGdQU0JtWVd4elpTazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0JwWmlBb1pHVjBaV04wVTJWdFlXNTBhV05VZVhCbGN5a2dZWGRoYVhRZ1ozSnZheTVrWVhSaExtUmxkR1ZqZEZObGJXRnVkR2xqVkhsd1pYTW9aR1lwTzF4dUlDQmpiMjV6ZENCMGRpQTlJR2R5YjJzdWMyaGxiR3d1WVdSa1ZHRmliR1ZXYVdWM0tHUm1LVHRjYmlBZ1kyOXVjM1FnZG1sbGQyVnlUbUZ0WlNBOUlHQmJibUZ0WlQxMmFXVjNaWEl0Skh0MkxuSmxjR3hoWTJVb0wxeGNjeXN2Wnl3Z0p5MG5LWDBnYVYxZ08xeHVJQ0JqYjI1emRDQnpaV3hsWTNSdmNpQTlJR0FrZTNacFpYZGxjazVoYldWOUlHTmhiblpoY3l3a2UzWnBaWGRsY2s1aGJXVjlJSE4yWnl3a2UzWnBaWGRsY2s1aGJXVjlJR2x0Wnl4Y2JpQWdJQ0FrZTNacFpYZGxjazVoYldWOUlHbHVjSFYwTENSN2RtbGxkMlZ5VG1GdFpYMGdhREVzSkh0MmFXVjNaWEpPWVcxbGZTQmhZRHRjYmlBZ1kyOXVjM1FnY21WeklEMGdXMTA3WEc0Z0lIUnllU0I3WEc0Z0lDQWdiR1YwSUhacFpYZGxjaUE5SUhSMkxtRmtaRlpwWlhkbGNpaDJLVHRjYmlBZ0lDQmhkMkZwZENCaGQyRnBkRU5vWldOcktDZ3BJRDArSUdSdlkzVnRaVzUwTG5GMVpYSjVVMlZzWldOMGIzSW9jMlZzWldOMGIzSXBJQ0U5UFNCdWRXeHNMRnh1SUNBZ0lDQWdKMk5oYm01dmRDQnNiMkZrSUhacFpYZGxjaWNzSURNd01EQXBPMXh1SUNBZ0lISmxjeTV3ZFhOb0tFRnljbUY1TG1aeWIyMG9kSFl1ZG1sbGQyVnljeWt1YkdWdVozUm9LVHRjYmlBZ0lDQkJjbkpoZVM1bWNtOXRLR1JtTG5KdmR5Z3dLUzVqWld4c2N5a3VabTl5UldGamFDZ29ZeWtnUFQ0Z1l5NTJZV3gxWlNBOUlHNTFiR3dwTzF4dUlDQWdJR1JtTG5KdmQzTXVjMlZzWldOMEtDaHliM2NwSUQwK0lISnZkeTVwWkhnZ1BpQXhJQ1ltSUhKdmR5NXBaSGdnUENBM0tUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdOenNnYVNBOElERXlPeUJwS3lzcElHUm1MbVpwYkhSbGNpNXpaWFFvYVN3Z1ptRnNjMlVwTzF4dUlDQWdJR1JtTG1OMWNuSmxiblJTYjNkSlpIZ2dQU0F4TzF4dUlDQWdJR052Ym5OMElIQnliM0J6SUQwZ2RtbGxkMlZ5TG1kbGRFOXdkR2x2Ym5Nb2RISjFaU2t1Ykc5dmF6dGNiaUFnSUNCamIyNXpkQ0J1WlhkUWNtOXdjem9nVW1WamIzSmtQSE4wY21sdVp5d2dZbTl2YkdWaGJqNGdQU0I3ZlR0Y2JpQWdJQ0JQWW1wbFkzUXVhMlY1Y3lod2NtOXdjeWt1Wm1sc2RHVnlLQ2hyS1NBOVBpQjBlWEJsYjJZZ2NISnZjSE5iYTEwZ1BUMDlJQ2RpYjI5c1pXRnVKeWt1Wm05eVJXRmphQ2dvYXlrZ1BUNGdibVYzVUhKdmNITmJhMTBnUFNBaGNISnZjSE5iYTEwcE8xeHVJQ0FnSUhacFpYZGxjaTV6WlhSUGNIUnBiMjV6S0c1bGQxQnliM0J6S1R0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneU5UQXBPMXh1SUNBZ0lHTnZibk4wSUd4aGVXOTFkQ0E5SUhSMkxuTmhkbVZNWVhsdmRYUW9LVHRjYmlBZ0lDQmpiMjV6ZENCdmJHUlFjbTl3Y3lBOUlIWnBaWGRsY2k1blpYUlBjSFJwYjI1ektDa3ViRzl2YXp0Y2JpQWdJQ0IwZGk1eVpYTmxkRXhoZVc5MWRDZ3BPMXh1SUNBZ0lISmxjeTV3ZFhOb0tFRnljbUY1TG1aeWIyMG9kSFl1ZG1sbGQyVnljeWt1YkdWdVozUm9LVHRjYmlBZ0lDQjBkaTVzYjJGa1RHRjViM1YwS0d4aGVXOTFkQ2s3WEc0Z0lDQWdZWGRoYVhRZ1lYZGhhWFJEYUdWamF5Z29LU0E5UGlCa2IyTjFiV1Z1ZEM1eGRXVnllVk5sYkdWamRHOXlLSE5sYkdWamRHOXlLU0FoUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ2RqWVc1dWIzUWdiRzloWkNCMmFXVjNaWElnWm5KdmJTQnNZWGx2ZFhRbkxDQXpNREF3S1R0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneU5UQXBPMXh1SUNBZ0lISmxjeTV3ZFhOb0tFRnljbUY1TG1aeWIyMG9kSFl1ZG1sbGQyVnljeWt1YkdWdVozUm9LVHRjYmlBZ0lDQjJhV1YzWlhJZ1BTQkJjbkpoZVM1bWNtOXRLSFIyTG5acFpYZGxjbk1wTG1acGJtUW9LSFlwSUQwK0lIWXVkSGx3WlNBaFBUMGdKMGR5YVdRbktTRTdYRzRnSUNBZ1pYaHdaV04wUVhKeVlYa29jbVZ6TENCYk1pd2dNU3dnTWwwcE8xeHVJQ0FnSUdWNGNHVmpkQ2hLVTA5T0xuTjBjbWx1WjJsbWVTaDJhV1YzWlhJdVoyVjBUM0IwYVc5dWN5Z3BMbXh2YjJzcExDQktVMDlPTG5OMGNtbHVaMmxtZVNodmJHUlFjbTl3Y3lrcE8xeHVJQ0I5SUdacGJtRnNiSGtnZTF4dUlDQWdJSFIyTG1Oc2IzTmxLQ2s3WEc0Z0lDQWdaM0p2YXk1emFHVnNiQzVqYkc5elpWUmhZbXhsS0dSbUtUdGNiaUFnZlZ4dWZWeHVJbDE5IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0Jztcbi8qKiBEZW1vIHNjcmlwdCBjbGFzcy4gQ291bGQgYmUgdXNlZCBmb3IgY3JlYXRpbmcgZGVtbyBzY3JpcHRzIHRvIHNob3cgdGhlIHBsYXRmb3JtIGNhcGFiaWxpdGllcyAqL1xuZXhwb3J0IGNsYXNzIERlbW9TY3JpcHQge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwID0gMDtcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10sIHsgaWQ6ICdkZW1vLXNjcmlwdCcsXG4gICAgICAgICAgICBjbGFzc2VzOiAndHV0b3JpYWxzLXJvb3QgdHV0b3JpYWxzLXRyYWNrIGRlbW8tYXBwLXNjcmlwdCcgfSk7XG4gICAgICAgIHRoaXMuX3N0ZXBzID0gW107XG4gICAgICAgIHRoaXMuX21haW5IZWFkZXIgPSB1aS5wYW5lbChbXSwgJ3R1dG9yaWFscy1tYWluLWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9oZWFkZXIgPSB1aS5oMSgnJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlckRpdiA9IHVpLmRpdkgoW10sICd0dXRvcmlhbHMtcm9vdC1oZWFkZXInKTtcbiAgICAgICAgdGhpcy5fc3RvcFN0YXJ0QnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncGF1c2UnKSwgKCkgPT4gdGhpcy5fY2hhbmdlU3RvcFN0YXRlKCksICdQbGF5IC8gcGF1c2UnKTtcbiAgICAgICAgdGhpcy5fcmVzdGFydEJ0biA9IHVpLmJ1dHRvbih1aS5pY29uRkEoJ3JlZG8nKSwgKCkgPT4gdGhpcy5fcmVzdGFydFNjcmlwdCgpLCAnUmVzdGFydCcpO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eSA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYgPSB1aS5kaXZWKFtdLCAndHV0b3JpYWxzLXJvb3QtcHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB1aS5lbGVtZW50KCdwcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dCgnJyk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgICAgICBEZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSB0aGlzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBkZW1vIHNjcmlwdCBzdGVwcyAqL1xuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRlbW8gc2NyaXB0IHN0ZXBzICovXG4gICAgZ2V0IHN0ZXBOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKiBBZGRzIHNjcmlwdCBoZWFkZXIgKi9cbiAgICBfYWRkSGVhZGVyKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVIZWFkZXJEaXYoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlUHJvZ3Jlc3NEaXYoKTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlci5hcHBlbmQodGhpcy5faGVhZGVyRGl2LCB0aGlzLl9wcm9ncmVzc0Rpdik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBoZWFkZXIgZGl2ICovXG4gICAgX2NyZWF0ZUhlYWRlckRpdigpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyLmlubmVyVGV4dCA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9oZWFkZXIpO1xuICAgICAgICB0aGlzLl9oZWFkZXJEaXYuYXBwZW5kKHRoaXMuX3N0b3BTdGFydEJ0bik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBwcm9ncmVzcyBkaXYgKi9cbiAgICBfY3JlYXRlUHJvZ3Jlc3NEaXYoKSB7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLm1heCA9IHRoaXMuc3RlcE51bWJlcjtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYuYXBwZW5kKHRoaXMuX3Byb2dyZXNzKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NTdGVwcyA9IHVpLmRpdlRleHQoYFN0ZXA6ICR7dGhpcy5fcHJvZ3Jlc3MudmFsdWV9IG9mICR7dGhpcy5zdGVwTnVtYmVyfWApO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0Rpdi5hcHBlbmQodGhpcy5fcHJvZ3Jlc3NTdGVwcyk7XG4gICAgfVxuICAgIC8qKiBBZGRzIGRlc2NyaXB0aW9uIG9mIHRoZSBzY3JpcHQgKi9cbiAgICBfYWRkRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5fYWN0aXZpdHkuYXBwZW5kKHVpLmRpdih0aGlzLmRlc2NyaXB0aW9uLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGVwTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjbG9jaycpO1xuICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25EaXYgPSB1aS5kaXYodGhpcy5fc3RlcHNbaV0ubmFtZSwgJ2dyb2stdHV0b3JpYWwtZW50cnktaW5zdHJ1Y3Rpb24nKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwRGVzY3JpcHRpb24gPSB1aS5kaXYoKF9hID0gdGhpcy5fc3RlcHNbaV0ub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlc2NyaXB0aW9uLCAnZ3Jvay10dXRvcmlhbC1zdGVwLWRlc2NyaXB0aW9uIGhpZGRlbicpO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB1aS5kaXZIKFtcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkluZGljYXRvcixcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkRpdixcbiAgICAgICAgICAgIF0sICdncm9rLXR1dG9yaWFsLWVudHJ5Jyk7XG4gICAgICAgICAgICB0aGlzLl9hY3Rpdml0eS5hcHBlbmQoZW50cnksIGN1cnJlbnRTdGVwRGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBJbml0aWFsaXplcyB0aGUgcm9vdCBvZiB0aGUgZGVtbyBzY3JpcHQgKi9cbiAgICBfaW5pdFJvb3QoKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dIZWxwID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmRvY2sodGhpcy5fcm9vdCwgREcuRE9DS19UWVBFLlJJR0hULCBudWxsLCB0aGlzLm5hbWUsIDAuMyk7XG4gICAgICAgIG5vZGUuY29udGFpbmVyLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpO1xuICAgICAgICB0aGlzLl9hZGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdC5hcHBlbmQodGhpcy5fbWFpbkhlYWRlcik7XG4gICAgICAgIHRoaXMuX2FkZERlc2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kKHRoaXMuX2FjdGl2aXR5KTtcbiAgICB9XG4gICAgLyoqIFN0YXJ0cyB0aGUgZGVtbyBzY3JpcHQgYWN0aW9ucyAqL1xuICAgIF9zdGFydFNjcmlwdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay10dXRvcmlhbC1lbnRyeScpO1xuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRpY2F0b3JzID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgICAgICBjb25zdCBlbnRyeUluc3RydWN0aW9ucyA9IHRoaXMuX2FjdGl2aXR5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dyb2stdHV0b3JpYWwtc3RlcC1kZXNjcmlwdGlvbicpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2N1cnJlbnRTdGVwOyBpIDwgdGhpcy5zdGVwTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdG9wcGVkIHx8IHRoaXMuX2lzQ2FuY2VsbGVkKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBlbnRyeUluZGljYXRvcnNbaV0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluJztcbiAgICAgICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uc1tpXS5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSBlbnRyeVtpXTtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9zdGVwc1tpXS5mdW5jKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG8odGhpcy5fcm9vdCwgY3VycmVudFN0ZXAub2Zmc2V0VG9wIC0gdGhpcy5fbWFpbkhlYWRlci5vZmZzZXRIZWlnaHQpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGRlbGF5KCgoX2EgPSB0aGlzLl9zdGVwc1tpXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVsYXkpID8gKF9iID0gdGhpcy5fc3RlcHNbaV0ub3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmRlbGF5IDogMjAwMCk7XG4gICAgICAgICAgICAgICAgZW50cnlJbmRpY2F0b3JzW2ldLmNsYXNzTmFtZSA9ICdncm9rLWljb24gZmFyIGZhLWNoZWNrJztcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy52YWx1ZSsrO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMuaW5uZXJUZXh0ID0gYFN0ZXA6ICR7dGhpcy5fcHJvZ3Jlc3MudmFsdWV9IG9mICR7dGhpcy5zdGVwTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0ZXArKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RlcCA9PT0gdGhpcy5zdGVwTnVtYmVyKVxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BTdGFydEJ0bi5yZXBsYWNlV2l0aCh0aGlzLl9yZXN0YXJ0QnRuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgdG8gdGhlIGN1cnJlbnQgc3RlcFxuICAgICAqIEBwYXJhbSBlbGVtZW50IC0gQ3VycmVudCBzdGVwIGVsZW1lbnQgaW4gcm9vdFxuICAgICAqIEBwYXJhbSB5IC0geSBjb29yZGluYXRlIG9mIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgX3Njcm9sbFRvKGVsZW1lbnQsIHkpIHtcbiAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHk7XG4gICAgfVxuICAgIC8qKiBDaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgZGVtbyBzY3JpcHQgKHN0b3AvcGxheSkgKi9cbiAgICBfY2hhbmdlU3RvcFN0YXRlKCkge1xuICAgICAgICBjb25zdCBpY29uID0gdGhpcy5fc3RvcFN0YXJ0QnRuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dyb2staWNvbicpO1xuICAgICAgICBpY29uWzBdLmNsYXNzTmFtZSA9ICdncm9rLWljb24gZmFzIGZhLXBsYXknO1xuICAgICAgICB0aGlzLl9pc1N0b3BwZWQgPSAhdGhpcy5faXNTdG9wcGVkO1xuICAgICAgICBpZiAoIXRoaXMuX2lzU3RvcHBlZCkge1xuICAgICAgICAgICAgaWNvblswXS5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhbCBmYS1wYXVzZSc7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFNjcmlwdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBSZXN0YXJ0cyB0aGUgc2NyaXB0ICovXG4gICAgX3Jlc3RhcnRTY3JpcHQoKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdERvY2tOb2RlID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkcmVuKVsxXTtcbiAgICAgICAgaWYgKHNjcmlwdERvY2tOb2RlLmNvbnRhaW5lci5jb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmNsb3NlKHNjcmlwdERvY2tOb2RlKTtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbGVhclJvb3QoKTtcbiAgICAgICAgdGhpcy5fc2V0SW5pdFBhcmFtcygpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICAgIC8qKiBDbGVhcnMgdGhlIHJvb3QgZWxlbWVudCAqL1xuICAgIF9jbGVhclJvb3QoKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10sIHsgaWQ6ICdkZW1vLXNjcmlwdCcsIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgxKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eSA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYgPSB1aS5kaXZWKFtdLCAndHV0b3JpYWxzLXJvb3QtcHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB1aS5lbGVtZW50KCdwcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dCgnJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLm1heCA9IDA7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLnZhbHVlID0gMTtcbiAgICB9XG4gICAgLyoqIFNldHMgaW5pdGlhbCBwYXJhbWV0ZXJzICovXG4gICAgX3NldEluaXRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwID0gMDtcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYWwgZmEtcGF1c2UnO1xuICAgIH1cbiAgICAvKiogQ2FuY2VscyB0aGUgc2NyaXB0ICovXG4gICAgY2FuY2VsU2NyaXB0KCkge1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIERlbW9TY3JpcHQuY3VycmVudE9iamVjdCA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgc3RlcCB0byBzY3JpcHRcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFN0ZXAgbmFtZVxuICAgICAqIEBwYXJhbSBmdW5jIC0gU3RlcCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gU3RlcCBvcHRpb25zIChkZXNjcmlwdGlvbiBhbmQgZGVsYXkgYWZ0ZXIgc3RlcCBlbmRzKVxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGN1cnJlbnQgZGVtbyBzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc3RlcChuYW1lLCBmdW5jLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzW3RoaXMuc3RlcHMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKiBTdGFydHMgdGhlIGRlbW8gc2NyaXB0ICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0Um9vdCgpO1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRTY3JpcHQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuRGVtb1NjcmlwdC5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHVnRieTF6WTNKcGNIUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKa1pXMXZMWE5qY21sd2RDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdRVUZCUVN4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhQUVVGUExFVkJRVU1zUzBGQlN5eEZRVUZETEUxQlFVMHNiME5CUVc5RExFTkJRVU03UVVGbGVrUXNiVWRCUVcxSE8wRkJRMjVITEUxQlFVMHNUMEZCVHl4VlFVRlZPMGxCTmtKeVFpeFpRVUZaTEVsQlFWa3NSVUZCUlN4WFFVRnRRanRSUVRWQ04wTXNVMEZCU1N4SFFVRlhMRVZCUVVVc1EwRkJRenRSUVVOc1FpeG5Ra0ZCVnl4SFFVRlhMRVZCUVVVc1EwRkJRenRSUVVscVFpeHBRa0ZCV1N4SFFVRlhMRU5CUVVNc1EwRkJRenRSUVVONlFpeGxRVUZWTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpWQ0xHbENRVUZaTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUlRsQ0xGVkJRVXNzUjBGQmJVSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVVXNZVUZCWVR0WlFVTXpSQ3hQUVVGUExFVkJRVVVzWjBSQlFXZEVMRVZCUVVNc1EwRkJReXhEUVVGRE8xRkJSWFJFTEZkQlFVMHNSMEZCVnl4RlFVRkZMRU5CUVVNN1VVRkZjRUlzWjBKQlFWY3NSMEZCYlVJc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVU53UlN4WlFVRlBMRWRCUVhWQ0xFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRlRU1zWlVGQlZTeEhRVUZ0UWl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJRMnhGTEd0Q1FVRmhMRWRCUVhOQ0xFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGRGNrVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU03VVVGRGVrTXNaMEpCUVZjc1IwRkJjMElzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVVjBSeXhqUVVGVExFZEJRVzFDTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hGUVVGRkxEUkNRVUUwUWl4RFFVRkRMRU5CUVVNN1VVRkZka1VzYVVKQlFWa3NSMEZCYlVJc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNlVUpCUVhsQ0xFTkJRVU1zUTBGQlF6dFJRVU4wUlN4alFVRlRMRWRCUVhkQ0xFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRlRVFzYlVKQlFXTXNSMEZCYlVJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVbDBSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnFRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXp0UlFVVXZRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWHBDTEZWQlFWVXNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZGUkN4blEwRkJaME03U1VGRGFFTXNTVUZCU1N4TFFVRkxPMUZCUTFBc1QwRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzSkNMRU5CUVVNN1NVRkZSQ3c0UTBGQk9FTTdTVUZET1VNc1NVRkJTU3hWUVVGVk8xRkJRMW9zVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlIwUXNlVUpCUVhsQ08wbEJRMnBDTEZWQlFWVTdVVUZEYUVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03U1VGRE9VUXNRMEZCUXp0SlFVVkVMR2REUVVGblF6dEpRVU40UWl4blFrRkJaMEk3VVVGRGRFSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTnVReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRmNrTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMGxCUXpkRExFTkJRVU03U1VGRlJDeHJRMEZCYTBNN1NVRkRNVUlzYTBKQlFXdENPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNwRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4UFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJYaEdMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOb1JDeERRVUZETzBsQlJVUXNjVU5CUVhGRE8wbEJRemRDTEdWQlFXVTdPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUlN3MFFrRkJORUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGT1VVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZUVNc1RVRkJUU3h2UWtGQmIwSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlEyaEVMRTFCUVUwc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNhVU5CUVdsRExFTkJRVU1zUTBGQlF6dFpRVU4wUml4TlFVRk5MSE5DUVVGelFpeEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJRU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c01FTkJRVVVzVjBGQlZ5eEZRVU4yUlN4MVEwRkJkVU1zUTBGQlF5eERRVUZETzFsQlF6TkRMRTFCUVUwc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdaMEpCUTNCQ0xHOUNRVUZ2UWp0blFrRkRjRUlzWTBGQll6dGhRVU5tTEVWQlFVVXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF6dFpRVVV4UWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNjMEpCUVhOQ0xFTkJRVU1zUTBGQlF6dFRRVU4wUkR0SlFVTklMRU5CUVVNN1NVRkZSQ3c0UTBGQk9FTTdTVUZEZEVNc1UwRkJVenRSUVVObUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTXpReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJSWEJETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXk5R0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4cFEwRkJhVU1zUTBGQlF5eERRVUZETzFGQlJXcEdMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVU5zUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkZjRU1zU1VGQlNTeERRVUZETEdWQlFXVXNSVUZCUlN4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRc2NVTkJRWEZETzBsQlEzWkNMRmxCUVZrN096dFpRVU40UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN1dVRkRNMFVzVFVGQlRTeGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRaUVVNelJTeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1EwRkJRenRaUVVWc1J5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEzaEVMRWxCUVVrc1NVRkJTU3hEUVVGRExGVkJRVlVzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1R0dlFrRkRkRU1zVFVGQlRUdG5Ra0ZGVWl4bFFVRmxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhkRFFVRjNReXhEUVVGRE8yZENRVU40UlN4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJkQ1FVTm9SQ3hwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMmRDUVVVNVF5eE5RVUZOTEZkQlFWY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGdFFpeERRVUZETzJkQ1FVVXZReXhOUVVGTkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03WjBKQlF6VkNMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4WFFVRlhMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1owSkJRMnhHTEUxQlFVMHNTMEZCU3l4RFFVRkRMRU5CUVVFc1RVRkJRU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c01FTkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl3d1EwRkJSU3hMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVWdVJpeGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMmRDUVVONFJDeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU4yUWl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExGTkJRVk1zUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhQUVVGUExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0blFrRkZkRVlzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMkZCUTNKQ08xbEJSVVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1N4TFFVRkxMRWxCUVVrc1EwRkJReXhWUVVGVk8yZENRVU4yUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN08wdEJRM0JFTzBsQlJVUTdPenM3VDBGSlJ6dEpRVU5MTEZOQlFWTXNRMEZCUXl4UFFVRjFRaXhGUVVGRkxFTkJRVk03VVVGRGJFUXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJRMmhDTEU5QlFVOHNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM2hDTEVOQlFVTTdTVUZGUkN4MVJFRkJkVVE3U1VGREwwTXNaMEpCUVdkQ08xRkJRM1JDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGNFVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUjBGQlJ5eDFRa0ZCZFVJc1EwRkJRenRSUVVNMVF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVVZ1UXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU53UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhkQ1FVRjNRaXhEUVVGRE8xbEJRemRETEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRUUVVOeVFqdEpRVU5JTEVOQlFVTTdTVUZGUkN3d1FrRkJNRUk3U1VGRGJFSXNZMEZCWXp0UlFVTndRaXhOUVVGTkxHTkJRV01zUjBGQlJ5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU12UlN4SlFVRkpMR05CUVdNc1EwRkJReXhUUVVGVExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5eHBRMEZCYVVNc1EwRkJReXhGUVVGRk8xbEJRMjVITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXp0WlFVTTNReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMU5CUTNaQ08xRkJRMFFzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUTJ4Q0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0UlFVTjBRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdTVUZEWml4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMRlZCUVZVN1VVRkRhRUlzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUlN4aFFVRmhMRVZCUVVVc1QwRkJUeXhGUVVGRkxHZEVRVUZuUkN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVWNFJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRGVrUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc1EwRkJRenRSUVVWMlJDeEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTERSQ1FVRTBRaXhEUVVGRExFTkJRVU03VVVGRk5VUXNTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUlN4NVFrRkJlVUlzUTBGQlF5eERRVUZETzFGQlF6TkVMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRSUVVONFF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZGY2tNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVNelFpeERRVUZETzBsQlJVUXNPRUpCUVRoQ08wbEJRM1JDTEdOQlFXTTdVVUZEY0VJc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZEVJc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZEZUVJc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZGTVVJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4elFrRkJjMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVTndSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4SFFVRkhMSGRDUVVGM1FpeERRVUZETzBsQlF5OURMRU5CUVVNN1NVRkhSQ3g1UWtGQmVVSTdTVUZEZWtJc1dVRkJXVHRSUVVOV0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNwQ0xGVkJRVlVzUTBGQlF5eGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGRlJEczdPenM3TzA5QlRVYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1NVRkJXU3hGUVVGRkxFbEJRWGxDTEVWQlFVVXNUMEZCWjBRN1VVRkROVVlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITzFsQlF5OUNMRWxCUVVrc1JVRkJSU3hKUVVGSk8xbEJRMVlzU1VGQlNTeEZRVUZGTEVsQlFVazdXVUZEVml4UFFVRlBMRVZCUVVVc1QwRkJUenRUUVVOcVFpeERRVUZETzFGQlEwWXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzTmtKQlFUWkNPMGxCUTNaQ0xFdEJRVXM3TzFsQlExUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRSUVVOMFFpeERRVUZETzB0QlFVRTdPMEZCTDA1TkxIZENRVUZoTEVkQlFYTkNMRWxCUVVrc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJQ29nWVhNZ1ozSnZheUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2WjNKdmF5YzdYRzVjYm1sdGNHOXlkQ0I3WkdWc1lYbDlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM1JsYzNRbk8xeHVYRzVjYmk4cUtpQlVlWEJsSUdadmNpQjdRR3hwYm1zZ1JHVnRiMU5qY21sd2RIMGdjM1JsY0NBcUwxeHVaWGh3YjNKMElIUjVjR1VnVTNSbGNDQTlJSHRjYmlBZ2JtRnRaVG9nYzNSeWFXNW5PMXh1SUNCbWRXNWpPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErTzF4dVhHNGdJQzhxS2lCVGRHVndJRzl3ZEdsdmJuTTZJR1JsYzJOeWFYQjBhVzl1SUdGdVpDQmtaV3hoZVNBb2FXNGdiWE1wSUdGbWRHVnlJR1oxYm1OMGFXOXVJR1Z1WkhNZ0tpOWNiaUFnYjNCMGFXOXVjejg2SUh0Y2JpQWdJQ0JrWlhOamNtbHdkR2x2Ymo4NklITjBjbWx1Wnp0Y2JpQWdJQ0JrWld4aGVUODZJRzUxYldKbGNqdGNiaUFnZlZ4dWZUdGNibHh1THlvcUlFUmxiVzhnYzJOeWFYQjBJR05zWVhOekxpQkRiM1ZzWkNCaVpTQjFjMlZrSUdadmNpQmpjbVZoZEdsdVp5QmtaVzF2SUhOamNtbHdkSE1nZEc4Z2MyaHZkeUIwYUdVZ2NHeGhkR1p2Y20wZ1kyRndZV0pwYkdsMGFXVnpJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdSR1Z0YjFOamNtbHdkQ0I3WEc0Z0lHNWhiV1U2SUhOMGNtbHVaeUE5SUNjbk8xeHVJQ0JrWlhOamNtbHdkR2x2YmpvZ2MzUnlhVzVuSUQwZ0p5YzdYRzVjYmlBZ2MzUmhkR2xqSUdOMWNuSmxiblJQWW1wbFkzUTZJRVJsYlc5VFkzSnBjSFFnZkNCdWRXeHNJRDBnYm5Wc2JEdGNibHh1SUNCd2NtbDJZWFJsSUY5amRYSnlaVzUwVTNSbGNEb2diblZ0WW1WeUlEMGdNRHRjYmlBZ2NISnBkbUYwWlNCZmFYTlRkRzl3Y0dWa09pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMmx6UTJGdVkyVnNiR1ZrT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlU3WEc1Y2JpQWdjSEpwZG1GMFpTQmZjbTl2ZERvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNWthWFlvVzEwc0lIdHBaRG9nSjJSbGJXOHRjMk55YVhCMEp5eGNiaUFnSUNCamJHRnpjMlZ6T2lBbmRIVjBiM0pwWVd4ekxYSnZiM1FnZEhWMGIzSnBZV3h6TFhSeVlXTnJJR1JsYlc4dFlYQndMWE5qY21sd2RDZDlLVHRjYmx4dUlDQndjbWwyWVhSbElGOXpkR1Z3Y3pvZ1UzUmxjRnRkSUQwZ1cxMDdYRzVjYmlBZ2NISnBkbUYwWlNCZmJXRnBia2hsWVdSbGNqb2dTRlJOVEVScGRrVnNaVzFsYm5RZ1BTQjFhUzV3WVc1bGJDaGJYU3dnSjNSMWRHOXlhV0ZzY3kxdFlXbHVMV2hsWVdSbGNpY3BPMXh1SUNCd2NtbDJZWFJsSUY5b1pXRmtaWEk2SUVoVVRVeElaV0ZrYVc1blJXeGxiV1Z1ZENBOUlIVnBMbWd4S0NjbktUdGNiaUFnY0hKcGRtRjBaU0JmYUdWaFpHVnlSR2wyT2lCSVZFMU1SR2wyUld4bGJXVnVkQ0E5SUhWcExtUnBka2dvVzEwc0lDZDBkWFJ2Y21saGJITXRjbTl2ZEMxb1pXRmtaWEluS1R0Y2JpQWdjSEpwZG1GMFpTQmZjM1J2Y0ZOMFlYSjBRblJ1T2lCSVZFMU1RblYwZEc5dVJXeGxiV1Z1ZENBOUlIVnBMbUoxZEhSdmJpaDFhUzVwWTI5dVJrRW9KM0JoZFhObEp5a3NYRzRnSUNBZ0tDa2dQVDRnZEdocGN5NWZZMmhoYm1kbFUzUnZjRk4wWVhSbEtDa3NJQ2RRYkdGNUlDOGdjR0YxYzJVbktUdGNiaUFnY0hKcGRtRjBaU0JmY21WemRHRnlkRUowYmpvZ1NGUk5URUoxZEhSdmJrVnNaVzFsYm5RZ1BTQjFhUzVpZFhSMGIyNG9kV2t1YVdOdmJrWkJLQ2R5WldSdkp5a3NJQ2dwSUQwK0lIUm9hWE11WDNKbGMzUmhjblJUWTNKcGNIUW9LU3dnSjFKbGMzUmhjblFuS1R0Y2JseHVJQ0J3Y21sMllYUmxJRjloWTNScGRtbDBlVG9nU0ZSTlRFUnBka1ZzWlcxbGJuUWdQU0IxYVM1d1lXNWxiQ2hiWFN3Z0ozUjFkRzl5YVdGc2N5MXliMjkwTFdSbGMyTnlhWEIwYVc5dUp5azdYRzVjYmlBZ2NISnBkbUYwWlNCZmNISnZaM0psYzNORWFYWTZJRWhVVFV4RWFYWkZiR1Z0Wlc1MElEMGdkV2t1WkdsMlZpaGJYU3dnSjNSMWRHOXlhV0ZzY3kxeWIyOTBMWEJ5YjJkeVpYTnpKeWs3WEc0Z0lIQnlhWFpoZEdVZ1gzQnliMmR5WlhOek9pQklWRTFNVUhKdlozSmxjM05GYkdWdFpXNTBJRDBnZFdrdVpXeGxiV1Z1ZENnbmNISnZaM0psYzNNbktUdGNiaUFnY0hKcGRtRjBaU0JmY0hKdlozSmxjM05UZEdWd2N6b2dTRlJOVEVScGRrVnNaVzFsYm5RZ1BTQjFhUzVrYVhaVVpYaDBLQ2NuS1R0Y2JseHVYRzRnSUdOdmJuTjBjblZqZEc5eUtHNWhiV1U2SUhOMGNtbHVaeXdnWkdWelkzSnBjSFJwYjI0NklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhSb2FYTXVibUZ0WlNBOUlHNWhiV1U3WEc0Z0lDQWdkR2hwY3k1a1pYTmpjbWx3ZEdsdmJpQTlJR1JsYzJOeWFYQjBhVzl1TzF4dVhHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTXViV0Y0SUQwZ01EdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTUyWVd4MVpTQTlJREU3WEc1Y2JpQWdJQ0JFWlcxdlUyTnlhWEIwTG1OMWNuSmxiblJQWW1wbFkzUWdQU0IwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZKbGRIVnlibk1nWkdWdGJ5QnpZM0pwY0hRZ2MzUmxjSE1nS2k5Y2JpQWdaMlYwSUhOMFpYQnpLQ2s2SUZOMFpYQmJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNOMFpYQnpPMXh1SUNCOVhHNWNiaUFnTHlvcUlGSmxkSFZ5Ym5NZ2RHaGxJR0Z0YjNWdWRDQnZaaUJrWlcxdklITmpjbWx3ZENCemRHVndjeUFxTDF4dUlDQm5aWFFnYzNSbGNFNTFiV0psY2lncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXpkR1Z3Y3k1c1pXNW5kR2c3WEc0Z0lIMWNibHh1WEc0Z0lDOHFLaUJCWkdSeklITmpjbWx3ZENCb1pXRmtaWElnS2k5Y2JpQWdjSEpwZG1GMFpTQmZZV1JrU0dWaFpHVnlLQ2s2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11WDJOeVpXRjBaVWhsWVdSbGNrUnBkaWdwTzF4dUlDQWdJSFJvYVhNdVgyTnlaV0YwWlZCeWIyZHlaWE56UkdsMktDazdYRzRnSUNBZ2RHaHBjeTVmYldGcGJraGxZV1JsY2k1aGNIQmxibVFvZEdocGN5NWZhR1ZoWkdWeVJHbDJMQ0IwYUdsekxsOXdjbTluY21WemMwUnBkaWs3WEc0Z0lIMWNibHh1SUNBdktpb2dRM0psWVhSbGN5QnpZM0pwY0hRZ2FHVmhaR1Z5SUdScGRpQXFMMXh1SUNCd2NtbDJZWFJsSUY5amNtVmhkR1ZJWldGa1pYSkVhWFlvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZmFHVmhaR1Z5TG1sdWJtVnlWR1Y0ZENBOUlIUm9hWE11Ym1GdFpUdGNiaUFnSUNCMGFHbHpMbDlvWldGa1pYSkVhWFl1WVhCd1pXNWtLSFJvYVhNdVgyaGxZV1JsY2lrN1hHNWNiaUFnSUNCMGFHbHpMbDlvWldGa1pYSkVhWFl1WVhCd1pXNWtLSFJvYVhNdVgzTjBiM0JUZEdGeWRFSjBiaWs3WEc0Z0lIMWNibHh1SUNBdktpb2dRM0psWVhSbGN5QnpZM0pwY0hRZ2NISnZaM0psYzNNZ1pHbDJJQ292WEc0Z0lIQnlhWFpoZEdVZ1gyTnlaV0YwWlZCeWIyZHlaWE56UkdsMktDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpMbTFoZUNBOUlIUm9hWE11YzNSbGNFNTFiV0psY2p0Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemMwUnBkaTVoY0hCbGJtUW9kR2hwY3k1ZmNISnZaM0psYzNNcE8xeHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpVM1JsY0hNZ1BTQjFhUzVrYVhaVVpYaDBLR0JUZEdWd09pQWtlM1JvYVhNdVgzQnliMmR5WlhOekxuWmhiSFZsZlNCdlppQWtlM1JvYVhNdWMzUmxjRTUxYldKbGNuMWdLVHRjYmx4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOelJHbDJMbUZ3Y0dWdVpDaDBhR2x6TGw5d2NtOW5jbVZ6YzFOMFpYQnpLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkJaR1J6SUdSbGMyTnlhWEIwYVc5dUlHOW1JSFJvWlNCelkzSnBjSFFnS2k5Y2JpQWdjSEpwZG1GMFpTQmZZV1JrUkdWelkzSnBjSFJwYjI0b0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZZV04wYVhacGRIa3VZWEJ3Wlc1a0tIVnBMbVJwZGloMGFHbHpMbVJsYzJOeWFYQjBhVzl1TENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktTazdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdWMzUmxjRTUxYldKbGNqc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5OMGNuVmpkR2x2YmtsdVpHbGpZWFJ2Y2lBOUlIVnBMbWxqYjI1R1FTZ25ZMnh2WTJzbktUdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWMzUnlkV04wYVc5dVJHbDJJRDBnZFdrdVpHbDJLSFJvYVhNdVgzTjBaWEJ6VzJsZExtNWhiV1VzSUNkbmNtOXJMWFIxZEc5eWFXRnNMV1Z1ZEhKNUxXbHVjM1J5ZFdOMGFXOXVKeWs3WEc0Z0lDQWdJQ0JqYjI1emRDQmpkWEp5Wlc1MFUzUmxjRVJsYzJOeWFYQjBhVzl1SUQwZ2RXa3VaR2wyS0hSb2FYTXVYM04wWlhCelcybGRMbTl3ZEdsdmJuTS9MbVJsYzJOeWFYQjBhVzl1TEZ4dUlDQWdJQ0FnSUNBblozSnZheTEwZFhSdmNtbGhiQzF6ZEdWd0xXUmxjMk55YVhCMGFXOXVJR2hwWkdSbGJpY3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXNTBjbmtnUFNCMWFTNWthWFpJS0Z0Y2JpQWdJQ0FnSUNBZ2FXNXpkSEoxWTNScGIyNUpibVJwWTJGMGIzSXNYRzRnSUNBZ0lDQWdJR2x1YzNSeWRXTjBhVzl1UkdsMkxGeHVJQ0FnSUNBZ1hTd2dKMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmtuS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVmWVdOMGFYWnBkSGt1WVhCd1pXNWtLR1Z1ZEhKNUxDQmpkWEp5Wlc1MFUzUmxjRVJsYzJOeWFYQjBhVzl1S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpb2dTVzVwZEdsaGJHbDZaWE1nZEdobElISnZiM1FnYjJZZ2RHaGxJR1JsYlc4Z2MyTnlhWEIwSUNvdlhHNGdJSEJ5YVhaaGRHVWdYMmx1YVhSU2IyOTBLQ2s2SUhadmFXUWdlMXh1SUNBZ0lHZHliMnN1YzJobGJHd3VkMmx1Wkc5M2N5NXphRzkzUTI5dWRHVjRkRkJoYm1Wc0lEMGdkSEoxWlR0Y2JpQWdJQ0JuY205ckxuTm9aV3hzTG5kcGJtUnZkM011YzJodmQwaGxiSEFnUFNCbVlXeHpaVHRjYmx4dUlDQWdJR052Ym5OMElHNXZaR1VnUFNCbmNtOXJMbk5vWld4c0xtUnZZMnROWVc1aFoyVnlMbVJ2WTJzb2RHaHBjeTVmY205dmRDd2dSRWN1UkU5RFMxOVVXVkJGTGxKSlIwaFVMQ0J1ZFd4c0xDQjBhR2x6TG01aGJXVXNJREF1TXlrN1hHNGdJQ0FnYm05a1pTNWpiMjUwWVdsdVpYSXVZMjl1ZEdGcGJtVnlSV3hsYldWdWRDNWpiR0Z6YzB4cGMzUXVZV1JrS0NkMGRYUnZjbWxoYkhNdFpHVnRieTF6WTNKcGNIUXRZMjl1ZEdGcGJtVnlKeWs3WEc1Y2JpQWdJQ0IwYUdsekxsOWhaR1JJWldGa1pYSW9LVHRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBMbUZ3Y0dWdVpDaDBhR2x6TGw5dFlXbHVTR1ZoWkdWeUtUdGNibHh1SUNBZ0lIUm9hWE11WDJGa1pFUmxjMk55YVhCMGFXOXVLQ2s3WEc0Z0lDQWdkR2hwY3k1ZmNtOXZkQzVoY0hCbGJtUW9kR2hwY3k1ZllXTjBhWFpwZEhrcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZOMFlYSjBjeUIwYUdVZ1pHVnRieUJ6WTNKcGNIUWdZV04wYVc5dWN5QXFMMXh1SUNCd2NtbDJZWFJsSUdGemVXNWpJRjl6ZEdGeWRGTmpjbWx3ZENncE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVNBOUlIUm9hWE11WDJGamRHbDJhWFI1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmtuS1R0Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVVsdVpHbGpZWFJ2Y25NZ1BTQjBhR2x6TGw5aFkzUnBkbWwwZVM1blpYUkZiR1Z0Wlc1MGMwSjVRMnhoYzNOT1lXMWxLQ2RuY205ckxXbGpiMjRuS1R0Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVVsdWMzUnlkV04wYVc5dWN5QTlJSFJvYVhNdVgyRmpkR2wyYVhSNUxtZGxkRVZzWlcxbGJuUnpRbmxEYkdGemMwNWhiV1VvSjJkeWIyc3RkSFYwYjNKcFlXd3RjM1JsY0Mxa1pYTmpjbWx3ZEdsdmJpY3BPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SUhSb2FYTXVYMk4xY25KbGJuUlRkR1Z3T3lCcElEd2dkR2hwY3k1emRHVndUblZ0WW1WeU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TGw5cGMxTjBiM0J3WldRZ2ZId2dkR2hwY3k1ZmFYTkRZVzVqWld4c1pXUXBYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVYRzRnSUNBZ0lDQmxiblJ5ZVVsdVpHbGpZWFJ2Y25OYmFWMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlYSWdabUV0YzNCcGJtNWxjaTEwYUdseVpDQm1ZUzF6Y0dsdUp6dGNiaUFnSUNBZ0lHVnVkSEo1U1c1emRISjFZM1JwYjI1elcybGRMbU5zWVhOelRHbHpkQzV5WlcxdmRtVW9KMmhwWkdSbGJpY3BPMXh1SUNBZ0lDQWdaVzUwY25sSmJuTjBjblZqZEdsdmJuTmJhVjB1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25kbWx6YVdKc1pTY3BPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmpkWEp5Wlc1MFUzUmxjQ0E5SUdWdWRISjVXMmxkSUdGeklFaFVUVXhFYVhaRmJHVnRaVzUwTzF4dVhHNGdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxsOXpkR1Z3YzF0cFhTNW1kVzVqS0NrN1hHNGdJQ0FnSUNCMGFHbHpMbDl6WTNKdmJHeFVieWgwYUdsekxsOXliMjkwTENCamRYSnlaVzUwVTNSbGNDNXZabVp6WlhSVWIzQWdMU0IwYUdsekxsOXRZV2x1U0dWaFpHVnlMbTltWm5ObGRFaGxhV2RvZENrN1hHNGdJQ0FnSUNCaGQyRnBkQ0JrWld4aGVTaDBhR2x6TGw5emRHVndjMXRwWFM1dmNIUnBiMjV6UHk1a1pXeGhlU0EvSUhSb2FYTXVYM04wWlhCelcybGRMbTl3ZEdsdmJuTS9MbVJsYkdGNUlTQTZJREl3TURBcE8xeHVYRzRnSUNBZ0lDQmxiblJ5ZVVsdVpHbGpZWFJ2Y25OYmFWMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlYSWdabUV0WTJobFkyc25PMXh1SUNBZ0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWRtRnNkV1VyS3p0Y2JpQWdJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpVM1JsY0hNdWFXNXVaWEpVWlhoMElEMGdZRk4wWlhBNklDUjdkR2hwY3k1ZmNISnZaM0psYzNNdWRtRnNkV1Y5SUc5bUlDUjdkR2hwY3k1emRHVndUblZ0WW1WeWZXQTdYRzVjYmlBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SVGRHVndLeXM3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMk4xY25KbGJuUlRkR1Z3SUQwOVBTQjBhR2x6TG5OMFpYQk9kVzFpWlhJcFhHNGdJQ0FnSUNCMGFHbHpMbDl6ZEc5d1UzUmhjblJDZEc0dWNtVndiR0ZqWlZkcGRHZ29kR2hwY3k1ZmNtVnpkR0Z5ZEVKMGJpazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJOeWIyeHNjeUIwYnlCMGFHVWdZM1Z5Y21WdWRDQnpkR1Z3WEc0Z0lDQXFJRUJ3WVhKaGJTQmxiR1Z0Wlc1MElDMGdRM1Z5Y21WdWRDQnpkR1Z3SUdWc1pXMWxiblFnYVc0Z2NtOXZkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2VTQXRJSGtnWTI5dmNtUnBibUYwWlNCdlppQjBhR1VnWld4bGJXVnVkRnh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JmYzJOeWIyeHNWRzhvWld4bGJXVnVkRG9nU0ZSTlRFUnBka1ZzWlcxbGJuUXNJSGs2SUc1MWJXSmxjaWs2SUhadmFXUWdlMXh1SUNBZ0lHVnNaVzFsYm5RdVptOWpkWE1vS1R0Y2JpQWdJQ0JsYkdWdFpXNTBMbk5qY205c2JGUnZjQ0E5SUhrN1hHNGdJSDFjYmx4dUlDQXZLaW9nUTJoaGJtZGxjeUIwYUdVZ2MzUmhkR1VnYjJZZ2RHaGxJR1JsYlc4Z2MyTnlhWEIwSUNoemRHOXdMM0JzWVhrcElDb3ZYRzRnSUhCeWFYWmhkR1VnWDJOb1lXNW5aVk4wYjNCVGRHRjBaU2dwT2lCMmIybGtJSHRjYmlBZ0lDQmpiMjV6ZENCcFkyOXVJRDBnZEdocGN5NWZjM1J2Y0ZOMFlYSjBRblJ1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGFXTnZiaWNwTzF4dUlDQWdJR2xqYjI1Yk1GMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlYTWdabUV0Y0d4aGVTYzdYRzRnSUNBZ2RHaHBjeTVmYVhOVGRHOXdjR1ZrSUQwZ0lYUm9hWE11WDJselUzUnZjSEJsWkR0Y2JseHVJQ0FnSUdsbUlDZ2hkR2hwY3k1ZmFYTlRkRzl3Y0dWa0tTQjdYRzRnSUNBZ0lDQnBZMjl1V3pCZExtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1Gc0lHWmhMWEJoZFhObEp6dGNiaUFnSUNBZ0lIUm9hWE11WDNOMFlYSjBVMk55YVhCMEtDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeW9xSUZKbGMzUmhjblJ6SUhSb1pTQnpZM0pwY0hRZ0tpOWNiaUFnY0hKcGRtRjBaU0JmY21WemRHRnlkRk5qY21sd2RDZ3BPaUIyYjJsa0lIdGNiaUFnSUNCamIyNXpkQ0J6WTNKcGNIUkViMk5yVG05a1pTQTlJRUZ5Y21GNUxtWnliMjBvWjNKdmF5NXphR1ZzYkM1a2IyTnJUV0Z1WVdkbGNpNXliMjkwVG05a1pTNWphR2xzWkhKbGJpbGJNVjA3WEc0Z0lDQWdhV1lnS0hOamNtbHdkRVJ2WTJ0T2IyUmxMbU52Ym5SaGFXNWxjaTVqYjI1MFlXbHVaWEpGYkdWdFpXNTBMbU5zWVhOelRHbHpkQzVqYjI1MFlXbHVjeWduZEhWMGIzSnBZV3h6TFdSbGJXOHRjMk55YVhCMExXTnZiblJoYVc1bGNpY3BLU0I3WEc0Z0lDQWdJQ0JuY205ckxuTm9aV3hzTG1SdlkydE5ZVzVoWjJWeUxtTnNiM05sS0hOamNtbHdkRVJ2WTJ0T2IyUmxLVHRjYmlBZ0lDQWdJR2R5YjJzdWMyaGxiR3d1WTJ4dmMyVkJiR3dvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1ZlkyeGxZWEpTYjI5MEtDazdYRzRnSUNBZ2RHaHBjeTVmYzJWMFNXNXBkRkJoY21GdGN5Z3BPMXh1SUNBZ0lIUm9hWE11YzNSaGNuUW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkRiR1ZoY25NZ2RHaGxJSEp2YjNRZ1pXeGxiV1Z1ZENBcUwxeHVJQ0J3Y21sMllYUmxJRjlqYkdWaGNsSnZiM1FvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZmNtOXZkQ0E5SUhWcExtUnBkaWhiWFN3Z2UybGtPaUFuWkdWdGJ5MXpZM0pwY0hRbkxDQmpiR0Z6YzJWek9pQW5kSFYwYjNKcFlXeHpMWEp2YjNRZ2RIVjBiM0pwWVd4ekxYUnlZV05ySUdSbGJXOHRZWEJ3TFhOamNtbHdkQ2Q5S1R0Y2JseHVJQ0FnSUhSb2FYTXVYMjFoYVc1SVpXRmtaWElnUFNCMWFTNXdZVzVsYkNoYlhTd2dKM1IxZEc5eWFXRnNjeTF0WVdsdUxXaGxZV1JsY2ljcE8xeHVJQ0FnSUhSb2FYTXVYMmhsWVdSbGNpQTlJSFZwTG1neEtDY25LVHRjYmlBZ0lDQjBhR2x6TGw5b1pXRmtaWEpFYVhZZ1BTQjFhUzVrYVhaSUtGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRhR1ZoWkdWeUp5azdYRzVjYmlBZ0lDQjBhR2x6TGw5aFkzUnBkbWwwZVNBOUlIVnBMbkJoYm1Wc0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRaR1Z6WTNKcGNIUnBiMjRuS1R0Y2JseHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpSR2wySUQwZ2RXa3VaR2wyVmloYlhTd2dKM1IxZEc5eWFXRnNjeTF5YjI5MExYQnliMmR5WlhOekp5azdYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM01nUFNCMWFTNWxiR1Z0Wlc1MEtDZHdjbTluY21WemN5Y3BPMXh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56VTNSbGNITWdQU0IxYVM1a2FYWlVaWGgwS0NjbktUdGNibHh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56TG0xaGVDQTlJREE3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWRtRnNkV1VnUFNBeE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZObGRITWdhVzVwZEdsaGJDQndZWEpoYldWMFpYSnpJQ292WEc0Z0lIQnlhWFpoZEdVZ1gzTmxkRWx1YVhSUVlYSmhiWE1vS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZlkzVnljbVZ1ZEZOMFpYQWdQU0F3TzF4dUlDQWdJSFJvYVhNdVgybHpVM1J2Y0hCbFpDQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYMmx6UTJGdVkyVnNiR1ZrSUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JqYjI1emRDQnBZMjl1SUQwZ2RHaHBjeTVmYzNSdmNGTjBZWEowUW5SdUxtZGxkRVZzWlcxbGJuUnpRbmxEYkdGemMwNWhiV1VvSjJkeWIyc3RhV052YmljcE8xeHVJQ0FnSUdsamIyNWJNRjB1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZV3dnWm1FdGNHRjFjMlVuTzF4dUlDQjlYRzVjYmx4dUlDQXZLaW9nUTJGdVkyVnNjeUIwYUdVZ2MyTnlhWEIwSUNvdlhHNGdJR05oYm1ObGJGTmpjbWx3ZENncE9pQjJiMmxrSUh0Y2JpQWdJQ0IwYUdsekxsOXBjME5oYm1ObGJHeGxaQ0E5SUhSeWRXVTdYRzRnSUNBZ1JHVnRiMU5qY21sd2RDNWpkWEp5Wlc1MFQySnFaV04wSUQwZ2JuVnNiRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQlpHUnpJR0VnYm1WM0lITjBaWEFnZEc4Z2MyTnlhWEIwWEc0Z0lDQXFJRUJ3WVhKaGJTQnVZVzFsSUMwZ1UzUmxjQ0J1WVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0JtZFc1aklDMGdVM1JsY0NCbWRXNWpkR2x2Ymx4dUlDQWdLaUJBY0dGeVlXMGdiM0IwYVc5dWN5QXRJRk4wWlhBZ2IzQjBhVzl1Y3lBb1pHVnpZM0pwY0hScGIyNGdZVzVrSUdSbGJHRjVJR0ZtZEdWeUlITjBaWEFnWlc1a2N5bGNiaUFnSUNvZ1FISmxkSFZ5Ym5NZ1VtVjBkWEp1Y3lCMGFHVWdZM1Z5Y21WdWRDQmtaVzF2SUhOamNtbHdkQ0J2WW1wbFkzUmNiaUFnSUNvdlhHNGdJSE4wWlhBb2JtRnRaVG9nYzNSeWFXNW5MQ0JtZFc1ak9pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMQ0J2Y0hScGIyNXpQem9nZTJSbGMyTnlhWEIwYVc5dVB6b2djM1J5YVc1bkxDQmtaV3hoZVQ4NklHNTFiV0psY24wcE9pQjBhR2x6SUh0Y2JpQWdJQ0IwYUdsekxsOXpkR1Z3YzF0MGFHbHpMbk4wWlhCekxteGxibWQwYUYwZ1BTQjdYRzRnSUNBZ0lDQnVZVzFsT2lCdVlXMWxMRnh1SUNBZ0lDQWdablZ1WXpvZ1puVnVZeXhjYmlBZ0lDQWdJRzl3ZEdsdmJuTTZJRzl3ZEdsdmJuTXNYRzRnSUNBZ2ZUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzhxS2lCVGRHRnlkSE1nZEdobElHUmxiVzhnYzJOeWFYQjBJQ292WEc0Z0lHRnplVzVqSUhOMFlYSjBLQ2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNBZ0lIUm9hWE11WDJsdWFYUlNiMjkwS0NrN1hHNGdJQ0FnZEdocGN5NWZjM1JoY25SVFkzSnBjSFFvS1R0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCIvLyBSdW50aW1lIHN5c3RlbSBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb25zIGNhbGwuXG4vLyBJdCB3YXMgcHJldmlvdXNlbHkgZGV2ZWxvcGVkIGFuZCBkb2VzIE5PVCBwcm92aWRlIGNhbGwgd2FzbS1mdW5jdGlvbnMgaW4gV2ViV29ya2Vycy5cblxuLy8gdHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlXG5jb25zdCBoZWFwTWFwID0ge1wiaTMyXCI6IFwiSEVBUDMyXCIsIC8vIEludDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgXCJmMzJcIjogXCJIRUFQRjMyXCIgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgLGFwcFxuY29uc3QgdHlwZU1hcCA9IHtcImkzMlwiOiBJbnQzMkFycmF5LCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IEZsb2F0MzJBcnJheSAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICB9OyBcbiBcbi8vIHR5cGUtdG8tc2hpZnQgbWFwXG5jb25zdCBzaGlmdE1hcCA9IHtcImkzMlwiOiAyLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgICBcImYzMlwiOiAyIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgICB9O1xuXG4vLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuY29uc3QgdHlwZVRvQ29sdW1uQ3JlYXRvck1hcCA9IHtcImkzMlwiOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZjMyXCI6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5fTtcbiBcblxuLy8gQ0xBU1NFUyBUSEFUIEFSRSBVU0VEIEJZIENQUC1XUkFQUEVSXG5cbi8vIHNpbXBsZSBhcmd1bWVudDogYSBudW1iZXIgXG5jbGFzcyBBcmd7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7ICAgICAgICBcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge31cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge31cbn1cblxuLy8gY29sdW1uIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW4gZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mVHlwZXMoYXJyT2ZUeXBlcykge1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpO1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpOyAgICAgICAgXG4gICAgfVxuXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuYnVmID0gbW9kdWxlLl9tYWxsb2ModGhpcy5udW1PZlJvd3MgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhO1xuXG4gICAgICAgICAgICBpZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSAnaTMyJykpIFxuICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICBpZihhcnJheSkgXG4gICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCB0aGlzLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy5idWY7XG4gICAgICAgICAgICBsZXQgYnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgbGV0IGFycmF5ID0gdGhpcy5kYXRhLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMubnVtT2ZSb3dzOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBoZWFwW2J1ZmZlciAvIGJ5dGVzICsgaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgbW9kdWxlLl9mcmVlKHRoaXMuYnVmKTtcbiAgICAgICAgICAgdGhpcy5idWYgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8vIG5ldyBjb2x1bW4gYXJndW1lbnQ6IGEgbmV3IGNvbHVtbiBpcyBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW4gZXh0ZW5kcyBBcmdDb2x1bW4ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cykge1xuICAgICAgICBzdXBlcihbXSwgdGFyZ2V0VHlwZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubnVtT2ZSb3dzID0gbnVtT2ZSb3dzO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmID0gdGhpcy5idWY7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTsgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKHRoaXMubnVtT2ZSb3dzKTsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBhcnJbaV0gPSBoZWFwW2J1ZiAvIGFyci5CWVRFU19QRVJfRUxFTUVOVCArIGldO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgYXJyKTtcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcnIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUaGlzIG1ha2VzIG1pc3Rha2UsIHdoZW4gdGhpcy5udW1PZlJvd3MgPSA1IChUT0RPOiBpbnZlc3RpZ2F0ZSB3aHkpXG4gICAgICAgICAgICAvL3RoaXMuZGF0YSA9IGNvbHVtbkNyZWF0b3IoJ25hbWUnLCBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIHRoaXMubnVtT2ZSb3dzKSk7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGFuIGFycmF5IG9mIGNvbHVtbnMgYXJndW1lbnRcbmNsYXNzIEFyZ0NvbHVtbnMgZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZkNvbHVtbnMpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdGhpcy5udW1PZkNvbHVtbnMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHV0IGNvbHVtbnMgZGF0YSB0byBidWZmZXJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mQ29sdW1uczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSAnZjMyJykpKVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBkYXRhIGFycmF5XG4gICAgICAgICAgICAgICAgaWYoYXJyYXkgIT0gbnVsbCkgXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCAodGhpcy5idWYgKyBpICogdGhpcy5udW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1uczsgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCB0aGlzLmJ1ZiwgbnVtT2ZSb3dzICogbnVtT2ZDb2xzKTtcbiAgICAgICBcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjb2xEYXRhID0gdGhpcy5kYXRhW2ldLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICBjb2xEYXRhW2pdID0gYXJyW2ogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBhbiBhcnJheSBvZiBuZXcgY29sdW1uczogbmV3IGNvbHVtbnMgYXJlIGNyZWF0ZWRcbmNsYXNzIEFyZ05ld0NvbHVtbnMgZXh0ZW5kcyBBcmdDb2x1bW5zIHtcblxuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHN1cGVyKFtbXV0sIHRhcmdldFR5cGUsIHRydWUpOyAgXG4gICAgICAgIHRoaXMuZGF0YSA9IFtdOyAgICAgICAgXG4gICAgICAgIHRoaXMubnVtT2ZDb2x1bW5zID0gbnVtT2ZDb2x1bW5zO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7IH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvbHVtbkNyZWF0b3IgPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyW2pdID0gaGVhcFtidWYgLyBudW1PZkJ5dGVzICsgaiArIGkgKiBudW1PZlJvd3NdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGNvbHVtbkNyZWF0b3IoKGkgKyAxKS50b1N0cmluZygpLCBhcnIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY3JlYXRlIGNvbHVtbnM6IGhlcmUsIG1heSBiZSBhIHByb2JsZW0gd2hlbiBudW1PZlJvd3MgPSA1ICAgICAgICAgICAgXG4gICAgICAgICAgICAvKmZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzLCBudW1PZlJvd3MpKSk7Ki9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYSB3cmFwcGVyIGZvciBleHBvcnRlZCBDL0MrKy1mdW5jdGlvbiBjYWxsXG5mdW5jdGlvbiBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGNGdW5jTmFtZSwgcmV0dXJuVHlwZSwgYXJncylcbntcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSk7XG4gICAgXG4gICAgbGV0IGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQgPSB0cnVlO1xuXG4gICAgLy8gY2hlY2sgbWVtb3J5IGFsbG9jYXRpb25cbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkICY9IGFyZy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpOyAgXG4gICAgXG4gICAgLy8gcnVuIGV4cG9ydGVkIGZ1bmN0aW9uIGlmIGVub3VnaCBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkXG4gICAgaWYoaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCkge1xuXG4gICAgICAgIGxldCBwYXJhbXMgPSBbXTsgLy8gYXJndW1lbnRzIHRoYXQgYXJlIHB1dCB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25cbiAgICAgICAgbGV0IHR5cGVzID0gW107IC8vIHRoZWlyIHR5cGVzXG5cbiAgICAgICAgLy8gcHJlcGFyZSBkYXRhIHRoYXQgaXMgcHV0IHRvIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZUeXBlcyh0eXBlcyk7XG4gICAgICAgICAgICBhcmcucHV0RGF0YVRvQnVmZmVyKG1vZHVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4gPSAocmV0dXJuVHlwZSA9PSAnbnVtJykgPyAnbnVtYmVyJyA6IG51bGw7ICAgXG4gICAgICAgIFxuICAgICAgICAvLyBjYWxsIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGlmKGV4dGVuZGVkVHlwZU9mUmV0dXJuKVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY0Z1bmNOYW1lLCBleHRlbmRlZFR5cGVPZlJldHVybiwgdHlwZXMsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAvLyB1cGRhdGUgYW5kIGdldCBkYXRhIGZyb20gYnVmZmVycyBpZiByZXF1aXJlZFxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICAgICAgYXJnLmdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSk7ICAgICAgIFxuICAgIH1cblxuICAgIC8vIGNsZWFyIGJ1ZmZlcnNcbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSAgICAgICAgIFxuICAgICAgICBhcmcuZnJlZUJ1ZmZlcihtb2R1bGUpO1xuXG4gICAgaWYocmVzdWx0ICE9IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHJlc3VsdDsgICAgXG59IC8vIGNwcEZ1bmNXcmFwcGVyXG5cblxuLy8gQSBMQVlFUiBCRVRXRUVOIEpTIEFORCBDUFAtV1JBUFBFUlxuXG4vLyBQYXJhbWV0ZXJzIGNyZWF0b3JcbmxldCBQYXJhbSA9IHtcbiAgICBpbnRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdpMzInKTtcbiAgICB9LFxuICAgIFxuICAgIG5ld0ludENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdpMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBpbnRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2kzMicpO1xuICAgIH0sXG5cbiAgICBuZXdJbnRDb2x1bW5zKG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1ucygnaTMyJywgbnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1uKGNvbHVtbiwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdmMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbnMoY29sdW1ucyl7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1ucyhjb2x1bW5zLnRvTGlzdCgpLCAnZjMyJyk7XG4gICAgfSxcblxuICAgIG5ld0Zsb2F0Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2YzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH0sXG5cbiAgICBudW0obnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnKG51bWJlcik7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIHZhbHVlIGNyZWF0b3JcbmxldCBSZXR1cm4gPSB7XG4gICAgdGFibGVGcm9tQ29sdW1ucyhhcmdDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoYXJnQ29sdW1ucy5kYXRhKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBpbnQobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGRvdWJsZShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgY29sdW1uKGFyZ0NvbHVtbikge1xuICAgICAgICByZXR1cm4gYXJnQ29sdW1uLmRhdGE7XG4gICAgfVxufTtcblxuLy8gVGhlIG1haW4gdG9vbCB0aGF0IGNvbWJpbmVzIGFsbCB0b2dldGhlclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxXYXNtKG1vZHVsZSwgZnVuY05hbWUsIGlucHV0cykge1xuXG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIGNvbnNvbGUubG9nKCdDKystZnVuY3Rpb24gY2FsbCByZXN1bHQ6ICcgKyBjYWxsUmVzdWx0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIGxldCBmaW5pc2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIGNvbnNvbGUubG9nKGBUaW1lIGZvciBDL0MrKy1mdW5jdGlvbiBpcyAke2ZpbmlzaCAtIHN0YXJ0fSBtcy5gKVxuXG4gICAgLy8gaWYgYSBzaW5nbGUgb2JqZWN0IG11c3QgYmUgcmV0dXJuZWRcbiAgICBpZihvdXRwdXRbJ3R5cGUnXSAhPSAnb2JqZWN0cycpXG4gICAgICByZXR1cm4gUmV0dXJuW291dHB1dFsndHlwZSddXShhcmdzW291dHB1dFsnc291cmNlJ11dLmRhdGEpO1xuXG4gICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcblxuICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgZm9yKGxldCBuYW1lIG9mIG91dHB1dFsnc291cmNlJ10pXG4gICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnc1tuYW1lXS5kYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIGFycmF5VG9SZXR1cm47XG4gIH0gLy8gY2FsbFdhc20iLCIvLyBVdGlsaXRpZXMgZm9yIGNhbGxpbmcgd2FzbS1mdW5jdGlvbnMgdmlhIHdlYndvcmtlci5cblxuLy8gV2UgdXNlIGFuIGFwcHJvYWNoIHRoYXQgaXMgd2VsbCBkZXNjcmliZWQgaGVyZTpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbi8vIEl0IGhhcyBiZWVuIG1vZGlmaWVkIGZvciB1c2FnZSBpbiBEQVRBR1JPSy5cblxuLy8gQ29uc3RhbnRzIGZvciB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXJzIHJ1bnRpbWUgc3lzdGVtXG5jb25zdCBUWVBFID0gJ3R5cGUnO1xuY29uc3QgTlVNX1RZUEUgPSAnbnVtJztcbmNvbnN0IEZMT0FUX0NPTFVNTl9UWVBFID0gJ2Zsb2F0Q29sdW1uJztcbmNvbnN0IElOVF9DT0xVTU5fVFlQRSA9ICdpbnRDb2x1bW4nO1xuY29uc3QgRkxPQVRfQ09MVU1OU19UWVBFID0gJ2Zsb2F0Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OU19UWVBFID0gJ25ld0Zsb2F0Q29sdW1ucyc7XG5jb25zdCBJTlRfQ09MVU1OU19UWVBFID0gJ2ludENvbHVtbnMnO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5TX1RZUEUgPSAnbmV3SW50Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OX1RZUEUgPSAnbmV3RmxvYXRDb2x1bW4nO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5fVFlQRSA9ICduZXdJbnRDb2x1bW4nO1xuY29uc3QgQ09MVU1OID0gJ2NvbHVtbic7XG5jb25zdCBDQUxMX1JFU1VMVCA9ICdfY2FsbFJlc3VsdCc7XG5jb25zdCBOVU1fT0ZfUk9XUyA9ICdudW1PZlJvd3MnO1xuY29uc3QgTlVNX09GX0NPTFVNTlMgPSAnbnVtT2ZDb2x1bW5zJztcbmNvbnN0IFJFRiA9ICdyZWYnO1xuY29uc3QgVkFMVUUgPSAndmFsdWUnO1xuY29uc3QgVEFCTEVfT0ZfQ09MVU1OUyA9ICd0YWJsZUZyb21Db2x1bW5zJztcbmNvbnN0IE9CSkVDVFMgPSAnb2JqZWN0cyc7XG5jb25zdCBJTlRfVFlQRSA9ICdpbnQnO1xuY29uc3QgRE9VQkxFX1RZUEUgPSAnZG91YmxlJztcbmNvbnN0IE5VTUJFUiA9ICdudW1iZXInO1xuXG4vLyBUeXBlLXRvLWhlYXAgY29ycmVzcG9uZGVuY2UuXG4vLyBJdCBpcyByZXF1aXJlZCBmb3IgSlMtbW9kdWxlIGdlbmVyYXRlZCBieSBFbXNjcmlwdGVuLFxuLy8gYW5kIGl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSBkYXRhIHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbmNvbnN0IGhlYXBNYXAgPSB7XG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW4nOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IFwiSEVBUDMyXCJcbiAgICAgICAgICAgICAgICB9O1xuXG4vLyBUeXBlIHNpZ25hdHVyZSB0byB0eXBlZCBhcnJheSBtYXAuXG4vLyBJdCBpcyB1c2VkLCB3aGVuIG1hbmlwdWxhdGluZyBjb2x1bW4ocykuXG5jb25zdCB0eXBlTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IEludDMyQXJyYXksICBcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBJbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG5cbi8vIFR5cGUtdG8tc2hpZnQgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBwYXNzaW5nIGFycmF5IHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTcgXG5jb25zdCBzaGlmdE1hcCA9IHsnaW50Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiAyLCBcbiAgICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogMiwgXG4gICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IDIsICBcbiAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogMixcbiAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogMlxuICAgICAgICAgICAgICAgICB9OyAgICAgICAgIFxuXG4vLyBHZXQgaW5wdXQgZm9yIEMrKy1mdW5jdGlvbi5cbi8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3BlY2lmaWNhdGlvbiBvZiBhcmd1bWVudHMgKGFyZ3NTcGVjaWZpY2F0aW9uKSAmIGlucHV0IGRhdGEgKGlucHV0VmFscylcbi8vIGFuZCByZXR1cm5zIGlucHV0IHRoYXQgd2lsbCBiZSBmdXJ0aGVyIHVzZWQgaW4gY3BwL3dhc20tZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3BwSW5wdXQoYXJnc1NwZWNpZmljYXRpb24sIGlucHV0VmFscykge1xuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcbiAgICBsZXQgcmVmO1xuXG4gICAgLy8gY29tcGxldGUgYW4gaW5wdXQgZm9yIGNwcFxuICAgIGxldCBpID0gMDtcbiAgICBmb3IoY29uc3Qga2V5IGluIGFyZ3NTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NTcGVjaWZpY2F0aW9uW2tleV07IFxuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG4gICAgICAgIFxuICAgICAgICAvLyBza2lwIGF1eGlsaXJ5IGVsZW1lbnRcbiAgICAgICAgaWYoa2V5ID09PSBDQUxMX1JFU1VMVCkgICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBoZXJlLCB3ZSBjb25zaWRlciBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgc3dpdGNoKHR5cGUpIHsgICAgICAgICAgIFxuIFxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IGlucHV0VmFsc1tpXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBPSyBpZiB0eXBlIG9mIGNvbHVtbiBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2FycmF5ID0gaW5wdXRWYWxzW2ldLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgICAgIGxldCBjb2wgPSBpbnB1dFZhbHNbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLyppZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSBJTlRfQ09MVU1OX1RZUEUpKSBcbiAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7Ki9cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHR5cGVzXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheSc6IGFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXkubGVuZ3RofTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IDA7ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YVthcmdbTlVNX09GX1JPV1NdW1ZBTFVFXV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWx9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zIG9yIGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IFtdOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW5zIGFuZCB0YXJnZXQgdHlwZSBjb2luc2lkZVxuICAgICAgICAgICAgICAgIC8vZm9yKGxldCBjb2wgb2YgaW5wdXRWYWxzW2ldLnRvTGlzdCgpKVxuICAgICAgICAgICAgICAgIC8vICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8vIGhlcmUsIHdlIGNoZWNrIHR5cGVzIGFuZCBwZXJmb3JtIGFuIGFwcHJvcHJpYXRlIHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIGZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgIGlmKCAoIChjb2wudHlwZSA9PT0gSU5UX1RZUEUpICYmICh0eXBlID09PSBJTlRfQ09MVU1OX1RZUEUpICkgXG4gICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvKmZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gRkxPQVRfQ09MVU1OX1RZUEUpKSlcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTsqL1xuXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheXMnOiBhcnJheXMsXG4gICAgICAgICAgICAgICAgICAgICdudW1PZlJvd3MnOiBhcnJheXNbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZDb2x1bW5zJzogYXJyYXlzLmxlbmd0aH07XG5cbiAgICAgICAgICAgICAgICBpKys7ICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnMgb3IgbmV3IGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdmFsMiA9IDA7XG5cbiAgICAgICAgICAgICAgICByZWYgPSBhcmdbTlVNX09GX1JPV1NdW1JFRl07XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMSA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9DT0xVTU5TXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnUmVmOicpO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVmKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMiA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9DT0xVTU5TXVtWQUxVRV1dOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWwxLFxuICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IHZhbDJ9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBkZWZhdWx0OiBcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRPRE86IHNwZWNpZnkgYmVoYXZpb3VyICAgICAgICAgICBcbiAgICAgICAgICAgIH0gLy8gc3dpdGNoICAgICAgICBcblxuICAgICAgICBjcHBGdW5jSW5wdXQucHVzaChhcmcpO1xuICAgIH0gLy8gZm9yIGtleVxuXG4gICAgLy9jb25zb2xlLmxvZygnY3BwRnVuY0lucHV0OicpO1xuICAgIC8vY29uc29sZS5sb2coY3BwRnVuY0lucHV0KTtcblxuICAgIHJldHVybiBjcHBGdW5jSW5wdXQ7XG59IC8vIGdldENwcElucHV0XG5cbi8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmb3IgYXJyYXkgZGF0YVxuZnVuY3Rpb24gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykgeyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6IFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiAvLyBhbGxvY2F0aW9uIG1lbW9yeSBmb3IgY29sdW1ucyB0aGF0IGFyZSBjcmVhdGVkXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEuYnVmID0gbW9kdWxlLl9tYWxsb2MoYXJnLmRhdGEubnVtT2ZSb3dzICogYXJnLmRhdGEubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gIFxuICAgIH1cbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCdpbnB1dHMgYWZ0ZXIgbWVtb3J5IGFsbG9jYXRpb246Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhpbnB1dHMpO1xufSAvLyBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlclxuXG4vLyBHZXQgYXJyYXkgb2YgdmFsdWVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtUGFyYW1zKGlucHV0cykge1xuICAgIGxldCBwYXJhbXMgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5idWYpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLm51bU9mQ29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xufSAvLyBnZXRBcnJPZldhc21QYXJhbXNcblxuLy8gR2V0IGFycmF5IG9mIHR5cGVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtVHlwZXMoaW5wdXRzKSB7XG4gICAgbGV0IHR5cGVzID0gW107XG5cbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59IC8vIGdldEFyck9mV2FzbVR5cGVzXG5cbi8vIFB1dCBhcnJheSBkYXRhIHRvIGJ1ZmZlclxuZnVuY3Rpb24gcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgbGV0IHNoaWZ0O1xuICAgIGxldCBoZWFwOyAgICBcbiAgICBcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdE1hcFt0eXBlXTtcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dOyAgXG4gICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJnLmRhdGEuYXJyYXksIGFyZy5kYXRhLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZDb2x1bW5zID0gYXJnLmRhdGEubnVtT2ZDb2x1bW5zO1xuICAgICAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IGFyZy5kYXRhLmFycmF5cztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHVtbnM7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJyYXlzW2ldLCAoYnVmICsgaSAqIG51bU9mUm93cyAqIG51bU9mQnl0ZXMpID4+IHNoaWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBwdXREYXRhVG9CdWZmZXJcblxuLy8gR2V0IGFycmF5IGRhdGEgZnJvbSBidWZmZXIuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuXG4gICAgbGV0IGhlYXA7XG4gICAgbGV0IG51bU9mUm93cztcbiAgICBsZXQgbnVtT2ZDb2xzO1xuICAgIGxldCBudW1PZkJ5dGVzOyAgICBcbiAgICBsZXQgYnVmO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOiAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICBhcnJheVtqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGpdO1xuXG4gICAgICAgICAgICAgICAgYXJnLmFycmF5ID0gYXJyYXk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQ29scyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgXG4gICAgICAgICAgICAgICAgYnVmID0gYXJnLmRhdGEuYnVmO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChhcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheXMgPSBhcnJheXM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9ICAgICAgICAgICAgXG59IC8vIGdldERhdGFGcm9tQnVmZmVyXG5cbi8vIENsZWFyIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpIHsgLy8gcHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGVhY2ggbm9uLW51bWJlciBjYXNlXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbW9kdWxlLl9mcmVlKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfSAgICBcbn0gLy8gY2xlYXJNZW1vcnlGb3JCdWZmZXJcblxuLy8gRXh0cmFjdCBuZXdseSBjcmVhdGVkIGRhdGE6IG5ldyBjb2x1bW4ocykgYXJlIGNyZWF0ZWRcbmZ1bmN0aW9uIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uQXJncywgYXJnc0FmdGVyV2FzbUNhbGwpIHtcbiAgICAvLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuICAgIGNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7J25ld0Zsb2F0Q29sdW1ucyc6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXl9O1xuXG4gICAgbGV0IGkgPSAwO1xuXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIFxuICAgIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKXsgLy8gUHJvY2VzcyBlYWNoIHR5cGVcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBuYW1lO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoMCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICAgICAgICBuYW1lcyA9IGFyZy5uYW1lO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbiA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGxldCBuYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZXMgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGsgPSAxOyBrIDw9IGxlbmd0aDsgaysrKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCgoaykudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBuYW1lcyA9IGFyZy5uYW1lcztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBsZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWVzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzW2pdKSk7XG5cbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgIH1cbn0gLy8gZXh0cmFjdE5ld2x5Q3JlYXRlZERhdGFcblxuLy8gR2V0IG91dHB1dCBkYXRhOiBvdmVyYWxsIG91dHB1dCBpcyBjcmVhdGVkXG5mdW5jdGlvbiBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pIHsgIFxuICAgIGxldCBvdXRwdXQgPSBmdW5jU3BlY2lmaWNhdGlvbi5vdXRwdXQ7XG4gICAgXG4gICAgY29uc3QgdHlwZVRvRGF0YUZpZWxkTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6ICdjb2x1bW4nfTtcblxuICAgIHN3aXRjaChvdXRwdXQudHlwZSkge1xuXG4gICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDT0xVTU46XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVEFCTEVfT0ZfQ09MVU1OUzpcbiAgICAgICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBPQkpFQ1RTOlxuICAgICAgICAgICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHVzaCBkYXRhIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHNcbiAgICAgICAgICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXQuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tuYW1lXTtcbiAgICAgICAgICAgICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnW3R5cGVUb0RhdGFGaWVsZE1hcFthcmcudHlwZV1dKTtcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxufSAvLyBnZXRPdXRwdXRcblxuLy8gQ2xlYXIgbmV3bHkgY3JlYXRlZCBkYXRhIGZpZWxkcyAobmV3IGNvbHVtbihzKSlcbmZ1bmN0aW9uIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHsgXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSBudWxsOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59IC8vIGNsZWFyTmV3bHlDcmVhdGVkRGF0YVxuXG4vLyBUSEUgTUFJTiBGVU5DVElPTjogYSB3cmFwcGVyIGZvciBDKystZnVuY3Rpb24gY2FsbFxuZXhwb3J0IGZ1bmN0aW9uIGNwcFdyYXBwZXIobW9kdWxlLCBhcmdzLCBjcHBGdW5jTmFtZSwgcmV0dXJuVHlwZSkge1xuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXJyYXlzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gcHV0IGRhdGEgKGp1c3QgY29sdW1uKHMpKSB0byBhbGxvY2F0ZWQgYnVmZmVyc1xuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCBhcmUgcGFzc2VkIHRvIEMrKy1mdW5jdGlvblxuICAgIGxldCBwYXJhbXMgPSBnZXRBcnJPZldhc21QYXJhbXMoYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdwYXJhbXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhwYXJhbXMpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMnIHR5cGVzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgdHlwZXMgPSBnZXRBcnJPZldhc21UeXBlcyhhcmdzKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCd0eXBlczonKTtcbiAgICAvL2NvbnNvbGUubG9nKHR5cGVzKTtcblxuICAgIC8vIGNhbGwgd2FzbS1mdW5jdGlvblxuICAgIGxldCByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY3BwRnVuY05hbWUsIHJldHVyblR5cGUsIHR5cGVzLCBwYXJhbXMpO1xuICAgIFxuICAgIC8vY29uc29sZS5sb2cocmVzdWx0KTtcblxuICAgIC8vIGdldCBkYXRhIGZyb20gYnVmZmVycyAoanVzdCBjb2x1bW4ocykpXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBhcmdzKTsgICAgICAgIFxuXG4gICAgLy8gY2xlYXIgbWVtb3J5IHRoYXQgd2FzIHByZXZpb3VzZWx5IGFsbG9jYXRlZFxuICAgIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdkb25lJyk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXQgdGhlIHJlcXVpcmVkIG91dHB1dC5cbi8vIEl0IHRha2VzIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBkYXRhIGNvbXB1dGVkXG4vLyBhbmQgZXh0cmFjdHMgdGhlIHJlcXVpcmVkIHJlc3VsdHMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdWx0KGZ1bmNTcGVjaWZpY2F0aW9uLCBkYXRhRnJvbVdlYldvcmtlcikge1xuICAgIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cy5fY2FsbFJlc3VsdCA9IGRhdGFGcm9tV2ViV29ya2VyLmNhbGxSZXN1bHQ7ICBcblxuICAgIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cywgZGF0YUZyb21XZWJXb3JrZXIuYXJncyk7ICAgIFxuXG4gICAgbGV0IG91dFB1dCA9IGdldE91dHB1dChmdW5jU3BlY2lmaWNhdGlvbik7XG5cbiAgICAvLyBCZWxvdywgd2UgcmVtb3ZlIG5ld2x5IGNyZWF0ZWQgY29sdW1uKHMpLCB3aGljaCBhcmUgY3JlYXRlZCBhdCB0aGUgZXh0cmFjdGlvbi1zdGVwLlxuICAgIC8vIEl0IGlzIGVzcGVjaWFsbHkgcmVxdWlyZWQsIHdoZW4gbXVsdGlwbGUgY2FsbCBvZiB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXIuXG4gICAgY2xlYXJOZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gb3V0UHV0O1xufSIsIi8vIElucHV0cyBjb3JyZWN0bmVzcyBjaGVjayB0b29sc1xuLy9MaW1pdGF0aW9uIGNvbnN0YW50c1xuY29uc3QgQ09NUF9NSU4gPSAxO1xuY29uc3QgU0FNUExFU19DT1VOVF9NSU4gPSAxO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IFBFUkNFTlRBR0VfTUlOID0gMDtcbmNvbnN0IFBFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgTUFYX0VMRU1FTlRTX0NPVU5UID0gMTAwMDAwMDAwO1xuLy8gRXJyb3IgbWVzc2FnZXNcbmNvbnN0IENPTVBfUE9TSVRWRV9NRVMgPSAnY29tcG9uZW50cyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBDT01QX0VYQ0VTUyA9ICdjb21wb25lbnRzIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBmZWF1dHVyZXMgY291bnQuJztcbmNvbnN0IElOQ09SRVJSRUNUX01JTl9NQVhfTUVTID0gJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXguJztcbmNvbnN0IElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyA9ICdmZWF0dXJlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyA9ICdzYW1wbGVzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTID0gJ3Zpb2xhdG9ycyBwZXJjZW50YWdlIG11c3QgYmUgZnJvbSB0aGUgcmFuZ2UgZnJvbSAwIHRvIDEwMC4nO1xuY29uc3QgREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTID0gJ2RhdGFmcmFtZSBpcyB0b28gYmlnLic7XG4vLyBDaGVjayBjb21wb25lbnRzIGNvdW50IChQQ0EsIFBMUylcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKSB7XG4gICAgaWYgKGNvbXBvbmVudHMgPCBDT01QX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfUE9TSVRWRV9NRVMpO1xuICAgIGlmIChjb21wb25lbnRzID4gZmVhdHVyZXMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09NUF9FWENFU1MpO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG59XG4vLyBDaGVjayBpbnB1dHMgb2YgZGF0YSBmb3IgU1ZNIHRlc3RpbmcgZ2VuZXJhdG9yXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIGlmIChtaW4gPj0gbWF4KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMpO1xuICAgIGlmIChmZWF0dXJlc0NvdW50IDwgRkVBVFVSRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfRkVBVFVSRVNfTUVTKTtcbiAgICBpZiAoc2FtcGxlc0NvdW50IDwgU0FNUExFU19DT1VOVF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyk7XG4gICAgaWYgKCh2aW9sYXRvcnNQZXJjZW50YWdlIDwgUEVSQ0VOVEFHRV9NSU4pIHx8ICh2aW9sYXRvcnNQZXJjZW50YWdlID4gUEVSQ0VOVEFHRV9NQVgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfUEVSQ0VOVEFHRV9NRVMpO1xufVxuIiwiLy8gRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciwgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNoZWNrQ29tcG9uZW5ldHMgfSBmcm9tICcuL3V0aWxzJztcbi8vIFByaW5jaXBhbCBjb21wb25lbnRzIGFuYWx5c2lzIChQQ0EpXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgY2VudGVyTnVtID0gY2VudGVyID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IHNjYWxlTnVtID0gc2NhbGUgPyAxIDogMDtcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyTnVtLCBzY2FsZU51bSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuLy8gUGFydGlhbCBsZWFzdCBzcXVhcmUgcmVncmVzc2lvbiAoUExTKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cyk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuIiwiLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuLy8gSmF2YVNjcmlwdCBBUEkgZm9yIGNhbGwgd2FzbS1mdW5jdGlvbnMgZnJvbSB0aGUgbW9kdWxlIEVEQVxuXG4vLyBJbXBvcnRzIGZvciBjYWxsIHdhc20gcnVudGltZS1zeXN0ZW06IGluIHRoZSBtYWluIHN0cmVhbSBhbmQgaW4gd2Vid29ya2Vyc1xuaW1wb3J0IHtjYWxsV2FzbX0gZnJvbSAnLi4vd2FzbS9jYWxsV2FzbSc7XG5pbXBvcnQge2dldENwcElucHV0LCBnZXRSZXN1bHR9IGZyb20gJy4uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2luaXRFREFBUEkoKSB7XG4gIGF3YWl0IGluaXRFREEoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyh0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcycsIFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc1dvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10uYXJndW1lbnRzLFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9lcnJvcihkZiwgY29sMSwgY29sMikge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZXJyb3InLCBbY29sMSwgY29sMl0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2Vycm9ySW5XZWJXb3JrZXIoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9lcnJvcldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ2Vycm9yJ10uYXJndW1lbnRzLFtjb2wxLCBjb2wyXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2Vycm9yJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbicsIFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXS5hcmd1bWVudHMsW2ZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnRdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbiddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldChrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZ2VuZXJhdGVEYXRhc2V0JywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9nZW5lcmF0ZURhdGFzZXRXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydnZW5lcmF0ZURhdGFzZXQnXS5hcmd1bWVudHMsW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2dlbmVyYXRlRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXQoZGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnbm9ybWFsaXplRGF0YXNldCcsIFtkYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfbm9ybWFsaXplRGF0YXNldEluV2ViV29ya2VyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9ub3JtYWxpemVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLmFyZ3VtZW50cyxbZGF0YV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydub3JtYWxpemVEYXRhc2V0J10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5MU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluTFNTVk0nLCBbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfdHJhaW5MU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkxTU1ZNJ10uYXJndW1lbnRzLFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsndHJhaW5MU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNKGtlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJlZGljdEJ5TFNTVk0nLCBba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmVkaWN0QnlMU1NWTVdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJlZGljdEJ5TFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIoZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvdHJhaW5BbmRBbmFseXplTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbiIsIi8vIEN1c3RvbSBVSSBmb3IgRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy8gUmVuYW1lIFBDQSBjb2x1bW5zXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lUENBY29sdW1ucyhwY2FUYWJsZSkge1xuICAgIGZvciAoY29uc3QgY29sIG9mIHBjYVRhYmxlLmNvbHVtbnMudG9MaXN0KCkpXG4gICAgICAgIGNvbC5uYW1lID0gJ19QQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbmV4cG9ydCBmdW5jdGlvbiBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdChyZWZlcmVuY2UsIHByZWRpY3Rpb24pIHtcbiAgICBwcmVkaWN0aW9uLm5hbWUgPSByZWZlcmVuY2UubmFtZSArICcocHJlZGljdGVkKSc7XG4gICAgbGV0IGRmUmVmZXJlbmNlUHJlZGljdGlvbiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbcmVmZXJlbmNlLCBwcmVkaWN0aW9uXSk7XG4gICAgZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUgPSAnUmVmZXJlbmNlIHZzLiBQcmVkaWN0ZWQnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZSZWZlcmVuY2VQcmVkaWN0aW9uLCB7IHRpdGxlOiBkZlJlZmVyZW5jZVByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgeDogcmVmZXJlbmNlLm5hbWUsXG4gICAgICAgIHk6IHByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgc2hvd1JlZ3Jlc3Npb25MaW5lOiB0cnVlLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJ1xuICAgIH0pO1xufVxuLy8gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG5leHBvcnQgZnVuY3Rpb24gcmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCByZWdyZXNzaW9uQ29lZmZzKSB7XG4gICAgcmVncmVzc2lvbkNvZWZmcy5uYW1lID0gJ3JlZ3Jlc3Npb24gY29lZmZpY2llbnQnO1xuICAgIGxldCBuYW1lc09mUHJlZGljdG9ycyA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGZlYXR1cmVzKVxuICAgICAgICBuYW1lc09mUHJlZGljdG9ycy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsZXQgcHJlZGljdG9yTmFtZXNDb2x1bW4gPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2ZlYXR1cmUnLCBuYW1lc09mUHJlZGljdG9ycyk7XG4gICAgbGV0IGRmUmVnckNvZWZzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtwcmVkaWN0b3JOYW1lc0NvbHVtbiwgcmVncmVzc2lvbkNvZWZmc10pO1xuICAgIGRmUmVnckNvZWZzLm5hbWUgPSAnUmVncmVzc2lvbiBDb2VmZmljaWVudHMnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuYmFyQ2hhcnQoZGZSZWdyQ29lZnMsIHsgdGl0bGU6IGRmUmVnckNvZWZzLm5hbWUsIHNwbGl0OiAnZmVhdHVyZScsXG4gICAgICAgIHZhbHVlOiAncmVncmVzc2lvbiBjb2VmZmljaWVudCcsIHZhbHVlQWdnclR5cGU6ICdhdmcnIH0pO1xufVxuLy8gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuZXhwb3J0IGZ1bmN0aW9uIHNjb3Jlc1NjYXR0ZXJQbG90KHhTY29yZXMsIHlTY29yZXMpIHtcbiAgICBsZXQgc2NvcmVzQ29sdW1ucyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGxldCBzY29yZXMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoc2NvcmVzQ29sdW1ucyk7XG4gICAgc2NvcmVzLm5hbWUgPSAnU2NvcmVzJztcbiAgICAvL2dyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNjb3Jlcyk7XG4gICAgcmV0dXJuIERHLlZpZXdlci5zY2F0dGVyUGxvdChzY29yZXMsIHsgdGl0bGU6IHNjb3Jlcy5uYW1lLFxuICAgICAgICB4OiB4U2NvcmVzWzBdLm5hbWUsXG4gICAgICAgIHk6IHlTY29yZXNbMF0ubmFtZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZSdcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBsZXQgbG9hZGluZ0NvbHMgPSBbXTtcbiAgICBsZXQgbG9hZGluZ0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGxldCBkZkxvYWRpbmdzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGxvYWRpbmdDb2xzKTtcbiAgICBkZkxvYWRpbmdzLm5hbWUgPSAnTG9hZGluZ3MnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZMb2FkaW5ncywgeyB0aXRsZTogZGZMb2FkaW5ncy5uYW1lLFxuICAgICAgICB4OiB4TG9hZGluZ3NbMF0ubmFtZSxcbiAgICAgICAgeTogeExvYWRpbmdzW3hMb2FkaW5ncy5sZW5ndGggLSAxXS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiAnbGFiZWxzJ1xuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIHBsc091dHB1dCkge1xuICAgIGxldCB2aWV3ID0gZ3Jvay5zaGVsbC5nZXRUYWJsZVZpZXcodGFibGUubmFtZSk7XG4gICAgLy8gMS4gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbiAgICB2aWV3LmFkZFZpZXdlcihwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdChwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTtcbiAgICAvLyAyLiBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbiAgICB2aWV3LmFkZFZpZXdlcihyZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQoZmVhdHVyZXMsIHBsc091dHB1dFsxXSkpO1xuICAgIC8vIDMuIFNjb3JlcyBTY2F0dGVyIFBsb3RcbiAgICB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyUGxvdChwbHNPdXRwdXRbMl0sIHBsc091dHB1dFszXSkpO1xuICAgIC8vIDQuIExvYWRpbmcgU2NhdHRlciBQbG90XG4gICAgdmlldy5hZGRWaWV3ZXIobG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCBwbHNPdXRwdXRbNF0pKTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogRG8gbm90IGNoYW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGNvbXB1dGVQTFMgfSBmcm9tICcuL0VEQXRvb2xzJztcbmltcG9ydCB7IGFkZFBMU3Zpc3VhbGl6YXRpb24gfSBmcm9tICcuL0VEQXVpJztcbi8vIERlbW8gbXVsdGl2YXJpYXRlIGFuYWx5c2lzIChQTFMpXG5leHBvcnQgZnVuY3Rpb24gZGVtb1BMUyhyb3dDb3VudCwgY29sQ291bnQsIGNvbXBvbmVudHNDb3VudCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGlucHV0c1xuICAgICAgICBpZiAoKHJvd0NvdW50IDw9IDApIHx8IChjb2xDb3VudCA8PSAwKSB8fCAoY29tcG9uZW50c0NvdW50IDw9IDApIHx8IChjb21wb25lbnRzQ291bnQgPiBjb2xDb3VudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhbCA9IG5ldyBERy5CYWxsb29uO1xuICAgICAgICAgICAgYmFsLmVycm9yKCdJbmNvcnJlY3QgaW5wdXRzLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZ1cnRoZXIsIGN1c3RvbSBpbnRlcmZhY2UgaXMgcHJvdmlkZWRcbiAgICAgICAgY29uc3QgUFJFRElDVCA9ICdSZWZlcmVuY2UnO1xuICAgICAgICBjb25zdCBiaWdEZW1vVGFibGUgPSBncm9rLmRhdGEudGVzdERhdGEoJ3JhbmRvbSB3YWxrJywgcm93Q291bnQsIGNvbENvdW50KTtcbiAgICAgICAgYmlnRGVtb1RhYmxlLm5hbWUgPSBgJHtyb3dDb3VudH0geCAke2NvbENvdW50fWA7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGJpZ0RlbW9UYWJsZS5jb2x1bW5zKVxuICAgICAgICAgICAgY29sLm5hbWUgPSAnRmVhdHVyZSAnICsgY29sLm5hbWU7XG4gICAgICAgIGJpZ0RlbW9UYWJsZS5jb2x1bW5zLmJ5SW5kZXgoMCkubmFtZSA9IFBSRURJQ1Q7XG4gICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGJpZ0RlbW9UYWJsZSk7XG4gICAgICAgIGxldCBwcmVkaWN0ID0gYmlnRGVtb1RhYmxlLmNvbHVtbnMuYnlOYW1lKFBSRURJQ1QpO1xuICAgICAgICBsZXQgZmVhdHVyZXMgPSBiaWdEZW1vVGFibGUuY29sdW1ucy5yZW1vdmUoUFJFRElDVCk7XG4gICAgICAgIGNvbnN0IHBsc1Jlc3VsdHMgPSB5aWVsZCBjb21wdXRlUExTKGJpZ0RlbW9UYWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCk7XG4gICAgICAgIGFkZFBMU3Zpc3VhbGl6YXRpb24oYmlnRGVtb1RhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzUmVzdWx0cyk7XG4gICAgICAgIGJpZ0RlbW9UYWJsZS5jb2x1bW5zLmFkZChwcmVkaWN0KTtcbiAgICB9KTtcbn1cbiIsIi8vIFRlc3QgZGF0YSBnZW5lcmF0aW9uIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBjaGVja0dlbmVyYXRvclNWTWlucHV0cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuY29uc3QgU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCA9IDA7XG5jb25zdCBTVk1fR0VOX0xBQkVMU19JTkRFWCA9IDE7XG5jb25zdCBTVk1fRkVBVFVSRV9OQU1FID0gJ0ZlYXR1cmUgIyc7XG5jb25zdCBTVk1fTEFCRUxfTkFNRSA9ICdMYWJlbCc7XG4vLyBSZXR1cm5zIHRoZSBkYXRhZnJhbWUgXCJjYXJzXCJcbmV4cG9ydCBmdW5jdGlvbiBjYXJzRGF0YWZyYW1lKCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ21vZGVsJywgWydhbGZhcm9tZW8nLCAnYXVkaScsICdibXcnLCAnY2hldnJvbGV0JywgJ2RvZGdlMScsICdkb2RnZTInLCAnaG9uZGExJywgJ2hvbmRhMicsICdpc3V6dScsICdqYWd1YXInLCAnbWF6ZGEnLCAnbWVyY2VkZXMnLCAnbWVyY3VyeScsICdtaXRzdWJpc2hpJywgJ25pc3NhbjEnLCAnbmlzc2FuMicsICdwZXVnb3QnLCAncGx5bW91dGgnLCAncG9yc2NoZScsICdzYWFiJywgJ3N1YmFydScsICd0b3lvdGExJywgJ3RveW90YTInLCAndG95b3RhMycsICd0b3lvdGE0JywgJ3ZvbGtzd2FnZW4xJywgJ3ZvbGtzd2FnZW4yJywgJ3ZvbHZvMScsICd2b2x2bzInLCAndm9sdm8zJ10pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2RpZXNlbCcsIG5ldyBJbnQzMkFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAxXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3R1cmJvJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHdvLmRvb3JzJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaGF0Y2hiYWNrJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aGVlbC5iYXNlJywgbmV3IEZsb2F0MzJBcnJheShbOTQuNSwgMTA1LjgwMDAwMzA1MTc1NzgxLCAxMDEuMTk5OTk2OTQ4MjQyMTksIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk2LjUsIDk0LjMwMDAwMzA1MTc1NzgxLCAxMTMsIDkzLjA5OTk5ODQ3NDEyMTEsIDExNS41OTk5OTg0NzQxMjExLCAxMDIuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5NC41LCA5NC41LCA5My42OTk5OTY5NDgyNDIxOSwgMTE0LjE5OTk5Njk0ODI0MjE5LCA4OS41LCA5OS4wOTk5OTg0NzQxMjExLCA5Ny4xOTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk1LjY5OTk5Njk0ODI0MjE5LCA5OC40MDAwMDE1MjU4Nzg5LCAxMDIuNDAwMDAxNTI1ODc4OSwgOTcuMzAwMDAzMDUxNzU3ODEsIDEwMC40MDAwMDE1MjU4Nzg5LCAxMDQuMzAwMDAzMDUxNzU3ODEsIDEwOS4wOTk5OTg0NzQxMjExLCAxMDkuMDk5OTk4NDc0MTIxMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2xlbmd0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzE3MS4xOTk5OTY5NDgyNDIyLCAxOTIuNjk5OTk2OTQ4MjQyMiwgMTc2LjgwMDAwMzA1MTc1NzgsIDE1OC44MDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE1MCwgMTc1LjM5OTk5Mzg5NjQ4NDM4LCAxNzAuNjk5OTk2OTQ4MjQyMiwgMTk5LjYwMDAwNjEwMzUxNTYyLCAxNjYuODAwMDAzMDUxNzU3OCwgMjAyLjYwMDAwNjEwMzUxNTYyLCAxNzguMzk5OTkzODk2NDg0MzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNzAuMTk5OTk2OTQ4MjQyMiwgMTY1LjMwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxOTguODk5OTkzODk2NDg0MzgsIDE2OC44OTk5OTM4OTY0ODQzOCwgMTg2LjYwMDAwNjEwMzUxNTYyLCAxNzIsIDE1OC42OTk5OTY5NDgyNDIyLCAxNjYuMzAwMDAzMDUxNzU3OCwgMTc2LjE5OTk5Njk0ODI0MjIsIDE3NS42MDAwMDYxMDM1MTU2MiwgMTcxLjY5OTk5Njk0ODI0MjIsIDE4MC4xOTk5OTY5NDgyNDIyLCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzgsIDE4OC44MDAwMDMwNTE3NTc4XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnd2lkdGgnLCBuZXcgRmxvYXQzMkFycmF5KFs2NS41LCA3MS40MDAwMDE1MjU4Nzg5LCA2NC44MDAwMDMwNTE3NTc4MSwgNjMuNTk5OTk4NDc0MTIxMDk0LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY0LCA2NS4xOTk5OTY5NDgyNDIxOSwgNjEuNzk5OTk5MjM3MDYwNTUsIDY5LjU5OTk5ODQ3NDEyMTEsIDY0LjE5OTk5Njk0ODI0MjE5LCA3MS42OTk5OTY5NDgyNDIxOSwgNjgsIDY0LjQwMDAwMTUyNTg3ODksIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY4LjQwMDAwMTUyNTg3ODksIDY1LCA2Ni41LCA2NS40MDAwMDE1MjU4Nzg5LCA2My41OTk5OTg0NzQxMjEwOTQsIDY0LjQwMDAwMTUyNTg3ODksIDY1LjU5OTk5ODQ3NDEyMTEsIDY2LjUsIDY1LjUsIDY2LjkwMDAwMTUyNTg3ODksIDY3LjE5OTk5Njk0ODI0MjE5LCA2OC44MDAwMDMwNTE3NTc4MSwgNjguOTAwMDAxNTI1ODc4OV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2hlaWdodCcsIG5ldyBGbG9hdDMyQXJyYXkoWzUyLjQwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU0LjI5OTk5OTIzNzA2MDU1LCA1MiwgNTAuNzk5OTk5MjM3MDYwNTUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTIuNTk5OTk4NDc0MTIxMDk0LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDUzLjUsIDUyLjc5OTk5OTIzNzA2MDU1LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDU2LjI5OTk5OTIzNzA2MDU1LCA1NC43OTk5OTkyMzcwNjA1NSwgNTAuNzk5OTk5MjM3MDYwNTUsIDUzLjUsIDU0LjUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTguNzAwMDAwNzYyOTM5NDUsIDUxLjU5OTk5ODQ3NDEyMTA5NCwgNTYuMDk5OTk4NDc0MTIxMDk0LCA1Mi41LCA1NC41LCA1MywgNTIsIDU0LjkwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU1LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjAwMDAwNzYyOTM5NDUsIDU1LjUsIDU1LjVdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY3VyYi53ZWlnaHQnLCBuZXcgSW50MzJBcnJheShbMjgyMywgMjg0NCwgMjM5NSwgMTkwOSwgMjEyOCwgMTk2NywgMTk1NiwgMjMwNCwgMjMzNywgNDA2NiwgMTk1MCwgMzc3MCwgMjkxMCwgMTkxOCwgMjAyNCwgMTk1MSwgMTk2NywgMzQzMCwgMjgwMCwgMjY5NSwgMjE5MCwgMTk4NSwgMjI3NSwgMjU1MSwgMjQ4MCwgMjI2MSwgMjY2MSwgMjkxMiwgMzA0OSwgMzIxN10pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdlbmcuc2l6ZScsIG5ldyBJbnQzMkFycmF5KFsxNTIsIDEzNiwgMTA4LCA5MCwgOTgsIDkwLCA5MiwgMTEwLCAxMTEsIDI1OCwgOTEsIDE4MywgMTQwLCA5MiwgOTcsIDk3LCA5MCwgMTUyLCAxOTQsIDEyMSwgMTA4LCA5MiwgMTEwLCAxNDYsIDExMCwgOTcsIDEzNiwgMTQxLCAxNDEsIDE0NV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdob3JzZXBvd2VyJywgbmV3IEludDMyQXJyYXkoWzE1NCwgMTEwLCAxMDEsIDcwLCAxMDIsIDY4LCA3NiwgODYsIDc4LCAxNzYsIDY4LCAxMjMsIDE3NSwgNjgsIDY5LCA2OSwgNjgsIDk1LCAyMDcsIDExMCwgODIsIDYyLCA1NiwgMTE2LCA3MywgNTIsIDExMCwgMTE0LCAxNjAsIDEwNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdwZWFrLnJwbScsIG5ldyBJbnQzMkFycmF5KFs1MDAwLCA1NTAwLCA1ODAwLCA1NDAwLCA1NTAwLCA1NTAwLCA2MDAwLCA1ODAwLCA0ODAwLCA0NzUwLCA1MDAwLCA0MzUwLCA1MDAwLCA1NTAwLCA1MjAwLCA1MjAwLCA1NTAwLCA0MTUwLCA1OTAwLCA1MjUwLCA0NDAwLCA0ODAwLCA0NTAwLCA0ODAwLCA0NTAwLCA0ODAwLCA1NTAwLCA1NDAwLCA1MzAwLCA0ODAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3N5bWJvbCcsIG5ldyBJbnQzMkFycmF5KFsxLCAxLCAyLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAtMSwgMSwgMiwgMSwgMSwgMSwgMCwgMywgMiwgMCwgMSwgMCwgMiwgLTEsIDIsIDAsIC0yLCAtMSwgLTFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY2l0eS5tcGcnLCBuZXcgSW50MzJBcnJheShbMTksIDE5LCAyMywgMzgsIDI0LCAzMSwgMzAsIDI3LCAyNCwgMTUsIDMxLCAyMiwgMTksIDM3LCAzMSwgMzEsIDMxLCAyNSwgMTcsIDIxLCAyOCwgMzUsIDM0LCAyNCwgMzAsIDM3LCAxOSwgMjMsIDE5LCAyNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoaWdod2F5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsyNiwgMjUsIDI5LCA0MywgMzAsIDM4LCAzNCwgMzMsIDI5LCAxOSwgMzgsIDI1LCAyNCwgNDEsIDM3LCAzNywgMzgsIDI1LCAyNSwgMjgsIDMzLCAzOSwgMzYsIDMwLCAzMywgNDYsIDI0LCAyOCwgMjUsIDI3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3ByaWNlJywgbmV3IEludDMyQXJyYXkoWzE2NTAwLCAxNzcxMCwgMTY0MzAsIDY1NzUsIDc5NTcsIDYyMjksIDcxMjksIDg4NDUsIDY3ODUsIDM1NTUwLCA3Mzk1LCAzMTYwMCwgMTY1MDMsIDUzODksIDczNDksIDcyOTksIDYyMjksIDEzODYwLCAzNzAyOCwgMTIxNzAsIDc3NzUsIDUzNDgsIDc4OTgsIDk5ODksIDEwNjk4LCA3Nzc1LCAxMzI5NSwgMTI5NDAsIDE5MDQ1LCAyMjQ3MF0pKSxcbiAgICBdKTtcbn0gLy8gY2Fyc0RhdGFmcmFtZVxuLy8gR2VuZXJhdGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmllcnNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKGtlcm5lbCwga2VybmVsUGFyYW1zLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgICAgICAvLyBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNDb2wgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsICdrZXJuZWxQYXJhbXMnLCBrZXJuZWxQYXJhbXMpO1xuICAgICAgICAvLyBDQUxMIFdBU00tQ09NUFVUQVRJT05TICBcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtc0NvbCwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIFJlbmFtZSBsYWJlbHMgY29sdW1uXG4gICAgICAgIF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdLm5hbWUgPSBTVk1fTEFCRUxfTkFNRTtcbiAgICAgICAgLy8gUmVuYW1lIGZlYXR1cmUgY29sdW1uc1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKVxuICAgICAgICAgICAgY29sLm5hbWUgPSBTVk1fRkVBVFVSRV9OQU1FICsgY29sLm5hbWU7XG4gICAgICAgIC8vIENyZWF0ZSBkYXRhZnJhbWVcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoX291dHB1dFtTVk1fR0VOX0ZFQVRVUkVTX0lOREVYXSk7XG4gICAgICAgIGRmLm5hbWUgPSBuYW1lO1xuICAgICAgICBkZi5jb2x1bW5zLmFkZChfb3V0cHV0W1NWTV9HRU5fTEFCRUxTX0lOREVYXSk7XG4gICAgICAgIHJldHVybiBkZjtcbiAgICB9KTtcbn0gLy8gdGVzdERhdGFGb3JNYWNoaW5lTGVhcm5pbmdcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogU3VwcG9ydCB2ZWN0b3IgbWFjaGluZSAoU1ZNKSB0b29scy5cbiAgIEl0J3MgZGV2ZWxvcGVkIGZvciBhcHBseWluZyBpbiBjb21iaW5hdGlvbiB3aXRoIERBVEFHUk9LIHByZWRpY3RpdmUgdG9vbHMuXG5cbiAgIFRyYWluaW5nICYgcHJlZGljdGluZyBhcmUgcHJvdmlkZWQgYnkgd2FzbS1jb21wdXRhdGlvbnMuXG5cbiAgIExlYXN0IHNxdWFyZSBzdXBwb3J0IHZlY3RvciBtYWNoaW5lIChMUy1TVk0pIGlzIGltcGxlbWVudGVkOlxuICAgICBbMV0gU3V5a2VucywgSi4sIFZhbmRld2FsbGUsIEouIFwiTGVhc3QgU3F1YXJlcyBTdXBwb3J0IFZlY3RvciBNYWNoaW5lIENsYXNzaWZpZXJzXCIsXG4gICAgICAgICAgIE5ldXJhbCBQcm9jZXNzaW5nIExldHRlcnMgOSwgMjkzLTMwMCAoMTk5OSkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDIzL0E6MTAxODYyODYwOTc0MlxuKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyLCBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbi8vIDEuIENPTlNUQU5UU1xuLy8ga2VybmVsIHR5cGVzXG5leHBvcnQgY29uc3QgTElORUFSID0gMDtcbmV4cG9ydCBjb25zdCBQT0xZTk9NSUFMID0gMTtcbmV4cG9ydCBjb25zdCBSQkYgPSAyO1xuZXhwb3J0IGNvbnN0IFNJR01PSUQgPSAzO1xuLy8gb3V0cHV0LXJlbGF0ZWRcbmNvbnN0IENPTkZVU0lPTl9NQVRSX1NJWkUgPSA0O1xuY29uc3QgTk9STUFMSVpFRF9EQVRBX0lOREVYID0gMDtcbmNvbnN0IE1FQU5TX0lOREVYID0gMTtcbmNvbnN0IFNURF9ERVZTX0lOREVYID0gMjtcbmNvbnN0IE1PREVMX1BBUkFNU19JTkRFWCA9IDM7XG5jb25zdCBNT0RFTF9XRUlHSFRTX0lOREVYID0gNDtcbmNvbnN0IFBSRURJQ1RFRF9MQUJFTFNfSU5ERVggPSA1O1xuY29uc3QgQ09SUkVDVE5FU1NfSU5ERVggPSA2O1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9JTkRFWCA9IDc7XG5jb25zdCBUUlVFX1BPU0lUSVZFX0lOREVYID0gMDtcbmNvbnN0IEZBTFNFX05FR0FUSVZFX0lOREVYID0gMTtcbmNvbnN0IEZBTFNFX1BPU0lUSVZFX0lOREVYID0gMjtcbmNvbnN0IFRSVUVfTkVHQVRJVkVfSU5ERVggPSAzO1xuLy8ga2VybmVsIHBhcmFtZXRlcnMgaW5kZWNlc1xuY29uc3QgUkJGX1NJR01BX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5ERVggPSAxO1xuY29uc3QgU0lHTU9JRF9LQVBQQV9JTkRFWCA9IDA7XG5jb25zdCBTSUdNT0lEX1RIRVRBX0lOREVYID0gMTtcbi8vIGh5cGVycGFyYW1ldGVycyBsaW1pdHNcbmNvbnN0IEdBTU1BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUkJGX1NJR01BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQgPSAwO1xuLy8gZXJyb3IgbWVzc2FnZXNcbmNvbnN0IFdST05HX0dBTU1BX01FU1NBR0UgPSAnZ2FtbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUkJGX1NJR01BX01FU1NBR0UgPSAnc2lnbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UgPSAnYyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSA9ICdkIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX0tFUk5FTF9NRVNTQUdFID0gJ2luY29ycmVjdCBrZXJuZWwuJztcbi8vIG5hbWVzXG5jb25zdCBMQUJFTFMgPSAnTGFiZWxzJztcbmNvbnN0IFBSRURJQ1RFRCA9ICdwcmVkaWN0ZWQnO1xuY29uc3QgQ09SUkVDVE5FU1MgPSAnY29ycmVjdG5lc3MnO1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9OQU1FID0gJ0NvbmZ1c2lvbiBtYXRyaXgnO1xuY29uc3QgTUVBTiA9ICdtZWFuJztcbmNvbnN0IFNURF9ERVYgPSAnc3RkIGRldic7XG5jb25zdCBNT0RFTF9QQVJBTVNfTkFNRSA9ICdhbHBoYSc7XG5jb25zdCBNT0RFTF9XRUlHSFRTX05BTUUgPSAnd2VpZ2h0JztcbmNvbnN0IEdBTU1BID0gJ2dhbW1hJztcbmNvbnN0IEtFUk5FTCA9ICdrZXJuZWwnO1xuY29uc3QgS0VSTkVMX1BBUkFNUyA9ICdrZXJuZWwgcGFyYW1zJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8xID0gJ2tlcm5lbCBwYXJhbSAxJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8yID0gJ2tlcm5lbCBwYXJhbSAyJztcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX05BTUUgPSAnZmVhdHVyZXMgY291bnQnO1xuY29uc3QgVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FID0gJ3RyYWluIHNhbXBsZXMgY291bnQnO1xuY29uc3QgVFJBSU5fRVJST1IgPSAnVHJhaW4gZXJyb3IsJSc7XG5jb25zdCBLRVJORUxfVFlQRV9UT19OQU1FX01BUCA9IFsnbGluZWFyJywgJ3BvbHlub21pYWwnLCAnUkJGJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBPU0lUSVZFX05BTUUgPSAncG9zaXRpdmUgKFApJztcbmNvbnN0IE5FR0FUSVZFX05BTUUgPSAnbmVnYXRpdmUgKE4pJztcbmNvbnN0IFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBwb3NpdGl2ZSAoUFApJztcbmNvbnN0IFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBuZWdhdGl2ZSAoUE4pJztcbmNvbnN0IFNFTlNJVElWSVRZID0gJ1NlbnNpdGl2aXR5JztcbmNvbnN0IFNQRUNJRklDSVRZID0gJ1NwZWNpZmljaXR5JztcbmNvbnN0IEJBTEFOQ0VEX0FDQ1VSQUNZID0gJ0JhbGFuY2VkIGFjY3VyYWN5JztcbmNvbnN0IFBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnUG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ05lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTUxfUkVQT1JUID0gJ01vZGVsIHJlcG9ydCc7XG5jb25zdCBNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyA9ICdQcmVkaWN0ZWQgbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMgPSAnVHJhaW4gbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyA9ICdQcmVkaWN0aW9uIGNvcnJlY3RuZXNzJztcbmNvbnN0IFBSRURJQ1RJT04gPSAncHJlZGljdGlvbic7XG4vLyBQYWNrL3VucGFjayBjb25zdGFudHNcbmNvbnN0IEJZVEVTID0gNDtcbmNvbnN0IElOVFNfQ09VTlQgPSAzO1xuY29uc3QgS0VSX1BBUkFNU19DT1VOVCA9IDI7XG5jb25zdCBNT0RFTF9LRVJORUxfSU5ERVggPSAwO1xuY29uc3QgU0FNUExFU19DT1VOVF9JTkRFWCA9IDE7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9JTkRFWCA9IDI7XG4vLyBtaXNjXG5jb25zdCBJTklUX1ZBTFVFID0gMDsgLy8gYW55IG51bWJlciBjYW4gYmUgdXNlZFxuY29uc3QgTFNfU1ZNX0FERF9DT05TVCA9IDE7IC8vIHNlZSBbMV0gZm9yIG1vcmUgZGV0YWlsc1xuLy8gMi4gVE9PTFNcbi8vIENoZWNrIExTLVNWTSBsZWFybmluZyBoeXBlcnBhcmFtZXRlcnNcbmZ1bmN0aW9uIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycykge1xuICAgIC8vIGNoZWNrIGdhbW1hXG4gICAgaWYgKGh5cGVycGFyYW1ldGVycy5nYW1tYSA8PSBHQU1NQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfR0FNTUFfTUVTU0FHRSk7XG4gICAgLy8gY2hlY2sga2VybmVsICYgaXRzIHBhcmFtZXRlcnNcbiAgICBzd2l0Y2ggKGh5cGVycGFyYW1ldGVycy5rZXJuZWwpIHtcbiAgICAgICAgY2FzZSBMSU5FQVI6IC8vIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBSQkY6IC8vIHRoZSBjYXNlIG9mIFJCRiBrZXJuZWxcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuc2lnbWEgPD0gUkJGX1NJR01BX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1JCRl9TSUdNQV9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBQT0xZTk9NSUFMOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgLy8gY2hlY2sgY1xuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5jUGFyYW0gPD0gUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGRcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZFBhcmFtIDw9IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgU0lHTU9JRDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICB9IC8vIHN3aXRjaCAgICBcbn0gLy8gY2hlY2tIeXBlcnBhcmFtZXRlcnNcbi8vIFJldHVybmVzIGxhYmVscyBwcmVkaWN0ZWQgYnkgdGhlIG1vZGVsIHNwZWNpZmllZFxuZnVuY3Rpb24gcHJlZGljdChtb2RlbCwgZGF0YXNldCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihtb2RlbC5rZXJuZWxUeXBlLCBtb2RlbC5rZXJuZWxQYXJhbXMsIG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucywgbW9kZWwudHJhaW5MYWJlbHMsIG1vZGVsLm1lYW5zLCBtb2RlbC5zdGREZXZzLCBtb2RlbC5tb2RlbFBhcmFtcywgbW9kZWwubW9kZWxXZWlnaHRzLCBkYXRhc2V0KTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIF9lcnJvciA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgcmV0dXJuIF9vdXRwdXQ7XG4gICAgfSk7XG59IC8vIHByZWRpY3Rcbi8vIEV2YWx1YXRlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbFxuZnVuY3Rpb24gZXZhbHVhdGVBY2N1cmFjeShtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICAvLyBoZXJlLCB0aGUgY2xhc3NpYyBub3RhdGlvbiBpcyB1c2VkIChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2Vuc2l0aXZpdHlfYW5kX3NwZWNpZmljaXR5KVxuICAgIGxldCBUUCA9IGRhdGFbVFJVRV9QT1NJVElWRV9JTkRFWF07IC8vIHRydWUgcG9zaXRpdmVcbiAgICBsZXQgVE4gPSBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdOyAvLyB0cnVlIG5lZ2F0aXZlXG4gICAgbGV0IEZQID0gZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF07IC8vIGZhbHNlIHBvc2l0aXZlXG4gICAgbGV0IEZOID0gZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF07IC8vIGZhbHNlIG5lZ2F0aXZlXG4gICAgbGV0IFAgPSBUUCArIEZOOyAvLyBwb3NpdGl2ZVxuICAgIGxldCBOID0gRlAgKyBUTjsgLy8gbmVnYXRpdmVcbiAgICBsZXQgVFBSID0gVFAgLyBQOyAvLyB0cnVlIHBvc2l0aXZlIHJhdGVcbiAgICBsZXQgVE5SID0gVE4gLyBOOyAvLyB0cnVlIG5lZ2F0aXZlIHJhdGVcbiAgICBsZXQgUFBWID0gVFAgLyAoVFAgKyBGUCk7IC8vIHBvc2l0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgTlBWID0gVE4gLyAoVE4gKyBGTik7IC8vIG5lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgQUNDID0gKFRQICsgVE4pIC8gKFAgKyBOKTsgLy8gYWNjdXJhY3lcbiAgICBsZXQgQkEgPSAoVFBSICsgVE5SKSAvIDI7IC8vIGJhbGFuY2VkIGFjY3VyYWN5XG4gICAgbW9kZWwuc2Vuc2l0aXZpdHkgPSBUUFI7XG4gICAgbW9kZWwuc3BlY2lmaWNpdHkgPSBUTlI7XG4gICAgbW9kZWwuYmFsYW5jZWRBY2N1cmFjeSA9IEJBO1xuICAgIG1vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlID0gUFBWO1xuICAgIG1vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlID0gTlBWO1xuICAgIG1vZGVsLnRyYWluRXJyb3IgPSAoMSAtIEFDQykgKiAxMDA7IC8vIHRyYWluIGVycm9yLCAlXG59IC8vIGV2YWx1YXRlQWNjdXJhY3lcbi8vIFJldHVybnMgdHJhaW5lZCBMUy1TVk0gbW9kZWwuXG5mdW5jdGlvbiB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGRhdGFzZXQsIGxhYmVscykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGNvcnJlY3RuZXNzIG9mIGh5cGVycGFyYW1ldGVyIGdhbW1hXG4gICAgICAgIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycyk7XG4gICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IGtlcm5lbCBwYXJhbXMgYXJyYXlcbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zQXJyYXkgPSBbSU5JVF9WQUxVRSwgSU5JVF9WQUxVRV07XG4gICAgICAgIC8vIGZpbGwga2VybmVsUGFyYW1zXG4gICAgICAgIHN3aXRjaCAoaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCkge1xuICAgICAgICAgICAgY2FzZSBMSU5FQVI6IC8vIG5vIGtlcm5lbCBwYXJhbWV0ZXJzIGluIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUkJGOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2YgUkJGLWtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1JCRl9TSUdNQV9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuc2lnbWE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPTFlOT01JQUw6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfQ19JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuY1BhcmFtO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfRF9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuZFBhcmFtO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTSUdNT0lEOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2Ygc2lnbW9pZCBrZXJuZWxcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX0tBUFBBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5rYXBwYTtcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX1RIRVRBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy50aGV0YTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGluY29ycmVjdCBrZXJuZWwgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIC8vIGNyZWF0ZSBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBsZXQga2VybmVsUGFyYW1zID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1TLCBrZXJuZWxQYXJhbXNBcnJheSk7XG4gICAgICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBtb2RlbCBwYXJhbXMgJiBwcmVjb21wdXRlZCB3ZWlndGhzXG4gICAgICAgIGxldCB0cmFpbkNvbHMgPSBkYXRhc2V0LnRvTGlzdCgpO1xuICAgICAgICBsZXQgbW9kZWxQYXJhbXNDb3VudCA9IHRyYWluQ29sc1swXS5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBsZXQgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQgPSB0cmFpbkNvbHMubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgbGV0IGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQgPSBDT05GVVNJT05fTUFUUl9TSVpFO1xuICAgICAgICAvLyBjYWxsIHdlYmFzc2VtYmx5IHRyYWluaW5nIGZ1bmN0aW9uXG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGh5cGVycGFyYW1ldGVycy5nYW1tYSwgaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICAvLyByZW5hbWUgb3V0cHV0IGNvbHVtbnNcbiAgICAgICAgb3V0cHV0W01FQU5TX0lOREVYXS5uYW1lID0gTUVBTjtcbiAgICAgICAgb3V0cHV0W1NURF9ERVZTX0lOREVYXS5uYW1lID0gU1REX0RFVjtcbiAgICAgICAgb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0ubmFtZSA9IE1PREVMX1BBUkFNU19OQU1FO1xuICAgICAgICBvdXRwdXRbTU9ERUxfV0VJR0hUU19JTkRFWF0ubmFtZSA9IE1PREVMX1dFSUdIVFNfTkFNRTtcbiAgICAgICAgb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLm5hbWUgPSBQUkVESUNURUQ7XG4gICAgICAgIG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0ubmFtZSA9IENPUlJFQ1RORVNTO1xuICAgICAgICBvdXRwdXRbQ09ORlVTSU9OX01BVFJJWF9JTkRFWF0ubmFtZSA9IENPTkZVU0lPTl9NQVRSSVhfTkFNRTtcbiAgICAgICAgLy8gY29tcGxldGUgbW9kZWxcbiAgICAgICAgbGV0IG1vZGVsID0ge1xuICAgICAgICAgICAgdHJhaW5HYW1tYTogaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLFxuICAgICAgICAgICAga2VybmVsVHlwZTogaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCxcbiAgICAgICAgICAgIGtlcm5lbFBhcmFtczoga2VybmVsUGFyYW1zLFxuICAgICAgICAgICAgdHJhaW5MYWJlbHM6IGxhYmVscyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhvdXRwdXRbTk9STUFMSVpFRF9EQVRBX0lOREVYXSksXG4gICAgICAgICAgICBtZWFuczogb3V0cHV0W01FQU5TX0lOREVYXSxcbiAgICAgICAgICAgIHN0ZERldnM6IG91dHB1dFtTVERfREVWU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFBhcmFtczogb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFdlaWdodHM6IG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXSxcbiAgICAgICAgICAgIHByZWRpY3RlZExhYmVsczogb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLFxuICAgICAgICAgICAgY29ycmVjdG5lc3M6IG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0sXG4gICAgICAgICAgICBjb25mdXNpb25NYXRyaXg6IG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXSxcbiAgICAgICAgICAgIHRyYWluRXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZlYXR1cmVzQ291bnQ6IHRyYWluQ29scy5sZW5ndGgsXG4gICAgICAgICAgICB0cmFpblNhbXBsZXNDb3VudDogdHJhaW5Db2xzWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pO1xufSAvLyB0cmFpbkFuZEFuYWx5emVNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInRyYWluQW5kQW5hbHl6ZU1vZGVsXCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhaW5lZE1vZGVsKGh5cGVycGFyYW1ldGVycywgZGYsIHByZWRpY3RfY29sdW1uKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBkZi5jb2x1bW5zO1xuICAgICAgICBsZXQgbGFiZWxzID0gY29sdW1ucy5ieU5hbWUocHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBjb2x1bW5zLnJlbW92ZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIHJldHVybiB5aWVsZCB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGNvbHVtbnMsIGxhYmVscyk7XG4gICAgfSk7XG59XG4vLyBSZXR1cm5zIGRhdGFmcmFtZSB3aXRoIHNob3J0IGluZm8gYWJvdXQgbW9kZWxcbmZ1bmN0aW9uIGdldE1vZGVsSW5mbyhtb2RlbCkge1xuICAgIGxldCBrZXJuZWxQYXJhbXMgPSBtb2RlbC5rZXJuZWxQYXJhbXMuZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEdBTU1BLCBbbW9kZWwudHJhaW5HYW1tYV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoS0VSTkVMLCBbS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVBbbW9kZWwua2VybmVsVHlwZV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1fMSwgW2tlcm5lbFBhcmFtc1swXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8yLCBba2VybmVsUGFyYW1zWzFdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgRkVBVFVSRVNfQ09VTlRfTkFNRSwgW21vZGVsLmZlYXR1cmVzQ291bnRdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUsIFttb2RlbC50cmFpblNhbXBsZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX0VSUk9SLCBbbW9kZWwudHJhaW5FcnJvcl0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEJBTEFOQ0VEX0FDQ1VSQUNZLCBbbW9kZWwuYmFsYW5jZWRBY2N1cmFjeV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNFTlNJVElWSVRZLCBbbW9kZWwuc2Vuc2l0aXZpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBTUEVDSUZJQ0lUWSwgW21vZGVsLnNwZWNpZmljaXR5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlXSlcbiAgICBdKTtcbn1cbi8vIEdldCBkYXRhZnJhbWUgd2l0aCBjb25mdXNpb24gbWF0cml4XG5mdW5jdGlvbiBnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKCcnLCBbUE9TSVRJVkVfTkFNRSwgTkVHQVRJVkVfTkFNRV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FLCBbZGF0YVtUUlVFX1BPU0lUSVZFX0lOREVYXSwgZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdpbnQnLCBQUkVESUNURURfTkVHQVRJVkVfTkFNRSwgW2RhdGFbRkFMU0VfTkVHQVRJVkVfSU5ERVhdLCBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdXSlcbiAgICBdKTtcbn1cbi8vIFNob3cgdHJhaW5pbmcgcmVwb3J0XG5leHBvcnQgZnVuY3Rpb24gc2hvd1RyYWluUmVwb3J0KGRmLCBtb2RlbCkge1xuICAgIGRmLm5hbWUgPSBNTF9SRVBPUlQ7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwudHJhaW5MYWJlbHMpO1xuICAgIGRmLmNvbHVtbnMuYWRkKG1vZGVsLnByZWRpY3RlZExhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwuY29ycmVjdG5lc3MpO1xuICAgIGxldCBkZlZpZXcgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuZm9ybShnZXRNb2RlbEluZm8obW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTLFxuICAgICAgICBjb2xvcjogbW9kZWwucHJlZGljdGVkTGFiZWxzLm5hbWVcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC50cmFpbkxhYmVscy5uYW1lXG4gICAgfSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmdyaWQoZ2V0Q29uZnVzaW9uTWF0cml4REYobW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLmNvcnJlY3RuZXNzLm5hbWVcbiAgICB9KSk7XG59IC8vIHNob3dUcmFpblJlcG9ydFxuLy8gUmV0dXJucyB0cmFpbmVkIG1vZGVsIHBhY2tlZCBpbnRvIFVJbnQ4QXJyYXlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrZWRNb2RlbChtb2RlbCkge1xuICAgIC8vIGdldCBwcmluY2lwYWwgZGF0YVxuICAgIGxldCBkYXRhQ29scyA9IG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucztcbiAgICBsZXQgc2FtcGxlc0NvdW50ID0gbW9kZWwudHJhaW5TYW1wbGVzQ291bnQ7XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBtb2RlbC5mZWF0dXJlc0NvdW50O1xuICAgIC8qbGV0IGJ1ZmZlclNpemUgPSBCWVRFUyAqICg3ICsgZmVhdHVyZXNDb3VudCAqIHNhbXBsZXNDb3VudFxuICAgICAgKyAzICogZmVhdHVyZXNDb3VudCArIDIgKiBzYW1wbGVzQ291bnQpOyovXG4gICAgLy8gY29tcHV0ZSBzaXplIG9mIHBhY2tlZCBtb2RlbFxuICAgIGxldCBidWZmZXJTaXplID0gQllURVMgKiAoSU5UU19DT1VOVCArIEtFUl9QQVJBTVNfQ09VTlQgK1xuICAgICAgICBzYW1wbGVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1RcbiAgICAgICAgKyBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnQpO1xuICAgIC8vIHBhY2tlZCBtb2RlbFxuICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheShidWZmZXJTaXplKTtcbiAgICBsZXQgYnVmZmVyID0gcmVzdWx0LmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBwYWNrIGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGxldCBpbnRzID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIGludHNbTU9ERUxfS0VSTkVMX0lOREVYXSA9IG1vZGVsLmtlcm5lbFR5cGU7XG4gICAgaW50c1tTQU1QTEVTX0NPVU5UX0lOREVYXSA9IHNhbXBsZXNDb3VudDtcbiAgICBpbnRzW0ZFQVRVUkVTX0NPVU5UX0lOREVYXSA9IGZlYXR1cmVzQ291bnQ7XG4gICAgb2Zmc2V0ICs9IElOVFNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIGtlcm5lbCBwYXJhbWV0ZXJzXG4gICAgbGV0IGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIEtFUl9QQVJBTVNfQ09VTlQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwua2VybmVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHBhY2sgbGFiZWxzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwudHJhaW5MYWJlbHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gc2FtcGxlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtZWFuIHZhbHVlcyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tZWFucy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnN0ZERldnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwgcGFyYW10ZXJzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsV2VpZ2h0cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayB0cmFpbmluZyBkYXRhc2V0XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUNvbHMpIHtcbiAgICAgICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgICAgIGZsb2F0cy5zZXQoY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59IC8vIGdldFBhY2tlZE1vZGVsXG4vLyBSZXR1cm5zIHVucGFja2VkIG1vZGVsXG5mdW5jdGlvbiBnZXRVbnBhY2tlZE1vZGVsKHBhY2tlZE1vZGVsKSB7XG4gICAgbGV0IG1vZGVsQnl0ZXMgPSBwYWNrZWRNb2RlbC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gZXh0cmFjdCBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBsZXQgaGVhZGVyID0gbmV3IEludDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBJTlRTX0NPVU5UKTtcbiAgICBvZmZzZXQgKz0gSU5UU19DT1VOVCAqIEJZVEVTO1xuICAgIGxldCBzYW1wbGVzQ291bnQgPSBoZWFkZXJbU0FNUExFU19DT1VOVF9JTkRFWF07XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBoZWFkZXJbRkVBVFVSRVNfQ09VTlRfSU5ERVhdO1xuICAgIC8vIGV4dHJhY3QgcGFyYW1ldGVycyBvZiBrZXJuZWxcbiAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShLRVJORUxfUEFSQU1TLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBsYWJlbHNcbiAgICBjb25zdCB0cmFpbkxhYmVscyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KExBQkVMUywgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBjb25zdCBtZWFucyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1FQU4sIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IHN0ZERldnMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShTVERfREVWLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIG1vZGVsXG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9QQVJBTVNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBjb25zdCBtb2RlbFdlaWdodHMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9XRUlHSFRTX05BTUUsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBkYXRhIGNvbHVtbnNcbiAgICBsZXQgZGF0YUNvbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgaSsrKSB7XG4gICAgICAgIGRhdGFDb2xzLnB1c2goREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoaS50b1N0cmluZygpLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZFRyYWluRGF0YSA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhkYXRhQ29scyk7XG4gICAgbGV0IG1vZGVsID0geyBrZXJuZWxUeXBlOiBoZWFkZXJbTU9ERUxfS0VSTkVMX0lOREVYXSxcbiAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgbWVhbnM6IG1lYW5zLFxuICAgICAgICBzdGREZXZzOiBzdGREZXZzLFxuICAgICAgICBtb2RlbFBhcmFtczogbW9kZWxQYXJhbXMsXG4gICAgICAgIG1vZGVsV2VpZ2h0czogbW9kZWxXZWlnaHRzLFxuICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBub3JtYWxpemVkVHJhaW5EYXRhXG4gICAgfTtcbiAgICByZXR1cm4gbW9kZWw7XG59IC8vIGdldFVucGFja2VkTW9kZWxcbi8vIFdyYXBwZXIgZm9yIGNvbWJpbmluZyB0aGUgZnVuY3Rpb24gXCJwcmVkaWN0XCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZGljdGlvbihkZiwgcGFja2VkTW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBnZXRVbnBhY2tlZE1vZGVsKG5ldyBVaW50OEFycmF5KHBhY2tlZE1vZGVsKSk7XG4gICAgICAgIGxldCByZXMgPSB5aWVsZCBwcmVkaWN0KG1vZGVsLCBkZi5jb2x1bW5zKTtcbiAgICAgICAgcmVzLm5hbWUgPSBQUkVESUNUSU9OO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtyZXNdKTtcbiAgICB9KTtcbn0gLy8gZ2V0UHJlZGljdGlvblxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBEbyBub3QgY2hhbmdlIHRoZXNlIGltcG9ydCBsaW5lcyB0byBtYXRjaCBleHRlcm5hbCBtb2R1bGVzIGluIHdlYnBhY2sgY29uZmlndXJhdGlvbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IERlbW9TY3JpcHQgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3R1dG9yaWFscy9zcmMvZGVtby1zY3JpcHQnO1xuaW1wb3J0IHsgX2luaXRFREFBUEkgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjb21wdXRlUENBLCBjb21wdXRlUExTIH0gZnJvbSAnLi9FREF0b29scyc7XG5pbXBvcnQgeyByZW5hbWVQQ0Fjb2x1bW5zLCBhZGRQTFN2aXN1YWxpemF0aW9uIH0gZnJvbSAnLi9FREF1aSc7XG5pbXBvcnQgeyBkZW1vUExTIH0gZnJvbSAnLi9kZW1vcyc7XG5pbXBvcnQgeyBjYXJzRGF0YWZyYW1lLCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uIH0gZnJvbSAnLi9kYXRhR2VuZXJhdG9ycyc7XG5pbXBvcnQgeyBMSU5FQVIsIFJCRiwgUE9MWU5PTUlBTCwgU0lHTU9JRCwgZ2V0VHJhaW5lZE1vZGVsLCBnZXRQcmVkaWN0aW9uLCBzaG93VHJhaW5SZXBvcnQsIGdldFBhY2tlZE1vZGVsIH0gZnJvbSAnLi9zdm0nO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbi8vbmFtZTogaW5mb1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oKSB7XG4gICAgZ3Jvay5zaGVsbC5pbmZvKF9wYWNrYWdlLndlYlJvb3QpO1xufVxuLy90YWdzOiBpbml0XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfaW5pdEVEQUFQSSgpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogVG9vbHMgfCBEYXRhIFNjaWVuY2UgfCBQQ0Fcbi8vbmFtZTogUENBXG4vL2Rlc2NyaXB0aW9uOiBQcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzIChQQ0EpLlxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlc1xuLy9pbnB1dDogaW50IGNvbXBvbmVudHMgPSAyXG4vL2lucHV0OiBib29sIGNlbnRlciA9IHRydWVcbi8vaW5wdXQ6IGJvb2wgc2NhbGUgPSB0cnVlXG4vL291dHB1dDogZGF0YWZyYW1lIHJlc3VsdCB7YWN0aW9uOmpvaW4odGFibGUpfVxuZXhwb3J0IGZ1bmN0aW9uIFBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gcmVuYW1lUENBY29sdW1ucyh5aWVsZCBjb21wdXRlUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSkpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogVG9vbHMgfCBEYXRhIFNjaWVuY2UgfCBQTFNcbi8vbmFtZTogUExTXG4vL2Rlc2NyaXB0aW9uOiBQYXJ0aWFsIGxlYXN0IHNxdWFyZSByZWdyZXNzaW9uIChQTFMpLlxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlc1xuLy9pbnB1dDogY29sdW1uIHByZWRpY3Rcbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuZXhwb3J0IGZ1bmN0aW9uIFBMUyh0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwbHNSZXN1bHRzID0geWllbGQgY29tcHV0ZVBMUyh0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICBhZGRQTFN2aXN1YWxpemF0aW9uKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzUmVzdWx0cyk7XG4gICAgfSk7XG59XG4vL25hbWU6IE1WQSBkZW1vXG4vL2Rlc2NyaXB0aW9uOiBNdWx0aXZhcmlhdGUgYW5hbHlzaXMgKFBMUykgZGVtby5cbi8vbWV0YS5kZW1vUGF0aDogRGF0YSBhbmFseXNpcyB8IE11bHRpdmFyaWF0ZSBhbmFseXNpc1xuZXhwb3J0IGZ1bmN0aW9uIGRlbW9TY3JpcHQoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGVtb1NjcmlwdCA9IG5ldyBEZW1vU2NyaXB0KCdNdWx0aXZhcmlhdGUgYW5hbHlzaXMnLCAnUHJvdmlkZXMgcGFydGlhbCBsZWFzdCBzcWF1cmUgcmVncmVzc2lvbiBhbmFseXNpcyBvZiB0aGUgZ2l2ZW4gZGF0YS4nKTtcbiAgICAgICAgY29uc3QgY2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IDM7XG4gICAgICAgIGNvbnN0IHByZWRpY3QgPSBjYXJzLmNvbHVtbnMuYnlOYW1lKCdwcmljZScpO1xuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGNhcnMuY29sdW1ucy5yZW1vdmUoJ3ByaWNlJykucmVtb3ZlKCdtb2RlbCcpO1xuICAgICAgICBjb25zdCBwbHNPdXRwdXQgPSB5aWVsZCBjb21wdXRlUExTKGNhcnMsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoc291cmNlQ2Fycyk7XG4gICAgICAgIHNvdXJjZUNhcnMubmFtZSA9ICdDYXJzJztcbiAgICAgICAgbGV0IHZpZXcgPSBncm9rLnNoZWxsLmdldFRhYmxlVmlldyhzb3VyY2VDYXJzLm5hbWUpO1xuICAgICAgICB5aWVsZCBkZW1vU2NyaXB0XG4gICAgICAgICAgICAuc3RlcCgnUnVuJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB9KSwgeyBkZXNjcmlwdGlvbjogJ1Rlc3QgZGF0YWZyYW1lIGlzIGxvYWRlZCwgYW5kIG11bHRpdmFyaWF0ZSBhbmFseXNpcyBpcyBwZXJmb3JtZWQuJywgZGVsYXk6IDAgfSlcbiAgICAgICAgICAgIC5zdGVwKCdTdHVkeScsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgYWRkUExTdmlzdWFsaXphdGlvbihzb3VyY2VDYXJzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KTsgfSksIHsgZGVzY3JpcHRpb246ICdJbnZlc3RpZ2F0ZSByZXN1bHRzLicsIGRlbGF5OiA0MDAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnVHJ5JywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyBpdGVtczogMTAwMDAsIGZlYXR1cmVzOiAxMDAsIGNvbXBvbmVudHM6IDMgfTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zUHJvcCA9IERHLlByb3BlcnR5LmpzKCdpdGVtcycsIERHLlRZUEUuSU5UKTtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzUHJvcCA9IERHLlByb3BlcnR5LmpzKCdmZWF0dXJlcycsIERHLlRZUEUuSU5UKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHNQcm9wID0gREcuUHJvcGVydHkuanMoJ2NvbXBvbmVudHMnLCBERy5UWVBFLklOVCk7XG4gICAgICAgICAgICB1aS5kaWFsb2coeyB0aXRsZTogJ1NldCcgfSlcbiAgICAgICAgICAgICAgICAuYWRkKHVpLmlucHV0LmZvcm0ocGFyYW1zLCBbaXRlbXNQcm9wLCBmZWF0dXJlc1Byb3AsIGNvbXBvbmVudHNQcm9wXSkpXG4gICAgICAgICAgICAgICAgLmFkZEJ1dHRvbignUnVuJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4geWllbGQgZGVtb1BMUyhwYXJhbXMuaXRlbXMsIHBhcmFtcy5mZWF0dXJlcywgcGFyYW1zLmNvbXBvbmVudHMpOyB9KSlcbiAgICAgICAgICAgICAgICAuc2hvdygpO1xuICAgICAgICB9KSwgeyBkZXNjcmlwdGlvbjogJ1JhbmRvbSB3YWxrIHRlc3QgZGF0YWZyYW1lIG9mIHRoZSBnaXZlbiBzaXplIGlzIGdlbmVyYXRlZCwgYW5kIGl0cyBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgaXMgcGVyZm9ybWVkLicgfSlcbiAgICAgICAgICAgIC5zdGFydCgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnMuXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzLlxuLy9pbnB1dDogc3RyaW5nIG5hbWUgPSAnRGF0YScge2NhcHRpb246IG5hbWU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9pbnB1dDogZG91YmxlIHNpZ21hID0gOTAgIHtjYXB0aW9uOiBzaWdtYTsgY2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc30gW1JCRi1rZXJuZWwgcGFyYW1hdGVyXVxuLy9pbnB1dDogaW50IHNhbXBsZXNDb3VudCA9IDEwMDAge2NhcHRpb246IHNhbXBsZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogaW50IGZlYXR1cmVzQ291bnQgPSAyIHtjYXB0aW9uOiBmZWF0dXJlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBkb3VibGUgbWluID0gLTM5IHtjYXB0aW9uOiBtaW47IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSBtYXggPSAxNzMge2NhcHRpb246IG1heDsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIHZpb2xhdG9yc1BlcmNlbnRhZ2UgPSA1IHtjYXB0aW9uOiB2aW9sYXRvcnM7IHVuaXRzOiAlOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgZGZcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZShuYW1lLCBzaWdtYSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKFJCRiwgW3NpZ21hLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluTGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IExJTkVBUiB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaW5lYXJLZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBzaWdtYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IFJCRiwgc2lnbWE6IHNpZ21hIH0sIGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGlmICh0b1Nob3dSZXBvcnQpXG4gICAgICAgICAgICBzaG93VHJhaW5SZXBvcnQoZGYsIHRyYWluZWRNb2RlbCk7XG4gICAgICAgIHJldHVybiBnZXRQYWNrZWRNb2RlbCh0cmFpbmVkTW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhcHBseVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGFwcGx5XG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkYXRhZnJhbWUgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJCRmtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgYyA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgZCA9IDIge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIGMsIGQsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBrYXBwYSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgdGhldGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBTSUdNT0lELCBrYXBwYToga2FwcGEsIHRoZXRhOiB0aGV0YSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5U2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTaWdtb2lkS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnIiwiZ2xvYmFsVGhpcyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJpIiwiRXJyb3IiLCJyZXBsYWNlIiwicCIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJncm9rIiwidWkiLCJERyIsImFzc3VyZSIsImRlbGF5IiwibXMiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiUCIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm5vdE51bGwiLCJuYW1lIiwiRGVtb1NjcmlwdCIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJfY3VycmVudFN0ZXAiLCJfaXNTdG9wcGVkIiwiX2lzQ2FuY2VsbGVkIiwiX3Jvb3QiLCJpZCIsImNsYXNzZXMiLCJfc3RlcHMiLCJfbWFpbkhlYWRlciIsIl9oZWFkZXIiLCJfaGVhZGVyRGl2IiwiX3N0b3BTdGFydEJ0biIsIl9jaGFuZ2VTdG9wU3RhdGUiLCJfcmVzdGFydEJ0biIsIl9yZXN0YXJ0U2NyaXB0IiwiX2FjdGl2aXR5IiwiX3Byb2dyZXNzRGl2IiwiX3Byb2dyZXNzIiwiX3Byb2dyZXNzU3RlcHMiLCJtYXgiLCJjdXJyZW50T2JqZWN0Iiwic3RlcHMiLCJzdGVwTnVtYmVyIiwiX2FkZEhlYWRlciIsIl9jcmVhdGVIZWFkZXJEaXYiLCJfY3JlYXRlUHJvZ3Jlc3NEaXYiLCJhcHBlbmQiLCJpbm5lclRleHQiLCJfYWRkRGVzY3JpcHRpb24iLCJfYSIsImluc3RydWN0aW9uSW5kaWNhdG9yIiwiaW5zdHJ1Y3Rpb25EaXYiLCJjdXJyZW50U3RlcERlc2NyaXB0aW9uIiwib3B0aW9ucyIsImVudHJ5IiwiX2luaXRSb290IiwiY29udGFpbmVyIiwiY29udGFpbmVyRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsIl9zdGFydFNjcmlwdCIsIl9iIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImVudHJ5SW5kaWNhdG9ycyIsImVudHJ5SW5zdHJ1Y3Rpb25zIiwiY2xhc3NOYW1lIiwicmVtb3ZlIiwiY3VycmVudFN0ZXAiLCJmdW5jIiwiX3Njcm9sbFRvIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwicmVwbGFjZVdpdGgiLCJlbGVtZW50IiwieSIsImZvY3VzIiwic2Nyb2xsVG9wIiwiaWNvbiIsInNjcmlwdERvY2tOb2RlIiwiQXJyYXkiLCJmcm9tIiwiY29udGFpbnMiLCJfY2xlYXJSb290IiwiX3NldEluaXRQYXJhbXMiLCJzdGFydCIsImNhbmNlbFNjcmlwdCIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiYXJnIiwidHlwZSIsImRhdGEiLCJhcnJheSIsImNvbCIsImdldFJhd0RhdGEiLCJ2YWwiLCJhcnJheXMiLCJ0b0xpc3QiLCJwdXNoIiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiYXJndW1lbnRzIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJ0eXBlVG9Db2x1bW5DcmVhdG9yTWFwIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJuYW1lcyIsImNvbHVtbiIsImNvbHVtbnMiLCJrIiwiaiIsImV4dHJhY3ROZXdseUNyZWF0ZWREYXRhIiwiYXJncyIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiY2hlY2tDb21wb25lbmV0cyIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImJ5SW5kZXgiLCJjb21wdXRlUExTIiwidGFibGUiLCJwcmVkaWN0IiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJjb21wb25lbnRzQ291bnQiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIiLCJfcmVzdWx0IiwiX2Vycm9yIiwiYWRkUExTdmlzdWFsaXphdGlvbiIsInBsc091dHB1dCIsInZpZXciLCJhZGRWaWV3ZXIiLCJyZWZlcmVuY2UiLCJwcmVkaWN0aW9uIiwiZGZSZWZlcmVuY2VQcmVkaWN0aW9uIiwidGl0bGUiLCJ4Iiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsInByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90IiwicmVncmVzc2lvbkNvZWZmcyIsIm5hbWVzT2ZQcmVkaWN0b3JzIiwicHJlZGljdG9yTmFtZXNDb2x1bW4iLCJkZlJlZ3JDb2VmcyIsInNwbGl0IiwidmFsdWVBZ2dyVHlwZSIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCIsInhTY29yZXMiLCJ5U2NvcmVzIiwic2NvcmVzQ29sdW1ucyIsInNjb3JlcyIsInNjb3Jlc1NjYXR0ZXJQbG90IiwieExvYWRpbmdzIiwibG9hZGluZ0NvbHMiLCJsb2FkaW5nTGFiZWxzIiwiZGZMb2FkaW5ncyIsImxhYmVscyIsImxvYWRpbmdTY2F0dGVyUGxvdCIsIlNWTV9HRU5fRkVBVFVSRVNfSU5ERVgiLCJTVk1fR0VOX0xBQkVMU19JTkRFWCIsIlNWTV9GRUFUVVJFX05BTUUiLCJTVk1fTEFCRUxfTkFNRSIsImNhcnNEYXRhZnJhbWUiLCJ0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uIiwia2VybmVsIiwia2VybmVsUGFyYW1zIiwic2FtcGxlc0NvdW50IiwiZmVhdHVyZXNDb3VudCIsIm1pbiIsInZpb2xhdG9yc1BlcmNlbnRhZ2UiLCJjaGVja0dlbmVyYXRvclNWTWlucHV0cyIsImtlcm5lbFBhcmFtc0NvbCIsIl9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlciIsImRmIiwiTElORUFSIiwiUE9MWU5PTUlBTCIsIlJCRiIsIlNJR01PSUQiLCJDT05GVVNJT05fTUFUUl9TSVpFIiwiTk9STUFMSVpFRF9EQVRBX0lOREVYIiwiTUVBTlNfSU5ERVgiLCJTVERfREVWU19JTkRFWCIsIk1PREVMX1BBUkFNU19JTkRFWCIsIk1PREVMX1dFSUdIVFNfSU5ERVgiLCJQUkVESUNURURfTEFCRUxTX0lOREVYIiwiQ09SUkVDVE5FU1NfSU5ERVgiLCJDT05GVVNJT05fTUFUUklYX0lOREVYIiwiVFJVRV9QT1NJVElWRV9JTkRFWCIsIkZBTFNFX05FR0FUSVZFX0lOREVYIiwiRkFMU0VfUE9TSVRJVkVfSU5ERVgiLCJUUlVFX05FR0FUSVZFX0lOREVYIiwiUkJGX1NJR01BX0lOREVYIiwiUE9MWU5PTUlBTF9DX0lOREVYIiwiUE9MWU5PTUlBTF9EX0lOREVYIiwiU0lHTU9JRF9LQVBQQV9JTkRFWCIsIlNJR01PSURfVEhFVEFfSU5ERVgiLCJHQU1NQV9JTkZJTVVNX0xJTUlUIiwiUkJGX1NJR01BX0lORklNVU1fTElNSVQiLCJQT0xZTk9NSUFMX0NfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUIiwiV1JPTkdfR0FNTUFfTUVTU0FHRSIsIldST05HX1JCRl9TSUdNQV9NRVNTQUdFIiwiV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSIsIldST05HX0tFUk5FTF9NRVNTQUdFIiwiTEFCRUxTIiwiUFJFRElDVEVEIiwiQ09SUkVDVE5FU1MiLCJDT05GVVNJT05fTUFUUklYX05BTUUiLCJNRUFOIiwiU1REX0RFViIsIk1PREVMX1BBUkFNU19OQU1FIiwiTU9ERUxfV0VJR0hUU19OQU1FIiwiR0FNTUEiLCJLRVJORUwiLCJLRVJORUxfUEFSQU1TIiwiS0VSTkVMX1BBUkFNXzEiLCJLRVJORUxfUEFSQU1fMiIsIkZFQVRVUkVTX0NPVU5UX05BTUUiLCJUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUiLCJUUkFJTl9FUlJPUiIsIktFUk5FTF9UWVBFX1RPX05BTUVfTUFQIiwiUE9TSVRJVkVfTkFNRSIsIk5FR0FUSVZFX05BTUUiLCJQUkVESUNURURfUE9TSVRJVkVfTkFNRSIsIlBSRURJQ1RFRF9ORUdBVElWRV9OQU1FIiwiU0VOU0lUSVZJVFkiLCJTUEVDSUZJQ0lUWSIsIkJBTEFOQ0VEX0FDQ1VSQUNZIiwiUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSIsIk5FR0FUSVZFX1BSRURJQ1RJVkVfVkFMVUUiLCJNTF9SRVBPUlQiLCJNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyIsIk1MX1JFUE9SVF9UUkFJTl9MQUJFTFMiLCJNTF9SRVBPUlRfQ09SUkVDVE5FU1MiLCJQUkVESUNUSU9OIiwiQllURVMiLCJJTlRTX0NPVU5UIiwiS0VSX1BBUkFNU19DT1VOVCIsIk1PREVMX0tFUk5FTF9JTkRFWCIsIlNBTVBMRVNfQ09VTlRfSU5ERVgiLCJGRUFUVVJFU19DT1VOVF9JTkRFWCIsIklOSVRfVkFMVUUiLCJMU19TVk1fQUREX0NPTlNUIiwiZ2V0VHJhaW5lZE1vZGVsIiwiaHlwZXJwYXJhbWV0ZXJzIiwicHJlZGljdF9jb2x1bW4iLCJieU5hbWUiLCJkYXRhc2V0IiwiZ2FtbWEiLCJzaWdtYSIsImNQYXJhbSIsImRQYXJhbSIsImNoZWNrSHlwZXJwYXJhbWV0ZXJzIiwia2VybmVsUGFyYW1zQXJyYXkiLCJrYXBwYSIsInRoZXRhIiwidHJhaW5Db2xzIiwibW9kZWxQYXJhbXNDb3VudCIsInByZWNvbXB1dGVkV2VpZ2h0c0NvdW50IiwiY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCIsIl90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyIiwibW9kZWwiLCJ0cmFpbkdhbW1hIiwia2VybmVsVHlwZSIsInRyYWluTGFiZWxzIiwibm9ybWFsaXplZFRyYWluRGF0YSIsIm1lYW5zIiwic3RkRGV2cyIsIm1vZGVsUGFyYW1zIiwibW9kZWxXZWlnaHRzIiwicHJlZGljdGVkTGFiZWxzIiwiY29ycmVjdG5lc3MiLCJjb25mdXNpb25NYXRyaXgiLCJ0cmFpbkVycm9yIiwidHJhaW5TYW1wbGVzQ291bnQiLCJUUCIsIlROIiwiRlAiLCJGTiIsIk4iLCJUUFIiLCJUTlIiLCJQUFYiLCJOUFYiLCJBQ0MiLCJCQSIsInNlbnNpdGl2aXR5Iiwic3BlY2lmaWNpdHkiLCJiYWxhbmNlZEFjY3VyYWN5IiwicG9zaXRpdmVQcmVkaWNpdHZlVmFsdWUiLCJuZWdhdGl2ZVByZWRpY2l0dmVWYWx1ZSIsImV2YWx1YXRlQWNjdXJhY3kiLCJ0cmFpbkFuZEFuYWx5emVNb2RlbCIsInNob3dUcmFpblJlcG9ydCIsImRmVmlldyIsImdldE1vZGVsSW5mbyIsImNvbG9yIiwiZ2V0Q29uZnVzaW9uTWF0cml4REYiLCJnZXRQYWNrZWRNb2RlbCIsImRhdGFDb2xzIiwiVWludDhBcnJheSIsImJ1ZmZlciIsIm9mZnNldCIsImludHMiLCJmbG9hdHMiLCJzZXQiLCJnZXRQcmVkaWN0aW9uIiwicGFja2VkTW9kZWwiLCJtb2RlbEJ5dGVzIiwiaGVhZGVyIiwiZ2V0VW5wYWNrZWRNb2RlbCIsInJlcyIsIm5vcm1hbGl6ZWREYXRhIiwicHJlY29tcHV0ZWRXZWlnaHRzIiwidGFyZ2V0RGF0YSIsIl9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyIiwiX3BhY2thZ2UiLCJpbmZvIiwid2ViUm9vdCIsImluaXQiLCJpbml0RURBIiwiX2luaXRFREFBUEkiLCJQQ0EiLCJjZW50ZXIiLCJzY2FsZSIsInBjYVRhYmxlIiwicmVuYW1lUENBY29sdW1ucyIsImNlbnRlck51bSIsInNjYWxlTnVtIiwiX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIiLCJjb21wdXRlUENBIiwiUExTIiwicGxzUmVzdWx0cyIsImRlbW9TY3JpcHQiLCJjYXJzIiwic291cmNlQ2FycyIsInBhcmFtcyIsIml0ZW1zIiwiaXRlbXNQcm9wIiwiZmVhdHVyZXNQcm9wIiwiY29tcG9uZW50c1Byb3AiLCJhZGRCdXR0b24iLCJyb3dDb3VudCIsImNvbENvdW50IiwiZXJyb3IiLCJQUkVESUNUIiwiYmlnRGVtb1RhYmxlIiwiZGVtb1BMUyIsInNob3ciLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJ0b1Nob3dSZXBvcnQiLCJ0cmFpbmVkTW9kZWwiLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsInRyYWluUkJGa2VybmVsU1ZNIiwiYXBwbHlSQkZrZXJuZWxTVk0iLCJ0cmFpblBvbHlub21pYWxLZXJuZWxTVk0iLCJjIiwiZCIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSJdLCJzb3VyY2VSb290IjoiIn0=
|
|
1
|
+
var eda;(()=>{"use strict";var t={m:{},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},u:t=>t+".js"};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var e;t.g.importScripts&&(e=t.g.location+"");var n=t.g.document;if(!e&&n&&(n.currentScript&&(e=n.currentScript.src),!e)){var r=n.getElementsByTagName("script");if(r.length)for(var a=r.length-1;a>-1&&!e;)e=r[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=e})(),t.b=document.baseURI||self.location.href;var e={};t.r(e),t.d(e,{PCA:()=>Pe,PLS:()=>Le,_package:()=>ke,applyLinearKernelSVM:()=>Re,applyPolynomialKernelSVM:()=>Me,applyRBFkernelSVM:()=>Te,applySigmoidKernelSVM:()=>$e,demoMultivariateAnalysis:()=>Ee,info:()=>De,init:()=>Fe,testDataLinearNonSeparable:()=>xe,testDataLinearSeparable:()=>Ie,trainLinearKernelSVM:()=>Ve,trainPolynomialKernelSVM:()=>Be,trainRBFkernelSVM:()=>Ne,trainSigmoidKernelSVM:()=>Oe});const n=grok,r=ui,a=DG;var o;function i(t){return e=this,n=void 0,a=function*(){yield new Promise((e=>setTimeout(e,t)))},new((r=void 0)||(r=Promise))((function(t,o){function i(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(i,s)}l((a=a.apply(e,n||[])).next())}));var e,n,r,a}!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(o||(o={}));var s=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};class l{constructor(t,e,n=!1,a){var o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._stopStartBtn=r.button(r.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=r.button(r.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=r.button(r.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._closeBtn=r.button(r.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(o=null==a?void 0:a.autoStartFirstStep)&&void 0!==o&&o,this._progress.max=0,this._progress.value=1,l.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=r.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=r.iconFA("clock");this._isAutomatic||0===e&&(n=r.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const a=r.div(this._steps[e].name,"grok-tutorial-entry-instruction"),o=r.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),i=r.divH([n,a],"grok-tutorial-entry");this._activity.append(i,o)}}_initRoot(){var t,e,r;n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1;const o=Array.from(n.shell.dockManager.rootNode.children)[0];this._node=n.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o,""),(null===(e=null===(t=o.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(r=o.parent.container.containerElement.firstElementChild)||void 0===r||r.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return s(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],a=this._activity.getElementsByClassName("grok-icon")[this._currentStep],o=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];a.className="grok-icon far fa-spinner-third fa-spin",o.classList.remove("hidden"),o.classList.add("visible");const s=n,l=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,s.offsetTop-this._mainHeader.offsetHeight),yield this._countdown(n,a,l),yield i(l);const c=r.iconFA("check");if(a.replaceWith(c),c.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=r.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return s(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return s(this,void 0,void 0,(function*(){const a=r.div([],"demo-script-countdown");e.classList.add("hidden");let o=n/1e3;const i=this._createSVGIndicator(o);a.append(i),t.prepend(a);const s=setInterval((()=>{o--,0===o&&(clearInterval(s),a.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){n.shell.dockManager.close(this._node),n.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){n.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,l.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return s(this,void 0,void 0,(function*(){this._initRoot(),n.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}l.currentObject=null,Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const c="num",u="floatColumn",m="intColumn",d="floatColumns",h="newFloatColumns",p="intColumns",f="newIntColumns",y="newFloatColumn",v="newIntColumn",w="column",g="_callResult",_="numOfRows",b="numOfColumns",S="ref",C="value",A="tableFromColumns",k="objects",D="int",F="double",P={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function L(t,e){let n,r=[],a=0;for(const o in t){const i=t[o],s=i.type;if(o!==g){switch(s){case c:case D:case F:i.data=e[a],a++;break;case m:case u:let r,o=e[a];r=o.type===D&&s===m||o.type===F&&s===u?o.getRawData():new P[s](o.getRawData()),i.data={array:r,numOfRows:r.length},a++;break;case v:case y:let l=0;n=i[_][S],l=t[n].type===c?t[n].data:t[n].data[i[_][C]],i.data={numOfRows:l},a++;break;case p:case d:let w=[];for(let t of e[a].toList())t.type===D&&s===m||t.type===F&&s===u?w.push(t.getRawData()):w.push(new P[s](t.getRawData()));i.data={arrays:w,numOfRows:w[0].length,numOfColumns:w.length},a++;break;case f:case h:let g=0,A=0;n=i[_][S],g=t[n].type===c?t[n].data:t[n].data[i[_][C]],n=i[b][S],A=t[n].type===c?t[n].data:t[n].data[i[b][C]],i.data={numOfRows:g,numOfColumns:A},a++;break;default:return}r.push(i)}}return r}function E(t,e){t.arguments._callResult=e.callResult,function(t,e){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const a in t){const o=t[a];switch(o.type){case c:case D:case F:case m:case u:case d:case p:break;case y:case v:let t;null==o.name?t=(0).toString():s=o.name,o.column=n[o.type](t,e[r].array);break;case f:case h:let a=[],i=e[r].arrays.length,s=[];if(null==o.names)for(let t=1;t<=i;t++)s.push(t.toString());else s=o.names;for(let t=0;t<i;t++)a.push(n[o.type](s[t],e[r].arrays[t]));o.columns=a}r++}}(t.arguments,e.args);let n=function(t){let e=t.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(e.type){case c:case D:case F:return t.arguments[e.source];case w:return t.arguments[e.source].column;case A:return DG.DataFrame.fromColumns(t.arguments[e.source].columns);case k:let r=[];for(let a of e.source){let e=t.arguments[a];r.push(e[n[e.type]])}return r}}(t);return function(t){for(const e in t){const n=t[e];switch(n.type){case c:case D:case F:case m:case u:case p:case d:break;case v:case y:n.column=null;break;case f:case h:n.columns=null}}}(t.arguments),n}const I=1,x=1,V=1,R=0,N=100,T=1e8,B="components must be positive.",M="components must not be greater than feautures count.",O="min must be less than max.",$="features must be positive.",H="samples must be positive.",W="violators percentage must be from the range from 0 to 100.",j="dataframe is too big.";function G(t,e){if(e<I)throw new Error(B);if(e>t.length)throw new Error(M);if(t.length*t.byIndex(0).length>T)throw new Error(j)}var z=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};function K(e,n,r,a){return z(this,void 0,void 0,(function*(){let e;G(n,a);let o=async function(e,n,r,a){return new Promise(((e,o)=>{const i=new Worker(new URL(t.p+t.u(93),t.b));i.postMessage(L(EDA.partialLeastSquareRegression.arguments,[n,r,a])),i.onmessage=function(t){i.terminate(),e(E(EDA.partialLeastSquareRegression,t.data))}}))}(0,n,r,a);return yield o.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}function U(t,e,n){n.name=e.name+"(predicted)";let r=a.DataFrame.fromColumns([t,e,n]);return r.name="Reference vs. Predicted",a.Viewer.scatterPlot(r,{title:r.name,x:e.name,y:n.name,showRegressionLine:!0,markerType:"circle",labels:t.name})}function q(t,e){e.name="regression coefficient";let n=[];for(const e of t)n.push(e.name);let r=a.Column.fromStrings("feature",n),o=a.DataFrame.fromColumns([r,e]);return o.name="Regression Coefficients",a.Viewer.barChart(o,{title:o.name,split:"feature",value:"regression coefficient",valueAggrType:"avg"})}function Y(t,e,n){let r=[t];for(let t=0;t<e.length;t++)e[t].name=`x.score.t${t+1}`,r.push(e[t]);for(let t=0;t<n.length;t++)n[t].name=`y.score.u${t+1}`,r.push(n[t]);let o=a.DataFrame.fromColumns(r);o.name="Scores";const i=e.length>1?1:0;return a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[i].name,markerType:"circle",labels:t.name})}var J=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const Q=0,X=1,Z="Feature #",tt="Label";function et(){return a.DataFrame.fromColumns([a.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),a.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),a.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),a.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),a.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),a.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),a.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),a.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),a.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),a.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),a.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),a.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),a.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),a.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),a.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),a.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),a.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])}function nt(e,n,r,o,i,s,l,c){return J(this,void 0,void 0,(function*(){!function(t,e,n,r,a){if(n>=r)throw new Error(O);if(e<V)throw new Error($);if(t<x)throw new Error(H);if(a<R||a>N)throw new Error(W)}(o,i,s,l,c);const u=a.Column.fromList("double","kernelParams",n);let m,d=async function(e,n,r,a,o,i,s){return new Promise(((l,c)=>{const u=new Worker(new URL(t.p+t.u(584),t.b));u.postMessage(L(EDA.generateDataset.arguments,[e,n,r,a,o,i,s])),u.onmessage=function(t){u.terminate(),l(E(EDA.generateDataset,t.data))}}))}(e,u,o,i,s,l,c);yield d.then((t=>{m=t}),(t=>{throw new Error(`Error: ${t}`)})),m[X].name=tt;for(const t of m[Q])t.name=Z+t.name;const h=a.DataFrame.fromColumns(m[Q]);return h.name=r,h.columns.add(m[X]),h}))}var rt=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const at=0,ot=1,it=2,st=3,lt=4,ct=0,ut=1,mt=2,dt=3,ht=4,pt=5,ft=6,yt=7,vt=0,wt=1,gt=2,_t=3,bt=0,St=0,Ct=1,At=0,kt=1,Dt=0,Ft=0,Pt=0,Lt=0,Et="gamma must be strictly positive.",It="sigma must be strictly positive.",xt="c must be strictly positive.",Vt="d must be strictly positive.",Rt="incorrect kernel.",Nt="Labels",Tt="predicted",Bt="correctness",Mt="Confusion matrix",Ot="mean",$t="std dev",Ht="alpha",Wt="weight",jt="gamma",Gt="kernel",zt="kernel params",Kt="kernel param 1",Ut="kernel param 2",qt="features count",Yt="train samples count",Jt="Train error,%",Qt=["linear","polynomial","RBF","sigmoid"],Xt="positive (P)",Zt="negative (N)",te="predicted positive (PP)",ee="predicted negative (PN)",ne="Sensitivity",re="Specificity",ae="Balanced accuracy",oe="Positive predicitve value",ie="Negative predicitve value",se="Model report",le="Predicted labels",ce="Train labels",ue="Prediction correctness",me="prediction",de=4,he=3,pe=2,fe=0,ye=1,ve=2,we=0,ge=1;function _e(e,n,r){return rt(this,void 0,void 0,(function*(){let o=n.columns,i=o.byName(r);return o.remove(r),yield function(e,n,r){return rt(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Dt)throw new Error(Et);switch(t.kernel){case at:return;case it:if(t.sigma<=Ft)throw new Error(It);return;case ot:if(t.cParam<=Pt)throw new Error(xt);if(t.dParam<=Lt)throw new Error(Vt);return;case st:return;default:throw new Error(Rt)}}(e);const o=[we,we];switch(e.kernel){case at:break;case it:o[bt]=e.sigma;break;case ot:o[St]=e.cParam,o[Ct]=e.dParam;break;case st:o[At]=e.kappa,o[kt]=e.theta;break;default:throw new Error(Rt)}let i,s=a.Column.fromList("double",zt,o),l=n.toList(),c=l[0].length+ge,u=l.length+ge,m=lt,d=async function(e,n,r,a,o,i,s,l){return new Promise(((c,u)=>{const m=new Worker(new URL(t.p+t.u(111),t.b));m.postMessage(L(EDA.trainAndAnalyzeLSSVM.arguments,[e,n,r,a,o,i,s,l])),m.onmessage=function(t){m.terminate(),c(E(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(e.gamma,e.kernel,s,c,u,m,n,r);yield d.then((t=>{i=t}),(t=>{throw new Error(`Error: ${t}`)})),i[ut].name=Ot,i[mt].name=$t,i[dt].name=Ht,i[ht].name=Wt,i[pt].name=Tt,i[ft].name=Bt,i[yt].name=Mt;let h={trainGamma:e.gamma,kernelType:e.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:a.DataFrame.fromColumns(i[ct]),means:i[ut],stdDevs:i[mt],modelParams:i[dt],modelWeights:i[ht],predictedLabels:i[pt],correctness:i[ft],confusionMatrix:i[yt],trainError:void 0,featuresCount:l.length,trainSamplesCount:l[0].length};return function(t){let e=t.confusionMatrix.getRawData(),n=e[vt],r=e[_t],a=e[gt],o=e[wt],i=n+o,s=a+r,l=n/i,c=r/s,u=n/(n+a),m=r/(r+o),d=(n+r)/(i+s),h=(l+c)/2;t.sensitivity=l,t.specificity=c,t.balancedAccuracy=h,t.positivePredicitveValue=u,t.negativePredicitveValue=m,t.trainError=100*(1-d)}(h),h}))}(e,o,i)}))}function be(t,e){t.name=se,t.columns.add(e.trainLabels),t.columns.add(e.predictedLabels),t.columns.add(e.correctness);let r=n.shell.addTableView(t);r.addViewer(a.Viewer.form(function(t){let e=t.kernelParams.getRawData();return a.DataFrame.fromColumns([a.Column.fromList("double",jt,[t.trainGamma]),a.Column.fromStrings(Gt,[Qt[t.kernelType]]),a.Column.fromList("double",Kt,[e[0]]),a.Column.fromList("double",Ut,[e[1]]),a.Column.fromList("double",qt,[t.featuresCount]),a.Column.fromList("double",Yt,[t.trainSamplesCount]),a.Column.fromList("double",Jt,[t.trainError]),a.Column.fromList("double",ae,[t.balancedAccuracy]),a.Column.fromList("double",ne,[t.sensitivity]),a.Column.fromList("double",re,[t.specificity]),a.Column.fromList("double",oe,[t.positivePredicitveValue]),a.Column.fromList("double",ie,[t.negativePredicitveValue])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:le,color:e.predictedLabels.name})),r.addViewer(a.Viewer.scatterPlot(t,{title:ce,color:e.trainLabels.name})),r.addViewer(a.Viewer.grid(function(t){let e=t.confusionMatrix.getRawData();return a.DataFrame.fromColumns([a.Column.fromStrings("",[Xt,Zt]),a.Column.fromList("int",te,[e[vt],e[gt]]),a.Column.fromList("int",ee,[e[wt],e[_t]])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:ue,color:e.correctness.name}))}function Se(t){let e=t.normalizedTrainData.columns,n=t.trainSamplesCount,r=t.featuresCount,a=new Uint8Array(de*(he+pe+n+r+r+n+ge+r+ge+r*n)),o=a.buffer,i=0,s=new Int32Array(o,i,he);s[fe]=t.kernelType,s[ye]=n,s[ve]=r,i+=he*de;let l=new Float32Array(o,i,pe);l.set(t.kernelParams.getRawData()),i+=pe*de,l=new Float32Array(o,i,n),l.set(t.trainLabels.getRawData()),i+=n*de,l=new Float32Array(o,i,r),l.set(t.means.getRawData()),i+=r*de,l=new Float32Array(o,i,r),l.set(t.stdDevs.getRawData()),i+=r*de,l=new Float32Array(o,i,n+ge),l.set(t.modelParams.getRawData()),i+=(n+ge)*de,l=new Float32Array(o,i,r+ge),l.set(t.modelWeights.getRawData()),i+=(r+ge)*de;for(const t of e)l=new Float32Array(o,i,r),l.set(t.getRawData()),i+=r*de;return a}function Ce(e,n){return rt(this,void 0,void 0,(function*(){let r=function(t){let e=t.buffer,n=0,r=new Int32Array(e,n,he);n+=he*de;let o=r[ye],i=r[ve];const s=a.Column.fromFloat32Array(zt,new Float32Array(e,n,pe));n+=pe*de;const l=a.Column.fromFloat32Array(Nt,new Float32Array(e,n,o));n+=o*de;const c=a.Column.fromFloat32Array(Ot,new Float32Array(e,n,i));n+=i*de;const u=a.Column.fromFloat32Array($t,new Float32Array(e,n,i));n+=i*de;const m=a.Column.fromFloat32Array(Ht,new Float32Array(e,n,o+ge));n+=(o+ge)*de;const d=a.Column.fromFloat32Array(Wt,new Float32Array(e,n,i+ge));n+=(i+ge)*de;let h=[];for(let t=0;t<o;t++)h.push(a.Column.fromFloat32Array(t.toString(),new Float32Array(e,n,i))),n+=i*de;const p=a.DataFrame.fromColumns(h);return{kernelType:r[fe],kernelParams:s,trainLabels:l,means:c,stdDevs:u,modelParams:m,modelWeights:d,normalizedTrainData:p}}(new Uint8Array(n)),o=yield function(e,n){return rt(this,void 0,void 0,(function*(){let r,a=async function(e,n,r,a,o,i,s,l,c){return new Promise(((u,m)=>{const d=new Worker(new URL(t.p+t.u(604),t.b));d.postMessage(L(EDA.predictByLSSVM.arguments,[e,n,r,a,o,i,s,l,c])),d.onmessage=function(t){d.terminate(),u(E(EDA.predictByLSSVM,t.data))}}))}(e.kernelType,e.kernelParams,e.normalizedTrainData.columns,e.trainLabels,e.means,e.stdDevs,e.modelParams,e.modelWeights,n);return yield a.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,e.columns);return o.name=me,a.DataFrame.fromColumns([o])}))}var Ae=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const ke=new a.Package;function De(){n.shell.info(ke.webRoot)}function Fe(){return Ae(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function Pe(e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return function(t){for(const e of t.columns.toList())e.name="PCA"+e.name;return t}(yield function(e,n,r,a,o){return z(this,void 0,void 0,(function*(){G(n,r);let e,i=async function(e,n,r,a,o){return new Promise(((e,i)=>{const s=new Worker(new URL(t.p+t.u(155),t.b));s.postMessage(L(EDA.principalComponentAnalysis.arguments,[n,r,a,o])),s.onmessage=function(t){s.terminate(),e(E(EDA.principalComponentAnalysis,t.data))}}))}(0,n,r,a?1:0,o?1:0);return yield i.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}(0,n,r,a,o))}))}function Le(t,e,r,o,i){return Ae(this,void 0,void 0,(function*(){const s=yield K(0,r,o,i);!function(t,e,r,o,i){let s=n.shell.getTableView(t.name);s.addViewer(U(e,o,i[0])),s.addViewer(q(r,i[1])),s.addViewer(function(t,e){let n=[],r=[];for(let e of t)r.push(e.name);n.push(a.Column.fromStrings("labels",r));for(let t=0;t<e.length;t++)e[t].name=`x.loading.p${t+1}`,n.push(e[t]);let o=a.DataFrame.fromColumns(n);return o.name="Loadings",a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[e.length-1].name,markerType:"circle",labels:"labels"})}(r,i[4])),s.addViewer(Y(e,i[2],i[3]))}(t,e,r,o,s)}))}function Ee(){return Ae(this,void 0,void 0,(function*(){const t=new l("Partial least squares regression","Analysis of multidimensional data."),e=et(),a=e.columns.byName("model"),o=e.columns.byName("price"),i=e.columns.remove("price").remove("model"),s=yield K(0,i,o,3),c=et();let u,m;c.name="Cars",yield t.step("Data",(()=>Ae(this,void 0,void 0,(function*(){n.shell.addTableView(c),u=n.shell.getTableView(c.name)}))),{description:"Each car has many features - patterns extraction is complicated.",delay:0}).step("Model",(()=>Ae(this,void 0,void 0,(function*(){m=r.dialog({title:"Multivariate Analysis (PLS)"}).add(r.tableInput("Table",c)).add(r.columnsInput("Features",e,i.toList,{available:void 0,checked:i.names()})).add(r.columnInput("Names",e,a,void 0)).add(r.columnInput("Predict",e,o,void 0)).add(r.intInput("Components",3,void 0)).onOK((()=>{n.shell.info("Multivariate analysis has been already performed.")})).show({x:400,y:140})}))),{description:"Predict car price by its other features.",delay:0}).step("Regression coeffcicients",(()=>Ae(this,void 0,void 0,(function*(){m.close(),u.addViewer(q(i,s[1]))}))),{description:'The feature "diesel" affects the price the most.',delay:0}).step("Scores",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(Y(a,s[2],s[3]))}))),{description:"Similarities & dissimilarities: alfaromeo and mercedes are different.",delay:0}).step("Prediction",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(U(a,o,s[0]))}))),{description:"Closer to the line means better price prediction.",delay:0}).start()}))}function Ie(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return yield nt(at,[0,0],t,e,n,r,a,o)}))}function xe(t,e,n,r,a,o,i){return Ae(this,void 0,void 0,(function*(){return yield nt(it,[e,0],t,n,r,a,o,i)}))}function Ve(t,e,n,r){return Ae(this,void 0,void 0,(function*(){const a=yield _e({gamma:n,kernel:at},t,e);return r&&be(t,a),Se(a)}))}function Re(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Ne(t,e,n,r,a){return Ae(this,void 0,void 0,(function*(){const o=yield _e({gamma:n,kernel:it,sigma:r},t,e);return a&&be(t,o),Se(o)}))}function Te(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Be(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:ot,cParam:r,dParam:a},t,e);return o&&be(t,i),Se(i)}))}function Me(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Oe(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:st,kappa:r,theta:a},t,e);return o&&be(t,i),Se(i)}))}function $e(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}eda=e})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Iiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdHV0b3JpYWxzL3NyYy9kZW1vLXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtLmpzIiwid2VicGFjazovL2VkYS8uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3V0aWxzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9FREF0b29scy50cyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL0VEQUFQSS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvRURBdWkudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2RhdGFHZW5lcmF0b3JzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9zdm0udHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3BhY2thZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQzNTk6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gZ3JvazsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gdWk7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IERHOyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZCA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZCwgcmVwb3J0KSB7XG4gICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcG9ydCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICAgICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFdmVudChldmVudCwgaGFuZGxlciwgdHJpZ2dlciwgbXMgPSAwKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN1YjtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgICAgICAgICAgICByZWplY3QoJ3RpbWVvdXQnKTtcbiAgICAgICAgICAgIH0sIG1zKTtcbiAgICAgICAgICAgIHRyaWdnZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCA9IHRydWUsIGVycm9yKSB7XG4gICAgaWYgKGVycm9yKVxuICAgICAgICBlcnJvciA9IGAke2Vycm9yfSwgYDtcbiAgICBlbHNlXG4gICAgICAgIGVycm9yID0gJyc7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsLCBleHBlY3RlZCwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yKSB7XG4gICAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgICAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAgICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5hTiAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5hTikgfHwgKGlzTmFOKGFjdHVhbCkgJiYgaXNOYU4oZXhwZWN0ZWQpKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbCwgZXhwZWN0ZWQsIGVycm9yKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICAgIGNvbnN0IGFjdHVhbFJvd0NvdW50ID0gYWN0dWFsLnJvd0NvdW50O1xuICAgIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9LCByb3cgY291bnRgKTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkUm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgICAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgICAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgICAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnksIHRlc3RzKSB7XG4gICAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGVzdHMoKTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5mdW5jdGlvbiBhZGROYW1lc3BhY2UocywgZikge1xuICAgIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlSWQsIG1vZHVsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICh3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gICAgICAgIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICAgICAgICBjb25zdCBwYWNrRnVuY3Rpb25zID0geWllbGQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICAgICAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC8uKlxcL1xcL1xccypza2lwWzpcXHNdKiguKikkLyk7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgICAgICAgICAgaWYgKCEodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwUmVhc29ucyA9IHRlc3RzW2ldLm1hdGNoKHJlZyk7XG4gICAgICAgICAgICAgICAgbGV0IHNraXBSZWFzb247XG4gICAgICAgICAgICAgICAgaWYgKHNraXBSZWFzb25zICYmIChza2lwUmVhc29ucyA9PT0gbnVsbCB8fCBza2lwUmVhc29ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2tpcFJlYXNvbnMubGVuZ3RoKSA+IDEpXG4gICAgICAgICAgICAgICAgICAgIHNraXBSZWFzb24gPSBza2lwUmVhc29uc1sxXTtcbiAgICAgICAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaChuZXcgVGVzdChhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX1gO1xuICAgICAgICAgICAgICAgIH0pLCB7IHNraXBSZWFzb246IHNraXBSZWFzb24gfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgICAgIGlmICghbW9kdWxlQXV0b1Rlc3RzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMgfTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHZhciBfZTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwYWNrYWdlXyA9IChfYiA9IChfYSA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mdW5jKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFja2FnZTtcbiAgICAgICAgeWllbGQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXy5pZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYyA9IChfZSA9IG9wdGlvbnMpLnRlc3RDb250ZXh0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAoX2UudGVzdENvbnRleHQgPSBuZXcgVGVzdENvbnRleHQoKSk7XG4gICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmJlZm9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ID0gKF9kID0gdmFsdWUudGVzdHMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goeWllbGQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRlc3QpKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoeWllbGQgUHJvbWlzZS5hbGwocmVzKSkuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmFmdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCkge1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoMTAwMCk7XG4gICAgICAgICAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5yZXBvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBERy5Mb2dnZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBza2lwcGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc2tpcHBlZCkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+ICFyLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSAnUGFja2FnZSBAcGFja2FnZSB0ZXN0ZWQ6IEBzdWNjZXNzZnVsIHN1Y2Nlc3NmdWwsIEBza2lwcGVkIHNraXBwZWQsIEBmYWlsZWQgZmFpbGVkIHRlc3RzJztcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzZnVsOiBzdWNjZXNzZnVsLFxuICAgICAgICAgICAgICAgIHNraXBwZWQ6IHNraXBwZWQsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBmYWlsZWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHBhY2thZ2U6IHBhY2thZ2VfXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGZhaWxlZClcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgeyBbYCR7ci5jYXRlZ29yeX0gfCAke3IubmFtZX1gXTogci5yZXN1bHQgfSk7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGRlc2NyaXB0aW9uLCBwYXJhbXMsICdwYWNrYWdlLXRlc3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZXhlY1Rlc3QodCwgcHJlZGljYXRlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIGNvbnN0IHNraXAgPSAoKF9hID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2tpcFJlYXNvbikgfHwgZmlsdGVyO1xuICAgICAgICBjb25zdCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogKF9iID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2tpcFJlYXNvbjtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9jID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3AgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHIubXMgPSBzdG9wIC0gc3RhcnQ7XG4gICAgICAgIGlmICghc2tpcClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0Q2hlY2soY2hlY2tIYW5kbGVyLCBlcnJvciA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdCA9IDUwMCwgaW50ZXJ2YWwgPSA1MCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlKSB7XG4gICAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdFZpZXdlcih2LCBkZiwgZGV0ZWN0U2VtYW50aWNUeXBlcyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICBjb25zdCB2aWV3ZXJOYW1lID0gYFtuYW1lPXZpZXdlci0ke3YucmVwbGFjZSgvXFxzKy9nLCAnLScpfSBpXWA7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYCR7dmlld2VyTmFtZX0gY2FudmFzLCR7dmlld2VyTmFtZX0gc3ZnLCR7dmlld2VyTmFtZX0gaW1nLFxuICAgICR7dmlld2VyTmFtZX0gaW5wdXQsJHt2aWV3ZXJOYW1lfSBoMSwke3ZpZXdlck5hbWV9IGFgO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB2aWV3ZXIgPSB0di5hZGRWaWV3ZXIodik7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyJywgMzAwMCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRmLnJvdygwKS5jZWxscykuZm9yRWFjaCgoYykgPT4gYy52YWx1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZGYucm93cy5zZWxlY3QoKHJvdykgPT4gcm93LmlkeCA+IDEgJiYgcm93LmlkeCA8IDcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDc7IGkgPCAxMjsgaSsrKVxuICAgICAgICAgICAgICAgIGRmLmZpbHRlci5zZXQoaSwgZmFsc2UpO1xuICAgICAgICAgICAgZGYuY3VycmVudFJvd0lkeCA9IDE7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKHRydWUpLmxvb2s7XG4gICAgICAgICAgICBjb25zdCBuZXdQcm9wcyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoaykgPT4gdHlwZW9mIHByb3BzW2tdID09PSAnYm9vbGVhbicpLmZvckVhY2goKGspID0+IG5ld1Byb3BzW2tdID0gIXByb3BzW2tdKTtcbiAgICAgICAgICAgIHZpZXdlci5zZXRPcHRpb25zKG5ld1Byb3BzKTtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDI1MCk7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0di5zYXZlTGF5b3V0KCk7XG4gICAgICAgICAgICBjb25zdCBvbGRQcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgICAgIHR2LnJlc2V0TGF5b3V0KCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICB0di5sb2FkTGF5b3V0KGxheW91dCk7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyIGZyb20gbGF5b3V0JywgMzAwMCk7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSgyNTApO1xuICAgICAgICAgICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgICAgICAgICAgdmlld2VyID0gQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5maW5kKCh2KSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgICAgICAgICBleHBlY3RBcnJheShyZXMsIFsyLCAxLCAyXSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodmlld2VyLmdldE9wdGlvbnMoKS5sb29rKSwgSlNPTi5zdHJpbmdpZnkob2xkUHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHR2LmNsb3NlKCk7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmNsb3NlVGFibGUoZGYpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkR1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblJsYzNRdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUzNSRExFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZMWkN4RlFVRkZMRU5CUVVNN1FVRkZVQ3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMRmxCUVZrc1EwRkJRenRCUVVOMFF5eE5RVUZOTEdGQlFXRXNSMEZCTmtJc1JVRkJSU3hEUVVGRE8wRkJRMjVFTEUxQlFVMHNRMEZCUXl4SlFVRkpMR1ZCUVhWQ0xFTkJRVU03UVVGRmJrTXNUVUZCVFN4TFFVRlhMRTFCUVUwc1EwRkxkRUk3UVVGTVJDeFhRVUZwUWl4TlFVRk5PMGxCUTNKQ0xGTkJRV2RDTEU5QlFVOHNRMEZCUXl4TFFVRlZMRVZCUVVVc1NVRkJZVHRSUVVNdlF5eEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpPMWxCUTJZc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOd1JTeERRVUZETzBsQlNHVXNZMEZCVHl4VlFVZDBRaXhEUVVGQk8wRkJRMGdzUTBGQlF5eEZRVXhuUWl4TlFVRk5MRXRCUVU0c1RVRkJUU3hSUVV0MFFqdEJRVkZFTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCU1hSQ0xGbEJRVmtzWTBGQmQwSXNSVUZCUlN4TlFVRm5RanRSUVVoMFJDeHRRa0ZCWXl4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOMFFpeFhRVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUjJJc1NVRkJTU3hqUVVGakxFdEJRVXNzVTBGQlV6dFpRVUZGTEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1kwRkJZeXhEUVVGRE8xRkJRM1pGTEVsQlFVa3NUVUZCVFN4TFFVRkxMRk5CUVZNN1dVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVTnFSQ3hEUVVGRE8wbEJRVUVzUTBGQlF6dERRVU5JTzBGQlJVUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRk5aaXhaUVVGWkxGRkJRV2RDTEVWQlFVVXNTVUZCV1N4RlFVRkZMRWxCUVhkQ0xFVkJRVVVzVDBGQmNVSTdPMUZCUTNwR0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeE5RVUZCTEU5QlFVOHNRMEZCUXl4UFFVRlBMRzlEUVVGbUxFOUJRVThzUTBGQlF5eFBRVUZQTEVkQlFVc3NTMEZCU3l4RlFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCZFVJc1JVRkJSVHRaUVVOdVF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVU4c1QwRkJUeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTzJkQ1FVTXpReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdaMEpCUTJoQ0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4SFFVRkhMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEzWkNPMmRDUVVGRExFOUJRVThzUTBGQlRTeEZRVUZGTzI5Q1FVTm1MRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEV0R0blFrRkRSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYkVJc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VFFVRlRMRU5CUVVrc1MwRkJiMElzUlVGRGNrUXNUMEZCTUVJc1JVRkJSU3hQUVVGdFFpeEZRVUZGTEV0QlFXRXNRMEZCUXpzN1VVRkRMMFFzU1VGQlNTeEhRVUZwUWl4RFFVRkRPMUZCUTNSQ0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRVVU3V1VGRGNrTXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0blFrRkROMElzU1VGQlNUdHZRa0ZEUml4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlEyWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5ZTzJkQ1FVTkVMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dG5Ra0ZEYkVJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlR0blFrRkRaQ3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdaMEpCUTJ4Q0xIZEVRVUYzUkR0blFrRkRlRVFzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTNCQ0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMW9zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPME5CUVVFN1FVRkZSQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEVsQlFWa3NSVUZCUlN4SlFVRjNRaXhGUVVGRkxFOUJRWEZDTzBsQlEyaEdMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1UwRkJVenRSUVVNelF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0pHTEVOQlFVTTdRVUZGUkN4blJrRkJaMFk3UVVGRGFFWXNUVUZCVFN4VlFVRlZMRTFCUVUwc1EwRkJReXhOUVVGWExFVkJRVVVzVjBGQlowSXNTVUZCU1N4RlFVRkZMRXRCUVdNN1NVRkRkRVVzU1VGQlNTeExRVUZMTzFGQlExQXNTMEZCU3l4SFFVRkhMRWRCUVVjc1MwRkJTeXhKUVVGSkxFTkJRVU03TzFGQlEyeENMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGFFSXNTVUZCU1N4TlFVRk5MRXRCUVVzc1VVRkJVVHRSUVVOeVFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1MwRkJTeXhoUVVGaExGRkJRVkVzVjBGQlZ5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaRkxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdNc1JVRkJSU3hSUVVGblFpeEZRVUZGTEZOQlFWTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1MwRkJZenRKUVVNM1JpeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4UlFVRlJMRXRCUVVzc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUXpsRkxFTkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeFJRVUZSTEV0QlFVc3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlF6bEZMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NVVUZCVVN4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETVVZc1QwRkJUenRKUVVOVUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXp0SlFVTjZSQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SFFVRkhMRXRCUVVzc1lVRkJUQ3hMUVVGTExHTkJRVXdzUzBGQlN5eEhRVUZKTEVWQlFVVXNhVUpCUVdsQ0xGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEY0VVc1NVRkJTU3hEUVVGRExGRkJRVkU3VVVGRFdDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hUUVVGVExFMUJRVTBzYVVKQlFXbENMRk5CUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGRFWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zVFVGQmFVSXNSVUZCUlN4UlFVRnRRaXhGUVVGRkxFdEJRV003U1VGRGFFWXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eFJRVUZSTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUXpORExFMUJRVTBzWTBGQll5eEhRVUZITEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNN1NVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeEhRVUZITEV0QlFVc3NZVUZCVEN4TFFVRkxMR05CUVV3c1MwRkJTeXhIUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdTVUZGZEVVc1MwRkJTeXhOUVVGTkxFMUJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUTNKRExFMUJRVTBzV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxGbEJRVmtzU1VGQlNTeEpRVUZKTzFsQlEzUkNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zVlVGQlZTeE5RVUZOTEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOeVJDeEpRVUZKTEZsQlFWa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWs3V1VGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhWUVVGVkxFMUJRVTBzUTBGQlF5eEpRVUZKTEd0Q1FVRnJRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeFJRVUZSTEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBITEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU42UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3p0blFrRkRPVUlzVjBGQlZ5eERRVUZETEZkQlFWY3NSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJsQ1FVTTFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVU4yUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03TzJkQ1FVVXZReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVOeVF6dExRVU5HTzBGQlEwZ3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3haUVVGWkxFTkJRVU1zVFVGQk9FSXNSVUZCUlN4UlFVRm5RenRKUVVNelJpeExRVUZMTEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRSUVVOdVJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhYUVVGWExFTkJRVU03V1VGRGNrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh6UWtGQmMwSXNWMEZCVnl4aFFVRmhMRU5CUVVNc1EwRkJRenRSUVVWc1JTeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGVFTXNTVUZCU1N4WFFVRlhMRmxCUVZrc1MwRkJTeXhKUVVGSkxHRkJRV0VzV1VGQldTeExRVUZMTzFsQlEyaEZMRmRCUVZjc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdZVUZEY2tNc1NVRkJTU3hYUVVGWExGbEJRVmtzVFVGQlRTeEpRVUZKTEdGQlFXRXNXVUZCV1N4TlFVRk5PMWxCUTNaRkxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRkRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTNKRkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRja01zU1VGQlNTeFhRVUZYTEVsQlFVa3NZVUZCWVR0WlFVTnVReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdGQlFXRXNZVUZCWVN4alFVRmpMRmRCUVZjc1YwRkJWeXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEycEhPMEZCUTBnc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCYzBJc1JVRkJSU3hSUVVGM1FqdEpRVU14UlN4TlFVRk5MRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEyNURMRTFCUVUwc1kwRkJZeXhIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGZGtNc1NVRkJTU3haUVVGWkxFbEJRVWtzWTBGQll5eEZRVUZGTzFGQlEyeERMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zTUVSQlFUQkVMRmxCUVZrc1IwRkJSenRaUVVOMlJpeG5RMEZCWjBNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4WlFVRlpMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUzBGQlN5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTE8xbEJRelZFTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRha01zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1RVRkJUU3hKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5PMWxCUTI1RkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYkVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhUUVVGVExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1MwRkRha1k3UVVGRFNDeERRVUZETzBGQlJVUXNNa0pCUVRKQ08wRkJRek5DTEUxQlFVMHNWVUZCVlN4UlFVRlJMRU5CUVVNc1VVRkJaMElzUlVGQlJTeExRVUZwUWp0SlFVTXhSQ3hsUVVGbExFZEJRVWNzVVVGQlVTeERRVUZETzBsQlF6TkNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMVlzUTBGQlF6dEJRVVZFTEhWR1FVRjFSanRCUVVOMlJpeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVRKQ08wbEJRMmhFTEVsQlFVa3NTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxGTkJRVk03VVVGRGNrTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU01UWl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTjZReXhEUVVGRE8wRkJSVVFzYzBaQlFYTkdPMEZCUTNSR0xFMUJRVTBzVlVGQlZTeExRVUZMTEVOQlFVTXNTMEZCTUVJN1NVRkRPVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzWkRMRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVlR0SlFVTjZReXhQUVVGUExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRrUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJaMElzWVVGQllTeERRVUZETEZOQlFXbENMRVZCUVVVc1RVRkJXVHM3VVVGRGFrVXNTVUZCU1N4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRVVVzVDBGQlR6dFJRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4SlFVRkpMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRaUVVNdlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMmhETEU5QlFVODdVMEZEVWp0UlFVTkVMRTFCUVUwc1pVRkJaU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU16UWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU0zUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhEUVVGRE8xRkJRMjVFTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1lVRkJZU3hGUVVGRk8xbEJRemRDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkJSU3hUUVVGVE8xbEJReTlFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZaTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU53UkN4SlFVRkpMRlZCUVZVc1EwRkJRenRuUWtGRFppeEpRVUZKTEZkQlFWY3NTVUZCU1N4RFFVRkJMRmRCUVZjc1lVRkJXQ3hYUVVGWExIVkNRVUZZTEZkQlFWY3NRMEZCUlN4TlFVRk5MRWxCUVVjc1EwRkJRenR2UWtGQlJTeFZRVUZWTEVkQlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU40UlN4bFFVRmxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVZNc1JVRkJSVHR2UWtGRE4wY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnBGTERSRFFVRTBRenR2UWtGRE5VTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1NVRkJTVHQzUWtGQlJTeE5RVUZOTEZkQlFWY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03WjBKQlEyaEVMRU5CUVVNc1EwRkJRU3hGUVVGRkxFVkJRVU1zVlVGQlZTeEZRVUZGTEZWQlFWVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVNdlFqdFRRVU5HTzFGQlEwUXNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFMUJRVTA3V1VGQlJTeFBRVUZQTzFGQlEzQkRMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRVZCUVVNc1MwRkJTeXhGUVVGRkxHVkJRV1VzUlVGQlF5eERRVUZETzBsQlF6TkVMRU5CUVVNN1EwRkJRVHRCUVVWRUxFMUJRVTBzVlVGQlowSXNVVUZCVVN4RFFVRkRMRTlCUVhWRk96czdPMUZCUTNCSExFMUJRVTBzVVVGQlVTeEhRVUZITEUxQlFVRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExHTkJRV01zUlVGQlJTd3dRMEZCUlN4SlFVRkpMREJEUVVGRkxFOUJRVThzUTBGQlF6dFJRVU5vUlN4TlFVRk5MR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYWtNc1RVRkJUU3hQUVVGUExFZEJRM1ZFTEVWQlFVVXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMUZCUXpkQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeFpRVUZCTEU5QlFWRXNSVUZCUXl4WFFVRlhMSFZEUVVGWUxGZEJRVmNzUjBGQlN5eEpRVUZKTEZkQlFWY3NSVUZCUlN4RlFVRkRPMUZCUXpORExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNeFFpeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVOb1JDeEpRVUZKTEVOQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEZGQlFWRXNTMEZCU1N4VFFVRlRMRVZCUVVVN1owSkJRMnhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN2IwSkJRMmhGTEZOQlFWTTdZVUZEV2p0WlFVTkVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUTNaRExFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEhMRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVms3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6bEhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTjJRanRSUVVORUxFbEJRVWtzVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4alFVRmpMRVZCUVVVN1dVRkRkRU1zVFVGQlRTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRiRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTnVReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTllMRkZCUVZFc1JVRkJSU3h6UWtGQmMwSTdiMEpCUTJoRExFbEJRVWtzUlVGQlJTeFpRVUZaTzI5Q1FVTnNRaXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTE8ybENRVU53UlN4RFFVRkRMRU5CUVVNN1lVRkRTanRUUVVOR08xRkJRMFFzU1VGQlNTeFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSVHRaUVVNNVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU12UWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXpORUxFMUJRVTBzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRGVFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEYWtRc1RVRkJUU3hYUVVGWExFZEJRVWNzZVVaQlFYbEdMRU5CUVVNN1dVRkRPVWNzVFVGQlRTeE5RVUZOTEVkQlFVYzdaMEpCUTJJc1ZVRkJWU3hGUVVGRkxGVkJRVlU3WjBKQlEzUkNMRTlCUVU4c1JVRkJSU3hQUVVGUE8yZENRVU5vUWl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTA3WjBKQlEzSkNMRTlCUVU4c1JVRkJSU3hSUVVGUk8yRkJRMnhDTEVOQlFVTTdXVUZEUml4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFMUJRVTA3WjBKQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42Uml4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dFRRVU51UkR0UlFVTkVMRTlCUVU4c1QwRkJUeXhEUVVGRE96dERRVU5vUWp0QlFVVkVMRk5CUVdVc1VVRkJVU3hEUVVGRExFTkJRVThzUlVGQlJTeFRRVUUyUWpzN08xRkJRelZFTEVsQlFVa3NRMEZCZFVjc1EwRkJRenRSUVVNMVJ5eE5RVUZOTEUxQlFVMHNSMEZCUnl4VFFVRlRMRWxCUVVrc1UwRkJVeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pITEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVFc1RVRkJRU3hEUVVGRExFTkJRVU1zVDBGQlR5d3dRMEZCUlN4VlFVRlZMRXRCUVVrc1RVRkJUU3hEUVVGRE8xRkJRemRETEUxQlFVMHNWVUZCVlN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRU5CUVVNc1EwRkJReXhQUVVGUExEQkRRVUZGTEZWQlFWVXNRMEZCUXp0UlFVTTVSQ3hKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVrSXNTVUZCU1R0WlFVTkdMRWxCUVVrc1NVRkJTVHRuUWtGRFRpeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFZRVUZYTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdPMmRDUVVVdlJDeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZCTEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3h0UTBGQlNTeEpRVUZKTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTTdVMEZET1VVN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJRenRUUVVOdVJUdFJRVU5FTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNZVUZCWVR0UlFVTmlMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYWtVc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTNoQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOb1FpeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1EwRkRWanRCUVVWRUxEWkNRVUUyUWp0QlFVTTNRaXhOUVVGTkxGVkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlZPenRSUVVOd1F5eE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VTXNRMEZCUXp0RFFVRkJPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNXVUZCTWtJc1JVRkRNVVFzVVVGQlowSXNhMEpCUVd0Q0xFVkJRVVVzVDBGQlpTeEhRVUZITEVWQlFVVXNWMEZCYlVJc1JVRkJSVHM3VVVGRE4wVXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0WlFVTnlReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTmtMR0ZCUVdFc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZETVVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNMElzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTFRc1lVRkJZVHRaUVVOaUxFMUJRVTBzVlVGQlZTeEhRVUZaTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVN1owSkJRek5ETEVsQlFVa3NXVUZCV1N4RlFVRkZMRVZCUVVVN2IwSkJRMnhDTEdGQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenR2UWtGRE1VSXNUMEZCVHl4RlFVRkZMRU5CUVVNN2FVSkJRMWc3V1VGRFNDeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRaaXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5NTEVOQlFVTTdRMEZCUVR0QlFVVkVMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVjBGQmJVSTdTVUZEYWtRc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRKUVVNelF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMlF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVjBGQlZ6dFpRVU5xUXl4UFFVRlBMRWxCUVVrc1EwRkJRenRMUVVObU8wbEJRMFFzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVdkQ0xFVkJRVVVzYzBKQlFTdENMRXRCUVVzN08xRkJRMmhITEVsQlFVa3NiVUpCUVcxQ08xbEJRVVVzVFVGQlRTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRkxFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUXk5RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVkQlFVY3NWVUZCVlN4WFFVRlhMRlZCUVZVc1VVRkJVU3hWUVVGVk8wMUJRMnBGTEZWQlFWVXNWVUZCVlN4VlFVRlZMRTlCUVU4c1ZVRkJWU3hKUVVGSkxFTkJRVU03VVVGRGVFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMllzU1VGQlNUdFpRVU5HTEVsQlFVa3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETjBJc1RVRkJUU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlF6bEVMRzlDUVVGdlFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpsQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU16UkN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEY2tRc1JVRkJSU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEY2tJc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wTXNUVUZCVFN4UlFVRlJMRWRCUVRSQ0xFVkJRVVVzUTBGQlF6dFpRVU0zUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU40Unl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRTFCUVUwc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRekZETEVWQlFVVXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOcVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM2hETEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGRFSXNUVUZCVFN4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRemxFTEdkRFFVRm5ReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6RkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEZUVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVVXNRMEZCUXp0WlFVTm9SU3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE5VVTdaMEpCUVZNN1dVRkRVaXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEV0N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVTXpRanRKUVVOSUxFTkJRVU03UTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3VDJKelpYSjJZV0pzWlN3Z1UzVmljMk55YVhCMGFXOXVmU0JtY205dElDZHllR3B6Snp0Y2JtbHRjRzl5ZENCVWFXMWxiM1YwSUQwZ1RtOWtaVXBUTGxScGJXVnZkWFE3WEc1cGJYQnZjblFnZTBSaGRHRkdjbUZ0WlgwZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFJsYzNSek9pQjdYRzRnSUZ0clpYazZJSE4wY21sdVoxMDZJSHRjYmlBZ0lDQjBaWE4wY3o4NklGUmxjM1JiWFN3Z1ltVm1iM0psUHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZV1owWlhJL09pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMRnh1SUNBZ0lHSmxabTl5WlZOMFlYUjFjejg2SUhOMGNtbHVaeXdnWVdaMFpYSlRkR0YwZFhNL09pQnpkSEpwYm1kY2JpQWdmVnh1ZlNBOUlIdDlPMXh1WEc1amIyNXpkQ0JoZFhSdlZHVnpkSE5EWVhST1lXMWxJRDBnSjBGMWRHOGdWR1Z6ZEhNbk8xeHVZMjl1YzNRZ2QyRnpVbVZuYVhOMFpYSmxaRG9nZTF0clpYazZJSE4wY21sdVoxMDZJR0p2YjJ4bFlXNTlJRDBnZTMwN1hHNWxlSEJ2Y25RZ2JHVjBJR04xY25KbGJuUkRZWFJsWjI5eWVUb2djM1J5YVc1bk8xeHVYRzVsZUhCdmNuUWdibUZ0WlhOd1lXTmxJR0Z6YzNWeVpTQjdYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYmlBZ2MydHBjRkpsWVhOdmJqODZJSE4wY21sdVp6dGNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRlJsYzNSRGIyNTBaWGgwSUh0Y2JpQWdZMkYwWTJoVmJtaGhibVJzWldRZ1BTQjBjblZsTzF4dUlDQnlaWEJ2Y25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loallYUmphRlZ1YUdGdVpHeGxaRDg2SUdKdmIyeGxZVzRzSUhKbGNHOXlkRDg2SUdKdmIyeGxZVzRwSUh0Y2JpQWdJQ0JwWmlBb1kyRjBZMmhWYm1oaGJtUnNaV1FnSVQwOUlIVnVaR1ZtYVc1bFpDa2dkR2hwY3k1allYUmphRlZ1YUdGdVpHeGxaQ0E5SUdOaGRHTm9WVzVvWVc1a2JHVmtPMXh1SUNBZ0lHbG1JQ2h5WlhCdmNuUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjeTV5WlhCdmNuUWdQU0J5WlhCdmNuUTdYRzRnSUgwN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVaWE4wSUh0Y2JpQWdkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK08xeHVJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNGdJR05oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzRnSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN6dGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQnVZVzFsT2lCemRISnBibWNzSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQaXdnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ektTQjdYRzRnSUNBZ2RHaHBjeTVqWVhSbFoyOXllU0E5SUdOaGRHVm5iM0o1TzF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2IzQjBhVzl1Y3lBL1B6MGdlMzA3WEc0Z0lDQWdiM0IwYVc5dWN5NTBhVzFsYjNWMElEOC9QU0F6TURBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDQTlJR0YzWVdsMElIUmxjM1FvS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvY21WemRXeDBLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSFJsYzNSRmRtVnVkRHhVUGlobGRtVnVkRG9nVDJKelpYSjJZV0pzWlR4VVBpeGNiaUFnYUdGdVpHeGxjam9nS0dGeVozTTZJRlFwSUQwK0lIWnZhV1FzSUhSeWFXZG5aWEk2SUNncElEMCtJSFp2YVdRc0lHMXpPaUJ1ZFcxaVpYSWdQU0F3S1RvZ1VISnZiV2x6WlR4emRISnBibWMrSUh0Y2JpQWdiR1YwSUhOMVlqb2dVM1ZpYzJOeWFYQjBhVzl1TzF4dUlDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJSE4xWWlBOUlHVjJaVzUwTG5OMVluTmpjbWxpWlNnb1lYSm5jeWtnUFQ0Z2UxeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaWhoY21kektUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnY21WcVpXTjBLR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0J5WlhOdmJIWmxLQ2RQU3ljcE8xeHVJQ0FnSUgwcE8xeHVJQ0FnSUhObGRGUnBiV1Z2ZFhRb0tDa2dQVDRnZTF4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnY0hKbFptVnlMWEJ5YjIxcGMyVXRjbVZxWldOMExXVnljbTl5YzF4dUlDQWdJQ0FnY21WcVpXTjBLQ2QwYVcxbGIzVjBKeWs3WEc0Z0lDQWdmU3dnYlhNcE8xeHVJQ0FnSUhSeWFXZG5aWElvS1R0Y2JpQWdmU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvZ1ZHVnpkSE1nZEhkdklHOWlhbVZqZEhNZ1ptOXlJR1Z4ZFdGc2FYUjVMQ0IwYUhKdmQzTWdZVzRnWlhoalpYQjBhVzl1SUdsbUlIUm9aWGtnWVhKbElHNXZkQ0JsY1hWaGJDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhCbFkzUW9ZV04wZFdGc09pQmhibmtzSUdWNGNHVmpkR1ZrT2lCaGJua2dQU0IwY25WbExDQmxjbkp2Y2o4NklITjBjbWx1WnlrNklIWnZhV1FnZTF4dUlDQnBaaUFvWlhKeWIzSXBYRzRnSUNBZ1pYSnliM0lnUFNCZ0pIdGxjbkp2Y24wc0lHQTdYRzRnSUdWc2MyVWdaWEp5YjNJZ1BTQW5KenRjYmlBZ2FXWWdLR0ZqZEhWaGJDQWhQVDBnWlhod1pXTjBaV1FwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQWtlMlZ5Y205eWZVVjRjR1ZqZEdWa0lGd2lKSHRsZUhCbFkzUmxaSDFjSWl3Z1oyOTBJRndpSkh0aFkzUjFZV3g5WENKZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRVpzYjJGMEtHRmpkSFZoYkRvZ2JuVnRZbVZ5TENCbGVIQmxZM1JsWkRvZ2JuVnRZbVZ5TENCMGIyeGxjbUZ1WTJVZ1BTQXdMakF3TVN3Z1pYSnliM0kvT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ2FXWWdLQ2hoWTNSMVlXd2dQVDA5SUU1MWJXSmxjaTVRVDFOSlZFbFdSVjlKVGtaSlRrbFVXU0FtSmlCbGVIQmxZM1JsWkNBOVBUMGdUblZ0WW1WeUxsQlBVMGxVU1ZaRlgwbE9Sa2xPU1ZSWktTQjhmRnh1SUNBZ0lDQWdLR0ZqZEhWaGJDQTlQVDBnVG5WdFltVnlMazVGUjBGVVNWWkZYMGxPUmtsT1NWUlpJQ1ltSUdWNGNHVmpkR1ZrSUQwOVBTQk9kVzFpWlhJdVRrVkhRVlJKVmtWZlNVNUdTVTVKVkZrcElIeDhYRzRnSUNBZ0lDQW9ZV04wZFdGc0lEMDlQU0JPZFcxaVpYSXVUbUZPSUNZbUlHVjRjR1ZqZEdWa0lEMDlQU0JPZFcxaVpYSXVUbUZPS1NCOGZDQW9hWE5PWVU0b1lXTjBkV0ZzS1NBbUppQnBjMDVoVGlobGVIQmxZM1JsWkNrcEtWeHVJQ0FnSUhKbGRIVnlianRjYmlBZ1kyOXVjM1FnWVhKbFJYRjFZV3dnUFNCTllYUm9MbUZpY3loaFkzUjFZV3dnTFNCbGVIQmxZM1JsWkNrZ1BDQjBiMnhsY21GdVkyVTdYRzRnSUdWNGNHVmpkQ2hoY21WRmNYVmhiQ3dnZEhKMVpTd2dZQ1I3WlhKeWIzSWdQejhnSnlkOUlDaDBiMnhsY21GdVkyVWdQU0FrZTNSdmJHVnlZVzVqWlgwcFlDazdYRzRnSUdsbUlDZ2hZWEpsUlhGMVlXd3BYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNBa2UyVjRjR1ZqZEdWa2ZTd2daMjkwSUNSN1lXTjBkV0ZzZlNBb2RHOXNaWEpoYm1ObElEMGdKSHQwYjJ4bGNtRnVZMlY5S1dBcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBWR0ZpYkdVb1lXTjBkV0ZzT2lCRVlYUmhSbkpoYldVc0lHVjRjR1ZqZEdWa09pQkVZWFJoUm5KaGJXVXNJR1Z5Y205eVB6b2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJR052Ym5OMElHVjRjR1ZqZEdWa1VtOTNRMjkxYm5RZ1BTQmxlSEJsWTNSbFpDNXliM2REYjNWdWREdGNiaUFnWTI5dWMzUWdZV04wZFdGc1VtOTNRMjkxYm5RZ1BTQmhZM1IxWVd3dWNtOTNRMjkxYm5RN1hHNGdJR1Y0Y0dWamRDaGhZM1IxWVd4U2IzZERiM1Z1ZEN3Z1pYaHdaV04wWldSU2IzZERiM1Z1ZEN3Z1lDUjdaWEp5YjNJZ1B6OGdKeWQ5TENCeWIzY2dZMjkxYm5SZ0tUdGNibHh1SUNCbWIzSWdLR052Ym5OMElHTnZiSFZ0YmlCdlppQmxlSEJsWTNSbFpDNWpiMngxYlc1ektTQjdYRzRnSUNBZ1kyOXVjM1FnWVdOMGRXRnNRMjlzZFcxdUlEMGdZV04wZFdGc0xtTnZiSFZ0Ym5NdVlubE9ZVzFsS0dOdmJIVnRiaTV1WVcxbEtUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1SUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YkhWdGJpQWtlMk52YkhWdGJpNXVZVzFsZlNCdWIzUWdabTkxYm1SZ0tUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1TG5SNWNHVWdJVDBnWTI5c2RXMXVMblI1Y0dVcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVOdmJIVnRiaUFrZTJOdmJIVnRiaTV1WVcxbGZTQjBlWEJsSUdWNGNHVmpkR1ZrSUNSN1kyOXNkVzF1TG5SNWNHVjlJR2R2ZENBa2UyRmpkSFZoYkVOdmJIVnRiaTUwZVhCbGZXQXBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daWGh3WldOMFpXUlNiM2REYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJR052YkhWdGJpNW5aWFFvYVNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JoWTNSMVlXeFdZV3gxWlNBOUlHRmpkSFZoYkVOdmJIVnRiaTVuWlhRb2FTazdYRzRnSUNBZ0lDQnBaaUFvWTI5c2RXMXVMblI1Y0dVZ1BUMGdSRWN1VkZsUVJTNUdURTlCVkNsY2JpQWdJQ0FnSUNBZ1pYaHdaV04wUm14dllYUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0F3TGpBd01ERXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lHVnNjMlVnYVdZZ0tHTnZiSFZ0Ymk1MGVYQmxJRDA5SUVSSExsUlpVRVV1UkVGVVJWOVVTVTFGS1Z4dUlDQWdJQ0FnSUNCbGVIQmxZM1FvWVdOMGRXRnNWbUZzZFdVdWFYTlRZVzFsS0haaGJIVmxLU3dnZEhKMVpTd2daWEp5YjNJcE8xeHVJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0JsZUhCbFkzUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0JsY25KdmNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLRTUxYldKbGNpNXBjMFpwYm1sMFpTaGhZM1IxWVd4V1lXeDFaU2tnSmlZZ1RuVnRZbVZ5TG1selJtbHVhWFJsS0dWNGNHVmpkR1ZrVm1Gc2RXVXBLVnh1SUNBZ0lDQWdaWGh3WldOMFJteHZZWFFvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ2drZTJWNGNHVmpkR1ZrVm1Gc2RXVjlLU0JtYjNJZ2EyVjVJQ2NrZTJWNGNHVmpkR1ZrUzJWNWZTY3NJR2R2ZENBb0pIdGhZM1IxWVd4V1lXeDFaWDBwWUNrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJEb2dRWEp5WVhsTWFXdGxQR0Z1ZVQ0c0lHVjRjR1ZqZEdWa09pQkJjbkpoZVV4cGEyVThZVzU1UGlrZ2UxeHVJQ0JqYjI1emRDQmhZM1IxWVd4TVpXNW5kR2dnUFNCaFkzUjFZV3d1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JsZUhCbFkzUmxaRXhsYm1kMGFDQTlJR1Y0Y0dWamRHVmtMbXhsYm1kMGFEdGNibHh1SUNCcFppQW9ZV04wZFdGc1RHVnVaM1JvSUNFOUlHVjRjR1ZqZEdWa1RHVnVaM1JvS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JCY25KaGVYTWdZWEpsSUc5bUlHUnBabVpsY21WdWRDQnNaVzVuZEdnNklHRmpkSFZoYkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0aFkzUjFZV3hNWlc1bmRHaDlJR0FnSzF4dUlDQWdJQ0FnWUdGdVpDQmxlSEJsWTNSbFpDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGxlSEJsWTNSbFpFeGxibWQwYUgxZ0tUdGNiaUFnZlZ4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVdOMGRXRnNUR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzVzJsZElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdaWGh3WldOMFpXUmJhVjBnYVc1emRHRnVZMlZ2WmlCQmNuSmhlU2xjYmlBZ0lDQWdJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRnRwWFN3Z1pYaHdaV04wWldSYmFWMHBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDQW1KaUJsZUhCbFkzUmxaRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENsY2JpQWdJQ0FnSUdWNGNHVmpkRTlpYW1WamRDaGhZM1IxWVd4YmFWMHNJR1Y0Y0dWamRHVmtXMmxkS1R0Y2JpQWdJQ0JsYkhObElHbG1JQ2hoWTNSMVlXeGJhVjBnSVQwZ1pYaHdaV04wWldSYmFWMHBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lDUjdaWGh3WldOMFpXUmJhVjE5SUdGMElIQnZjMmwwYVc5dUlDUjdhWDBzSUdkdmRDQWtlMkZqZEhWaGJGdHBYWDFnS1R0Y2JpQWdmVnh1ZlZ4dVhHNHZLaUJFWldacGJtVnpJR0VnZEdWemRDQnpkV2wwWlM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpZWFJsWjI5eWVTaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQjBaWE4wY3pvZ0tDa2dQVDRnZG05cFpDazZJSFp2YVdRZ2UxeHVJQ0JqZFhKeVpXNTBRMkYwWldkdmNua2dQU0JqWVhSbFoyOXllVHRjYmlBZ2RHVnpkSE1vS1R0Y2JuMWNibHh1THlvZ1JHVm1hVzVsY3lCaElHWjFibU4wYVc5dUlIUnZJR0psSUdWNFpXTjFkR1ZrSUdKbFptOXlaU0IwYUdVZ2RHVnpkSE1nYVc0Z2RHaHBjeUJqWVhSbFoyOXllU0JoY21VZ1pYaGxZM1YwWldRdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZbVZtYjNKbEtHSmxabTl5WlRvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1KbFptOXlaU0E5SUdKbFptOXlaVHRjYm4xY2JseHVMeW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0ZtZEdWeUlIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaFpuUmxjaWhoWm5SbGNqb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaWs2SUhadmFXUWdlMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOVBTQjFibVJsWm1sdVpXUXBYRzRnSUNBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5SUh0OU8xeHVJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZExtRm1kR1Z5SUQwZ1lXWjBaWEk3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZrWkU1aGJXVnpjR0ZqWlNoek9pQnpkSEpwYm1jc0lHWTZJRVJITGtaMWJtTXBPaUJ6ZEhKcGJtY2dlMXh1SUNCeVpYUjFjbTRnY3k1eVpYQnNZV05sS0c1bGR5QlNaV2RGZUhBb1ppNXVZVzFsTENBbloya25LU3dnWmk1dWNVNWhiV1VwTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2FXNXBkRUYxZEc5VVpYTjBjeWh3WVdOcllXZGxTV1E2SUhOMGNtbHVaeXdnYlc5a2RXeGxQem9nWVc1NUtTQjdYRzRnSUdsbUlDaDNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwcElISmxkSFZ5Ymp0Y2JpQWdZMjl1YzNRZ2JXOWtkV3hsVkdWemRITWdQU0J0YjJSMWJHVWdQeUJ0YjJSMWJHVXVkR1Z6ZEhNZ09pQjBaWE4wY3p0Y2JpQWdhV1lnS0cxdlpIVnNaVlJsYzNSelcyRjFkRzlVWlhOMGMwTmhkRTVoYldWZElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0IzWVhOU1pXZHBjM1JsY21Wa1czQmhZMnRoWjJWSlpGMGdQU0IwY25WbE8xeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0JqYjI1emRDQnRiMlIxYkdWQmRYUnZWR1Z6ZEhNZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnY0dGamEwWjFibU4wYVc5dWN5QTlJR0YzWVdsMElHZHliMnN1WkdGd2FTNW1kVzVqZEdsdmJuTXVabWxzZEdWeUtHQndZV05yWVdkbExtbGtJRDBnWENJa2UzQmhZMnRoWjJWSlpIMWNJbUFwTG14cGMzUW9LVHRjYmlBZ1kyOXVjM1FnY21WbklEMGdibVYzSUZKbFowVjRjQ2d2TGlwY1hDOWNYQzljWEhNcWMydHBjRnM2WEZ4elhTb29MaW9wSkM4cE8xeHVJQ0JtYjNJZ0tHTnZibk4wSUdZZ2IyWWdjR0ZqYTBaMWJtTjBhVzl1Y3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJsYzNSeklEMGdaaTV2Y0hScGIyNXpXeWQwWlhOMEoxMDdYRzRnSUNBZ2FXWWdLQ0VvZEdWemRITWdKaVlnUVhKeVlYa3VhWE5CY25KaGVTaDBaWE4wY3lrZ0ppWWdkR1Z6ZEhNdWJHVnVaM1JvS1NrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpYTjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJ0cGNGSmxZWE52Ym5NZ1BTQW9kR1Z6ZEhOYmFWMGdZWE1nYzNSeWFXNW5LUzV0WVhSamFDaHlaV2NwTzF4dUlDQWdJQ0FnYkdWMElITnJhWEJTWldGemIyNDdYRzRnSUNBZ0lDQnBaaUFvYzJ0cGNGSmxZWE52Ym5NZ0ppWWdjMnRwY0ZKbFlYTnZibk0vTG14bGJtZDBhQ0ErSURFcElITnJhWEJTWldGemIyNGdQU0J6YTJsd1VtVmhjMjl1YzFzeFhUdGNiaUFnSUNBZ0lHMXZaSFZzWlVGMWRHOVVaWE4wY3k1d2RYTm9LRzVsZHlCVVpYTjBLR0YxZEc5VVpYTjBjME5oZEU1aGJXVXNJSFJsYzNSekxteGxibWQwYUNBOVBUMGdNU0EvSUdZdWJtRnRaU0E2SUdBa2UyWXVibUZ0WlgwZ0pIdHBJQ3NnTVgxZ0xDQmhjM2x1WXlBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsY3lBOUlHRjNZV2wwSUdkeWIyc3VablZ1WTNScGIyNXpMbVYyWVd3b1lXUmtUbUZ0WlhOd1lXTmxLSFJsYzNSelcybGRMQ0JtS1NrN1hHNGdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTEwYUhKdmR5MXNhWFJsY21Gc1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhNZ0lUMDlJSFJ5ZFdVcElIUm9jbTkzSUdCR1lXbHNaV1E2SUNSN2RHVnpkSE5iYVYxOVlEdGNiaUFnSUNBZ0lIMHNJSHR6YTJsd1VtVmhjMjl1T2lCemEybHdVbVZoYzI5dWZTa3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQjNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwZ1BTQjBjblZsTzF4dUlDQnBaaUFvSVcxdlpIVnNaVUYxZEc5VVpYTjBjeTVzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnYlc5a2RXeGxWR1Z6ZEhOYllYVjBiMVJsYzNSelEyRjBUbUZ0WlYwZ1BTQjdkR1Z6ZEhNNklHMXZaSFZzWlVGMWRHOVVaWE4wYzMwN1hHNTlYRzVjYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQnlkVzVVWlhOMGN5aHZjSFJwYjI1elB6b2dlMk5oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0IwWlhOMFB6b2djM1J5YVc1bkxDQjBaWE4wUTI5dWRHVjRkRDg2SUZSbGMzUkRiMjUwWlhoMGZTa2dlMXh1SUNCamIyNXpkQ0J3WVdOcllXZGxYeUE5SUdkeWIyc3VablZ1WTNScGIyNXpMbWRsZEVOMWNuSmxiblJEWVd4c0tDay9MbVoxYm1NL0xuQmhZMnRoWjJVN1hHNGdJR0YzWVdsMElHbHVhWFJCZFhSdlZHVnpkSE1vY0dGamEyRm5aVjh1YVdRcE8xeHVJQ0JqYjI1emRDQnlaWE4xYkhSek9pQjdJR05oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0J1WVcxbFB6b2djM1J5YVc1bkxDQnpkV05qWlhOek9pQmliMjlzWldGdUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYzNWc2REb2djM1J5YVc1bkxDQnRjem9nYm5WdFltVnlMQ0J6YTJsd2NHVmtPaUJpYjI5c1pXRnVJSDFiWFNBOUlGdGRPMXh1SUNCamIyNXpiMnhsTG14dlp5aGdVblZ1Ym1sdVp5QjBaWE4wYzJBcE8xeHVJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnYjNCMGFXOXVjeUV1ZEdWemRFTnZiblJsZUhRZ1B6ODlJRzVsZHlCVVpYTjBRMjl1ZEdWNGRDZ3BPMXh1SUNCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpQTlJQ2NuTzF4dUlDQm1iM0lnS0dOdmJuTjBJRnRyWlhrc0lIWmhiSFZsWFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMFpYTjBjeWtwSUh0Y2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3o4dVkyRjBaV2R2Y25rZ0lUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXdGxlUzUwYjB4dmQyVnlRMkZ6WlNncExuTjBZWEowYzFkcGRHZ29iM0IwYVc5dWN6OHVZMkYwWldkdmNua3VkRzlNYjNkbGNrTmhjMlVvS1NrcFhHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UydGxlWDBnWTJGMFpXZHZjbmxnS1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbExtSmxabTl5WlNsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZbVZtYjNKbEtDazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnSUNCMllXeDFaUzVpWldadmNtVlRkR0YwZFhNZ1BTQjRMblJ2VTNSeWFXNW5LQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhRZ1BTQjJZV3gxWlM1MFpYTjBjeUEvUHlCYlhUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFF1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCeVpYTXVjSFZ6YUNoaGQyRnBkQ0JsZUdWalZHVnpkQ2gwVzJsZExDQnZjSFJwYjI1elB5NTBaWE4wS1NrN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlDaGhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHlaWE1wS1M1bWFXeDBaWElvS0dRcElEMCtJR1F1Y21WemRXeDBJQ0U5SUNkemEybHdjR1ZrSnlrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWhablJsY2lsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZV1owWlhJb0tUdGNiaUFnSUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbUZtZEdWeVUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kbUZzZFdVdVlXWjBaWEpUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWhablJsY2xOMFlYUjFjeXdnYzNWalkyVnpjem9nWm1Gc2MyVXNJRzF6T2lBd0xDQnphMmx3Y0dWa09pQm1ZV3h6WlgwcE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1zSUhOMVkyTmxjM002SUdaaGJITmxMQ0J0Y3pvZ01Dd2djMnRwY0hCbFpEb2dabUZzYzJWOUtUdGNiaUFnSUNCeVpYTjFiSFJ6TG5CMWMyZ29MaTR1WkdGMFlTazdYRzRnSUgxY2JpQWdhV1lnS0c5d2RHbHZibk11ZEdWemRFTnZiblJsZUhRdVkyRjBZMmhWYm1oaGJtUnNaV1FwSUh0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneE1EQXdLVHRjYmlBZ0lDQnBaaUFvWjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNJdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ1kyRjBaV2R2Y25rNklDZFZibWhoYm1Sc1pXUWdaWGhqWlhCMGFXOXVjeWNzWEc0Z0lDQWdJQ0FnSUc1aGJXVTZJQ2RsZUdObGNIUnBiMjV6Snl4Y2JpQWdJQ0FnSUNBZ2NtVnpkV3gwT2lCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpd2djM1ZqWTJWemN6b2dabUZzYzJVc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCbVlXeHpaVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJR2xtSUNodmNIUnBiMjV6TG5SbGMzUkRiMjUwWlhoMExuSmxjRzl5ZENrZ2UxeHVJQ0FnSUdOdmJuTjBJR3h2WjJkbGNpQTlJRzVsZHlCRVJ5NU1iMmRuWlhJb0tUdGNiaUFnSUNCamIyNXpkQ0J6ZFdOalpYTnpablZzSUQwZ2NtVnpkV3gwY3k1bWFXeDBaWElvS0hJcElEMCtJSEl1YzNWalkyVnpjeWt1YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhOcmFYQndaV1FnUFNCeVpYTjFiSFJ6TG1acGJIUmxjaWdvY2lrZ1BUNGdjaTV6YTJsd2NHVmtLUzVzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnWm1GcGJHVmtJRDBnY21WemRXeDBjeTVtYVd4MFpYSW9LSElwSUQwK0lDRnlMbk4xWTJObGMzTXBPMXh1SUNBZ0lHTnZibk4wSUdSbGMyTnlhWEIwYVc5dUlEMGdKMUJoWTJ0aFoyVWdRSEJoWTJ0aFoyVWdkR1Z6ZEdWa09pQkFjM1ZqWTJWemMyWjFiQ0J6ZFdOalpYTnpablZzTENCQWMydHBjSEJsWkNCemEybHdjR1ZrTENCQVptRnBiR1ZrSUdaaGFXeGxaQ0IwWlhOMGN5YzdYRzRnSUNBZ1kyOXVjM1FnY0dGeVlXMXpJRDBnZTF4dUlDQWdJQ0FnYzNWalkyVnpjMloxYkRvZ2MzVmpZMlZ6YzJaMWJDeGNiaUFnSUNBZ0lITnJhWEJ3WldRNklITnJhWEJ3WldRc1hHNGdJQ0FnSUNCbVlXbHNaV1E2SUdaaGFXeGxaQzVzWlc1bmRHZ3NYRzRnSUNBZ0lDQndZV05yWVdkbE9pQndZV05yWVdkbFgxeHVJQ0FnSUgwN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCeUlHOW1JR1poYVd4bFpDa2dUMkpxWldOMExtRnpjMmxuYmlod1lYSmhiWE1zSUh0YllDUjdjaTVqWVhSbFoyOXllWDBnZkNBa2UzSXVibUZ0WlgxZ1hUb2djaTV5WlhOMWJIUjlLVHRjYmlBZ0lDQnNiMmRuWlhJdWJHOW5LR1JsYzJOeWFYQjBhVzl1TENCd1lYSmhiWE1zSUNkd1lXTnJZV2RsTFhSbGMzUmxaQ2NwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlZ4dVhHNWhjM2x1WXlCbWRXNWpkR2x2YmlCbGVHVmpWR1Z6ZENoME9pQlVaWE4wTENCd2NtVmthV05oZEdVNklITjBjbWx1WnlCOElIVnVaR1ZtYVc1bFpDa2dlMXh1SUNCc1pYUWdjam9nZXlCallYUmxaMjl5ZVQ4NklITjBjbWx1Wnl3Z2JtRnRaVDg2SUhOMGNtbHVaeXdnYzNWalkyVnpjem9nWW05dmJHVmhiaXdnY21WemRXeDBPaUJ6ZEhKcGJtY3NJRzF6T2lCdWRXMWlaWElzSUhOcmFYQndaV1E2SUdKdmIyeGxZVzRnZlR0Y2JpQWdZMjl1YzNRZ1ptbHNkR1Z5SUQwZ2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLVHRjYmlBZ1kyOXVjM1FnYzJ0cGNDQTlJSFF1YjNCMGFXOXVjejh1YzJ0cGNGSmxZWE52YmlCOGZDQm1hV3gwWlhJN1hHNGdJR052Ym5OMElITnJhWEJTWldGemIyNGdQU0JtYVd4MFpYSWdQeUFuYzJ0cGNIQmxaQ2NnT2lCMExtOXdkR2x2Ym5NL0xuTnJhWEJTWldGemIyNDdYRzRnSUdsbUlDZ2hjMnRwY0NsY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmV0FwTzF4dUlDQmpiMjV6ZENCemRHRnlkQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYVdZZ0tITnJhWEFwWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nYzJ0cGNGSmxZWE52YmlFc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCMGNuVmxmVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nWVhkaGFYUWdkQzUwWlhOMEtDa2dQejhnSjA5TEp5d2diWE02SURBc0lITnJhWEJ3WldRNklHWmhiSE5sZlR0Y2JpQWdmU0JqWVhSamFDQW9lRG9nWVc1NUtTQjdYRzRnSUNBZ2NpQTlJSHR6ZFdOalpYTnpPaUJtWVd4elpTd2djbVZ6ZFd4ME9pQjRMblJ2VTNSeWFXNW5LQ2tzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUJtWVd4elpYMDdYRzRnSUgxY2JpQWdZMjl1YzNRZ2MzUnZjQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJQzh2SUVCMGN5MXBaMjV2Y21WY2JpQWdjaTV0Y3lBOUlITjBiM0FnTFNCemRHRnlkRHRjYmlBZ2FXWWdLQ0Z6YTJsd0tWeHVJQ0FnSUdOdmJuTnZiR1V1Ykc5bktHQkdhVzVwYzJobFpDQWtlM1F1WTJGMFpXZHZjbmw5SUNSN2RDNXVZVzFsZlNCbWIzSWdKSHR5TG0xemZTQnRjMkFwTzF4dUlDQnlMbU5oZEdWbmIzSjVJRDBnZEM1allYUmxaMjl5ZVR0Y2JpQWdjaTV1WVcxbElEMGdkQzV1WVcxbE8xeHVJQ0J5WlhSMWNtNGdjanRjYm4xY2JseHVMeW9nVjJGcGRITWdXMjF6WFNCdGFXeHNhWE5sWTI5dVpITWdLaTljYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQmtaV3hoZVNodGN6b2diblZ0WW1WeUtTQjdYRzRnSUdGM1lXbDBJRzVsZHlCUWNtOXRhWE5sS0NoeUtTQTlQaUJ6WlhSVWFXMWxiM1YwS0hJc0lHMXpLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCaGQyRnBkRU5vWldOcktHTm9aV05yU0dGdVpHeGxjam9nS0NrZ1BUNGdZbTl2YkdWaGJpeGNiaUFnWlhKeWIzSTZJSE4wY21sdVp5QTlJQ2RVYVcxbGIzVjBJR1Y0WTJWbFpHVmtKeXdnZDJGcGREb2diblZ0WW1WeUlEMGdOVEF3TENCcGJuUmxjblpoYkRvZ2JuVnRZbVZ5SUQwZ05UQXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUdOc1pXRnlTVzUwWlhKMllXd29hVzUwWlhKMllXeEpaQ2s3WEc0Z0lDQWdJQ0J5WldwbFkzUW9ibVYzSUVWeWNtOXlLR1Z5Y205eUtTazdYRzRnSUNBZ2ZTd2dkMkZwZENrN1hHNGdJQ0FnTHk4Z1FIUnpMV2xuYm05eVpWeHVJQ0FnSUdOdmJuTjBJR2x1ZEdWeWRtRnNTV1E2SUZScGJXVnZkWFFnUFNCelpYUkpiblJsY25aaGJDZ29LU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9ZMmhsWTJ0SVlXNWtiR1Z5S0NrcElIdGNiaUFnSUNBZ0lDQWdZMnhsWVhKSmJuUmxjblpoYkNocGJuUmxjblpoYkVsa0tUdGNiaUFnSUNBZ0lDQWdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNJR2x1ZEdWeWRtRnNLVHRjYmlBZ2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwUnBZV3h2WjFCeVpYTmxiblFvWkdsaGJHOW5WR2wwYkdVNklITjBjbWx1WnlrNklHSnZiMnhsWVc0Z2UxeHVJQ0JqYjI1emRDQmthV0ZzYjJkeklEMGdSRWN1UkdsaGJHOW5MbWRsZEU5d1pXNUVhV0ZzYjJkektDazdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHbGhiRzluY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hrYVdGc2IyZHpXMmxkTG5ScGRHeGxJRDA5SUdScFlXeHZaMVJwZEd4bEtWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHWmhiSE5sTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2RHVnpkRlpwWlhkbGNpaDJPaUJ6ZEhKcGJtY3NJR1JtT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR1JsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE02SUdKdmIyeGxZVzRnUFNCbVlXeHpaU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNCcFppQW9aR1YwWldOMFUyVnRZVzUwYVdOVWVYQmxjeWtnWVhkaGFYUWdaM0p2YXk1a1lYUmhMbVJsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE1vWkdZcE8xeHVJQ0JqYjI1emRDQjBkaUE5SUdkeWIyc3VjMmhsYkd3dVlXUmtWR0ZpYkdWV2FXVjNLR1JtS1R0Y2JpQWdZMjl1YzNRZ2RtbGxkMlZ5VG1GdFpTQTlJR0JiYm1GdFpUMTJhV1YzWlhJdEpIdDJMbkpsY0d4aFkyVW9MMXhjY3lzdlp5d2dKeTBuS1gwZ2FWMWdPMXh1SUNCamIyNXpkQ0J6Wld4bFkzUnZjaUE5SUdBa2UzWnBaWGRsY2s1aGJXVjlJR05oYm5aaGN5d2tlM1pwWlhkbGNrNWhiV1Y5SUhOMlp5d2tlM1pwWlhkbGNrNWhiV1Y5SUdsdFp5eGNiaUFnSUNBa2UzWnBaWGRsY2s1aGJXVjlJR2x1Y0hWMExDUjdkbWxsZDJWeVRtRnRaWDBnYURFc0pIdDJhV1YzWlhKT1lXMWxmU0JoWUR0Y2JpQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYkdWMElIWnBaWGRsY2lBOUlIUjJMbUZrWkZacFpYZGxjaWgyS1R0Y2JpQWdJQ0JoZDJGcGRDQmhkMkZwZEVOb1pXTnJLQ2dwSUQwK0lHUnZZM1Z0Wlc1MExuRjFaWEo1VTJWc1pXTjBiM0lvYzJWc1pXTjBiM0lwSUNFOVBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjJOaGJtNXZkQ0JzYjJGa0lIWnBaWGRsY2ljc0lETXdNREFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0JCY25KaGVTNW1jbTl0S0dSbUxuSnZkeWd3S1M1alpXeHNjeWt1Wm05eVJXRmphQ2dvWXlrZ1BUNGdZeTUyWVd4MVpTQTlJRzUxYkd3cE8xeHVJQ0FnSUdSbUxuSnZkM011YzJWc1pXTjBLQ2h5YjNjcElEMCtJSEp2ZHk1cFpIZ2dQaUF4SUNZbUlISnZkeTVwWkhnZ1BDQTNLVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTnpzZ2FTQThJREV5T3lCcEt5c3BJR1JtTG1acGJIUmxjaTV6WlhRb2FTd2dabUZzYzJVcE8xeHVJQ0FnSUdSbUxtTjFjbkpsYm5SU2IzZEpaSGdnUFNBeE8xeHVJQ0FnSUdOdmJuTjBJSEJ5YjNCeklEMGdkbWxsZDJWeUxtZGxkRTl3ZEdsdmJuTW9kSEoxWlNrdWJHOXZhenRjYmlBZ0lDQmpiMjV6ZENCdVpYZFFjbTl3Y3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnWW05dmJHVmhiajRnUFNCN2ZUdGNiaUFnSUNCUFltcGxZM1F1YTJWNWN5aHdjbTl3Y3lrdVptbHNkR1Z5S0NocktTQTlQaUIwZVhCbGIyWWdjSEp2Y0hOYmExMGdQVDA5SUNkaWIyOXNaV0Z1SnlrdVptOXlSV0ZqYUNnb2F5a2dQVDRnYm1WM1VISnZjSE5iYTEwZ1BTQWhjSEp2Y0hOYmExMHBPMXh1SUNBZ0lIWnBaWGRsY2k1elpYUlBjSFJwYjI1ektHNWxkMUJ5YjNCektUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJR052Ym5OMElHeGhlVzkxZENBOUlIUjJMbk5oZG1WTVlYbHZkWFFvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JRY205d2N5QTlJSFpwWlhkbGNpNW5aWFJQY0hScGIyNXpLQ2t1Ykc5dmF6dGNiaUFnSUNCMGRpNXlaWE5sZEV4aGVXOTFkQ2dwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IwZGk1c2IyRmtUR0Y1YjNWMEtHeGhlVzkxZENrN1hHNGdJQ0FnWVhkaGFYUWdZWGRoYVhSRGFHVmpheWdvS1NBOVBpQmtiMk4xYldWdWRDNXhkV1Z5ZVZObGJHVmpkRzl5S0hObGJHVmpkRzl5S1NBaFBUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkallXNXViM1FnYkc5aFpDQjJhV1YzWlhJZ1puSnZiU0JzWVhsdmRYUW5MQ0F6TURBd0tUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IyYVdWM1pYSWdQU0JCY25KaGVTNW1jbTl0S0hSMkxuWnBaWGRsY25NcExtWnBibVFvS0hZcElEMCtJSFl1ZEhsd1pTQWhQVDBnSjBkeWFXUW5LU0U3WEc0Z0lDQWdaWGh3WldOMFFYSnlZWGtvY21WekxDQmJNaXdnTVN3Z01sMHBPMXh1SUNBZ0lHVjRjR1ZqZENoS1UwOU9Mbk4wY21sdVoybG1lU2gyYVdWM1pYSXVaMlYwVDNCMGFXOXVjeWdwTG14dmIyc3BMQ0JLVTA5T0xuTjBjbWx1WjJsbWVTaHZiR1JRY205d2N5a3BPMXh1SUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUhSMkxtTnNiM05sS0NrN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1amJHOXpaVlJoWW14bEtHUm1LVHRjYmlBZ2ZWeHVmVnh1SWwxOSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG4vKiogRGVtbyBzY3JpcHQgY2xhc3MuIENvdWxkIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGRlbW8gc2NyaXB0cyB0byBzaG93IHRoZSBwbGF0Zm9ybSBjYXBhYmlsaXRpZXMgKi9cbmV4cG9ydCBjbGFzcyBEZW1vU2NyaXB0IHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbiwgaXNBdXRvbWF0aWMgPSBmYWxzZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX2lzQXV0b21hdGljID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dG9TdGFydEZpcnN0U3RlcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCA9IDA7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSwgeyBpZDogJ2RlbW8tc2NyaXB0JyxcbiAgICAgICAgICAgIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9zdG9wU3RhcnRCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdwYXVzZScpLCAoKSA9PiB0aGlzLl9jaGFuZ2VTdG9wU3RhdGUoKSwgJ1BsYXkgLyBwYXVzZScpO1xuICAgICAgICB0aGlzLl9yZXN0YXJ0QnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncmVkbycpLCAoKSA9PiB0aGlzLl9yZXN0YXJ0U2NyaXB0KCksICdSZXN0YXJ0Jyk7XG4gICAgICAgIHRoaXMuX25leHRTdGVwQnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncGxheScpLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3RlcFByb2Nlc3NlZClcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICB9LCAnTmV4dCBzdGVwJyk7XG4gICAgICAgIHRoaXMuX2FjdGl2aXR5ID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0RpdiA9IHVpLmRpdlYoW10sICd0dXRvcmlhbHMtcm9vdC1wcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHVpLmVsZW1lbnQoJ3Byb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMgPSB1aS5kaXZUZXh0KCcnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdjaGV2cm9uLWxlZnQnKSwgKCkgPT4gdGhpcy5fY2xvc2VEb2NrKCksICdCYWNrIHRvIGRlbW8nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLl9pc0F1dG9tYXRpYyA9IGlzQXV0b21hdGljO1xuICAgICAgICB0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXAgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYXV0b1N0YXJ0Rmlyc3RTdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgICAgICBEZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSB0aGlzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBkZW1vIHNjcmlwdCBzdGVwcyAqL1xuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRlbW8gc2NyaXB0IHN0ZXBzICovXG4gICAgZ2V0IHN0ZXBOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKiBBZGRzIHNjcmlwdCBoZWFkZXIgKi9cbiAgICBfYWRkSGVhZGVyKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVIZWFkZXJEaXYoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlUHJvZ3Jlc3NEaXYoKTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlci5hcHBlbmQodGhpcy5faGVhZGVyRGl2LCB0aGlzLl9wcm9ncmVzc0Rpdik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBoZWFkZXIgZGl2ICovXG4gICAgX2NyZWF0ZUhlYWRlckRpdigpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyLmlubmVyVGV4dCA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9jbG9zZUJ0bik7XG4gICAgICAgIHRoaXMuX2hlYWRlckRpdi5hcHBlbmQodGhpcy5faGVhZGVyKTtcbiAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9pc0F1dG9tYXRpYyA/IHRoaXMuX3N0b3BTdGFydEJ0biA6IHRoaXMuX25leHRTdGVwQnRuKTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc2NyaXB0IHByb2dyZXNzIGRpdiAqL1xuICAgIF9jcmVhdGVQcm9ncmVzc0RpdigpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0Rpdi5hcHBlbmQodGhpcy5fcHJvZ3Jlc3MpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dChgU3RlcDogJHt0aGlzLl9wcm9ncmVzcy52YWx1ZX0gb2YgJHt0aGlzLnN0ZXBOdW1iZXJ9YCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzRGl2LmFwcGVuZCh0aGlzLl9wcm9ncmVzc1N0ZXBzKTtcbiAgICB9XG4gICAgLyoqIEFkZHMgZGVzY3JpcHRpb24gb2YgdGhlIHNjcmlwdCAqL1xuICAgIF9hZGREZXNjcmlwdGlvbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eS5hcHBlbmQodWkuZGl2KHRoaXMuZGVzY3JpcHRpb24sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgbGV0IGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjbG9jaycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdwbGF5JywgKCkgPT4gdGhpcy5fbmV4dFN0ZXAoKSwgJ05leHQgc3RlcCcpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkluZGljYXRvci5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkRpdiA9IHVpLmRpdih0aGlzLl9zdGVwc1tpXS5uYW1lLCAnZ3Jvay10dXRvcmlhbC1lbnRyeS1pbnN0cnVjdGlvbicpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXBEZXNjcmlwdGlvbiA9IHVpLmRpdigoX2EgPSB0aGlzLl9zdGVwc1tpXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVzY3JpcHRpb24sICdncm9rLXR1dG9yaWFsLXN0ZXAtZGVzY3JpcHRpb24gaGlkZGVuJyk7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uRGl2LFxuICAgICAgICAgICAgXSwgJ2dyb2stdHV0b3JpYWwtZW50cnknKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2aXR5LmFwcGVuZChlbnRyeSwgY3VycmVudFN0ZXBEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEluaXRpYWxpemVzIHRoZSByb290IG9mIHRoZSBkZW1vIHNjcmlwdCAqL1xuICAgIF9pbml0Um9vdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dIZWxwID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNjcmlwdERvY2tOb2RlID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkcmVuKVswXTtcbiAgICAgICAgdGhpcy5fbm9kZSA9IGdyb2suc2hlbGwuZG9ja01hbmFnZXIuZG9jayh0aGlzLl9yb290LCBERy5ET0NLX1RZUEUuRklMTCwgc2NyaXB0RG9ja05vZGUsICcnKTtcbiAgICAgICAgaWYgKChfYiA9IChfYSA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxhc3RFbGVtZW50Q2hpbGQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jbGFzc0xpc3QuY29udGFpbnMoJ3RhYi1oYW5kbGUtbGlzdC1jb250YWluZXInKSlcbiAgICAgICAgICAgIChfYyA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxhc3RFbGVtZW50Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX25vZGUuY29udGFpbmVyLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpO1xuICAgICAgICB0aGlzLl9hZGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdC5hcHBlbmQodGhpcy5fbWFpbkhlYWRlcik7XG4gICAgICAgIHRoaXMuX2FkZERlc2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kKHRoaXMuX2FjdGl2aXR5KTtcbiAgICB9XG4gICAgLyoqIFByb2Nlc3NlcyBuZXh0IHN0ZXAgKi9cbiAgICBfbmV4dFN0ZXAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc0xpc3QuYWRkKCdmYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLXR1dG9yaWFsLWVudHJ5JylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICBjb25zdCBlbnRyeUluc3RydWN0aW9uID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay10dXRvcmlhbC1zdGVwLWRlc2NyaXB0aW9uJylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluJztcbiAgICAgICAgICAgIGVudHJ5SW5zdHJ1Y3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gZW50cnk7XG4gICAgICAgICAgICBjb25zdCBzdGVwRGVsYXkgPSAoKF9hID0gdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWxheSkgP1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMuX3N0ZXBzW3RoaXMuX2N1cnJlbnRTdGVwXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVsYXkgOiAyMDAwO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLmZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Jvb3QsIGN1cnJlbnRTdGVwLm9mZnNldFRvcCAtIHRoaXMuX21haW5IZWFkZXIub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuX2NvdW50ZG93bihlbnRyeSwgZW50cnlJbmRpY2F0b3IsIHN0ZXBEZWxheSk7XG4gICAgICAgICAgICB5aWVsZCBkZWxheShzdGVwRGVsYXkpO1xuICAgICAgICAgICAgY29uc3QgbmV3RW50cnlJbmRpY2F0b3IgPSB1aS5pY29uRkEoJ2NoZWNrJyk7XG4gICAgICAgICAgICBlbnRyeUluZGljYXRvci5yZXBsYWNlV2l0aChuZXdFbnRyeUluZGljYXRvcik7XG4gICAgICAgICAgICBuZXdFbnRyeUluZGljYXRvci5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhciBmYS1jaGVjayc7XG4gICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy52YWx1ZSsrO1xuICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NTdGVwcy5pbm5lclRleHQgPSBgU3RlcDogJHt0aGlzLl9wcm9ncmVzcy52YWx1ZX0gb2YgJHt0aGlzLnN0ZXBOdW1iZXJ9YDtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwKys7XG4gICAgICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RlcCA9PT0gdGhpcy5zdGVwTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNBdXRvbWF0aWMgPyB0aGlzLl9zdG9wU3RhcnRCdG4ucmVwbGFjZVdpdGgodGhpcy5fcmVzdGFydEJ0bikgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5yZXBsYWNlV2l0aCh0aGlzLl9yZXN0YXJ0QnRuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzQXV0b21hdGljKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFN0ZXBFbnRyeUluZGljYXRvciA9IHRoaXMuX2FjdGl2aXR5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dyb2staWNvbicpW3RoaXMuX2N1cnJlbnRTdGVwXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE5leHRTdGVwSWNvbiA9IHVpLmljb25GQSgncGxheScsICgpID0+IHRoaXMuX25leHRTdGVwKCksICdOZXh0IHN0ZXAnKTtcbiAgICAgICAgICAgICAgICBzdGFydE5leHRTdGVwSWNvbi5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgICAgICAgICBuZXh0U3RlcEVudHJ5SW5kaWNhdG9yLnJlcGxhY2VXaXRoKHN0YXJ0TmV4dFN0ZXBJY29uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmZpcnN0Q2hpbGQuY2xhc3NMaXN0LnJlbW92ZSgnZmEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBTdGFydHMgdGhlIGRlbW8gc2NyaXB0IGFjdGlvbnMgKi9cbiAgICBfc3RhcnRTY3JpcHQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fY3VycmVudFN0ZXA7IGkgPCB0aGlzLnN0ZXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1N0b3BwZWQgfHwgdGhpcy5faXNDYW5jZWxsZWQpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuX25leHRTdGVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIHRvIHRoZSBjdXJyZW50IHN0ZXBcbiAgICAgKiBAcGFyYW0gZWxlbWVudCAtIEN1cnJlbnQgc3RlcCBlbGVtZW50IGluIHJvb3RcbiAgICAgKiBAcGFyYW0geSAtIHkgY29vcmRpbmF0ZSBvZiB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIF9zY3JvbGxUbyhlbGVtZW50LCB5KSB7XG4gICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGludGVyYWN0aXZlIGRlbGF5IGluZGljYXRvclxuICAgICAqIEBwYXJhbSBlbGVtZW50IC0gQ3VycmVudCBzdGVwIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gaW5kaWNhdG9yIC0gQ3VycmVudCBzdGVwIGluZGljYXRvclxuICAgICAqIEBwYXJhbSB0aW1lIC0gSW5kaWNhdG9yIGFuaW1hdGlvbiB0aW1lXG4gICAgICovXG4gICAgX2NvdW50ZG93bihlbGVtZW50LCBpbmRpY2F0b3IsIHRpbWUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZG93bkRpdiA9IHVpLmRpdihbXSwgJ2RlbW8tc2NyaXB0LWNvdW50ZG93bicpO1xuICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICAgICAgbGV0IGNvdW50ZG93biA9IHRpbWUgLyAxMDAwO1xuICAgICAgICAgICAgY29uc3Qgc3ZnID0gdGhpcy5fY3JlYXRlU1ZHSW5kaWNhdG9yKGNvdW50ZG93bik7XG4gICAgICAgICAgICBjb3VudGRvd25EaXYuYXBwZW5kKHN2Zyk7XG4gICAgICAgICAgICBlbGVtZW50LnByZXBlbmQoY291bnRkb3duRGl2KTtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZG93bi0tO1xuICAgICAgICAgICAgICAgIGlmIChjb3VudGRvd24gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZG93bkRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3IuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBTVkcgd2l0aCBjb3VudGRvd24gY2lyY2xlXG4gICAgICogQHBhcmFtIGNvdW50ZG93biAtIGNvdW50ZG93biB0aW1lXG4gICAgICogQHJldHVybnMgU1ZHIGNvdW50ZG93biBpbmRpY2F0b3JcbiAgICAgKi9cbiAgICBfY3JlYXRlU1ZHSW5kaWNhdG9yKGNvdW50ZG93bikge1xuICAgICAgICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgICAgICBjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2NpcmNsZScpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzcnKTtcbiAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc3Jyk7XG4gICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncicsICc2Jyk7XG4gICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3R5bGUnLCBgYW5pbWF0aW9uOiBjb3VudGRvd24gJHtjb3VudGRvd259cyBsaW5lYXIgaW5maW5pdGUgZm9yd2FyZHNgKTtcbiAgICAgICAgc3ZnLmFwcGVuZChjaXJjbGUpO1xuICAgICAgICByZXR1cm4gc3ZnO1xuICAgIH1cbiAgICAvKiogQ2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIGRlbW8gc2NyaXB0IChzdG9wL3BsYXkpICovXG4gICAgX2NoYW5nZVN0b3BTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuX3N0b3BTdGFydEJ0bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKTtcbiAgICAgICAgaWNvblswXS5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gIXRoaXMuX2lzU3RvcHBlZDtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYWwgZmEtcGF1c2UnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N0ZXBQcm9jZXNzZWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTY3JpcHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogUmVzdGFydHMgdGhlIHNjcmlwdCAqL1xuICAgIF9yZXN0YXJ0U2NyaXB0KCkge1xuICAgICAgICBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmNsb3NlKHRoaXMuX25vZGUpO1xuICAgICAgICBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgICAgIHRoaXMuX2NsZWFyUm9vdCgpO1xuICAgICAgICB0aGlzLl9zZXRJbml0UGFyYW1zKCk7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gICAgLyoqIENsZWFycyB0aGUgcm9vdCBlbGVtZW50ICovXG4gICAgX2NsZWFyUm9vdCgpIHtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSwgeyBpZDogJ2RlbW8tc2NyaXB0JywgY2xhc3NlczogJ3R1dG9yaWFscy1yb290IHR1dG9yaWFscy10cmFjayBkZW1vLWFwcC1zY3JpcHQnIH0pO1xuICAgICAgICB0aGlzLl9tYWluSGVhZGVyID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtbWFpbi1oZWFkZXInKTtcbiAgICAgICAgdGhpcy5faGVhZGVyID0gdWkuaDIoJycpO1xuICAgICAgICB0aGlzLl9oZWFkZXJEaXYgPSB1aS5kaXZIKFtdLCAndHV0b3JpYWxzLXJvb3QtaGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2FjdGl2aXR5ID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0RpdiA9IHVpLmRpdlYoW10sICd0dXRvcmlhbHMtcm9vdC1wcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHVpLmVsZW1lbnQoJ3Byb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMgPSB1aS5kaXZUZXh0KCcnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgIH1cbiAgICAvKiogU2V0cyBpbml0aWFsIHBhcmFtZXRlcnMgKi9cbiAgICBfc2V0SW5pdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFN0ZXAgPSAwO1xuICAgICAgICB0aGlzLl9pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNDYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuX3N0b3BTdGFydEJ0bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKTtcbiAgICAgICAgaWNvblswXS5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhbCBmYS1wYXVzZSc7XG4gICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XG4gICAgfVxuICAgIC8qKiBDbG9zZXMgZGVtbyBzY3JpcHQgZG9jayAqL1xuICAgIF9jbG9zZURvY2soKSB7XG4gICAgICAgIGdyb2suc2hlbGwuZG9ja01hbmFnZXIuY2xvc2UodGhpcy5fbm9kZSk7XG4gICAgICAgIHRoaXMuY2FuY2VsU2NyaXB0KCk7XG4gICAgfVxuICAgIC8qKiBDYW5jZWxzIHRoZSBzY3JpcHQgKi9cbiAgICBjYW5jZWxTY3JpcHQoKSB7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgRGVtb1NjcmlwdC5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBzdGVwIHRvIHNjcmlwdFxuICAgICAqIEBwYXJhbSBuYW1lIC0gU3RlcCBuYW1lXG4gICAgICogQHBhcmFtIGZ1bmMgLSBTdGVwIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBTdGVwIG9wdGlvbnMgKGRlc2NyaXB0aW9uIGFuZCBkZWxheSBhZnRlciBzdGVwIGVuZHMpXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0aGUgY3VycmVudCBkZW1vIHNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBzdGVwKG5hbWUsIGZ1bmMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGhdID0ge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqIFN0YXJ0cyB0aGUgZGVtbyBzY3JpcHQgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRSb290KCk7XG4gICAgICAgICAgICBncm9rLnNoZWxsLm5ld1ZpZXcodGhpcy5uYW1lKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2F1dG9TdGFydEZpcnN0U3RlcClcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5EZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSBudWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkdWdGJ5MXpZM0pwY0hRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUprWlcxdkxYTmpjbWx3ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkJRU3hQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNTMEZCU3l4RlFVRkZMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTTdRVUZEZEVNc1QwRkJUeXhMUVVGTExFbEJRVWtzVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVVeFF5eFBRVUZQTEVWQlFVTXNTMEZCU3l4RlFVRkRMRTFCUVUwc2IwTkJRVzlETEVOQlFVTTdRVUZsZWtRc2JVZEJRVzFITzBGQlEyNUhMRTFCUVUwc1QwRkJUeXhWUVVGVk8wbEJkVU55UWl4WlFVRlpMRWxCUVZrc1JVRkJSU3hYUVVGdFFpeEZRVUZGTEdOQlFYVkNMRXRCUVVzc1JVRkRla1VzVDBGQmQwTTdPMUZCZGtNeFF5eFRRVUZKTEVkQlFWY3NSVUZCUlN4RFFVRkRPMUZCUTJ4Q0xHZENRVUZYTEVkQlFWY3NSVUZCUlN4RFFVRkRPMUZCU1dwQ0xHbENRVUZaTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpsQ0xIZENRVUZ0UWl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVVOeVF5eHBRa0ZCV1N4SFFVRlhMRU5CUVVNc1EwRkJRenRSUVVONlFpeGxRVUZWTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpWQ0xHbENRVUZaTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpsQ0xIRkNRVUZuUWl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVVWc1F5eFZRVUZMTEVkQlFXMUNMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkZMR0ZCUVdFN1dVRkRNMFFzVDBGQlR5eEZRVUZGTEdkRVFVRm5SQ3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVVYwUkN4WFFVRk5MRWRCUVZjc1JVRkJSU3hEUVVGRE8xRkJSWEJDTEdkQ1FVRlhMRWRCUVcxQ0xFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZEY0VVc1dVRkJUeXhIUVVGMVFpeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM2hETEdWQlFWVXNSMEZCYlVJc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVU5zUlN4clFrRkJZU3hIUVVGelFpeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlEzSkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3hGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETzFGQlEzcERMR2RDUVVGWExFZEJRWE5DTEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRkRWNzYVVKQlFWa3NSMEZCYzBJc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJUdFpRVU14UlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWp0blFrRkRlRUlzU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUTNKQ0xFTkJRVU1zUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVVlNMR05CUVZNc1IwRkJiVUlzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNRMEZCUXp0UlFVVjJSU3hwUWtGQldTeEhRVUZ0UWl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeDVRa0ZCZVVJc1EwRkJReXhEUVVGRE8xRkJRM1JGTEdOQlFWTXNSMEZCZDBJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3h0UWtGQll5eEhRVUZ0UWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlIyaEVMR05CUVZNc1IwRkJjMElzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeGpRVUZqTEVOQlFVTXNRMEZCUXp0UlFVdHVTQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnFRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEZkQlFWY3NRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRWRCUVVjc1RVRkJRU3hQUVVGUExHRkJRVkFzVDBGQlR5eDFRa0ZCVUN4UFFVRlBMRU5CUVVVc2EwSkJRV3RDTEcxRFFVRkpMRXRCUVVzc1EwRkJRenRSUVVWb1JTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRrSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJYcENMRlZCUVZVc1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETzBsQlEyeERMRU5CUVVNN1NVRkZSQ3huUTBGQlowTTdTVUZEYUVNc1NVRkJTU3hMUVVGTE8xRkJRMUFzVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTNKQ0xFTkJRVU03U1VGRlJDdzRRMEZCT0VNN1NVRkRPVU1zU1VGQlNTeFZRVUZWTzFGQlExb3NUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU0xUWl4RFFVRkRPMGxCUjBRc2VVSkJRWGxDTzBsQlEycENMRlZCUVZVN1VVRkRhRUlzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFTkJRVU03VVVGRGVFSXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEZRVUZGTEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdTVUZET1VRc1EwRkJRenRKUVVWRUxHZERRVUZuUXp0SlFVTjRRaXhuUWtGQlowSTdVVUZEZEVJc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEZGtNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSWEJETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1ZVRkJNRUlzUTBGQlF5eFRRVUZUTEVkQlFVY3NkVUpCUVhWQ0xFTkJRVU03VVVGRmJFWXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wbEJRM0pHTEVOQlFVTTdTVUZGUkN4clEwRkJhME03U1VGRE1VSXNhMEpCUVd0Q08xRkJRM2hDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJRM3BETEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhQUVVGUExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlhoR0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dEpRVU5vUkN4RFFVRkRPMGxCUlVRc2NVTkJRWEZETzBsQlF6ZENMR1ZCUVdVN08xRkJRM0pDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3cwUWtGQk5FSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZPVVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRlRU1zU1VGQlNTeHZRa0ZCYjBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUXpsRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOMFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVN2IwSkJRMWdzYjBKQlFXOUNMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRPMjlDUVVNNVJTeHZRa0ZCYjBJc1EwRkJReXhUUVVGVExFZEJRVWNzZFVKQlFYVkNMRU5CUVVNN2FVSkJRekZFTzJGQlEwWTdXVUZEUkN4TlFVRk5MR05CUVdNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEdsRFFVRnBReXhEUVVGRExFTkJRVU03V1VGRGRFWXNUVUZCVFN4elFrRkJjMElzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVVFc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMREJEUVVGRkxGZEJRVmNzUlVGRGRrVXNkVU5CUVhWRExFTkJRVU1zUTBGQlF6dFpRVU16UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVTndRaXh2UWtGQmIwSTdaMEpCUTNCQ0xHTkJRV003WVVGRFppeEZRVUZGTEhGQ1FVRnhRaXhEUVVGRExFTkJRVU03V1VGRk1VSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eEZRVUZGTEhOQ1FVRnpRaXhEUVVGRExFTkJRVU03VTBGRGRFUTdTVUZEU0N4RFFVRkRPMGxCUlVRc09FTkJRVGhETzBsQlEzUkRMRk5CUVZNN08xRkJRMllzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUXpORExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRmNFTXNUVUZCVFN4alFVRmpMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhSUVVGUkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZMMFVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NSVUZCUlN4alFVRmpMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRk5VWXNTVUZCU1N4TlFVRkJMRTFCUVVFc1kwRkJZeXhEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zYVVKQlFXbENMREJEUVVGRkxHZENRVUZuUWl3d1EwRkRkRVlzVTBGQlV5eERRVUZETEZGQlFWRXNRMEZCUXl3eVFrRkJNa0lzUTBGQlF6dFpRVU12UXl4TlFVRkJMR05CUVdNc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExHbENRVUZwUWl3d1EwRkJSU3huUWtGQlowSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVWb1J5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1VVRkZka1lzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUTJ4Q0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVVZ3UXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03VVVGRGRrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMGxCUTNCRExFTkJRVU03U1VGRlJDd3dRa0ZCTUVJN1NVRkRXaXhUUVVGVE96czdXVUZEY2tJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVNM1FpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRuUWtGRGRFSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMmRDUVVNelF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRlZCUVRCQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRoUVVNMVJUdFpRVVZFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRE9VWXNUVUZCVFN4alFVRmpMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkROMFlzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExHZERRVUZuUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzFsQlJYQklMR05CUVdNc1EwRkJReXhUUVVGVExFZEJRVWNzZDBOQlFYZERMRU5CUVVNN1dVRkRjRVVzWjBKQlFXZENMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0WlFVTTFReXhuUWtGQlowSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFsQlJURkRMRTFCUVUwc1YwRkJWeXhIUVVGSExFdEJRWFZDTEVOQlFVTTdXVUZETlVNc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlFTeE5RVUZCTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEU5QlFVOHNNRU5CUVVVc1MwRkJTeXhGUVVGRExFTkJRVU03WjBKQlF5OUVMRTFCUVVFc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1QwRkJUeXd3UTBGQlJTeExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVWNFJDeE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUXpWRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hYUVVGWExFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRGJFWXNUVUZCVFN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRVzlDTEVWQlFVVXNZMEZCTmtJc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU4wUml4TlFVRk5MRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFpRVVYyUWl4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRE4wTXNZMEZCWXl4RFFVRkRMRmRCUVZjc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRPMWxCUXpsRExHbENRVUZwUWl4RFFVRkRMRk5CUVZNc1IwRkJSeXgzUWtGQmQwSXNRMEZCUXp0WlFVVjJSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMWxCUTNaQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNVMEZCVXl4SFFVRkhMRk5CUVZNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEU5QlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8xbEJSWFJHTEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRaUVVOd1FpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzUzBGQlN5eERRVUZETzFsQlJUbENMRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVmtzUzBGQlN5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZPMmRDUVVONlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEY0VVc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8yZENRVU5zUkN4UFFVRlBPMkZCUTFJN1dVRkZSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRkRUlzVFVGQlRTeHpRa0ZCYzBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRuUWtGRGNrY3NUVUZCVFN4cFFrRkJhVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03WjBKQlEycEdMR2xDUVVGcFFpeERRVUZETEZOQlFWTXNSMEZCUnl4MVFrRkJkVUlzUTBGQlF6dG5Ra0ZEZEVRc2MwSkJRWE5DTEVOQlFVTXNWMEZCVnl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdaMEpCUTNSRUxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFZRVUV3UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdZVUZETDBVN08wdEJRMFk3U1VGRlJDeHhRMEZCY1VNN1NVRkRka0lzV1VGQldUczdXVUZEZUVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVONFJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVms3YjBKQlEzUkRMRTFCUVUwN1owSkJSVklzVFVGQlRTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1lVRkRlRUk3VVVGRFNDeERRVUZETzB0QlFVRTdTVUZGUkRzN096dFBRVWxITzBsQlEwc3NVMEZCVXl4RFFVRkRMRTlCUVhWQ0xFVkJRVVVzUTBGQlV6dFJRVU5zUkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03VVVGRGFFSXNUMEZCVHl4RFFVRkRMRk5CUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGVFSXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTFjc1ZVRkJWU3hEUVVGRExFOUJRVzlDTEVWQlFVVXNVMEZCYzBJc1JVRkJSU3hKUVVGWk96dFpRVU5xUml4TlFVRk5MRmxCUVZrc1IwRkJiVUlzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVVc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0WlFVVjZSU3hUUVVGVExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRaUVVWc1F5eEpRVUZKTEZOQlFWTXNSMEZCUnl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRelZDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVWb1JDeFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM3BDTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRk9VSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1YwRkJWeXhEUVVGRExFZEJRVWNzUlVGQlJUdG5Ra0ZEYUVNc1UwRkJVeXhGUVVGRkxFTkJRVU03WjBKQlExb3NTVUZCU1N4VFFVRlRMRXRCUVVzc1EwRkJReXhGUVVGRk8yOUNRVU51UWl4aFFVRmhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03YjBKQlEzaENMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dHZRa0ZGZEVJc1UwRkJVeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN2IwSkJRM0pETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTndRenRaUVVOSUxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTllMRU5CUVVNN1MwRkJRVHRKUVVWRU96czdPMDlCU1VjN1NVRkRTeXh0UWtGQmJVSXNRMEZCUXl4VFFVRnBRanRSUVVNelF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4UlFVRlJMRU5CUVVNc1pVRkJaU3hEUVVGRExEUkNRVUUwUWl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRekZGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRkZCUVZFc1EwRkJReXhsUVVGbExFTkJRVU1zTkVKQlFUUkNMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRGFFWXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNaRExFMUJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4yUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRU1zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRkxIZENRVUYzUWl4VFFVRlRMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdVVUZEY0Vjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVnVRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEVOQlFVTTdTVUZGUkN4MVJFRkJkVVE3U1VGREwwTXNaMEpCUVdkQ08xRkJRM1JDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGNFVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUjBGQlJ5eDFRa0ZCZFVJc1EwRkJRenRSUVVNMVF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVVZ1UXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU53UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhkQ1FVRjNRaXhEUVVGRE8xbEJRemRETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTzJkQ1FVTjRRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdVMEZEZGtJN1NVRkRTQ3hEUVVGRE8wbEJSVVFzTUVKQlFUQkNPMGxCUTJ4Q0xHTkJRV003VVVGRGNFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRk5MRU5CUVVNc1EwRkJRenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRSUVVOc1FpeEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1VVRkRkRUlzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMGxCUTJZc1EwRkJRenRKUVVWRUxEaENRVUU0UWp0SlFVTjBRaXhWUVVGVk8xRkJRMmhDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVVc1lVRkJZU3hGUVVGRkxFOUJRVThzUlVGQlJTeG5SRUZCWjBRc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRmVFY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNSVUZCUlN4MVFrRkJkVUlzUTBGQlF5eERRVUZETzFGQlEzcEVMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVONlFpeEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRmRrUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNSVUZCUlN3MFFrRkJORUlzUTBGQlF5eERRVUZETzFGQlJUVkVMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRVZCUVVVc2VVSkJRWGxDTEVOQlFVTXNRMEZCUXp0UlFVTXpSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03VVVGRGVFTXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlhKRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMlFpeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRE0wSXNRMEZCUXp0SlFVVkVMRGhDUVVFNFFqdEpRVU4wUWl4alFVRmpPMUZCUTNCQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUlRGQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkRjRVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1IwRkJSeXgzUWtGQmQwSXNRMEZCUXp0UlFVTTNReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRGFrUXNRMEZCUXp0SlFVVkVMRGhDUVVFNFFqdEpRVU4wUWl4VlFVRlZPMUZCUTJoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlRTeERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETzBsQlEzUkNMRU5CUVVNN1NVRkZSQ3g1UWtGQmVVSTdTVUZEZWtJc1dVRkJXVHRSUVVOV0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNwQ0xGVkJRVlVzUTBGQlF5eGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGRlJEczdPenM3TzA5QlRVYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1NVRkJXU3hGUVVGRkxFbEJRWGxDTEVWQlFVVXNUMEZCWjBRN1VVRkROVVlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITzFsQlF5OUNMRWxCUVVrc1JVRkJSU3hKUVVGSk8xbEJRMVlzU1VGQlNTeEZRVUZGTEVsQlFVazdXVUZEVml4UFFVRlBMRVZCUVVVc1QwRkJUenRUUVVOcVFpeERRVUZETzFGQlEwWXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzTmtKQlFUWkNPMGxCUTNaQ0xFdEJRVXM3TzFsQlExUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVVTVRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVTdaMEpCUTNKQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0blFrRkRjRUlzVDBGQlR6dGhRVU5TTzFsQlJVUXNTVUZCU1N4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTzJkQ1FVTXhRaXhOUVVGTkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0UlFVTXpRaXhEUVVGRE8wdEJRVUU3TzBGQmNGWk5MSGRDUVVGaExFZEJRWE5DTEVsQlFVa3NRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVwYlhCdmNuUWdLaUJoY3lCMWFTQm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZkV2tuTzF4dWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1Y2JtbHRjRzl5ZENCN1pHVnNZWGw5SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNSbGMzUW5PMXh1WEc1Y2JpOHFLaUJVZVhCbElHWnZjaUI3UUd4cGJtc2dSR1Z0YjFOamNtbHdkSDBnYzNSbGNDQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1UzUmxjQ0E5SUh0Y2JpQWdibUZ0WlRvZ2MzUnlhVzVuTzF4dUlDQm1kVzVqT2lBb0tTQTlQaUJRY205dGFYTmxQSFp2YVdRK08xeHVYRzRnSUM4cUtpQlRkR1Z3SUc5d2RHbHZibk02SUdSbGMyTnlhWEIwYVc5dUlHRnVaQ0JrWld4aGVTQW9hVzRnYlhNcElHRm1kR1Z5SUdaMWJtTjBhVzl1SUdWdVpITWdLaTljYmlBZ2IzQjBhVzl1Y3o4NklIdGNiaUFnSUNCa1pYTmpjbWx3ZEdsdmJqODZJSE4wY21sdVp6dGNiaUFnSUNCa1pXeGhlVDg2SUc1MWJXSmxjanRjYmlBZ2ZWeHVmVHRjYmx4dUx5b3FJRVJsYlc4Z2MyTnlhWEIwSUdOc1lYTnpMaUJEYjNWc1pDQmlaU0IxYzJWa0lHWnZjaUJqY21WaGRHbHVaeUJrWlcxdklITmpjbWx3ZEhNZ2RHOGdjMmh2ZHlCMGFHVWdjR3hoZEdadmNtMGdZMkZ3WVdKcGJHbDBhV1Z6SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nUkdWdGIxTmpjbWx3ZENCN1hHNGdJRzVoYldVNklITjBjbWx1WnlBOUlDY25PMXh1SUNCa1pYTmpjbWx3ZEdsdmJqb2djM1J5YVc1bklEMGdKeWM3WEc1Y2JpQWdjM1JoZEdsaklHTjFjbkpsYm5SUFltcGxZM1E2SUVSbGJXOVRZM0pwY0hRZ2ZDQnVkV3hzSUQwZ2JuVnNiRHRjYmx4dUlDQndjbWwyWVhSbElGOXBjMEYxZEc5dFlYUnBZem9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNCd2NtbDJZWFJsSUY5aGRYUnZVM1JoY25SR2FYSnpkRk4wWlhBNklHSnZiMnhsWVc0Z1BTQm1ZV3h6WlR0Y2JpQWdjSEpwZG1GMFpTQmZZM1Z5Y21WdWRGTjBaWEE2SUc1MWJXSmxjaUE5SURBN1hHNGdJSEJ5YVhaaGRHVWdYMmx6VTNSdmNIQmxaRG9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNCd2NtbDJZWFJsSUY5cGMwTmhibU5sYkd4bFpEb2dZbTl2YkdWaGJpQTlJR1poYkhObE8xeHVJQ0J3Y21sMllYUmxJRjlwYzFOMFpYQlFjbTlqWlhOelpXUTZJR0p2YjJ4bFlXNGdQU0JtWVd4elpUdGNibHh1SUNCd2NtbDJZWFJsSUY5eWIyOTBPaUJJVkUxTVJHbDJSV3hsYldWdWRDQTlJSFZwTG1ScGRpaGJYU3dnZTJsa09pQW5aR1Z0YnkxelkzSnBjSFFuTEZ4dUlDQWdJR05zWVhOelpYTTZJQ2QwZFhSdmNtbGhiSE10Y205dmRDQjBkWFJ2Y21saGJITXRkSEpoWTJzZ1pHVnRieTFoY0hBdGMyTnlhWEIwSjMwcE8xeHVYRzRnSUhCeWFYWmhkR1VnWDNOMFpYQnpPaUJUZEdWd1cxMGdQU0JiWFR0Y2JseHVJQ0J3Y21sMllYUmxJRjl0WVdsdVNHVmhaR1Z5T2lCSVZFMU1SR2wyUld4bGJXVnVkQ0E5SUhWcExuQmhibVZzS0Z0ZExDQW5kSFYwYjNKcFlXeHpMVzFoYVc0dGFHVmhaR1Z5SnlrN1hHNGdJSEJ5YVhaaGRHVWdYMmhsWVdSbGNqb2dTRlJOVEVobFlXUnBibWRGYkdWdFpXNTBJRDBnZFdrdWFESW9KeWNwTzF4dUlDQndjbWwyWVhSbElGOW9aV0ZrWlhKRWFYWTZJRWhVVFV4RWFYWkZiR1Z0Wlc1MElEMGdkV2t1WkdsMlNDaGJYU3dnSjNSMWRHOXlhV0ZzY3kxeWIyOTBMV2hsWVdSbGNpY3BPMXh1SUNCd2NtbDJZWFJsSUY5emRHOXdVM1JoY25SQ2RHNDZJRWhVVFV4Q2RYUjBiMjVGYkdWdFpXNTBJRDBnZFdrdVluVjBkRzl1S0hWcExtbGpiMjVHUVNnbmNHRjFjMlVuS1N4Y2JpQWdJQ0FvS1NBOVBpQjBhR2x6TGw5amFHRnVaMlZUZEc5d1UzUmhkR1VvS1N3Z0oxQnNZWGtnTHlCd1lYVnpaU2NwTzF4dUlDQndjbWwyWVhSbElGOXlaWE4wWVhKMFFuUnVPaUJJVkUxTVFuVjBkRzl1Uld4bGJXVnVkQ0E5SUhWcExtSjFkSFJ2YmloMWFTNXBZMjl1UmtFb0ozSmxaRzhuS1N3Z0tDa2dQVDRnZEdocGN5NWZjbVZ6ZEdGeWRGTmpjbWx3ZENncExDQW5VbVZ6ZEdGeWRDY3BPMXh1SUNCd2NtbDJZWFJsSUY5dVpYaDBVM1JsY0VKMGJqb2dTRlJOVEVKMWRIUnZia1ZzWlcxbGJuUWdQU0IxYVM1aWRYUjBiMjRvZFdrdWFXTnZia1pCS0Nkd2JHRjVKeWtzSUNncElEMCtJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVYMmx6VTNSbGNGQnliMk5sYzNObFpDbGNiaUFnSUNBZ0lIUm9hWE11WDI1bGVIUlRkR1Z3S0NrN1hHNGdJSDBzSUNkT1pYaDBJSE4wWlhBbktUdGNibHh1SUNCd2NtbDJZWFJsSUY5aFkzUnBkbWwwZVRvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNXdZVzVsYkNoYlhTd2dKM1IxZEc5eWFXRnNjeTF5YjI5MExXUmxjMk55YVhCMGFXOXVKeWs3WEc1Y2JpQWdjSEpwZG1GMFpTQmZjSEp2WjNKbGMzTkVhWFk2SUVoVVRVeEVhWFpGYkdWdFpXNTBJRDBnZFdrdVpHbDJWaWhiWFN3Z0ozUjFkRzl5YVdGc2N5MXliMjkwTFhCeWIyZHlaWE56SnlrN1hHNGdJSEJ5YVhaaGRHVWdYM0J5YjJkeVpYTnpPaUJJVkUxTVVISnZaM0psYzNORmJHVnRaVzUwSUQwZ2RXa3VaV3hsYldWdWRDZ25jSEp2WjNKbGMzTW5LVHRjYmlBZ2NISnBkbUYwWlNCZmNISnZaM0psYzNOVGRHVndjem9nU0ZSTlRFUnBka1ZzWlcxbGJuUWdQU0IxYVM1a2FYWlVaWGgwS0NjbktUdGNibHh1SUNCd2NtbDJZWFJsSUY5dWIyUmxQem9nUkVjdVJHOWphMDV2WkdVN1hHNGdJSEJ5YVhaaGRHVWdYMk5zYjNObFFuUnVPaUJJVkUxTVFuVjBkRzl1Uld4bGJXVnVkQ0E5SUhWcExtSjFkSFJ2YmloMWFTNXBZMjl1UmtFb0oyTm9aWFp5YjI0dGJHVm1kQ2NwTENBb0tTQTlQaUIwYUdsekxsOWpiRzl6WlVSdlkyc29LU3dnSjBKaFkyc2dkRzhnWkdWdGJ5Y3BPMXh1WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYm1GdFpUb2djM1J5YVc1bkxDQmtaWE5qY21sd2RHbHZiam9nYzNSeWFXNW5MQ0JwYzBGMWRHOXRZWFJwWXpvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTEZ4dUlDQWdJRzl3ZEdsdmJuTS9PaUI3WVhWMGIxTjBZWEowUm1seWMzUlRkR1Z3UHpvZ1ltOXZiR1ZoYm4wcElIdGNiaUFnSUNCMGFHbHpMbTVoYldVZ1BTQnVZVzFsTzF4dUlDQWdJSFJvYVhNdVpHVnpZM0pwY0hScGIyNGdQU0JrWlhOamNtbHdkR2x2Ymp0Y2JpQWdJQ0IwYUdsekxsOXBjMEYxZEc5dFlYUnBZeUE5SUdselFYVjBiMjFoZEdsak8xeHVJQ0FnSUhSb2FYTXVYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjQ0E5SUc5d2RHbHZibk0vTG1GMWRHOVRkR0Z5ZEVacGNuTjBVM1JsY0NBL1B5Qm1ZV3h6WlR0Y2JseHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpMbTFoZUNBOUlEQTdYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM011ZG1Gc2RXVWdQU0F4TzF4dVhHNGdJQ0FnUkdWdGIxTmpjbWx3ZEM1amRYSnlaVzUwVDJKcVpXTjBJRDBnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzhxS2lCU1pYUjFjbTV6SUdSbGJXOGdjMk55YVhCMElITjBaWEJ6SUNvdlhHNGdJR2RsZENCemRHVndjeWdwT2lCVGRHVndXMTBnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5emRHVndjenRjYmlBZ2ZWeHVYRzRnSUM4cUtpQlNaWFIxY201eklIUm9aU0JoYlc5MWJuUWdiMllnWkdWdGJ5QnpZM0pwY0hRZ2MzUmxjSE1nS2k5Y2JpQWdaMlYwSUhOMFpYQk9kVzFpWlhJb0tUb2diblZ0WW1WeUlIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZjM1JsY0hNdWJHVnVaM1JvTzF4dUlDQjlYRzVjYmx4dUlDQXZLaW9nUVdSa2N5QnpZM0pwY0hRZ2FHVmhaR1Z5SUNvdlhHNGdJSEJ5YVhaaGRHVWdYMkZrWkVobFlXUmxjaWdwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TGw5amNtVmhkR1ZJWldGa1pYSkVhWFlvS1R0Y2JpQWdJQ0IwYUdsekxsOWpjbVZoZEdWUWNtOW5jbVZ6YzBScGRpZ3BPMXh1SUNBZ0lIUm9hWE11WDIxaGFXNUlaV0ZrWlhJdVlYQndaVzVrS0hSb2FYTXVYMmhsWVdSbGNrUnBkaXdnZEdocGN5NWZjSEp2WjNKbGMzTkVhWFlwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRU55WldGMFpYTWdjMk55YVhCMElHaGxZV1JsY2lCa2FYWWdLaTljYmlBZ2NISnBkbUYwWlNCZlkzSmxZWFJsU0dWaFpHVnlSR2wyS0NrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdVgyaGxZV1JsY2k1cGJtNWxjbFJsZUhRZ1BTQjBhR2x6TG01aGJXVTdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlSR2wyTG1Gd2NHVnVaQ2gwYUdsekxsOWpiRzl6WlVKMGJpazdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlSR2wyTG1Gd2NHVnVaQ2gwYUdsekxsOW9aV0ZrWlhJcE8xeHVYRzRnSUNBZ0tIUm9hWE11WDI1bGVIUlRkR1Z3UW5SdUxtWnBjbk4wUTJocGJHUWdZWE1nU0ZSTlRFVnNaVzFsYm5RcExtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1GeklHWmhMWEJzWVhrbk8xeHVYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlSR2wyTG1Gd2NHVnVaQ2gwYUdsekxsOXBjMEYxZEc5dFlYUnBZeUEvSUhSb2FYTXVYM04wYjNCVGRHRnlkRUowYmlBNklIUm9hWE11WDI1bGVIUlRkR1Z3UW5SdUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCRGNtVmhkR1Z6SUhOamNtbHdkQ0J3Y205bmNtVnpjeUJrYVhZZ0tpOWNiaUFnY0hKcGRtRjBaU0JmWTNKbFlYUmxVSEp2WjNKbGMzTkVhWFlvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWJXRjRJRDBnZEdocGN5NXpkR1Z3VG5WdFltVnlPMXh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56UkdsMkxtRndjR1Z1WkNoMGFHbHpMbDl3Y205bmNtVnpjeWs3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNOVGRHVndjeUE5SUhWcExtUnBkbFJsZUhRb1lGTjBaWEE2SUNSN2RHaHBjeTVmY0hKdlozSmxjM011ZG1Gc2RXVjlJRzltSUNSN2RHaHBjeTV6ZEdWd1RuVnRZbVZ5ZldBcE8xeHVYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM05FYVhZdVlYQndaVzVrS0hSb2FYTXVYM0J5YjJkeVpYTnpVM1JsY0hNcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVGa1pITWdaR1Z6WTNKcGNIUnBiMjRnYjJZZ2RHaGxJSE5qY21sd2RDQXFMMXh1SUNCd2NtbDJZWFJsSUY5aFpHUkVaWE5qY21sd2RHbHZiaWdwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TGw5aFkzUnBkbWwwZVM1aGNIQmxibVFvZFdrdVpHbDJLSFJvYVhNdVpHVnpZM0pwY0hScGIyNHNJQ2QwZFhSdmNtbGhiSE10Y205dmRDMWtaWE5qY21sd2RHbHZiaWNwS1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RHaHBjeTV6ZEdWd1RuVnRZbVZ5T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCcGJuTjBjblZqZEdsdmJrbHVaR2xqWVhSdmNpQTlJSFZwTG1samIyNUdRU2duWTJ4dlkyc25LVHRjYmlBZ0lDQWdJR2xtSUNnaGRHaHBjeTVmYVhOQmRYUnZiV0YwYVdNcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0drZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBibk4wY25WamRHbHZia2x1WkdsallYUnZjaUE5SUhWcExtbGpiMjVHUVNnbmNHeGhlU2NzSUNncElEMCtJSFJvYVhNdVgyNWxlSFJUZEdWd0tDa3NJQ2RPWlhoMElITjBaWEFuS1R0Y2JpQWdJQ0FnSUNBZ0lDQnBibk4wY25WamRHbHZia2x1WkdsallYUnZjaTVqYkdGemMwNWhiV1VnUFNBblozSnZheTFwWTI5dUlHWmhjeUJtWVMxd2JHRjVKenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUWdhVzV6ZEhKMVkzUnBiMjVFYVhZZ1BTQjFhUzVrYVhZb2RHaHBjeTVmYzNSbGNITmJhVjB1Ym1GdFpTd2dKMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmt0YVc1emRISjFZM1JwYjI0bktUdGNiaUFnSUNBZ0lHTnZibk4wSUdOMWNuSmxiblJUZEdWd1JHVnpZM0pwY0hScGIyNGdQU0IxYVM1a2FYWW9kR2hwY3k1ZmMzUmxjSE5iYVYwdWIzQjBhVzl1Y3o4dVpHVnpZM0pwY0hScGIyNHNYRzRnSUNBZ0lDQWdJQ2RuY205ckxYUjFkRzl5YVdGc0xYTjBaWEF0WkdWelkzSnBjSFJwYjI0Z2FHbGtaR1Z1SnlrN1hHNGdJQ0FnSUNCamIyNXpkQ0JsYm5SeWVTQTlJSFZwTG1ScGRrZ29XMXh1SUNBZ0lDQWdJQ0JwYm5OMGNuVmpkR2x2YmtsdVpHbGpZWFJ2Y2l4Y2JpQWdJQ0FnSUNBZ2FXNXpkSEoxWTNScGIyNUVhWFlzWEc0Z0lDQWdJQ0JkTENBblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTY3BPMXh1WEc0Z0lDQWdJQ0IwYUdsekxsOWhZM1JwZG1sMGVTNWhjSEJsYm1Rb1pXNTBjbmtzSUdOMWNuSmxiblJUZEdWd1JHVnpZM0pwY0hScGIyNHBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzhxS2lCSmJtbDBhV0ZzYVhwbGN5QjBhR1VnY205dmRDQnZaaUIwYUdVZ1pHVnRieUJ6WTNKcGNIUWdLaTljYmlBZ2NISnBkbUYwWlNCZmFXNXBkRkp2YjNRb0tUb2dkbTlwWkNCN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1M2FXNWtiM2R6TG5Ob2IzZERiMjUwWlhoMFVHRnVaV3dnUFNCMGNuVmxPMXh1SUNBZ0lHZHliMnN1YzJobGJHd3VkMmx1Wkc5M2N5NXphRzkzU0dWc2NDQTlJR1poYkhObE8xeHVYRzRnSUNBZ1kyOXVjM1FnYzJOeWFYQjBSRzlqYTA1dlpHVWdQU0JCY25KaGVTNW1jbTl0S0dkeWIyc3VjMmhsYkd3dVpHOWphMDFoYm1GblpYSXVjbTl2ZEU1dlpHVXVZMmhwYkdSeVpXNHBXekJkTzF4dVhHNGdJQ0FnZEdocGN5NWZibTlrWlNBOUlHZHliMnN1YzJobGJHd3VaRzlqYTAxaGJtRm5aWEl1Wkc5amF5aDBhR2x6TGw5eWIyOTBMQ0JFUnk1RVQwTkxYMVJaVUVVdVJrbE1UQ3dnYzJOeWFYQjBSRzlqYTA1dlpHVXNJQ2NuS1R0Y2JseHVJQ0FnSUdsbUlDaHpZM0pwY0hSRWIyTnJUbTlrWlM1d1lYSmxiblF1WTI5dWRHRnBibVZ5TG1OdmJuUmhhVzVsY2tWc1pXMWxiblF1Wm1seWMzUkZiR1Z0Wlc1MFEyaHBiR1EvTG14aGMzUkZiR1Z0Wlc1MFEyaHBiR1EvTGx4dUlDQWdJQ0FnWTJ4aGMzTk1hWE4wTG1OdmJuUmhhVzV6S0NkMFlXSXRhR0Z1Wkd4bExXeHBjM1F0WTI5dWRHRnBibVZ5SnlrcFhHNGdJQ0FnSUNCelkzSnBjSFJFYjJOclRtOWtaUzV3WVhKbGJuUXVZMjl1ZEdGcGJtVnlMbU52Ym5SaGFXNWxja1ZzWlcxbGJuUXVabWx5YzNSRmJHVnRaVzUwUTJocGJHUS9MbXhoYzNSRmJHVnRaVzUwUTJocGJHUXVjbVZ0YjNabEtDazdYRzVjYmlBZ0lDQjBhR2x6TGw5dWIyUmxMbU52Ym5SaGFXNWxjaTVqYjI1MFlXbHVaWEpGYkdWdFpXNTBMbU5zWVhOelRHbHpkQzVoWkdRb0ozUjFkRzl5YVdGc2N5MWtaVzF2TFhOamNtbHdkQzFqYjI1MFlXbHVaWEluS1R0Y2JseHVJQ0FnSUhSb2FYTXVYMkZrWkVobFlXUmxjaWdwTzF4dUlDQWdJSFJvYVhNdVgzSnZiM1F1WVhCd1pXNWtLSFJvYVhNdVgyMWhhVzVJWldGa1pYSXBPMXh1WEc0Z0lDQWdkR2hwY3k1ZllXUmtSR1Z6WTNKcGNIUnBiMjRvS1R0Y2JpQWdJQ0IwYUdsekxsOXliMjkwTG1Gd2NHVnVaQ2gwYUdsekxsOWhZM1JwZG1sMGVTazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1VISnZZMlZ6YzJWeklHNWxlSFFnYzNSbGNDQXFMMXh1SUNCd2NtbDJZWFJsSUdGemVXNWpJRjl1WlhoMFUzUmxjQ2dwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQjBhR2x6TGw5cGMxTjBaWEJRY205alpYTnpaV1FnUFNCMGNuVmxPMXh1SUNBZ0lHbG1JQ2doZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUhSb2FYTXVYMjVsZUhSVGRHVndRblJ1TG1Oc1lYTnpUR2x6ZEM1aFpHUW9KMlJwYzJGaWJHVmtKeWs3WEc0Z0lDQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25abUV0WkdsellXSnNaV1FuS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVNBOUlIUm9hWE11WDJGamRHbDJhWFI1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmtuS1Z0MGFHbHpMbDlqZFhKeVpXNTBVM1JsY0YwN1hHNGdJQ0FnWTI5dWMzUWdaVzUwY25sSmJtUnBZMkYwYjNJZ1BTQjBhR2x6TGw5aFkzUnBkbWwwZVM1blpYUkZiR1Z0Wlc1MGMwSjVRMnhoYzNOT1lXMWxLQ2RuY205ckxXbGpiMjRuS1Z0MGFHbHpMbDlqZFhKeVpXNTBVM1JsY0YwN1hHNGdJQ0FnWTI5dWMzUWdaVzUwY25sSmJuTjBjblZqZEdsdmJpQTlJSFJvYVhNdVgyRmpkR2wyYVhSNUxtZGxkRVZzWlcxbGJuUnpRbmxEYkdGemMwNWhiV1VvSjJkeWIyc3RkSFYwYjNKcFlXd3RjM1JsY0Mxa1pYTmpjbWx3ZEdsdmJpY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmx4dUlDQWdJR1Z1ZEhKNVNXNWthV05oZEc5eUxtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1GeUlHWmhMWE53YVc1dVpYSXRkR2hwY21RZ1ptRXRjM0JwYmljN1hHNGdJQ0FnWlc1MGNubEpibk4wY25WamRHbHZiaTVqYkdGemMweHBjM1F1Y21WdGIzWmxLQ2RvYVdSa1pXNG5LVHRjYmlBZ0lDQmxiblJ5ZVVsdWMzUnlkV04wYVc5dUxtTnNZWE56VEdsemRDNWhaR1FvSjNacGMybGliR1VuS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR04xY25KbGJuUlRkR1Z3SUQwZ1pXNTBjbmtnWVhNZ1NGUk5URVJwZGtWc1pXMWxiblE3WEc0Z0lDQWdZMjl1YzNRZ2MzUmxjRVJsYkdGNUlEMGdkR2hwY3k1ZmMzUmxjSE5iZEdocGN5NWZZM1Z5Y21WdWRGTjBaWEJkTG05d2RHbHZibk0vTG1SbGJHRjVJRDljYmlBZ0lDQWdJSFJvYVhNdVgzTjBaWEJ6VzNSb2FYTXVYMk4xY25KbGJuUlRkR1Z3WFM1dmNIUnBiMjV6UHk1a1pXeGhlU0VnT2lBeU1EQXdPMXh1WEc0Z0lDQWdZWGRoYVhRZ2RHaHBjeTVmYzNSbGNITmJkR2hwY3k1ZlkzVnljbVZ1ZEZOMFpYQmRMbVoxYm1Nb0tUdGNiaUFnSUNCMGFHbHpMbDl6WTNKdmJHeFVieWgwYUdsekxsOXliMjkwTENCamRYSnlaVzUwVTNSbGNDNXZabVp6WlhSVWIzQWdMU0IwYUdsekxsOXRZV2x1U0dWaFpHVnlMbTltWm5ObGRFaGxhV2RvZENrN1hHNGdJQ0FnWVhkaGFYUWdkR2hwY3k1ZlkyOTFiblJrYjNkdUtHVnVkSEo1SUdGeklFaFVUVXhGYkdWdFpXNTBMQ0JsYm5SeWVVbHVaR2xqWVhSdmNpQmhjeUJJVkUxTVJXeGxiV1Z1ZEN3Z2MzUmxjRVJsYkdGNUtUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTaHpkR1Z3UkdWc1lYa3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JtVjNSVzUwY25sSmJtUnBZMkYwYjNJZ1BTQjFhUzVwWTI5dVJrRW9KMk5vWldOckp5azdYRzRnSUNBZ1pXNTBjbmxKYm1ScFkyRjBiM0l1Y21Wd2JHRmpaVmRwZEdnb2JtVjNSVzUwY25sSmJtUnBZMkYwYjNJcE8xeHVJQ0FnSUc1bGQwVnVkSEo1U1c1a2FXTmhkRzl5TG1Oc1lYTnpUbUZ0WlNBOUlDZG5jbTlyTFdsamIyNGdabUZ5SUdaaExXTm9aV05ySnp0Y2JseHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpMblpoYkhWbEt5czdYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM05UZEdWd2N5NXBibTVsY2xSbGVIUWdQU0JnVTNSbGNEb2dKSHQwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlgwZ2IyWWdKSHQwYUdsekxuTjBaWEJPZFcxaVpYSjlZRHRjYmx4dUlDQWdJSFJvYVhNdVgyTjFjbkpsYm5SVGRHVndLeXM3WEc0Z0lDQWdkR2hwY3k1ZmFYTlRkR1Z3VUhKdlkyVnpjMlZrSUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmWTNWeWNtVnVkRk4wWlhBZ1BUMDlJSFJvYVhNdWMzUmxjRTUxYldKbGNpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmFYTkJkWFJ2YldGMGFXTWdQeUIwYUdsekxsOXpkRzl3VTNSaGNuUkNkRzR1Y21Wd2JHRmpaVmRwZEdnb2RHaHBjeTVmY21WemRHRnlkRUowYmlrZ09seHVJQ0FnSUNBZ0lDQjBhR2x6TGw5dVpYaDBVM1JsY0VKMGJpNXlaWEJzWVdObFYybDBhQ2gwYUdsekxsOXlaWE4wWVhKMFFuUnVLVHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JWFJvYVhNdVgybHpRWFYwYjIxaGRHbGpLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnVaWGgwVTNSbGNFVnVkSEo1U1c1a2FXTmhkRzl5SUQwZ2RHaHBjeTVmWVdOMGFYWnBkSGt1WjJWMFJXeGxiV1Z1ZEhOQ2VVTnNZWE56VG1GdFpTZ25aM0p2YXkxcFkyOXVKeWxiZEdocGN5NWZZM1Z5Y21WdWRGTjBaWEJkTzF4dUlDQWdJQ0FnWTI5dWMzUWdjM1JoY25ST1pYaDBVM1JsY0VsamIyNGdQU0IxYVM1cFkyOXVSa0VvSjNCc1lYa25MQ0FvS1NBOVBpQjBhR2x6TGw5dVpYaDBVM1JsY0NncExDQW5UbVY0ZENCemRHVndKeWs3WEc0Z0lDQWdJQ0J6ZEdGeWRFNWxlSFJUZEdWd1NXTnZiaTVqYkdGemMwNWhiV1VnUFNBblozSnZheTFwWTI5dUlHWmhjeUJtWVMxd2JHRjVKenRjYmlBZ0lDQWdJRzVsZUhSVGRHVndSVzUwY25sSmJtUnBZMkYwYjNJdWNtVndiR0ZqWlZkcGRHZ29jM1JoY25ST1pYaDBVM1JsY0VsamIyNHBPMXh1SUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVZMnhoYzNOTWFYTjBMbkpsYlc5MlpTZ25aR2x6WVdKc1pXUW5LVHRjYmlBZ0lDQWdJQ2gwYUdsekxsOXVaWGgwVTNSbGNFSjBiaTVtYVhKemRFTm9hV3hrSUdGeklFaFVUVXhGYkdWdFpXNTBLUzVqYkdGemMweHBjM1F1Y21WdGIzWmxLQ2RtWVMxa2FYTmhZbXhsWkNjcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLaUJUZEdGeWRITWdkR2hsSUdSbGJXOGdjMk55YVhCMElHRmpkR2x2Ym5NZ0tpOWNiaUFnY0hKcGRtRjBaU0JoYzNsdVl5QmZjM1JoY25SVFkzSnBjSFFvS1RvZ1VISnZiV2x6WlR4MmIybGtQaUI3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SUhSb2FYTXVYMk4xY25KbGJuUlRkR1Z3T3lCcElEd2dkR2hwY3k1emRHVndUblZ0WW1WeU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TGw5cGMxTjBiM0J3WldRZ2ZId2dkR2hwY3k1ZmFYTkRZVzVqWld4c1pXUXBYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVYRzRnSUNBZ0lDQmhkMkZwZENCMGFHbHpMbDl1WlhoMFUzUmxjQ2dwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFkzSnZiR3h6SUhSdklIUm9aU0JqZFhKeVpXNTBJSE4wWlhCY2JpQWdJQ29nUUhCaGNtRnRJR1ZzWlcxbGJuUWdMU0JEZFhKeVpXNTBJSE4wWlhBZ1pXeGxiV1Z1ZENCcGJpQnliMjkwWEc0Z0lDQXFJRUJ3WVhKaGJTQjVJQzBnZVNCamIyOXlaR2x1WVhSbElHOW1JSFJvWlNCbGJHVnRaVzUwWEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUY5elkzSnZiR3hVYnlobGJHVnRaVzUwT2lCSVZFMU1SR2wyUld4bGJXVnVkQ3dnZVRvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdaV3hsYldWdWRDNW1iMk4xY3lncE8xeHVJQ0FnSUdWc1pXMWxiblF1YzJOeWIyeHNWRzl3SUQwZ2VUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCWkdSeklHRnVJR2x1ZEdWeVlXTjBhWFpsSUdSbGJHRjVJR2x1WkdsallYUnZjbHh1SUNBZ0tpQkFjR0Z5WVcwZ1pXeGxiV1Z1ZENBdElFTjFjbkpsYm5RZ2MzUmxjQ0JsYkdWdFpXNTBYRzRnSUNBcUlFQndZWEpoYlNCcGJtUnBZMkYwYjNJZ0xTQkRkWEp5Wlc1MElITjBaWEFnYVc1a2FXTmhkRzl5WEc0Z0lDQXFJRUJ3WVhKaGJTQjBhVzFsSUMwZ1NXNWthV05oZEc5eUlHRnVhVzFoZEdsdmJpQjBhVzFsWEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUdGemVXNWpJRjlqYjNWdWRHUnZkMjRvWld4bGJXVnVkRG9nU0ZSTlRFVnNaVzFsYm5Rc0lHbHVaR2xqWVhSdmNqb2dTRlJOVEVWc1pXMWxiblFzSUhScGJXVTZJRzUxYldKbGNpazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR052ZFc1MFpHOTNia1JwZGpvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNWthWFlvVzEwc0lDZGtaVzF2TFhOamNtbHdkQzFqYjNWdWRHUnZkMjRuS1R0Y2JseHVJQ0FnSUdsdVpHbGpZWFJ2Y2k1amJHRnpjMHhwYzNRdVlXUmtLQ2RvYVdSa1pXNG5LVHRjYmx4dUlDQWdJR3hsZENCamIzVnVkR1J2ZDI0Z1BTQjBhVzFsSUM4Z01UQXdNRHRjYmlBZ0lDQmpiMjV6ZENCemRtY2dQU0IwYUdsekxsOWpjbVZoZEdWVFZrZEpibVJwWTJGMGIzSW9ZMjkxYm5Sa2IzZHVLVHRjYmx4dUlDQWdJR052ZFc1MFpHOTNia1JwZGk1aGNIQmxibVFvYzNabktUdGNiaUFnSUNCbGJHVnRaVzUwTG5CeVpYQmxibVFvWTI5MWJuUmtiM2R1UkdsMktUdGNibHh1SUNBZ0lHTnZibk4wSUdsdWRHVnlkbUZzSUQwZ2MyVjBTVzUwWlhKMllXd29LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOTFiblJrYjNkdUxTMDdYRzRnSUNBZ0lDQnBaaUFvWTI5MWJuUmtiM2R1SUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdOc1pXRnlTVzUwWlhKMllXd29hVzUwWlhKMllXd3BPMXh1SUNBZ0lDQWdJQ0JqYjNWdWRHUnZkMjVFYVhZdWNtVnRiM1psS0NrN1hHNWNiaUFnSUNBZ0lDQWdhVzVrYVdOaGRHOXlMbU5zWVhOelRHbHpkQzV5WlcxdmRtVW9KMmhwWkdSbGJpY3BPMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0l1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25kbWx6YVdKc1pTY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNJREV3TURBcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU55WldGMFpYTWdVMVpISUhkcGRHZ2dZMjkxYm5Sa2IzZHVJR05wY21Oc1pWeHVJQ0FnS2lCQWNHRnlZVzBnWTI5MWJuUmtiM2R1SUMwZ1kyOTFiblJrYjNkdUlIUnBiV1ZjYmlBZ0lDb2dRSEpsZEhWeWJuTWdVMVpISUdOdmRXNTBaRzkzYmlCcGJtUnBZMkYwYjNKY2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ1gyTnlaV0YwWlZOV1IwbHVaR2xqWVhSdmNpaGpiM1Z1ZEdSdmQyNDZJRzUxYldKbGNpazZJRk5XUjFOV1IwVnNaVzFsYm5RZ2UxeHVJQ0FnSUdOdmJuTjBJSE4yWnlBOUlHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblJPVXlnbmFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jbkxDQW5jM1puSnlrN1hHNGdJQ0FnWTI5dWMzUWdZMmx5WTJ4bElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZEU1VEtDZG9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5Y3NJQ2RqYVhKamJHVW5LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKMk40Snl3Z0p6Y25LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKMk41Snl3Z0p6Y25LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKM0luTENBbk5pY3BPMXh1SUNBZ0lHTnBjbU5zWlM1elpYUkJkSFJ5YVdKMWRHVk9VeWh1ZFd4c0xDQW5jM1I1YkdVbkxDQmdZVzVwYldGMGFXOXVPaUJqYjNWdWRHUnZkMjRnSkh0amIzVnVkR1J2ZDI1OWN5QnNhVzVsWVhJZ2FXNW1hVzVwZEdVZ1ptOXlkMkZ5WkhOZ0tUdGNiaUFnSUNCemRtY3VZWEJ3Wlc1a0tHTnBjbU5zWlNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNabk8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVOb1lXNW5aWE1nZEdobElITjBZWFJsSUc5bUlIUm9aU0JrWlcxdklITmpjbWx3ZENBb2MzUnZjQzl3YkdGNUtTQXFMMXh1SUNCd2NtbDJZWFJsSUY5amFHRnVaMlZUZEc5d1UzUmhkR1VvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdZMjl1YzNRZ2FXTnZiaUE5SUhSb2FYTXVYM04wYjNCVGRHRnlkRUowYmk1blpYUkZiR1Z0Wlc1MGMwSjVRMnhoYzNOT1lXMWxLQ2RuY205ckxXbGpiMjRuS1R0Y2JpQWdJQ0JwWTI5dVd6QmRMbU5zWVhOelRtRnRaU0E5SUNkbmNtOXJMV2xqYjI0Z1ptRnpJR1poTFhCc1lYa25PMXh1SUNBZ0lIUm9hWE11WDJselUzUnZjSEJsWkNBOUlDRjBhR2x6TGw5cGMxTjBiM0J3WldRN1hHNWNiaUFnSUNCcFppQW9JWFJvYVhNdVgybHpVM1J2Y0hCbFpDa2dlMXh1SUNBZ0lDQWdhV052Ymxzd1hTNWpiR0Z6YzA1aGJXVWdQU0FuWjNKdmF5MXBZMjl1SUdaaGJDQm1ZUzF3WVhWelpTYzdYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVYMmx6VTNSbGNGQnliMk5sYzNObFpDbGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmMzUmhjblJUWTNKcGNIUW9LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lvZ1VtVnpkR0Z5ZEhNZ2RHaGxJSE5qY21sd2RDQXFMMXh1SUNCd2NtbDJZWFJsSUY5eVpYTjBZWEowVTJOeWFYQjBLQ2s2SUhadmFXUWdlMXh1SUNBZ0lHZHliMnN1YzJobGJHd3VaRzlqYTAxaGJtRm5aWEl1WTJ4dmMyVW9kR2hwY3k1ZmJtOWtaU0VwTzF4dUlDQWdJR2R5YjJzdWMyaGxiR3d1WTJ4dmMyVkJiR3dvS1R0Y2JpQWdJQ0IwYUdsekxsOWpiR1ZoY2xKdmIzUW9LVHRjYmlBZ0lDQjBhR2x6TGw5elpYUkpibWwwVUdGeVlXMXpLQ2s3WEc0Z0lDQWdkR2hwY3k1emRHRnlkQ2dwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRU5zWldGeWN5QjBhR1VnY205dmRDQmxiR1Z0Wlc1MElDb3ZYRzRnSUhCeWFYWmhkR1VnWDJOc1pXRnlVbTl2ZENncE9pQjJiMmxrSUh0Y2JpQWdJQ0IwYUdsekxsOXliMjkwSUQwZ2RXa3VaR2wyS0Z0ZExDQjdhV1E2SUNka1pXMXZMWE5qY21sd2RDY3NJR05zWVhOelpYTTZJQ2QwZFhSdmNtbGhiSE10Y205dmRDQjBkWFJ2Y21saGJITXRkSEpoWTJzZ1pHVnRieTFoY0hBdGMyTnlhWEIwSjMwcE8xeHVYRzRnSUNBZ2RHaHBjeTVmYldGcGJraGxZV1JsY2lBOUlIVnBMbkJoYm1Wc0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFcxaGFXNHRhR1ZoWkdWeUp5azdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlJRDBnZFdrdWFESW9KeWNwTzF4dUlDQWdJSFJvYVhNdVgyaGxZV1JsY2tScGRpQTlJSFZwTG1ScGRrZ29XMTBzSUNkMGRYUnZjbWxoYkhNdGNtOXZkQzFvWldGa1pYSW5LVHRjYmx4dUlDQWdJSFJvYVhNdVgyRmpkR2wyYVhSNUlEMGdkV2t1Y0dGdVpXd29XMTBzSUNkMGRYUnZjbWxoYkhNdGNtOXZkQzFrWlhOamNtbHdkR2x2YmljcE8xeHVYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM05FYVhZZ1BTQjFhUzVrYVhaV0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRjSEp2WjNKbGMzTW5LVHRjYmlBZ0lDQjBhR2x6TGw5d2NtOW5jbVZ6Y3lBOUlIVnBMbVZzWlcxbGJuUW9KM0J5YjJkeVpYTnpKeWs3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNOVGRHVndjeUE5SUhWcExtUnBkbFJsZUhRb0p5Y3BPMXh1WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWJXRjRJRDBnTUR0Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlNBOUlERTdYRzRnSUgxY2JseHVJQ0F2S2lvZ1UyVjBjeUJwYm1sMGFXRnNJSEJoY21GdFpYUmxjbk1nS2k5Y2JpQWdjSEpwZG1GMFpTQmZjMlYwU1c1cGRGQmhjbUZ0Y3lncE9pQjJiMmxrSUh0Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFUzUmxjQ0E5SURBN1hHNGdJQ0FnZEdocGN5NWZhWE5UZEc5d2NHVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ2RHaHBjeTVmYVhORFlXNWpaV3hzWldRZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUdOdmJuTjBJR2xqYjI0Z1BTQjBhR2x6TGw5emRHOXdVM1JoY25SQ2RHNHVaMlYwUld4bGJXVnVkSE5DZVVOc1lYTnpUbUZ0WlNnblozSnZheTFwWTI5dUp5azdYRzRnSUNBZ2FXTnZibHN3WFM1amJHRnpjMDVoYldVZ1BTQW5aM0p2YXkxcFkyOXVJR1poYkNCbVlTMXdZWFZ6WlNjN1hHNGdJQ0FnZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1WTJ4aGMzTk1hWE4wTG5KbGJXOTJaU2duWkdsellXSnNaV1FuS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJEYkc5elpYTWdaR1Z0YnlCelkzSnBjSFFnWkc5amF5QXFMMXh1SUNCd2NtbDJZWFJsSUY5amJHOXpaVVJ2WTJzb0tUb2dkbTlwWkNCN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1a2IyTnJUV0Z1WVdkbGNpNWpiRzl6WlNoMGFHbHpMbDl1YjJSbElTazdYRzRnSUNBZ2RHaHBjeTVqWVc1alpXeFRZM0pwY0hRb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCRFlXNWpaV3h6SUhSb1pTQnpZM0pwY0hRZ0tpOWNiaUFnWTJGdVkyVnNVMk55YVhCMEtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMmx6UTJGdVkyVnNiR1ZrSUQwZ2RISjFaVHRjYmlBZ0lDQkVaVzF2VTJOeWFYQjBMbU4xY25KbGJuUlBZbXBsWTNRZ1BTQnVkV3hzTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRmtaSE1nWVNCdVpYY2djM1JsY0NCMGJ5QnpZM0pwY0hSY2JpQWdJQ29nUUhCaGNtRnRJRzVoYldVZ0xTQlRkR1Z3SUc1aGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUdaMWJtTWdMU0JUZEdWd0lHWjFibU4wYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hScGIyNXpJQzBnVTNSbGNDQnZjSFJwYjI1eklDaGtaWE5qY21sd2RHbHZiaUJoYm1RZ1pHVnNZWGtnWVdaMFpYSWdjM1JsY0NCbGJtUnpLVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QlNaWFIxY201eklIUm9aU0JqZFhKeVpXNTBJR1JsYlc4Z2MyTnlhWEIwSUc5aWFtVmpkRnh1SUNBZ0tpOWNiaUFnYzNSbGNDaHVZVzFsT2lCemRISnBibWNzSUdaMWJtTTZJQ2dwSUQwK0lGQnliMjFwYzJVOGRtOXBaRDRzSUc5d2RHbHZibk0vT2lCN1pHVnpZM0pwY0hScGIyNC9PaUJ6ZEhKcGJtY3NJR1JsYkdGNVB6b2diblZ0WW1WeWZTazZJSFJvYVhNZ2UxeHVJQ0FnSUhSb2FYTXVYM04wWlhCelczUm9hWE11YzNSbGNITXViR1Z1WjNSb1hTQTlJSHRjYmlBZ0lDQWdJRzVoYldVNklHNWhiV1VzWEc0Z0lDQWdJQ0JtZFc1ak9pQm1kVzVqTEZ4dUlDQWdJQ0FnYjNCMGFXOXVjem9nYjNCMGFXOXVjeXhjYmlBZ0lDQjlPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHlvcUlGTjBZWEowY3lCMGFHVWdaR1Z0YnlCelkzSnBjSFFnS2k5Y2JpQWdZWE41Ym1NZ2MzUmhjblFvS1RvZ1VISnZiV2x6WlR4MmIybGtQaUI3WEc0Z0lDQWdkR2hwY3k1ZmFXNXBkRkp2YjNRb0tUdGNiaUFnSUNCbmNtOXJMbk5vWld4c0xtNWxkMVpwWlhjb2RHaHBjeTV1WVcxbEtUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnZEdocGN5NWZjM1JoY25SVFkzSnBjSFFvS1R0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWZZWFYwYjFOMFlYSjBSbWx5YzNSVGRHVndLVnh1SUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVmYm1WNGRGTjBaWEFvS1R0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCIvLyBSdW50aW1lIHN5c3RlbSBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb25zIGNhbGwuXG4vLyBJdCB3YXMgcHJldmlvdXNlbHkgZGV2ZWxvcGVkIGFuZCBkb2VzIE5PVCBwcm92aWRlIGNhbGwgd2FzbS1mdW5jdGlvbnMgaW4gV2ViV29ya2Vycy5cblxuLy8gdHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlXG5jb25zdCBoZWFwTWFwID0ge1wiaTMyXCI6IFwiSEVBUDMyXCIsIC8vIEludDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgXCJmMzJcIjogXCJIRUFQRjMyXCIgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgLGFwcFxuY29uc3QgdHlwZU1hcCA9IHtcImkzMlwiOiBJbnQzMkFycmF5LCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IEZsb2F0MzJBcnJheSAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICB9OyBcbiBcbi8vIHR5cGUtdG8tc2hpZnQgbWFwXG5jb25zdCBzaGlmdE1hcCA9IHtcImkzMlwiOiAyLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgICBcImYzMlwiOiAyIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgICB9O1xuXG4vLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuY29uc3QgdHlwZVRvQ29sdW1uQ3JlYXRvck1hcCA9IHtcImkzMlwiOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZjMyXCI6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5fTtcbiBcblxuLy8gQ0xBU1NFUyBUSEFUIEFSRSBVU0VEIEJZIENQUC1XUkFQUEVSXG5cbi8vIHNpbXBsZSBhcmd1bWVudDogYSBudW1iZXIgXG5jbGFzcyBBcmd7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7ICAgICAgICBcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge31cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge31cbn1cblxuLy8gY29sdW1uIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW4gZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mVHlwZXMoYXJyT2ZUeXBlcykge1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpO1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpOyAgICAgICAgXG4gICAgfVxuXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuYnVmID0gbW9kdWxlLl9tYWxsb2ModGhpcy5udW1PZlJvd3MgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhO1xuXG4gICAgICAgICAgICBpZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSAnaTMyJykpIFxuICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICBpZihhcnJheSkgXG4gICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCB0aGlzLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy5idWY7XG4gICAgICAgICAgICBsZXQgYnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgbGV0IGFycmF5ID0gdGhpcy5kYXRhLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMubnVtT2ZSb3dzOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBoZWFwW2J1ZmZlciAvIGJ5dGVzICsgaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgbW9kdWxlLl9mcmVlKHRoaXMuYnVmKTtcbiAgICAgICAgICAgdGhpcy5idWYgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8vIG5ldyBjb2x1bW4gYXJndW1lbnQ6IGEgbmV3IGNvbHVtbiBpcyBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW4gZXh0ZW5kcyBBcmdDb2x1bW4ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cykge1xuICAgICAgICBzdXBlcihbXSwgdGFyZ2V0VHlwZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubnVtT2ZSb3dzID0gbnVtT2ZSb3dzO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmID0gdGhpcy5idWY7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTsgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKHRoaXMubnVtT2ZSb3dzKTsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBhcnJbaV0gPSBoZWFwW2J1ZiAvIGFyci5CWVRFU19QRVJfRUxFTUVOVCArIGldO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgYXJyKTtcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcnIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUaGlzIG1ha2VzIG1pc3Rha2UsIHdoZW4gdGhpcy5udW1PZlJvd3MgPSA1IChUT0RPOiBpbnZlc3RpZ2F0ZSB3aHkpXG4gICAgICAgICAgICAvL3RoaXMuZGF0YSA9IGNvbHVtbkNyZWF0b3IoJ25hbWUnLCBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIHRoaXMubnVtT2ZSb3dzKSk7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGFuIGFycmF5IG9mIGNvbHVtbnMgYXJndW1lbnRcbmNsYXNzIEFyZ0NvbHVtbnMgZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZkNvbHVtbnMpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdGhpcy5udW1PZkNvbHVtbnMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHV0IGNvbHVtbnMgZGF0YSB0byBidWZmZXJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mQ29sdW1uczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSAnZjMyJykpKVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBkYXRhIGFycmF5XG4gICAgICAgICAgICAgICAgaWYoYXJyYXkgIT0gbnVsbCkgXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCAodGhpcy5idWYgKyBpICogdGhpcy5udW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1uczsgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCB0aGlzLmJ1ZiwgbnVtT2ZSb3dzICogbnVtT2ZDb2xzKTtcbiAgICAgICBcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjb2xEYXRhID0gdGhpcy5kYXRhW2ldLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICBjb2xEYXRhW2pdID0gYXJyW2ogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBhbiBhcnJheSBvZiBuZXcgY29sdW1uczogbmV3IGNvbHVtbnMgYXJlIGNyZWF0ZWRcbmNsYXNzIEFyZ05ld0NvbHVtbnMgZXh0ZW5kcyBBcmdDb2x1bW5zIHtcblxuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHN1cGVyKFtbXV0sIHRhcmdldFR5cGUsIHRydWUpOyAgXG4gICAgICAgIHRoaXMuZGF0YSA9IFtdOyAgICAgICAgXG4gICAgICAgIHRoaXMubnVtT2ZDb2x1bW5zID0gbnVtT2ZDb2x1bW5zO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7IH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvbHVtbkNyZWF0b3IgPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyW2pdID0gaGVhcFtidWYgLyBudW1PZkJ5dGVzICsgaiArIGkgKiBudW1PZlJvd3NdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGNvbHVtbkNyZWF0b3IoKGkgKyAxKS50b1N0cmluZygpLCBhcnIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY3JlYXRlIGNvbHVtbnM6IGhlcmUsIG1heSBiZSBhIHByb2JsZW0gd2hlbiBudW1PZlJvd3MgPSA1ICAgICAgICAgICAgXG4gICAgICAgICAgICAvKmZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzLCBudW1PZlJvd3MpKSk7Ki9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYSB3cmFwcGVyIGZvciBleHBvcnRlZCBDL0MrKy1mdW5jdGlvbiBjYWxsXG5mdW5jdGlvbiBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGNGdW5jTmFtZSwgcmV0dXJuVHlwZSwgYXJncylcbntcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSk7XG4gICAgXG4gICAgbGV0IGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQgPSB0cnVlO1xuXG4gICAgLy8gY2hlY2sgbWVtb3J5IGFsbG9jYXRpb25cbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkICY9IGFyZy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpOyAgXG4gICAgXG4gICAgLy8gcnVuIGV4cG9ydGVkIGZ1bmN0aW9uIGlmIGVub3VnaCBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkXG4gICAgaWYoaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCkge1xuXG4gICAgICAgIGxldCBwYXJhbXMgPSBbXTsgLy8gYXJndW1lbnRzIHRoYXQgYXJlIHB1dCB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25cbiAgICAgICAgbGV0IHR5cGVzID0gW107IC8vIHRoZWlyIHR5cGVzXG5cbiAgICAgICAgLy8gcHJlcGFyZSBkYXRhIHRoYXQgaXMgcHV0IHRvIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZUeXBlcyh0eXBlcyk7XG4gICAgICAgICAgICBhcmcucHV0RGF0YVRvQnVmZmVyKG1vZHVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4gPSAocmV0dXJuVHlwZSA9PSAnbnVtJykgPyAnbnVtYmVyJyA6IG51bGw7ICAgXG4gICAgICAgIFxuICAgICAgICAvLyBjYWxsIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGlmKGV4dGVuZGVkVHlwZU9mUmV0dXJuKVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY0Z1bmNOYW1lLCBleHRlbmRlZFR5cGVPZlJldHVybiwgdHlwZXMsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAvLyB1cGRhdGUgYW5kIGdldCBkYXRhIGZyb20gYnVmZmVycyBpZiByZXF1aXJlZFxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICAgICAgYXJnLmdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSk7ICAgICAgIFxuICAgIH1cblxuICAgIC8vIGNsZWFyIGJ1ZmZlcnNcbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSAgICAgICAgIFxuICAgICAgICBhcmcuZnJlZUJ1ZmZlcihtb2R1bGUpO1xuXG4gICAgaWYocmVzdWx0ICE9IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHJlc3VsdDsgICAgXG59IC8vIGNwcEZ1bmNXcmFwcGVyXG5cblxuLy8gQSBMQVlFUiBCRVRXRUVOIEpTIEFORCBDUFAtV1JBUFBFUlxuXG4vLyBQYXJhbWV0ZXJzIGNyZWF0b3JcbmxldCBQYXJhbSA9IHtcbiAgICBpbnRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdpMzInKTtcbiAgICB9LFxuICAgIFxuICAgIG5ld0ludENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdpMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBpbnRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2kzMicpO1xuICAgIH0sXG5cbiAgICBuZXdJbnRDb2x1bW5zKG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1ucygnaTMyJywgbnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1uKGNvbHVtbiwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdmMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbnMoY29sdW1ucyl7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1ucyhjb2x1bW5zLnRvTGlzdCgpLCAnZjMyJyk7XG4gICAgfSxcblxuICAgIG5ld0Zsb2F0Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2YzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH0sXG5cbiAgICBudW0obnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnKG51bWJlcik7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIHZhbHVlIGNyZWF0b3JcbmxldCBSZXR1cm4gPSB7XG4gICAgdGFibGVGcm9tQ29sdW1ucyhhcmdDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoYXJnQ29sdW1ucy5kYXRhKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBpbnQobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGRvdWJsZShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgY29sdW1uKGFyZ0NvbHVtbikge1xuICAgICAgICByZXR1cm4gYXJnQ29sdW1uLmRhdGE7XG4gICAgfVxufTtcblxuLy8gVGhlIG1haW4gdG9vbCB0aGF0IGNvbWJpbmVzIGFsbCB0b2dldGhlclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxXYXNtKG1vZHVsZSwgZnVuY05hbWUsIGlucHV0cykge1xuXG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIGNvbnNvbGUubG9nKCdDKystZnVuY3Rpb24gY2FsbCByZXN1bHQ6ICcgKyBjYWxsUmVzdWx0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIGxldCBmaW5pc2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIGNvbnNvbGUubG9nKGBUaW1lIGZvciBDL0MrKy1mdW5jdGlvbiBpcyAke2ZpbmlzaCAtIHN0YXJ0fSBtcy5gKVxuXG4gICAgLy8gaWYgYSBzaW5nbGUgb2JqZWN0IG11c3QgYmUgcmV0dXJuZWRcbiAgICBpZihvdXRwdXRbJ3R5cGUnXSAhPSAnb2JqZWN0cycpXG4gICAgICByZXR1cm4gUmV0dXJuW291dHB1dFsndHlwZSddXShhcmdzW291dHB1dFsnc291cmNlJ11dLmRhdGEpO1xuXG4gICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcblxuICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgZm9yKGxldCBuYW1lIG9mIG91dHB1dFsnc291cmNlJ10pXG4gICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnc1tuYW1lXS5kYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIGFycmF5VG9SZXR1cm47XG4gIH0gLy8gY2FsbFdhc20iLCIvLyBVdGlsaXRpZXMgZm9yIGNhbGxpbmcgd2FzbS1mdW5jdGlvbnMgdmlhIHdlYndvcmtlci5cblxuLy8gV2UgdXNlIGFuIGFwcHJvYWNoIHRoYXQgaXMgd2VsbCBkZXNjcmliZWQgaGVyZTpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbi8vIEl0IGhhcyBiZWVuIG1vZGlmaWVkIGZvciB1c2FnZSBpbiBEQVRBR1JPSy5cblxuLy8gQ29uc3RhbnRzIGZvciB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXJzIHJ1bnRpbWUgc3lzdGVtXG5jb25zdCBUWVBFID0gJ3R5cGUnO1xuY29uc3QgTlVNX1RZUEUgPSAnbnVtJztcbmNvbnN0IEZMT0FUX0NPTFVNTl9UWVBFID0gJ2Zsb2F0Q29sdW1uJztcbmNvbnN0IElOVF9DT0xVTU5fVFlQRSA9ICdpbnRDb2x1bW4nO1xuY29uc3QgRkxPQVRfQ09MVU1OU19UWVBFID0gJ2Zsb2F0Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OU19UWVBFID0gJ25ld0Zsb2F0Q29sdW1ucyc7XG5jb25zdCBJTlRfQ09MVU1OU19UWVBFID0gJ2ludENvbHVtbnMnO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5TX1RZUEUgPSAnbmV3SW50Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OX1RZUEUgPSAnbmV3RmxvYXRDb2x1bW4nO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5fVFlQRSA9ICduZXdJbnRDb2x1bW4nO1xuY29uc3QgQ09MVU1OID0gJ2NvbHVtbic7XG5jb25zdCBDQUxMX1JFU1VMVCA9ICdfY2FsbFJlc3VsdCc7XG5jb25zdCBOVU1fT0ZfUk9XUyA9ICdudW1PZlJvd3MnO1xuY29uc3QgTlVNX09GX0NPTFVNTlMgPSAnbnVtT2ZDb2x1bW5zJztcbmNvbnN0IFJFRiA9ICdyZWYnO1xuY29uc3QgVkFMVUUgPSAndmFsdWUnO1xuY29uc3QgVEFCTEVfT0ZfQ09MVU1OUyA9ICd0YWJsZUZyb21Db2x1bW5zJztcbmNvbnN0IE9CSkVDVFMgPSAnb2JqZWN0cyc7XG5jb25zdCBJTlRfVFlQRSA9ICdpbnQnO1xuY29uc3QgRE9VQkxFX1RZUEUgPSAnZG91YmxlJztcbmNvbnN0IE5VTUJFUiA9ICdudW1iZXInO1xuXG4vLyBUeXBlLXRvLWhlYXAgY29ycmVzcG9uZGVuY2UuXG4vLyBJdCBpcyByZXF1aXJlZCBmb3IgSlMtbW9kdWxlIGdlbmVyYXRlZCBieSBFbXNjcmlwdGVuLFxuLy8gYW5kIGl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSBkYXRhIHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbmNvbnN0IGhlYXBNYXAgPSB7XG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW4nOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IFwiSEVBUDMyXCJcbiAgICAgICAgICAgICAgICB9O1xuXG4vLyBUeXBlIHNpZ25hdHVyZSB0byB0eXBlZCBhcnJheSBtYXAuXG4vLyBJdCBpcyB1c2VkLCB3aGVuIG1hbmlwdWxhdGluZyBjb2x1bW4ocykuXG5jb25zdCB0eXBlTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IEludDMyQXJyYXksICBcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBJbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG5cbi8vIFR5cGUtdG8tc2hpZnQgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBwYXNzaW5nIGFycmF5IHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTcgXG5jb25zdCBzaGlmdE1hcCA9IHsnaW50Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiAyLCBcbiAgICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogMiwgXG4gICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IDIsICBcbiAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogMixcbiAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogMlxuICAgICAgICAgICAgICAgICB9OyAgICAgICAgIFxuXG4vLyBHZXQgaW5wdXQgZm9yIEMrKy1mdW5jdGlvbi5cbi8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3BlY2lmaWNhdGlvbiBvZiBhcmd1bWVudHMgKGFyZ3NTcGVjaWZpY2F0aW9uKSAmIGlucHV0IGRhdGEgKGlucHV0VmFscylcbi8vIGFuZCByZXR1cm5zIGlucHV0IHRoYXQgd2lsbCBiZSBmdXJ0aGVyIHVzZWQgaW4gY3BwL3dhc20tZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3BwSW5wdXQoYXJnc1NwZWNpZmljYXRpb24sIGlucHV0VmFscykge1xuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcbiAgICBsZXQgcmVmO1xuXG4gICAgLy8gY29tcGxldGUgYW4gaW5wdXQgZm9yIGNwcFxuICAgIGxldCBpID0gMDtcbiAgICBmb3IoY29uc3Qga2V5IGluIGFyZ3NTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NTcGVjaWZpY2F0aW9uW2tleV07IFxuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG4gICAgICAgIFxuICAgICAgICAvLyBza2lwIGF1eGlsaXJ5IGVsZW1lbnRcbiAgICAgICAgaWYoa2V5ID09PSBDQUxMX1JFU1VMVCkgICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBoZXJlLCB3ZSBjb25zaWRlciBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgc3dpdGNoKHR5cGUpIHsgICAgICAgICAgIFxuIFxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IGlucHV0VmFsc1tpXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBPSyBpZiB0eXBlIG9mIGNvbHVtbiBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2FycmF5ID0gaW5wdXRWYWxzW2ldLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgICAgIGxldCBjb2wgPSBpbnB1dFZhbHNbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLyppZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSBJTlRfQ09MVU1OX1RZUEUpKSBcbiAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7Ki9cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHR5cGVzXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheSc6IGFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXkubGVuZ3RofTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IDA7ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YVthcmdbTlVNX09GX1JPV1NdW1ZBTFVFXV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWx9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zIG9yIGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IFtdOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW5zIGFuZCB0YXJnZXQgdHlwZSBjb2luc2lkZVxuICAgICAgICAgICAgICAgIC8vZm9yKGxldCBjb2wgb2YgaW5wdXRWYWxzW2ldLnRvTGlzdCgpKVxuICAgICAgICAgICAgICAgIC8vICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8vIGhlcmUsIHdlIGNoZWNrIHR5cGVzIGFuZCBwZXJmb3JtIGFuIGFwcHJvcHJpYXRlIHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIGZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgIGlmKCAoIChjb2wudHlwZSA9PT0gSU5UX1RZUEUpICYmICh0eXBlID09PSBJTlRfQ09MVU1OX1RZUEUpICkgXG4gICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvKmZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gRkxPQVRfQ09MVU1OX1RZUEUpKSlcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTsqL1xuXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheXMnOiBhcnJheXMsXG4gICAgICAgICAgICAgICAgICAgICdudW1PZlJvd3MnOiBhcnJheXNbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZDb2x1bW5zJzogYXJyYXlzLmxlbmd0aH07XG5cbiAgICAgICAgICAgICAgICBpKys7ICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnMgb3IgbmV3IGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdmFsMiA9IDA7XG5cbiAgICAgICAgICAgICAgICByZWYgPSBhcmdbTlVNX09GX1JPV1NdW1JFRl07XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMSA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9DT0xVTU5TXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnUmVmOicpO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVmKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMiA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9DT0xVTU5TXVtWQUxVRV1dOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWwxLFxuICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IHZhbDJ9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBkZWZhdWx0OiBcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRPRE86IHNwZWNpZnkgYmVoYXZpb3VyICAgICAgICAgICBcbiAgICAgICAgICAgIH0gLy8gc3dpdGNoICAgICAgICBcblxuICAgICAgICBjcHBGdW5jSW5wdXQucHVzaChhcmcpO1xuICAgIH0gLy8gZm9yIGtleVxuXG4gICAgLy9jb25zb2xlLmxvZygnY3BwRnVuY0lucHV0OicpO1xuICAgIC8vY29uc29sZS5sb2coY3BwRnVuY0lucHV0KTtcblxuICAgIHJldHVybiBjcHBGdW5jSW5wdXQ7XG59IC8vIGdldENwcElucHV0XG5cbi8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmb3IgYXJyYXkgZGF0YVxuZnVuY3Rpb24gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykgeyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6IFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiAvLyBhbGxvY2F0aW9uIG1lbW9yeSBmb3IgY29sdW1ucyB0aGF0IGFyZSBjcmVhdGVkXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEuYnVmID0gbW9kdWxlLl9tYWxsb2MoYXJnLmRhdGEubnVtT2ZSb3dzICogYXJnLmRhdGEubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gIFxuICAgIH1cbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCdpbnB1dHMgYWZ0ZXIgbWVtb3J5IGFsbG9jYXRpb246Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhpbnB1dHMpO1xufSAvLyBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlclxuXG4vLyBHZXQgYXJyYXkgb2YgdmFsdWVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtUGFyYW1zKGlucHV0cykge1xuICAgIGxldCBwYXJhbXMgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5idWYpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLm51bU9mQ29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xufSAvLyBnZXRBcnJPZldhc21QYXJhbXNcblxuLy8gR2V0IGFycmF5IG9mIHR5cGVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtVHlwZXMoaW5wdXRzKSB7XG4gICAgbGV0IHR5cGVzID0gW107XG5cbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59IC8vIGdldEFyck9mV2FzbVR5cGVzXG5cbi8vIFB1dCBhcnJheSBkYXRhIHRvIGJ1ZmZlclxuZnVuY3Rpb24gcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgbGV0IHNoaWZ0O1xuICAgIGxldCBoZWFwOyAgICBcbiAgICBcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdE1hcFt0eXBlXTtcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dOyAgXG4gICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJnLmRhdGEuYXJyYXksIGFyZy5kYXRhLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZDb2x1bW5zID0gYXJnLmRhdGEubnVtT2ZDb2x1bW5zO1xuICAgICAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IGFyZy5kYXRhLmFycmF5cztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHVtbnM7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJyYXlzW2ldLCAoYnVmICsgaSAqIG51bU9mUm93cyAqIG51bU9mQnl0ZXMpID4+IHNoaWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBwdXREYXRhVG9CdWZmZXJcblxuLy8gR2V0IGFycmF5IGRhdGEgZnJvbSBidWZmZXIuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuXG4gICAgbGV0IGhlYXA7XG4gICAgbGV0IG51bU9mUm93cztcbiAgICBsZXQgbnVtT2ZDb2xzO1xuICAgIGxldCBudW1PZkJ5dGVzOyAgICBcbiAgICBsZXQgYnVmO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOiAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICBhcnJheVtqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGpdO1xuXG4gICAgICAgICAgICAgICAgYXJnLmFycmF5ID0gYXJyYXk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQ29scyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgXG4gICAgICAgICAgICAgICAgYnVmID0gYXJnLmRhdGEuYnVmO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChhcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheXMgPSBhcnJheXM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9ICAgICAgICAgICAgXG59IC8vIGdldERhdGFGcm9tQnVmZmVyXG5cbi8vIENsZWFyIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpIHsgLy8gcHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGVhY2ggbm9uLW51bWJlciBjYXNlXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbW9kdWxlLl9mcmVlKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfSAgICBcbn0gLy8gY2xlYXJNZW1vcnlGb3JCdWZmZXJcblxuLy8gRXh0cmFjdCBuZXdseSBjcmVhdGVkIGRhdGE6IG5ldyBjb2x1bW4ocykgYXJlIGNyZWF0ZWRcbmZ1bmN0aW9uIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uQXJncywgYXJnc0FmdGVyV2FzbUNhbGwpIHtcbiAgICAvLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuICAgIGNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7J25ld0Zsb2F0Q29sdW1ucyc6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXl9O1xuXG4gICAgbGV0IGkgPSAwO1xuXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIFxuICAgIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKXsgLy8gUHJvY2VzcyBlYWNoIHR5cGVcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBuYW1lO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoMCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICAgICAgICBuYW1lcyA9IGFyZy5uYW1lO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbiA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGxldCBuYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZXMgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGsgPSAxOyBrIDw9IGxlbmd0aDsgaysrKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCgoaykudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBuYW1lcyA9IGFyZy5uYW1lcztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBsZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWVzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzW2pdKSk7XG5cbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgIH1cbn0gLy8gZXh0cmFjdE5ld2x5Q3JlYXRlZERhdGFcblxuLy8gR2V0IG91dHB1dCBkYXRhOiBvdmVyYWxsIG91dHB1dCBpcyBjcmVhdGVkXG5mdW5jdGlvbiBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pIHsgIFxuICAgIGxldCBvdXRwdXQgPSBmdW5jU3BlY2lmaWNhdGlvbi5vdXRwdXQ7XG4gICAgXG4gICAgY29uc3QgdHlwZVRvRGF0YUZpZWxkTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6ICdjb2x1bW4nfTtcblxuICAgIHN3aXRjaChvdXRwdXQudHlwZSkge1xuXG4gICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDT0xVTU46XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVEFCTEVfT0ZfQ09MVU1OUzpcbiAgICAgICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBPQkpFQ1RTOlxuICAgICAgICAgICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHVzaCBkYXRhIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHNcbiAgICAgICAgICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXQuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tuYW1lXTtcbiAgICAgICAgICAgICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnW3R5cGVUb0RhdGFGaWVsZE1hcFthcmcudHlwZV1dKTtcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxufSAvLyBnZXRPdXRwdXRcblxuLy8gQ2xlYXIgbmV3bHkgY3JlYXRlZCBkYXRhIGZpZWxkcyAobmV3IGNvbHVtbihzKSlcbmZ1bmN0aW9uIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHsgXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSBudWxsOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59IC8vIGNsZWFyTmV3bHlDcmVhdGVkRGF0YVxuXG4vLyBUSEUgTUFJTiBGVU5DVElPTjogYSB3cmFwcGVyIGZvciBDKystZnVuY3Rpb24gY2FsbFxuZXhwb3J0IGZ1bmN0aW9uIGNwcFdyYXBwZXIobW9kdWxlLCBhcmdzLCBjcHBGdW5jTmFtZSwgcmV0dXJuVHlwZSkge1xuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXJyYXlzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gcHV0IGRhdGEgKGp1c3QgY29sdW1uKHMpKSB0byBhbGxvY2F0ZWQgYnVmZmVyc1xuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCBhcmUgcGFzc2VkIHRvIEMrKy1mdW5jdGlvblxuICAgIGxldCBwYXJhbXMgPSBnZXRBcnJPZldhc21QYXJhbXMoYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdwYXJhbXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhwYXJhbXMpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMnIHR5cGVzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgdHlwZXMgPSBnZXRBcnJPZldhc21UeXBlcyhhcmdzKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCd0eXBlczonKTtcbiAgICAvL2NvbnNvbGUubG9nKHR5cGVzKTtcblxuICAgIC8vIGNhbGwgd2FzbS1mdW5jdGlvblxuICAgIGxldCByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY3BwRnVuY05hbWUsIHJldHVyblR5cGUsIHR5cGVzLCBwYXJhbXMpO1xuICAgIFxuICAgIC8vY29uc29sZS5sb2cocmVzdWx0KTtcblxuICAgIC8vIGdldCBkYXRhIGZyb20gYnVmZmVycyAoanVzdCBjb2x1bW4ocykpXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBhcmdzKTsgICAgICAgIFxuXG4gICAgLy8gY2xlYXIgbWVtb3J5IHRoYXQgd2FzIHByZXZpb3VzZWx5IGFsbG9jYXRlZFxuICAgIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdkb25lJyk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXQgdGhlIHJlcXVpcmVkIG91dHB1dC5cbi8vIEl0IHRha2VzIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBkYXRhIGNvbXB1dGVkXG4vLyBhbmQgZXh0cmFjdHMgdGhlIHJlcXVpcmVkIHJlc3VsdHMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdWx0KGZ1bmNTcGVjaWZpY2F0aW9uLCBkYXRhRnJvbVdlYldvcmtlcikge1xuICAgIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cy5fY2FsbFJlc3VsdCA9IGRhdGFGcm9tV2ViV29ya2VyLmNhbGxSZXN1bHQ7ICBcblxuICAgIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cywgZGF0YUZyb21XZWJXb3JrZXIuYXJncyk7ICAgIFxuXG4gICAgbGV0IG91dFB1dCA9IGdldE91dHB1dChmdW5jU3BlY2lmaWNhdGlvbik7XG5cbiAgICAvLyBCZWxvdywgd2UgcmVtb3ZlIG5ld2x5IGNyZWF0ZWQgY29sdW1uKHMpLCB3aGljaCBhcmUgY3JlYXRlZCBhdCB0aGUgZXh0cmFjdGlvbi1zdGVwLlxuICAgIC8vIEl0IGlzIGVzcGVjaWFsbHkgcmVxdWlyZWQsIHdoZW4gbXVsdGlwbGUgY2FsbCBvZiB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXIuXG4gICAgY2xlYXJOZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gb3V0UHV0O1xufSIsIi8vIElucHV0cyBjb3JyZWN0bmVzcyBjaGVjayB0b29sc1xuLy9MaW1pdGF0aW9uIGNvbnN0YW50c1xuY29uc3QgQ09NUF9NSU4gPSAxO1xuY29uc3QgU0FNUExFU19DT1VOVF9NSU4gPSAxO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IFBFUkNFTlRBR0VfTUlOID0gMDtcbmNvbnN0IFBFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgTUFYX0VMRU1FTlRTX0NPVU5UID0gMTAwMDAwMDAwO1xuLy8gRXJyb3IgbWVzc2FnZXNcbmNvbnN0IENPTVBfUE9TSVRWRV9NRVMgPSAnY29tcG9uZW50cyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBDT01QX0VYQ0VTUyA9ICdjb21wb25lbnRzIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBmZWF1dHVyZXMgY291bnQuJztcbmNvbnN0IElOQ09SRVJSRUNUX01JTl9NQVhfTUVTID0gJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXguJztcbmNvbnN0IElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyA9ICdmZWF0dXJlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyA9ICdzYW1wbGVzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTID0gJ3Zpb2xhdG9ycyBwZXJjZW50YWdlIG11c3QgYmUgZnJvbSB0aGUgcmFuZ2UgZnJvbSAwIHRvIDEwMC4nO1xuY29uc3QgREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTID0gJ2RhdGFmcmFtZSBpcyB0b28gYmlnLic7XG4vLyBDaGVjayBjb21wb25lbnRzIGNvdW50IChQQ0EsIFBMUylcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKSB7XG4gICAgaWYgKGNvbXBvbmVudHMgPCBDT01QX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfUE9TSVRWRV9NRVMpO1xuICAgIGlmIChjb21wb25lbnRzID4gZmVhdHVyZXMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09NUF9FWENFU1MpO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG59XG4vLyBDaGVjayBpbnB1dHMgb2YgZGF0YSBmb3IgU1ZNIHRlc3RpbmcgZ2VuZXJhdG9yXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIGlmIChtaW4gPj0gbWF4KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMpO1xuICAgIGlmIChmZWF0dXJlc0NvdW50IDwgRkVBVFVSRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfRkVBVFVSRVNfTUVTKTtcbiAgICBpZiAoc2FtcGxlc0NvdW50IDwgU0FNUExFU19DT1VOVF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyk7XG4gICAgaWYgKCh2aW9sYXRvcnNQZXJjZW50YWdlIDwgUEVSQ0VOVEFHRV9NSU4pIHx8ICh2aW9sYXRvcnNQZXJjZW50YWdlID4gUEVSQ0VOVEFHRV9NQVgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfUEVSQ0VOVEFHRV9NRVMpO1xufVxuIiwiLy8gRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciwgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNoZWNrQ29tcG9uZW5ldHMgfSBmcm9tICcuL3V0aWxzJztcbi8vIFByaW5jaXBhbCBjb21wb25lbnRzIGFuYWx5c2lzIChQQ0EpXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgY2VudGVyTnVtID0gY2VudGVyID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IHNjYWxlTnVtID0gc2NhbGUgPyAxIDogMDtcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyTnVtLCBzY2FsZU51bSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuLy8gUGFydGlhbCBsZWFzdCBzcXVhcmUgcmVncmVzc2lvbiAoUExTKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cyk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuIiwiLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuLy8gSmF2YVNjcmlwdCBBUEkgZm9yIGNhbGwgd2FzbS1mdW5jdGlvbnMgZnJvbSB0aGUgbW9kdWxlIEVEQVxuXG4vLyBJbXBvcnRzIGZvciBjYWxsIHdhc20gcnVudGltZS1zeXN0ZW06IGluIHRoZSBtYWluIHN0cmVhbSBhbmQgaW4gd2Vid29ya2Vyc1xuaW1wb3J0IHtjYWxsV2FzbX0gZnJvbSAnLi4vd2FzbS9jYWxsV2FzbSc7XG5pbXBvcnQge2dldENwcElucHV0LCBnZXRSZXN1bHR9IGZyb20gJy4uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2luaXRFREFBUEkoKSB7XG4gIGF3YWl0IGluaXRFREEoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyh0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcycsIFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc1dvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10uYXJndW1lbnRzLFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9lcnJvcihkZiwgY29sMSwgY29sMikge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZXJyb3InLCBbY29sMSwgY29sMl0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2Vycm9ySW5XZWJXb3JrZXIoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9lcnJvcldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ2Vycm9yJ10uYXJndW1lbnRzLFtjb2wxLCBjb2wyXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2Vycm9yJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbicsIFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXS5hcmd1bWVudHMsW2ZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnRdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbiddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldChrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZ2VuZXJhdGVEYXRhc2V0JywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9nZW5lcmF0ZURhdGFzZXRXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydnZW5lcmF0ZURhdGFzZXQnXS5hcmd1bWVudHMsW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2dlbmVyYXRlRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXQoZGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnbm9ybWFsaXplRGF0YXNldCcsIFtkYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfbm9ybWFsaXplRGF0YXNldEluV2ViV29ya2VyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9ub3JtYWxpemVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLmFyZ3VtZW50cyxbZGF0YV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydub3JtYWxpemVEYXRhc2V0J10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5MU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluTFNTVk0nLCBbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfdHJhaW5MU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkxTU1ZNJ10uYXJndW1lbnRzLFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsndHJhaW5MU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNKGtlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJlZGljdEJ5TFNTVk0nLCBba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmVkaWN0QnlMU1NWTVdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJlZGljdEJ5TFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIoZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvdHJhaW5BbmRBbmFseXplTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbiIsIi8vIEN1c3RvbSBVSSBmb3IgRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy8gUmVuYW1lIFBDQSBjb2x1bW5zXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lUENBY29sdW1ucyhwY2FUYWJsZSkge1xuICAgIGZvciAoY29uc3QgY29sIG9mIHBjYVRhYmxlLmNvbHVtbnMudG9MaXN0KCkpXG4gICAgICAgIGNvbC5uYW1lID0gJ1BDQScgKyBjb2wubmFtZTtcbiAgICByZXR1cm4gcGNhVGFibGU7XG59XG4vLyBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuZXhwb3J0IGZ1bmN0aW9uIHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcmVmZXJlbmNlLCBwcmVkaWN0aW9uKSB7XG4gICAgcHJlZGljdGlvbi5uYW1lID0gcmVmZXJlbmNlLm5hbWUgKyAnKHByZWRpY3RlZCknO1xuICAgIGxldCBkZlJlZmVyZW5jZVByZWRpY3Rpb24gPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3NhbXBsZXNOYW1lcywgcmVmZXJlbmNlLCBwcmVkaWN0aW9uXSk7XG4gICAgZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUgPSAnUmVmZXJlbmNlIHZzLiBQcmVkaWN0ZWQnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZSZWZlcmVuY2VQcmVkaWN0aW9uLCB7IHRpdGxlOiBkZlJlZmVyZW5jZVByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgeDogcmVmZXJlbmNlLm5hbWUsXG4gICAgICAgIHk6IHByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgc2hvd1JlZ3Jlc3Npb25MaW5lOiB0cnVlLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiBzYW1wbGVzTmFtZXMubmFtZVxuICAgIH0pO1xufVxuLy8gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG5leHBvcnQgZnVuY3Rpb24gcmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCByZWdyZXNzaW9uQ29lZmZzKSB7XG4gICAgcmVncmVzc2lvbkNvZWZmcy5uYW1lID0gJ3JlZ3Jlc3Npb24gY29lZmZpY2llbnQnO1xuICAgIGxldCBuYW1lc09mUHJlZGljdG9ycyA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGZlYXR1cmVzKVxuICAgICAgICBuYW1lc09mUHJlZGljdG9ycy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsZXQgcHJlZGljdG9yTmFtZXNDb2x1bW4gPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2ZlYXR1cmUnLCBuYW1lc09mUHJlZGljdG9ycyk7XG4gICAgbGV0IGRmUmVnckNvZWZzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtwcmVkaWN0b3JOYW1lc0NvbHVtbiwgcmVncmVzc2lvbkNvZWZmc10pO1xuICAgIGRmUmVnckNvZWZzLm5hbWUgPSAnUmVncmVzc2lvbiBDb2VmZmljaWVudHMnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuYmFyQ2hhcnQoZGZSZWdyQ29lZnMsIHsgdGl0bGU6IGRmUmVnckNvZWZzLm5hbWUsIHNwbGl0OiAnZmVhdHVyZScsXG4gICAgICAgIHZhbHVlOiAncmVncmVzc2lvbiBjb2VmZmljaWVudCcsIHZhbHVlQWdnclR5cGU6ICdhdmcnIH0pO1xufVxuLy8gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuZXhwb3J0IGZ1bmN0aW9uIHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgeFNjb3JlcywgeVNjb3Jlcykge1xuICAgIGxldCBzY29yZXNDb2x1bW5zID0gW3NhbXBsZXNOYW1lc107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4U2NvcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhTY29yZXNbaV0ubmFtZSA9IGB4LnNjb3JlLnQke2kgKyAxfWA7XG4gICAgICAgIHNjb3Jlc0NvbHVtbnMucHVzaCh4U2NvcmVzW2ldKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2NvcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHlTY29yZXNbaV0ubmFtZSA9IGB5LnNjb3JlLnUke2kgKyAxfWA7XG4gICAgICAgIHNjb3Jlc0NvbHVtbnMucHVzaCh5U2NvcmVzW2ldKTtcbiAgICB9XG4gICAgbGV0IHNjb3JlcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhzY29yZXNDb2x1bW5zKTtcbiAgICBzY29yZXMubmFtZSA9ICdTY29yZXMnO1xuICAgIC8vZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoc2NvcmVzKTtcbiAgICBjb25zdCBpbmRleCA9IHhTY29yZXMubGVuZ3RoID4gMSA/IDEgOiAwO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3Qoc2NvcmVzLCB7IHRpdGxlOiBzY29yZXMubmFtZSxcbiAgICAgICAgeDogeFNjb3Jlc1swXS5uYW1lLFxuICAgICAgICB5OiB4U2NvcmVzW2luZGV4XS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiBzYW1wbGVzTmFtZXMubmFtZVxuICAgIH0pO1xufVxuLy8gTG9hZGluZyBTY2F0dGVyIFBsb3RcbmV4cG9ydCBmdW5jdGlvbiBsb2FkaW5nU2NhdHRlclBsb3QoZmVhdHVyZXMsIHhMb2FkaW5ncykge1xuICAgIGxldCBsb2FkaW5nQ29scyA9IFtdO1xuICAgIGxldCBsb2FkaW5nTGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgY29sIG9mIGZlYXR1cmVzKVxuICAgICAgICBsb2FkaW5nTGFiZWxzLnB1c2goY29sLm5hbWUpO1xuICAgIGxvYWRpbmdDb2xzLnB1c2goREcuQ29sdW1uLmZyb21TdHJpbmdzKCdsYWJlbHMnLCBsb2FkaW5nTGFiZWxzKSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4TG9hZGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeExvYWRpbmdzW2ldLm5hbWUgPSBgeC5sb2FkaW5nLnAke2kgKyAxfWA7XG4gICAgICAgIGxvYWRpbmdDb2xzLnB1c2goeExvYWRpbmdzW2ldKTtcbiAgICB9XG4gICAgbGV0IGRmTG9hZGluZ3MgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMobG9hZGluZ0NvbHMpO1xuICAgIGRmTG9hZGluZ3MubmFtZSA9ICdMb2FkaW5ncyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5zY2F0dGVyUGxvdChkZkxvYWRpbmdzLCB7IHRpdGxlOiBkZkxvYWRpbmdzLm5hbWUsXG4gICAgICAgIHg6IHhMb2FkaW5nc1swXS5uYW1lLFxuICAgICAgICB5OiB4TG9hZGluZ3NbeExvYWRpbmdzLmxlbmd0aCAtIDFdLm5hbWUsXG4gICAgICAgIG1hcmtlclR5cGU6ICdjaXJjbGUnLFxuICAgICAgICBsYWJlbHM6ICdsYWJlbHMnXG4gICAgfSk7XG59XG4vLyBBZGQgUExTIHZpc3VhbGl6YXRpb25cbmV4cG9ydCBmdW5jdGlvbiBhZGRQTFN2aXN1YWxpemF0aW9uKHRhYmxlLCBzYW1wbGVzTmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBwbHNPdXRwdXQpIHtcbiAgICBsZXQgdmlldyA9IGdyb2suc2hlbGwuZ2V0VGFibGVWaWV3KHRhYmxlLm5hbWUpO1xuICAgIC8vIDEuIFByZWRpY3RlZCB2cyBSZWZlcmVuY2Ugc2NhdHRlciBwbG90XG4gICAgdmlldy5hZGRWaWV3ZXIocHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCBwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTtcbiAgICAvLyAyLiBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbiAgICB2aWV3LmFkZFZpZXdlcihyZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQoZmVhdHVyZXMsIHBsc091dHB1dFsxXSkpO1xuICAgIC8vIDMuIExvYWRpbmcgU2NhdHRlciBQbG90XG4gICAgdmlldy5hZGRWaWV3ZXIobG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCBwbHNPdXRwdXRbNF0pKTtcbiAgICAvLyA0LiBTY29yZXMgU2NhdHRlciBQbG90XG4gICAgdmlldy5hZGRWaWV3ZXIoc2NvcmVzU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCBwbHNPdXRwdXRbMl0sIHBsc091dHB1dFszXSkpO1xufVxuIiwiLy8gVGVzdCBkYXRhIGdlbmVyYXRpb24gdG9vbHNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5jb25zdCBTVk1fR0VOX0ZFQVRVUkVTX0lOREVYID0gMDtcbmNvbnN0IFNWTV9HRU5fTEFCRUxTX0lOREVYID0gMTtcbmNvbnN0IFNWTV9GRUFUVVJFX05BTUUgPSAnRmVhdHVyZSAjJztcbmNvbnN0IFNWTV9MQUJFTF9OQU1FID0gJ0xhYmVsJztcbi8vIFJldHVybnMgdGhlIGRhdGFmcmFtZSBcImNhcnNcIlxuZXhwb3J0IGZ1bmN0aW9uIGNhcnNEYXRhZnJhbWUoKSB7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbW9kZWwnLCBbJ2FsZmFyb21lbycsICdhdWRpJywgJ2JtdycsICdjaGV2cm9sZXQnLCAnZG9kZ2UxJywgJ2RvZGdlMicsICdob25kYTEnLCAnaG9uZGEyJywgJ2lzdXp1JywgJ2phZ3VhcicsICdtYXpkYScsICdtZXJjZWRlcycsICdtZXJjdXJ5JywgJ21pdHN1YmlzaGknLCAnbmlzc2FuMScsICduaXNzYW4yJywgJ3BldWdvdCcsICdwbHltb3V0aCcsICdwb3JzY2hlJywgJ3NhYWInLCAnc3ViYXJ1JywgJ3RveW90YTEnLCAndG95b3RhMicsICd0b3lvdGEzJywgJ3RveW90YTQnLCAndm9sa3N3YWdlbjEnLCAndm9sa3N3YWdlbjInLCAndm9sdm8xJywgJ3ZvbHZvMicsICd2b2x2bzMnXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnZGllc2VsJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHVyYm8nLCBuZXcgSW50MzJBcnJheShbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCd0d28uZG9vcnMnLCBuZXcgSW50MzJBcnJheShbMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoYXRjaGJhY2snLCBuZXcgSW50MzJBcnJheShbMSwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ3doZWVsLmJhc2UnLCBuZXcgRmxvYXQzMkFycmF5KFs5NC41LCAxMDUuODAwMDAzMDUxNzU3ODEsIDEwMS4xOTk5OTY5NDgyNDIxOSwgOTQuNSwgOTMuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTYuNSwgOTQuMzAwMDAzMDUxNzU3ODEsIDExMywgOTMuMDk5OTk4NDc0MTIxMSwgMTE1LjU5OTk5ODQ3NDEyMTEsIDEwMi42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk0LjUsIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCAxMTQuMTk5OTk2OTQ4MjQyMTksIDg5LjUsIDk5LjA5OTk5ODQ3NDEyMTEsIDk3LjE5OTk5Njk0ODI0MjE5LCA5NS42OTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk4LjQwMDAwMTUyNTg3ODksIDEwMi40MDAwMDE1MjU4Nzg5LCA5Ny4zMDAwMDMwNTE3NTc4MSwgMTAwLjQwMDAwMTUyNTg3ODksIDEwNC4zMDAwMDMwNTE3NTc4MSwgMTA5LjA5OTk5ODQ3NDEyMTEsIDEwOS4wOTk5OTg0NzQxMjExXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnbGVuZ3RoJywgbmV3IEZsb2F0MzJBcnJheShbMTcxLjE5OTk5Njk0ODI0MjIsIDE5Mi42OTk5OTY5NDgyNDIyLCAxNzYuODAwMDAzMDUxNzU3OCwgMTU4LjgwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTUwLCAxNzUuMzk5OTkzODk2NDg0MzgsIDE3MC42OTk5OTY5NDgyNDIyLCAxOTkuNjAwMDA2MTAzNTE1NjIsIDE2Ni44MDAwMDMwNTE3NTc4LCAyMDIuNjAwMDA2MTAzNTE1NjIsIDE3OC4zOTk5OTM4OTY0ODQzOCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE3MC4xOTk5OTY5NDgyNDIyLCAxNjUuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE5OC44OTk5OTM4OTY0ODQzOCwgMTY4Ljg5OTk5Mzg5NjQ4NDM4LCAxODYuNjAwMDA2MTAzNTE1NjIsIDE3MiwgMTU4LjY5OTk5Njk0ODI0MjIsIDE2Ni4zMDAwMDMwNTE3NTc4LCAxNzYuMTk5OTk2OTQ4MjQyMiwgMTc1LjYwMDAwNjEwMzUxNTYyLCAxNzEuNjk5OTk2OTQ4MjQyMiwgMTgwLjE5OTk5Njk0ODI0MjIsIDE4OC44MDAwMDMwNTE3NTc4LCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzhdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aWR0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzY1LjUsIDcxLjQwMDAwMTUyNTg3ODksIDY0LjgwMDAwMzA1MTc1NzgxLCA2My41OTk5OTg0NzQxMjEwOTQsIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjQsIDY1LjE5OTk5Njk0ODI0MjE5LCA2MS43OTk5OTkyMzcwNjA1NSwgNjkuNTk5OTk4NDc0MTIxMSwgNjQuMTk5OTk2OTQ4MjQyMTksIDcxLjY5OTk5Njk0ODI0MjE5LCA2OCwgNjQuNDAwMDAxNTI1ODc4OSwgNjMuNzk5OTk5MjM3MDYwNTUsIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjguNDAwMDAxNTI1ODc4OSwgNjUsIDY2LjUsIDY1LjQwMDAwMTUyNTg3ODksIDYzLjU5OTk5ODQ3NDEyMTA5NCwgNjQuNDAwMDAxNTI1ODc4OSwgNjUuNTk5OTk4NDc0MTIxMSwgNjYuNSwgNjUuNSwgNjYuOTAwMDAxNTI1ODc4OSwgNjcuMTk5OTk2OTQ4MjQyMTksIDY4LjgwMDAwMzA1MTc1NzgxLCA2OC45MDAwMDE1MjU4Nzg5XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnaGVpZ2h0JywgbmV3IEZsb2F0MzJBcnJheShbNTIuNDAwMDAxNTI1ODc4OTA2LCA1NS43MDAwMDA3NjI5Mzk0NSwgNTQuMjk5OTk5MjM3MDYwNTUsIDUyLCA1MC43OTk5OTkyMzcwNjA1NSwgNTAuNTk5OTk4NDc0MTIxMDk0LCA1Mi41OTk5OTg0NzQxMjEwOTQsIDU0LjA5OTk5ODQ3NDEyMTA5NCwgNTMuNSwgNTIuNzk5OTk5MjM3MDYwNTUsIDU0LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjk5OTk5MjM3MDYwNTUsIDU0Ljc5OTk5OTIzNzA2MDU1LCA1MC43OTk5OTkyMzcwNjA1NSwgNTMuNSwgNTQuNSwgNTAuNTk5OTk4NDc0MTIxMDk0LCA1OC43MDAwMDA3NjI5Mzk0NSwgNTEuNTk5OTk4NDc0MTIxMDk0LCA1Ni4wOTk5OTg0NzQxMjEwOTQsIDUyLjUsIDU0LjUsIDUzLCA1MiwgNTQuOTAwMDAxNTI1ODc4OTA2LCA1NS43MDAwMDA3NjI5Mzk0NSwgNTUuMDk5OTk4NDc0MTIxMDk0LCA1Ni4yMDAwMDA3NjI5Mzk0NSwgNTUuNSwgNTUuNV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdjdXJiLndlaWdodCcsIG5ldyBJbnQzMkFycmF5KFsyODIzLCAyODQ0LCAyMzk1LCAxOTA5LCAyMTI4LCAxOTY3LCAxOTU2LCAyMzA0LCAyMzM3LCA0MDY2LCAxOTUwLCAzNzcwLCAyOTEwLCAxOTE4LCAyMDI0LCAxOTUxLCAxOTY3LCAzNDMwLCAyODAwLCAyNjk1LCAyMTkwLCAxOTg1LCAyMjc1LCAyNTUxLCAyNDgwLCAyMjYxLCAyNjYxLCAyOTEyLCAzMDQ5LCAzMjE3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2VuZy5zaXplJywgbmV3IEludDMyQXJyYXkoWzE1MiwgMTM2LCAxMDgsIDkwLCA5OCwgOTAsIDkyLCAxMTAsIDExMSwgMjU4LCA5MSwgMTgzLCAxNDAsIDkyLCA5NywgOTcsIDkwLCAxNTIsIDE5NCwgMTIxLCAxMDgsIDkyLCAxMTAsIDE0NiwgMTEwLCA5NywgMTM2LCAxNDEsIDE0MSwgMTQ1XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2hvcnNlcG93ZXInLCBuZXcgSW50MzJBcnJheShbMTU0LCAxMTAsIDEwMSwgNzAsIDEwMiwgNjgsIDc2LCA4NiwgNzgsIDE3NiwgNjgsIDEyMywgMTc1LCA2OCwgNjksIDY5LCA2OCwgOTUsIDIwNywgMTEwLCA4MiwgNjIsIDU2LCAxMTYsIDczLCA1MiwgMTEwLCAxMTQsIDE2MCwgMTA2XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3BlYWsucnBtJywgbmV3IEludDMyQXJyYXkoWzUwMDAsIDU1MDAsIDU4MDAsIDU0MDAsIDU1MDAsIDU1MDAsIDYwMDAsIDU4MDAsIDQ4MDAsIDQ3NTAsIDUwMDAsIDQzNTAsIDUwMDAsIDU1MDAsIDUyMDAsIDUyMDAsIDU1MDAsIDQxNTAsIDU5MDAsIDUyNTAsIDQ0MDAsIDQ4MDAsIDQ1MDAsIDQ4MDAsIDQ1MDAsIDQ4MDAsIDU1MDAsIDU0MDAsIDUzMDAsIDQ4MDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnc3ltYm9sJywgbmV3IEludDMyQXJyYXkoWzEsIDEsIDIsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIC0xLCAxLCAyLCAxLCAxLCAxLCAwLCAzLCAyLCAwLCAxLCAwLCAyLCAtMSwgMiwgMCwgLTIsIC0xLCAtMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdjaXR5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsxOSwgMTksIDIzLCAzOCwgMjQsIDMxLCAzMCwgMjcsIDI0LCAxNSwgMzEsIDIyLCAxOSwgMzcsIDMxLCAzMSwgMzEsIDI1LCAxNywgMjEsIDI4LCAzNSwgMzQsIDI0LCAzMCwgMzcsIDE5LCAyMywgMTksIDI2XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2hpZ2h3YXkubXBnJywgbmV3IEludDMyQXJyYXkoWzI2LCAyNSwgMjksIDQzLCAzMCwgMzgsIDM0LCAzMywgMjksIDE5LCAzOCwgMjUsIDI0LCA0MSwgMzcsIDM3LCAzOCwgMjUsIDI1LCAyOCwgMzMsIDM5LCAzNiwgMzAsIDMzLCA0NiwgMjQsIDI4LCAyNSwgMjddKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgncHJpY2UnLCBuZXcgSW50MzJBcnJheShbMTY1MDAsIDE3NzEwLCAxNjQzMCwgNjU3NSwgNzk1NywgNjIyOSwgNzEyOSwgODg0NSwgNjc4NSwgMzU1NTAsIDczOTUsIDMxNjAwLCAxNjUwMywgNTM4OSwgNzM0OSwgNzI5OSwgNjIyOSwgMTM4NjAsIDM3MDI4LCAxMjE3MCwgNzc3NSwgNTM0OCwgNzg5OCwgOTk4OSwgMTA2OTgsIDc3NzUsIDEzMjk1LCAxMjk0MCwgMTkwNDUsIDIyNDcwXSkpLFxuICAgIF0pO1xufSAvLyBjYXJzRGF0YWZyYW1lXG4vLyBHZW5lcmF0ZSBkYXRhc2V0IGZvciB0ZXN0aW5nIGJpbmFyeSBjbGFzc2lmaWVyc1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24oa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBjaGVjayBpbnB1dHNcbiAgICAgICAgY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIC8vIGtlcm5lbCBwYXJhbXMgY29sdW1uXG4gICAgICAgIGNvbnN0IGtlcm5lbFBhcmFtc0NvbCA9IERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgJ2tlcm5lbFBhcmFtcycsIGtlcm5lbFBhcmFtcyk7XG4gICAgICAgIC8vIENBTEwgV0FTTS1DT01QVVRBVElPTlMgIFxuICAgICAgICBsZXQgX291dHB1dDtcbiAgICAgICAgbGV0IF9wcm9taXNlID0gX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zQ29sLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIF9lcnJvciA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgLy8gUmVuYW1lIGxhYmVscyBjb2x1bW5cbiAgICAgICAgX291dHB1dFtTVk1fR0VOX0xBQkVMU19JTkRFWF0ubmFtZSA9IFNWTV9MQUJFTF9OQU1FO1xuICAgICAgICAvLyBSZW5hbWUgZmVhdHVyZSBjb2x1bW5zXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIF9vdXRwdXRbU1ZNX0dFTl9GRUFUVVJFU19JTkRFWF0pXG4gICAgICAgICAgICBjb2wubmFtZSA9IFNWTV9GRUFUVVJFX05BTUUgKyBjb2wubmFtZTtcbiAgICAgICAgLy8gQ3JlYXRlIGRhdGFmcmFtZVxuICAgICAgICBjb25zdCBkZiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKTtcbiAgICAgICAgZGYubmFtZSA9IG5hbWU7XG4gICAgICAgIGRmLmNvbHVtbnMuYWRkKF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdKTtcbiAgICAgICAgcmV0dXJuIGRmO1xuICAgIH0pO1xufSAvLyB0ZXN0RGF0YUZvck1hY2hpbmVMZWFybmluZ1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBTdXBwb3J0IHZlY3RvciBtYWNoaW5lIChTVk0pIHRvb2xzLlxuICAgSXQncyBkZXZlbG9wZWQgZm9yIGFwcGx5aW5nIGluIGNvbWJpbmF0aW9uIHdpdGggREFUQUdST0sgcHJlZGljdGl2ZSB0b29scy5cblxuICAgVHJhaW5pbmcgJiBwcmVkaWN0aW5nIGFyZSBwcm92aWRlZCBieSB3YXNtLWNvbXB1dGF0aW9ucy5cblxuICAgTGVhc3Qgc3F1YXJlIHN1cHBvcnQgdmVjdG9yIG1hY2hpbmUgKExTLVNWTSkgaXMgaW1wbGVtZW50ZWQ6XG4gICAgIFsxXSBTdXlrZW5zLCBKLiwgVmFuZGV3YWxsZSwgSi4gXCJMZWFzdCBTcXVhcmVzIFN1cHBvcnQgVmVjdG9yIE1hY2hpbmUgQ2xhc3NpZmllcnNcIixcbiAgICAgICAgICAgTmV1cmFsIFByb2Nlc3NpbmcgTGV0dGVycyA5LCAyOTMtMzAwICgxOTk5KS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMjMvQToxMDE4NjI4NjA5NzQyXG4qL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIsIF9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuLy8gMS4gQ09OU1RBTlRTXG4vLyBrZXJuZWwgdHlwZXNcbmV4cG9ydCBjb25zdCBMSU5FQVIgPSAwO1xuZXhwb3J0IGNvbnN0IFBPTFlOT01JQUwgPSAxO1xuZXhwb3J0IGNvbnN0IFJCRiA9IDI7XG5leHBvcnQgY29uc3QgU0lHTU9JRCA9IDM7XG4vLyBvdXRwdXQtcmVsYXRlZFxuY29uc3QgQ09ORlVTSU9OX01BVFJfU0laRSA9IDQ7XG5jb25zdCBOT1JNQUxJWkVEX0RBVEFfSU5ERVggPSAwO1xuY29uc3QgTUVBTlNfSU5ERVggPSAxO1xuY29uc3QgU1REX0RFVlNfSU5ERVggPSAyO1xuY29uc3QgTU9ERUxfUEFSQU1TX0lOREVYID0gMztcbmNvbnN0IE1PREVMX1dFSUdIVFNfSU5ERVggPSA0O1xuY29uc3QgUFJFRElDVEVEX0xBQkVMU19JTkRFWCA9IDU7XG5jb25zdCBDT1JSRUNUTkVTU19JTkRFWCA9IDY7XG5jb25zdCBDT05GVVNJT05fTUFUUklYX0lOREVYID0gNztcbmNvbnN0IFRSVUVfUE9TSVRJVkVfSU5ERVggPSAwO1xuY29uc3QgRkFMU0VfTkVHQVRJVkVfSU5ERVggPSAxO1xuY29uc3QgRkFMU0VfUE9TSVRJVkVfSU5ERVggPSAyO1xuY29uc3QgVFJVRV9ORUdBVElWRV9JTkRFWCA9IDM7XG4vLyBrZXJuZWwgcGFyYW1ldGVycyBpbmRlY2VzXG5jb25zdCBSQkZfU0lHTUFfSU5ERVggPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfRF9JTkRFWCA9IDE7XG5jb25zdCBTSUdNT0lEX0tBUFBBX0lOREVYID0gMDtcbmNvbnN0IFNJR01PSURfVEhFVEFfSU5ERVggPSAxO1xuLy8gaHlwZXJwYXJhbWV0ZXJzIGxpbWl0c1xuY29uc3QgR0FNTUFfSU5GSU1VTV9MSU1JVCA9IDA7XG5jb25zdCBSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0NfSU5GSU1VTV9MSU1JVCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5GSU1VTV9MSU1JVCA9IDA7XG4vLyBlcnJvciBtZXNzYWdlc1xuY29uc3QgV1JPTkdfR0FNTUFfTUVTU0FHRSA9ICdnYW1tYSBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19SQkZfU0lHTUFfTUVTU0FHRSA9ICdzaWdtYSBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSA9ICdjIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFID0gJ2QgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfS0VSTkVMX01FU1NBR0UgPSAnaW5jb3JyZWN0IGtlcm5lbC4nO1xuLy8gbmFtZXNcbmNvbnN0IExBQkVMUyA9ICdMYWJlbHMnO1xuY29uc3QgUFJFRElDVEVEID0gJ3ByZWRpY3RlZCc7XG5jb25zdCBDT1JSRUNUTkVTUyA9ICdjb3JyZWN0bmVzcyc7XG5jb25zdCBDT05GVVNJT05fTUFUUklYX05BTUUgPSAnQ29uZnVzaW9uIG1hdHJpeCc7XG5jb25zdCBNRUFOID0gJ21lYW4nO1xuY29uc3QgU1REX0RFViA9ICdzdGQgZGV2JztcbmNvbnN0IE1PREVMX1BBUkFNU19OQU1FID0gJ2FscGhhJztcbmNvbnN0IE1PREVMX1dFSUdIVFNfTkFNRSA9ICd3ZWlnaHQnO1xuY29uc3QgR0FNTUEgPSAnZ2FtbWEnO1xuY29uc3QgS0VSTkVMID0gJ2tlcm5lbCc7XG5jb25zdCBLRVJORUxfUEFSQU1TID0gJ2tlcm5lbCBwYXJhbXMnO1xuY29uc3QgS0VSTkVMX1BBUkFNXzEgPSAna2VybmVsIHBhcmFtIDEnO1xuY29uc3QgS0VSTkVMX1BBUkFNXzIgPSAna2VybmVsIHBhcmFtIDInO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfTkFNRSA9ICdmZWF0dXJlcyBjb3VudCc7XG5jb25zdCBUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUgPSAndHJhaW4gc2FtcGxlcyBjb3VudCc7XG5jb25zdCBUUkFJTl9FUlJPUiA9ICdUcmFpbiBlcnJvciwlJztcbmNvbnN0IEtFUk5FTF9UWVBFX1RPX05BTUVfTUFQID0gWydsaW5lYXInLCAncG9seW5vbWlhbCcsICdSQkYnLCAnc2lnbW9pZCddO1xuY29uc3QgUE9TSVRJVkVfTkFNRSA9ICdwb3NpdGl2ZSAoUCknO1xuY29uc3QgTkVHQVRJVkVfTkFNRSA9ICduZWdhdGl2ZSAoTiknO1xuY29uc3QgUFJFRElDVEVEX1BPU0lUSVZFX05BTUUgPSAncHJlZGljdGVkIHBvc2l0aXZlIChQUCknO1xuY29uc3QgUFJFRElDVEVEX05FR0FUSVZFX05BTUUgPSAncHJlZGljdGVkIG5lZ2F0aXZlIChQTiknO1xuY29uc3QgU0VOU0lUSVZJVFkgPSAnU2Vuc2l0aXZpdHknO1xuY29uc3QgU1BFQ0lGSUNJVFkgPSAnU3BlY2lmaWNpdHknO1xuY29uc3QgQkFMQU5DRURfQUNDVVJBQ1kgPSAnQmFsYW5jZWQgYWNjdXJhY3knO1xuY29uc3QgUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSA9ICdQb3NpdGl2ZSBwcmVkaWNpdHZlIHZhbHVlJztcbmNvbnN0IE5FR0FUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnTmVnYXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBNTF9SRVBPUlQgPSAnTW9kZWwgcmVwb3J0JztcbmNvbnN0IE1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTID0gJ1ByZWRpY3RlZCBsYWJlbHMnO1xuY29uc3QgTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyA9ICdUcmFpbiBsYWJlbHMnO1xuY29uc3QgTUxfUkVQT1JUX0NPUlJFQ1RORVNTID0gJ1ByZWRpY3Rpb24gY29ycmVjdG5lc3MnO1xuY29uc3QgUFJFRElDVElPTiA9ICdwcmVkaWN0aW9uJztcbi8vIFBhY2svdW5wYWNrIGNvbnN0YW50c1xuY29uc3QgQllURVMgPSA0O1xuY29uc3QgSU5UU19DT1VOVCA9IDM7XG5jb25zdCBLRVJfUEFSQU1TX0NPVU5UID0gMjtcbmNvbnN0IE1PREVMX0tFUk5FTF9JTkRFWCA9IDA7XG5jb25zdCBTQU1QTEVTX0NPVU5UX0lOREVYID0gMTtcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX0lOREVYID0gMjtcbi8vIG1pc2NcbmNvbnN0IElOSVRfVkFMVUUgPSAwOyAvLyBhbnkgbnVtYmVyIGNhbiBiZSB1c2VkXG5jb25zdCBMU19TVk1fQUREX0NPTlNUID0gMTsgLy8gc2VlIFsxXSBmb3IgbW9yZSBkZXRhaWxzXG4vLyAyLiBUT09MU1xuLy8gQ2hlY2sgTFMtU1ZNIGxlYXJuaW5nIGh5cGVycGFyYW1ldGVyc1xuZnVuY3Rpb24gY2hlY2tIeXBlcnBhcmFtZXRlcnMoaHlwZXJwYXJhbWV0ZXJzKSB7XG4gICAgLy8gY2hlY2sgZ2FtbWFcbiAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLmdhbW1hIDw9IEdBTU1BX0lORklNVU1fTElNSVQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19HQU1NQV9NRVNTQUdFKTtcbiAgICAvLyBjaGVjayBrZXJuZWwgJiBpdHMgcGFyYW1ldGVyc1xuICAgIHN3aXRjaCAoaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCkge1xuICAgICAgICBjYXNlIExJTkVBUjogLy8gdGhlIGNhc2Ugb2YgbGluZWFyIGtlcm5lbFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFJCRjogLy8gdGhlIGNhc2Ugb2YgUkJGIGtlcm5lbFxuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5zaWdtYSA8PSBSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfUkJGX1NJR01BX01FU1NBR0UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFBPTFlOT01JQUw6IC8vIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICAvLyBjaGVjayBjXG4gICAgICAgICAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLmNQYXJhbSA8PSBQT0xZTk9NSUFMX0NfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UpO1xuICAgICAgICAgICAgLy8gY2hlY2sgZFxuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5kUGFyYW0gPD0gUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBTSUdNT0lEOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OiAvLyBpbmNvcnJlY3Qga2VybmVsXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfS0VSTkVMX01FU1NBR0UpO1xuICAgIH0gLy8gc3dpdGNoICAgIFxufSAvLyBjaGVja0h5cGVycGFyYW1ldGVyc1xuLy8gUmV0dXJuZXMgbGFiZWxzIHByZWRpY3RlZCBieSB0aGUgbW9kZWwgc3BlY2lmaWVkXG5mdW5jdGlvbiBwcmVkaWN0KG1vZGVsLCBkYXRhc2V0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyKG1vZGVsLmtlcm5lbFR5cGUsIG1vZGVsLmtlcm5lbFBhcmFtcywgbW9kZWwubm9ybWFsaXplZFRyYWluRGF0YS5jb2x1bW5zLCBtb2RlbC50cmFpbkxhYmVscywgbW9kZWwubWVhbnMsIG1vZGVsLnN0ZERldnMsIG1vZGVsLm1vZGVsUGFyYW1zLCBtb2RlbC5tb2RlbFdlaWdodHMsIGRhdGFzZXQpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn0gLy8gcHJlZGljdFxuLy8gRXZhbHVhdGUgYWNjdXJhY3kgb2YgdGhlIG1vZGVsXG5mdW5jdGlvbiBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKSB7XG4gICAgbGV0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIC8vIGhlcmUsIHRoZSBjbGFzc2ljIG5vdGF0aW9uIGlzIHVzZWQgKHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZW5zaXRpdml0eV9hbmRfc3BlY2lmaWNpdHkpXG4gICAgbGV0IFRQID0gZGF0YVtUUlVFX1BPU0lUSVZFX0lOREVYXTsgLy8gdHJ1ZSBwb3NpdGl2ZVxuICAgIGxldCBUTiA9IGRhdGFbVFJVRV9ORUdBVElWRV9JTkRFWF07IC8vIHRydWUgbmVnYXRpdmVcbiAgICBsZXQgRlAgPSBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXTsgLy8gZmFsc2UgcG9zaXRpdmVcbiAgICBsZXQgRk4gPSBkYXRhW0ZBTFNFX05FR0FUSVZFX0lOREVYXTsgLy8gZmFsc2UgbmVnYXRpdmVcbiAgICBsZXQgUCA9IFRQICsgRk47IC8vIHBvc2l0aXZlXG4gICAgbGV0IE4gPSBGUCArIFROOyAvLyBuZWdhdGl2ZVxuICAgIGxldCBUUFIgPSBUUCAvIFA7IC8vIHRydWUgcG9zaXRpdmUgcmF0ZVxuICAgIGxldCBUTlIgPSBUTiAvIE47IC8vIHRydWUgbmVnYXRpdmUgcmF0ZVxuICAgIGxldCBQUFYgPSBUUCAvIChUUCArIEZQKTsgLy8gcG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZVxuICAgIGxldCBOUFYgPSBUTiAvIChUTiArIEZOKTsgLy8gbmVnYXRpdmUgcHJlZGljaXR2ZSB2YWx1ZVxuICAgIGxldCBBQ0MgPSAoVFAgKyBUTikgLyAoUCArIE4pOyAvLyBhY2N1cmFjeVxuICAgIGxldCBCQSA9IChUUFIgKyBUTlIpIC8gMjsgLy8gYmFsYW5jZWQgYWNjdXJhY3lcbiAgICBtb2RlbC5zZW5zaXRpdml0eSA9IFRQUjtcbiAgICBtb2RlbC5zcGVjaWZpY2l0eSA9IFROUjtcbiAgICBtb2RlbC5iYWxhbmNlZEFjY3VyYWN5ID0gQkE7XG4gICAgbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBQUFY7XG4gICAgbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBOUFY7XG4gICAgbW9kZWwudHJhaW5FcnJvciA9ICgxIC0gQUNDKSAqIDEwMDsgLy8gdHJhaW4gZXJyb3IsICVcbn0gLy8gZXZhbHVhdGVBY2N1cmFjeVxuLy8gUmV0dXJucyB0cmFpbmVkIExTLVNWTSBtb2RlbC5cbmZ1bmN0aW9uIHRyYWluQW5kQW5hbHl6ZU1vZGVsKGh5cGVycGFyYW1ldGVycywgZGF0YXNldCwgbGFiZWxzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgY29ycmVjdG5lc3Mgb2YgaHlwZXJwYXJhbWV0ZXIgZ2FtbWFcbiAgICAgICAgY2hlY2tIeXBlcnBhcmFtZXRlcnMoaHlwZXJwYXJhbWV0ZXJzKTtcbiAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQga2VybmVsIHBhcmFtcyBhcnJheVxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNBcnJheSA9IFtJTklUX1ZBTFVFLCBJTklUX1ZBTFVFXTtcbiAgICAgICAgLy8gZmlsbCBrZXJuZWxQYXJhbXNcbiAgICAgICAgc3dpdGNoIChoeXBlcnBhcmFtZXRlcnMua2VybmVsKSB7XG4gICAgICAgICAgICBjYXNlIExJTkVBUjogLy8gbm8ga2VybmVsIHBhcmFtZXRlcnMgaW4gdGhlIGNhc2Ugb2YgbGluZWFyIGtlcm5lbFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSQkY6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBSQkYta2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUkJGX1NJR01BX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5zaWdtYTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUE9MWU5PTUlBTDogLy8gc2lnbWEgcGFyYW1ldGVyIGluIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9DX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5jUGFyYW07XG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9EX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5kUGFyYW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNJR01PSUQ6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBzaWdtb2lkIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfS0FQUEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLmthcHBhO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfVEhFVEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLnRoZXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbCBcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfS0VSTkVMX01FU1NBR0UpO1xuICAgICAgICB9XG4gICAgICAgIDtcbiAgICAgICAgLy8gY3JlYXRlIGtlcm5lbCBwYXJhbXMgY29sdW1uXG4gICAgICAgIGxldCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTVMsIGtlcm5lbFBhcmFtc0FycmF5KTtcbiAgICAgICAgLy8gY29tcHV0ZSBzaXplIG9mIG1vZGVsIHBhcmFtcyAmIHByZWNvbXB1dGVkIHdlaWd0aHNcbiAgICAgICAgbGV0IHRyYWluQ29scyA9IGRhdGFzZXQudG9MaXN0KCk7XG4gICAgICAgIGxldCBtb2RlbFBhcmFtc0NvdW50ID0gdHJhaW5Db2xzWzBdLmxlbmd0aCArIExTX1NWTV9BRERfQ09OU1Q7XG4gICAgICAgIGxldCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCA9IHRyYWluQ29scy5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBsZXQgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCA9IENPTkZVU0lPTl9NQVRSX1NJWkU7XG4gICAgICAgIC8vIGNhbGwgd2ViYXNzZW1ibHkgdHJhaW5pbmcgZnVuY3Rpb25cbiAgICAgICAgbGV0IG91dHB1dDtcbiAgICAgICAgbGV0IF9wcm9taXNlID0gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIoaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLCBoeXBlcnBhcmFtZXRlcnMua2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBvdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIHJlbmFtZSBvdXRwdXQgY29sdW1uc1xuICAgICAgICBvdXRwdXRbTUVBTlNfSU5ERVhdLm5hbWUgPSBNRUFOO1xuICAgICAgICBvdXRwdXRbU1REX0RFVlNfSU5ERVhdLm5hbWUgPSBTVERfREVWO1xuICAgICAgICBvdXRwdXRbTU9ERUxfUEFSQU1TX0lOREVYXS5uYW1lID0gTU9ERUxfUEFSQU1TX05BTUU7XG4gICAgICAgIG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXS5uYW1lID0gTU9ERUxfV0VJR0hUU19OQU1FO1xuICAgICAgICBvdXRwdXRbUFJFRElDVEVEX0xBQkVMU19JTkRFWF0ubmFtZSA9IFBSRURJQ1RFRDtcbiAgICAgICAgb3V0cHV0W0NPUlJFQ1RORVNTX0lOREVYXS5uYW1lID0gQ09SUkVDVE5FU1M7XG4gICAgICAgIG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXS5uYW1lID0gQ09ORlVTSU9OX01BVFJJWF9OQU1FO1xuICAgICAgICAvLyBjb21wbGV0ZSBtb2RlbFxuICAgICAgICBsZXQgbW9kZWwgPSB7XG4gICAgICAgICAgICB0cmFpbkdhbW1hOiBoeXBlcnBhcmFtZXRlcnMuZ2FtbWEsXG4gICAgICAgICAgICBrZXJuZWxUeXBlOiBoeXBlcnBhcmFtZXRlcnMua2VybmVsLFxuICAgICAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgICAgICB0cmFpbkxhYmVsczogbGFiZWxzLFxuICAgICAgICAgICAgbm9ybWFsaXplZFRyYWluRGF0YTogREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKG91dHB1dFtOT1JNQUxJWkVEX0RBVEFfSU5ERVhdKSxcbiAgICAgICAgICAgIG1lYW5zOiBvdXRwdXRbTUVBTlNfSU5ERVhdLFxuICAgICAgICAgICAgc3RkRGV2czogb3V0cHV0W1NURF9ERVZTX0lOREVYXSxcbiAgICAgICAgICAgIG1vZGVsUGFyYW1zOiBvdXRwdXRbTU9ERUxfUEFSQU1TX0lOREVYXSxcbiAgICAgICAgICAgIG1vZGVsV2VpZ2h0czogb3V0cHV0W01PREVMX1dFSUdIVFNfSU5ERVhdLFxuICAgICAgICAgICAgcHJlZGljdGVkTGFiZWxzOiBvdXRwdXRbUFJFRElDVEVEX0xBQkVMU19JTkRFWF0sXG4gICAgICAgICAgICBjb3JyZWN0bmVzczogb3V0cHV0W0NPUlJFQ1RORVNTX0lOREVYXSxcbiAgICAgICAgICAgIGNvbmZ1c2lvbk1hdHJpeDogb3V0cHV0W0NPTkZVU0lPTl9NQVRSSVhfSU5ERVhdLFxuICAgICAgICAgICAgdHJhaW5FcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmVhdHVyZXNDb3VudDogdHJhaW5Db2xzLmxlbmd0aCxcbiAgICAgICAgICAgIHRyYWluU2FtcGxlc0NvdW50OiB0cmFpbkNvbHNbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIGV2YWx1YXRlQWNjdXJhY3kobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSk7XG59IC8vIHRyYWluQW5kQW5hbHl6ZU1vZGVsXG4vLyBXcmFwcGVyIGZvciBjb21iaW5pbmcgdGhlIGZ1bmN0aW9uIFwidHJhaW5BbmRBbmFseXplTW9kZWxcIiB3aXRoIERhdGFncm9rIHByZWRpY2l0dmUgdG9vbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFpbmVkTW9kZWwoaHlwZXJwYXJhbWV0ZXJzLCBkZiwgcHJlZGljdF9jb2x1bW4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgY29sdW1ucyA9IGRmLmNvbHVtbnM7XG4gICAgICAgIGxldCBsYWJlbHMgPSBjb2x1bW5zLmJ5TmFtZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGNvbHVtbnMucmVtb3ZlKHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHlpZWxkIHRyYWluQW5kQW5hbHl6ZU1vZGVsKGh5cGVycGFyYW1ldGVycywgY29sdW1ucywgbGFiZWxzKTtcbiAgICB9KTtcbn1cbi8vIFJldHVybnMgZGF0YWZyYW1lIHdpdGggc2hvcnQgaW5mbyBhYm91dCBtb2RlbFxuZnVuY3Rpb24gZ2V0TW9kZWxJbmZvKG1vZGVsKSB7XG4gICAgbGV0IGtlcm5lbFBhcmFtcyA9IG1vZGVsLmtlcm5lbFBhcmFtcy5nZXRSYXdEYXRhKCk7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgR0FNTUEsIFttb2RlbC50cmFpbkdhbW1hXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncyhLRVJORUwsIFtLRVJORUxfVFlQRV9UT19OQU1FX01BUFttb2RlbC5rZXJuZWxUeXBlXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8xLCBba2VybmVsUGFyYW1zWzBdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgS0VSTkVMX1BBUkFNXzIsIFtrZXJuZWxQYXJhbXNbMV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBGRUFUVVJFU19DT1VOVF9OQU1FLCBbbW9kZWwuZmVhdHVyZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSwgW21vZGVsLnRyYWluU2FtcGxlc0NvdW50XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgVFJBSU5fRVJST1IsIFttb2RlbC50cmFpbkVycm9yXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgQkFMQU5DRURfQUNDVVJBQ1ksIFttb2RlbC5iYWxhbmNlZEFjY3VyYWN5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgU0VOU0lUSVZJVFksIFttb2RlbC5zZW5zaXRpdml0eV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNQRUNJRklDSVRZLCBbbW9kZWwuc3BlY2lmaWNpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWVdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWVdKVxuICAgIF0pO1xufVxuLy8gR2V0IGRhdGFmcmFtZSB3aXRoIGNvbmZ1c2lvbiBtYXRyaXhcbmZ1bmN0aW9uIGdldENvbmZ1c2lvbk1hdHJpeERGKG1vZGVsKSB7XG4gICAgbGV0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJycsIFtQT1NJVElWRV9OQU1FLCBORUdBVElWRV9OQU1FXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnaW50JywgUFJFRElDVEVEX1BPU0lUSVZFX05BTUUsIFtkYXRhW1RSVUVfUE9TSVRJVkVfSU5ERVhdLCBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FLCBbZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF0sIGRhdGFbVFJVRV9ORUdBVElWRV9JTkRFWF1dKVxuICAgIF0pO1xufVxuLy8gU2hvdyB0cmFpbmluZyByZXBvcnRcbmV4cG9ydCBmdW5jdGlvbiBzaG93VHJhaW5SZXBvcnQoZGYsIG1vZGVsKSB7XG4gICAgZGYubmFtZSA9IE1MX1JFUE9SVDtcbiAgICBkZi5jb2x1bW5zLmFkZChtb2RlbC50cmFpbkxhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwucHJlZGljdGVkTGFiZWxzKTtcbiAgICBkZi5jb2x1bW5zLmFkZChtb2RlbC5jb3JyZWN0bmVzcyk7XG4gICAgbGV0IGRmVmlldyA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5mb3JtKGdldE1vZGVsSW5mbyhtb2RlbCkpKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX1BSRURJQ1RFRF9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC5wcmVkaWN0ZWRMYWJlbHMubmFtZVxuICAgIH0pKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLnRyYWluTGFiZWxzLm5hbWVcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuZ3JpZChnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkpKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX0NPUlJFQ1RORVNTLFxuICAgICAgICBjb2xvcjogbW9kZWwuY29ycmVjdG5lc3MubmFtZVxuICAgIH0pKTtcbn0gLy8gc2hvd1RyYWluUmVwb3J0XG4vLyBSZXR1cm5zIHRyYWluZWQgbW9kZWwgcGFja2VkIGludG8gVUludDhBcnJheVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2tlZE1vZGVsKG1vZGVsKSB7XG4gICAgLy8gZ2V0IHByaW5jaXBhbCBkYXRhXG4gICAgbGV0IGRhdGFDb2xzID0gbW9kZWwubm9ybWFsaXplZFRyYWluRGF0YS5jb2x1bW5zO1xuICAgIGxldCBzYW1wbGVzQ291bnQgPSBtb2RlbC50cmFpblNhbXBsZXNDb3VudDtcbiAgICBsZXQgZmVhdHVyZXNDb3VudCA9IG1vZGVsLmZlYXR1cmVzQ291bnQ7XG4gICAgLypsZXQgYnVmZmVyU2l6ZSA9IEJZVEVTICogKDcgKyBmZWF0dXJlc0NvdW50ICogc2FtcGxlc0NvdW50XG4gICAgICArIDMgKiBmZWF0dXJlc0NvdW50ICsgMiAqIHNhbXBsZXNDb3VudCk7Ki9cbiAgICAvLyBjb21wdXRlIHNpemUgb2YgcGFja2VkIG1vZGVsXG4gICAgbGV0IGJ1ZmZlclNpemUgPSBCWVRFUyAqIChJTlRTX0NPVU5UICsgS0VSX1BBUkFNU19DT1VOVCArXG4gICAgICAgIHNhbXBsZXNDb3VudCArIGZlYXR1cmVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVFxuICAgICAgICArIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUICsgZmVhdHVyZXNDb3VudCAqIHNhbXBsZXNDb3VudCk7XG4gICAgLy8gcGFja2VkIG1vZGVsXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlclNpemUpO1xuICAgIGxldCBidWZmZXIgPSByZXN1bHQuYnVmZmVyO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIC8vIHBhY2sga2VybmVsIHR5cGUgYW5kIHNpemVzXG4gICAgbGV0IGludHMgPSBuZXcgSW50MzJBcnJheShidWZmZXIsIG9mZnNldCwgSU5UU19DT1VOVCk7XG4gICAgaW50c1tNT0RFTF9LRVJORUxfSU5ERVhdID0gbW9kZWwua2VybmVsVHlwZTtcbiAgICBpbnRzW1NBTVBMRVNfQ09VTlRfSU5ERVhdID0gc2FtcGxlc0NvdW50O1xuICAgIGludHNbRkVBVFVSRVNfQ09VTlRfSU5ERVhdID0gZmVhdHVyZXNDb3VudDtcbiAgICBvZmZzZXQgKz0gSU5UU19DT1VOVCAqIEJZVEVTO1xuICAgIC8vIHBhY2sga2VybmVsIHBhcmFtZXRlcnNcbiAgICBsZXQgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5rZXJuZWxQYXJhbXMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gS0VSX1BBUkFNU19DT1VOVCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgcGFjayBsYWJlbHMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNhbXBsZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC50cmFpbkxhYmVscy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1lYW5zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwuc3RkRGV2cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtb2RlbCBwYXJhbXRlcnNcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IChzYW1wbGVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKSAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwncyBwcmVjb21wdXRlZCB3ZWlnaHRzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwubW9kZWxXZWlnaHRzLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IChmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIHRyYWluaW5nIGRhdGFzZXRcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBkYXRhQ29scykge1xuICAgICAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICAgICAgZmxvYXRzLnNldChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn0gLy8gZ2V0UGFja2VkTW9kZWxcbi8vIFJldHVybnMgdW5wYWNrZWQgbW9kZWxcbmZ1bmN0aW9uIGdldFVucGFja2VkTW9kZWwocGFja2VkTW9kZWwpIHtcbiAgICBsZXQgbW9kZWxCeXRlcyA9IHBhY2tlZE1vZGVsLmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBleHRyYWN0IGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGxldCBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIG9mZnNldCArPSBJTlRTX0NPVU5UICogQllURVM7XG4gICAgbGV0IHNhbXBsZXNDb3VudCA9IGhlYWRlcltTQU1QTEVTX0NPVU5UX0lOREVYXTtcbiAgICBsZXQgZmVhdHVyZXNDb3VudCA9IGhlYWRlcltGRUFUVVJFU19DT1VOVF9JTkRFWF07XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIGtlcm5lbFxuICAgIGNvbnN0IGtlcm5lbFBhcmFtcyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KEtFUk5FTF9QQVJBTVMsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBLRVJfUEFSQU1TX0NPVU5UKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHRyYWluaW5nIGxhYmVsc1xuICAgIGNvbnN0IHRyYWluTGFiZWxzID0gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoTEFCRUxTLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgc2FtcGxlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IHNhbXBsZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIGV4dHJhY3QgbWVhbiB2YWx1ZXMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IG1lYW5zID0gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoTUVBTiwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIGV4dHJhY3Qgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0cmFpbmluZyBkYXRhXG4gICAgY29uc3Qgc3RkRGV2cyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KFNURF9ERVYsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHBhcmFtZXRlcnMgb2YgbW9kZWxcbiAgICBjb25zdCBtb2RlbFBhcmFtcyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1PREVMX1BBUkFNU19OQU1FLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGNvbnN0IG1vZGVsV2VpZ2h0cyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1PREVMX1dFSUdIVFNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKSk7XG4gICAgb2Zmc2V0ICs9IChmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHRyYWluaW5nIGRhdGEgY29sdW1uc1xuICAgIGxldCBkYXRhQ29scyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyBpKyspIHtcbiAgICAgICAgZGF0YUNvbHMucHVzaChERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShpLnRvU3RyaW5nKCksIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSkpO1xuICAgICAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkVHJhaW5EYXRhID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGRhdGFDb2xzKTtcbiAgICBsZXQgbW9kZWwgPSB7IGtlcm5lbFR5cGU6IGhlYWRlcltNT0RFTF9LRVJORUxfSU5ERVhdLFxuICAgICAgICBrZXJuZWxQYXJhbXM6IGtlcm5lbFBhcmFtcyxcbiAgICAgICAgdHJhaW5MYWJlbHM6IHRyYWluTGFiZWxzLFxuICAgICAgICBtZWFuczogbWVhbnMsXG4gICAgICAgIHN0ZERldnM6IHN0ZERldnMsXG4gICAgICAgIG1vZGVsUGFyYW1zOiBtb2RlbFBhcmFtcyxcbiAgICAgICAgbW9kZWxXZWlnaHRzOiBtb2RlbFdlaWdodHMsXG4gICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IG5vcm1hbGl6ZWRUcmFpbkRhdGFcbiAgICB9O1xuICAgIHJldHVybiBtb2RlbDtcbn0gLy8gZ2V0VW5wYWNrZWRNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInByZWRpY3RcIiB3aXRoIERhdGFncm9rIHByZWRpY2l0dmUgdG9vbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVkaWN0aW9uKGRmLCBwYWNrZWRNb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBtb2RlbCA9IGdldFVucGFja2VkTW9kZWwobmV3IFVpbnQ4QXJyYXkocGFja2VkTW9kZWwpKTtcbiAgICAgICAgbGV0IHJlcyA9IHlpZWxkIHByZWRpY3QobW9kZWwsIGRmLmNvbHVtbnMpO1xuICAgICAgICByZXMubmFtZSA9IFBSRURJQ1RJT047XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3Jlc10pO1xuICAgIH0pO1xufSAvLyBnZXRQcmVkaWN0aW9uXG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIERvIG5vdCBjaGFuZ2UgdGhlc2UgaW1wb3J0IGxpbmVzIHRvIG1hdGNoIGV4dGVybmFsIG1vZHVsZXMgaW4gd2VicGFjayBjb25maWd1cmF0aW9uICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgRGVtb1NjcmlwdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdHV0b3JpYWxzL3NyYy9kZW1vLXNjcmlwdCc7XG5pbXBvcnQgeyBfaW5pdEVEQUFQSSB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNvbXB1dGVQQ0EsIGNvbXB1dGVQTFMgfSBmcm9tICcuL0VEQXRvb2xzJztcbmltcG9ydCB7IHJlbmFtZVBDQWNvbHVtbnMsIGFkZFBMU3Zpc3VhbGl6YXRpb24sIHJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCwgc2NvcmVzU2NhdHRlclBsb3QsIHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90IH0gZnJvbSAnLi9FREF1aSc7XG5pbXBvcnQgeyBjYXJzRGF0YWZyYW1lLCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uIH0gZnJvbSAnLi9kYXRhR2VuZXJhdG9ycyc7XG5pbXBvcnQgeyBMSU5FQVIsIFJCRiwgUE9MWU5PTUlBTCwgU0lHTU9JRCwgZ2V0VHJhaW5lZE1vZGVsLCBnZXRQcmVkaWN0aW9uLCBzaG93VHJhaW5SZXBvcnQsIGdldFBhY2tlZE1vZGVsIH0gZnJvbSAnLi9zdm0nO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbi8vbmFtZTogaW5mb1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oKSB7XG4gICAgZ3Jvay5zaGVsbC5pbmZvKF9wYWNrYWdlLndlYlJvb3QpO1xufVxuLy90YWdzOiBpbml0XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfaW5pdEVEQUFQSSgpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogVG9vbHMgfCBEYXRhIFNjaWVuY2UgfCBQcmluY2lwYWwgQ29tcG9uZW50IEFuYWx5c2lzLi4uXG4vL25hbWU6IFBDQVxuLy9kZXNjcmlwdGlvbjogUHJpbmNpcGFsIGNvbXBvbmVudCBhbmFseXNpcyAoUENBKS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uX2xpc3QgZmVhdHVyZXNcbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gMlxuLy9pbnB1dDogYm9vbCBjZW50ZXIgPSB0cnVlXG4vL2lucHV0OiBib29sIHNjYWxlID0gdHJ1ZVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSByZXN1bHQge2FjdGlvbjpqb2luKHRhYmxlKX1cbmV4cG9ydCBmdW5jdGlvbiBQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHJlbmFtZVBDQWNvbHVtbnMoeWllbGQgY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IFRvb2xzIHwgRGF0YSBTY2llbmNlIHwgTXVsdGl2YXJpYXRlIEFuYWx5c2lzIChQTFMpLi4uXG4vL25hbWU6IE11bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKVxuLy9kZXNjcmlwdGlvbjogUGFydGlhbCBsZWFzdCBzcXVhcmUgcmVncmVzc2lvbiAoUExTKS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uIG5hbWVzXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlc1xuLy9pbnB1dDogY29sdW1uIHByZWRpY3Rcbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuZXhwb3J0IGZ1bmN0aW9uIFBMUyh0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcGxzUmVzdWx0cyA9IHlpZWxkIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICAgICAgYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBwbHNSZXN1bHRzKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogTVZBIGRlbW9cbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vbWV0YS5kZW1vUGF0aDogQ29tcHV0ZSB8IE11bHRpdmFyaWF0ZSBhbmFseXNpc1xuLy9tZXRhLmlzRGVtb1NjcmlwdDogVHJ1ZVxuZXhwb3J0IGZ1bmN0aW9uIGRlbW9NdWx0aXZhcmlhdGVBbmFseXNpcygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZW1vU2NyaXB0ID0gbmV3IERlbW9TY3JpcHQoJ1BhcnRpYWwgbGVhc3Qgc3F1YXJlcyByZWdyZXNzaW9uJywgJ0FuYWx5c2lzIG9mIG11bHRpZGltZW5zaW9uYWwgZGF0YS4nKTtcbiAgICAgICAgY29uc3QgY2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IDM7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gY2Fycy5jb2x1bW5zLmJ5TmFtZSgnbW9kZWwnKTtcbiAgICAgICAgY29uc3QgcHJlZGljdCA9IGNhcnMuY29sdW1ucy5ieU5hbWUoJ3ByaWNlJyk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gY2Fycy5jb2x1bW5zLnJlbW92ZSgncHJpY2UnKS5yZW1vdmUoJ21vZGVsJyk7XG4gICAgICAgIGNvbnN0IHBsc091dHB1dCA9IHlpZWxkIGNvbXB1dGVQTFMoY2FycywgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzb3VyY2VDYXJzID0gY2Fyc0RhdGFmcmFtZSgpO1xuICAgICAgICBzb3VyY2VDYXJzLm5hbWUgPSAnQ2Fycyc7XG4gICAgICAgIGxldCB2aWV3O1xuICAgICAgICBsZXQgZGlhbG9nO1xuICAgICAgICB5aWVsZCBkZW1vU2NyaXB0XG4gICAgICAgICAgICAuc3RlcCgnRGF0YScsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNvdXJjZUNhcnMpO1xuICAgICAgICAgICAgdmlldyA9IGdyb2suc2hlbGwuZ2V0VGFibGVWaWV3KHNvdXJjZUNhcnMubmFtZSk7XG4gICAgICAgIH0pLCB7IGRlc2NyaXB0aW9uOiAnRWFjaCBjYXIgaGFzIG1hbnkgZmVhdHVyZXMgLSBwYXR0ZXJucyBleHRyYWN0aW9uIGlzIGNvbXBsaWNhdGVkLicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnTW9kZWwnLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBkaWFsb2cgPSB1aS5kaWFsb2coeyB0aXRsZTogJ011bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKScgfSlcbiAgICAgICAgICAgICAgICAuYWRkKHVpLnRhYmxlSW5wdXQoJ1RhYmxlJywgc291cmNlQ2FycykpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5zSW5wdXQoJ0ZlYXR1cmVzJywgY2FycywgZmVhdHVyZXMudG9MaXN0LCB7IGF2YWlsYWJsZTogdW5kZWZpbmVkLCBjaGVja2VkOiBmZWF0dXJlcy5uYW1lcygpIH0pKVxuICAgICAgICAgICAgICAgIC5hZGQodWkuY29sdW1uSW5wdXQoJ05hbWVzJywgY2FycywgbmFtZXMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5JbnB1dCgnUHJlZGljdCcsIGNhcnMsIHByZWRpY3QsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5pbnRJbnB1dCgnQ29tcG9uZW50cycsIGNvbXBvbmVudHMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLm9uT0soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuaW5mbygnTXVsdGl2YXJpYXRlIGFuYWx5c2lzIGhhcyBiZWVuIGFscmVhZHkgcGVyZm9ybWVkLicpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc2hvdyh7IHg6IDQwMCwgeTogMTQwIH0pO1xuICAgICAgICB9KSwgeyBkZXNjcmlwdGlvbjogJ1ByZWRpY3QgY2FyIHByaWNlIGJ5IGl0cyBvdGhlciBmZWF0dXJlcy4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1JlZ3Jlc3Npb24gY29lZmZjaWNpZW50cycsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAgICAgfSksIHsgZGVzY3JpcHRpb246ICdUaGUgZmVhdHVyZSBcImRpZXNlbFwiIGFmZmVjdHMgdGhlIHByaWNlIHRoZSBtb3N0LicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnU2NvcmVzJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyUGxvdChuYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTsgfSksIHsgZGVzY3JpcHRpb246ICdTaW1pbGFyaXRpZXMgJiBkaXNzaW1pbGFyaXRpZXM6IGFsZmFyb21lbyBhbmQgbWVyY2VkZXMgYXJlIGRpZmZlcmVudC4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1ByZWRpY3Rpb24nLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KG5hbWVzLCBwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTsgfSksIHsgZGVzY3JpcHRpb246ICdDbG9zZXIgdG8gdGhlIGxpbmUgbWVhbnMgYmV0dGVyIHByaWNlIHByZWRpY3Rpb24uJywgZGVsYXk6IDAgfSlcbiAgICAgICAgICAgIC5zdGFydCgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnMuXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzLlxuLy9pbnB1dDogc3RyaW5nIG5hbWUgPSAnRGF0YScge2NhcHRpb246IG5hbWU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9pbnB1dDogZG91YmxlIHNpZ21hID0gOTAgIHtjYXB0aW9uOiBzaWdtYTsgY2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc30gW1JCRi1rZXJuZWwgcGFyYW1hdGVyXVxuLy9pbnB1dDogaW50IHNhbXBsZXNDb3VudCA9IDEwMDAge2NhcHRpb246IHNhbXBsZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogaW50IGZlYXR1cmVzQ291bnQgPSAyIHtjYXB0aW9uOiBmZWF0dXJlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBkb3VibGUgbWluID0gLTM5IHtjYXB0aW9uOiBtaW47IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSBtYXggPSAxNzMge2NhcHRpb246IG1heDsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIHZpb2xhdG9yc1BlcmNlbnRhZ2UgPSA1IHtjYXB0aW9uOiB2aW9sYXRvcnM7IHVuaXRzOiAlOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgZGZcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZShuYW1lLCBzaWdtYSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKFJCRiwgW3NpZ21hLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluTGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IExJTkVBUiB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaW5lYXJLZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBzaWdtYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IFJCRiwgc2lnbWE6IHNpZ21hIH0sIGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGlmICh0b1Nob3dSZXBvcnQpXG4gICAgICAgICAgICBzaG93VHJhaW5SZXBvcnQoZGYsIHRyYWluZWRNb2RlbCk7XG4gICAgICAgIHJldHVybiBnZXRQYWNrZWRNb2RlbCh0cmFpbmVkTW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhcHBseVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGFwcGx5XG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkYXRhZnJhbWUgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJCRmtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgYyA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgZCA9IDIge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIGMsIGQsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBrYXBwYSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgdGhldGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBTSUdNT0lELCBrYXBwYToga2FwcGEsIHRoZXRhOiB0aGV0YSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5U2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTaWdtb2lkS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnIiwiZ2xvYmFsVGhpcyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJpIiwiRXJyb3IiLCJyZXBsYWNlIiwicCIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJncm9rIiwidWkiLCJERyIsImFzc3VyZSIsImRlbGF5IiwibXMiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiUCIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm5vdE51bGwiLCJuYW1lIiwiRGVtb1NjcmlwdCIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJpc0F1dG9tYXRpYyIsIm9wdGlvbnMiLCJfYSIsIl9pc0F1dG9tYXRpYyIsIl9hdXRvU3RhcnRGaXJzdFN0ZXAiLCJfY3VycmVudFN0ZXAiLCJfaXNTdG9wcGVkIiwiX2lzQ2FuY2VsbGVkIiwiX2lzU3RlcFByb2Nlc3NlZCIsIl9yb290IiwiaWQiLCJjbGFzc2VzIiwiX3N0ZXBzIiwiX21haW5IZWFkZXIiLCJfaGVhZGVyIiwiX2hlYWRlckRpdiIsIl9zdG9wU3RhcnRCdG4iLCJfY2hhbmdlU3RvcFN0YXRlIiwiX3Jlc3RhcnRCdG4iLCJfcmVzdGFydFNjcmlwdCIsIl9uZXh0U3RlcEJ0biIsIl9uZXh0U3RlcCIsIl9hY3Rpdml0eSIsIl9wcm9ncmVzc0RpdiIsIl9wcm9ncmVzcyIsIl9wcm9ncmVzc1N0ZXBzIiwiX2Nsb3NlQnRuIiwiX2Nsb3NlRG9jayIsImF1dG9TdGFydEZpcnN0U3RlcCIsIm1heCIsImN1cnJlbnRPYmplY3QiLCJzdGVwcyIsInN0ZXBOdW1iZXIiLCJfYWRkSGVhZGVyIiwiX2NyZWF0ZUhlYWRlckRpdiIsIl9jcmVhdGVQcm9ncmVzc0RpdiIsImFwcGVuZCIsImlubmVyVGV4dCIsImZpcnN0Q2hpbGQiLCJjbGFzc05hbWUiLCJfYWRkRGVzY3JpcHRpb24iLCJpbnN0cnVjdGlvbkluZGljYXRvciIsImluc3RydWN0aW9uRGl2IiwiY3VycmVudFN0ZXBEZXNjcmlwdGlvbiIsImVudHJ5IiwiX2luaXRSb290IiwiX2IiLCJfYyIsInNjcmlwdERvY2tOb2RlIiwiQXJyYXkiLCJmcm9tIiwiX25vZGUiLCJwYXJlbnQiLCJjb250YWluZXIiLCJjb250YWluZXJFbGVtZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJyZW1vdmUiLCJhZGQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZW50cnlJbmRpY2F0b3IiLCJlbnRyeUluc3RydWN0aW9uIiwiY3VycmVudFN0ZXAiLCJzdGVwRGVsYXkiLCJmdW5jIiwiX3Njcm9sbFRvIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwiX2NvdW50ZG93biIsIm5ld0VudHJ5SW5kaWNhdG9yIiwicmVwbGFjZVdpdGgiLCJuZXh0U3RlcEVudHJ5SW5kaWNhdG9yIiwic3RhcnROZXh0U3RlcEljb24iLCJfc3RhcnRTY3JpcHQiLCJlbGVtZW50IiwieSIsImZvY3VzIiwic2Nyb2xsVG9wIiwiaW5kaWNhdG9yIiwidGltZSIsImNvdW50ZG93bkRpdiIsImNvdW50ZG93biIsInN2ZyIsIl9jcmVhdGVTVkdJbmRpY2F0b3IiLCJwcmVwZW5kIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjcmVhdGVFbGVtZW50TlMiLCJjaXJjbGUiLCJzZXRBdHRyaWJ1dGVOUyIsImljb24iLCJfY2xlYXJSb290IiwiX3NldEluaXRQYXJhbXMiLCJzdGFydCIsImNhbmNlbFNjcmlwdCIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiYXJnIiwidHlwZSIsImRhdGEiLCJhcnJheSIsImNvbCIsImdldFJhd0RhdGEiLCJ2YWwiLCJhcnJheXMiLCJ0b0xpc3QiLCJwdXNoIiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiYXJndW1lbnRzIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJ0eXBlVG9Db2x1bW5DcmVhdG9yTWFwIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJuYW1lcyIsImNvbHVtbiIsImNvbHVtbnMiLCJrIiwiaiIsImV4dHJhY3ROZXdseUNyZWF0ZWREYXRhIiwiYXJncyIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiY2hlY2tDb21wb25lbmV0cyIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImJ5SW5kZXgiLCJjb21wdXRlUExTIiwidGFibGUiLCJwcmVkaWN0IiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJjb21wb25lbnRzQ291bnQiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIiLCJfcmVzdWx0IiwiX2Vycm9yIiwicHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3QiLCJzYW1wbGVzTmFtZXMiLCJyZWZlcmVuY2UiLCJwcmVkaWN0aW9uIiwiZGZSZWZlcmVuY2VQcmVkaWN0aW9uIiwidGl0bGUiLCJ4Iiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsImxhYmVscyIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCIsInJlZ3Jlc3Npb25Db2VmZnMiLCJuYW1lc09mUHJlZGljdG9ycyIsInByZWRpY3Rvck5hbWVzQ29sdW1uIiwiZGZSZWdyQ29lZnMiLCJzcGxpdCIsInZhbHVlQWdnclR5cGUiLCJzY29yZXNTY2F0dGVyUGxvdCIsInhTY29yZXMiLCJ5U2NvcmVzIiwic2NvcmVzQ29sdW1ucyIsInNjb3JlcyIsImluZGV4IiwiU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCIsIlNWTV9HRU5fTEFCRUxTX0lOREVYIiwiU1ZNX0ZFQVRVUkVfTkFNRSIsIlNWTV9MQUJFTF9OQU1FIiwiY2Fyc0RhdGFmcmFtZSIsInRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24iLCJrZXJuZWwiLCJrZXJuZWxQYXJhbXMiLCJzYW1wbGVzQ291bnQiLCJmZWF0dXJlc0NvdW50IiwibWluIiwidmlvbGF0b3JzUGVyY2VudGFnZSIsImNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIiwia2VybmVsUGFyYW1zQ29sIiwiX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIiwiZGYiLCJMSU5FQVIiLCJQT0xZTk9NSUFMIiwiUkJGIiwiU0lHTU9JRCIsIkNPTkZVU0lPTl9NQVRSX1NJWkUiLCJOT1JNQUxJWkVEX0RBVEFfSU5ERVgiLCJNRUFOU19JTkRFWCIsIlNURF9ERVZTX0lOREVYIiwiTU9ERUxfUEFSQU1TX0lOREVYIiwiTU9ERUxfV0VJR0hUU19JTkRFWCIsIlBSRURJQ1RFRF9MQUJFTFNfSU5ERVgiLCJDT1JSRUNUTkVTU19JTkRFWCIsIkNPTkZVU0lPTl9NQVRSSVhfSU5ERVgiLCJUUlVFX1BPU0lUSVZFX0lOREVYIiwiRkFMU0VfTkVHQVRJVkVfSU5ERVgiLCJGQUxTRV9QT1NJVElWRV9JTkRFWCIsIlRSVUVfTkVHQVRJVkVfSU5ERVgiLCJSQkZfU0lHTUFfSU5ERVgiLCJQT0xZTk9NSUFMX0NfSU5ERVgiLCJQT0xZTk9NSUFMX0RfSU5ERVgiLCJTSUdNT0lEX0tBUFBBX0lOREVYIiwiU0lHTU9JRF9USEVUQV9JTkRFWCIsIkdBTU1BX0lORklNVU1fTElNSVQiLCJSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQiLCJXUk9OR19HQU1NQV9NRVNTQUdFIiwiV1JPTkdfUkJGX1NJR01BX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFIiwiV1JPTkdfS0VSTkVMX01FU1NBR0UiLCJMQUJFTFMiLCJQUkVESUNURUQiLCJDT1JSRUNUTkVTUyIsIkNPTkZVU0lPTl9NQVRSSVhfTkFNRSIsIk1FQU4iLCJTVERfREVWIiwiTU9ERUxfUEFSQU1TX05BTUUiLCJNT0RFTF9XRUlHSFRTX05BTUUiLCJHQU1NQSIsIktFUk5FTCIsIktFUk5FTF9QQVJBTVMiLCJLRVJORUxfUEFSQU1fMSIsIktFUk5FTF9QQVJBTV8yIiwiRkVBVFVSRVNfQ09VTlRfTkFNRSIsIlRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSIsIlRSQUlOX0VSUk9SIiwiS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVAiLCJQT1NJVElWRV9OQU1FIiwiTkVHQVRJVkVfTkFNRSIsIlBSRURJQ1RFRF9QT1NJVElWRV9OQU1FIiwiUFJFRElDVEVEX05FR0FUSVZFX05BTUUiLCJTRU5TSVRJVklUWSIsIlNQRUNJRklDSVRZIiwiQkFMQU5DRURfQUNDVVJBQ1kiLCJQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSIsIk1MX1JFUE9SVCIsIk1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTIiwiTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyIsIk1MX1JFUE9SVF9DT1JSRUNUTkVTUyIsIlBSRURJQ1RJT04iLCJCWVRFUyIsIklOVFNfQ09VTlQiLCJLRVJfUEFSQU1TX0NPVU5UIiwiTU9ERUxfS0VSTkVMX0lOREVYIiwiU0FNUExFU19DT1VOVF9JTkRFWCIsIkZFQVRVUkVTX0NPVU5UX0lOREVYIiwiSU5JVF9WQUxVRSIsIkxTX1NWTV9BRERfQ09OU1QiLCJnZXRUcmFpbmVkTW9kZWwiLCJoeXBlcnBhcmFtZXRlcnMiLCJwcmVkaWN0X2NvbHVtbiIsImJ5TmFtZSIsImRhdGFzZXQiLCJnYW1tYSIsInNpZ21hIiwiY1BhcmFtIiwiZFBhcmFtIiwiY2hlY2tIeXBlcnBhcmFtZXRlcnMiLCJrZXJuZWxQYXJhbXNBcnJheSIsImthcHBhIiwidGhldGEiLCJ0cmFpbkNvbHMiLCJtb2RlbFBhcmFtc0NvdW50IiwicHJlY29tcHV0ZWRXZWlnaHRzQ291bnQiLCJjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50IiwiX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIiLCJtb2RlbCIsInRyYWluR2FtbWEiLCJrZXJuZWxUeXBlIiwidHJhaW5MYWJlbHMiLCJub3JtYWxpemVkVHJhaW5EYXRhIiwibWVhbnMiLCJzdGREZXZzIiwibW9kZWxQYXJhbXMiLCJtb2RlbFdlaWdodHMiLCJwcmVkaWN0ZWRMYWJlbHMiLCJjb3JyZWN0bmVzcyIsImNvbmZ1c2lvbk1hdHJpeCIsInRyYWluRXJyb3IiLCJ0cmFpblNhbXBsZXNDb3VudCIsIlRQIiwiVE4iLCJGUCIsIkZOIiwiTiIsIlRQUiIsIlROUiIsIlBQViIsIk5QViIsIkFDQyIsIkJBIiwic2Vuc2l0aXZpdHkiLCJzcGVjaWZpY2l0eSIsImJhbGFuY2VkQWNjdXJhY3kiLCJwb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZSIsIm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlIiwiZXZhbHVhdGVBY2N1cmFjeSIsInRyYWluQW5kQW5hbHl6ZU1vZGVsIiwic2hvd1RyYWluUmVwb3J0IiwiZGZWaWV3IiwiYWRkVmlld2VyIiwiZ2V0TW9kZWxJbmZvIiwiY29sb3IiLCJnZXRDb25mdXNpb25NYXRyaXhERiIsImdldFBhY2tlZE1vZGVsIiwiZGF0YUNvbHMiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsInNldCIsImdldFByZWRpY3Rpb24iLCJwYWNrZWRNb2RlbCIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJnZXRVbnBhY2tlZE1vZGVsIiwicmVzIiwibm9ybWFsaXplZERhdGEiLCJwcmVjb21wdXRlZFdlaWdodHMiLCJ0YXJnZXREYXRhIiwiX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIiLCJfcGFja2FnZSIsImluZm8iLCJ3ZWJSb290IiwiaW5pdCIsImluaXRFREEiLCJfaW5pdEVEQUFQSSIsIlBDQSIsImNlbnRlciIsInNjYWxlIiwicGNhVGFibGUiLCJyZW5hbWVQQ0Fjb2x1bW5zIiwiY2VudGVyTnVtIiwic2NhbGVOdW0iLCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciIsImNvbXB1dGVQQ0EiLCJQTFMiLCJwbHNSZXN1bHRzIiwicGxzT3V0cHV0IiwidmlldyIsInhMb2FkaW5ncyIsImxvYWRpbmdDb2xzIiwibG9hZGluZ0xhYmVscyIsImRmTG9hZGluZ3MiLCJsb2FkaW5nU2NhdHRlclBsb3QiLCJhZGRQTFN2aXN1YWxpemF0aW9uIiwiZGVtb011bHRpdmFyaWF0ZUFuYWx5c2lzIiwiZGVtb1NjcmlwdCIsImNhcnMiLCJzb3VyY2VDYXJzIiwiZGlhbG9nIiwiYXZhaWxhYmxlIiwiY2hlY2tlZCIsIm9uT0siLCJzaG93IiwiY2xvc2UiLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJ0b1Nob3dSZXBvcnQiLCJ0cmFpbmVkTW9kZWwiLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsInRyYWluUkJGa2VybmVsU1ZNIiwiYXBwbHlSQkZrZXJuZWxTVk0iLCJ0cmFpblBvbHlub21pYWxLZXJuZWxTVk0iLCJjIiwiZCIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSJdLCJzb3VyY2VSb290IjoiIn0=
|