@digitransit-component/digitransit-component-autosuggest 7.2.1 → 7.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -17
- package/index.cjs +7 -0
- package/lib/index.cjs +3 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.development.cjs +3 -0
- package/package.json +16 -13
- package/index.js +0 -7
- package/lib/index.development.js +0 -3
- package/lib/index.js +0 -3
- package/lib/index.js.map +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("react-i18next"),require("classnames"),require("lodash/debounce.js"),require("lodash/flatten.js"),require("lodash/take.js"),require("lodash/isString.js"),require("lodash/orderBy.js"),require("lodash/uniqWith.js"),require("lodash/get.js"),require("downshift"),require("@digitransit-component/digitransit-component-icon"),require("i18next"),require("lodash/isEqual.js"),require("lodash/memoize.js"),require("lodash/escapeRegExp.js"),require("lodash/cloneDeep.js"),require("luxon"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal"),require("@digitransit-component/digitransit-component-suggestion-item")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","classnames","lodash/debounce.js","lodash/flatten.js","lodash/take.js","lodash/isString.js","lodash/orderBy.js","lodash/uniqWith.js","lodash/get.js","downshift","@digitransit-component/digitransit-component-icon","i18next","lodash/isEqual.js","lodash/memoize.js","lodash/escapeRegExp.js","lodash/cloneDeep.js","luxon","react-modal","@digitransit-component/digitransit-component-dialog-modal","@digitransit-component/digitransit-component-suggestion-item"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.PropTypes,e.React,e.reactI18next,e.cx,e.debounce,e.flatten,e.take,e.isString$1,e.orderBy,e.uniqWith,e.get,e.downshift,e.Icon,e.i18next,null,e.memoize,e.escapeRegExp,e.cloneDeep,e.luxon,e.ReactModal,e.DialogModal,e.SuggestionItem)}(this,function(e,t,n,o,r,i,s,a,l,u,c,d,p,f,h,g,b,m,y,_,v,w,S){"use strict";function O(e){return e&&e.__esModule?e:{default:e}}var E=O(t),k=O(n),x=O(r),R=O(i),j=O(s),P=O(a),C=O(l),N=O(u),M=O(c),T=O(d),A=O(f),L=O(b),I=O(m),F=O(y),D=O(v),q=O(w),U=O(S);function z(e){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(e)}function B(e){var t=function(e,t){if("object"!=z(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t);if("object"!=z(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==z(t)?t:t+""}function H(e,t,n){return(t=B(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return e&&t&&e===t}const W=["stop","station","favouriteStop","favouriteStation"],$=["favouriteVehicleRentalStation","bikestation"];function G(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function J(e,t){const n=e.properties,o=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,r=o.origin,i=o.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${r.name}//${r.localadmin}//${i.name}//${i.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if($.includes(n.layer)&&$.includes(o.layer)){return(n.gid||G(n.labelId))===(o.gid||G(o.labelId))}if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(W.includes(n.layer)&&W.includes(o.layer)&&n.gid&&o.gid)return n.gid===o.gid;const r=e&&e.geometry?e.geometry.coordinates:void 0,i=t&&t.geometry?t.geometry.coordinates:void 0;return!!(r&&i&&Math.abs(r[0]-i[0])<1e-6&&Math.abs(r[1]-i[1])<1e-6&&(V(n.name,o.name)||V(n.label,o.label)||V(n.address,o.address)||V(n.address,o.label)||V(n.label,o.address)))}const K=e=>C.default(e)?e.toLowerCase():"",Z=e=>e.split(/(\p{L}+)/u),X=e=>/^[0-9]+\p{L}+$/u.test(e),Q="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ne="favouritePlace",oe="favouriteRoute",re="favouriteVehicleRentalStation",ie="futureRoute",se="station",ae="selectFromMap",le="ownLocations",ue="stop",ce="bikestation",de="carpark",pe="bikepark",fe=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,he=(e,t)=>{switch(e){case Y:return 1;case Q:return.9;case ae:return.8;case le:return.79;case te:case ne:case ee:case oe:case re:return.45;case ie:return.44;case se:return C.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case ue:return.36;default:return.41}},ge=(e,t,n="")=>{if(!Array.isArray(t)||!t.length)return t;const o=t=>C.default(t)&&e&&e.test(t),r=K(n),i=o(r),s=N.default(t.filter(e=>e),[e=>i&&o(K(e.properties.shortName))&&0===K(e.properties.shortName).indexOf(r)?1:0,e=>{const{confidence:t,layer:n,source:o}=e.properties;if(0===r.length)return he(n,o);if(!t)return he(n,o)+((e,t)=>C.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>C.default(e.value)&&e.value.length>0).map(t=>{let n=K(t.value);return 0===n.indexOf(e)?("shortName"===t.name&&X(n)&&([n]=Z(n)),.5+e.length/n.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(r,e.properties);switch(n){case se:return t+(0===o.indexOf("gtfs")?.02:.01);case ue:case de:case pe:return t-.05;case ce:return t-.04;default:return t}},e=>{if(e.properties.shortName)return X(e.properties.shortName)?Z(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return X(e.properties.shortName)?Z(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return M.default(s,J)},be=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function me(e,t,n){if("string"==typeof t&&t.length>0){const o=t.toLowerCase().trim(),r=o.includes(" ")||o.includes(",");return e.filter(e=>{let t=[];n.forEach(n=>{let o=T.default(e,n);r||"properties.label"!==n&&"address"!==n||!o||(o=o.split(","),o.length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(t=r?t.concat(o.toLowerCase()):t.concat(o.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(o))return!0;return!1})}return e}function ye(e,t){return function(){return e.apply(t,arguments)}}const{toString:_e}=Object.prototype,{getPrototypeOf:ve}=Object,{iterator:we,toStringTag:Se}=Symbol,Oe=(Ee=Object.create(null),e=>{const t=_e.call(e);return Ee[t]||(Ee[t]=t.slice(8,-1).toLowerCase())});var Ee;const ke=e=>(e=e.toLowerCase(),t=>Oe(t)===e),xe=e=>t=>typeof t===e,{isArray:Re}=Array,je=xe("undefined");function Pe(e){return null!==e&&!je(e)&&null!==e.constructor&&!je(e.constructor)&&Me(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ce=ke("ArrayBuffer");const Ne=xe("string"),Me=xe("function"),Te=xe("number"),Ae=e=>null!==e&&"object"==typeof e,Le=e=>{if("object"!==Oe(e))return!1;const t=ve(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Se in e||we in e)},Ie=ke("Date"),Fe=ke("File"),De=ke("Blob"),qe=ke("FileList");const Ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},ze=void 0!==Ue.FormData?Ue.FormData:void 0,Be=ke("URLSearchParams"),[He,Ve,We,$e]=["ReadableStream","Request","Response","Headers"].map(ke);function Ge(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let o,r;if("object"!=typeof e&&(e=[e]),Re(e))for(o=0,r=e.length;o<r;o++)t.call(null,e[o],o,e);else{if(Pe(e))return;const r=n?Object.getOwnPropertyNames(e):Object.keys(e),i=r.length;let s;for(o=0;o<i;o++)s=r[o],t.call(null,e[s],s,e)}}function Je(e,t){if(Pe(e))return null;t=t.toLowerCase();const n=Object.keys(e);let o,r=n.length;for(;r-- >0;)if(o=n[r],t===o.toLowerCase())return o;return null}const Ke="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Ze=e=>!je(e)&&e!==Ke;const Xe=(Qe="undefined"!=typeof Uint8Array&&ve(Uint8Array),e=>Qe&&e instanceof Qe);var Qe;const Ye=ke("HTMLFormElement"),et=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),{propertyIsEnumerable:tt}=Object.prototype,nt=ke("RegExp"),ot=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};Ge(n,(n,r)=>{let i;!1!==(i=t(n,r,e))&&(o[r]=i||n)}),Object.defineProperties(e,o)};const rt=ke("AsyncFunction"),it=(st="function"==typeof setImmediate,at=Me(Ke.postMessage),st?setImmediate:at?(lt=`axios@${Math.random()}`,ut=[],Ke.addEventListener("message",({source:e,data:t})=>{e===Ke&&t===lt&&ut.length&&ut.shift()()},!1),e=>{ut.push(e),Ke.postMessage(lt,"*")}):e=>setTimeout(e));var st,at,lt,ut;const ct="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Ke):"undefined"!=typeof process&&process.nextTick||it;var dt={isArray:Re,isArrayBuffer:Ce,isBuffer:Pe,isFormData:e=>{if(!e)return!1;if(ze&&e instanceof ze)return!0;const t=ve(e);if(!t||t===Object.prototype)return!1;if(!Me(e.append))return!1;const n=Oe(e);return"formdata"===n||"object"===n&&Me(e.toString)&&"[object FormData]"===e.toString()},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ce(e.buffer),t},isString:Ne,isNumber:Te,isBoolean:e=>!0===e||!1===e,isObject:Ae,isPlainObject:Le,isEmptyObject:e=>{if(!Ae(e)||Pe(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:He,isRequest:Ve,isResponse:We,isHeaders:$e,isUndefined:je,isDate:Ie,isFile:Fe,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:De,isRegExp:nt,isFunction:Me,isStream:e=>Ae(e)&&Me(e.pipe),isURLSearchParams:Be,isTypedArray:Xe,isFileList:qe,forEach:Ge,merge:function e(...t){const{caseless:n,skipUndefined:o}=Ze(this)&&this||{},r={},i=(t,i)=>{if("__proto__"===i||"constructor"===i||"prototype"===i)return;const s=n&&"string"==typeof i&&Je(r,i)||i,a=et(r,s)?r[s]:void 0;Le(a)&&Le(t)?r[s]=e(a,t):Le(t)?r[s]=e({},t):Re(t)?r[s]=t.slice():o&&je(t)||(r[s]=t)};for(let e=0,n=t.length;e<n;e++){const n=t[e];if(!n||Pe(n))continue;if(Ge(n,i),"object"!=typeof n||Re(n))continue;const o=Object.getOwnPropertySymbols(n);for(let e=0;e<o.length;e++){const t=o[e];tt.call(n,t)&&i(n[t],t)}}return r},extend:(e,t,n,{allOwnKeys:o}={})=>(Ge(t,(t,o)=>{n&&Me(t)?Object.defineProperty(e,o,{__proto__:null,value:ye(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,o)=>{let r,i,s;const a={};if(t=t||{},null==e)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)s=r[i],o&&!o(s,e,t)||a[s]||(t[s]=e[s],a[s]=!0);e=!1!==n&&ve(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Oe,kindOfTest:ke,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return-1!==o&&o===n},toArray:e=>{if(!e)return null;if(Re(e))return e;let t=e.length;if(!Te(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[we]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const o=[];for(;null!==(n=e.exec(t));)o.push(n);return o},isHTMLForm:Ye,hasOwnProperty:et,hasOwnProp:et,reduceDescriptors:ot,freezeMethods:e=>{ot(e,(t,n)=>{if(Me(e)&&["arguments","caller","callee"].includes(n))return!1;const o=e[n];Me(o)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},o=e=>{e.forEach(e=>{n[e]=!0})};return Re(e)?o(e):o(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:Je,global:Ke,isContextDefined:Ze,isSpecCompliantForm:function(e){return!!(e&&Me(e.append)&&"FormData"===e[Se]&&e[we])},toJSONObject:e=>{const t=new WeakSet,n=e=>{if(Ae(e)){if(t.has(e))return;if(Pe(e))return e;if(!("toJSON"in e)){t.add(e);const o=Re(e)?[]:{};return Ge(e,(e,t)=>{const r=n(e);!je(r)&&(o[t]=r)}),t.delete(e),o}}return e};return n(e)},isAsyncFn:rt,isThenable:e=>e&&(Ae(e)||Me(e))&&Me(e.then)&&Me(e.catch),setImmediate:it,asap:ct,isIterable:e=>null!=e&&Me(e[we])};const pt=dt.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const ft=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),ht=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function gt(e,t){return dt.isArray(e)?e.map(e=>gt(e,t)):function(e){let t=0,n=e.length;for(;t<n;){const n=e.charCodeAt(t);if(9!==n&&32!==n)break;t+=1}for(;n>t;){const t=e.charCodeAt(n-1);if(9!==t&&32!==t)break;n-=1}return 0===t&&n===e.length?e:e.slice(t,n)}(String(e).replace(t,""))}function bt(e){const t=Object.create(null);return dt.forEach(e.toJSON(),(e,n)=>{t[n]=(e=>gt(e,ht))(e)}),t}const mt=Symbol("internals");function yt(e){return e&&String(e).trim().toLowerCase()}function _t(e){return!1===e||null==e?e:dt.isArray(e)?e.map(_t):(e=>gt(e,ft))(String(e))}function vt(e,t,n,o,r){return dt.isFunction(o)?o.call(this,t,n):(r&&(t=n),dt.isString(t)?dt.isString(o)?-1!==t.indexOf(o):dt.isRegExp(o)?o.test(t):void 0:void 0)}let wt=class{constructor(e){e&&this.set(e)}set(e,t,n){const o=this;function r(e,t,n){const r=yt(t);if(!r)return;const i=dt.findKey(o,r);(!i||void 0===o[i]||!0===n||void 0===n&&!1!==o[i])&&(o[i||t]=_t(e))}const i=(e,t)=>dt.forEach(e,(e,n)=>r(e,n,t));if(dt.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(dt.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i((e=>{const t={};let n,o,r;return e&&e.split("\n").forEach(function(e){r=e.indexOf(":"),n=e.substring(0,r).trim().toLowerCase(),o=e.substring(r+1).trim(),!n||t[n]&&pt[n]||("set-cookie"===n?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)}),t})(e),t);else if(dt.isObject(e)&&dt.isIterable(e)){let n,o,r={};for(const t of e){if(!dt.isArray(t))throw new TypeError("Object iterator must return a key-value pair");r[o=t[0]]=(n=r[o])?dt.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}i(r,t)}else null!=e&&r(t,e,n);return this}get(e,t){if(e=yt(e)){const n=dt.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}(e);if(dt.isFunction(t))return t.call(this,e,n);if(dt.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=yt(e)){const n=dt.findKey(this,e);return!(!n||void 0===this[n]||t&&!vt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let o=!1;function r(e){if(e=yt(e)){const r=dt.findKey(n,e);!r||t&&!vt(0,n[r],r,t)||(delete n[r],o=!0)}}return dt.isArray(e)?e.forEach(r):r(e),o}clear(e){const t=Object.keys(this);let n=t.length,o=!1;for(;n--;){const r=t[n];e&&!vt(0,this[r],r,e,!0)||(delete this[r],o=!0)}return o}normalize(e){const t=this,n={};return dt.forEach(this,(o,r)=>{const i=dt.findKey(n,r);if(i)return t[i]=_t(o),void delete t[r];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(r):String(r).trim();s!==r&&delete t[r],t[s]=_t(o),n[s]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return dt.forEach(this,(n,o)=>{null!=n&&!1!==n&&(t[o]=e&&dt.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[mt]=this[mt]={accessors:{}}).accessors,n=this.prototype;function o(e){const o=yt(e);t[o]||(!function(e,t){const n=dt.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+n,{__proto__:null,value:function(e,n,r){return this[o].call(this,t,e,n,r)},configurable:!0})})}(n,e),t[o]=!0)}return dt.isArray(e)?e.forEach(o):o(e),this}};wt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),dt.reduceDescriptors(wt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),dt.freezeMethods(wt);function St(e,t){const n=new Set(t.map(e=>String(e).toLowerCase())),o=[],r=e=>{if(null===e||"object"!=typeof e)return e;if(dt.isBuffer(e))return e;if(-1!==o.indexOf(e))return;let t;if(e instanceof wt&&(e=e.toJSON()),o.push(e),dt.isArray(e))t=[],e.forEach((e,n)=>{const o=r(e);dt.isUndefined(o)||(t[n]=o)});else{if(!dt.isPlainObject(e)&&function(e){if(dt.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(dt.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}(e))return o.pop(),e;t=Object.create(null);for(const[o,i]of Object.entries(e)){const e=n.has(o.toLowerCase())?"[REDACTED ****]":r(i);dt.isUndefined(e)||(t[o]=e)}}return o.pop(),t};return r(e)}let Ot=class e extends Error{static from(t,n,o,r,i,s){const a=new e(t.message,n||t.code,o,r,i);return a.cause=t,a.name=t.name,null!=t.status&&null==a.status&&(a.status=t.status),s&&Object.assign(a,s),a}constructor(e,t,n,o,r){super(e),Object.defineProperty(this,"message",{__proto__:null,value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),r&&(this.response=r,this.status=r.status)}toJSON(){const e=this.config,t=e&&dt.hasOwnProp(e,"redact")?e.redact:void 0,n=dt.isArray(t)&&t.length>0?St(e,t):dt.toJSONObject(e);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:n,code:this.code,status:this.status}}};Ot.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",Ot.ERR_BAD_OPTION="ERR_BAD_OPTION",Ot.ECONNABORTED="ECONNABORTED",Ot.ETIMEDOUT="ETIMEDOUT",Ot.ECONNREFUSED="ECONNREFUSED",Ot.ERR_NETWORK="ERR_NETWORK",Ot.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",Ot.ERR_DEPRECATED="ERR_DEPRECATED",Ot.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",Ot.ERR_BAD_REQUEST="ERR_BAD_REQUEST",Ot.ERR_CANCELED="ERR_CANCELED",Ot.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",Ot.ERR_INVALID_URL="ERR_INVALID_URL",Ot.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";function Et(e){return dt.isPlainObject(e)||dt.isArray(e)}function kt(e){return dt.endsWith(e,"[]")?e.slice(0,-2):e}function xt(e,t,n){return e?e.concat(t).map(function(e,t){return e=kt(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const Rt=dt.toFlatObject(dt,{},null,function(e){return/^is[A-Z]/.test(e)});function jt(e,t,n){if(!dt.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const o=(n=dt.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!dt.isUndefined(t[e])})).metaTokens,r=n.visitor||d,i=n.dots,s=n.indexes,a=n.Blob||"undefined"!=typeof Blob&&Blob,l=void 0===n.maxDepth?100:n.maxDepth,u=a&&dt.isSpecCompliantForm(t);if(!dt.isFunction(r))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(dt.isDate(e))return e.toISOString();if(dt.isBoolean(e))return e.toString();if(!u&&dt.isBlob(e))throw new Ot("Blob is not supported. Use a Buffer instead.");return dt.isArrayBuffer(e)||dt.isTypedArray(e)?u&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function d(e,n,r){let a=e;if(dt.isReactNative(t)&&dt.isReactNativeBlob(e))return t.append(xt(r,n,i),c(e)),!1;if(e&&!r&&"object"==typeof e)if(dt.endsWith(n,"{}"))n=o?n:n.slice(0,-2),e=JSON.stringify(e);else if(dt.isArray(e)&&function(e){return dt.isArray(e)&&!e.some(Et)}(e)||(dt.isFileList(e)||dt.endsWith(n,"[]"))&&(a=dt.toArray(e)))return n=kt(n),a.forEach(function(e,o){!dt.isUndefined(e)&&null!==e&&t.append(!0===s?xt([n],o,i):null===s?n:n+"[]",c(e))}),!1;return!!Et(e)||(t.append(xt(r,n,i),c(e)),!1)}const p=[],f=Object.assign(Rt,{defaultVisitor:d,convertValue:c,isVisitable:Et});if(!dt.isObject(e))throw new TypeError("data must be an object");return function e(n,o,i=0){if(!dt.isUndefined(n)){if(i>l)throw new Ot("Object is too deeply nested ("+i+" levels). Max depth: "+l,Ot.ERR_FORM_DATA_DEPTH_EXCEEDED);if(-1!==p.indexOf(n))throw new Error("Circular reference detected in "+o.join("."));p.push(n),dt.forEach(n,function(n,s){!0===(!(dt.isUndefined(n)||null===n)&&r.call(t,n,dt.isString(s)?s.trim():s,o,f))&&e(n,o?o.concat(s):[s],i+1)}),p.pop()}}(e),t}function Pt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(e){return t[e]})}function Ct(e,t){this._pairs=[],e&&jt(e,this,t)}const Nt=Ct.prototype;function Mt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Tt(e,t,n){if(!t)return e;const o=n&&n.encode||Mt,r=dt.isFunction(n)?{serialize:n}:n,i=r&&r.serialize;let s;if(s=i?i(t,r):dt.isURLSearchParams(t)?t.toString():new Ct(t,r).toString(o),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}Nt.append=function(e,t){this._pairs.push([e,t])},Nt.toString=function(e){const t=e?function(t){return e.call(this,t,Pt)}:Pt;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};class At{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){dt.forEach(this.handlers,function(t){null!==t&&e(t)})}}var Lt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1},It={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Ct,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const Ft="undefined"!=typeof window&&"undefined"!=typeof document,Dt="object"==typeof navigator&&navigator||void 0,qt=Ft&&(!Dt||["ReactNative","NativeScript","NS"].indexOf(Dt.product)<0),Ut="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,zt=Ft&&window.location.href||"http://localhost";var Bt={...Object.freeze({__proto__:null,hasBrowserEnv:Ft,hasStandardBrowserEnv:qt,hasStandardBrowserWebWorkerEnv:Ut,navigator:Dt,origin:zt}),...It};function Ht(e){function t(e,n,o,r){let i=e[r++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=r>=e.length;if(i=!i&&dt.isArray(o)?o.length:i,a)return dt.hasOwnProp(o,i)?o[i]=dt.isArray(o[i])?o[i].concat(n):[o[i],n]:o[i]=n,!s;dt.hasOwnProp(o,i)&&dt.isObject(o[i])||(o[i]=[]);return t(e,n,o[i],r)&&dt.isArray(o[i])&&(o[i]=function(e){const t={},n=Object.keys(e);let o;const r=n.length;let i;for(o=0;o<r;o++)i=n[o],t[i]=e[i];return t}(o[i])),!s}if(dt.isFormData(e)&&dt.isFunction(e.entries)){const n={};return dt.forEachEntry(e,(e,o)=>{t(function(e){return dt.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),o,n,0)}),n}return null}const Vt=(e,t)=>null!=e&&dt.hasOwnProp(e,t)?e[t]:void 0;const Wt={transitional:Lt,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",o=n.indexOf("application/json")>-1,r=dt.isObject(e);r&&dt.isHTMLForm(e)&&(e=new FormData(e));if(dt.isFormData(e))return o?JSON.stringify(Ht(e)):e;if(dt.isArrayBuffer(e)||dt.isBuffer(e)||dt.isStream(e)||dt.isFile(e)||dt.isBlob(e)||dt.isReadableStream(e))return e;if(dt.isArrayBufferView(e))return e.buffer;if(dt.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(r){const t=Vt(this,"formSerializer");if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return jt(e,new Bt.classes.URLSearchParams,{visitor:function(e,t,n,o){return Bt.isNode&&dt.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}(e,t).toString();if((i=dt.isFileList(e))||n.indexOf("multipart/form-data")>-1){const n=Vt(this,"env"),o=n&&n.FormData;return jt(i?{"files[]":e}:e,o&&new o,t)}}return r||o?(t.setContentType("application/json",!1),function(e,t,n){if(dt.isString(e))try{return(t||JSON.parse)(e),dt.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=Vt(this,"transitional")||Wt.transitional,n=t&&t.forcedJSONParsing,o=Vt(this,"responseType"),r="json"===o;if(dt.isResponse(e)||dt.isReadableStream(e))return e;if(e&&dt.isString(e)&&(n&&!o||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,Vt(this,"parseReviver"))}catch(e){if(n){if("SyntaxError"===e.name)throw Ot.from(e,Ot.ERR_BAD_RESPONSE,this,null,Vt(this,"response"));throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Bt.classes.FormData,Blob:Bt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};function $t(e,t){const n=this||Wt,o=t||n,r=wt.from(o.headers);let i=o.data;return dt.forEach(e,function(e){i=e.call(n,i,r.normalize(),t?t.status:void 0)}),r.normalize(),i}function Gt(e){return!(!e||!e.__CANCEL__)}dt.forEach(["delete","get","head","post","put","patch","query"],e=>{Wt.headers[e]={}});let Jt=class extends Ot{constructor(e,t,n){super(null==e?"canceled":e,Ot.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function Kt(e,t,n){const o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new Ot("Request failed with status code "+n.status,n.status>=400&&n.status<500?Ot.ERR_BAD_REQUEST:Ot.ERR_BAD_RESPONSE,n.config,n.request,n)):e(n)}const Zt=(e,t,n=3)=>{let o=0;const r=function(e,t){e=e||10;const n=new Array(e),o=new Array(e);let r,i=0,s=0;return t=void 0!==t?t:1e3,function(a){const l=Date.now(),u=o[s];r||(r=l),n[i]=a,o[i]=l;let c=s,d=0;for(;c!==i;)d+=n[c++],c%=e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),l-r<t)return;const p=u&&l-u;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,o,r=0,i=1e3/t;const s=(t,i=Date.now())=>{r=i,n=null,o&&(clearTimeout(o),o=null),e(...t)};return[(...e)=>{const t=Date.now(),a=t-r;a>=i?s(e,t):(n=e,o||(o=setTimeout(()=>{o=null,s(n)},i-a)))},()=>n&&s(n)]}(n=>{if(!n||"number"!=typeof n.loaded)return;const i=n.loaded,s=n.lengthComputable?n.total:void 0,a=null!=s?Math.min(i,s):i,l=Math.max(0,a-o),u=r(l);o=Math.max(o,a);e({loaded:a,total:s,progress:s?a/s:void 0,bytes:l,rate:u||void 0,estimated:u&&s?(s-a)/u:void 0,event:n,lengthComputable:null!=s,[t?"download":"upload"]:!0})},n)},Xt=(e,t)=>{const n=null!=e;return[o=>t[0]({lengthComputable:n,total:e,loaded:o}),t[1]]},Qt=e=>(...t)=>dt.asap(()=>e(...t));var Yt=Bt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Bt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Bt.origin),Bt.navigator&&/(msie|trident)/i.test(Bt.navigator.userAgent)):()=>!0,en=Bt.hasStandardBrowserEnv?{write(e,t,n,o,r,i,s){if("undefined"==typeof document)return;const a=[`${e}=${encodeURIComponent(t)}`];dt.isNumber(n)&&a.push(`expires=${new Date(n).toUTCString()}`),dt.isString(o)&&a.push(`path=${o}`),dt.isString(r)&&a.push(`domain=${r}`),!0===i&&a.push("secure"),dt.isString(s)&&a.push(`SameSite=${s}`),document.cookie=a.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.split(";");for(let n=0;n<t.length;n++){const o=t[n].replace(/^\s+/,""),r=o.indexOf("=");if(-1!==r&&o.slice(0,r)===e)return decodeURIComponent(o.slice(r+1))}return null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function tn(e,t,n){let o=!("string"==typeof(r=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r));var r;return e&&(o||!1===n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const nn=e=>e instanceof wt?{...e}:e;function on(e,t){t=t||{};const n=Object.create(null);function o(e,t,n,o){return dt.isPlainObject(e)&&dt.isPlainObject(t)?dt.merge.call({caseless:o},e,t):dt.isPlainObject(t)?dt.merge({},t):dt.isArray(t)?t.slice():t}function r(e,t,n,r){return dt.isUndefined(t)?dt.isUndefined(e)?void 0:o(void 0,e,0,r):o(e,t,0,r)}function i(e,t){if(!dt.isUndefined(t))return o(void 0,t)}function s(e,t){return dt.isUndefined(t)?dt.isUndefined(e)?void 0:o(void 0,e):o(void 0,t)}function a(n,r,i){return dt.hasOwnProp(t,i)?o(n,r):dt.hasOwnProp(e,i)?o(void 0,n):void 0}Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});const l={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,allowedSocketPaths:s,responseEncoding:s,validateStatus:a,headers:(e,t,n)=>r(nn(e),nn(t),0,!0)};return dt.forEach(Object.keys({...e,...t}),function(o){if("__proto__"===o||"constructor"===o||"prototype"===o)return;const i=dt.hasOwnProp(l,o)?l[o]:r,s=i(dt.hasOwnProp(e,o)?e[o]:void 0,dt.hasOwnProp(t,o)?t[o]:void 0,o);dt.isUndefined(s)&&i!==a||(n[o]=s)}),n}const rn=["content-type","content-length"];function sn(e){const t=on({},e),n=e=>dt.hasOwnProp(t,e)?t[e]:void 0,o=n("data");let r=n("withXSRFToken");const i=n("xsrfHeaderName"),s=n("xsrfCookieName");let a=n("headers");const l=n("auth"),u=n("baseURL"),c=n("allowAbsoluteUrls"),d=n("url");var p;if(t.headers=a=wt.from(a),t.url=Tt(tn(u,d,c),n("params"),n("paramsSerializer")),l&&a.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?(p=l.password,encodeURIComponent(p).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16)))):""))),dt.isFormData(o)&&(Bt.hasStandardBrowserEnv||Bt.hasStandardBrowserWebWorkerEnv||dt.isReactNative(o)?a.setContentType(void 0):dt.isFunction(o.getHeaders)&&function(e,t,n){"content-only"===n?Object.entries(t).forEach(([t,n])=>{rn.includes(t.toLowerCase())&&e.set(t,n)}):e.set(t)}(a,o.getHeaders(),n("formDataHeaderPolicy"))),Bt.hasStandardBrowserEnv){dt.isFunction(r)&&(r=r(t));if(!0===r||null==r&&Yt(t.url)){const e=i&&s&&en.read(s);e&&a.set(i,e)}}return t}var an="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const o=sn(e);let r=o.data;const i=wt.from(o.headers).normalize();let s,a,l,u,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=o;function h(){u&&u(),c&&c(),o.cancelToken&&o.cancelToken.unsubscribe(s),o.signal&&o.signal.removeEventListener("abort",s)}let g=new XMLHttpRequest;function b(){if(!g)return;const o=wt.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());Kt(function(e){t(e),h()},function(e){n(e),h()},{data:d&&"text"!==d&&"json"!==d?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:o,config:e,request:g}),g=null}g.open(o.method.toUpperCase(),o.url,!0),g.timeout=o.timeout,"onloadend"in g?g.onloadend=b:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&g.responseURL.startsWith("file:"))&&setTimeout(b)},g.onabort=function(){g&&(n(new Ot("Request aborted",Ot.ECONNABORTED,e,g)),h(),g=null)},g.onerror=function(t){const o=t&&t.message?t.message:"Network Error",r=new Ot(o,Ot.ERR_NETWORK,e,g);r.event=t||null,n(r),h(),g=null},g.ontimeout=function(){let t=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const r=o.transitional||Lt;o.timeoutErrorMessage&&(t=o.timeoutErrorMessage),n(new Ot(t,r.clarifyTimeoutError?Ot.ETIMEDOUT:Ot.ECONNABORTED,e,g)),h(),g=null},void 0===r&&i.setContentType(null),"setRequestHeader"in g&&dt.forEach(bt(i),function(e,t){g.setRequestHeader(t,e)}),dt.isUndefined(o.withCredentials)||(g.withCredentials=!!o.withCredentials),d&&"json"!==d&&(g.responseType=o.responseType),f&&([l,c]=Zt(f,!0),g.addEventListener("progress",l)),p&&g.upload&&([a,u]=Zt(p),g.upload.addEventListener("progress",a),g.upload.addEventListener("loadend",u)),(o.cancelToken||o.signal)&&(s=t=>{g&&(n(!t||t.type?new Jt(null,e,g):t),g.abort(),h(),g=null)},o.cancelToken&&o.cancelToken.subscribe(s),o.signal&&(o.signal.aborted?s():o.signal.addEventListener("abort",s)));const m=function(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}(o.url);!m||Bt.protocols.includes(m)?g.send(r||null):n(new Ot("Unsupported protocol "+m+":",Ot.ERR_BAD_REQUEST,e))})};const ln=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let o=!1;const r=function(e){if(!o){o=!0,s();const t=e instanceof Error?e:this.reason;n.abort(t instanceof Ot?t:new Jt(t instanceof Error?t.message:t))}};let i=t&&setTimeout(()=>{i=null,r(new Ot(`timeout of ${t}ms exceeded`,Ot.ETIMEDOUT))},t);const s=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(r):e.removeEventListener("abort",r)}),e=null)};e.forEach(e=>e.addEventListener("abort",r));const{signal:a}=n;return a.unsubscribe=()=>dt.asap(s),a},un=function*(e,t){let n=e.byteLength;if(n<t)return void(yield e);let o,r=0;for(;r<n;)o=r+t,yield e.slice(r,o),r=o},cn=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},dn=(e,t,n,o)=>{const r=async function*(e,t){for await(const n of cn(e))yield*un(n,t)}(e,t);let i,s=0,a=e=>{i||(i=!0,o&&o(e))};return new ReadableStream({async pull(e){try{const{done:t,value:o}=await r.next();if(t)return a(),void e.close();let i=o.byteLength;if(n){let e=s+=i;n(e)}e.enqueue(new Uint8Array(o))}catch(e){throw a(e),e}},cancel:e=>(a(e),r.return())},{highWaterMark:2})};const pn="1.17.0",{isFunction:fn}=dt,hn=e=>{if(!dt.isString(e))return e;try{return decodeURIComponent(e)}catch(t){return e}},gn=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},bn=e=>{const t=void 0!==dt.global&&null!==dt.global?dt.global:globalThis,{ReadableStream:n,TextEncoder:o}=t;e=dt.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:r,Request:i,Response:s}=e,a=r?fn(r):"function"==typeof fetch,l=fn(i),u=fn(s);if(!a)return!1;const c=a&&fn(n),d=a&&("function"==typeof o?(p=new o,e=>p.encode(e)):async e=>new Uint8Array(await new i(e).arrayBuffer()));var p;const f=l&&c&&gn(()=>{let e=!1;const t=new i(Bt.origin,{body:new n,method:"POST",get duplex(){return e=!0,"half"}}),o=t.headers.has("Content-Type");return null!=t.body&&t.body.cancel(),e&&!o}),h=u&&c&&gn(()=>dt.isReadableStream(new s("").body)),g={stream:h&&(e=>e.body)};a&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!g[e]&&(g[e]=(t,n)=>{let o=t&&t[e];if(o)return o.call(t);throw new Ot(`Response type '${e}' is not supported`,Ot.ERR_NOT_SUPPORT,n)})});const b=async(e,t)=>{const n=dt.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(dt.isBlob(e))return e.size;if(dt.isSpecCompliantForm(e)){const t=new i(Bt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return dt.isArrayBufferView(e)||dt.isArrayBuffer(e)?e.byteLength:(dt.isURLSearchParams(e)&&(e+=""),dt.isString(e)?(await d(e)).byteLength:void 0)})(t):n};return async e=>{let{url:t,method:n,data:a,signal:u,cancelToken:c,timeout:d,onDownloadProgress:p,onUploadProgress:m,responseType:y,headers:_,withCredentials:v="same-origin",fetchOptions:w,maxContentLength:S,maxBodyLength:O}=sn(e);const E=dt.isNumber(S)&&S>-1,k=dt.isNumber(O)&&O>-1;let x=r||fetch;y=y?(y+"").toLowerCase():"text";let R=ln([u,c&&c.toAbortSignal()],d),j=null;const P=R&&R.unsubscribe&&(()=>{R.unsubscribe()});let C;try{let r;const u=(M="auth",dt.hasOwnProp(e,M)?e[M]:void 0);if(u){const e=u.username||"";r={username:e,password:u.password||""}}if((e=>{const t=e.indexOf("://");let n=e;return-1!==t&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")})(t)){const e=new URL(t,Bt.origin);if(!r&&(e.username||e.password)){const t=hn(e.username);r={username:t,password:hn(e.password)}}(e.username||e.password)&&(e.username="",e.password="",t=e.href)}if(r&&(_.delete("authorization"),_.set("Authorization","Basic "+btoa((N=(r.username||"")+":"+(r.password||""),encodeURIComponent(N).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16))))))),E&&"string"==typeof t&&t.startsWith("data:")){const n=function(e){if(!e||"string"!=typeof e)return 0;if(!e.startsWith("data:"))return 0;const t=e.indexOf(",");if(t<0)return 0;const n=e.slice(5,t),o=e.slice(t+1);if(/;base64/i.test(n)){let e=o.length;const t=o.length;for(let n=0;n<t;n++)if(37===o.charCodeAt(n)&&n+2<t){const t=o.charCodeAt(n+1),r=o.charCodeAt(n+2);(t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102)&&(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102)&&(e-=2,n+=2)}let n=0,r=t-1;const i=e=>e>=2&&37===o.charCodeAt(e-2)&&51===o.charCodeAt(e-1)&&(68===o.charCodeAt(e)||100===o.charCodeAt(e));r>=0&&(61===o.charCodeAt(r)?(n++,r--):i(r)&&(n++,r-=3)),1===n&&r>=0&&(61===o.charCodeAt(r)||i(r))&&n++;const s=3*Math.floor(e/4)-(n||0);return s>0?s:0}if("undefined"!=typeof Buffer&&"function"==typeof Buffer.byteLength)return Buffer.byteLength(o,"utf8");let r=0;for(let e=0,t=o.length;e<t;e++){const n=o.charCodeAt(e);if(n<128)r+=1;else if(n<2048)r+=2;else if(n>=55296&&n<=56319&&e+1<t){const t=o.charCodeAt(e+1);t>=56320&&t<=57343?(r+=4,e++):r+=3}else r+=3}return r}(t);if(n>S)throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j)}if(k&&"get"!==n&&"head"!==n){const t=await b(_,a);if("number"==typeof t&&isFinite(t)&&t>O)throw new Ot("Request body larger than maxBodyLength limit",Ot.ERR_BAD_REQUEST,e,j)}if(m&&f&&"get"!==n&&"head"!==n&&0!==(C=await b(_,a))){let e,n=new i(t,{method:"POST",body:a,duplex:"half"});if(dt.isFormData(a)&&(e=n.headers.get("content-type"))&&_.setContentType(e),n.body){const[e,t]=Xt(C,Zt(Qt(m)));a=dn(n.body,65536,e,t)}}dt.isString(v)||(v=v?"include":"omit");const c=l&&"credentials"in i.prototype;if(dt.isFormData(a)){const e=_.getContentType();e&&/^multipart\/form-data/i.test(e)&&!/boundary=/i.test(e)&&_.delete("content-type")}_.set("User-Agent","axios/"+pn,!1);const d={...w,signal:R,method:n.toUpperCase(),headers:bt(_.normalize()),body:a,duplex:"half",credentials:c?v:void 0};j=l&&new i(t,d);let T=await(l?x(j,w):x(t,d));if(E){const t=dt.toFiniteNumber(T.headers.get("content-length"));if(null!=t&&t>S)throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j)}const A=h&&("stream"===y||"response"===y);if(h&&T.body&&(p||E||A&&P)){const t={};["status","statusText","headers"].forEach(e=>{t[e]=T[e]});const n=dt.toFiniteNumber(T.headers.get("content-length")),[o,r]=p&&Xt(n,Zt(Qt(p),!0))||[];let i=0;const a=t=>{if(E&&(i=t,i>S))throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j);o&&o(t)};T=new s(dn(T.body,65536,a,()=>{r&&r(),P&&P()}),t)}y=y||"text";let L=await g[dt.findKey(g,y)||"text"](T,e);if(E&&!h&&!A){let t;if(null!=L&&("number"==typeof L.byteLength?t=L.byteLength:"number"==typeof L.size?t=L.size:"string"==typeof L&&(t="function"==typeof o?(new o).encode(L).byteLength:L.length)),"number"==typeof t&&t>S)throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j)}return!A&&P&&P(),await new Promise((t,n)=>{Kt(t,n,{data:L,headers:wt.from(T.headers),status:T.status,statusText:T.statusText,config:e,request:j})})}catch(t){if(P&&P(),R&&R.aborted&&R.reason instanceof Ot){const n=R.reason;throw n.config=e,j&&(n.request=j),t!==n&&(n.cause=t),n}if(t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new Ot("Network Error",Ot.ERR_NETWORK,e,j,t&&t.response),{cause:t.cause||t});throw Ot.from(t,t&&t.code,e,j,t&&t.response)}var N,M}},mn=new Map,yn=e=>{let t=e&&e.env||{};const{fetch:n,Request:o,Response:r}=t,i=[o,r,n];let s,a,l=i.length,u=mn;for(;l--;)s=i[l],a=u.get(s),void 0===a&&u.set(s,a=l?new Map:bn(t)),u=a;return a};yn();const _n={http:null,xhr:an,fetch:{get:yn}};dt.forEach(_n,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch(e){}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const vn=e=>`- ${e}`,wn=e=>dt.isFunction(e)||null===e||!1===e;var Sn={getAdapter:function(e,t){e=dt.isArray(e)?e:[e];const{length:n}=e;let o,r;const i={};for(let s=0;s<n;s++){let n;if(o=e[s],r=o,!wn(o)&&(r=_n[(n=String(o)).toLowerCase()],void 0===r))throw new Ot(`Unknown adapter '${n}'`);if(r&&(dt.isFunction(r)||(r=r.get(t))))break;i[n||"#"+s]=r}if(!r){const e=Object.entries(i).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(vn).join("\n"):" "+vn(e[0]):"as no adapter specified";throw new Ot("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return r},adapters:_n};function On(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Jt(null,e)}function En(e){On(e),e.headers=wt.from(e.headers),e.data=$t.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Sn.getAdapter(e.adapter||Wt.adapter,e)(e).then(function(t){On(e),e.response=t;try{t.data=$t.call(e,e.transformResponse,t)}finally{delete e.response}return t.headers=wt.from(t.headers),t},function(t){if(!Gt(t)&&(On(e),t&&t.response)){e.response=t.response;try{t.response.data=$t.call(e,e.transformResponse,t.response)}finally{delete e.response}t.response.headers=wt.from(t.response.headers)}return Promise.reject(t)})}const kn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{kn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const xn={};kn.transitional=function(e,t,n){function o(e,t){return"[Axios v"+pn+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,r,i)=>{if(!1===e)throw new Ot(o(r," has been removed"+(t?" in "+t:"")),Ot.ERR_DEPRECATED);return t&&!xn[r]&&(xn[r]=!0,console.warn(o(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,i)}},kn.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var Rn={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Ot("options must be an object",Ot.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let r=o.length;for(;r-- >0;){const i=o[r],s=Object.prototype.hasOwnProperty.call(t,i)?t[i]:void 0;if(s){const t=e[i],n=void 0===t||s(t,i,e);if(!0!==n)throw new Ot("option "+i+" must be "+n,Ot.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new Ot("Unknown option "+i,Ot.ERR_BAD_OPTION)}},validators:kn};const jn=Rn.validators;let Pn=class{constructor(e){this.defaults=e||{},this.interceptors={request:new At,response:new At}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=(()=>{if(!t.stack)return"";const e=t.stack.indexOf("\n");return-1===e?"":t.stack.slice(e+1)})();try{if(e.stack){if(n){const t=n.indexOf("\n"),o=-1===t?-1:n.indexOf("\n",t+1),r=-1===o?"":n.slice(o+1);String(e.stack).endsWith(r)||(e.stack+="\n"+n)}}else e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=on(this.defaults,t);const{transitional:n,paramsSerializer:o,headers:r}=t;void 0!==n&&Rn.assertOptions(n,{silentJSONParsing:jn.transitional(jn.boolean),forcedJSONParsing:jn.transitional(jn.boolean),clarifyTimeoutError:jn.transitional(jn.boolean),legacyInterceptorReqResOrdering:jn.transitional(jn.boolean),advertiseZstdAcceptEncoding:jn.transitional(jn.boolean)},!1),null!=o&&(dt.isFunction(o)?t.paramsSerializer={serialize:o}:Rn.assertOptions(o,{encode:jn.function,serialize:jn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Rn.assertOptions(t,{baseUrl:jn.spelling("baseURL"),withXsrfToken:jn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=r&&dt.merge(r.common,r[t.method]);r&&dt.forEach(["delete","get","head","post","put","patch","query","common"],e=>{delete r[e]}),t.headers=wt.concat(i,r);const s=[];let a=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;a=a&&e.synchronous;const n=t.transitional||Lt;n&&n.legacyInterceptorReqResOrdering?s.unshift(e.fulfilled,e.rejected):s.push(e.fulfilled,e.rejected)});const l=[];let u;this.interceptors.response.forEach(function(e){l.push(e.fulfilled,e.rejected)});let c,d=0;if(!a){const e=[En.bind(this),void 0];for(e.unshift(...s),e.push(...l),c=e.length,u=Promise.resolve(t);d<c;)u=u.then(e[d++],e[d++]);return u}c=s.length;let p=t;for(;d<c;){const e=s[d++],t=s[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{u=En.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=l.length;d<c;)u=u.then(l[d++],l[d++]);return u}getUri(e){return Tt(tn((e=on(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}};dt.forEach(["delete","get","head","options"],function(e){Pn.prototype[e]=function(t,n){return this.request(on(n||{},{method:e,url:t,data:(n||{}).data}))}}),dt.forEach(["post","put","patch","query"],function(e){function t(t){return function(n,o,r){return this.request(on(r||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:o}))}}Pn.prototype[e]=t(),"query"!==e&&(Pn.prototype[e+"Form"]=t(!0))});const Cn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Cn).forEach(([e,t])=>{Cn[t]=e});const Nn=function e(t){const n=new Pn(t),o=ye(Pn.prototype.request,n);return dt.extend(o,Pn.prototype,n,{allOwnKeys:!0}),dt.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(on(t,n))},o}(Wt);Nn.Axios=Pn,Nn.CanceledError=Jt,Nn.CancelToken=class e{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const o=new Promise(e=>{n.subscribe(e),t=e}).then(e);return o.cancel=function(){n.unsubscribe(t)},o},e(function(e,o,r){n.reason||(n.reason=new Jt(e,o,r),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}},Nn.isCancel=Gt,Nn.VERSION=pn,Nn.toFormData=jt,Nn.AxiosError=Ot,Nn.Cancel=Nn.CanceledError,Nn.all=function(e){return Promise.all(e)},Nn.spread=function(e){return function(t){return e.apply(null,t)}},Nn.isAxiosError=function(e){return dt.isObject(e)&&!0===e.isAxiosError},Nn.mergeConfig=on,Nn.AxiosHeaders=wt,Nn.formToJSON=e=>Ht(dt.isHTMLForm(e)?new FormData(e):e),Nn.getAdapter=Sn.getAdapter,Nn.HttpStatusCode=Cn,Nn.default=Nn;const{Axios:Mn,AxiosError:Tn,CanceledError:An,isCancel:Ln,CancelToken:In,VERSION:Fn,all:Dn,Cancel:qn,isAxiosError:Un,spread:zn,toFormData:Bn,AxiosHeaders:Hn,HttpStatusCode:Vn,formToJSON:Wn,getAdapter:$n,mergeConfig:Gn,create:Jn}=Nn;function Kn(e,t){return e?Object.keys(e).map(n=>{const o=t||n,r=e[n];return"object"==typeof r?Kn(r,o):`${encodeURIComponent(o)}=${encodeURIComponent(r)}`}).join("&"):""}function Zn(e,t){return Nn.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+Kn(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)}function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Qn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Xn(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yn(e,t,n,o,r,i,s,a){const l=e?e.trim():null;if(null==l||l.length<1||s&&!s.test(l))return Promise.resolve([]);const u=i||"https://api.digitransit.fi/geocoding/v1/search";let c=Qn(Qn(Qn({text:l},t),o),{},{lang:n});if(r&&(c=Qn(Qn({},c),{},{sources:r})),a){const e=a.toString();c=Qn(Qn({},c),{},{layers:e})}return Zn(u,c).then(e=>e.features)}function eo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function to(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eo(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function no(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const o=e.map(e=>{const t="stop"===e.type?"stop":"station";let o=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(o+=`#${e.code}`),n+=`${o},`,to(to({},e),{},{gid:o})}).reduce(function(e,t){return e[t.gid]=t,e},{});return Zn(t,{ids:n.slice(0,-1)}).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:o[e.properties.gid].gid,code:o[e.properties.gid].code,gtfsId:o[e.properties.gid].gtfsId,lastUpdated:o[e.properties.gid].lastUpdated,favouriteId:o[e.properties.gid].favouriteId,address:e.properties.label,layer:fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))}function oo(e,t,n){let o=me(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter(e=>!n.includes(e.properties.layer))),Promise.resolve(P.default(o,10).map(e=>{const t=to(to({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const ro=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],io=["venue","address","street"],so=["carpark","bikepark"],ao=["stop","station"];const lo=R.default(function(e,t,n,o,r,i,{input:s},a,l,u){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:f,parkingAreaSources:h,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:_,getFavouriteRoutes:v,getRoutesQuery:w,context:S,isPeliasLocationAware:O,minimalRegexp:E,lineRegexp:k,URL_PELIAS:x,URL_PELIAS_PLACE:R,feedIDs:C,geocodingSearchParams:N,geocodingSources:M,getFutureRoutes:T,cityBikeNetworks:A}=o,L=!e||0===e.length,I=!t||0===t.length,F=c(S),D=[],q={type:"all",term:s,results:[]},U=g(S),z=O&&u?.lat&&u?.lon?{"focus.point.lat":u.lat.toFixed(3),"focus.point.lon":u.lon.toFixed(3)}:{},B=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==F.status&&D.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(s,F)),(L||e.includes("MapPosition"))&&D.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(s)),e.includes("FutureRoutes")){const e=T(S);D.push(P.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if(t?.length>0)return!0;const n=e.getFavouriteVehicleRentalStations(e.context);if(n?.length>0)return!0;const o=e.getFavouriteStops(e.context);return o?.length>0}(o)&&D.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(s)),L||e.includes("Locations")){const n=N;if(t.includes("Favourite")){const e=d(S);D.push(function(e,t){return Promise.resolve(me(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:to(to({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,s)),t.includes("Back")&&D.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(I||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),D.push(Yn(s,n,U,z,M.join(","),x,E,t))}if(I||t.includes("History")){const e=p(S,"endpoint"),t=["bikestation"];t.push(...ao),t.push(...ro),t.push(...so),D.push(oo(e,s,t))}}if(L||e.includes("ParkingAreas")){if(I||t.includes("Datasource")){const e=N;i&&10!==i&&(e.size=i);const t=["carpark","bikepark"],n=h?h.join(","):null;D.push(Yn(s,e,U,z,n,x,E,t).then(e=>r?r(e,B):e))}if(I||t.includes("History")){const e=p(S),t=["bikestation"];t.push(...ao),t.push(...ro),t.push(...io),D.push(oo(e,s,t))}}const H=e.includes("Stops"),V=e.includes("Stations");if(L||H||V){if(t.includes("Favourite")){const e=f(S);let t;t=e.every(e=>"station"===e.type)?no(e,R).then(e=>r?r(e,B):e):b(e).then(e=>no(e,R)).then(e=>r?r(e,B):e),D.push(function(e,t,n,o){return e.then(e=>me(e.filter(e=>"stop"===e.type?n:o),t,["properties.name","properties.name","properties.address"]))}(t,s,H,V))}if(I||t.includes("Datasource")){const t=[];H&&t.push("stop"),V&&t.push("station");const n=i&&10!==i?{size:i}:{};N&&N["boundary.country"]&&(n["boundary.country"]=N["boundary.country"]),(L||e.includes("Locations"))&&(n.dedupestops=1);const o=C.map(e=>`gtfs${e}`).join(",");D.push(Yn(s,n,U,z,o,x,E,t).then(e=>r?r(e,B):e))}if(I||t.includes("History")){const e=p(S).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...ro),t.push(...io),t.push(...so),H||t.push("stop"),V||t.push("station"),n?D.push(oo(e,s,t).then(e=>r?r(e,B):e)):D.push(oo(e,s,t))}}if(L||e.includes("Routes")){if(t.includes("Favourite")){const e=v(S);D.push(_(e,s,B,l).then(e=>r?r(e,B,"Routes"):e))}if(D.push(w(s,C,n,l).then(e=>r?r(e,B,"Routes"):e)),I||t.includes("History")){const e=p(S),t=["bikestation"];n&&t.push(...ro.filter(e=>!(e===n))),t.push(...ao),t.push(...io),t.push(...so),D.push(oo(e,s,t).then(e=>r?r(e,B,"Routes"):e))}}if(L||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(S);D.push(m(e,s))}if(I||t.includes("Datasource")){const e=["bikestation"],t=i&&10!==i?{size:i}:{};D.push(Yn(s,t,U,z,A.join(","),x,E,e).then(e=>r?r(e,B,"VehicleRentalStations"):e))}if(I||t.includes("History")){const e=p(S),t=[...ao];t.push(...ro),t.push(...io),t.push(...so),D.push(oo(e,s,t))}}Promise.all(D).then(j.default).then(e=>{q.results=e}).catch(e=>{q.error=e}).then(()=>{a(to(to({},q),{},{results:ge(k,q.results,s)}))})},300,{leading:!0}),uo=h.createInstance({fallbackLng:"fi",resources:{de:{translation:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",address:"Adresse","address-place-or-business":"Adress, Ort or Geschäft",airplane:"Flug",arrival:"Ankunft",back:"Zurück",bikerentalstation:"Leihrad-Station",bus:"Bus",cancel:"Abbrechen","clear-button-label":"Löschen","clear-search-history":"Suchhistorie löschen",currentposition:"Aktuelle Position",delete:"Löschen","delete-old-searches-header":"Wollen Sie die Such-Historie löschen?",departure:"Abfahrt",destination:"Ziel",favourite:"Favoriten",ferry:"Fähre","future-route":"Zukünftige Verbindung","give-destination":"Ziel eingeben.","give-origin":"Start eingeben.",loading:"Laden...","minute-short":"min",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Eigene Favoriten",place:"Ort",rail:"Zug",search:"Suche","search-address-or-place":"Suche anhand von Adresse oder Ortsangabe","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-button-label":"Suche","search-current-suggestion":"Aktuelle Auswahl: {{selection}}","search-destination":"Suche Zielort, Linie or Haltestelle","search-destination-index":"Zielort eingeben","search-destination-results-but-no-search":"Ergebnisse in “Zielort”-Reiter anzeigen","search-no-results":"Kein Ort gefunden.","search-origin":"Suche Startort, Linie oder Haltestelle","search-origin-index":"Startort eingeben","search-position":"Standort ermitteln","select-from-map":"Wähle Position anhand Karte","select-from-own-locations":"Aus eigenen Favoriten auswählen",station:"Station",stop:"Haltestelle","stop-near-you":"Suche Haltestellen und Linien in der Nähe","stop-near-you-bus":"Suche Buslinien or Haltestellen","stop-near-you-citybike":"Suche Leihrad-Stationen","stop-near-you-rail":"Suche Zugverbindungen oder Bahnhöfe","stop-near-you-subway":"Suche U-Bahn-Linien oder Haltestellen","stop-near-you-tram":"Suche Stadtbahn-Haltestellen-Suche",street:"Straße",subway:"U-Bahn","today-at":"Heute um","tomorrow-at":"Morgen um",tram:"Straßenbahn","use-own-position":"Benutze aktuellen Standort",venue:"Venue","via-point":"Zwischenziel",where:"Wohin?"}},en:{translation:{"add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",address:"Address","address-place-or-business":"Address, place or business",airplane:"Flight",arrival:"Arrival",back:"Back",bikepark:"Park & Ride for bikes",bikerentalstation:"Bike station",bus:"bus",cancel:"Cancel",carpark:"Park & Ride","clear-button-label":"Clear","clear-search-history":"Clear search history",currentposition:"Current position",delete:"Delete","delete-old-searches-header":"Do you want to clear the search history?",departure:"Departure",destination:"Destination",favourite:"Favourite",ferry:"Ferry","future-route":"Future route","give-destination":"Enter your destination","give-origin":"Enter your origin.",loading:"Loading...","minute-short":"m",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Own locations",place:"Location",platform:"Platform",rail:"Train",required:"required field",search:"Search","search-address-or-place":"Search by address or place name","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-button-label":"Search","search-current-suggestion":"Current selection: {{selection}}","search-destination":"Search destination, route or stop","search-destination-index":"Enter destination","search-destination-results-but-no-search":"View results in the adjacent “Destination” tab","search-no-results":"No location","search-origin":"Search origin, route or stop","search-origin-index":"Enter origin","search-position":"Detect location","select-from-map":"Select position from map","select-from-own-locations":"Select from own locations",station:"Station",stop:"Stop","stop-near-you":"Search stops and routes","stop-near-you-airplane":"Search flights or airports","stop-near-you-bikepark":"Search bike parks","stop-near-you-bus":"Search bus routes or stops","stop-near-you-carpark":"Search car parks","stop-near-you-citybike":"Search city bike stations","stop-near-you-rail":"Search train routes or stations","stop-near-you-subway":"Search metro routes or stations ","stop-near-you-tram":"Search tram routes or stops","stop-route-station":"Bus and stop search",street:"Street",subway:"Metro","today-at":"today at","tomorrow-at":"tomorrow at",track:"Track",tram:"Tram","use-own-position":"Use current location",venue:"Venue","via-point":"Via point",where:"Where to?"}},fi:{translation:{"add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin",address:"Osoite","address-place-or-business":"Osoite, paikka tai yritys",airplane:"Lentokone",arrival:"Perillä",back:"Takaisin",bikepark:"Liityntäpysäköinti",bikerentalstation:"Pyöräasema",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","clear-button-label":"Tyhjennä","clear-search-history":"Tyhjennä hakuhistoria",currentposition:"Tämänhetkinen sijainti",delete:"Poista","delete-old-searches-header":"Haluatko tyhjentää hakuhistorian?",departure:"Lähtöaika",destination:"Määränpää",favourite:"Suosikki",ferry:"Lautta","future-route":"Tuleva reitti","give-destination":"Määränpää","give-origin":"Lähtöpaikka",loading:"Ladataan...","minute-short":"min",origin:"Lähtöpaikka","origin-stop-near-you":"Lähtöpaikka",ownlocations:"Omat paikat",place:"Paikka",platform:"Laituri",rail:"Juna",required:"pakollinen kenttä",search:"Etsi","search-address-or-place":"Hae osoitteella tai paikan nimellä","search-autosuggest-label":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","search-autosuggest-len":" Löydettiin {{count}} ehdotus","search-autosuggest-len_plural":" Löydettiin {{count}} ehdotusta","search-button-label":"Hae","search-current-suggestion":"Tämänhetkinen valinta: {{selection}}","search-destination":"Hae määränpäätä, linjaa tai pysäkkiä","search-destination-index":"Syötä määränpää","search-destination-results-but-no-search":"Katso tulokset viereiseltä Määränpää-välilehdeltä","search-no-results":"Ei tuloksia","search-origin":"Hae lähtöpaikkaa, linjaa tai pysäkkiä","search-origin-index":"Syötä lähtöpaikka","search-position":"Paikanna","select-from-map":"Valitse sijainti kartalta","select-from-own-locations":"Valitse omista paikoista",station:"Asema",stop:"Pysäkki","stop-near-you":"Linja, pysäkki tai asema","stop-near-you-airplane":"Hae lentoja tai lentoasemaa","stop-near-you-bikepark":"Hae pyöräparkkia","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-carpark":"Hae autoparkkia","stop-near-you-citybike":"Hae kaupunkipyöräasemaa","stop-near-you-rail":"Hae lähijunaa tai asemaa","stop-near-you-subway":"Hae metrolinjaa tai asemaa","stop-near-you-tram":"Hae raitiolinjaa tai pysäkkiä","stop-route-station":"Linja- ja pysäkkihaku",street:"Katu",subway:"Metro","today-at":"tänään klo","tomorrow-at":"huomenna klo",track:"Raide",tram:"Raitiovaunu","use-own-position":"Käytä nykyistä sijaintia",venue:"Paikka","via-point":"Välipiste",where:"Minne mennään?"}},pl:{translation:{"add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",address:"Adres","address-place-or-business":"Adres, miejsce lub firma",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa","give-destination":"Wprowadź swój cel","give-origin":"Wprowadź swój punkt początkowy.",loading:"Ładowanie…","minute-short":"min.",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",place:"Miejsce",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-button-label":"Szukaj","search-current-suggestion":"Obecny wybór: {{selection}}","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków",street:"Ulica",subway:"Metro","today-at":"dziś o","tomorrow-at":"jutro o",track:"Tor",tram:"Tramwaj","use-own-position":"Użyj obecnej lokalizacji",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?"}},sv:{translation:{"add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}",address:"Adress","address-place-or-business":"Adress, plats eller företag",airplane:"Flyg",arrival:"Anländer",back:"Tillbaka",bikepark:"Anslutningsparkering för cyklar",bikerentalstation:"Stadscykelstation",bus:"Bussi",cancel:"Avbryt",carpark:"Infartsparkering","clear-button-label":"Töm","clear-search-history":"Töm sökhistoriken",currentposition:"Nuvarande position",delete:"Ta bort","delete-old-searches-header":"Vill du tömma sökhistoriken?",departure:"Avgångstid",destination:"Destination",favourite:"Favorit",ferry:"Färja","future-route":"Framtida rutt","give-destination":"Skriv in din destination","give-origin":"Skriv in din avfärdsplats",loading:"Laddar...","minute-short":"min",origin:"Avfärdsplats","origin-stop-near-you":"Avfärdsplats",ownlocations:"Egna platser",place:"Plats",platform:"Plattform",rail:"Tåg",required:"obligatoriskt fält",search:"Sök","search-address-or-place":"Sök med adressen eller platsens namn","search-autosuggest-label":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","search-autosuggest-len":"Hittade {{count}} förslag","search-autosuggest-len_plural":"Hittade {{count}} förslag","search-button-label":"Sök","search-current-suggestion":"Nuvarande val: {{selection}}","search-destination":"Sök destination, linje eller hållplats","search-destination-index":"Skriv destination","search-destination-results-but-no-search":"Se resultaten under fliken Destination","search-no-results":"Inga sökresultat","search-origin":"Sök avfärdsplats, linje eller hållplats","search-origin-index":"Skriv avfärdsplats","search-position":"Sök position","select-from-map":"Välj position från kartan","select-from-own-locations":"Välj från egna platser",station:"Station",stop:"Hållplats","stop-near-you":"Sök hållplatser eller linjer","stop-near-you-airplane":"Sök flyg eller flygplatser","stop-near-you-bikepark":"Sök cykelparkering","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-carpark":"Sök anslutningsparkering","stop-near-you-citybike":"Sök stadscykelstationer","stop-near-you-rail":"Sök närtåger eller stationer","stop-near-you-subway":"Sök metrolinjer eller stationer","stop-near-you-tram":"Sök spårvagnlinjer eller hållplatser","stop-route-station":"Buss och stopp sökningen",street:"Gata",subway:"Metro","today-at":"i dag kl","tomorrow-at":"i morgon",track:"Spår",tram:"Spårvagn","use-own-position":"Använd min position",venue:"Mötesplats","via-point":"Via punkt",where:"Vart vill du åka?"}}},defaultNS:"translation",react:{useSuspense:!0}});function co(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===n&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}uo.init();var po={container:"styles_container__phMWv",input:"styles_input__XOlHi",favourite:"styles_favourite__iMVL9",thin:"styles_thin__5MIo-",hasValue:"styles_hasValue__9E-Ar",suggestionsContainerOpen:"styles_suggestionsContainerOpen__EgHNQ",suggestionsContainer:"styles_suggestionsContainer__95aNk",suggestionsList:"styles_suggestionsList__Ste1F",suggestion:"styles_suggestion__HPcxK",suggestionHighlighted:"styles_suggestionHighlighted__2nTM-","autosuggest-input-container":"styles_autosuggest-input-container__w2GR-",origin:"styles_origin__RKtku",destination:"styles_destination__WvxGK","stop-route-station":"styles_stop-route-station__bi6MC","autosuggest-input-icon":"styles_autosuggest-input-icon__-lP2J","origin-stop-near-you":"styles_origin-stop-near-you__fBzyH","clear-input":"styles_clear-input__5p3Wu","sr-only":"styles_sr-only__7vJvw",hidden:"styles_hidden__Ff9DG"};co("input[type=text] {\n margin: 0;\n}\n\n.styles_container__phMWv {\n display: flex;\n width: 100%;\n}\n.styles_container__phMWv .styles_input__XOlHi.styles_favourite__iMVL9 {\n padding-left: 47px;\n}\n.styles_container__phMWv .styles_input__XOlHi.styles_thin__5MIo- {\n height: 34px;\n}\n.styles_container__phMWv .styles_input__XOlHi {\n font-size: 16px;\n font-family: inherit;\n display: flex;\n width: 100%;\n height: 44px;\n border-radius: 5px;\n border: solid 1px #888;\n background-color: #fff;\n padding-left: 50px;\n padding-right: 44px;\n line-height: 1.2;\n letter-spacing: -0.5px;\n color: #333;\n box-sizing: border-box;\n appearance: none;\n}\n.styles_container__phMWv .styles_input__XOlHi:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: 0 0 2px 1px var(--hover-color);\n}\n@media screen and (min-width: 768px) {\n .styles_container__phMWv .styles_input__XOlHi {\n font-size: 15px;\n height: 44px;\n padding-left: 49px;\n }\n}\n.styles_container__phMWv .styles_input__XOlHi::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n\n.styles_hasValue__9E-Ar {\n color: #333;\n}\n\n.styles_suggestionsContainerOpen__EgHNQ {\n width: 100%;\n max-height: 44vh;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: solid 1px rgba(0, 0, 0, 0.1);\n overflow-x: hidden;\n overflow-y: scroll;\n position: absolute;\n background-color: white;\n top: calc(2.625rem + 9px);\n z-index: 20;\n}\n\n.styles_suggestionsContainer__95aNk {\n background-color: white;\n z-index: 20;\n}\n.styles_suggestionsContainer__95aNk .styles_suggestionsList__Ste1F {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white;\n}\n.styles_suggestionsContainer__95aNk .styles_suggestionsList__Ste1F li:hover {\n background: #f2f5f7;\n}\n\n.styles_suggestion__HPcxK {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n display: block;\n overflow-x: hidden;\n overflow-y: hidden;\n white-space: nowrap;\n z-index: 20;\n}\n\n.styles_suggestionHighlighted__2nTM- {\n background-color: #f2f5f7;\n}\n\n.styles_autosuggest-input-container__w2GR- {\n position: relative;\n width: 100%;\n}\n.styles_autosuggest-input-container__w2GR-.styles_origin__RKtku {\n z-index: 16;\n}\n.styles_autosuggest-input-container__w2GR-.styles_destination__WvxGK {\n z-index: 10;\n}\n.styles_autosuggest-input-container__w2GR-.styles_stop-route-station__bi6MC {\n z-index: 9;\n}\n\n.styles_autosuggest-input-icon__-lP2J {\n display: flex;\n position: absolute;\n align-items: center;\n width: 16px;\n height: 100%;\n margin-top: 0;\n margin-left: 19px;\n}\n.styles_autosuggest-input-icon__-lP2J svg {\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_origin__RKtku svg {\n color: #4ea700;\n fill: #4ea700;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_destination__WvxGK svg {\n fill: #ec5188;\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_stop-route-station__bi6MC svg, .styles_autosuggest-input-icon__-lP2J.styles_favourite__iMVL9 svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_origin-stop-near-you__fBzyH svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n\nbutton.styles_clear-input__5p3Wu {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none;\n}\nbutton.styles_clear-input__5p3Wu svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.styles_clear-input__5p3Wu:focus {\n background-color: transparent;\n color: inherit;\n /* First apply outline that is used in Edge and Firefox */\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color;\n}\nbutton.styles_clear-input__5p3Wu:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.styles_clear-input__5p3Wu:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.styles_sr-only__7vJvw:not(:focus, :active) {\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}\n\n.styles_hidden__Ff9DG {\n visibility: hidden;\n}");const fo=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",ho=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),go=L.default((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return n=e.name,o=e.address,[n||o&&o.split(",")[0],"string"==typeof o?o.replace(new RegExp(`${I.default(n)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${I.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],fo(e)]:[e.name,e.id,ho(e),fo(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],fo(e)]}var n,o},(e,t)=>{const n=F.default(e);return n.plain=t,n});const bo=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},mo=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,yo=(e,t,n)=>{if(!n)return;if(!e||!e.GTFS.platform)return;const{modes:o,platform:r}=e.GTFS;return[o&&"RAIL"===o[0]?n("track",{lng:t}):n("platform",{lng:t}),r]};function _o(e,t,n){if(!n)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",n("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",n("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",n("select-from-own-locations",{lng:t})];let o,[r,i]=go(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=n("vehiclerentalstation",{lng:t});return[o,r,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=n("bikepark",{lng:t}),[o,r,void 0,void 0];if("carpark"===e.properties.layer)return o=n("carpark",{lng:t}),[o,r,void 0,void 0];if(e.properties.mode)o=n(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=n(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){const s=ho(e.properties),a=e.properties.addendum?.GTFS.modes,l=yo(e.properties.addendum,t,n);return[o,be(r,s),i,s,a,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:n,code:s}=e.properties;return[o,n?be(n.split(",")[0],s):r,i,s,void 0,yo(e.properties.addendum,t)]}return[o,r,i]}const{origin:o,destination:r}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",s=r.locality?`, ${r.locality}`:"",a=o.name,l=r.name;return[n("future-route",{lng:t}),`${n("origin",{lng:t})} ${a}${i} ${n("destination",{lng:t})} ${l}${s}`,e.translatedText]}function vo(e,t,n){if(!n)return;const o=_.DateTime.fromSeconds(Number(e.properties.time)),r=_.DateTime.now();let i=e.properties.arriveBy?n("arrival",{lng:t}):n("departure",{lng:t});return i=o.hasSame(r,"day")?`${i} ${n("today-at")}`:o.hasSame(r.plus({days:1}),"day")?`${i} ${n("tomorrow-at",{lng:t})}`:`${i} ${o.toFormat("ccc d.L.")}`,i=`${i} ${o.toFormat("HH:mm")}`,i}const wo=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=go(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties),So=({suggestions:e,t:t,lng:n})=>{let o=[];const r=e[0];return r&&(r.type&&r.type.includes("Favourite")&&o.push(t("favourite",{lng:n})),o=o.concat(_o(e[0],n))),[...new Set(o)].join(" - ")};function Oo(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Eo,ko={exports:{}};
|
|
2
|
+
/*! For license information please see index.js.LICENSE.txt */var xo=(Eo||(Eo=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=k.default,function(){var e={888:function(e,t,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(e){var t={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}}),e},o=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,r=-1,i="",s=n.charCodeAt(0);++r<o;){if(0===(t=n.charCodeAt(r)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");i+=t>=1&&t<=31||127==t||0===r&&t>=48&&t<=57||1===r&&t>=48&&t<=57&&45===s?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(r):"\\"+n.charAt(r)}return"#"+i},r=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},i=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},s=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},a=function(t,n,o,r){if(n.emitEvents&&"function"==typeof e.CustomEvent){var i=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:r}});document.dispatchEvent(i)}};return function(l,u){var c,d,p,f,h={cancelScroll:function(e){cancelAnimationFrame(f),f=null,e||a("scrollCancel",c)},animateScroll:function(o,l,u){h.cancelScroll();var d=n(c||t,u||{}),g="[object Number]"===Object.prototype.toString.call(o),b=g||!o.tagName?null:o;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,_,v,w=i(p),S=g?o:function(t,n,o,i){var s=0;if(t.offsetParent)do{s+=t.offsetTop,t=t.offsetParent}while(t);return s=Math.max(s-n-o,0),i&&(s=Math.min(s,r()-e.innerHeight)),s}(b,w,parseInt("function"==typeof d.offset?d.offset(o,l):d.offset,10),d.clip),O=S-m,E=r(),k=0,x=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(O,d),R=function(t){y||(y=t),k+=t-y,v=m+O*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,_=(_=0===x?0:k/x)>1?1:_),e.scrollTo(0,Math.floor(v)),function(t,n){var r=e.pageYOffset;if(t==n||r==n||(m<n&&e.innerHeight+r)>=E)return h.cancelScroll(!0),s(o,n,g),a("scrollStop",d,o,l),y=null,f=null,!0}(v,S)||(f=e.requestAnimationFrame(R),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(o,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?s(o,Math.floor(S),!1):(a("scrollStart",d,o,l),h.cancelScroll(!0),e.requestAnimationFrame(R))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(l))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,r;try{n=o(decodeURIComponent(d.hash))}catch(e){n=o(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;r=document.documentElement}else r=document.querySelector(n);(r=r||"#top"!==n?r:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),h.animateScroll(r,d))}},b=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(o(history.state.anchor)))||h.animateScroll(t,null,{updateURL:!1})}};return h.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),h.cancelScroll(),c=null,d=null,p=null,f=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";h.destroy(),c=n(t,u||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),h}}(r)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(47),t),r(n(926),t),r(n(349),t),r(n(137),t),r(n(729),t),r(n(383),t),r(n(450),t),r(n(358),t),r(n(753),t),r(n(869),t),r(n(352),t),r(n(446),t),r(n(164),t),r(n(305),t),r(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,r=(0,o.useState)(0),i=r[0],s=r[1],a=(0,o.useCallback)(function(e){s(e)},[t]),l=function(e){var o=e.key;if(null==t?void 0:t.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),a(i>0?i-1:t.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),i<t.length-1?a(i+1):a(0)}};return(0,o.useEffect)(function(){return window.addEventListener("keydown",l),function(){return window.removeEventListener("keydown",l)}}),(0,o.useEffect)(function(){a(0)},[t]),{selectedIndex:i}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),r=n[0],i=n[1];return(0,o.useEffect)(function(){var n=setTimeout(function(){i(e)},t);return function(){clearTimeout(n)}},[e,t]),r}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),r=n[0],i=n[1],s=function(e){var t=e[0];i(t.isIntersecting)};return(0,o.useEffect)(function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(s,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}i(!1)},[t,e]),{containerRef:t,isVisible:r}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),r=n(432),i={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?i[e]:e,n=(0,o.useState)(null),s=n[0],a=n[1],l=(0,o.useCallback)(function(){a(window.innerWidth)},[]);return(0,o.useEffect)(function(){l()},[]),(0,r.useOnResize)(l),s>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),r=n[0],i=n[1];return(0,o.useEffect)(function(){e||i(t)},[e,t]),e&&r}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,r=e.watch;(0,o.useEffect)(function(){var e=function(){var e;if(r)return(null===(e=t.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}},[n,t,r])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.useEffect)(function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}},[])},t.default=t.useOnResize},352:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var o=n(156);t.useOnWindowFocus=function(e){(0,o.useEffect)(function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}},[e])}},47:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.useEffect)(function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}})}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)(function(){e.current&&(e.current(),e.current=null)}),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,o.useCallback)(function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))},[])}}},358:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var r=n(156),i=o(n(888));t.useSmoothScroll=function(e){var t=(0,r.useRef)(null),n=e.ref,o=e.offset,s=void 0===o?0:o,a=e.speed,l=void 0===a?500:a;return(0,r.useEffect)(function(){t.current=new i.default(null,{speed:l,speedAsDuration:!0})},[]),(0,r.useCallback)(function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return s},updateURL:!1})},[s,n])}},156:function(e){e.exports=t}},n={};function o(t){var r=n[t];if(void 0!==r)return r.exports;var i=n[t]={exports:{}};return e[t].call(i.exports,i,i.exports,o),i.exports}return o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o(432)}())}(ko)),ko.exports),Ro=Oo(xo),jo={"fullscreen-root":"MobileSearch_fullscreen-root__szErN","combobox-container":"MobileSearch_combobox-container__gRQHI","right-column":"MobileSearch_right-column__k-Ucu","combobox-icon":"MobileSearch_combobox-icon__knbNt","combobox-label":"MobileSearch_combobox-label__ja5CB",container:"MobileSearch_container__chi4V",input:"MobileSearch_input__D0TO8","clear-input":"MobileSearch_clear-input__Zmsjv",hasValue:"MobileSearch_hasValue__otRvt",suggestion:"MobileSearch_suggestion__eZPnh",suggestionHighlighted:"MobileSearch_suggestionHighlighted__EAXIz",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__v-FSY",suggestionsList:"MobileSearch_suggestionsList__uvUIS","clear-search-history":"MobileSearch_clear-search-history__pgb3Q","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__BJJad","mobile-modal":"MobileSearch_mobile-modal__k7FUp","mobile-modal-content":"MobileSearch_mobile-modal-content__-8h52"};co("input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileSearch_fullscreen-root__szErN {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000;\n}\n\n.MobileSearch_combobox-container__gRQHI {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between;\n}\n.MobileSearch_combobox-container__gRQHI .MobileSearch_right-column__k-Ucu {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileSearch_combobox-icon__knbNt {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none;\n}\n.MobileSearch_combobox-icon__knbNt svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileSearch_combobox-label__ja5CB {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333;\n}\n\n.MobileSearch_container__chi4V {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileSearch_container__chi4V .MobileSearch_input__D0TO8 {\n font-family: inherit;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n appearance: none;\n}\n.MobileSearch_container__chi4V .MobileSearch_input__D0TO8:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileSearch_clear-input__Zmsjv {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none;\n}\nbutton.MobileSearch_clear-input__Zmsjv svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileSearch_clear-input__Zmsjv:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__Zmsjv:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__Zmsjv:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_hasValue__otRvt {\n color: #333;\n}\n\n.MobileSearch_suggestion__eZPnh {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0;\n}\n\n.MobileSearch_suggestionHighlighted__EAXIz {\n background-color: #f2f5f7;\n}\n\n.MobileSearch_suggestionsContainerOpen__v-FSY {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n.MobileSearch_suggestionsContainerOpen__v-FSY .MobileSearch_suggestionsList__uvUIS {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileSearch_clear-search-history__pgb3Q {\n display: flex;\n font-family: inherit;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd;\n}\n.MobileSearch_suggestionHighlighted__EAXIz .MobileSearch_clear-search-history__pgb3Q {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_mobile-modal-overlay__BJJad {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed;\n}\n\n.MobileSearch_mobile-modal__k7FUp {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileSearch_mobile-modal__k7FUp.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileSearch_mobile-modal__k7FUp.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileSearch_mobile-modal-content__-8h52 {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%);\n}");var Po={"fullscreen-root":"MobileNoScroll_fullscreen-root__lNJEA","combobox-container":"MobileNoScroll_combobox-container__RxlD2","right-column":"MobileNoScroll_right-column__nAwWs","combobox-icon":"MobileNoScroll_combobox-icon__cRRSO","combobox-label":"MobileNoScroll_combobox-label__Z-JOt",container:"MobileNoScroll_container__J1jw0",input:"MobileNoScroll_input__B9G27","clear-input":"MobileNoScroll_clear-input__j-O-m",hasValue:"MobileNoScroll_hasValue__pLUYi",suggestion:"MobileNoScroll_suggestion__gnuNt",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__LDP8O",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__XT2dw",suggestionsList:"MobileNoScroll_suggestionsList__GSeGB","clear-search-history":"MobileNoScroll_clear-search-history__RqZFq","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__Ltu0Y","mobile-modal":"MobileNoScroll_mobile-modal__GjOpx","mobile-modal-content":"MobileNoScroll_mobile-modal-content__0976f"};function Co(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(-1!==t.indexOf(o))continue;n[o]=e[o]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}co("input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileNoScroll_fullscreen-root__lNJEA {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000;\n}\n\n.MobileNoScroll_combobox-container__RxlD2 {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between;\n}\n.MobileNoScroll_combobox-container__RxlD2 .MobileNoScroll_right-column__nAwWs {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileNoScroll_combobox-icon__cRRSO {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none;\n}\n.MobileNoScroll_combobox-icon__cRRSO svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileNoScroll_combobox-label__Z-JOt {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333;\n}\n\n.MobileNoScroll_container__J1jw0 {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileNoScroll_container__J1jw0 .MobileNoScroll_input__B9G27 {\n font-family: inherit;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n appearance: none;\n}\n.MobileNoScroll_container__J1jw0 .MobileNoScroll_input__B9G27:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileNoScroll_clear-input__j-O-m {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none;\n}\nbutton.MobileNoScroll_clear-input__j-O-m svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileNoScroll_clear-input__j-O-m:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__j-O-m:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__j-O-m:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_hasValue__pLUYi {\n color: #333;\n}\n\n.MobileNoScroll_suggestion__gnuNt {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0;\n}\n\n.MobileNoScroll_suggestionHighlighted__LDP8O {\n background-color: #f2f5f7;\n}\n\n.MobileNoScroll_suggestionsContainerOpen__XT2dw {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n.MobileNoScroll_suggestionsContainerOpen__XT2dw .MobileNoScroll_suggestionsList__GSeGB {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileNoScroll_clear-search-history__RqZFq {\n display: flex;\n font-family: inherit;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd;\n}\n.MobileNoScroll_suggestionHighlighted__LDP8O .MobileNoScroll_clear-search-history__RqZFq {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_mobile-modal-overlay__Ltu0Y {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed;\n}\n\n.MobileNoScroll_mobile-modal__GjOpx {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileNoScroll_mobile-modal__GjOpx.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileNoScroll_mobile-modal__GjOpx.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileNoScroll_mobile-modal-content__0976f {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%);\n}\n\n.MobileNoScroll_suggestionsContainerOpen__XT2dw {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n.MobileNoScroll_suggestionsContainerOpen__XT2dw::-webkit-scrollbar {\n display: none; /* Safari and Chrome */\n}");const No=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],Mo=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function To(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?To(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):To(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const Lo=n.memo(function(e){let{item:t,lng:n,getItemProps:r,highlightedIndex:i,itemIndex:s,styles:a}=e,l=Co(e,No);const[u]=o.useTranslation(),c="FutureRoute"===t.type?Ao(Ao({},t),{},{translatedText:vo(t,n,u)}):t,d=_o(t,n,u);return k.default.createElement("li",Object.assign({className:x.default(a.suggestion,i===s&&a.suggestionHighlighted)},r({index:s})),k.default.createElement(U.default,Object.assign({item:c,content:d,lng:n},l)))}),Io="production"!==process.env.NODE_ENV?E.default.shape({name:E.default.string,type:E.default.string,address:E.default.string,selectedIconId:E.default.string,iconColor:E.default.string,translatedText:E.default.string,properties:E.default.shape({layer:E.default.string,color:E.default.string,localadmin:E.default.string,mode:E.default.string,id:E.default.string,source:E.default.string,arrowClicked:E.default.bool,destination:E.default.shape({name:E.default.string,localadmin:E.default.string}),origin:E.default.shape({name:E.default.string,localadmin:E.default.string})})}):{};"production"!==process.env.NODE_ENV&&(Lo.propTypes={item:Io.isRequired,lng:E.default.string.isRequired,getItemProps:E.default.func.isRequired,highlightedIndex:E.default.number.isRequired,itemIndex:E.default.number.isRequired,styles:E.default.objectOf(E.default.string).isRequired});const Fo=n.memo(function(e){let{suggestions:t,getMenuProps:n,getItemProps:r,lng:i,styles:s,hidden:a,renderClearHistoryButton:l,handleClearHistory:u}=e,c=Co(e,Mo);const[d]=o.useTranslation();return k.default.createElement("div",{className:x.default(s.suggestionsContainerOpen,s.suggestionsContainer,a&&s.hidden)},k.default.createElement("ul",Object.assign({className:s.suggestionsList},n()),t.map((e,t)=>k.default.createElement(Lo,Object.assign({key:`${e.type}-${e.properties.gid||e.properties.gtfsId||JSON.stringify(e.properties)}`,getItemProps:r,itemIndex:t,item:e,lng:i,styles:s},c))),l&&k.default.createElement("li",null,k.default.createElement("button",{onClick:u,type:"button",className:s["clear-search-history"]},d("clear-search-history",{lng:i})))))});"production"!==process.env.NODE_ENV&&(Fo.propTypes={suggestions:E.default.arrayOf(Io).isRequired,getMenuProps:E.default.func.isRequired,getItemProps:E.default.func.isRequired,lng:E.default.string.isRequired,styles:E.default.objectOf(E.default.string).isRequired,hidden:E.default.bool.isRequired,renderClearHistoryButton:E.default.bool,handleClearHistory:E.default.func}),Fo.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const Do=({color:e,lng:t,clearInput:n,onKeyDown:r,styles:i})=>{const[s]=o.useTranslation();return k.default.createElement("button",{type:"button",className:i["clear-input"],onClick:n,"aria-label":s("clear-button-label",{lng:t}),onKeyDown:r},k.default.createElement(A.default,{img:"close",color:e}))};function qo({id:e,lng:t,value:n,placeholder:o,required:r,getInputProps:i,getLabelProps:s,clearInput:a,ariaLabel:l,inputRef:u,styles:c,renderLabel:d,isMobile:p,inputClassName:f,transportMode:h,clearButtonColor:g,autoFocus:b,inputOnBlur:m,onValueChange:y}){return k.default.createElement("div",{className:c.container},d&&k.default.createElement("label",s({className:c["sr-only"],htmlFor:e}),l),k.default.createElement("input",Object.assign({"aria-label":l,autoFocus:b,placeholder:o,required:r,type:"text",className:x.default(c.input,c[e],f,p&&h&&c.thin,n&&c.hasValue),id:e},i({ref:u,onBlur:m,onChange:e=>{y(e.target.value)}}))),n&&k.default.createElement(Do,{lng:t,clearInput:()=>a(u),styles:c,color:g,onKeyDown:e=>bo(e)&&a(u)}))}function Uo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function zo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Uo(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Uo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Do.propTypes={color:E.default.string.isRequired,lng:E.default.string.isRequired,clearInput:E.default.func.isRequired,onKeyDown:E.default.func.isRequired,styles:E.default.objectOf(E.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(qo.propTypes={id:E.default.string.isRequired,lng:E.default.string.isRequired,placeholder:E.default.string.isRequired,required:E.default.bool.isRequired,value:E.default.string.isRequired,getInputProps:E.default.func.isRequired,getLabelProps:E.default.func.isRequired,clearInput:E.default.func.isRequired,ariaLabel:E.default.string.isRequired,inputRef:E.default.shape({current:E.default.oneOfType([E.default.string,E.default.object])}).isRequired,styles:E.default.objectOf(E.default.string).isRequired,renderLabel:E.default.bool,isMobile:E.default.bool.isRequired,inputClassName:E.default.string.isRequired,transportMode:E.default.string,clearButtonColor:E.default.string.isRequired,autoFocus:E.default.bool,inputOnBlur:E.default.func,onValueChange:E.default.func.isRequired}),qo.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const Bo=({appElement:e,id:t,placeholder:r,clearInput:i,onSelectedItemChange:s,fontWeights:a,clearOldSearches:l,suggestionProps:u,lng:c,ariaProps:d,value:f,inputClassName:h,required:g,mobileLabel:b,showScroll:m,state:y,dispatch:_,colors:v})=>{const[w]=o.useTranslation(),{lock:S,unlock:O}=Ro.useScrollLock(),E=m?jo:Po,x=`${t}-input`,R=`${t}-label`,[j,P]=n.useState(!1),C=k.default.useRef();n.useEffect(()=>{D.default.setAppElement(e)},[]),n.useEffect(()=>{y.renderMobile?S():O()},[y.renderMobile]);const{highlightedIndex:N,getLabelProps:M,getMenuProps:T,getInputProps:L,getItemProps:I,setHighlightedIndex:F}=p.useCombobox({items:y.suggestions,inputValue:f,isOpen:!0,onSelectedItemChange:e=>{s(e),_({type:"TOGGLE_MENU",isMobile:!0})},inputId:x,labelId:R,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e,type:t})=>y.renderMobile&&t!==p.useCombobox.stateChangeTypes.InputChange&&_({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:n})=>{switch(n){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return F(-1),_({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return y.loading?(_({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?zo(zo({},t),{},{selectedItem:y.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?wo(e):""});T({},{suppressRefError:!0}),L({},{suppressRefError:!0});const U=n.useCallback(e=>y.renderMobile&&_({type:"INPUT_CHANGE",value:e}),[y.renderMobile,_]),z=n.useCallback(()=>P(!0),[]),{ariaRequiredText:B,SearchBarId:H,ariaCurrentSuggestion:V}=d,W=B.concat(" ").concat(H).concat(" ").concat(V);return k.default.createElement(D.default,{isOpen:y.renderMobile,className:E["mobile-modal"],overlayClassName:E["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},k.default.createElement("div",{className:E["mobile-modal-content"],style:{"--color":v.primary,"--accessible-primary-color":v.accessiblePrimary,"--hover-color":v.hover,"--font-weight-medium":a.medium}},k.default.createElement("div",{className:E["combobox-container"],htmlFor:x},k.default.createElement("button",{type:"button",className:E["combobox-icon"],onClick:()=>{F(-1),_({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{bo(e)&&(F(-1),_({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":w("cancel",{lng:c}),tabIndex:0},k.default.createElement(A.default,{img:"arrow",color:v.primary})),k.default.createElement("span",{className:E["right-column"]},k.default.createElement("span",Object.assign({className:E["combobox-label"],id:R},M()),b),k.default.createElement(qo,{placeholder:mo(t)?w("address-place-or-business",{lng:c}):r,id:t,lng:c,value:f,getInputProps:L,getLabelProps:M,clearInput:()=>i(C),ariaLabel:W,inputRef:C,styles:E,renderLabel:!1,clearButtonColor:v.primary,autoFocus:!0,inputClassName:h,required:g,isMobile:!0,onValueChange:U}),k.default.createElement(Fo,Object.assign({suggestions:y.suggestions,getMenuProps:T,getItemProps:I,highlightedIndex:N,isOpen:!0,hidden:!1,lng:c,styles:E,renderClearHistoryButton:!0,handleClearHistory:z},u)))),k.default.createElement(q.default,{isModalOpen:j,handleClose:()=>P(!1),headerText:w("delete-old-searches-header",{lng:c}),primaryButtonText:w("delete",{lng:c}),secondaryButtonText:w("cancel",{lng:c}),primaryButtonOnClick:()=>{l(),P(!1)},secondaryButtonOnClick:()=>P(!1),lang:c})))};function Ho(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Vo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ho(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ho(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Bo.propTypes={appElement:E.default.string.isRequired,id:E.default.string.isRequired,clearInput:E.default.func.isRequired,clearOldSearches:E.default.func.isRequired,onSelectedItemChange:E.default.func.isRequired,value:E.default.string.isRequired,colors:E.default.objectOf(E.default.string).isRequired,fontWeights:E.default.shape({medium:E.default.number.isRequired}).isRequired,suggestionProps:E.default.shape({}).isRequired,ariaProps:E.default.shape({ariaRequiredText:E.default.string.isRequired,SearchBarId:E.default.string.isRequired,ariaCurrentSuggestion:E.default.string.isRequired}).isRequired,inputClassName:E.default.string.isRequired,placeholder:E.default.string.isRequired,mobileLabel:E.default.string.isRequired,required:E.default.bool.isRequired,showScroll:E.default.bool.isRequired,lng:E.default.string.isRequired,state:E.default.shape({suggestions:E.default.arrayOf(E.default.shape({})).isRequired,renderMobile:E.default.bool.isRequired,loading:E.default.bool.isRequired}).isRequired,dispatch:E.default.func.isRequired});const Wo=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return Vo(Vo({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return t.loading!==e.loading||t.suggestions?Vo(Vo({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions}):e;case"CLEAR_SUGGESTIONS":return Vo(Vo({},e),{},{suggestions:[]});case"RESET_SOURCES":return Vo(Vo({},e),{},{sources:t.sources});case"SET_SOURCES":return Vo(Vo({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return Vo(Vo({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return Vo(Vo({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return Vo(Vo({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?Vo(Vo({},e),{},{renderMobile:!1,isCleared:!1}):Vo(Vo({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):Vo(Vo({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function $o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$o(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const Jo=["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location","Wybrane miejsce"];function Ko({appElement:e,id:t,placeholder:r,onSelect:i,icon:s,value:a,onClear:l,lang:u,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:f,storeRef:h,isMobile:g,mobileLabel:b,inputClassName:m,translatedPlaceholder:y,required:_,ariaLabel:v,fontWeights:w,colors:S,modeSet:O,showScroll:E,isEmbedded:R,transportMode:j,targets:P,sources:C,geocodingSize:N,filterResults:M,searchContext:T,pathOpts:L,refPoint:I}){const[F]=o.useTranslation(),D={suggestions:[],loading:!1,sources:C,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:a,enterPending:!1,isMenuOpen:!1},[q,U]=n.useReducer(Wo,D);n.useEffect(()=>U({type:"RESET",initialState:D}),[a]),n.useEffect(()=>U({type:"RESET_SOURCES",sources:C}),[C]);const z=n.useRef(t);n.useEffect(()=>{h&&h(z.current)},[z.current]);const B=n.useCallback(()=>{const e=!P?.length||P.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:n,ownPlaces:o,sources:r})=>{const i=!e?.length;let s=e;return o?(s=["Locations"],(i||e.includes("Stops"))&&s.push("Stops"),(i||e.includes("Stations"))&&s.push("Stations"),(i||e.includes("VehicleRentalStations"))&&s.push("VehicleRentalStations")):i||(s=[...e],!t||n||r.length&&!r.includes("Favourite")||s.push("SelectFromOwnLocations")),s})({targets:P,isLocationSearch:e,isMobile:g,ownPlaces:q.showOwnPlaces,sources:q.sources});((e,t,n,o,r,i,s,a,l,u)=>{a(null),lo(e,t,n,o,r,i,s,a,l,u)})(t,q.sources?q.sources.filter(t=>!e||"Favourite"===!t||q.showOwnPlaces||g):q.sources,j,T,M,N,{input:q.value||""},e=>{if(null==e)return void U({type:"FETCH_SUGGESTIONS",loading:!0});const t=(e.results||[]).filter(e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Date.now()/1e3).map(e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=Go({},e);return t.properties.labelId=F(e.properties.labelId,{lng:u}),t}return e});U({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},L,I)},[q.value,q.sources,q.showOwnPlaces,P,j,T,M,N,g,u,L,I,t]),H=n.useCallback((e,n)=>{e&&(d?d(e,n):i(e,t),!f||g&&!R||f(),z.current&&z.current.blur())},[g]),V=e=>H(e.selectedItem,e.highlightedIndex),{isOpen:W,highlightedIndex:$,getLabelProps:G,getMenuProps:J,getInputProps:K,getItemProps:Z,selectItem:X,openMenu:Q,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:q.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e,type:t})=>t!==p.useCombobox.stateChangeTypes.InputChange&&U({type:"INPUT_CHANGE",value:e}),stateReducer:n.useCallback((e,{type:t,changes:n})=>{switch(t){case p.useCombobox.stateChangeTypes.ItemClick:case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return q.loading?(U({type:"PENDING_ENTER",enterPending:!0}),e):n.selectedItem?"SelectFromOwnLocations"===n.selectedItem.type?(U({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:n.selectedItem.type}),e):"back"===n.selectedItem.type?(U({type:"SET_SOURCES",sources:C,showOwnPlaces:!1,pendingSelection:null}),e):n:n;case p.useCombobox.stateChangeTypes.InputClick:return Jo.includes(a)?Go(Go({},n),{},{inputValue:"",isOpen:!0}):Go(Go({},n),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return n.selectedItem?Go(Go({},n),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):n;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return Go(Go({},n),{},{inputValue:""});default:return n}},[q.loading,a,g]),items:q.suggestions,itemToString:e=>e?wo(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!q.renderMobile&&U({type:"TOGGLE_MENU",isMobile:g})}}),ee=e=>{U({type:"CLEAR"}),l&&l(t),e.current&&e.current.focus(),Q()},te=n.useCallback(e=>U({type:"INPUT_CHANGE",value:e}),[]);n.useEffect(()=>{!W&&!q.renderMobile||q.value===a&&Jo.includes(a)||B(q.value)},[W,q.renderMobile,q.value,B]),n.useEffect(()=>{q.enterPending&&!q.loading&&(H(q.suggestions[0],0),Y())},[q.loading,q.pendingEnter,q.suggestions]);const ne=n.useMemo(()=>({loading:q.loading,isMobile:g,ariaFavouriteString:F("favourite",{lng:u}),fontWeights:w,getAutoSuggestIcons:c,colors:S,modeSet:O}),[q.loading,g,F,u,w,c,S,O]),{ariaCurrentSuggestion:oe,ariaRequiredText:re,SearchBarId:ie,ariaLabelText:se}=(({id:e,ariaLabel:t,lng:n,t:o,isMobile:r,suggestions:i,value:s,required:a})=>{const l=e.replace("searchfield-",""),u=t||o(l,{lng:n}).replace("searchfield-","").concat("."),c=a?`${o("required",{lng:n})}.`:"",d=o(r?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:n}),p="origin"===e?o("search-autosuggest-label-move-to-destination",{lng:n}):"";return{SearchBarId:u,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:o("search-autosuggest-len",{count:i.length,lng:n}),ariaCurrentSuggestion:So({suggestions:i,t:o,lng:n})||s?o("search-current-suggestion",{lng:n,selection:So({suggestions:i,t:o,lng:n}).toLowerCase()||s}):""}})({id:t,lng:u,t:F,isMobile:g,ariaLabel:v,suggestions:q.suggestions,value:q.value,required:_});return n.useEffect(()=>{q.renderMobile||W||U({type:"RESET",initialState:D})},[q.renderMobile,W]),k.default.createElement(k.default.Fragment,null,g&&k.default.createElement(Bo,{placeholder:F(r,{lng:u}),fontWeights:w,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=T;e&&t&&(t(e),n&&n(e),B(q.value))},appElement:e,mobileLabel:b||F(t,{lng:u}),ariaProps:{ariaCurrentSuggestion:oe,SearchBarId:ie,ariaRequiredText:re},id:t,lng:u,onSelectedItemChange:V,value:q.value,clearInput:ee,suggestionProps:ne,showScroll:!!E,colors:S,inputClassName:m,required:_,state:q,dispatch:U}),k.default.createElement("div",{className:x.default(po["autosuggest-input-container"],po[t],q.renderMobile&&"hidden"),style:{"--color":S.primary,"--hover-color":S.hover}},s&&k.default.createElement("div",{className:x.default(po["autosuggest-input-icon"],po[t],m&&po[`${m}-input-icon`]),"aria-label":re.concat(" ").concat(ie).concat(" ").concat(F("search-autosuggest-label",{lng:u}))},k.default.createElement(A.default,{img:`${s}`})),k.default.createElement(qo,{inputClassName:m,ariaLabel:oe.concat(" ").concat(re).concat(" ").concat(ie).concat(" ").concat(se),id:t,lng:u,getInputProps:K,getLabelProps:G,selectItem:X,value:q.value,clearInput:ee,inputRef:z,styles:po,clearButtonColor:S.primary,placeholder:y||F(r,{lng:u}),required:_,transportMode:j,isMobile:g,inputOnBlur:()=>{U({isMobile:g,value:!g&&a,type:"INPUT_BLUR"}),g||U({type:"RESET",initialState:D})},onValueChange:te}),k.default.createElement(Fo,Object.assign({hidden:!W||!q.suggestions.length||g,highlightedIndex:$,getItemProps:Z,getMenuProps:J,suggestions:q.suggestions,lng:u,styles:po},ne))))}"production"!==process.env.NODE_ENV&&(Ko.propTypes={appElement:E.default.string.isRequired,icon:E.default.string,id:E.default.string.isRequired,placeholder:E.default.string.isRequired,translatedPlaceholder:E.default.string,value:E.default.string,transportMode:E.default.string,geocodingSize:E.default.number,filterResults:E.default.func,searchContext:E.default.shape({URL_PELIAS:E.default.string,context:E.default.object,clearOldSearches:E.default.func,clearFutureRoutes:E.default.func}).isRequired,sources:E.default.arrayOf(E.default.string),targets:E.default.arrayOf(E.default.string),ariaLabel:E.default.string,onSelect:E.default.func.isRequired,onClear:E.default.func,storeRef:E.default.func,handleViaPoints:E.default.func,focusChange:E.default.func,lang:E.default.string,isMobile:E.default.bool,pathOpts:E.default.shape({routesPrefix:E.default.string,stopsPrefix:E.default.string}),mobileLabel:E.default.string,refPoint:E.default.shape({address:E.default.string,lat:E.default.number,lon:E.default.number}),inputClassName:E.default.string,fontWeights:E.default.shape({medium:E.default.number}),colors:E.default.objectOf(E.default.string),getAutoSuggestIcons:E.default.objectOf(E.default.func),required:E.default.bool,modeSet:E.default.string,showScroll:E.default.bool,isEmbedded:E.default.bool}),Ko.defaultProps={icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},colors:f.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>k.default.createElement(o.I18nextProvider,{i18n:uo},k.default.createElement(Ko,e)),Object.defineProperty(e,"__esModule",{value:!0})});
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC10cnUtZXEvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zYW5pdGl6ZUhlYWRlclZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvZmV0Y2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2kxOG4uanMiLCIuLi9zcmMvdXRpbHMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvdXRpbHMvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGhzbC1maS9ob29rcy9saWIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1N1Z2dlc3Rpb25zLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvQ2xlYXJCdXR0b24uanMiLCIuLi9zcmMvY29tcG9uZW50cy9JbnB1dC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL01vYmlsZVZpZXcuanMiLCIuLi9zcmMvdXRpbHMvc2VhcmNoUmVkdWNlci5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsIi8qKlxuICogIGFjY2VwdCBlcXVhbGl0eSBvZiBub24gbnVsbGlzaCB2YWx1ZXNcbiAqXG4gKiBAbmFtZSB0cnVFcVxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHZhbDEgRmlyc3QgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSBwYXJhbTIgU2Vjb25kIHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwudHJ1RXEoJzInLCAnMicpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cnVFcSh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiB2YWwxICYmIHZhbDIgJiYgdmFsMSA9PT0gdmFsMjtcbn1cbiIsImltcG9ydCB0cnVFcSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxJztcbi8qKlxuICogQ2hlY2tzIHRoYXQgaXMgaXRlbXMgZHVwbGljYXRlXG4gKlxuICogQG5hbWUgaXNEdXBsaWNhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMSBPYmplY3QgY29udGFpbmluZyBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIHtcbiAqICBwcm9wZXJ0aWVzIHtcbiAqICAgICAgZ3Rmc0lkOiBTdHJpbmdcbiAqICAgICAgZ2lkOiBTdHJpbmcgZnJvbSBnZW9jb2RlclxuICogICAgICBuYW1lOiBTdHJpbmdcbiAqICAgICAgbGFiZWw6IFN0cmluZ1xuICogICAgICAgYWRkcmVzczogU3RyaW5nXG4gKiAgICAgIGdlb21ldHJ5IHtcbiAqICAgICAgICAgY29vcmRpbmF0ZXMgW051bWJlciBsYXQsIE51bWJlciBsb25dXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTIgT2JqZWN0IHdpdGggc2FtZSBhdHRyaWJ1dGVzIGFzIGl0ZW0xXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuaXNEdXBsaWNhdGUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5cbmNvbnN0IGd0ZnNTdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nLCAnZmF2b3VyaXRlU3RvcCcsICdmYXZvdXJpdGVTdGF0aW9uJ107XG5jb25zdCB2ZWhpY2xlUmVudGFsTGF5ZXJzID0gWydmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsICdiaWtlc3RhdGlvbiddO1xuXG5mdW5jdGlvbiBsYWJlbElkVG9HaWQoaWQpIHtcbiAgaWYgKCFpZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBwYXJ0cyA9IGlkLnNwbGl0KCc6Jyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGBjaXR5YmlrZXMke3BhcnRzWzBdfTpiaWtlc3RhdGlvbjoke3BhcnRzWzFdfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRHVwbGljYXRlKGl0ZW0xLCBpdGVtMikge1xuICBjb25zdCBwcm9wczEgPSBpdGVtMS5wcm9wZXJ0aWVzO1xuICBjb25zdCBwcm9wczIgPSBpdGVtMi5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnICYmIGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBjb25zdCBvMSA9IHByb3BzMS5vcmlnaW47XG4gICAgY29uc3QgZDEgPSBwcm9wczEuZGVzdGluYXRpb247XG4gICAgY29uc3QgbzIgPSBwcm9wczIub3JpZ2luO1xuICAgIGNvbnN0IGQyID0gcHJvcHMyLmRlc3RpbmF0aW9uO1xuXG4gICAgY29uc3QgbmFtZTEgPSBgJHtvMS5uYW1lfS8vJHtvMS5sb2NhbGFkbWlufS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGFkbWlufWA7XG4gICAgY29uc3QgbmFtZTIgPSBgJHtvMi5uYW1lfS8vJHtvMi5sb2NhbGFkbWlufS8vJHtkMi5uYW1lfS8vJHtkMi5sb2NhbGFkbWlufWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKVxuICApIHtcbiAgICBjb25zdCBpZDEgPSBwcm9wczEuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczEubGFiZWxJZCk7XG4gICAgY29uc3QgaWQyID0gcHJvcHMyLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMyLmxhYmVsSWQpO1xuICAgIHJldHVybiBpZDEgPT09IGlkMjtcbiAgfVxuICBpZiAocHJvcHMxLmd0ZnNJZCAmJiBwcm9wczIuZ3Rmc0lkKSB7XG4gICAgcmV0dXJuIHByb3BzMS5ndGZzSWQgPT09IHByb3BzMi5ndGZzSWQ7XG4gIH1cbiAgaWYgKFxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpICYmXG4gICAgcHJvcHMxLmdpZCAmJlxuICAgIHByb3BzMi5naWRcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5naWQgPT09IHByb3BzMi5naWQ7XG4gIH1cblxuICBjb25zdCBwMSA9IGl0ZW0xICYmIGl0ZW0xLmdlb21ldHJ5ID8gaXRlbTEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHAyID0gaXRlbTIgJiYgaXRlbTIuZ2VvbWV0cnkgPyBpdGVtMi5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICAvLyBib3RoIGhhdmUgZ2VvbWV0cnlcbiAgICBpZiAoTWF0aC5hYnMocDFbMF0gLSBwMlswXSkgPCAxZS02ICYmIE1hdGguYWJzKHAxWzFdIC0gcDJbMV0pIDwgMWUtNikge1xuICAgICAgLy8gbG9jYXRpb24gbWF0Y2ggaXMgbm90IGVub3VnaC4gUmVxdWlyZSBhIGNvbW1vbiBwcm9wZXJ0eVxuICAgICAgaWYgKFxuICAgICAgICB0cnVFcShwcm9wczEubmFtZSwgcHJvcHMyLm5hbWUpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmFkZHJlc3MpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmFkZHJlc3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcuanMnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnkuanMnO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aC5qcyc7XG5pbXBvcnQgaXNEdXBsaWNhdGUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZSc7XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHN0ciA9PiB7XG4gIGlmICghaXNTdHJpbmcoc3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5jb25zdCBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyhcXHB7TH0rKS91KTtcbn07XG5cbmNvbnN0IHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyA9IHN0ciA9PiB7XG4gIHJldHVybiAvXlswLTldK1xccHtMfSskL3UudGVzdChzdHIpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgaXRlbS5ndGZzSWQsXG4gICl9LyR7c3RvcHNQcmVmaXh9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUm91dGUnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBsYXllcjogYHJvdXRlLSR7aXRlbS5tb2RlfWAsXG4gICAgICBsaW5rLFxuICAgIH0sXG4gICAgZ2VvbWV0cnk6IHtcbiAgICAgIGNvb3JkaW5hdGVzOiBudWxsLFxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggdGVybSBhZ2FpbnMgdGhlIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllc1xuICogZm9yIGEgZ2VvY29kaW5nIHJlc3VsdCAobWluOiAwLCBtYXg6IDEuNSkuIFRoZSBiZXN0IG1hdGNoIHdpbGwgcmV0dXJuIGEgbnVtYmVyIG9mIDEuNS5cbiAqIFdvcnNlIG1hdGNoZXMgd2lsbCByZXR1cm4gMCBvciAwLjUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6ZWRUZXJtIHRoZSBub3JtYWxpemVkIHNlYXJjaCB0ZXJtLlxuICogQHBhcmFtIHsqfSByZXN1bHRQcm9wZXJ0aWVzIHRoZSBnZW9jb2RpbmcgcmVzdWx0J3MgcHJvcGVydHkgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHRQcm9wZXJ0aWVzKSA9PiB7XG4gIGlmICghaXNTdHJpbmcobm9ybWFsaXplZFRlcm0pIHx8IG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hQcm9wcyA9IFsnbmFtZScsICdsYWJlbCcsICdhZGRyZXNzJywgJ3Nob3J0TmFtZSddO1xuICByZXR1cm4gbWF0Y2hQcm9wc1xuICAgIC5tYXAobmFtZSA9PiB7XG4gICAgICByZXR1cm4geyBuYW1lLCB2YWx1ZTogcmVzdWx0UHJvcGVydGllc1tuYW1lXSB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihlbGVtZW50ID0+IGlzU3RyaW5nKGVsZW1lbnQudmFsdWUpICYmIGVsZW1lbnQudmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZShlbGVtZW50LnZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQubmFtZSA9PT0gJ3Nob3J0TmFtZScgJiZcbiAgICAgICAgICB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMobm9ybWFsaXplZFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc2hvcnROYW1lIGlzIG9mIGEgY2VydGFpbiBmb3JtYXQgKGUuZy4gODlBKSwgaXQgaXMgdHJlYXRlZCBoZXJlXG4gICAgICAgICAgLy8gYXMgaWYgaXQgaGFkIHRoZSBsZW5ndGggb2YgdGhlIG51bWJlcnMgd2l0aCB0aGUgbGV0dGVycyByZW1vdmVkLlxuICAgICAgICAgIC8vIFNvIHRoZSBsZW5ndGggb2YgODlBIHdvdWxkIGJlIHRyZWF0ZWQgYXMgMi5cbiAgICAgICAgICBbbm9ybWFsaXplZFZhbHVlXSA9IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpIHx8ICFyZXN1bHRzLmxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLmZpbHRlcihyID0+IHIpLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKFxuICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKVswXVxuICAgICAgICAgICAgOiByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhcbiAgICAgICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSxcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSlbMV1cbiAgICAgICAgICAgIDogcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICAgIF0sXG4gICAgWydkZXNjJywgJ2Rlc2MnLCAnYXNjJywgJ2FzYycsICdhc2MnXSxcbiAgKTtcblxuICByZXR1cm4gdW5pcVdpdGgob3JkZXJlZFJlc3VsdHMsIGlzRHVwbGljYXRlKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHN0b3AncyBuYW1lIHdpdGhvdXQgc3RvcCBjb2RlIGZyb20gYSBzdG9wIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBzdG9wJ3MgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3BDb2RlIHN0b3AgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0b3BOYW1lID0gKG5hbWUsIHN0b3BDb2RlKSA9PiB7XG4gIGlmIChcbiAgICBzdG9wQ29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3RvcENvZGUgIT09IG51bGwgJiZcbiAgICBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAhPT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpIC0gMSk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59O1xuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0LmpzJztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGUgYSBib3VuZCB2ZXJzaW9uIG9mIGEgZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCBgdGhpc2AgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJpbmRcbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyAtIFRoZSB2YWx1ZSB0byBiZSBwYXNzZWQgYXMgdGhlIGB0aGlzYCBwYXJhbWV0ZXJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBgdGhpc2AgY29udGV4dFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHsgdG9TdHJpbmcgfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7IGdldFByb3RvdHlwZU9mIH0gPSBPYmplY3Q7XG5jb25zdCB7IGl0ZXJhdG9yLCB0b1N0cmluZ1RhZyB9ID0gU3ltYm9sO1xuXG5jb25zdCBraW5kT2YgPSAoKGNhY2hlKSA9PiAodGhpbmcpID0+IHtcbiAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSAodHlwZSkgPT4gKHRoaW5nKSA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiAoXG4gICAgdmFsICE9PSBudWxsICYmXG4gICAgIWlzVW5kZWZpbmVkKHZhbCkgJiZcbiAgICB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKSAmJlxuICAgIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdmFsICYmIHZhbC5idWZmZXIgJiYgaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gKHRoaW5nKSA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAoXG4gICAgKHByb3RvdHlwZSA9PT0gbnVsbCB8fFxuICAgICAgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiZcbiAgICAhKHRvU3RyaW5nVGFnIGluIHZhbCkgJiZcbiAgICAhKGl0ZXJhdG9yIGluIHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0IChzYWZlbHkgaGFuZGxlcyBCdWZmZXJzKVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNFbXB0eU9iamVjdCA9ICh2YWwpID0+IHtcbiAgLy8gRWFybHkgcmV0dXJuIGZvciBub24tb2JqZWN0cyBvciBCdWZmZXJzIHRvIHByZXZlbnQgUmFuZ2VFcnJvclxuICBpZiAoIWlzT2JqZWN0KHZhbCkgfHwgaXNCdWZmZXIodmFsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpID09PSBPYmplY3QucHJvdG90eXBlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRmFsbGJhY2sgZm9yIGFueSBvdGhlciBvYmplY3RzIHRoYXQgbWlnaHQgY2F1c2UgUmFuZ2VFcnJvciB3aXRoIE9iamVjdC5rZXlzKClcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYlxuICogUmVhY3QgTmF0aXZlIFwiYmxvYlwiOiBhbiBvYmplY3Qgd2l0aCBhIGB1cmlgIGF0dHJpYnV0ZS4gT3B0aW9uYWxseSwgaXQgY2FuXG4gKiBhbHNvIGhhdmUgYSBgbmFtZWAgYW5kIGB0eXBlYCBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBmaWxlbmFtZSBhbmQgY29udGVudCB0eXBlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2Jsb2IvMjY2ODRjZjNhZGY0MDk0ZWI2YzQwNWQzNDVhNzViZjhjN2MwYmY4OC9MaWJyYXJpZXMvTmV0d29yay9Gb3JtRGF0YS5qcyNMNjgtTDcxXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVhY3QgTmF0aXZlIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlYWN0TmF0aXZlQmxvYiA9ICh2YWx1ZSkgPT4ge1xuICByZXR1cm4gISEodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnVyaSAhPT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgZW52aXJvbm1lbnQgaXMgUmVhY3QgTmF0aXZlXG4gKiBSZWFjdE5hdGl2ZSBgRm9ybURhdGFgIGhhcyBhIG5vbi1zdGFuZGFyZCBgZ2V0UGFydHMoKWAgbWV0aG9kXG4gKlxuICogQHBhcmFtIHsqfSBmb3JtRGF0YSBUaGUgZm9ybURhdGEgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGVudmlyb25tZW50IGlzIFJlYWN0IE5hdGl2ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmUgPSAoZm9ybURhdGEpID0+IGZvcm1EYXRhICYmIHR5cGVvZiBmb3JtRGF0YS5nZXRQYXJ0cyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlTGlzdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHNlbGY7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHdpbmRvdztcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsO1xuICByZXR1cm4ge307XG59XG5cbmNvbnN0IEcgPSBnZXRHbG9iYWwoKTtcbmNvbnN0IEZvcm1EYXRhQ3RvciA9IHR5cGVvZiBHLkZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEcuRm9ybURhdGEgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIGZhbHNlO1xuICBpZiAoRm9ybURhdGFDdG9yICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGFDdG9yKSByZXR1cm4gdHJ1ZTtcbiAgLy8gUmVqZWN0IHBsYWluIG9iamVjdHMgaW5oZXJpdGluZyBkaXJlY3RseSBmcm9tIE9iamVjdC5wcm90b3R5cGUgc28gcHJvdG90eXBlLXBvbGx1dGlvbiBnYWRnZXRzIGNhbid0IHNwb29mIEZvcm1EYXRhLlxuICBjb25zdCBwcm90byA9IGdldFByb3RvdHlwZU9mKHRoaW5nKTtcbiAgaWYgKCFwcm90byB8fCBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBraW5kID0ga2luZE9mKHRoaW5nKTtcbiAgcmV0dXJuIChcbiAgICBraW5kID09PSAnZm9ybWRhdGEnIHx8XG4gICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbXG4gICdSZWFkYWJsZVN0cmVhbScsXG4gICdSZXF1ZXN0JyxcbiAgJ1Jlc3BvbnNlJyxcbiAgJ0hlYWRlcnMnLFxuXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcbn07XG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheTx1bmtub3duPn0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHsgYWxsT3duS2V5cyA9IGZhbHNlIH0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gQnVmZmVyIGNoZWNrXG4gICAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmluZHMgYSBrZXkgaW4gYW4gb2JqZWN0LCBjYXNlLWluc2Vuc2l0aXZlLCByZXR1cm5pbmcgdGhlIGFjdHVhbCBrZXkgbmFtZS5cbiAqIFJldHVybnMgbnVsbCBpZiB0aGUgb2JqZWN0IGlzIGEgQnVmZmVyIG9yIGlmIG5vIG1hdGNoIGlzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBUaGUgb2JqZWN0IHRvIHNlYXJjaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGZpbmQgKGNhc2UtaW5zZW5zaXRpdmUpLlxuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBhY3R1YWwga2V5IG5hbWUgaWYgZm91bmQsIG90aGVyd2lzZSBudWxsLlxuICovXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGlmIChpc0J1ZmZlcihvYmopKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLi4ub2Jqcykge1xuICBjb25zdCB7IGNhc2VsZXNzLCBza2lwVW5kZWZpbmVkIH0gPSAoaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzKSB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgLy8gU2tpcCBkYW5nZXJvdXMgcHJvcGVydHkgbmFtZXMgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaW5kS2V5IGxvd2VyY2FzZXMgdGhlIGtleSwgc28gY2FzZWxlc3MgbG9va3VwIG9ubHkgYXBwbGllcyB0byBzdHJpbmdzIOKAlFxuICAgIC8vIHN5bWJvbCBrZXlzIGFyZSBpZGVudGl0eS1tYXRjaGVkLlxuICAgIGNvbnN0IHRhcmdldEtleSA9IChjYXNlbGVzcyAmJiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSkgfHwga2V5O1xuICAgIC8vIFJlYWQgdmlhIG93bi1wcm9wIG9ubHkg4oCUIGEgYmFyZSBgcmVzdWx0W3RhcmdldEtleV1gIHdhbGtzIHRoZSBwcm90b3R5cGVcbiAgICAvLyBjaGFpbiwgc28gYSBwb2xsdXRlZCBPYmplY3QucHJvdG90eXBlIHZhbHVlIGNvdWxkIHN1cmZhY2UgaGVyZSBhbmQgZ2V0XG4gICAgLy8gY29waWVkIGludG8gdGhlIG1lcmdlZCByZXN1bHQuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBoYXNPd25Qcm9wZXJ0eShyZXN1bHQsIHRhcmdldEtleSkgPyByZXN1bHRbdGFyZ2V0S2V5XSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChleGlzdGluZykgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKGV4aXN0aW5nLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSBpZiAoIXNraXBVbmRlZmluZWQgfHwgIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IG9ianMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3Qgc291cmNlID0gb2Jqc1tpXTtcbiAgICBpZiAoIXNvdXJjZSB8fCBpc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHNvdXJjZSwgYXNzaWduVmFsdWUpO1xuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnIHx8IGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN5bWJvbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IHN5bWJvbHNbal07XG4gICAgICBpZiAocHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIHN5bWJvbCkpIHtcbiAgICAgICAgYXNzaWduVmFsdWUoc291cmNlW3N5bWJvbF0sIHN5bWJvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7IGFsbE93bktleXMgfSA9IHt9KSA9PiB7XG4gIGZvckVhY2goXG4gICAgYixcbiAgICAodmFsLCBrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwga2V5LCB7XG4gICAgICAgICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9yIHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS5nZXQgY2Fubm90XG4gICAgICAgICAgLy8gaGlqYWNrIGRlZmluZVByb3BlcnR5J3MgYWNjZXNzb3ItdnMtZGF0YSByZXNvbHV0aW9uLlxuICAgICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogYmluZCh2YWwsIHRoaXNBcmcpLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBrZXksIHtcbiAgICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbE93bktleXMgfVxuICApO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhmZWZmKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogY29uc3RydWN0b3IsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSxcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKChUeXBlZEFycmF5KSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodGhpbmcpID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbaXRlcmF0b3JdO1xuXG4gIGNvbnN0IF9pdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IF9pdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gKHN0cikgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZywgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgfSk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IChcbiAgKHsgaGFzT3duUHJvcGVydHkgfSkgPT5cbiAgKG9iaiwgcHJvcCkgPT5cbiAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcClcbikoT2JqZWN0LnByb3RvdHlwZSk7XG5cbmNvbnN0IHsgcHJvcGVydHlJc0VudW1lcmFibGUgfSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKFwiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJ1wiICsgbmFtZSArIFwiJ1wiKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb3IgYSBkZWxpbWl0ZWQgc3RyaW5nIGludG8gYW4gb2JqZWN0IHNldCB3aXRoIHZhbHVlcyBhcyBrZXlzIGFuZCB0cnVlIGFzIHZhbHVlcy5cbiAqIFVzZWZ1bCBmb3IgZmFzdCBtZW1iZXJzaGlwIGNoZWNrcy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gYXJyYXlPclN0cmluZyAtIFRoZSBhcnJheSBvciBzdHJpbmcgdG8gY29udmVydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWxpbWl0ZXIgLSBUaGUgZGVsaW1pdGVyIHRvIHVzZSBpZiBpbnB1dCBpcyBhIHN0cmluZy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGtleXMgZnJvbSB0aGUgYXJyYXkgb3Igc3RyaW5nLCB2YWx1ZXMgc2V0IHRvIHRydWUuXG4gKi9cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSgodmFsdWUgPSArdmFsdWUpKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKFxuICAgIHRoaW5nICYmXG4gICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmXG4gICAgdGhpbmdbdG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmXG4gICAgdGhpbmdbaXRlcmF0b3JdXG4gICk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY29udmVydHMgYW4gb2JqZWN0IHRvIGEgSlNPTi1jb21wYXRpYmxlIG9iamVjdCwgaGFuZGxpbmcgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgQnVmZmVycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gVGhlIEpTT04tY29tcGF0aWJsZSBvYmplY3QuXG4gKi9cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlKSA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy9CdWZmZXIgY2hlY2tcbiAgICAgIGlmIChpc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgLy8gYWRkLW9uIGRlc2NlbnQgLyBkZWxldGUtb24tYXNjZW50OiBwcmVzZXJ2ZXMgcGF0aCBzZW1hbnRpY3MsIHNvIERBRyBub2RlcyBzZXJpYWxpc2UgYXQgZXZlcnkgb2NjdXJyZW5jZSAoc2VlICM3MjMwKS5cbiAgICAgICAgdmlzaXRlZC5hZGQoc291cmNlKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmlzaXRlZC5kZWxldGUoc291cmNlKTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaik7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSB2YWx1ZSBpcyBhbiBhc3luYyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBhc3luYyBmdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIHRoZW5hYmxlIChoYXMgdGhlbiBhbmQgY2F0Y2ggbWV0aG9kcykuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgdGhlbmFibGUsIG90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiZcbiAgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiZcbiAgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJlxuICBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuLyoqXG4gKiBQcm92aWRlcyBhIGNyb3NzLXBsYXRmb3JtIHNldEltbWVkaWF0ZSBpbXBsZW1lbnRhdGlvbi5cbiAqIFVzZXMgbmF0aXZlIHNldEltbWVkaWF0ZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHBvc3RNZXNzYWdlIG9yIHNldFRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBzZXRJbW1lZGlhdGVTdXBwb3J0ZWQgLSBXaGV0aGVyIHNldEltbWVkaWF0ZSBpcyBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHBvc3RNZXNzYWdlU3VwcG9ydGVkIC0gV2hldGhlciBwb3N0TWVzc2FnZSBpcyBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gc2NoZWR1bGUgYSBjYWxsYmFjayBhc3luY2hyb25vdXNseS5cbiAqL1xuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZFxuICAgID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAnbWVzc2FnZScsXG4gICAgICAgICAgKHsgc291cmNlLCBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sICcqJyk7XG4gICAgICAgIH07XG4gICAgICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKVxuICAgIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSkpO1xuXG4vKipcbiAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzayBvciBhc3luY2hyb25vdXMgY2FsbGJhY2sgYXMgc29vbiBhcyBwb3NzaWJsZS5cbiAqIFVzZXMgcXVldWVNaWNyb3Rhc2sgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBwcm9jZXNzLm5leHRUaWNrIG9yIF9zZXRJbW1lZGlhdGUuXG4gKlxuICogQHR5cGUge0Z1bmN0aW9ufVxuICovXG5jb25zdCBhc2FwID1cbiAgdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJ1xuICAgID8gcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKVxuICAgIDogKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrKSB8fCBfc2V0SW1tZWRpYXRlO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuY29uc3QgaXNJdGVyYWJsZSA9ICh0aGluZykgPT4gdGhpbmcgIT0gbnVsbCAmJiBpc0Z1bmN0aW9uKHRoaW5nW2l0ZXJhdG9yXSk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzRW1wdHlPYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzUmVhY3ROYXRpdmVCbG9iLFxuICBpc1JlYWN0TmF0aXZlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcCxcbiAgaXNJdGVyYWJsZSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJyxcbiAgJ2F1dGhvcml6YXRpb24nLFxuICAnY29udGVudC1sZW5ndGgnLFxuICAnY29udGVudC10eXBlJyxcbiAgJ2V0YWcnLFxuICAnZXhwaXJlcycsXG4gICdmcm9tJyxcbiAgJ2hvc3QnLFxuICAnaWYtbW9kaWZpZWQtc2luY2UnLFxuICAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJyxcbiAgJ2xvY2F0aW9uJyxcbiAgJ21heC1mb3J3YXJkcycsXG4gICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLFxuICAncmV0cnktYWZ0ZXInLFxuICAndXNlci1hZ2VudCcsXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IChyYXdIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmXG4gICAgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmZ1bmN0aW9uIHRyaW1TUG9ySFRBQihzdHIpIHtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IHN0ci5sZW5ndGg7XG5cbiAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XG4gICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KHN0YXJ0KTtcblxuICAgIGlmIChjb2RlICE9PSAweDA5ICYmIGNvZGUgIT09IDB4MjApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN0YXJ0ICs9IDE7XG4gIH1cblxuICB3aGlsZSAoZW5kID4gc3RhcnQpIHtcbiAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoZW5kIC0gMSk7XG5cbiAgICBpZiAoY29kZSAhPT0gMHgwOSAmJiBjb2RlICE9PSAweDIwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBlbmQgLT0gMTtcbiAgfVxuXG4gIHJldHVybiBzdGFydCA9PT0gMCAmJiBlbmQgPT09IHN0ci5sZW5ndGggPyBzdHIgOiBzdHIuc2xpY2Uoc3RhcnQsIGVuZCk7XG59XG5cbi8vIFRoZSBjb250cm9sLWNvZGUgcmFuZ2VzIGFyZSBpbnRlbnRpb25hbDogaGVhZGVyIHNhbml0aXphdGlvbiBzdHJpcHMgQzAvREVMIGJ5dGVzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbmNvbnN0IElOVkFMSURfVU5JQ09ERV9IRUFERVJfVkFMVUVfQ0hBUlMgPSBuZXcgUmVnRXhwKCdbXFxcXHUwMDAwLVxcXFx1MDAwOFxcXFx1MDAwYS1cXFxcdTAwMWZcXFxcdTAwN2ZdKycsICdnJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuY29uc3QgSU5WQUxJRF9CWVRFX1NUUklOR19IRUFERVJfVkFMVUVfQ0hBUlMgPSBuZXcgUmVnRXhwKCdbXlxcXFx1MDAwOVxcXFx1MDAyMC1cXFxcdTAwN2VcXFxcdTAwODAtXFxcXHUwMGZmXSsnLCAnZycpO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVZhbHVlKHZhbHVlLCBpbnZhbGlkQ2hhcnMpIHtcbiAgaWYgKHV0aWxzLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbSkgPT4gc2FuaXRpemVWYWx1ZShpdGVtLCBpbnZhbGlkQ2hhcnMpKTtcbiAgfVxuXG4gIHJldHVybiB0cmltU1BvckhUQUIoU3RyaW5nKHZhbHVlKS5yZXBsYWNlKGludmFsaWRDaGFycywgJycpKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNhbml0aXplSGVhZGVyVmFsdWUgPSAodmFsdWUpID0+XG4gIHNhbml0aXplVmFsdWUodmFsdWUsIElOVkFMSURfVU5JQ09ERV9IRUFERVJfVkFMVUVfQ0hBUlMpO1xuXG5leHBvcnQgY29uc3Qgc2FuaXRpemVCeXRlU3RyaW5nSGVhZGVyVmFsdWUgPSAodmFsdWUpID0+XG4gIHNhbml0aXplVmFsdWUodmFsdWUsIElOVkFMSURfQllURV9TVFJJTkdfSEVBREVSX1ZBTFVFX0NIQVJTKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvQnl0ZVN0cmluZ0hlYWRlck9iamVjdChoZWFkZXJzKSB7XG4gIGNvbnN0IGJ5dGVTdHJpbmdIZWFkZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMudG9KU09OKCksICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgYnl0ZVN0cmluZ0hlYWRlcnNbaGVhZGVyXSA9IHNhbml0aXplQnl0ZVN0cmluZ0hlYWRlclZhbHVlKHZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJ5dGVTdHJpbmdIZWFkZXJzO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5pbXBvcnQgeyBzYW5pdGl6ZUhlYWRlclZhbHVlIH0gZnJvbSAnLi4vaGVscGVycy9zYW5pdGl6ZUhlYWRlclZhbHVlLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IHNhbml0aXplSGVhZGVyVmFsdWUoU3RyaW5nKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlclxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICAvLyBOdWxsLXByb3RvIGRlc2NyaXB0b3Igc28gYSBwb2xsdXRlZCBPYmplY3QucHJvdG90eXBlLmdldCBjYW5ub3QgdHVyblxuICAgICAgLy8gdGhpcyBkYXRhIGRlc2NyaXB0b3IgaW50byBhbiBhY2Nlc3NvciBkZXNjcmlwdG9yIG9uIHRoZSB3YXkgaW4uXG4gICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZiAoXG4gICAgICAgICFrZXkgfHxcbiAgICAgICAgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgX3Jld3JpdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdChoZWFkZXIpICYmIHV0aWxzLmlzSXRlcmFibGUoaGVhZGVyKSkge1xuICAgICAgbGV0IG9iaiA9IHt9LFxuICAgICAgICBkZXN0LFxuICAgICAgICBrZXk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGhlYWRlcikge1xuICAgICAgICBpZiAoIXV0aWxzLmlzQXJyYXkoZW50cnkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0IGl0ZXJhdG9yIG11c3QgcmV0dXJuIGEga2V5LXZhbHVlIHBhaXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ialsoa2V5ID0gZW50cnlbMF0pXSA9IChkZXN0ID0gb2JqW2tleV0pXG4gICAgICAgICAgPyB1dGlscy5pc0FycmF5KGRlc3QpXG4gICAgICAgICAgICA/IFsuLi5kZXN0LCBlbnRyeVsxXV1cbiAgICAgICAgICAgIDogW2Rlc3QsIGVudHJ5WzFdXVxuICAgICAgICAgIDogZW50cnlbMV07XG4gICAgICB9XG5cbiAgICAgIHNldEhlYWRlcnMob2JqLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShcbiAgICAgICAga2V5ICYmXG4gICAgICAgIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgdmFsdWUgIT09IGZhbHNlICYmXG4gICAgICAgIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVxuICAgICAgLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpXG4gICAgICAuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXRTZXRDb29raWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzZXQtY29va2llJykgfHwgW107XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9XG4gICAgICAodGhpc1skaW50ZXJuYWxzXSA9XG4gICAgICB0aGlzWyRpbnRlcm5hbHNdID1cbiAgICAgICAge1xuICAgICAgICAgIGFjY2Vzc29yczoge30sXG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbXG4gICdDb250ZW50LVR5cGUnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdVc2VyLUFnZW50JyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHsgdmFsdWUgfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH0sXG4gIH07XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgUkVEQUNURUQgPSAnW1JFREFDVEVEICoqKipdJztcblxuZnVuY3Rpb24gaGFzT3duT3JQcm90b3R5cGVUb0pTT04oc291cmNlKSB7XG4gIGlmICh1dGlscy5oYXNPd25Qcm9wKHNvdXJjZSwgJ3RvSlNPTicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsZXQgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG5cbiAgd2hpbGUgKHByb3RvdHlwZSAmJiBwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBpZiAodXRpbHMuaGFzT3duUHJvcChwcm90b3R5cGUsICd0b0pTT04nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIEJ1aWxkIGEgcGxhaW4tb2JqZWN0IHNuYXBzaG90IG9mIGBjb25maWdgIGFuZCByZXBsYWNlIHRoZSB2YWx1ZSBvZiBhbnkga2V5XG4vLyAoY2FzZS1pbnNlbnNpdGl2ZSkgbGlzdGVkIGluIGByZWRhY3RLZXlzYCB3aXRoIFJFREFDVEVELiBXYWxrcyB0aHJvdWdoIGFycmF5c1xuLy8gYW5kIEF4aW9zSGVhZGVycywgYW5kIHNob3J0LWNpcmN1aXRzIG9uIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG5mdW5jdGlvbiByZWRhY3RDb25maWcoY29uZmlnLCByZWRhY3RLZXlzKSB7XG4gIGNvbnN0IGxvd2VyS2V5cyA9IG5ldyBTZXQocmVkYWN0S2V5cy5tYXAoKGspID0+IFN0cmluZyhrKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNlZW4gPSBbXTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UpID0+IHtcbiAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gc291cmNlO1xuICAgIGlmICh1dGlscy5pc0J1ZmZlcihzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIGlmIChzZWVuLmluZGV4T2Yoc291cmNlKSAhPT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzKSB7XG4gICAgICBzb3VyY2UgPSBzb3VyY2UudG9KU09OKCk7XG4gICAgfVxuXG4gICAgc2Vlbi5wdXNoKHNvdXJjZSk7XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgc291cmNlLmZvckVhY2goKHYsIGkpID0+IHtcbiAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodik7XG4gICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSkge1xuICAgICAgICAgIHJlc3VsdFtpXSA9IHJlZHVjZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpICYmIGhhc093bk9yUHJvdG90eXBlVG9KU09OKHNvdXJjZSkpIHtcbiAgICAgICAgc2Vlbi5wb3AoKTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gbG93ZXJLZXlzLmhhcyhrZXkudG9Mb3dlckNhc2UoKSkgPyBSRURBQ1RFRCA6IHZpc2l0KHZhbHVlKTtcbiAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSByZWR1Y2VkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWVuLnBvcCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KGNvbmZpZyk7XG59XG5cbmNsYXNzIEF4aW9zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyBmcm9tKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykge1xuICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBuZXcgQXhpb3NFcnJvcihlcnJvci5tZXNzYWdlLCBjb2RlIHx8IGVycm9yLmNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuICAgIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcbiAgICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gICAgLy8gUHJlc2VydmUgc3RhdHVzIGZyb20gdGhlIG9yaWdpbmFsIGVycm9yIGlmIG5vdCBhbHJlYWR5IHNldCBmcm9tIHJlc3BvbnNlXG4gICAgaWYgKGVycm9yLnN0YXR1cyAhPSBudWxsICYmIGF4aW9zRXJyb3Iuc3RhdHVzID09IG51bGwpIHtcbiAgICAgIGF4aW9zRXJyb3Iuc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgIH1cblxuICAgIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuICAgIHJldHVybiBheGlvc0Vycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG5cbiAgICAvLyBNYWtlIG1lc3NhZ2UgZW51bWVyYWJsZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgLy8gVGhlIG5hdGl2ZSBFcnJvciBjb25zdHJ1Y3RvciBzZXRzIG1lc3NhZ2UgYXMgbm9uLWVudW1lcmFibGUsXG4gICAgLy8gYnV0IGF4aW9zIDwgdjEuMTMuMyBoYWQgaXQgYXMgZW51bWVyYWJsZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbWVzc2FnZScsIHtcbiAgICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvciBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgICAvLyB0aGlzIGRhdGEgZGVzY3JpcHRvciBpbnRvIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3Igb24gdGhlIHdheSBpbi5cbiAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICAgIHRoaXMuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcbiAgICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICAvLyBPcHQtaW4gcmVkYWN0aW9uOiB3aGVuIHRoZSByZXF1ZXN0IGNvbmZpZyBjYXJyaWVzIGEgYHJlZGFjdGAgYXJyYXksIHRoZVxuICAgIC8vIHZhbHVlIG9mIGFueSBtYXRjaGluZyBrZXkgKGNhc2UtaW5zZW5zaXRpdmUsIGF0IGFueSBkZXB0aCkgaXMgcmVwbGFjZWRcbiAgICAvLyB3aXRoIFJFREFDVEVEIGluIHRoZSBzZXJpYWxpemVkIHNuYXBzaG90LiBVbmRlZmluZWQgb3IgZW1wdHkgbGVhdmVzIHRoZVxuICAgIC8vIGV4aXN0aW5nIHNlcmlhbGl6YXRpb24gYmVoYXZpb3IgdW5jaGFuZ2VkLlxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHJlZGFjdEtleXMgPSBjb25maWcgJiYgdXRpbHMuaGFzT3duUHJvcChjb25maWcsICdyZWRhY3QnKSA/IGNvbmZpZy5yZWRhY3QgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2VyaWFsaXplZENvbmZpZyA9XG4gICAgICB1dGlscy5pc0FycmF5KHJlZGFjdEtleXMpICYmIHJlZGFjdEtleXMubGVuZ3RoID4gMFxuICAgICAgICA/IHJlZGFjdENvbmZpZyhjb25maWcsIHJlZGFjdEtleXMpXG4gICAgICAgIDogdXRpbHMudG9KU09OT2JqZWN0KGNvbmZpZyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiBzZXJpYWxpemVkQ29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICB9O1xuICB9XG59XG5cbi8vIFRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gc3RhdGljIHByb3BlcnRpZXMgYXMgc29vbiBhcyB0aGUgcGFyc2VyIG9wdGlvbnMgaW4gLmVzbGludC5janMgYXJlIHVwZGF0ZWQuXG5BeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFID0gJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04gPSAnRVJSX0JBRF9PUFRJT04nO1xuQXhpb3NFcnJvci5FQ09OTkFCT1JURUQgPSAnRUNPTk5BQk9SVEVEJztcbkF4aW9zRXJyb3IuRVRJTUVET1VUID0gJ0VUSU1FRE9VVCc7XG5BeGlvc0Vycm9yLkVDT05OUkVGVVNFRCA9ICdFQ09OTlJFRlVTRUQnO1xuQXhpb3NFcnJvci5FUlJfTkVUV09SSyA9ICdFUlJfTkVUV09SSyc7XG5BeGlvc0Vycm9yLkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMgPSAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyc7XG5BeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEID0gJ0VSUl9ERVBSRUNBVEVEJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSA9ICdFUlJfQkFEX1JFU1BPTlNFJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNUID0gJ0VSUl9CQURfUkVRVUVTVCc7XG5BeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCA9ICdFUlJfQ0FOQ0VMRUQnO1xuQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQgPSAnRVJSX05PVF9TVVBQT1JUJztcbkF4aW9zRXJyb3IuRVJSX0lOVkFMSURfVVJMID0gJ0VSUl9JTlZBTElEX1VSTCc7XG5BeGlvc0Vycm9yLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQgPSAnRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRCc7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoXG4gICAgLmNvbmNhdChrZXkpXG4gICAgLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICAgIH0pXG4gICAgLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChcbiAgICBvcHRpb25zLFxuICAgIHtcbiAgICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgICBkb3RzOiBmYWxzZSxcbiAgICAgIGluZGV4ZXM6IGZhbHNlLFxuICAgIH0sXG4gICAgZmFsc2UsXG4gICAgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgICB9XG4gICk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYik7XG4gIGNvbnN0IG1heERlcHRoID0gb3B0aW9ucy5tYXhEZXB0aCA9PT0gdW5kZWZpbmVkID8gMTAwIDogb3B0aW9ucy5tYXhEZXB0aDtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNCb29sZWFuKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh1dGlscy5pc1JlYWN0TmF0aXZlKGZvcm1EYXRhKSAmJiB1dGlscy5pc1JlYWN0TmF0aXZlQmxvYih2YWx1ZSkpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgICBpbmRleGVzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKVxuICAgICAgICAgICAgICAgIDogaW5kZXhlcyA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgICAgICAgIDoga2V5ICsgJ1tdJyxcbiAgICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZSxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgsIGRlcHRoID0gMCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChkZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgJ09iamVjdCBpcyB0b28gZGVlcGx5IG5lc3RlZCAoJyArIGRlcHRoICsgJyBsZXZlbHMpLiBNYXggZGVwdGg6ICcgKyBtYXhEZXB0aCxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfRk9STV9EQVRBX0RFUFRIX0VYQ0VFREVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJlxuICAgICAgICB2aXNpdG9yLmNhbGwoZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnMpO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldLCBkZXB0aCArIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXJcbiAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICAgICAgfVxuICAgIDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlyc1xuICAgIC5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gICAgfSwgJycpXG4gICAgLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIFVSTC1lbmNvZGVkIGZvcm1zIG9mIGA6YCwgYCRgLCBgLGAsIGFuZCBzcGFjZXMgd2l0aFxuICogdGhlaXIgcGxhaW4gY291bnRlcnBhcnRzIChgOmAsIGAkYCwgYCxgLCBgK2ApLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKVxuICAgIC5yZXBsYWNlKC8lM0EvZ2ksICc6JylcbiAgICAucmVwbGFjZSgvJTI0L2csICckJylcbiAgICAucmVwbGFjZSgvJTJDL2dpLCAnLCcpXG4gICAgLnJlcGxhY2UoLyUyMC9nLCAnKycpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7PyhvYmplY3R8RnVuY3Rpb24pfSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgY29uc3QgX2VuY29kZSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlKSB8fCBlbmNvZGU7XG5cbiAgY29uc3QgX29wdGlvbnMgPSB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpXG4gICAgPyB7XG4gICAgICAgIHNlcmlhbGl6ZTogb3B0aW9ucyxcbiAgICAgIH1cbiAgICA6IG9wdGlvbnM7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBfb3B0aW9ucyAmJiBfb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgX29wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpXG4gICAgICA/IHBhcmFtcy50b1N0cmluZygpXG4gICAgICA6IG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIF9vcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIGludGVyY2VwdG9yLCBzeW5jaHJvbm91cyBhbmQgcnVuV2hlblxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGwsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZSxcbiAgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzogdHJ1ZSxcbiAgYWR2ZXJ0aXNlWnN0ZEFjY2VwdEVuY29kaW5nOiBmYWxzZSxcbn07XG4iLCJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2IsXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG4iLCJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9ICh0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IpIHx8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9XG4gIGhhc0Jyb3dzZXJFbnYgJiZcbiAgKCFfbmF2aWdhdG9yIHx8IFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihfbmF2aWdhdG9yLnByb2R1Y3QpIDwgMCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IChoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luLFxufTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuL25vZGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9jb21tb24vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKChtYXRjaCkgPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pXG4gICAgICAgICAgPyB0YXJnZXRbbmFtZV0uY29uY2F0KHZhbHVlKVxuICAgICAgICAgIDogW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG5jb25zdCBvd24gPSAob2JqLCBrZXkpID0+IChvYmogIT0gbnVsbCAmJiB1dGlscy5oYXNPd25Qcm9wKG9iaiwga2V5KSA/IG9ialtrZXldIDogdW5kZWZpbmVkKTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICB9XG4gICAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1TZXJpYWxpemVyID0gb3duKHRoaXMsICdmb3JtU2VyaWFsaXplcicpO1xuICAgICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIGZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHxcbiAgICAgICAgICBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBlbnYgPSBvd24odGhpcywgJ2VudicpO1xuICAgICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IGVudiAmJiBlbnYuRm9ybURhdGE7XG5cbiAgICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICAgIGlzRmlsZUxpc3QgPyB7ICdmaWxlc1tdJzogZGF0YSB9IDogZGF0YSxcbiAgICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgICBmb3JtU2VyaWFsaXplclxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgXSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IG93bih0aGlzLCAndHJhbnNpdGlvbmFsJykgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gb3duKHRoaXMsICdyZXNwb25zZVR5cGUnKTtcbiAgICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSByZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBkYXRhICYmXG4gICAgICAgIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmXG4gICAgICAgICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhLCBvd24odGhpcywgJ3BhcnNlUmV2aXZlcicpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCBvd24odGhpcywgJ3Jlc3BvbnNlJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgXSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iLFxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgfSxcbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAncXVlcnknXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbiAodmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jbGFzcyBDYW5jZWxlZEVycm9yIGV4dGVuZHMgQXhpb3NFcnJvciB7XG4gIC8qKlxuICAgKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICBzdXBlcihtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xuICAgIHRoaXMuX19DQU5DRUxfXyA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5zdGF0dXMgPj0gNDAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDUwMCA/IEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNUIDogQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsImltcG9ydCBzcGVlZG9tZXRlciBmcm9tICcuL3NwZWVkb21ldGVyLmpzJztcbmltcG9ydCB0aHJvdHRsZSBmcm9tICcuL3Rocm90dGxlLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoKGUpID0+IHtcbiAgICBpZiAoIWUgfHwgdHlwZW9mIGUubG9hZGVkICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByYXdMb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbG9hZGVkID0gdG90YWwgIT0gbnVsbCA/IE1hdGgubWluKHJhd0xvYWRlZCwgdG90YWwpIDogcmF3TG9hZGVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBNYXRoLm1heCgwLCBsb2FkZWQgLSBieXRlc05vdGlmaWVkKTtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IE1hdGgubWF4KGJ5dGVzTm90aWZpZWQsIGxvYWRlZCk7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyBsb2FkZWQgLyB0b3RhbCA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnREZWNvcmF0b3IgPSAodG90YWwsIHRocm90dGxlZCkgPT4ge1xuICBjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT0gbnVsbDtcblxuICByZXR1cm4gW1xuICAgIChsb2FkZWQpID0+XG4gICAgICB0aHJvdHRsZWRbMF0oe1xuICAgICAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgICAgICB0b3RhbCxcbiAgICAgICAgbG9hZGVkLFxuICAgICAgfSksXG4gICAgdGhyb3R0bGVkWzFdLFxuICBdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzeW5jRGVjb3JhdG9yID1cbiAgKGZuKSA9PlxuICAoLi4uYXJncykgPT5cbiAgICB1dGlscy5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKChieXRlc0NvdW50ICogMTAwMCkgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsIi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbiguLi5hcmdzKTtcbiAgfTtcblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmIChwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpO1xuICAgICAgICB9LCB0aHJlc2hvbGQgLSBwYXNzZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZcbiAgPyAoKG9yaWdpbiwgaXNNU0lFKSA9PiAodXJsKSA9PiB7XG4gICAgICB1cmwgPSBuZXcgVVJMKHVybCwgcGxhdGZvcm0ub3JpZ2luKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgb3JpZ2luLnByb3RvY29sID09PSB1cmwucHJvdG9jb2wgJiZcbiAgICAgICAgb3JpZ2luLmhvc3QgPT09IHVybC5ob3N0ICYmXG4gICAgICAgIChpc01TSUUgfHwgb3JpZ2luLnBvcnQgPT09IHVybC5wb3J0KVxuICAgICAgKTtcbiAgICB9KShcbiAgICAgIG5ldyBVUkwocGxhdGZvcm0ub3JpZ2luKSxcbiAgICAgIHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgKVxuICA6ICgpID0+IHRydWU7XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52XG4gID8gLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAge1xuICAgICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lU2l0ZSkge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IFtgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YF07XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYGV4cGlyZXM9JHtuZXcgRGF0ZShleHBpcmVzKS50b1VUQ1N0cmluZygpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKGBwYXRoPSR7cGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKGBkb21haW49JHtkb21haW59YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoc2FtZVNpdGUpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYFNhbWVTaXRlPSR7c2FtZVNpdGV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlYWQobmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIE1hdGNoIG5hbWU9dmFsdWUgYnkgc3BsaXR0aW5nIG9uIHRoZSBzZW1pY29sb24gc2VwYXJhdG9yIGluc3RlYWQgb2YgYnVpbGRpbmcgYVxuICAgICAgICAvLyBSZWdFeHAgZnJvbSBgbmFtZWAg4oCUIGludGVycG9sYXRpbmcgYW4gdW5lc2NhcGVkIHN0cmluZyBpbnRvIGEgUmVnRXhwIHdvdWxkIGxldFxuICAgICAgICAvLyBtZXRhY2hhcmFjdGVycyAoZS5nLiBgLis/YCBpbiBhbiBhdHRhY2tlci1pbmZsdWVuY2VkIGNvb2tpZSBuYW1lKSBjYXVzZSBSZURvUyBvclxuICAgICAgICAvLyBtYXRjaCB0aGUgd3JvbmcgY29va2llLiBCcm93c2VycyBtYXkgc2VyaWFsaXplIGNvb2tpZSBwYWlycyBhcyBlaXRoZXIgXCI7XCIgb3JcbiAgICAgICAgLy8gXCI7IFwiLCBzbyBpZ25vcmUgb3B0aW9uYWwgd2hpdGVzcGFjZSBiZWZvcmUgZWFjaCBjb29raWUgbmFtZS5cbiAgICAgICAgY29uc3QgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjb29raWUgPSBjb29raWVzW2ldLnJlcGxhY2UoL15cXHMrLywgJycpO1xuICAgICAgICAgIGNvbnN0IGVxID0gY29va2llLmluZGV4T2YoJz0nKTtcbiAgICAgICAgICBpZiAoZXEgIT09IC0xICYmIGNvb2tpZS5zbGljZSgwLCBlcSkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llLnNsaWNlKGVxICsgMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCwgJy8nKTtcbiAgICAgIH0sXG4gICAgfVxuICA6IC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICB7XG4gICAgICB3cml0ZSgpIHt9LFxuICAgICAgcmVhZCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKCkge30sXG4gICAgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMLCBhbGxvd0Fic29sdXRlVXJscykge1xuICBsZXQgaXNSZWxhdGl2ZVVybCA9ICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCk7XG4gIGlmIChiYXNlVVJMICYmIChpc1JlbGF0aXZlVXJsIHx8IGFsbG93QWJzb2x1dGVVcmxzID09PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gKHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmcpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuXG4gIC8vIFVzZSBhIG51bGwtcHJvdG90eXBlIG9iamVjdCBzbyB0aGF0IGRvd25zdHJlYW0gcmVhZHMgc3VjaCBhcyBgY29uZmlnLmF1dGhgXG4gIC8vIG9yIGBjb25maWcuYmFzZVVSTGAgY2Fubm90IGluaGVyaXQgcG9sbHV0ZWQgdmFsdWVzIGZyb20gT2JqZWN0LnByb3RvdHlwZS5cbiAgLy8gYGhhc093blByb3BlcnR5YCBpcyByZXN0b3JlZCBhcyBhIG5vbi1lbnVtZXJhYmxlIG93biBzbG90IHRvIHByZXNlcnZlXG4gIC8vIGVyZ29ub21pY3MgZm9yIHVzZXIgY29kZSB0aGF0IHJlbGllcyBvbiBpdC5cbiAgY29uc3QgY29uZmlnID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbmZpZywgJ2hhc093blByb3BlcnR5Jywge1xuICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvciBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgLy8gdGhpcyBkYXRhIGRlc2NyaXB0b3IgaW50byBhbiBhY2Nlc3NvciBkZXNjcmlwdG9yIG9uIHRoZSB3YXkgaW4uXG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIHByb3AsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHsgY2FzZWxlc3MgfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgcHJvcCwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBwcm9wLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHV0aWxzLmhhc093blByb3AoY29uZmlnMiwgcHJvcCkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmhhc093blByb3AoY29uZmlnMSwgcHJvcCkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFsbG93ZWRTb2NrZXRQYXRoczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIsIHByb3ApID0+XG4gICAgICBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCBwcm9wLCB0cnVlKSxcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKHsgLi4uY29uZmlnMSwgLi4uY29uZmlnMiB9KSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ19fcHJvdG9fXycgfHwgcHJvcCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBwcm9wID09PSAncHJvdG90eXBlJykgcmV0dXJuO1xuICAgIGNvbnN0IG1lcmdlID0gdXRpbHMuaGFzT3duUHJvcChtZXJnZU1hcCwgcHJvcCkgPyBtZXJnZU1hcFtwcm9wXSA6IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgYSA9IHV0aWxzLmhhc093blByb3AoY29uZmlnMSwgcHJvcCkgPyBjb25maWcxW3Byb3BdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGIgPSB1dGlscy5oYXNPd25Qcm9wKGNvbmZpZzIsIHByb3ApID8gY29uZmlnMltwcm9wXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGEsIGIsIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuL2lzVVJMU2FtZU9yaWdpbi5qcyc7XG5pbXBvcnQgY29va2llcyBmcm9tICcuL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vYnVpbGRVUkwuanMnO1xuXG5jb25zdCBGT1JNX0RBVEFfQ09OVEVOVF9IRUFERVJTID0gWydjb250ZW50LXR5cGUnLCAnY29udGVudC1sZW5ndGgnXTtcblxuZnVuY3Rpb24gc2V0Rm9ybURhdGFIZWFkZXJzKGhlYWRlcnMsIGZvcm1IZWFkZXJzLCBwb2xpY3kpIHtcbiAgaWYgKHBvbGljeSAhPT0gJ2NvbnRlbnQtb25seScpIHtcbiAgICBoZWFkZXJzLnNldChmb3JtSGVhZGVycyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgT2JqZWN0LmVudHJpZXMoZm9ybUhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICBpZiAoRk9STV9EQVRBX0NPTlRFTlRfSEVBREVSUy5pbmNsdWRlcyhrZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0KGtleSwgdmFsKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEVuY29kZSBhIFVURi04IHN0cmluZyB0byBhIExhdGluLTEgYnl0ZSBzdHJpbmcgZm9yIHVzZSB3aXRoIGJ0b2EoKS5cbiAqIFRoaXMgaXMgYSBtb2Rlcm4gcmVwbGFjZW1lbnQgZm9yIHRoZSBkZXByZWNhdGVkIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKSBwYXR0ZXJuLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBlbmNvZGVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtOCBieXRlcyBhcyBhIExhdGluLTEgc3RyaW5nXG4gKi9cbmNvbnN0IGVuY29kZVVURjggPSAoc3RyKSA9PlxuICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9naSwgKF8sIGhleCkgPT5cbiAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGhleCwgMTYpKVxuICApO1xuXG5mdW5jdGlvbiByZXNvbHZlQ29uZmlnKGNvbmZpZykge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICAvLyBSZWFkIG9ubHkgb3duIHByb3BlcnRpZXMgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uIGdhZGdldHNcbiAgLy8gKGUuZy4gT2JqZWN0LnByb3RvdHlwZS5iYXNlVVJMID0gJ2h0dHBzOi8vZXZpbC5jb20nKS5cbiAgY29uc3Qgb3duID0gKGtleSkgPT4gKHV0aWxzLmhhc093blByb3AobmV3Q29uZmlnLCBrZXkpID8gbmV3Q29uZmlnW2tleV0gOiB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGRhdGEgPSBvd24oJ2RhdGEnKTtcbiAgbGV0IHdpdGhYU1JGVG9rZW4gPSBvd24oJ3dpdGhYU1JGVG9rZW4nKTtcbiAgY29uc3QgeHNyZkhlYWRlck5hbWUgPSBvd24oJ3hzcmZIZWFkZXJOYW1lJyk7XG4gIGNvbnN0IHhzcmZDb29raWVOYW1lID0gb3duKCd4c3JmQ29va2llTmFtZScpO1xuICBsZXQgaGVhZGVycyA9IG93bignaGVhZGVycycpO1xuICBjb25zdCBhdXRoID0gb3duKCdhdXRoJyk7XG4gIGNvbnN0IGJhc2VVUkwgPSBvd24oJ2Jhc2VVUkwnKTtcbiAgY29uc3QgYWxsb3dBYnNvbHV0ZVVybHMgPSBvd24oJ2FsbG93QWJzb2x1dGVVcmxzJyk7XG4gIGNvbnN0IHVybCA9IG93bigndXJsJyk7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKFxuICAgIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgdXJsLCBhbGxvd0Fic29sdXRlVXJscyksXG4gICAgb3duKCdwYXJhbXMnKSxcbiAgICBvd24oJ3BhcmFtc1NlcmlhbGl6ZXInKVxuICApO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldChcbiAgICAgICdBdXRob3JpemF0aW9uJyxcbiAgICAgICdCYXNpYyAnICtcbiAgICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IGVuY29kZVVURjgoYXV0aC5wYXNzd29yZCkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKFxuICAgICAgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8XG4gICAgICBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgfHxcbiAgICAgIHV0aWxzLmlzUmVhY3ROYXRpdmUoZGF0YSlcbiAgICApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gYnJvd3Nlci93ZWIgd29ya2VyL1JOIGhhbmRsZXMgaXRcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZGF0YS5nZXRIZWFkZXJzKSkge1xuICAgICAgLy8gTm9kZS5qcyBGb3JtRGF0YSAobGlrZSBmb3JtLWRhdGEgcGFja2FnZSlcbiAgICAgIHNldEZvcm1EYXRhSGVhZGVycyhoZWFkZXJzLCBkYXRhLmdldEhlYWRlcnMoKSwgb3duKCdmb3JtRGF0YUhlYWRlclBvbGljeScpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pKSB7XG4gICAgICB3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpO1xuICAgIH1cblxuICAgIC8vIFN0cmljdCBib29sZWFuIGNoZWNrIOKAlCBwcmV2ZW50cyBwcm90by1wb2xsdXRpb24gZ2FkZ2V0cyAoZS5nLiBPYmplY3QucHJvdG90eXBlLndpdGhYU1JGVG9rZW4gPSAxKVxuICAgIC8vIGFuZCBtaXNjb25maWd1cmF0aW9ucyAoZS5nLiBcImZhbHNlXCIpIGZyb20gc2hvcnQtY2lyY3VpdGluZyB0aGUgc2FtZS1vcmlnaW4gY2hlY2sgYW5kIGxlYWtpbmdcbiAgICAvLyB0aGUgWFNSRiB0b2tlbiBjcm9zcy1vcmlnaW4uXG4gICAgY29uc3Qgc2hvdWxkU2VuZFhTUkYgPVxuICAgICAgd2l0aFhTUkZUb2tlbiA9PT0gdHJ1ZSB8fCAod2l0aFhTUkZUb2tlbiA9PSBudWxsICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSk7XG5cbiAgICBpZiAoc2hvdWxkU2VuZFhTUkYpIHtcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZUNvbmZpZztcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgeyBwcm9ncmVzc0V2ZW50UmVkdWNlciB9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSAnLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzJztcbmltcG9ydCB7IHRvQnl0ZVN0cmluZ0hlYWRlck9iamVjdCB9IGZyb20gJy4uL2hlbHBlcnMvc2FuaXRpemVIZWFkZXJWYWx1ZS5qcyc7XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJlxuICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgICBsZXQgeyByZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzcyB9ID0gX2NvbmZpZztcbiAgICAgIGxldCBvbkNhbmNlbGVkO1xuICAgICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPVxuICAgICAgICAgICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbidcbiAgICAgICAgICAgID8gcmVxdWVzdC5yZXNwb25zZVRleHRcbiAgICAgICAgICAgIDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgfTtcblxuICAgICAgICBzZXR0bGUoXG4gICAgICAgICAgZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlcXVlc3Quc3RhdHVzID09PSAwICYmXG4gICAgICAgICAgICAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5zdGFydHNXaXRoKCdmaWxlOicpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKGV2ZW50KSB7XG4gICAgICAgIC8vIEJyb3dzZXJzIGRlbGl2ZXIgYSBQcm9ncmVzc0V2ZW50IGluIFhIUiBvbmVycm9yXG4gICAgICAgIC8vIChtZXNzYWdlIG1heSBiZSBlbXB0eTsgd2hlbiBwcmVzZW50LCBzdXJmYWNlIGl0KVxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L2Vycm9yX2V2ZW50XG4gICAgICAgIGNvbnN0IG1zZyA9IGV2ZW50ICYmIGV2ZW50Lm1lc3NhZ2UgPyBldmVudC5tZXNzYWdlIDogJ05ldHdvcmsgRXJyb3InO1xuICAgICAgICBjb25zdCBlcnIgPSBuZXcgQXhpb3NFcnJvcihtc2csIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICAgIC8vIGF0dGFjaCB0aGUgdW5kZXJseWluZyBldmVudCBmb3IgY29uc3VtZXJzIHdobyB3YW50IGRldGFpbHNcbiAgICAgICAgZXJyLmV2ZW50ID0gZXZlbnQgfHwgbnVsbDtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dFxuICAgICAgICAgID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCdcbiAgICAgICAgICA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgICAgdXRpbHMuZm9yRWFjaCh0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QocmVxdWVzdEhlYWRlcnMpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAgIFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpO1xuICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgICAgW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcyk7XG5cbiAgICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgICAgb25DYW5jZWxlZCA9IChjYW5jZWwpID0+IHtcbiAgICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWRcbiAgICAgICAgICAgID8gb25DYW5jZWxlZCgpXG4gICAgICAgICAgICA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgICAgaWYgKHByb3RvY29sICYmICFwbGF0Zm9ybS5wcm90b2NvbHMuaW5jbHVkZXMocHJvdG9jb2wpKSB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gICAgfSk7XG4gIH07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSk6KD86XFwvXFwvKT8vLmV4ZWModXJsKTtcbiAgcmV0dXJuIChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJyc7XG59XG4iLCJpbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBzaWduYWxzID0gc2lnbmFscyA/IHNpZ25hbHMuZmlsdGVyKEJvb2xlYW4pIDogW107XG5cbiAgaWYgKCF0aW1lb3V0ICYmICFzaWduYWxzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IGFib3J0ZWQgPSBmYWxzZTtcblxuICBjb25zdCBvbmFib3J0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgY29uc3QgZXJyID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiB0aGlzLnJlYXNvbjtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3JcbiAgICAgICAgICA/IGVyclxuICAgICAgICAgIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycilcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGxldCB0aW1lciA9XG4gICAgdGltZW91dCAmJlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCBvZiAke3RpbWVvdXR9bXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpO1xuICAgIH0sIHRpbWVvdXQpO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGlmICghc2lnbmFscykgeyByZXR1cm47IH1cbiAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHRpbWVyID0gbnVsbDtcbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4ge1xuICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlXG4gICAgICAgID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpXG4gICAgICAgIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgfSk7XG4gICAgc2lnbmFscyA9IG51bGw7XG4gIH07XG5cbiAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpKTtcblxuICBjb25zdCB7IHNpZ25hbCB9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB1dGlscy5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICByZXR1cm4gc2lnbmFsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iLCJleHBvcnQgY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbShpdGVyYWJsZSkpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoY2h1bmssIGNodW5rU2l6ZSk7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRTdHJlYW0gPSBhc3luYyBmdW5jdGlvbiogKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHlpZWxkKiBzdHJlYW07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG4gIGxldCBkb25lO1xuICBsZXQgX29uRmluaXNoID0gKGUpID0+IHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgb25GaW5pc2ggJiYgb25GaW5pc2goZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSAoYnl0ZXMgKz0gbGVuKTtcbiAgICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGhpZ2hXYXRlck1hcms6IDIsXG4gICAgfVxuICApO1xufTtcbiIsImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjE3LjBcIjsiLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSAnLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyc7XG5pbXBvcnQgeyB0cmFja1N0cmVhbSB9IGZyb20gJy4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQge1xuICBwcm9ncmVzc0V2ZW50UmVkdWNlcixcbiAgcHJvZ3Jlc3NFdmVudERlY29yYXRvcixcbiAgYXN5bmNEZWNvcmF0b3IsXG59IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSAnLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGVzdGltYXRlRGF0YVVSTERlY29kZWRCeXRlcyBmcm9tICcuLi9oZWxwZXJzL2VzdGltYXRlRGF0YVVSTERlY29kZWRCeXRlcy5qcyc7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHsgdG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0IH0gZnJvbSAnLi4vaGVscGVycy9zYW5pdGl6ZUhlYWRlclZhbHVlLmpzJztcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCB7IGlzRnVuY3Rpb24gfSA9IHV0aWxzO1xuXG4vKipcbiAqIEVuY29kZSBhIFVURi04IHN0cmluZyB0byBhIExhdGluLTEgYnl0ZSBzdHJpbmcgZm9yIHVzZSB3aXRoIGJ0b2EoKS5cbiAqIFRoaXMgaXMgYSBtb2Rlcm4gcmVwbGFjZW1lbnQgZm9yIHRoZSBkZXByZWNhdGVkIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKSBwYXR0ZXJuLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBlbmNvZGVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtOCBieXRlcyBhcyBhIExhdGluLTEgc3RyaW5nXG4gKi9cbmNvbnN0IGVuY29kZVVURjggPSAoc3RyKSA9PlxuICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9naSwgKF8sIGhleCkgPT5cbiAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGhleCwgMTYpKVxuICApO1xuXG4vLyBOb2RlJ3MgV0hBVFdHIFVSTCBwYXJzZXIgcmV0dXJucyBgdXNlcm5hbWVgIGFuZCBgcGFzc3dvcmRgIHBlcmNlbnQtZW5jb2RlZC5cbi8vIERlY29kZSBiZWZvcmUgY29tcG9zaW5nIHRoZSBgYXV0aGAgb3B0aW9uIHNvIGNyZWRlbnRpYWxzIHN1Y2ggYXNcbi8vIGBteSU0MGVtYWlsLmNvbTpwYXNzYCBhcmUgc2VudCBhcyBgbXlAZW1haWwuY29tOnBhc3NgLiBGYWxscyBiYWNrIHRvIHRoZVxuLy8gb3JpZ2luYWwgdmFsdWUgZm9yIG1hbGZvcm1lZCBpbnB1dCBzbyBhIGJhZCBlbmNvZGluZyBuZXZlciB0aHJvd3MuXG5jb25zdCBkZWNvZGVVUklDb21wb25lbnRTYWZlID0gKHZhbHVlKSA9PiB7XG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgbWF5YmVXaXRoQXV0aENyZWRlbnRpYWxzID0gKHVybCkgPT4ge1xuICBjb25zdCBwcm90b2NvbEluZGV4ID0gdXJsLmluZGV4T2YoJzovLycpO1xuICBsZXQgdXJsVG9DaGVjayA9IHVybDtcbiAgaWYgKHByb3RvY29sSW5kZXggIT09IC0xKSB7XG4gICAgdXJsVG9DaGVjayA9IHVybFRvQ2hlY2suc2xpY2UocHJvdG9jb2xJbmRleCArIDMpO1xuICB9XG4gIHJldHVybiB1cmxUb0NoZWNrLmluY2x1ZGVzKCdAJykgfHwgdXJsVG9DaGVjay5pbmNsdWRlcygnOicpO1xufTtcblxuY29uc3QgZmFjdG9yeSA9IChlbnYpID0+IHtcbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID1cbiAgICB1dGlscy5nbG9iYWwgIT09IHVuZGVmaW5lZCAmJiB1dGlscy5nbG9iYWwgIT09IG51bGxcbiAgICAgID8gdXRpbHMuZ2xvYmFsXG4gICAgICA6IGdsb2JhbFRoaXM7XG4gIGNvbnN0IHsgUmVhZGFibGVTdHJlYW0sIFRleHRFbmNvZGVyIH0gPSBnbG9iYWxPYmplY3Q7XG5cbiAgZW52ID0gdXRpbHMubWVyZ2UuY2FsbChcbiAgICB7XG4gICAgICBza2lwVW5kZWZpbmVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgUmVxdWVzdDogZ2xvYmFsT2JqZWN0LlJlcXVlc3QsXG4gICAgICBSZXNwb25zZTogZ2xvYmFsT2JqZWN0LlJlc3BvbnNlLFxuICAgIH0sXG4gICAgZW52XG4gICk7XG5cbiAgY29uc3QgeyBmZXRjaDogZW52RmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlIH0gPSBlbnY7XG4gIGNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSBlbnZGZXRjaCA/IGlzRnVuY3Rpb24oZW52RmV0Y2gpIDogdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBpc1JlcXVlc3RTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlcXVlc3QpO1xuICBjb25zdCBpc1Jlc3BvbnNlU3VwcG9ydGVkID0gaXNGdW5jdGlvbihSZXNwb25zZSk7XG5cbiAgaWYgKCFpc0ZldGNoU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgaXNGdW5jdGlvbihSZWFkYWJsZVN0cmVhbSk7XG5cbiAgY29uc3QgZW5jb2RlVGV4dCA9XG4gICAgaXNGZXRjaFN1cHBvcnRlZCAmJlxuICAgICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKFxuICAgICAgICAgIChlbmNvZGVyKSA9PiAoc3RyKSA9PlxuICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGUoc3RyKVxuICAgICAgICApKG5ldyBUZXh0RW5jb2RlcigpKVxuICAgICAgOiBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVxdWVzdChzdHIpLmFycmF5QnVmZmVyKCkpKTtcblxuICBjb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPVxuICAgIGlzUmVxdWVzdFN1cHBvcnRlZCAmJlxuICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgICB0ZXN0KCgpID0+IHtcbiAgICAgIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuICdoYWxmJztcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNDb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAgICAgcmVxdWVzdC5ib2R5LmNhbmNlbCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xuICAgIH0pO1xuXG4gIGNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPVxuICAgIGlzUmVzcG9uc2VTdXBwb3J0ZWQgJiZcbiAgICBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gICAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG4gIGNvbnN0IHJlc29sdmVycyA9IHtcbiAgICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KSxcbiAgfTtcblxuICBpc0ZldGNoU3VwcG9ydGVkICYmXG4gICAgKCgpID0+IHtcbiAgICAgIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgIXJlc29sdmVyc1t0eXBlXSAmJlxuICAgICAgICAgIChyZXNvbHZlcnNbdHlwZV0gPSAocmVzLCBjb25maWcpID0+IHtcbiAgICAgICAgICAgIGxldCBtZXRob2QgPSByZXMgJiYgcmVzW3R5cGVdO1xuXG4gICAgICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZXRob2QuY2FsbChyZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICAgYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFxuICAgICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCxcbiAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkoKTtcblxuICBjb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5zaXplO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgICBjb25zdCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgICAgYm9keSA9IGJvZHkgKyAnJztcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNTdHJpbmcoYm9keSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICAgIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBsZXQge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGNhbmNlbFRva2VuLFxuICAgICAgdGltZW91dCxcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGZldGNoT3B0aW9ucyxcbiAgICAgIG1heENvbnRlbnRMZW5ndGgsXG4gICAgICBtYXhCb2R5TGVuZ3RoLFxuICAgIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgICBjb25zdCBoYXNNYXhDb250ZW50TGVuZ3RoID0gdXRpbHMuaXNOdW1iZXIobWF4Q29udGVudExlbmd0aCkgJiYgbWF4Q29udGVudExlbmd0aCA+IC0xO1xuICAgIGNvbnN0IGhhc01heEJvZHlMZW5ndGggPSB1dGlscy5pc051bWJlcihtYXhCb2R5TGVuZ3RoKSAmJiBtYXhCb2R5TGVuZ3RoID4gLTE7XG4gICAgY29uc3Qgb3duID0gKGtleSkgPT4gKHV0aWxzLmhhc093blByb3AoY29uZmlnLCBrZXkpID8gY29uZmlnW2tleV0gOiB1bmRlZmluZWQpO1xuXG4gICAgbGV0IF9mZXRjaCA9IGVudkZldGNoIHx8IGZldGNoO1xuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gICAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoXG4gICAgICBbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLFxuICAgICAgdGltZW91dFxuICAgICk7XG5cbiAgICBsZXQgcmVxdWVzdCA9IG51bGw7XG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJlxuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUgJiZcbiAgICAgICgoKSA9PiB7XG4gICAgICAgIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcblxuICAgIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgICBsZXQgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGNvbmZpZ0F1dGggPSBvd24oJ2F1dGgnKTtcblxuICAgICAgaWYgKGNvbmZpZ0F1dGgpIHtcbiAgICAgICAgY29uc3QgdXNlcm5hbWUgPSBjb25maWdBdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZ0F1dGgucGFzc3dvcmQgfHwgJyc7XG4gICAgICAgIGF1dGggPSB7XG4gICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1heWJlV2l0aEF1dGhDcmVkZW50aWFscyh1cmwpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gICAgICAgIGlmICghYXV0aCAmJiAocGFyc2VkVVJMLnVzZXJuYW1lIHx8IHBhcnNlZFVSTC5wYXNzd29yZCkpIHtcbiAgICAgICAgICBjb25zdCB1cmxVc2VybmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudFNhZmUocGFyc2VkVVJMLnVzZXJuYW1lKTtcbiAgICAgICAgICBjb25zdCB1cmxQYXNzd29yZCA9IGRlY29kZVVSSUNvbXBvbmVudFNhZmUocGFyc2VkVVJMLnBhc3N3b3JkKTtcbiAgICAgICAgICBhdXRoID0ge1xuICAgICAgICAgICAgdXNlcm5hbWU6IHVybFVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHVybFBhc3N3b3JkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgICAgcGFyc2VkVVJMLnVzZXJuYW1lID0gJyc7XG4gICAgICAgICAgcGFyc2VkVVJMLnBhc3N3b3JkID0gJyc7XG4gICAgICAgICAgdXJsID0gcGFyc2VkVVJMLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGF1dGgpIHtcbiAgICAgICAgaGVhZGVycy5kZWxldGUoJ2F1dGhvcml6YXRpb24nKTtcbiAgICAgICAgaGVhZGVycy5zZXQoXG4gICAgICAgICAgJ0F1dGhvcml6YXRpb24nLFxuICAgICAgICAgICdCYXNpYyAnICsgYnRvYShlbmNvZGVVVEY4KChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkIHx8ICcnKSkpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZm9yY2UgbWF4Q29udGVudExlbmd0aCBmb3IgZGF0YTogVVJMcyB1cC1mcm9udCBzbyB3ZSBuZXZlciBtYXRlcmlhbGl6ZVxuICAgICAgLy8gYW4gb3ZlcnNpemVkIHBheWxvYWQuIFRoZSBIVFRQIGFkYXB0ZXIgYXBwbGllcyB0aGUgc2FtZSBjaGVjayAoc2VlIGh0dHAuanNcbiAgICAgIC8vIFwiaWYgKHByb3RvY29sID09PSAnZGF0YTonKVwiIGJyYW5jaCkuXG4gICAgICBpZiAoaGFzTWF4Q29udGVudExlbmd0aCAmJiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiB1cmwuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgICAgICBjb25zdCBlc3RpbWF0ZWQgPSBlc3RpbWF0ZURhdGFVUkxEZWNvZGVkQnl0ZXModXJsKTtcbiAgICAgICAgaWYgKGVzdGltYXRlZCA+IG1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZm9yY2UgbWF4Qm9keUxlbmd0aCBhZ2FpbnN0IHRoZSBvdXRib3VuZCByZXF1ZXN0IGJvZHkgYmVmb3JlIGRpc3BhdGNoLlxuICAgICAgLy8gTWlycm9ycyBodHRwLmpzIGJlaGF2aW9yIChFUlJfQkFEX1JFUVVFU1QgLyAnUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuXG4gICAgICAvLyBtYXhCb2R5TGVuZ3RoIGxpbWl0JykuIFNraXAgd2hlbiB0aGUgYm9keSBsZW5ndGggY2Fubm90IGJlIGRldGVybWluZWRcbiAgICAgIC8vIChlLmcuIGEgbGl2ZSBSZWFkYWJsZVN0cmVhbSBzdXBwbGllZCBieSB0aGUgY2FsbGVyKS5cbiAgICAgIGlmIChoYXNNYXhCb2R5TGVuZ3RoICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcpIHtcbiAgICAgICAgY29uc3Qgb3V0Ym91bmRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBvdXRib3VuZExlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICBpc0Zpbml0ZShvdXRib3VuZExlbmd0aCkgJiZcbiAgICAgICAgICBvdXRib3VuZExlbmd0aCA+IG1heEJvZHlMZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICAnUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmXG4gICAgICAgIG1ldGhvZCAhPT0gJ2dldCcgJiZcbiAgICAgICAgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgICApIHtcbiAgICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1dGlscy5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICAgIH1cblxuICAgICAgLy8gQ2xvdWRmbGFyZSBXb3JrZXJzIHRocm93cyB3aGVuIGNyZWRlbnRpYWxzIGFyZSBkZWZpbmVkXG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmICdjcmVkZW50aWFscycgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG5cbiAgICAgIC8vIElmIGRhdGEgaXMgRm9ybURhdGEgYW5kIENvbnRlbnQtVHlwZSBpcyBtdWx0aXBhcnQvZm9ybS1kYXRhIHdpdGhvdXQgYm91bmRhcnksXG4gICAgICAvLyBkZWxldGUgaXQgc28gZmV0Y2ggY2FuIHNldCBpdCBjb3JyZWN0bHkgd2l0aCB0aGUgYm91bmRhcnlcbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29udGVudFR5cGUgJiZcbiAgICAgICAgICAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pLnRlc3QoY29udGVudFR5cGUpICYmXG4gICAgICAgICAgIS9ib3VuZGFyeT0vaS50ZXN0KGNvbnRlbnRUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICBoZWFkZXJzLmRlbGV0ZSgnY29udGVudC10eXBlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IFVzZXItQWdlbnQgaGVhZGVyIGlmIG5vdCBhbHJlYWR5IHNldCAoZmV0Y2ggZGVmYXVsdHMgdG8gJ25vZGUnIGluIE5vZGUuanMpXG4gICAgICBoZWFkZXJzLnNldCgnVXNlci1BZ2VudCcsICdheGlvcy8nICsgVkVSU0lPTiwgZmFsc2UpO1xuXG4gICAgICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgaGVhZGVyczogdG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0KGhlYWRlcnMubm9ybWFsaXplKCkpLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0ID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmIG5ldyBSZXF1ZXN0KHVybCwgcmVzb2x2ZWRPcHRpb25zKTtcblxuICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgKGlzUmVxdWVzdFN1cHBvcnRlZFxuICAgICAgICA/IF9mZXRjaChyZXF1ZXN0LCBmZXRjaE9wdGlvbnMpXG4gICAgICAgIDogX2ZldGNoKHVybCwgcmVzb2x2ZWRPcHRpb25zKSk7XG5cbiAgICAgIC8vIENoZWFwIHByZS1jaGVjazogaWYgdGhlIHNlcnZlciBob25lc3RseSBkZWNsYXJlcyBhIGNvbnRlbnQtbGVuZ3RoIHRoYXRcbiAgICAgIC8vIGFscmVhZHkgZXhjZWVkcyB0aGUgY2FwLCByZWplY3QgYmVmb3JlIHdlIHN0YXJ0IHN0cmVhbWluZy5cbiAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRlY2xhcmVkTGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuICAgICAgICBpZiAoZGVjbGFyZWRMZW5ndGggIT0gbnVsbCAmJiBkZWNsYXJlZExlbmd0aCA+IG1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPVxuICAgICAgICBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJlxuICAgICAgICByZXNwb25zZS5ib2R5ICYmXG4gICAgICAgIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgaGFzTWF4Q29udGVudExlbmd0aCB8fCAoaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID1cbiAgICAgICAgICAob25Eb3dubG9hZFByb2dyZXNzICYmXG4gICAgICAgICAgICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICAgICAgICApKSB8fFxuICAgICAgICAgIFtdO1xuXG4gICAgICAgIGxldCBieXRlc1JlYWQgPSAwO1xuICAgICAgICBjb25zdCBvbkNodW5rUHJvZ3Jlc3MgPSAobG9hZGVkQnl0ZXMpID0+IHtcbiAgICAgICAgICBpZiAoaGFzTWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgYnl0ZXNSZWFkID0gbG9hZGVkQnl0ZXM7XG4gICAgICAgICAgICBpZiAoYnl0ZXNSZWFkID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICAgICAnbWF4Q29udGVudExlbmd0aCBzaXplIG9mICcgKyBtYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uUHJvZ3Jlc3MgJiYgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvbkNodW5rUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgY29uZmlnXG4gICAgICApO1xuXG4gICAgICAvLyBGYWxsYmFjayBlbmZvcmNlbWVudCBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgUmVhZGFibGVTdHJlYW0gc3VwcG9ydFxuICAgICAgLy8gKGxlZ2FjeSBydW50aW1lcykuIERldGVjdCBtYXRlcmlhbGl6ZWQgc2l6ZSBmcm9tIHR5cGVkIG91dHB1dDsgc2tpcFxuICAgICAgLy8gc3RyZWFtcy9SZXNwb25zZSBwYXNzdGhyb3VnaCBzaW5jZSB0aGUgdXNlciB3aWxsIHJlYWQgdGhvc2UgdGhlbXNlbHZlcy5cbiAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoICYmICFzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICFpc1N0cmVhbVJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBtYXRlcmlhbGl6ZWRTaXplO1xuICAgICAgICBpZiAocmVzcG9uc2VEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlRGF0YS5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbWF0ZXJpYWxpemVkU2l6ZSA9IHJlc3BvbnNlRGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlRGF0YS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbWF0ZXJpYWxpemVkU2l6ZSA9IHJlc3BvbnNlRGF0YS5zaXplO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlRGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFNpemUgPVxuICAgICAgICAgICAgICB0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyZXNwb25zZURhdGEpLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgICAgICA6IHJlc3BvbnNlRGF0YS5sZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbWF0ZXJpYWxpemVkU2l6ZSA9PT0gJ251bWJlcicgJiYgbWF0ZXJpYWxpemVkU2l6ZSA+IG1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIFNhZmFyaSBjYW4gc3VyZmFjZSBmZXRjaCBhYm9ydHMgYXMgYSBET01FeGNlcHRpb24tbGlrZSBvYmplY3Qgd2hvc2VcbiAgICAgIC8vIGJyYW5kZWQgZ2V0dGVycyB0aHJvdy4gUHJlZmVyIG91ciBjb21wb3NlZCBzaWduYWwgcmVhc29uIGJlZm9yZSByZWFkaW5nXG4gICAgICAvLyB0aGUgY2F1Z2h0IGVycm9yLCBwcmVzZXJ2aW5nIHRpbWVvdXQgdnMgY2FuY2VsbGF0aW9uIHNlbWFudGljcy5cbiAgICAgIGlmIChjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC5hYm9ydGVkICYmIGNvbXBvc2VkU2lnbmFsLnJlYXNvbiBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgY2FuY2VsZWRFcnJvciA9IGNvbXBvc2VkU2lnbmFsLnJlYXNvbjtcbiAgICAgICAgY2FuY2VsZWRFcnJvci5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJlcXVlc3QgJiYgKGNhbmNlbGVkRXJyb3IucmVxdWVzdCA9IHJlcXVlc3QpO1xuICAgICAgICBlcnIgIT09IGNhbmNlbGVkRXJyb3IgJiYgKGNhbmNlbGVkRXJyb3IuY2F1c2UgPSBlcnIpO1xuICAgICAgICB0aHJvdyBjYW5jZWxlZEVycm9yO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvTG9hZCBmYWlsZWR8ZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ05ldHdvcmsgRXJyb3InLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfTkVUV09SSyxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICBlcnIgJiYgZXJyLnJlc3BvbnNlXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVycixcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0LCBlcnIgJiYgZXJyLnJlc3BvbnNlKTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBzZWVkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRGZXRjaCA9IChjb25maWcpID0+IHtcbiAgbGV0IGVudiA9IChjb25maWcgJiYgY29uZmlnLmVudikgfHwge307XG4gIGNvbnN0IHsgZmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlIH0gPSBlbnY7XG4gIGNvbnN0IHNlZWRzID0gW1JlcXVlc3QsIFJlc3BvbnNlLCBmZXRjaF07XG5cbiAgbGV0IGxlbiA9IHNlZWRzLmxlbmd0aCxcbiAgICBpID0gbGVuLFxuICAgIHNlZWQsXG4gICAgdGFyZ2V0LFxuICAgIG1hcCA9IHNlZWRDYWNoZTtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgc2VlZCA9IHNlZWRzW2ldO1xuICAgIHRhcmdldCA9IG1hcC5nZXQoc2VlZCk7XG5cbiAgICB0YXJnZXQgPT09IHVuZGVmaW5lZCAmJiBtYXAuc2V0KHNlZWQsICh0YXJnZXQgPSBpID8gbmV3IE1hcCgpIDogZmFjdG9yeShlbnYpKSk7XG5cbiAgICBtYXAgPSB0YXJnZXQ7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuY29uc3QgYWRhcHRlciA9IGdldEZldGNoKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGFkYXB0ZXI7XG4iLCIvKipcbiAqIEVzdGltYXRlIGRlY29kZWQgYnl0ZSBsZW5ndGggb2YgYSBkYXRhOi8vIFVSTCAqd2l0aG91dCogYWxsb2NhdGluZyBsYXJnZSBidWZmZXJzLlxuICogLSBGb3IgYmFzZTY0OiBjb21wdXRlIGV4YWN0IGRlY29kZWQgc2l6ZSB1c2luZyBsZW5ndGggYW5kIHBhZGRpbmc7XG4gKiAgICAgICAgICAgICAgIGhhbmRsZSAlWFggYXQgdGhlIGNoYXJhY3Rlci1jb3VudCBsZXZlbCAobm8gc3RyaW5nIGFsbG9jYXRpb24pLlxuICogLSBGb3Igbm9uLWJhc2U2NDogdXNlIFVURi04IGJ5dGVMZW5ndGggb2YgdGhlIGVuY29kZWQgYm9keSBhcyBhIHNhZmUgdXBwZXIgYm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzKHVybCkge1xuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHJldHVybiAwO1xuXG4gIGNvbnN0IGNvbW1hID0gdXJsLmluZGV4T2YoJywnKTtcbiAgaWYgKGNvbW1hIDwgMCkgcmV0dXJuIDA7XG5cbiAgY29uc3QgbWV0YSA9IHVybC5zbGljZSg1LCBjb21tYSk7XG4gIGNvbnN0IGJvZHkgPSB1cmwuc2xpY2UoY29tbWEgKyAxKTtcbiAgY29uc3QgaXNCYXNlNjQgPSAvO2Jhc2U2NC9pLnRlc3QobWV0YSk7XG5cbiAgaWYgKGlzQmFzZTY0KSB7XG4gICAgbGV0IGVmZmVjdGl2ZUxlbiA9IGJvZHkubGVuZ3RoO1xuICAgIGNvbnN0IGxlbiA9IGJvZHkubGVuZ3RoOyAvLyBjYWNoZSBsZW5ndGhcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChib2R5LmNoYXJDb2RlQXQoaSkgPT09IDM3IC8qICclJyAqLyAmJiBpICsgMiA8IGxlbikge1xuICAgICAgICBjb25zdCBhID0gYm9keS5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgY29uc3QgYiA9IGJvZHkuY2hhckNvZGVBdChpICsgMik7XG4gICAgICAgIGNvbnN0IGlzSGV4ID1cbiAgICAgICAgICAoKGEgPj0gNDggJiYgYSA8PSA1NykgfHwgKGEgPj0gNjUgJiYgYSA8PSA3MCkgfHwgKGEgPj0gOTcgJiYgYSA8PSAxMDIpKSAmJlxuICAgICAgICAgICgoYiA+PSA0OCAmJiBiIDw9IDU3KSB8fCAoYiA+PSA2NSAmJiBiIDw9IDcwKSB8fCAoYiA+PSA5NyAmJiBiIDw9IDEwMikpO1xuXG4gICAgICAgIGlmIChpc0hleCkge1xuICAgICAgICAgIGVmZmVjdGl2ZUxlbiAtPSAyO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYWQgPSAwO1xuICAgIGxldCBpZHggPSBsZW4gLSAxO1xuXG4gICAgY29uc3QgdGFpbElzUGN0M0QgPSAoaikgPT5cbiAgICAgIGogPj0gMiAmJlxuICAgICAgYm9keS5jaGFyQ29kZUF0KGogLSAyKSA9PT0gMzcgJiYgLy8gJyUnXG4gICAgICBib2R5LmNoYXJDb2RlQXQoaiAtIDEpID09PSA1MSAmJiAvLyAnMydcbiAgICAgIChib2R5LmNoYXJDb2RlQXQoaikgPT09IDY4IHx8IGJvZHkuY2hhckNvZGVBdChqKSA9PT0gMTAwKTsgLy8gJ0QnIG9yICdkJ1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBpZiAoYm9keS5jaGFyQ29kZUF0KGlkeCkgPT09IDYxIC8qICc9JyAqLykge1xuICAgICAgICBwYWQrKztcbiAgICAgICAgaWR4LS07XG4gICAgICB9IGVsc2UgaWYgKHRhaWxJc1BjdDNEKGlkeCkpIHtcbiAgICAgICAgcGFkKys7XG4gICAgICAgIGlkeCAtPSAzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYWQgPT09IDEgJiYgaWR4ID49IDApIHtcbiAgICAgIGlmIChib2R5LmNoYXJDb2RlQXQoaWR4KSA9PT0gNjEgLyogJz0nICovKSB7XG4gICAgICAgIHBhZCsrO1xuICAgICAgfSBlbHNlIGlmICh0YWlsSXNQY3QzRChpZHgpKSB7XG4gICAgICAgIHBhZCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwcyA9IE1hdGguZmxvb3IoZWZmZWN0aXZlTGVuIC8gNCk7XG4gICAgY29uc3QgYnl0ZXMgPSBncm91cHMgKiAzIC0gKHBhZCB8fCAwKTtcbiAgICByZXR1cm4gYnl0ZXMgPiAwID8gYnl0ZXMgOiAwO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBCdWZmZXIuYnl0ZUxlbmd0aCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCAndXRmOCcpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSBVVEYtOCBieXRlIGxlbmd0aCBkaXJlY3RseSBmcm9tIFVURi0xNiBjb2RlIHVuaXRzIHdpdGhvdXQgYWxsb2NhdGluZ1xuICAvLyBhIGJ5dGUgYnVmZmVyIChUZXh0RW5jb2Rlci5lbmNvZGUgd291bGQgZGVmZWF0IHRoZSBEb1MgZ3VhcmQgb24gbGFyZ2UgYm9kaWVzKS5cbiAgLy8gVXNpbmcgYm9keS5sZW5ndGggaGVyZSB3b3VsZCB1bmRlcmNvdW50IG5vbi1BU0NJSSAoZS5nLiAn4oKsJyBpcyAxIGNvZGUgdW5pdFxuICAvLyBidXQgMyBVVEYtOCBieXRlcykuXG4gIGxldCBieXRlcyA9IDA7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBib2R5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgYyA9IGJvZHkuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgIGJ5dGVzICs9IDE7XG4gICAgfSBlbHNlIGlmIChjIDwgMHg4MDApIHtcbiAgICAgIGJ5dGVzICs9IDI7XG4gICAgfSBlbHNlIGlmIChjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGJmZiAmJiBpICsgMSA8IGxlbikge1xuICAgICAgY29uc3QgbmV4dCA9IGJvZHkuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICBpZiAobmV4dCA+PSAweGRjMDAgJiYgbmV4dCA8PSAweGRmZmYpIHtcbiAgICAgICAgYnl0ZXMgKz0gNDtcbiAgICAgICAgaSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMgKz0gMztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnl0ZXMgKz0gMztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ5dGVzO1xufVxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0ICogYXMgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBLbm93biBhZGFwdGVycyBtYXBwaW5nLlxuICogUHJvdmlkZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgYWRhcHRlcnMgZm9yIEF4aW9zOlxuICogLSBgaHR0cGAgZm9yIE5vZGUuanNcbiAqIC0gYHhocmAgZm9yIGJyb3dzZXJzXG4gKiAtIGBmZXRjaGAgZm9yIGZldGNoIEFQSS1iYXNlZCByZXF1ZXN0c1xuICpcbiAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBGdW5jdGlvbnxPYmplY3Q+fVxuICovXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDoge1xuICAgIGdldDogZmV0Y2hBZGFwdGVyLmdldEZldGNoLFxuICB9LFxufTtcblxuLy8gQXNzaWduIGFkYXB0ZXIgbmFtZXMgZm9yIGVhc2llciBkZWJ1Z2dpbmcgYW5kIGlkZW50aWZpY2F0aW9uXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvcnMgc28gYSBwb2xsdXRlZCBPYmplY3QucHJvdG90eXBlLmdldCBjYW5ub3QgdHVyblxuICAgICAgLy8gdGhlc2UgZGF0YSBkZXNjcmlwdG9ycyBpbnRvIGFjY2Vzc29yIGRlc2NyaXB0b3JzIG9uIHRoZSB3YXkgaW4uXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywgeyBfX3Byb3RvX186IG51bGwsIHZhbHVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHsgX19wcm90b19fOiBudWxsLCB2YWx1ZSB9KTtcbiAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVyIGEgcmVqZWN0aW9uIHJlYXNvbiBzdHJpbmcgZm9yIHVua25vd24gb3IgdW5zdXBwb3J0ZWQgYWRhcHRlcnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBhZGFwdGVyIGlzIHJlc29sdmVkIChmdW5jdGlvbiwgbnVsbCwgb3IgZmFsc2UpXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfGZhbHNlfSBhZGFwdGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PlxuICB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbi8qKlxuICogR2V0IHRoZSBmaXJzdCBzdWl0YWJsZSBhZGFwdGVyIGZyb20gdGhlIHByb3ZpZGVkIGxpc3QuXG4gKiBUcmllcyBlYWNoIGFkYXB0ZXIgaW4gb3JkZXIgdW50aWwgYSBzdXBwb3J0ZWQgb25lIGlzIGZvdW5kLlxuICogVGhyb3dzIGFuIEF4aW9zRXJyb3IgaWYgbm8gYWRhcHRlciBpcyBzdWl0YWJsZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZ3xGdW5jdGlvbj58c3RyaW5nfEZ1bmN0aW9ufSBhZGFwdGVycyAtIEFkYXB0ZXIocykgYnkgbmFtZSBvciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBBeGlvcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3Mge0F4aW9zRXJyb3J9IElmIG5vIHN1aXRhYmxlIGFkYXB0ZXIgaXMgYXZhaWxhYmxlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSByZXNvbHZlZCBhZGFwdGVyIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFkYXB0ZXIoYWRhcHRlcnMsIGNvbmZpZykge1xuICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBhZGFwdGVycztcbiAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gIGxldCBhZGFwdGVyO1xuXG4gIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgbGV0IGlkO1xuXG4gICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkYXB0ZXIgJiYgKHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgKGFkYXB0ZXIgPSBhZGFwdGVyLmdldChjb25maWcpKSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gIH1cblxuICBpZiAoIWFkYXB0ZXIpIHtcbiAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKS5tYXAoXG4gICAgICAoW2lkLCBzdGF0ZV0pID0+XG4gICAgICAgIGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgKTtcblxuICAgIGxldCBzID0gbGVuZ3RoXG4gICAgICA/IHJlYXNvbnMubGVuZ3RoID4gMVxuICAgICAgICA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJylcbiAgICAgICAgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSlcbiAgICAgIDogJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuLyoqXG4gKiBFeHBvcnRzIEF4aW9zIGFkYXB0ZXJzIGFuZCB1dGlsaXR5IHRvIHJlc29sdmUgYW4gYWRhcHRlclxuICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBSZXNvbHZlIGFuIGFkYXB0ZXIgZnJvbSBhIGxpc3Qgb2YgYWRhcHRlciBuYW1lcyBvciBmdW5jdGlvbnMuXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIGdldEFkYXB0ZXIsXG5cbiAgLyoqXG4gICAqIEV4cG9zZXMgYWxsIGtub3duIGFkYXB0ZXJzXG4gICAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBGdW5jdGlvbnxPYmplY3Q+fVxuICAgKi9cbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnMsXG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKGNvbmZpZywgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3QpO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlciwgY29uZmlnKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oXG4gICAgZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBFeHBvc2UgdGhlIGN1cnJlbnQgcmVzcG9uc2Ugb24gY29uZmlnIHNvIHRoYXQgdHJhbnNmb3JtUmVzcG9uc2UgY2FuXG4gICAgICAvLyBhdHRhY2ggaXQgdG8gYW55IEF4aW9zRXJyb3IgaXQgdGhyb3dzIChlLmcuIG9uIEpTT04gcGFyc2UgZmFpbHVyZSkuXG4gICAgICAvLyBXZSBjbGVhbiBpdCB1cCBhZnRlcndhcmRzIHRvIGF2b2lkIHBvbGx1dGluZyB0aGUgY29uZmlnIG9iamVjdC5cbiAgICAgIGNvbmZpZy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChjb25maWcsIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSwgcmVzcG9uc2UpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5yZXNwb25zZTtcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbiAgICBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uZmlnLnJlc3BvbnNlID0gcmVhc29uLnJlc3BvbnNlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5yZXNwb25zZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgfVxuICApO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gKFxuICAgICAgJ1tBeGlvcyB2JyArXG4gICAgICBWRVJTSU9OICtcbiAgICAgIFwiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICdcIiArXG4gICAgICBvcHQgK1xuICAgICAgXCInXCIgK1xuICAgICAgZGVzYyArXG4gICAgICAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG52YWxpZGF0b3JzLnNwZWxsaW5nID0gZnVuY3Rpb24gc3BlbGxpbmcoY29ycmVjdFNwZWxsaW5nKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKGAke29wdH0gaXMgbGlrZWx5IGEgbWlzc3BlbGxpbmcgb2YgJHtjb3JyZWN0U3BlbGxpbmd9YCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIC8vIFVzZSBoYXNPd25Qcm9wZXJ0eSBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuPG9wdD4gY2Fubm90IHN1cHBseVxuICAgIC8vIGEgbm9uLWZ1bmN0aW9uIHZhbGlkYXRvciBhbmQgY2F1c2UgYSBUeXBlRXJyb3IuXG4gICAgY29uc3QgdmFsaWRhdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNjaGVtYSwgb3B0KSA/IHNjaGVtYVtvcHRdIDogdW5kZWZpbmVkO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9ycyxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnIHx8IHt9O1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teSA9IHt9O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkpIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gKCgpID0+IHtcbiAgICAgICAgICBpZiAoIWR1bW15LnN0YWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmlyc3ROZXdsaW5lSW5kZXggPSBkdW1teS5zdGFjay5pbmRleE9mKCdcXG4nKTtcblxuICAgICAgICAgIHJldHVybiBmaXJzdE5ld2xpbmVJbmRleCA9PT0gLTEgPyAnJyA6IGR1bW15LnN0YWNrLnNsaWNlKGZpcnN0TmV3bGluZUluZGV4ICsgMSk7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdE5ld2xpbmVJbmRleCA9IHN0YWNrLmluZGV4T2YoJ1xcbicpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kTmV3bGluZUluZGV4ID1cbiAgICAgICAgICAgICAgZmlyc3ROZXdsaW5lSW5kZXggPT09IC0xID8gLTEgOiBzdGFjay5pbmRleE9mKCdcXG4nLCBmaXJzdE5ld2xpbmVJbmRleCArIDEpO1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tXaXRob3V0VHdvVG9wTGluZXMgPVxuICAgICAgICAgICAgICBzZWNvbmROZXdsaW5lSW5kZXggPT09IC0xID8gJycgOiBzdGFjay5zbGljZShzZWNvbmROZXdsaW5lSW5kZXggKyAxKTtcblxuICAgICAgICAgICAgaWYgKCFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFja1dpdGhvdXRUd29Ub3BMaW5lcykpIHtcbiAgICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7IHRyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVycyB9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhcbiAgICAgICAgdHJhbnNpdGlvbmFsLFxuICAgICAgICB7XG4gICAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGFkdmVydGlzZVpzdGRBY2NlcHRFbmNvZGluZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoXG4gICAgICAgICAgcGFyYW1zU2VyaWFsaXplcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5hbGxvd0Fic29sdXRlVXJsc1xuICAgIGlmIChjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgY29uZmlnLFxuICAgICAge1xuICAgICAgICBiYXNlVXJsOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCdiYXNlVVJMJyksXG4gICAgICAgIHdpdGhYc3JmVG9rZW46IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ3dpdGhYU1JGVG9rZW4nKSxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShoZWFkZXJzLmNvbW1vbiwgaGVhZGVyc1tjb25maWcubWV0aG9kXSk7XG5cbiAgICBoZWFkZXJzICYmXG4gICAgICB1dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ3F1ZXJ5JywgJ2NvbW1vbiddLCAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9KTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgY29uc3QgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZyA9XG4gICAgICAgIHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwubGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZztcblxuICAgICAgaWYgKGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmcpIHtcbiAgICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQoLi4ucmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaCguLi5yZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsLCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAncXVlcnknXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICAgIG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiBpc0Zvcm1cbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIC8vIFFVRVJZIGlzIGEgc2FmZS9pZGVtcG90ZW50IHJlYWQgbWV0aG9kOyBtdWx0aXBhcnQgZm9ybSBib2RpZXMgZG9uJ3QgZml0XG4gIC8vIGl0cyBzZW1hbnRpY3MsIHNvIG5vIHF1ZXJ5Rm9ybSBzaG9ydGhhbmQgaXMgZ2VuZXJhdGVkLlxuICBpZiAobWV0aG9kICE9PSAncXVlcnknKSB7XG4gICAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG4gIFdlYlNlcnZlcklzRG93bjogNTIxLFxuICBDb25uZWN0aW9uVGltZWRPdXQ6IDUyMixcbiAgT3JpZ2luSXNVbnJlYWNoYWJsZTogNTIzLFxuICBUaW1lb3V0T2NjdXJyZWQ6IDUyNCxcbiAgU3NsSGFuZHNoYWtlRmFpbGVkOiA1MjUsXG4gIEludmFsaWRTc2xDZXJ0aWZpY2F0ZTogNTI2LFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwgeyBhbGxPd25LZXlzOiB0cnVlIH0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9ICh0aGluZykgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbigoY2FuY2VsKSA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gKG9uZnVsZmlsbGVkKSA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHRvQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGFib3J0ID0gKGVycikgPT4ge1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICBjb250cm9sbGVyLnNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgY29uc3QgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgcGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWU7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnLi9saWIvYXhpb3MuanMnO1xuXG4vLyBUaGlzIG1vZHVsZSBpcyBpbnRlbmRlZCB0byB1bndyYXAgQXhpb3MgZGVmYXVsdCBleHBvcnQgYXMgbmFtZWQuXG4vLyBLZWVwIHRvcC1sZXZlbCBleHBvcnQgc2FtZSB3aXRoIHN0YXRpYyBwcm9wZXJ0aWVzXG4vLyBzbyB0aGF0IGl0IGNhbiBrZWVwIHNhbWUgd2l0aCBlcyBtb2R1bGUgb3IgY2pzXG5jb25zdCB7XG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWcsXG4gIGNyZWF0ZSxcbn0gPSBheGlvcztcblxuZXhwb3J0IHtcbiAgYXhpb3MgYXMgZGVmYXVsdCxcbiAgY3JlYXRlLFxuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnLFxufTtcbiIsIi8qKlxuICogU2VyaWFsaXplcyBvYmplY3RzXG4gKlxuICogQG5hbWUgc2VyaWFsaXplXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gKiBAcGFyYW0ge0FueX0gcHJlZml4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBTZXJpYWxpemVkIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnNlcmlhbGl6ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmosIHByZWZpeCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIC5tYXAocCA9PiB7XG4gICAgICBjb25zdCBrID0gcHJlZml4IHx8IHA7XG4gICAgICBjb25zdCB2ID0gb2JqW3BdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VyaWFsaXplKHYsIGspXG4gICAgICAgIDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuY29uc3QgREVGQVVMVF9QRUxJQVNfVVJMID0gJ2h0dHBzOi8vYXBpLmRpZ2l0cmFuc2l0LmZpL2dlb2NvZGluZy92MS9zZWFyY2gnO1xuLyoqXG4gKiA8REVTQ1JJUFRJT04+XG4gKlxuICogQG5hbWUgZ2V0R2VvY29kaW5nUmVzdWx0c1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFBhcmFtcyAoT3B0aW9uYWwpIFBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdXJsLCBiYXNpY2FsbHkgYm94IC8gcG9seWdvbiB0byByZXN0cmljdCBzZWFyY2ggYXJlYVxuICogQHBhcmFtIHtTdHJpbmd9IGxhbmcgKE9wdGlvbmFsKSBzZWFyY2ggbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb2N1c1BvaW50IChPcHRpb25hbCkgT3duIFBvc2l0aW9uIChQRUxJQVMgQVBJKVxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZXMgKE9wdGlvbmFsKSBzZWFyY2ggc291cmNlcyAoZS5nIE9TTSwgR1RGUy4uKVxuICogQHBhcmFtIHtPYmplY3R9IG1pbmltYWxSZWdleHAgKE9wdGlvbmFsKSBSZWdleHAgZm9yIHRlc3RpbmdcbiAqIEBwYXJhbSB7Kn0gZ2VvY29kaW5nTGF5ZXJzIChPcHRpb25hbCkgQXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxheWVycyBpcyBzZWFyY2hlZCwgZS5nLiBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RvcCddXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBSZXN1bHRzIGluIEpTT04gZm9ybVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEdlb2NvZGluZ1Jlc3VsdHMoXCJyZXN1bHRcIik7XG4gKiAvLz0gZS5nLiB7dGV4dDpcInJlc3VsdFwifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICBzZWFyY2hTdHJpbmcsXG4gIHNlYXJjaFBhcmFtcyxcbiAgbGFuZyxcbiAgZm9jdXNQb2ludCxcbiAgc291cmNlcyxcbiAgcGVsaWFzVXJsLFxuICBtaW5pbWFsUmVnZXhwLFxuICBnZW9jb2RpbmdMYXllcnMsXG4pIHtcbiAgY29uc3QgdGV4dCA9IHNlYXJjaFN0cmluZyA/IHNlYXJjaFN0cmluZy50cmltKCkgOiBudWxsO1xuICBpZiAoXG4gICAgdGV4dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgIHRleHQubGVuZ3RoIDwgMSB8fFxuICAgIChtaW5pbWFsUmVnZXhwICYmICFtaW5pbWFsUmVnZXhwLnRlc3QodGV4dCkpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGNvbnN0IFBFTElBU19VUkwgPSBwZWxpYXNVcmwgfHwgREVGQVVMVF9QRUxJQVNfVVJMO1xuICBsZXQgb3B0cyA9IHsgdGV4dCwgLi4uc2VhcmNoUGFyYW1zLCAuLi5mb2N1c1BvaW50LCBsYW5nIH07XG4gIGlmIChzb3VyY2VzKSB7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgc291cmNlcyB9O1xuICB9XG4gIGlmIChnZW9jb2RpbmdMYXllcnMpIHtcbiAgICBjb25zdCBsYXllcnMgPSBnZW9jb2RpbmdMYXllcnMudG9TdHJpbmcoKTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBsYXllcnMgfTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbihQRUxJQVNfVVJMLCBvcHRzKS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcztcbiAgfSk7XG59XG4iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlLmpzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuLmpzJztcbmltcG9ydCB0YWtlIGZyb20gJ2xvZGFzaC90YWtlLmpzJztcbmltcG9ydCB7XG4gIHNvcnRTZWFyY2hSZXN1bHRzLFxuICBpc1N0b3AsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dCc7XG5pbXBvcnQgZ2V0R2VvY29kaW5nUmVzdWx0cyBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzJztcbmltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmZ1bmN0aW9uIGdldFN0b3BzRnJvbUdlb2NvZGluZyhzdG9wcywgVVJMX1BFTElBU19QTEFDRSkge1xuICBpZiAoIXN0b3BzIHx8IHN0b3BzLmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBsZXQgZ2lkcyA9ICcnO1xuICBjb25zdCBzdG9wc1dpdGhHaWRzID0gc3RvcHMubWFwKHN0b3AgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBzdG9wLnR5cGUgPT09ICdzdG9wJyA/ICdzdG9wJyA6ICdzdGF0aW9uJztcbiAgICBsZXQgZ2lkID0gYGd0ZnMke3N0b3AuZ3Rmc0lkLnNwbGl0KCc6JylbMF0udG9Mb3dlckNhc2UoKX06JHt0eXBlfTpHVEZTOiR7XG4gICAgICBzdG9wLmd0ZnNJZFxuICAgIH1gO1xuICAgIGlmIChzdG9wLmNvZGUpIHtcbiAgICAgIGdpZCArPSBgIyR7c3RvcC5jb2RlfWA7XG4gICAgfVxuICAgIGdpZHMgKz0gYCR7Z2lkfSxgO1xuICAgIHJldHVybiB7IC4uLnN0b3AsIGdpZCB9O1xuICB9KTtcbiAgY29uc3Qgc3RvcFN0YXRpb25NYXAgPSBzdG9wc1dpdGhHaWRzLnJlZHVjZShmdW5jdGlvbiByZWR1KFxuICAgIG1hcCxcbiAgICBzdG9wT3JTdGF0aW9uLFxuICApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0TGFuZ3VhZ2UoY29udGV4dCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsIi8qIGVzbGludCBzb3J0LWtleXM6IFwiZXJyb3JcIiAqL1xuY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgYWRkcmVzczogJ0FkcmVzc2UnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAgIGFpcnBsYW5lOiAnRmx1ZycsXG4gICAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0xlaWhyYWQtU3RhdGlvbicsXG4gICAgICBidXM6ICdCdXMnLFxuICAgICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnTMO2c2NoZW4nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ1ppZWwnLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICAgIGZlcnJ5OiAnRsOkaHJlJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAgIGxvYWRpbmc6ICdMYWRlbi4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgICBwbGFjZTogJ09ydCcsXG4gICAgICByYWlsOiAnWnVnJyxcbiAgICAgIHNlYXJjaDogJ1N1Y2hlJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3VjaGUnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnWmllbG9ydCBlaW5nZWJlbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdLZWluIE9ydCBnZWZ1bmRlbi4nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTdGFuZG9ydCBlcm1pdHRlbG4nLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ0F1cyBlaWdlbmVuIEZhdm9yaXRlbiBhdXN3w6RobGVuJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdIYWx0ZXN0ZWxsZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3VjaGUgTGVpaHJhZC1TdGF0aW9uZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTdWNoZSBTdGFkdGJhaG4tSGFsdGVzdGVsbGVuLVN1Y2hlJyxcbiAgICAgIHN0cmVldDogJ1N0cmHDn2UnLFxuICAgICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICAgIHRyYW06ICdTdHJhw59lbmJhaG4nLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICAgdmVudWU6ICdWZW51ZScsXG4gICAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICBhZGRyZXNzOiAnQWRkcmVzcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgICBiYWNrOiAnQmFjaycsXG4gICAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgICBidXM6ICdidXMnLFxuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0NsZWFyJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgICAgZmVycnk6ICdGZXJyeScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ0Z1dHVyZSByb3V0ZScsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICAgbG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICAgICAgcGxhdGZvcm06ICdQbGF0Zm9ybScsXG4gICAgICByYWlsOiAnVHJhaW4nLFxuICAgICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgICBzZWFyY2g6ICdTZWFyY2gnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTZWFyY2gnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQ3VycmVudCBzZWxlY3Rpb246IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU2VhcmNoIG9yaWdpbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdTZWxlY3QgcG9zaXRpb24gZnJvbSBtYXAnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnU2VsZWN0IGZyb20gb3duIGxvY2F0aW9ucycsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnU3RvcCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdTZWFyY2ggYmlrZSBwYXJrcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU2VhcmNoIGJ1cyByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdTZWFyY2ggY2FyIHBhcmtzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1NlYXJjaCBjaXR5IGJpa2Ugc3RhdGlvbnMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1NlYXJjaCB0cmFtIHJvdXRlcyBvciBzdG9wcycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgICAgdHJhY2s6ICdUcmFjaycsXG4gICAgICB0cmFtOiAnVHJhbScsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICAgIHdoZXJlOiAnV2hlcmUgdG8/JyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnT3NvaXRlLCBwYWlra2EgdGFpIHlyaXR5cycsXG4gICAgICBhaXJwbGFuZTogJ0xlbnRva29uZScsXG4gICAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnUHnDtnLDpGFzZW1hJyxcbiAgICAgIGJ1czogJ2J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVHloamVubsOkIGhha3VoaXN0b3JpYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdIYWx1YXRrbyB0eWhqZW50w6TDpCBoYWt1aGlzdG9yaWFuPycsXG4gICAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICAgIGZhdm91cml0ZTogJ1N1b3Npa2tpJyxcbiAgICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgICBwbGFjZTogJ1BhaWtrYScsXG4gICAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgICAgcmFpbDogJ0p1bmEnLFxuICAgICAgcmVxdWlyZWQ6ICdwYWtvbGxpbmVuIGtlbnR0w6QnLFxuICAgICAgc2VhcmNoOiAnRXRzaScsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ29pIGxpc3Rhc3NhIG51b2xpbsOkcHDDpGltaWxsw6QgamEgdmFsaXRzZSBlbnRlcmlsbMOkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnVmFsaXR0dWFzaSBsw6RodMO2cGFpa2FuIHNpaXJyeXTDpMOkbiBzdW9yYWFuIG3DpMOkcsOkbnDDpMOkLWtlbnR0w6TDpG4uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzdGEnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnSGFlJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnSGFlIGzDpGh0w7ZwYWlra2FhLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnUGFpa2FubmEnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWYWxpdHNlIHNpamFpbnRpIGthcnRhbHRhJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgICBzdGF0aW9uOiAnQXNlbWEnLFxuICAgICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnSGFlIGxlbnRvamEgdGFpIGxlbnRvYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ0hhZSBwecO2csOkcGFya2tpYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnSGFlIGF1dG9wYXJra2lhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAgIHN0cmVldDogJ0thdHUnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2h1b21lbm5hIGtsbycsXG4gICAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICAgdmVudWU6ICdQYWlra2EnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0RvZGFqIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1phbWtuaWogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ090d8Ozcnogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgIGFkZHJlc3M6ICdBZHJlcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICAgYWlycGxhbmU6ICdMb3QnLFxuICAgICAgYXJyaXZhbDogJ1ByenlqYXpkJyxcbiAgICAgIGJhY2s6ICdXcsOzxIcnLFxuICAgICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFjamEgcm93ZXJvd2EnLFxuICAgICAgYnVzOiAnYXV0b2J1cycsXG4gICAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgICAgY2FycGFyazogJ1Bhcmt1aiBpIEplZMW6JyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnV3ljennFm8SHJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdPYmVjbmUgcG/Fgm/FvGVuaWUnLFxuICAgICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICAgJ0N6eSBuYSBwZXdubyBjaGNlc3ogd3ljennFm2NpxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYT8nLFxuICAgICAgZGVwYXJ0dXJlOiAnT2RqYXpkJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAgIGZhdm91cml0ZTogJ1VsdWJpb25lJyxcbiAgICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1ByenlzesWCYSB0cmFzYScsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdXcHJvd2Fkxbogc3fDs2ogY2VsJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdXcHJvd2Fkxbogc3fDs2ogcHVua3QgcG9jesSFdGtvd3kuJyxcbiAgICAgIGxvYWRpbmc6ICfFgWFkb3dhbmll4oCmJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluLicsXG4gICAgICBvcmlnaW46ICdQb2N6xIV0ZWsnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgICBvd25sb2NhdGlvbnM6ICdXxYJhc25lIG1pZWpzY2EnLFxuICAgICAgcGxhY2U6ICdNaWVqc2NlJyxcbiAgICAgIHBsYXRmb3JtOiAnUGVyb24nLFxuICAgICAgcmFpbDogJ1BvY2nEhWcnLFxuICAgICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICAgIHNlYXJjaDogJ1N6dWthaicsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3p1a2FqIHBvIGFkcmVzaWUgbHViIG5hendpZSBtaWVqc2NhJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnTWllanNjZSwgbG9rYWxpemFjamEgaSBwcnp5c3RhbmVrLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hd2lndWogcG8gbGnFm2NpZSB1xbx5d2FqxIVjIHN0cnphxYJlayBpIHd5YmllcmFqIGtsYXdpc3plbSBFbnRlci4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ1dwcm93YWTFuiBsb2thbGl6YWNqxJkgaSBuYXdpZ3VqIHBvIGxpxZtjaWUgZ2VzdGFtaSBwcnplc3V3YW5pYS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ1BvIHd5YnJhbml1IGxva2FsaXphY2ppIHBvY3rEhXRrb3dlaiwgYXV0b21hdHljem5pZSBwcnplamR6aWVzeiBkbyBwb2xhIG1pZWpzY2EgZG9jZWxvd2Vnby4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnRG9zdMSZcG5hIGplc3Qge3tjb3VudH19IHByb3BvenljamEnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fZmV3JzogJ0Rvc3TEmXBuZSBzxIUge3tjb3VudH19IHByb3BvenljamUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fb3RoZXInOiAnRG9zdMSZcG5lIGplc3Qge3tjb3VudH19IHByb3BvenljamknLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3p1a2FqJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ09iZWNueSB3eWLDs3I6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTenVrYWogY2VsdSwgdHJhc3kgbHViIHByenlzdGFua3UnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgZG9jZWxvd3knLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnV3nFm3dpZXRsIHd5bmlraSB3IHPEhXNpZWRuaWVqIGthcmNpZSDigJ5DZWzigJ0nLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0JyYWsgbG9rYWxpemFjamknLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnV3lzenVrYWogcG9jesSFdGVrLCBrb25pZWMgbHViIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgcG9jesSFdGtvd3knLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdXeWtyeWogbG9rYWxpemFjasSZJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV3liaWVyeiBtaWVqc2NlIG5hIG1hcGllJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1d5YmllcnogeiB3xYJhc255Y2ggbWllanNjJyxcbiAgICAgIHN0YXRpb246ICdTdGFjamEnLFxuICAgICAgc3RvcDogJ1ByenlzdGFuZWsnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU3p1a2FqIGxvdMOzdyBpIGxvdG5pc2snLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N6dWthaiB0cmFzIGF1dG9idXNvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N6dWthaiB0cmFzIGtvbGVqb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N6dWthaiB0cmFzIG1ldHJhIGkgcHJ6eXN0YW5rw7N3ICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ1d5c3p1a2l3YW5pZSBhdXRvYnVzw7N3IGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgIHN0cmVldDogJ1VsaWNhJyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgICd0b2RheS1hdCc6ICdkemnFmyBvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICAgIHRyYWNrOiAnVG9yJyxcbiAgICAgIHRyYW06ICdUcmFtd2FqJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnUHJ6ZXogcHVua3QnLFxuICAgICAgd2hlcmU6ICdEb2vEhWQ/JyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgIGFkZHJlc3M6ICdBZHJlc3MnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgICAgYXJyaXZhbDogJ0FubMOkbmRlcicsXG4gICAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1N0YWRzY3lrZWxzdGF0aW9uJyxcbiAgICAgIGJ1czogJ0J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgICBjYXJwYXJrOiAnSW5mYXJ0c3BhcmtlcmluZycsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnTnV2YXJhbmRlIHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgICBkZXBhcnR1cmU6ICdBdmfDpW5nc3RpZCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgICAgZmVycnk6ICdGw6RyamEnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnU2tyaXYgaW4gZGluIGF2ZsOkcmRzcGxhdHMnLFxuICAgICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBvcmlnaW46ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgICBwbGFjZTogJ1BsYXRzJyxcbiAgICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICAgIHJhaWw6ICdUw6VnJyxcbiAgICAgIHJlcXVpcmVkOiAnb2JsaWdhdG9yaXNrdCBmw6RsdCcsXG4gICAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTw7ZrIG1lZCBhZHJlc3NlbiBlbGxlciBwbGF0c2VucyBuYW1uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0hpdHRhZGUge3tjb3VudH19IGbDtnJzbGFnJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU2tyaXYgZGVzdGluYXRpb24nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0luZ2Egc8O2a3Jlc3VsdGF0JyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1PDtmsgYXZmw6RyZHNwbGF0cywgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU8O2ayBwb3NpdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ0jDpWxscGxhdHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1PDtmsgZmx5ZyBlbGxlciBmbHlncGxhdHNlcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdTw7ZrIGN5a2VscGFya2VyaW5nJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnU8O2ayBhbnNsdXRuaW5nc3BhcmtlcmluZycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTw7ZrIG7DpHJ0w6VnZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTw7ZrIG1ldHJvbGluamVyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1c3Mgb2NoIHN0b3BwIHPDtmtuaW5nZW4nLFxuICAgICAgc3RyZWV0OiAnR2F0YScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2kgbW9yZ29uJyxcbiAgICAgIHRyYWNrOiAnU3DDpXInLFxuICAgICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICAgIHdoZXJlOiAnVmFydCB2aWxsIGR1IMOla2E/JyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGguanMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwuanMnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUuanMnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwLmpzJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcC5qcyc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGFkbWluIChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsYWRtaW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxhZG1pbiA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtcbiAgZ2V0TmFtZUxhYmVsLFxuICBnZXRTdG9wQ29kZSxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IHsgZ2V0U3RvcE5hbWUgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZ2V0TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQT0lTZWFyY2ggPSBpZCA9PlxuICBpZCA9PT0gJ29yaWdpbicgfHxcbiAgaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gIGlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG5leHBvcnQgY29uc3QgZ2V0UGxhdGZvcm0gPSAoYWRkZW5kdW0sIGxuZywgdCkgPT4ge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyB0KCd0cmFjaycsIHsgbG5nIH0pIDogdCgncGxhdGZvcm0nLCB7IGxuZyB9KTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSwgbG5nLCB0KSB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCdzZWxlY3QtZnJvbS1tYXAnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCd1c2Utb3duLXBvc2l0aW9uJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicsIHsgbG5nIH0pO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnYmlrZXBhcmsnLCB7IGxuZyB9KTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnY2FycGFyaycsIHsgbG5nIH0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICAgeyBsbmcgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdChsYXllciwgeyBsbmcgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0sIGxuZywgdCk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSwgbG5nKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIHQoJ2Z1dHVyZS1yb3V0ZScsIHsgbG5nIH0pLFxuICAgIGAke3QoJ29yaWdpbicsIHsgbG5nIH0pfSAke25hbWUxfSR7dGFpbDF9ICR7dCgnZGVzdGluYXRpb24nLCB7XG4gICAgICBsbmcsXG4gICAgfSl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0sIGxuZywgdCkge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdGltZSA9IERhdGVUaW1lLmZyb21TZWNvbmRzKE51bWJlcihpdGVtLnByb3BlcnRpZXMudGltZSkpO1xuICBjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gdCgnYXJyaXZhbCcsIHsgbG5nIH0pXG4gICAgOiB0KCdkZXBhcnR1cmUnLCB7IGxuZyB9KTtcbiAgaWYgKHRpbWUuaGFzU2FtZShub3csICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5oYXNTYW1lKG5vdy5wbHVzKHsgZGF5czogMSB9KSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3QoJ3RvbW9ycm93LWF0JywgeyBsbmcgfSl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnY2NjIGQuTC4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRTdWdnZXN0aW9uVmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgaWYgKFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KSA9PiB7XG4gIGxldCBsYWJlbCA9IFtdO1xuICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uc1swXTtcbiAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGxhYmVsLnB1c2godCgnZmF2b3VyaXRlJywgeyBsbmcgfSkpO1xuICAgIH1cbiAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudChzdWdnZXN0aW9uc1swXSwgbG5nKSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG59O1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7XG4gIGlmIChudWxsID09IGUpIHJldHVybiB7fTtcbiAgdmFyIG8sXG4gICAgcixcbiAgICBpID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHtcbiAgZ2V0U3VnZ2VzdGlvbkNvbnRlbnQsXG4gIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUsXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuY29uc3QgU3VnZ2VzdGlvbiA9IG1lbW8oZnVuY3Rpb24gU3VnZ2VzdGlvbih7XG4gIGl0ZW0sXG4gIGxuZyxcbiAgZ2V0SXRlbVByb3BzLFxuICBoaWdobGlnaHRlZEluZGV4LFxuICBpdGVtSW5kZXgsXG4gIHN0eWxlcyxcbiAgLi4ucmVzdFxufSkge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBuZXdJdGVtID1cbiAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSwgbG5nLCB0KSxcbiAgICAgICAgfVxuICAgICAgOiBpdGVtO1xuICBjb25zdCBjb250ZW50ID0gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSwgbG5nLCB0KTtcbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uLFxuICAgICAgICBoaWdobGlnaHRlZEluZGV4ID09PSBpdGVtSW5kZXggJiYgc3R5bGVzLnN1Z2dlc3Rpb25IaWdobGlnaHRlZCxcbiAgICAgICl9XG4gICAgICB7Li4uZ2V0SXRlbVByb3BzKHsgaW5kZXg6IGl0ZW1JbmRleCB9KX1cbiAgICA+XG4gICAgICA8U3VnZ2VzdGlvbkl0ZW0gaXRlbT17bmV3SXRlbX0gY29udGVudD17Y29udGVudH0gbG5nPXtsbmd9IHsuLi5yZXN0fSAvPlxuICAgIDwvbGk+XG4gICk7XG59KTtcbmNvbnN0IGl0ZW1TaGFwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGVkSWNvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRyYW5zbGF0ZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwcm9wZXJ0aWVzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxheWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXJyb3dDbGlja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkZXN0aW5hdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICB9KSxcbn0pO1xuXG5TdWdnZXN0aW9uLnByb3BUeXBlcyA9IHtcbiAgaXRlbTogaXRlbVNoYXBlLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgaXRlbUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgY29uc3QgU3VnZ2VzdGlvbnMgPSBtZW1vKGZ1bmN0aW9uIFN1Z2dlc3Rpb25zKHtcbiAgc3VnZ2VzdGlvbnMsXG4gIGdldE1lbnVQcm9wcyxcbiAgZ2V0SXRlbVByb3BzLFxuICBsbmcsXG4gIHN0eWxlcyxcbiAgaGlkZGVuLFxuICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b24sXG4gIGhhbmRsZUNsZWFySGlzdG9yeSxcbiAgLi4ucmVzdFxufSkge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbnNDb250YWluZXJPcGVuLFxuICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbnNDb250YWluZXIsXG4gICAgICAgIGhpZGRlbiAmJiBzdHlsZXMuaGlkZGVuLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPHVsIGNsYXNzTmFtZT17c3R5bGVzLnN1Z2dlc3Rpb25zTGlzdH0gey4uLmdldE1lbnVQcm9wcygpfT5cbiAgICAgICAge3N1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U3VnZ2VzdGlvblxuICAgICAgICAgICAgICBrZXk9e2Ake3N1Z2dlc3Rpb24udHlwZX0tJHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ2lkIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmd0ZnNJZCB8fFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHN1Z2dlc3Rpb24ucHJvcGVydGllcylcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgICAgICBpdGVtSW5kZXg9e2l9XG4gICAgICAgICAgICAgIGl0ZW09e3N1Z2dlc3Rpb259XG4gICAgICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgICB7cmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uICYmIChcbiAgICAgICAgICAvLyBOb3QgYSBzZWxlY3RhYmxlIGRvd25zaGlmdCBpdGVtLCBzbyBnZXRJdGVtUHJvcHMgaXMgaW50ZW50aW9uYWxseVxuICAgICAgICAgIC8vIG5vdCB1c2VkIGhlcmUgKGl0cyBpbmRleCB3b3VsZCBhbHdheXMgYmUgb3V0IG9mIHRoZSBpdGVtcyBib3VuZHMpLlxuICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJIaXN0b3J5fVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdjbGVhci1zZWFyY2gtaGlzdG9yeScsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59KTtcblxuU3VnZ2VzdGlvbnMucHJvcFR5cGVzID0ge1xuICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoaXRlbVNoYXBlKS5pc1JlcXVpcmVkLFxuICBnZXRNZW51UHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldEl0ZW1Qcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG4gIGhpZGRlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgcmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGFuZGxlQ2xlYXJIaXN0b3J5OiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cblN1Z2dlc3Rpb25zLmRlZmF1bHRQcm9wcyA9IHtcbiAgcmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uOiBmYWxzZSxcbiAgaGFuZGxlQ2xlYXJIaXN0b3J5OiAoKSA9PiB1bmRlZmluZWQsXG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogSW5wdXQgY2xlYXIgYnV0dG9uIGVsZW1lbnRcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENsZWFyQnV0dG9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb2xvciAvLyBoZXggY29sb3Igc3RyaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG5nIC8vIGxhbmd1YWdlLCBlZy4gJ2ZpJ1xuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBjbGVhcklucHV0XG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IFtvbktleURvd25dXG4gKiBAcGFyYW0ge0NsZWFyQnV0dG9uUHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmV4cG9ydCBjb25zdCBDbGVhckJ1dHRvbiA9ICh7IGNvbG9yLCBsbmcsIGNsZWFySW5wdXQsIG9uS2V5RG93biwgc3R5bGVzIH0pID0+IHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgb25DbGljaz17Y2xlYXJJbnB1dH1cbiAgICAgIGFyaWEtbGFiZWw9e3QoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgPlxuICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17Y29sb3J9IC8+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuXG5DbGVhckJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBDbGVhckJ1dHRvbiB9IGZyb20gJy4vQ2xlYXJCdXR0b24nO1xuaW1wb3J0IHsgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5wdXQoe1xuICBpZCxcbiAgbG5nLFxuICB2YWx1ZSxcbiAgcGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkLFxuICBnZXRJbnB1dFByb3BzLFxuICBnZXRMYWJlbFByb3BzLFxuICBjbGVhcklucHV0LFxuICBhcmlhTGFiZWwsXG4gIGlucHV0UmVmLFxuICBzdHlsZXMsXG4gIHJlbmRlckxhYmVsLFxuICBpc01vYmlsZSxcbiAgaW5wdXRDbGFzc05hbWUsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIGNsZWFyQnV0dG9uQ29sb3IsXG4gIGF1dG9Gb2N1cyxcbiAgaW5wdXRPbkJsdXIsXG4gIG9uVmFsdWVDaGFuZ2UsXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIC8vIERvd25zaGlmdCByZXBvcnRzIHRoZSBuZXcgdmFsdWUgb25seSBpbiBhbiBlZmZlY3QsIG9uZSByZW5kZXIgbGF0ZXIuIFVudGlsXG4gICAgLy8gdGhlbiBpdCBmZWVkcyB0aGUgc3RhbGUgY29udHJvbGxlZCBpbnB1dFZhbHVlIGJhY2sgaW50byB0aGUgRE9NIG5vZGUsIHdoaWNoXG4gICAgLy8gd2lwZXMgdGhlIGtleXN0cm9rZSBhbmQgZGVzeW5jcyBBbmRyb2lkIGtleWJvYXJkcycgY29tcG9zaW5nIHJhbmdlLlxuICAgIG9uVmFsdWVDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3JlbmRlckxhYmVsICYmIChcbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgey4uLmdldExhYmVsUHJvcHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXNbJ3NyLW9ubHknXSxcbiAgICAgICAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAge2FyaWFMYWJlbH1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICl9XG4gICAgICA8aW5wdXRcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tYXV0b2ZvY3VzXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgIHN0eWxlcy5pbnB1dCxcbiAgICAgICAgICBpc01vYmlsZSAmJiB0cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJyxcbiAgICAgICAgICBzdHlsZXNbaWRdIHx8ICcnLFxuICAgICAgICAgIHZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJycsXG4gICAgICAgICAgaW5wdXRDbGFzc05hbWUsXG4gICAgICAgICl9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgey4uLmdldElucHV0UHJvcHMoe1xuICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiBpbnB1dE9uQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICB9KX1cbiAgICAgIC8+XG4gICAgICB7dmFsdWUgJiYgKFxuICAgICAgICA8Q2xlYXJCdXR0b25cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBjbGVhcklucHV0PXsoKSA9PiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICBjb2xvcj17Y2xlYXJCdXR0b25Db2xvcn1cbiAgICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIGNsZWFySW5wdXQoaW5wdXRSZWYpfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuSW5wdXQucHJvcFR5cGVzID0ge1xuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGdldElucHV0UHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldExhYmVsUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG4gIHJlbmRlckxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsZWFyQnV0dG9uQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5wdXRPbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBvblZhbHVlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICBhdXRvRm9jdXM6IGZhbHNlLFxuICByZW5kZXJMYWJlbDogZmFsc2UsXG4gIHRyYW5zcG9ydE1vZGU6IHVuZGVmaW5lZCxcbiAgaW5wdXRPbkJsdXI6ICgpID0+IHt9LFxufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHVzZUNvbWJvYm94IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9TdWdnZXN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHtcbiAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50LFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGlzUE9JU2VhcmNoLFxufSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbi8qKlxuICogQHR5cGVkZWYgQXV0b3N1Z2dlc3RTdGF0ZVxuICogQHByb3BlcnR5IHthcnJheX0gc3VnZ2VzdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVuZGVyTW9iaWxlXG4gKlxuICogQHR5cGVkZWYgTW9iaWxlVmlld1Byb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwRWxlbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFySW5wdXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU2VsZWN0ZWRJdGVtQ2hhbmdlXG4gKiBAcHJvcGVydHkge29iamVjdH0gZm9udFdlaWdodHNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFyT2xkU2VhcmNoZXNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBzdWdnZXN0aW9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjb2xvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsbmdcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBhcmlhUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlucHV0Q2xhc3NOYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcXVpcmVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vYmlsZUxhYmVsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvd1Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7QXV0b3N1Z2dlc3RTdGF0ZX0gc3RhdGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGRpc3BhdGNoXG4gKlxuICogQHBhcmFtIHtNb2JpbGVWaWV3UHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmNvbnN0IE1vYmlsZVZpZXcgPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgcGxhY2Vob2xkZXIsXG4gIGNsZWFySW5wdXQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlLFxuICBmb250V2VpZ2h0cyxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgc3VnZ2VzdGlvblByb3BzLFxuICBsbmcsXG4gIGFyaWFQcm9wcyxcbiAgdmFsdWUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICByZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWwsXG4gIHNob3dTY3JvbGwsXG4gIHN0YXRlLFxuICBkaXNwYXRjaCxcbiAgY29sb3JzLFxufSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgIGxvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5sb2NrKCk7XG4gICAgfVxuICB9LCBbc3RhdGUucmVuZGVyTW9iaWxlXSk7XG5cbiAgLyoqXG4gICAqIGluZGVwZW5kZW50IGhvb2tzIGluIG1vYmlsZSB2aWV3LlxuICAgKiBpbnB1dFZhbHVlIGFuZCBzdWdnZXN0aW9uIHN0YXRlcyBhcmUga2VwdCBpbiB0aGUgcGFyZW50XG4gICAqL1xuICBjb25zdCB7XG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBzZXRIaWdobGlnaHRlZEluZGV4LFxuICB9ID0gdXNlQ29tYm9ib3goe1xuICAgIGl0ZW1zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICBpbnB1dFZhbHVlOiB2YWx1ZSxcbiAgICBpc09wZW46IHRydWUsXG4gICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U6IGNoYW5nZXMgPT4ge1xuICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UoY2hhbmdlcyk7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgIH0sXG4gICAgaW5wdXRJZCxcbiAgICBsYWJlbElkLFxuICAgIHNlbGVjdGVkSXRlbTogbnVsbCxcbiAgICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogLTEsXG4gICAgb25JbnB1dFZhbHVlQ2hhbmdlOiAoeyBpbnB1dFZhbHVlLCB0eXBlIH0pID0+XG4gICAgICBzdGF0ZS5yZW5kZXJNb2JpbGUgJiYgLy8gcHJldmVudCB1cGRhdGluZyB2YWx1ZSB3aGVuIHRoZSBzZWFyY2ggaXMgbm90IG9wZW5cbiAgICAgIHR5cGUgIT09IHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRDaGFuZ2UgJiYgLy8gdHlwaW5nIGlzIGRpc3BhdGNoZWQgc3luY2hyb25vdXNseSBieSBJbnB1dFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnSU5QVVRfQ0hBTkdFJywgdmFsdWU6IGlucHV0VmFsdWUgfSksXG4gICAgc3RhdGVSZWR1Y2VyOiAob2xkU3RhdGUsIHsgY2hhbmdlcywgdHlwZSB9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVzY2FwZToge1xuICAgICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoLTEpO1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25FbnRlcjpcbiAgICAgICAgICBpZiAoc3RhdGUubG9hZGluZykge1xuICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnUEVORElOR19FTlRFUicsIGVudGVyUGVuZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGlmIG5vbmUgaXMgaGlnaGxpZ2h0ZWRcbiAgICAgICAgICBpZiAob2xkU3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogc3RhdGUuc3VnZ2VzdGlvbnNbMF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgLy8gYWxsb3dzIHRhYmJpbmcgb3V0IG9mIGlucHV0IGZpZWxkIHdpdGhvdXQgY2xvc2luZ1xuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRCbHVyOiB7XG4gICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICB9XG4gICAgfSxcbiAgICBpdGVtVG9TdHJpbmcoc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24gPyBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbikgOiAnJztcbiAgICB9LFxuICB9KTtcbiAgLy8gY2FsbCB0byBzdXBwcmVzcyByZWYgZXJyb3JzIGZyb20gZG93bnNoaWZ0XG4gIGdldE1lbnVQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRJbnB1dFByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG5cbiAgY29uc3QgaGFuZGxlVmFsdWVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBuZXdWYWx1ZSA9PlxuICAgICAgc3RhdGUucmVuZGVyTW9iaWxlICYmIGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBuZXdWYWx1ZSB9KSxcbiAgICBbc3RhdGUucmVuZGVyTW9iaWxlLCBkaXNwYXRjaF0sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXJIaXN0b3J5ID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0RGlhbG9nT3Blbih0cnVlKSwgW10pO1xuXG4gIGNvbnN0IHsgYXJpYVJlcXVpcmVkVGV4dCwgU2VhcmNoQmFySWQsIGFyaWFDdXJyZW50U3VnZ2VzdGlvbiB9ID0gYXJpYVByb3BzO1xuICBjb25zdCBhcmlhTGFiZWwgPSBhcmlhUmVxdWlyZWRUZXh0XG4gICAgLmNvbmNhdCgnICcpXG4gICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KGFyaWFDdXJyZW50U3VnZ2VzdGlvbik7XG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c3RhdGUucmVuZGVyTW9iaWxlfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbCddfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtb3ZlcmxheSddfVxuICAgICAgc2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlPXtmYWxzZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogY29sb3JzLnByaW1hcnksXG4gICAgICAgICAgJy0tYWNjZXNzaWJsZS1wcmltYXJ5LWNvbG9yJzogY29sb3JzLmFjY2Vzc2libGVQcmltYXJ5LFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogY29sb3JzLmhvdmVyLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSkge1xuICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoLTEpO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjYW5jZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz1cImFycm93XCIgY29sb3I9e2NvbG9ycy5wcmltYXJ5fSAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydyaWdodC1jb2x1bW4nXX0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX1cbiAgICAgICAgICAgICAgaWQ9e2xhYmVsSWR9XG4gICAgICAgICAgICAgIHsuLi5nZXRMYWJlbFByb3BzKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttb2JpbGVMYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICAgICAgaXNQT0lTZWFyY2goaWQpXG4gICAgICAgICAgICAgICAgICA/IHQoJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnLCB7IGxuZyB9KVxuICAgICAgICAgICAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgZ2V0SW5wdXRQcm9wcz17Z2V0SW5wdXRQcm9wc31cbiAgICAgICAgICAgICAgZ2V0TGFiZWxQcm9wcz17Z2V0TGFiZWxQcm9wc31cbiAgICAgICAgICAgICAgY2xlYXJJbnB1dD17KCkgPT4gY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJMYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIGNsZWFyQnV0dG9uQ29sb3I9e2NvbG9ycy5wcmltYXJ5fVxuICAgICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZVZhbHVlQ2hhbmdlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxTdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17c3RhdGUuc3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleD17aGlnaGxpZ2h0ZWRJbmRleH1cbiAgICAgICAgICAgICAgaXNPcGVuIC8vIHdoZW4gbW9iaWxlIHZpZXcgaXMgb3BlbiB3ZSBhbHdheXMgd2FudCB0byBzaG93IHN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIGhpZGRlbj17ZmFsc2V9XG4gICAgICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICAgICAgcmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uXG4gICAgICAgICAgICAgIGhhbmRsZUNsZWFySGlzdG9yeT17aGFuZGxlQ2xlYXJIaXN0b3J5fVxuICAgICAgICAgICAgICB7Li4uc3VnZ2VzdGlvblByb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgICBoZWFkZXJUZXh0PXt0KCdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcicsIHsgbG5nIH0pfVxuICAgICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXt0KCdkZWxldGUnLCB7IGxuZyB9KX1cbiAgICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXt0KCdjYW5jZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcygpO1xuICAgICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgICBsYW5nPXtsbmd9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVWaWV3LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblNlbGVjdGVkSXRlbUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHN1Z2dlc3Rpb25Qcm9wczogUHJvcFR5cGVzLnNoYXBlKHt9KS5pc1JlcXVpcmVkLFxuICBhcmlhUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXJpYVJlcXVpcmVkVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIFNlYXJjaEJhcklkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3RhdGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7fSkpLmlzUmVxdWlyZWQsXG4gICAgcmVuZGVyTW9iaWxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGxvYWRpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGRpc3BhdGNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9iaWxlVmlldztcbiIsImV4cG9ydCBjb25zdCBzZWFyY2hSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ0lOUFVUX0NIQU5HRSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6IGFjdGlvbi52YWx1ZSxcbiAgICAgIH07XG4gICAgY2FzZSAnRkVUQ0hfU1VHR0VTVElPTlMnOlxuICAgICAgcmV0dXJuIGFjdGlvbi5sb2FkaW5nID09PSBzdGF0ZS5sb2FkaW5nICYmICFhY3Rpb24uc3VnZ2VzdGlvbnNcbiAgICAgICAgPyBzdGF0ZVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgbG9hZGluZzogYWN0aW9uLmxvYWRpbmcsXG4gICAgICAgICAgICBzdWdnZXN0aW9uczogYWN0aW9uLnN1Z2dlc3Rpb25zIHx8IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgIH07XG4gICAgY2FzZSAnQ0xFQVJfU1VHR0VTVElPTlMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAnUkVTRVRfU09VUkNFUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc291cmNlczogYWN0aW9uLnNvdXJjZXMsXG4gICAgICB9O1xuICAgIGNhc2UgJ1NFVF9TT1VSQ0VTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzaG93T3duUGxhY2VzOiBhY3Rpb24uc2hvd093blBsYWNlcyxcbiAgICAgICAgc291cmNlczogYWN0aW9uLnNvdXJjZXMsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IGFjdGlvbi5wZW5kaW5nU2VsZWN0aW9uLFxuICAgICAgfTtcbiAgICBjYXNlICdDTEVBUic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBpc0NsZWFyZWQ6IHRydWUsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAnSU5QVVRfQkxVUic6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogYWN0aW9uLnZhbHVlIHx8IHN0YXRlLnZhbHVlLFxuICAgICAgICBpc0NsZWFyZWQ6IGFjdGlvbi5pc01vYmlsZSA/IGZhbHNlIDogc3RhdGUuaXNDbGVhcmVkLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1JFU0VUJzoge1xuICAgICAgcmV0dXJuIGFjdGlvbi5pbml0aWFsU3RhdGU7XG4gICAgfVxuICAgIGNhc2UgJ1BFTkRJTkdfRU5URVInOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZW50ZXJQZW5kaW5nOiBhY3Rpb24uZW50ZXJQZW5kaW5nLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnVE9HR0xFX01FTlUnOiB7XG4gICAgICBpZiAoYWN0aW9uLmlzTW9iaWxlKSB7XG4gICAgICAgIGlmICghc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcmVuZGVyTW9iaWxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXRlLmlzQ2xlYXJlZCA/ICcnIDogc3RhdGUudmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHJlbmRlck1vYmlsZTogZmFsc2UsXG4gICAgICAgICAgaXNDbGVhcmVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc01lbnVPcGVuOiAhc3RhdGUuaXNNZW51T3BlbixcbiAgICAgICAgcmVuZGVyTW9iaWxlOiBhY3Rpb24uaXNNb2JpbGUgJiYgIXN0YXRlLnJlbmRlck1vYmlsZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHtcbiAgdXNlRWZmZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VSZWR1Y2VyLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIsIHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgeyB1c2VDb21ib2JveCB9IGZyb20gJ2Rvd25zaGlmdCc7XG5pbXBvcnQgSWNvbiwge1xuICBkZWZhdWx0Q29sb3JzLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBpMThuIGZyb20gJy4vdXRpbHMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vY29tcG9uZW50cy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgeyBnZXRTdWdnZXN0aW9uVmFsdWUsIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50IH0gZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgTW9iaWxlVmlldyBmcm9tICcuL2NvbXBvbmVudHMvTW9iaWxlVmlldyc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vY29tcG9uZW50cy9JbnB1dCc7XG5pbXBvcnQgeyBTdWdnZXN0aW9ucyB9IGZyb20gJy4vY29tcG9uZW50cy9TdWdnZXN0aW9ucyc7XG5pbXBvcnQgeyBzZWFyY2hSZWR1Y2VyIH0gZnJvbSAnLi91dGlscy9zZWFyY2hSZWR1Y2VyJztcblxuY29uc3QgZ2V0QXJpYVByb3BzID0gKHtcbiAgaWQsXG4gIGFyaWFMYWJlbCxcbiAgbG5nLFxuICB0LFxuICBpc01vYmlsZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIHZhbHVlLFxuICByZXF1aXJlZCxcbn0pID0+IHtcbiAgY29uc3QgYXJpYUJhcklkID0gaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICBjb25zdCBTZWFyY2hCYXJJZCA9XG4gICAgYXJpYUxhYmVsIHx8IHQoYXJpYUJhcklkLCB7IGxuZyB9KS5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJykuY29uY2F0KCcuJyk7IC8vIEZ1bGwgc3RvcCBtYWtlcyBzY3JlZW4gcmVhZGVyIHNwZWVjaCBjbGVhcmVyLlxuICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gcmVxdWlyZWQgPyBgJHt0KCdyZXF1aXJlZCcsIHsgbG5nIH0pfS5gIDogJyc7XG4gIGNvbnN0IGFyaWFMYWJlbEluc3RydWN0aW9ucyA9IGlzTW9iaWxlXG4gICAgPyB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZScsIHsgbG5nIH0pXG4gICAgOiB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnLCB7IGxuZyB9KTtcbiAgY29uc3QgbW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCA9XG4gICAgaWQgPT09ICdvcmlnaW4nXG4gICAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJywgeyBsbmcgfSlcbiAgICAgIDogJyc7XG4gIGNvbnN0IGFyaWFMYWJlbFRleHQgPSBhcmlhTGFiZWxJbnN0cnVjdGlvbnNcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQpO1xuXG4gIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgIGxuZyxcbiAgfSk7XG5cbiAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID1cbiAgICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCh7IHN1Z2dlc3Rpb25zLCB0LCBsbmcgfSkgfHwgdmFsdWVcbiAgICAgID8gdCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBsbmcsXG4gICAgICAgICAgc2VsZWN0aW9uOlxuICAgICAgICAgICAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoeyBzdWdnZXN0aW9ucywgdCwgbG5nIH0pLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgOiAnJztcblxuICByZXR1cm4ge1xuICAgIFNlYXJjaEJhcklkLFxuICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgYXJpYUxhYmVsVGV4dCxcbiAgICBhcmlhU3VnZ2VzdGlvbkxlbixcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gIH07XG59O1xuXG5jb25zdCBwb3NpdGlvbnMgPSBbXG4gICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICdWYWxkIHBvc2l0aW9uJyxcbiAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgJ01pbiBwb3NpdGlvbicsXG4gICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgJ1d5YnJhbmUgbWllanNjZScsXG5dO1xuXG4vKipcbiAqIFRha2VzIHRoZSB0YXJnZXRzIGFuZCBtb2RpZmllcyB0aGVtIGJhc2VkIG9uIG93blBsYWNlcyBhbmQgaXNMb2NhdGlvblNlYXJjaFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcy50YXJnZXRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLmlzTG9jYXRpb25TZWFyY2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuaXNNb2JpbGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMub3duUGxhY2VzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcy5zb3VyY2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IG5ld1RhcmdldHNcbiAqL1xuY29uc3QgZ2V0TmV3VGFyZ2V0cyA9ICh7XG4gIHRhcmdldHMsXG4gIGlzTG9jYXRpb25TZWFyY2gsXG4gIGlzTW9iaWxlLFxuICBvd25QbGFjZXMsXG4gIHNvdXJjZXMsXG59KSA9PiB7XG4gIGNvbnN0IHVzZUFsbCA9ICF0YXJnZXRzPy5sZW5ndGg7XG4gIC8vIERlZmF1bHQ6IG5laXRoZXIgdGhlIG93blBsYWNlcyBub3IgdGhlIFwiZXhwbGljaXQsIG5vbi1lbXB0eSB0YXJnZXRzXCJcbiAgLy8gY2FzZSBhcHBsaWVzIChlLmcuIHRoZSBjb21tb24gXCJsZWF2ZSB0YXJnZXRzIGVtcHR5IHRvIHNlYXJjaFxuICAvLyBldmVyeXRoaW5nXCIgdXNhZ2UpIC0gcGFzcyB0YXJnZXRzIHRocm91Z2ggdW5jaGFuZ2VkIHJhdGhlciB0aGFuXG4gIC8vIGxlYXZpbmcgbmV3VGFyZ2V0cyB1bmRlZmluZWQsIHdoaWNoIHdvdWxkIGNyYXNoIGRvd25zdHJlYW0gY2FsbHMgbGlrZVxuICAvLyBgdGFyZ2V0cy5pbmNsdWRlcyguLi4pYCBpbiBnZXRTZWFyY2hSZXN1bHRzLlxuICBsZXQgbmV3VGFyZ2V0cyA9IHRhcmdldHM7XG4gIGlmIChvd25QbGFjZXMpIHtcbiAgICBuZXdUYXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICB9XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0YXRpb25zJyk7XG4gICAgfVxuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCF1c2VBbGwpIHtcbiAgICBuZXdUYXJnZXRzID0gWy4uLnRhcmdldHNdO1xuICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICBpZiAoXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAhaXNNb2JpbGUgJiZcbiAgICAgICghc291cmNlcy5sZW5ndGggfHwgc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1RhcmdldHM7XG59O1xuXG4vKipcbiAqIEFuIGF1dG9zdWdnZXN0IHNlYXJjaCBpbnB1dCBmb3IgZmluZGluZyBsb2NhdGlvbnMsIHN0b3BzLCBzdGF0aW9ucywgcm91dGVzIGFuZCB2ZWhpY2xlIHJlbnRhbCBzdGF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gT3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgU3RhdGlvbnMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogcmV0dXJuIChcbiAqICA8RFRBdXRvc3VnZ2VzdFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBpY29uPVwib3JpZ2luXCIgLy8gT3B0aW9uYWwgU3RyaW5nIGZvciBpY29uIHRoYXQgaXMgc2hvd24gbGVmdCBvZiBzZWFyY2hmaWVsZC4gdXNlZCB3aXRoIEljb24gbGlicmFyeVxuICogICAgaWQ9XCJvcmlnaW5cIiAvLyB1c2VkIGZvciBzdHlsZSBwcm9wcyBhbmQgaW5mbyBmb3IgY29tcG9uZW50LlxuICogICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvLyBTdHJpbmcgdGhhdCBpcyBzaG93bnMgaW5pdGFsbHkgaW4gc2VhcmNoIGZpZWxkXG4gKiAgICB2YWx1ZT1cIlwiIC8vIGUuZy4gdXNlciB0eXBlZCBzdHJpbmcgdGhhdCBpcyBzaG93biBpbiBzZWFyY2ggZmllbGRcbiAqICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAqICAgIG9uQ2xlYXI9e29uQ2xlYXJ9XG4gKiAgICBsYW5nPXtsYW5nfVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICpcbiAqIEB0eXBlZGVmIERUQXV0b3N1Z2dlc3RQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYWNlaG9sZGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBvblNlbGVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpY29uXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt2YWx1ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtvbkNsZWFyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsYW5nXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtnZXRBdXRvU3VnZ2VzdEljb25zXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2hhbmRsZVZpYVBvaW50c11cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtmb2N1c0NoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtzdG9yZVJlZl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzTW9iaWxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2JpbGVMYWJlbF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5wdXRDbGFzc05hbWVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RyYW5zbGF0ZWRQbGFjZWhvbGRlcl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlcXVpcmVkXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtmb250V2VpZ2h0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbY29sb3JzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlU2V0XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvd1Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzRW1iZWRkZWRdXG4gKiBHZW9jb2RpbmcgcmVsYXRlZCBwcm9wc1xuICogQHByb3BlcnR5IHtPYmplY3R9IHNlYXJjaENvbnRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHJhbnNwb3J0TW9kZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFt0YXJnZXRzXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3NvdXJjZXNdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2dlb2NvZGluZ1NpemVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZmlsdGVyUmVzdWx0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcGF0aE9wdHNdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3JlZlBvaW50XVxuICogQHBhcmFtIHtEVEF1dG9zdWdnZXN0UHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIERUQXV0b3N1Z2dlc3Qoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgcGxhY2Vob2xkZXIsXG4gIG9uU2VsZWN0LFxuICBpY29uLFxuICB2YWx1ZSxcbiAgb25DbGVhcixcbiAgbGFuZzogbG5nLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICBoYW5kbGVWaWFQb2ludHMsXG4gIGZvY3VzQ2hhbmdlLFxuICBzdG9yZVJlZixcbiAgaXNNb2JpbGUsXG4gIG1vYmlsZUxhYmVsLFxuICBpbnB1dENsYXNzTmFtZSxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyLFxuICByZXF1aXJlZCxcbiAgYXJpYUxhYmVsLFxuICBmb250V2VpZ2h0cyxcbiAgY29sb3JzLFxuICBtb2RlU2V0LFxuICBzaG93U2Nyb2xsLFxuICBpc0VtYmVkZGVkLFxuICB0cmFuc3BvcnRNb2RlLFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICBnZW9jb2RpbmdTaXplLFxuICBmaWx0ZXJSZXN1bHRzLFxuICBzZWFyY2hDb250ZXh0LFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICBzdWdnZXN0aW9uczogW10sXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgc291cmNlcyxcbiAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgIGlzQ2xlYXJlZDogZmFsc2UsXG4gICAgcmVuZGVyTW9iaWxlOiBmYWxzZSxcbiAgICB2YWx1ZSxcbiAgICBlbnRlclBlbmRpbmc6IGZhbHNlLFxuICAgIGlzTWVudU9wZW46IGZhbHNlLFxuICB9O1xuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIoc2VhcmNoUmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcbiAgLy8gUmVzZXQgdGhlIHN0YXRlIHdoZW4gdmFsdWUgb3Igc291cmNlcyBjaGFuZ2UsIHRoaXMgYWxzbyB0cmlnZ2VycyBhIG5ldyBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUJywgaW5pdGlhbFN0YXRlIH0pLCBbdmFsdWVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUX1NPVVJDRVMnLCBzb3VyY2VzIH0pLCBbc291cmNlc10pO1xuICAvLyBjcmVhdGUgYW5kIHN0b3JlIGlucHV0IHJlZiBpbiB0aGUgcGFyZW50IGlmIHN0b3JlUmVmIGlzIHByb3ZpZGVkXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKGlkKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RvcmVSZWYpIHtcbiAgICAgIHN0b3JlUmVmKGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW2lucHV0UmVmLmN1cnJlbnRdKTtcblxuICBjb25zdCBmZXRjaFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHVzZUFsbCA9ICF0YXJnZXRzPy5sZW5ndGg7XG4gICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9IHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcblxuICAgIGNvbnN0IG5ld1RhcmdldHMgPSBnZXROZXdUYXJnZXRzKHtcbiAgICAgIHRhcmdldHMsXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBvd25QbGFjZXM6IHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgICBzb3VyY2VzOiBzdGF0ZS5zb3VyY2VzLFxuICAgIH0pO1xuICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICBjb25zdCBuZXdTb3VyY2VzID0gc3RhdGUuc291cmNlc1xuICAgICAgPyBzdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICBzID0+XG4gICAgICAgICAgICAhaXNMb2NhdGlvblNlYXJjaCB8fFxuICAgICAgICAgICAgIXMgPT09ICdGYXZvdXJpdGUnIHx8XG4gICAgICAgICAgICBzdGF0ZS5zaG93T3duUGxhY2VzIHx8XG4gICAgICAgICAgICBpc01vYmlsZSxcbiAgICAgICAgKVxuICAgICAgOiBzdGF0ZS5zb3VyY2VzO1xuICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICBuZXdUYXJnZXRzLFxuICAgICAgbmV3U291cmNlcyxcbiAgICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgICBzZWFyY2hDb250ZXh0LFxuICAgICAgZmlsdGVyUmVzdWx0cyxcbiAgICAgIGdlb2NvZGluZ1NpemUsXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBzdGF0ZS52YWx1ZSB8fCAnJyxcbiAgICAgIH0sXG4gICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnRkVUQ0hfU1VHR0VTVElPTlMnLFxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID4gRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZFN1Z2dlc3Rpb24gPSB7IC4uLnN1Z2dlc3Rpb24gfTtcbiAgICAgICAgICAgICAgdHJhbnNsYXRlZFN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkID0gdChcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCxcbiAgICAgICAgICAgICAgICB7IGxuZyB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFN1Z2dlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdGRVRDSF9TVUdHRVNUSU9OUycsXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IG5ld1N1Z2dlc3Rpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBwYXRoT3B0cyxcbiAgICAgIHJlZlBvaW50LFxuICAgICk7XG4gIH0sIFtcbiAgICBzdGF0ZS52YWx1ZSxcbiAgICBzdGF0ZS5zb3VyY2VzLFxuICAgIHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgdGFyZ2V0cyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGlzTW9iaWxlLFxuICAgIGxuZyxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgICBpZCxcbiAgXSk7XG5cbiAgY29uc3Qgc2VsZWN0U3VnZ2VzdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzdWdnZXN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgaGFuZGxlVmlhUG9pbnRzKHN1Z2dlc3Rpb24sIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU2VsZWN0KHN1Z2dlc3Rpb24sIGlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1c0NoYW5nZSAmJiAoIWlzTW9iaWxlIHx8IGlzRW1iZWRkZWQpKSB7XG4gICAgICAgIGZvY3VzQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc01vYmlsZV0sXG4gICk7XG5cbiAgY29uc3Qgb25TZWxlY3RlZEl0ZW1DaGFuZ2UgPSBjaGFuZ2VzID0+XG4gICAgc2VsZWN0U3VnZ2VzdGlvbihjaGFuZ2VzLnNlbGVjdGVkSXRlbSwgY2hhbmdlcy5oaWdobGlnaHRlZEluZGV4KTtcblxuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgc2VsZWN0SXRlbSxcbiAgICBvcGVuTWVudSxcbiAgICBjbG9zZU1lbnUsXG4gIH0gPSB1c2VDb21ib2JveCh7XG4gICAgaW5wdXRJZDogaWQsXG4gICAgaW5wdXRWYWx1ZTogc3RhdGUudmFsdWUsXG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IDAsXG4gICAgLy8gVHlwaW5nIGlzIGRpc3BhdGNoZWQgc3luY2hyb25vdXNseSBieSBJbnB1dC4gRG93bnNoaWZ0IHJlcG9ydHMgaXQgZnJvbSBhblxuICAgIC8vIGVmZmVjdCBhIHJlbmRlciBsYXRlLCB3aGljaCB3b3VsZCBvdmVyd3JpdGUgbmV3ZXIga2V5c3Ryb2tlcy5cbiAgICBvbklucHV0VmFsdWVDaGFuZ2U6ICh7IGlucHV0VmFsdWUsIHR5cGUgfSkgPT5cbiAgICAgIHR5cGUgIT09IHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRDaGFuZ2UgJiZcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgIHN0YXRlUmVkdWNlcjogdXNlQ2FsbGJhY2soXG4gICAgICAob2xkU3RhdGUsIHsgdHlwZSwgY2hhbmdlcyB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JdGVtQ2xpY2s6XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVudGVyOiB7XG4gICAgICAgICAgICAvLyBzZXRDbGVhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgIC8vIGtlZXAgZW50ZXJQcmVzc2VkUmVmIHRvIG1ha2Ugc2VsZWN0aW9uIHdoZW4gc3VnZ2VzdGlvbnMgaGF2ZSBsb2FkZWRcbiAgICAgICAgICAgIGlmIChzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1BFTkRJTkdfRU5URVInLCBlbnRlclBlbmRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2hhbmdlcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHNlbGVjdGluZyBmcm9tIG93biBsb2NhdGlvbnMsIGtlZXAgbWVudSBvcGVuIGFuZCBrZWVwIG9sZCBzdGF0ZVxuICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1NFVF9TT1VSQ0VTJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbJ0Zhdm91cml0ZScsICdCYWNrJ10sXG4gICAgICAgICAgICAgICAgc2hvd093blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUgPT09ICdiYWNrJykge1xuICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1NFVF9TT1VSQ0VTJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Q2xpY2s6IHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGlucHV0IGlmIGN1cnJlbnQgcG9zaXRpb24gb3Igc2VsZWN0ZWQgbG9jYXRpb24gaXMgc2hvd25cbiAgICAgICAgICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoYW5nZXMsIGlucHV0VmFsdWU6ICcnLCBpc09wZW46IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEJsdXI6IHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBvbGRTdGF0ZS5zZWxlY3RJdGVtLFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWU6IG9sZFN0YXRlLmlucHV0VmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVzY2FwZToge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgaW5wdXRWYWx1ZTogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbc3RhdGUubG9hZGluZywgdmFsdWUsIGlzTW9iaWxlXSxcbiAgICApLFxuICAgIGl0ZW1zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICBpdGVtVG9TdHJpbmcoc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24gPyBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbikgOiAnJztcbiAgICB9LFxuICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlLFxuICAgIG9uSXNPcGVuQ2hhbmdlOiBjaGFuZ2VzID0+IHtcbiAgICAgIGlmIChjaGFuZ2VzLmlzT3BlbiAmJiAhc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGUgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGlucHV0T25CbHVyID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIGlzTW9iaWxlLFxuICAgICAgdmFsdWU6ICFpc01vYmlsZSAmJiB2YWx1ZSxcbiAgICAgIHR5cGU6ICdJTlBVVF9CTFVSJyxcbiAgICB9KTtcbiAgICBpZiAoIWlzTW9iaWxlKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdSRVNFVCcsXG4gICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjbGVhcklucHV0ID0gcmVmID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdDTEVBUicgfSk7XG4gICAgaWYgKG9uQ2xlYXIpIHtcbiAgICAgIG9uQ2xlYXIoaWQpO1xuICAgIH1cbiAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIG9wZW5NZW51KCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsdWVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBuZXdWYWx1ZSA9PiBkaXNwYXRjaCh7IHR5cGU6ICdJTlBVVF9DSEFOR0UnLCB2YWx1ZTogbmV3VmFsdWUgfSksXG4gICAgW10sXG4gICk7XG5cbiAgLy8gRmV0Y2ggc3VnZ2VzdGlvbnMgd2hlbiBpc09wZW4sIHZhbHVlLCBvciBmZXRjaFN1Z2dlc3Rpb25zIGRlcGVuZGVuY2llcyBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBEb24ndCBzZWFyY2ggd2hlbiB0aGUgc2VhcmNoIGZpZWxkIChzdGF0ZS52YWx1ZSkgY29udGFpbnMgcG9zaXRpb24gc3RyaW5ncyB0aGF0IHdlcmUgZ2l2ZW4gYXMgYSBwcm9wICh2YWx1ZSksXG4gICAgLy8gYmVjYXVzZSB0aGV5IGFyZSBVSSBsYWJlbHMgbm90IHJlYWwgc2VhcmNoIHRlcm1zLiBGZXRjaGluZyBzdWdnZXN0aW9ucyB3aXRoIHRoZW0gY2F1c2VkIGEgcXVpY2tseSBmbGFzaGluZyBzZXQgb2ZcbiAgICAvLyBpcnJlbGV2YW50IHJlc3VsdHMsIGUuZy4gJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScgLT4gJ0NpdHkta8OkeXTDpHbDpCcuXG4gICAgaWYgKFxuICAgICAgKGlzT3BlbiB8fCBzdGF0ZS5yZW5kZXJNb2JpbGUpICYmXG4gICAgICAhKHN0YXRlLnZhbHVlID09PSB2YWx1ZSAmJiBwb3NpdGlvbnMuaW5jbHVkZXModmFsdWUpKVxuICAgICkge1xuICAgICAgZmV0Y2hTdWdnZXN0aW9ucyhzdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9LCBbaXNPcGVuLCBzdGF0ZS5yZW5kZXJNb2JpbGUsIHN0YXRlLnZhbHVlLCBmZXRjaFN1Z2dlc3Rpb25zXSk7XG5cbiAgLy8gdGhpcyBlZmZlY3QgaGFuZGxlcyBzZWxlY3RpbmcgdGhlIHN1Z2dlc3Rpb24gd2hlbiBlbnRlciB3YXMgcHJlc3NlZCBidXQgc3VnZ2VzdGlvbnMgd2VyZSBzdGlsbCBsb2FkaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLmVudGVyUGVuZGluZyAmJiAhc3RhdGUubG9hZGluZykge1xuICAgICAgc2VsZWN0U3VnZ2VzdGlvbihzdGF0ZS5zdWdnZXN0aW9uc1swXSwgMCk7XG4gICAgICBjbG9zZU1lbnUoKTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5sb2FkaW5nLCBzdGF0ZS5wZW5kaW5nRW50ZXIsIHN0YXRlLnN1Z2dlc3Rpb25zXSk7XG5cbiAgY29uc3QgYmFzZUl0ZW1Qcm9wcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGxvYWRpbmc6IHN0YXRlLmxvYWRpbmcsXG4gICAgICBpc01vYmlsZSxcbiAgICAgIGFyaWFGYXZvdXJpdGVTdHJpbmc6IHQoJ2Zhdm91cml0ZScsIHsgbG5nIH0pLFxuICAgICAgZm9udFdlaWdodHMsXG4gICAgICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICAgICAgY29sb3JzLFxuICAgICAgbW9kZVNldCxcbiAgICB9KSxcbiAgICBbXG4gICAgICBzdGF0ZS5sb2FkaW5nLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICB0LFxuICAgICAgbG5nLFxuICAgICAgZm9udFdlaWdodHMsXG4gICAgICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICAgICAgY29sb3JzLFxuICAgICAgbW9kZVNldCxcbiAgICBdLFxuICApO1xuXG4gIGNvbnN0IHtcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICBTZWFyY2hCYXJJZCxcbiAgICBhcmlhTGFiZWxUZXh0LFxuICB9ID0gZ2V0QXJpYVByb3BzKHtcbiAgICBpZCxcbiAgICBsbmcsXG4gICAgdCxcbiAgICBpc01vYmlsZSxcbiAgICBhcmlhTGFiZWwsXG4gICAgc3VnZ2VzdGlvbnM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIHZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICByZXF1aXJlZCxcbiAgfSk7XG5cbiAgY29uc3QgbW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRleHQsIGNsZWFyT2xkU2VhcmNoZXMsIGNsZWFyRnV0dXJlUm91dGVzIH0gPSBzZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICBmZXRjaFN1Z2dlc3Rpb25zKHN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXN0YXRlLnJlbmRlck1vYmlsZSAmJiAhaXNPcGVuKSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdSRVNFVCcsIGluaXRpYWxTdGF0ZSB9KTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5yZW5kZXJNb2JpbGUsIGlzT3Blbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc01vYmlsZSAmJiAoXG4gICAgICAgIDxNb2JpbGVWaWV3XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3QocGxhY2Vob2xkZXIsIHsgbG5nIH0pfVxuICAgICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXttb2JpbGVDbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgICAgbW9iaWxlTGFiZWw9e21vYmlsZUxhYmVsIHx8IHQoaWQsIHsgbG5nIH0pfVxuICAgICAgICAgIGFyaWFQcm9wcz17e1xuICAgICAgICAgICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uLFxuICAgICAgICAgICAgU2VhcmNoQmFySWQsXG4gICAgICAgICAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgICAgICAgIH19XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlPXtvblNlbGVjdGVkSXRlbUNoYW5nZX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBzdWdnZXN0aW9uUHJvcHM9e2Jhc2VJdGVtUHJvcHN9XG4gICAgICAgICAgc2hvd1Njcm9sbD17ISFzaG93U2Nyb2xsfVxuICAgICAgICAgIGNvbG9ycz17Y29sb3JzfVxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lPXtpbnB1dENsYXNzTmFtZX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgIHN0YXRlLnJlbmRlck1vYmlsZSAmJiAnaGlkZGVuJyxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGNvbG9ycy5ob3ZlcixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2ljb24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWljb24nXSxcbiAgICAgICAgICAgICAgc3R5bGVzW2lkXSxcbiAgICAgICAgICAgICAgaW5wdXRDbGFzc05hbWUgJiYgc3R5bGVzW2Ake2lucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcsIHsgbG5nIH0pKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2Ake2ljb259YH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPElucHV0XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIGFyaWFMYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uXG4gICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgZ2V0SW5wdXRQcm9wcz17Z2V0SW5wdXRQcm9wc31cbiAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgIHNlbGVjdEl0ZW09e3NlbGVjdEl0ZW19XG4gICAgICAgICAgdmFsdWU9e3N0YXRlLnZhbHVlfVxuICAgICAgICAgIGNsZWFySW5wdXQ9e2NsZWFySW5wdXR9XG4gICAgICAgICAgaW5wdXRSZWY9e2lucHV0UmVmfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIGNsZWFyQnV0dG9uQ29sb3I9e2NvbG9ycy5wcmltYXJ5fVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0cmFuc2xhdGVkUGxhY2Vob2xkZXIgfHwgdChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9XG4gICAgICAgICAgaXNNb2JpbGU9e2lzTW9iaWxlfVxuICAgICAgICAgIGlucHV0T25CbHVyPXtpbnB1dE9uQmx1cn1cbiAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtoYW5kbGVWYWx1ZUNoYW5nZX1cbiAgICAgICAgLz5cblxuICAgICAgICA8U3VnZ2VzdGlvbnNcbiAgICAgICAgICBoaWRkZW49eyFpc09wZW4gfHwgIXN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCB8fCBpc01vYmlsZX1cbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICB7Li4uYmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5EVEF1dG9zdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xlYXJGdXR1cmVSb3V0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG4gIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkRUQXV0b3N1Z2dlc3QuZGVmYXVsdFByb3BzID0ge1xuICBpY29uOiB1bmRlZmluZWQsXG4gIHZhbHVlOiAnJyxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgbGFuZzogJ2ZpJyxcbiAgc3RvcmVSZWY6IHVuZGVmaW5lZCxcbiAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgc291cmNlczogW10sXG4gIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgaXNNb2JpbGU6IGZhbHNlLFxuICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICBwYXRoT3B0czoge1xuICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgfSxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIGZvbnRXZWlnaHRzOiB7XG4gICAgbWVkaXVtOiA1MDAsXG4gIH0sXG4gIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IGZhbHNlLFxuICByZWZQb2ludDoge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0IHsuLi5wcm9wc30gLz5cbiAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwic3BsaXRTaG9ydE5hbWVBdExldHRlcnMiLCJ0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMiLCJ0ZXN0IiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwiZmlsdGVyIiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImVsZW1lbnQiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsImJpbmQiLCJmbiIsInRoaXNBcmciLCJhcHBseSIsImFyZ3VtZW50cyIsInRvU3RyaW5nIiwiZ2V0UHJvdG90eXBlT2YiLCJ0b1N0cmluZ1RhZyIsImtpbmRPZiIsImNhY2hlIiwiY3JlYXRlIiwidGhpbmciLCJzbGljZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0J1ZmZlciIsInZhbCIsImlzRnVuY3Rpb24iLCJpc0FycmF5QnVmZmVyIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiRyIsImdsb2JhbFRoaXMiLCJzZWxmIiwid2luZG93IiwiZ2xvYmFsIiwiRm9ybURhdGFDdG9yIiwiRm9ybURhdGEiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzUmVhZGFibGVTdHJlYW0iLCJpc1JlcXVlc3QiLCJpc1Jlc3BvbnNlIiwiaXNIZWFkZXJzIiwib2JqIiwiYWxsT3duS2V5cyIsImwiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImxlbiIsImtleSIsImZpbmRLZXkiLCJfa2V5IiwiX2dsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpc1JlZ0V4cCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImRlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiaXNBc3luY0ZuIiwiX3NldEltbWVkaWF0ZSIsInNldEltbWVkaWF0ZVN1cHBvcnRlZCIsInNldEltbWVkaWF0ZSIsInBvc3RNZXNzYWdlU3VwcG9ydGVkIiwicG9zdE1lc3NhZ2UiLCJ0b2tlbiIsInJhbmRvbSIsImNhbGxiYWNrcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJkYXRhIiwic2hpZnQiLCJjYiIsInB1c2giLCJzZXRUaW1lb3V0IiwiYXNhcCIsInF1ZXVlTWljcm90YXNrIiwicHJvY2VzcyIsIm5leHRUaWNrIiwidXRpbHMkMSIsImlzRm9ybURhdGEiLCJwcm90byIsImFwcGVuZCIsImtpbmQiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNCb29sZWFuIiwiaXNFbXB0eU9iamVjdCIsImlzUmVhY3ROYXRpdmVCbG9iIiwidXJpIiwiaXNSZWFjdE5hdGl2ZSIsImZvcm1EYXRhIiwiZ2V0UGFydHMiLCJpc1N0cmVhbSIsInBpcGUiLCJtZXJnZSIsIm9ianMiLCJjYXNlbGVzcyIsInNraXBVbmRlZmluZWQiLCJ0aGlzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleGlzdGluZyIsInN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJqIiwic3ltYm9sIiwiZXh0ZW5kIiwiYSIsImIiLCJfX3Byb3RvX18iLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsImVuZHNXaXRoIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJsYXN0SW5kZXgiLCJ0b0FycmF5IiwiYXJyIiwiZm9yRWFjaEVudHJ5IiwiX2l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImhhc093blByb3AiLCJmcmVlemVNZXRob2RzIiwic2V0IiwiRXJyb3IiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJ0b0NhbWVsQ2FzZSIsIm0iLCJ0b1VwcGVyQ2FzZSIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsImlzRmluaXRlIiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInZpc2l0ZWQiLCJXZWFrU2V0IiwidmlzaXQiLCJoYXMiLCJhZGQiLCJ0YXJnZXQiLCJyZWR1Y2VkVmFsdWUiLCJkZWxldGUiLCJpc1RoZW5hYmxlIiwidGhlbiIsImNhdGNoIiwiaXNJdGVyYWJsZSIsImlnbm9yZUR1cGxpY2F0ZU9mIiwidXRpbHMiLCJJTlZBTElEX1VOSUNPREVfSEVBREVSX1ZBTFVFX0NIQVJTIiwiUmVnRXhwIiwiSU5WQUxJRF9CWVRFX1NUUklOR19IRUFERVJfVkFMVUVfQ0hBUlMiLCJzYW5pdGl6ZVZhbHVlIiwiaW52YWxpZENoYXJzIiwic3RhcnQiLCJlbmQiLCJjb2RlIiwidHJpbVNQb3JIVEFCIiwidG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0IiwiaGVhZGVycyIsImJ5dGVTdHJpbmdIZWFkZXJzIiwidG9KU09OIiwiaGVhZGVyIiwic2FuaXRpemVCeXRlU3RyaW5nSGVhZGVyVmFsdWUiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJzYW5pdGl6ZUhlYWRlclZhbHVlIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsIkF4aW9zSGVhZGVycyQxIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInBhcnNlSGVhZGVycyIsImRlc3QiLCJlbnRyeSIsInBhcnNlciIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImNsZWFyIiwiZm9ybWF0Iiwibm9ybWFsaXplZCIsInciLCJjaGFyIiwiZm9ybWF0SGVhZGVyIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsImVudHJpZXMiLCJnZXRTZXRDb29raWUiLCJmcm9tIiwiZmlyc3QiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiYnVpbGRBY2Nlc3NvcnMiLCJBeGlvc0hlYWRlcnMiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsInJlZGFjdENvbmZpZyIsImNvbmZpZyIsInJlZGFjdEtleXMiLCJsb3dlcktleXMiLCJTZXQiLCJrIiwic2VlbiIsInYiLCJoYXNPd25PclByb3RvdHlwZVRvSlNPTiIsInBvcCIsIkF4aW9zRXJyb3IiLCJlcnJvciIsInJlcXVlc3QiLCJyZXNwb25zZSIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsIm1lc3NhZ2UiLCJjYXVzZSIsInN0YXR1cyIsInN1cGVyIiwiaXNBeGlvc0Vycm9yIiwicmVkYWN0Iiwic2VyaWFsaXplZENvbmZpZyIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhY2siLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRUNPTk5SRUZVU0VEIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIiwiRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRCIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJwYXRoIiwiZG90cyIsInByZWRpY2F0ZXMiLCJ0b0Zvcm1EYXRhIiwib3B0aW9ucyIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwiX0Jsb2IiLCJCbG9iIiwibWF4RGVwdGgiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJCdWZmZXIiLCJKU09OIiwic3RyaW5naWZ5Iiwic29tZSIsImlzRmxhdEFycmF5IiwiZWwiLCJpbmRleCIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJkZXB0aCIsImVuY29kZSIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsIl9wYWlycyIsImJ1aWxkVVJMIiwidXJsIiwiX2VuY29kZSIsIl9vcHRpb25zIiwic2VyaWFsaXplIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsImVuY29kZXIiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJoYW5kbGVycyIsInVzZSIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic3luY2hyb25vdXMiLCJydW5XaGVuIiwiZWplY3QiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsImxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmciLCJhZHZlcnRpc2Vac3RkQWNjZXB0RW5jb2RpbmciLCJwbGF0Zm9ybSQxIiwiaXNCcm93c2VyIiwiY2xhc3NlcyIsIlVSTFNlYXJjaFBhcmFtcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJkb2N1bWVudCIsIl9uYXZpZ2F0b3IiLCJuYXZpZ2F0b3IiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJocmVmIiwicGxhdGZvcm0iLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImFycmF5VG9PYmplY3QiLCJwYXJzZVByb3BQYXRoIiwib3duIiwiZGVmYXVsdHMiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImNvbnRlbnRUeXBlIiwiZ2V0Q29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImZvcm1TZXJpYWxpemVyIiwiaGVscGVycyIsImlzTm9kZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJlbnYiLCJfRm9ybURhdGEiLCJyYXdWYWx1ZSIsInBhcnNlIiwic3RyaW5naWZ5U2FmZWx5IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJKU09OUmVxdWVzdGVkIiwic3RyaWN0SlNPTlBhcnNpbmciLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJBY2NlcHQiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwibWV0aG9kIiwic2V0dGxlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb2dyZXNzRXZlbnRSZWR1Y2VyIiwibGlzdGVuZXIiLCJpc0Rvd25sb2FkU3RyZWFtIiwiZnJlcSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJmaXJzdFNhbXBsZVRTIiwiaGVhZCIsInRhaWwiLCJjaHVua0xlbmd0aCIsIm5vdyIsIkRhdGUiLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwicm91bmQiLCJzcGVlZG9tZXRlciIsImxhc3RBcmdzIiwidGltZXIiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJpbnZva2UiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwidGhyb3R0bGUiLCJsb2FkZWQiLCJyYXdMb2FkZWQiLCJ0b3RhbCIsImxlbmd0aENvbXB1dGFibGUiLCJwcm9ncmVzc0J5dGVzIiwibWF4IiwicmF0ZSIsInByb2dyZXNzIiwiZXN0aW1hdGVkIiwiZXZlbnQiLCJwcm9ncmVzc0V2ZW50RGVjb3JhdG9yIiwidGhyb3R0bGVkIiwiYXN5bmNEZWNvcmF0b3IiLCJpc1VSTFNhbWVPcmlnaW4iLCJpc01TSUUiLCJVUkwiLCJwcm90b2NvbCIsImhvc3QiLCJwb3J0IiwidXNlckFnZW50IiwiY29va2llcyIsIndyaXRlIiwiZXhwaXJlcyIsImRvbWFpbiIsInNlY3VyZSIsInNhbWVTaXRlIiwiY29va2llIiwidG9VVENTdHJpbmciLCJyZWFkIiwiZXEiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJidWlsZEZ1bGxQYXRoIiwiYmFzZVVSTCIsInJlcXVlc3RlZFVSTCIsImFsbG93QWJzb2x1dGVVcmxzIiwiaXNSZWxhdGl2ZVVybCIsInJlbGF0aXZlVVJMIiwiY29tYmluZVVSTHMiLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInBhcmFtc1NlcmlhbGl6ZXIiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsIndpdGhYU1JGVG9rZW4iLCJvblVwbG9hZFByb2dyZXNzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiZGVjb21wcmVzcyIsImJlZm9yZVJlZGlyZWN0IiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsImNhbmNlbFRva2VuIiwic29ja2V0UGF0aCIsImFsbG93ZWRTb2NrZXRQYXRocyIsInJlc3BvbnNlRW5jb2RpbmciLCJjb25maWdWYWx1ZSIsIkZPUk1fREFUQV9DT05URU5UX0hFQURFUlMiLCJyZXNvbHZlQ29uZmlnIiwibmV3Q29uZmlnIiwiYXV0aCIsImJ0b2EiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiXyIsImhleCIsImZyb21DaGFyQ29kZSIsInBhcnNlSW50IiwiZ2V0SGVhZGVycyIsImZvcm1IZWFkZXJzIiwicG9saWN5Iiwic2V0Rm9ybURhdGFIZWFkZXJzIiwieHNyZlZhbHVlIiwieGhyQWRhcHRlciIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsIl9jb25maWciLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwiZXJyIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJzdGFydHNXaXRoIiwib25hYm9ydCIsIm9uZXJyb3IiLCJtc2ciLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwic2V0UmVxdWVzdEhlYWRlciIsInVwbG9hZCIsImNhbmNlbCIsIkNhbmNlbGVkRXJyb3IiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJwYXJzZVByb3RvY29sIiwic2VuZCIsImNvbXBvc2VTaWduYWxzIiwic2lnbmFscyIsIkJvb2xlYW4iLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwicmVhc29uIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsImJ5dGVMZW5ndGgiLCJwb3MiLCJyZWFkU3RyZWFtIiwiYXN5bmMiLCJzdHJlYW0iLCJhc3luY0l0ZXJhdG9yIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwidHJhY2tTdHJlYW0iLCJvblByb2dyZXNzIiwib25GaW5pc2giLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsIl9vbkZpbmlzaCIsIlJlYWRhYmxlU3RyZWFtIiwicHVsbCIsImNsb3NlIiwibG9hZGVkQnl0ZXMiLCJlbnF1ZXVlIiwicmV0dXJuIiwiaGlnaFdhdGVyTWFyayIsIlZFUlNJT04iLCJkZWNvZGVVUklDb21wb25lbnRTYWZlIiwiZmFjdG9yeSIsImdsb2JhbE9iamVjdCIsIlRleHRFbmNvZGVyIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiZmV0Y2giLCJlbnZGZXRjaCIsImlzRmV0Y2hTdXBwb3J0ZWQiLCJpc1JlcXVlc3RTdXBwb3J0ZWQiLCJpc1Jlc3BvbnNlU3VwcG9ydGVkIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJhcnJheUJ1ZmZlciIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiYm9keSIsImR1cGxleCIsImhhc0NvbnRlbnRUeXBlIiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsInJlcyIsInJlc29sdmVCb2R5TGVuZ3RoIiwiZ2V0Q29udGVudExlbmd0aCIsInNpemUiLCJfcmVxdWVzdCIsImdldEJvZHlMZW5ndGgiLCJmZXRjaE9wdGlvbnMiLCJoYXNNYXhDb250ZW50TGVuZ3RoIiwiaGFzTWF4Qm9keUxlbmd0aCIsIl9mZXRjaCIsImNvbXBvc2VkU2lnbmFsIiwidG9BYm9ydFNpZ25hbCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29uZmlnQXV0aCIsInByb3RvY29sSW5kZXgiLCJ1cmxUb0NoZWNrIiwibWF5YmVXaXRoQXV0aENyZWRlbnRpYWxzIiwicGFyc2VkVVJMIiwidXJsVXNlcm5hbWUiLCJjb21tYSIsIm1ldGEiLCJlZmZlY3RpdmVMZW4iLCJwYWQiLCJpZHgiLCJ0YWlsSXNQY3QzRCIsImZsb29yIiwiYyIsImVzdGltYXRlRGF0YVVSTERlY29kZWRCeXRlcyIsIm91dGJvdW5kTGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJmbHVzaCIsImlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQiLCJyZXNvbHZlZE9wdGlvbnMiLCJjcmVkZW50aWFscyIsImRlY2xhcmVkTGVuZ3RoIiwiaXNTdHJlYW1SZXNwb25zZSIsInJlc3BvbnNlQ29udGVudExlbmd0aCIsImJ5dGVzUmVhZCIsIm9uQ2h1bmtQcm9ncmVzcyIsInJlc3BvbnNlRGF0YSIsIm1hdGVyaWFsaXplZFNpemUiLCJjYW5jZWxlZEVycm9yIiwic2VlZENhY2hlIiwiTWFwIiwiZ2V0RmV0Y2giLCJzZWVkcyIsInNlZWQiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsImZldGNoQWRhcHRlci5nZXRGZXRjaCIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJhZGFwdGVycyIsImdldEFkYXB0ZXIiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwicyIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwiZGlzcGF0Y2hSZXF1ZXN0IiwidmFsaWRhdG9ycyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvciIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJjb25zb2xlIiwid2FybiIsInNwZWxsaW5nIiwiY29ycmVjdFNwZWxsaW5nIiwiYXNzZXJ0T3B0aW9ucyIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkF4aW9zJDEiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImZpcnN0TmV3bGluZUluZGV4Iiwic2Vjb25kTmV3bGluZUluZGV4Iiwic3RhY2tXaXRob3V0VHdvVG9wTGluZXMiLCJib29sZWFuIiwiZnVuY3Rpb24iLCJiYXNlVXJsIiwid2l0aFhzcmZUb2tlbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJBeGlvcyIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJXZWJTZXJ2ZXJJc0Rvd24iLCJDb25uZWN0aW9uVGltZWRPdXQiLCJPcmlnaW5Jc1VucmVhY2hhYmxlIiwiVGltZW91dE9jY3VycmVkIiwiU3NsSGFuZHNoYWtlRmFpbGVkIiwiSW52YWxpZFNzbENlcnRpZmljYXRlIiwiYXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsIkNhbmNlbFRva2VuIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZGVmYXVsdCIsInByZWZpeCIsInAiLCJnZXRKc29uIiwiZW5jb2RlVVJJIiwic2VhcmNoIiwiZ2V0R2VvY29kaW5nUmVzdWx0cyIsInNlYXJjaFBhcmFtcyIsImxhbmciLCJmb2N1c1BvaW50Iiwic291cmNlcyIsInBlbGlhc1VybCIsIm1pbmltYWxSZWdleHAiLCJnZW9jb2RpbmdMYXllcnMiLCJ0ZXh0IiwiUEVMSUFTX1VSTCIsIl9vYmplY3RTcHJlYWQiLCJsYXllcnMiLCJmZWF0dXJlcyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJzdG9wT3JTdGF0aW9uIiwiaWRzIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZmlsdGVyT2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJzdG9wTGF5ZXJzIiwiZGVib3VuY2VkU2VhcmNoIiwiZGVib3VuY2UiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwicGF0aE9wdHMiLCJyZWZQb2ludCIsImdldFBvc2l0aW9ucyIsImdldEZhdm91cml0ZUxvY2F0aW9ucyIsImdldE9sZFNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiaXNQZWxpYXNMb2NhdGlvbkF3YXJlIiwibG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsIm1vZGUiLCJnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5Iiwic2VsZWN0UG9zaXRpb25Gb21NYXAiLCJpdGVtcyIsImZhdm91cml0ZUxvY2F0aW9ucyIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImZhdm91cml0ZVN0b3BzIiwiaGFzRmF2b3VyaXRlcyIsInNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJmYXZvdXJpdGVzIiwiZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zIiwibG9jYXRpb25IaXN0b3J5IiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsImZpbHRlckZhdm91cml0ZVN0b3BzIiwiZGVkdXBlc3RvcHMiLCJmZWVkcyIsInN0b3BIaXN0b3J5IiwiZmF2b3VyaXRlUm91dGVzIiwicm91dGVIaXN0b3J5IiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24iLCJmbGF0dGVuIiwibGVhZGluZyIsImkxOG4iLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlIiwidHJhbnNsYXRpb24iLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjdXJyZW50cG9zaXRpb24iLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsImxvYWRpbmciLCJvd25sb2NhdGlvbnMiLCJwbGFjZSIsInJhaWwiLCJzdGF0aW9uIiwic3RyZWV0Iiwic3Vid2F5IiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInBsIiwic3YiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsImluaXQiLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJpc1BPSVNlYXJjaCIsImdldFBsYXRmb3JtIiwibG5nIiwiR1RGUyIsIm1vZGVzIiwiZ2V0U3VnZ2VzdGlvbkNvbnRlbnQiLCJzdWdnZXN0aW9uVHlwZSIsInRhaWwxIiwibG9jYWxpdHkiLCJ0YWlsMiIsIm5hbWUxIiwibmFtZTIiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUiLCJ0aW1lIiwiRGF0ZVRpbWUiLCJmcm9tU2Vjb25kcyIsImFycml2ZUJ5IiwiaGFzU2FtZSIsInBsdXMiLCJkYXlzIiwidG9Gb3JtYXQiLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJnZXRMYWJlbCIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50Iiwic3VnZ2VzdGlvbnMiLCJmaXJzdFN1Z2dlc3Rpb24iLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSQkMCIsIm4iLCJnIiwiaWdub3JlIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwib2Zmc2V0IiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiY2hhckF0Iiwic3Vic3RyIiwidSIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsInNjcm9sbEhlaWdodCIsImRvY3VtZW50RWxlbWVudCIsIm9mZnNldEhlaWdodCIsImNsaWVudEhlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvdXRsaW5lIiwic2Nyb2xsVG8iLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkZXRhaWwiLCJhbmNob3IiLCJ0b2dnbGUiLCJkaXNwYXRjaEV2ZW50IiwiZiIsImQiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJ0YWdOYW1lIiwieSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsIkUiLCJPIiwib2Zmc2V0UGFyZW50IiwiaW5uZXJIZWlnaHQiLCJTIiwiSSIsIk0iLCJMIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwidGl0bGUiLCJtYXRjaE1lZGlhIiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJjbG9zZXN0IiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsImhhc2giLCJyZXBsYWNlU3RhdGUiLCJkZXN0cm95IiwiRWxlbWVudCIsIl9fY3JlYXRlQmluZGluZyIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJ1c2VFbGVtZW50U2l6ZSIsInVzZVJlZiIsIndpZHRoIiwiY2xpZW50V2lkdGgiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwidXNlSXNCcmVha3BvaW50IiwieHMiLCJtb2JpbGVTbWFsbCIsIm1vYmlsZSIsInRhYmxldCIsInRhYmxldExhcmdlIiwiZGVza3RvcFNtYWxsIiwiZGVza3RvcCIsImRlc2t0b3BMYXJnZSIsImlubmVyV2lkdGgiLCJ1c2VPblJlc2l6ZSIsInVzZUlzTG9hZGluZ0FmdGVyRXJyb3IiLCJ1c2VJc01vYmlsZSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VPbkxvc2VGb2N1c1dpdGhpbiIsIndhdGNoIiwicGFzc2l2ZSIsInVzZU9uV2luZG93Rm9jdXMiLCJ2aXNpYmlsaXR5U3RhdGUiLCJ1c2VPdXRzaWRlUmVhY3RlciIsImNvbnRhaW5zIiwidXNlUnVuQWZ0ZXJVcGRhdGUiLCJ1c2VTY3JvbGxMb2NrIiwibG9jayIsInNjcm9sbFkiLCJ0b3AiLCJ1bmxvY2siLCJfX2ltcG9ydERlZmF1bHQiLCJfX2VzTW9kdWxlIiwidXNlU21vb3RoU2Nyb2xsIiwiRnVuY3Rpb24iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiU3VnZ2VzdGlvbiIsIm1lbW8iLCJfcmVmIiwiZ2V0SXRlbVByb3BzIiwiaGlnaGxpZ2h0ZWRJbmRleCIsIml0ZW1JbmRleCIsInN0eWxlcyIsInJlc3QiLCJfZXhjbHVkZWQiLCJ1c2VUcmFuc2xhdGlvbiIsIlJlYWN0IiwiY2xhc3NOYW1lIiwiY3giLCJzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQiLCJTdWdnZXN0aW9uSXRlbSIsIml0ZW1TaGFwZSIsIk5PREVfRU5WIiwiUHJvcFR5cGVzIiwic2hhcGUiLCJzdHJpbmciLCJzZWxlY3RlZEljb25JZCIsImljb25Db2xvciIsImNvbG9yIiwiYm9vbCIsInByb3BUeXBlcyIsImlzUmVxdWlyZWQiLCJmdW5jIiwib2JqZWN0T2YiLCJTdWdnZXN0aW9ucyIsIl9yZWYyIiwiZ2V0TWVudVByb3BzIiwiaGlkZGVuIiwicmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uIiwiaGFuZGxlQ2xlYXJIaXN0b3J5IiwiX2V4Y2x1ZGVkMiIsInN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbiIsInN1Z2dlc3Rpb25zQ29udGFpbmVyIiwic3VnZ2VzdGlvbnNMaXN0Iiwib25DbGljayIsImFycmF5T2YiLCJkZWZhdWx0UHJvcHMiLCJDbGVhckJ1dHRvbiIsImNsZWFySW5wdXQiLCJvbktleURvd24iLCJJY29uIiwiaW1nIiwicGxhY2Vob2xkZXIiLCJnZXRJbnB1dFByb3BzIiwiZ2V0TGFiZWxQcm9wcyIsImFyaWFMYWJlbCIsImlucHV0UmVmIiwicmVuZGVyTGFiZWwiLCJpc01vYmlsZSIsImlucHV0Q2xhc3NOYW1lIiwiY2xlYXJCdXR0b25Db2xvciIsImF1dG9Gb2N1cyIsImlucHV0T25CbHVyIiwib25WYWx1ZUNoYW5nZSIsImNvbnRhaW5lciIsImh0bWxGb3IiLCJ0aGluIiwiaGFzVmFsdWUiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uZU9mVHlwZSIsIm9iamVjdCIsIk1vYmlsZVZpZXciLCJhcHBFbGVtZW50Iiwib25TZWxlY3RlZEl0ZW1DaGFuZ2UiLCJmb250V2VpZ2h0cyIsImNsZWFyT2xkU2VhcmNoZXMiLCJzdWdnZXN0aW9uUHJvcHMiLCJhcmlhUHJvcHMiLCJtb2JpbGVMYWJlbCIsInNob3dTY3JvbGwiLCJkaXNwYXRjaCIsImNvbG9ycyIsImhvb2tzIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwiaXNEaWFsb2dPcGVuIiwic2V0RGlhbG9nT3BlbiIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50IiwicmVuZGVyTW9iaWxlIiwic2V0SGlnaGxpZ2h0ZWRJbmRleCIsInVzZUNvbWJvYm94IiwiaW5wdXRWYWx1ZSIsImlzT3BlbiIsImNoYW5nZXMiLCJzZWxlY3RlZEl0ZW0iLCJkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCIsIm9uSW5wdXRWYWx1ZUNoYW5nZSIsInN0YXRlQ2hhbmdlVHlwZXMiLCJJbnB1dENoYW5nZSIsInN0YXRlUmVkdWNlciIsIm9sZFN0YXRlIiwiSW5wdXRLZXlEb3duRXNjYXBlIiwiSW5wdXRLZXlEb3duRW50ZXIiLCJlbnRlclBlbmRpbmciLCJJbnB1dEJsdXIiLCJpdGVtVG9TdHJpbmciLCJzdXBwcmVzc1JlZkVycm9yIiwiaGFuZGxlVmFsdWVDaGFuZ2UiLCJuZXdWYWx1ZSIsImFyaWFSZXF1aXJlZFRleHQiLCJTZWFyY2hCYXJJZCIsImFyaWFDdXJyZW50U3VnZ2VzdGlvbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwicHJpbWFyeSIsImFjY2Vzc2libGVQcmltYXJ5IiwiaG92ZXIiLCJtZWRpdW0iLCJ0YWJJbmRleCIsIkRpYWxvZ01vZGFsIiwiaXNNb2RhbE9wZW4iLCJoYW5kbGVDbG9zZSIsImhlYWRlclRleHQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJzZWFyY2hSZWR1Y2VyIiwiYWN0aW9uIiwic2hvd093blBsYWNlcyIsInBlbmRpbmdTZWxlY3Rpb24iLCJpc0NsZWFyZWQiLCJpbml0aWFsU3RhdGUiLCJpc01lbnVPcGVuIiwicG9zaXRpb25zIiwiRFRBdXRvc3VnZ2VzdCIsIm9uU2VsZWN0IiwiaWNvbiIsIm9uQ2xlYXIiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwiaGFuZGxlVmlhUG9pbnRzIiwiZm9jdXNDaGFuZ2UiLCJzdG9yZVJlZiIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsIm1vZGVTZXQiLCJpc0VtYmVkZGVkIiwidXNlUmVkdWNlciIsImZldGNoU3VnZ2VzdGlvbnMiLCJpc0xvY2F0aW9uU2VhcmNoIiwibmV3VGFyZ2V0cyIsImdldE5ld1RhcmdldHMiLCJvd25QbGFjZXMiLCJ1c2VBbGwiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwibmV3U3VnZ2VzdGlvbnMiLCJ0cmFuc2xhdGVkU3VnZ2VzdGlvbiIsInNlbGVjdFN1Z2dlc3Rpb24iLCJibHVyIiwic2VsZWN0SXRlbSIsIm9wZW5NZW51IiwiY2xvc2VNZW51IiwiSXRlbUNsaWNrIiwiSW5wdXRDbGljayIsIm9uSXNPcGVuQ2hhbmdlIiwicGVuZGluZ0VudGVyIiwiYmFzZUl0ZW1Qcm9wcyIsInVzZU1lbW8iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiYXJpYUxhYmVsVGV4dCIsImdldEFyaWFQcm9wcyIsImFyaWFCYXJJZCIsImFyaWFMYWJlbEluc3RydWN0aW9ucyIsIm1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50Iiwic2VsZWN0aW9uIiwiRnJhZ21lbnQiLCJtb2JpbGVDbGVhck9sZFNlYXJjaGVzIiwiY2xlYXJGdXR1cmVSb3V0ZXMiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsImRlZmF1bHRDb2xvcnMiLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiJtMURBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDaEIsRUFBSSxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3BILEVBQUdELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBSSxJQUFXRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQ2xCLEdBQUksVUFBWVQsRUFBUVEsR0FBSSxPQUFPQSxFQUNuQyxNQUFNLElBQUlLLFVBQVUsK0NBQ3RCLENBQ0EsT0FBUSxXQUFhSixFQUFJSyxPQUFTQyxRQUFRUixFQUM1QyxDRFBVSSxDQUFZSixFQUFHLFVBQ3ZCLE1BQU8sVUFBWVAsRUFBUVEsR0FBS0EsRUFBSUEsRUFBSSxFQUMxQyxDRUpBLFNBQVNRLEVBQWdC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LEVBQUFBLFFBQVVDLE1BQU0sQ0FDeEJuckMsUUFBU2tyQyxFQUFBQSxRQUFVRSxPQUNuQjlRLElBQUs0USxFQUFBQSxRQUFVNTJCLE9BQ2ZpbUIsSUFBSzJRLEVBQUFBLFFBQVU1MkIsU0FFakJnNUIsZUFBZ0JwQyxFQUFBQSxRQUFVRSxPQUMxQmtELFlBQWFwRCxFQUFBQSxRQUFVQyxNQUFNLENBQzNCaUcsT0FBUWxHLEVBQUFBLFFBQVU1MkIsU0FFcEJ1NkIsT0FBUTNELEVBQUFBLFFBQVVVLFNBQVNWLEVBQUFBLFFBQVVFLFFBQ3JDc0gsb0JBQXFCeEgsRUFBQUEsUUFBVVUsU0FBU1YsRUFBQUEsUUFBVVMsTUFDbEQzTixTQUFVa04sRUFBQUEsUUFBVU0sS0FDcEJ1SCxRQUFTN0gsRUFBQUEsUUFBVUUsT0FDbkJ1RCxXQUFZekQsRUFBQUEsUUFBVU0sS0FDdEJ3SCxXQUFZOUgsRUFBQUEsUUFBVU0sT0FHeEI4RyxHQUFjN0YsYUFBZSxDQUMzQitGLFVBQU03eUMsRUFDTnJDLE1BQU8sR0FDUGk3QixtQkFBZTU0QixFQUNmODRCLG1CQUFlOTRCLEVBQ2Y4eUMsYUFBUzl5QyxFQUNUdzJCLEtBQU0sS0FDTjBjLGNBQVVsekMsRUFDVmd6QyxxQkFBaUJoekMsRUFDakJpekMsaUJBQWFqekMsRUFDYit5Qyx5QkFBcUIveUMsRUFDckIwMkIsUUFBUyxHQUNUMWtCLGFBQVNoUyxFQUNUMHRDLFVBQVUsRUFDVjJGLFlBQVksRUFDWnRhLG1CQUFlLzRCLEVBQ2ZnNUIsU0FBVSxDQUNSd2MsYUFBYyxTQUNkQyxZQUFhLFdBRWZsSSxlQUFXdnRDLEVBQ1grdUMsaUJBQWEvdUMsRUFDYjJ0QyxlQUFnQixHQUNoQndGLDJCQUF1Qm56QyxFQUN2QjJ1QyxZQUFhLENBQ1g4QyxPQUFRLEtBRVZ2QyxPQUFRd0csRUFBQUEsY0FDUnJYLFVBQVUsRUFDVitVLGFBQVNwekMsRUFDVGd2QyxZQUFZLEVBQ1ovVixTQUFVLENBQUEsYUFHR3Z0QixHQUVYcy9CLEVBQUFBLFFBQUE3TCxjQUFDd1csa0JBQWUsQ0FBQ2paLEtBQU1BLElBQ3JCc08sVUFBQTdMLGNBQUN3VCxHQUFrQmpuQyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2Niw3MCw3MSw3Ml19
|