@mirantes-micro/foundation-design-system 1.2.60 → 1.2.63

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.
@@ -0,0 +1,3 @@
1
+ 'use strict';var Q=require('react');require('react/jsx-runtime');var zt=require('axios');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Q__namespace=/*#__PURE__*/_interopNamespace(Q);var zt__default=/*#__PURE__*/_interopDefault(zt);var qt=Object.defineProperty,Dt=Object.defineProperties;var It=Object.getOwnPropertyDescriptors;var ve=Object.getOwnPropertySymbols;var Xe=Object.prototype.hasOwnProperty,Ye=Object.prototype.propertyIsEnumerable;var Ze=t=>{throw TypeError(t)};var Je=(t,e,s)=>e in t?qt(t,e,{enumerable:true,configurable:true,writable:true,value:s}):t[e]=s,x=(t,e)=>{for(var s in e||(e={}))Xe.call(e,s)&&Je(t,s,e[s]);if(ve)for(var s of ve(e))Ye.call(e,s)&&Je(t,s,e[s]);return t},P=(t,e)=>Dt(t,It(e));var et=(t,e)=>{var s={};for(var i in t)Xe.call(t,i)&&e.indexOf(i)<0&&(s[i]=t[i]);if(t!=null&&ve)for(var i of ve(t))e.indexOf(i)<0&&Ye.call(t,i)&&(s[i]=t[i]);return s};var Ae=(t,e,s)=>e.has(t)||Ze("Cannot "+s);var r=(t,e,s)=>(Ae(t,e,"read from private field"),s?s.call(t):e.get(t)),f=(t,e,s)=>e.has(t)?Ze("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,s),h=(t,e,s,i)=>(Ae(t,e,"write to private field"),e.set(t,s),s),p=(t,e,s)=>(Ae(t,e,"access private method"),s);var B=(t,e,s)=>new Promise((i,n)=>{var o=c=>{try{u(s.next(c));}catch(y){n(y);}},a=c=>{try{u(s.throw(c));}catch(y){n(y);}},u=c=>c.done?i(c.value):Promise.resolve(c.value).then(o,a);u((s=s.apply(t,e)).next());});var q=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this);}subscribe(t){return this.listeners.add(t),this.onSubscribe(),()=>{this.listeners.delete(t),this.onUnsubscribe();}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}};var F=typeof window=="undefined"||"Deno"in globalThis;function D(){}function Ue(t){return typeof t=="number"&&t>=0&&t!==1/0}function rt(t,e){return Math.max(t+(e||0)-Date.now(),0)}function oe(t,e){return typeof t=="function"?t(e):t}function E(t,e){return typeof t=="function"?t(e):t}function ge(t){return JSON.stringify(t,(e,s)=>Me(s)?Object.keys(s).sort().reduce((i,n)=>(i[n]=s[n],i),{}):s)}function be(t,e){if(t===e)return t;let s=tt(t)&&tt(e);if(s||Me(t)&&Me(e)){let i=s?t:Object.keys(t),n=i.length,o=s?e:Object.keys(e),a=o.length,u=s?[]:{},c=0;for(let y=0;y<a;y++){let v=s?y:o[y];(!s&&i.includes(v)||s)&&t[v]===void 0&&e[v]===void 0?(u[v]=void 0,c++):(u[v]=be(t[v],e[v]),u[v]===t[v]&&t[v]!==void 0&&c++);}return n===a&&c===n?t:u}return e}function W(t,e){if(!e||Object.keys(t).length!==Object.keys(e).length)return false;for(let s in t)if(t[s]!==e[s])return false;return true}function tt(t){return Array.isArray(t)&&t.length===Object.keys(t).length}function Me(t){if(!st(t))return false;let e=t.constructor;if(e===void 0)return true;let s=e.prototype;return !(!st(s)||!s.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(t)!==Object.prototype)}function st(t){return Object.prototype.toString.call(t)==="[object Object]"}function Qe(t,e,s){if(typeof s.structuralSharing=="function")return s.structuralSharing(t,e);if(s.structuralSharing!==false){if(process.env.NODE_ENV!=="production")try{return be(t,e)}catch(i){throw console.error(`Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${s.queryHash}]: ${i}`),i}return be(t,e)}return e}function ae(t,e){return typeof t=="function"?t(...e):!!t}var N,I,J,it,jt=(it=class extends q{constructor(){super();f(this,N);f(this,I);f(this,J);h(this,J,e=>{if(!F&&window.addEventListener){let s=()=>e();return window.addEventListener("visibilitychange",s,false),()=>{window.removeEventListener("visibilitychange",s);}}});}onSubscribe(){r(this,I)||this.setEventListener(r(this,J));}onUnsubscribe(){var e;this.hasListeners()||((e=r(this,I))==null||e.call(this),h(this,I,void 0));}setEventListener(e){var s;h(this,J,e),(s=r(this,I))==null||s.call(this),h(this,I,e(i=>{typeof i=="boolean"?this.setFocused(i):this.onFocus();}));}setFocused(e){r(this,N)!==e&&(h(this,N,e),this.onFocus());}onFocus(){let e=this.isFocused();this.listeners.forEach(s=>{s(e);});}isFocused(){var e;return typeof r(this,N)=="boolean"?r(this,N):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},N=new WeakMap,I=new WeakMap,J=new WeakMap,it),nt=new jt;var X,T,Y,ot,kt=(ot=class extends q{constructor(){super();f(this,X,true);f(this,T);f(this,Y);h(this,Y,e=>{if(!F&&window.addEventListener){let s=()=>e(true),i=()=>e(false);return window.addEventListener("online",s,false),window.addEventListener("offline",i,false),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",i);}}});}onSubscribe(){r(this,T)||this.setEventListener(r(this,Y));}onUnsubscribe(){var e;this.hasListeners()||((e=r(this,T))==null||e.call(this),h(this,T,void 0));}setEventListener(e){var s;h(this,Y,e),(s=r(this,T))==null||s.call(this),h(this,T,e(this.setOnline.bind(this)));}setOnline(e){r(this,X)!==e&&(h(this,X,e),this.listeners.forEach(i=>{i(e);}));}isOnline(){return r(this,X)}},X=new WeakMap,T=new WeakMap,Y=new WeakMap,ot),at=new kt;function Pe(){let t,e,s=new Promise((n,o)=>{t=n,e=o;});s.status="pending",s.catch(()=>{});function i(n){Object.assign(s,n),delete s.resolve,delete s.reject;}return s.resolve=n=>{i({status:"fulfilled",value:n}),t(n);},s.reject=n=>{i({status:"rejected",reason:n}),e(n);},s}function ut(t){return (t!=null?t:"online")==="online"?at.isOnline():true}var ht=t=>setTimeout(t,0);function Lt(){let t=[],e=0,s=u=>{u();},i=u=>{u();},n=ht,o=u=>{e?t.push(u):n(()=>{s(u);});},a=()=>{let u=t;t=[],u.length&&n(()=>{i(()=>{u.forEach(c=>{s(c);});});});};return {batch:u=>{let c;e++;try{c=u();}finally{e--,e||a();}return c},batchCalls:u=>(...c)=>{o(()=>{u(...c);});},schedule:o,setNotifyFunction:u=>{s=u;},setBatchNotifyFunction:u=>{i=u;},setScheduler:u=>{n=u;}}}var A=Lt();function ct(t,e){return x({fetchFailureCount:0,fetchFailureReason:null,fetchStatus:ut(e.networkMode)?"fetching":"paused"},t===void 0&&{error:null,status:"pending"})}function lt(){return {context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:false,status:"idle",variables:void 0,submittedAt:0}}var R,l,he,g,H,Z,j,k,ce,ee,te,G,z,L,se,d,ue,qe,De,Ie,Te,je,ke,Le,mt,pt,_e=(pt=class extends q{constructor(e,s){super();f(this,d);f(this,R);f(this,l);f(this,he);f(this,g);f(this,H);f(this,Z);f(this,j);f(this,k);f(this,ce);f(this,ee);f(this,te);f(this,G);f(this,z);f(this,L);f(this,se,new Set);this.options=s,h(this,R,e),h(this,k,null),h(this,j,Pe()),this.options.experimental_prefetchInRender||r(this,j).reject(new Error("experimental_prefetchInRender feature flag is not enabled")),this.bindMethods(),this.setOptions(s);}bindMethods(){this.refetch=this.refetch.bind(this);}onSubscribe(){this.listeners.size===1&&(r(this,l).addObserver(this),ft(r(this,l),this.options)?p(this,d,ue).call(this):this.updateResult(),p(this,d,Te).call(this));}onUnsubscribe(){this.hasListeners()||this.destroy();}shouldFetchOnReconnect(){return Ke(r(this,l),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Ke(r(this,l),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,p(this,d,je).call(this),p(this,d,ke).call(this),r(this,l).removeObserver(this);}setOptions(e){let s=this.options,i=r(this,l);if(this.options=r(this,R).defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof E(this.options.enabled,r(this,l))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");p(this,d,Le).call(this),r(this,l).setOptions(this.options),s._defaulted&&!W(this.options,s)&&r(this,R).getQueryCache().notify({type:"observerOptionsUpdated",query:r(this,l),observer:this});let n=this.hasListeners();n&&dt(r(this,l),i,this.options,s)&&p(this,d,ue).call(this),this.updateResult(),n&&(r(this,l)!==i||E(this.options.enabled,r(this,l))!==E(s.enabled,r(this,l))||oe(this.options.staleTime,r(this,l))!==oe(s.staleTime,r(this,l)))&&p(this,d,qe).call(this);let o=p(this,d,De).call(this);n&&(r(this,l)!==i||E(this.options.enabled,r(this,l))!==E(s.enabled,r(this,l))||o!==r(this,L))&&p(this,d,Ie).call(this,o);}getOptimisticResult(e){let s=r(this,R).getQueryCache().build(r(this,R),e),i=this.createResult(s,e);return _t(this,i)&&(h(this,g,i),h(this,Z,this.options),h(this,H,r(this,l).state)),i}getCurrentResult(){return r(this,g)}trackResult(e,s){return new Proxy(e,{get:(i,n)=>(this.trackProp(n),s==null||s(n),Reflect.get(i,n))})}trackProp(e){r(this,se).add(e);}getCurrentQuery(){return r(this,l)}refetch(s={}){var e=et(s,[]);return this.fetch(x({},e))}fetchOptimistic(e){let s=r(this,R).defaultQueryOptions(e),i=r(this,R).getQueryCache().build(r(this,R),s);return i.fetch().then(()=>this.createResult(i,s))}fetch(e){var s;return p(this,d,ue).call(this,P(x({},e),{cancelRefetch:(s=e.cancelRefetch)!=null?s:true})).then(()=>(this.updateResult(),r(this,g)))}createResult(e,s){var We;let i=r(this,l),n=this.options,o=r(this,g),a=r(this,H),u=r(this,Z),y=e!==i?e.state:r(this,he),{state:v}=e,m=x({},v),re=false,b;if(s._optimisticResults){let C=this.hasListeners(),me=!C&&ft(e,s),$=C&&dt(e,i,s,n);(me||$)&&(m=x(x({},m),ct(v.data,e.options))),s._optimisticResults==="isRestoring"&&(m.fetchStatus="idle");}let{error:ie,errorUpdatedAt:ne,status:w}=m;b=m.data;let pe=false;if(s.placeholderData!==void 0&&b===void 0&&w==="pending"){let C;o!=null&&o.isPlaceholderData&&s.placeholderData===(u==null?void 0:u.placeholderData)?(C=o.data,pe=true):C=typeof s.placeholderData=="function"?s.placeholderData((We=r(this,te))==null?void 0:We.state.data,r(this,te)):s.placeholderData,C!==void 0&&(w="success",b=Qe(o==null?void 0:o.data,C,s),re=true);}if(s.select&&b!==void 0&&!pe)if(o&&b===(a==null?void 0:a.data)&&s.select===r(this,ce))b=r(this,ee);else try{h(this,ce,s.select),b=s.select(b),b=Qe(o==null?void 0:o.data,b,s),h(this,ee,b),h(this,k,null);}catch(C){h(this,k,C);}r(this,k)&&(ie=r(this,k),b=r(this,ee),ne=Date.now(),w="error");let Ee=m.fetchStatus==="fetching",Oe=w==="pending",Fe=w==="error",ze=Oe&&Ee,$e=b!==void 0,O={status:w,fetchStatus:m.fetchStatus,isPending:Oe,isSuccess:w==="success",isError:Fe,isInitialLoading:ze,isLoading:ze,data:b,dataUpdatedAt:m.dataUpdatedAt,error:ie,errorUpdatedAt:ne,failureCount:m.fetchFailureCount,failureReason:m.fetchFailureReason,errorUpdateCount:m.errorUpdateCount,isFetched:m.dataUpdateCount>0||m.errorUpdateCount>0,isFetchedAfterMount:m.dataUpdateCount>y.dataUpdateCount||m.errorUpdateCount>y.errorUpdateCount,isFetching:Ee,isRefetching:Ee&&!Oe,isLoadingError:Fe&&!$e,isPaused:m.fetchStatus==="paused",isPlaceholderData:re,isRefetchError:Fe&&$e,isStale:Ve(e,s),refetch:this.refetch,promise:r(this,j)};if(this.options.experimental_prefetchInRender){let C=ye=>{O.status==="error"?ye.reject(O.error):O.data!==void 0&&ye.resolve(O.data);},me=()=>{let ye=h(this,j,O.promise=Pe());C(ye);},$=r(this,j);switch($.status){case "pending":e.queryHash===i.queryHash&&C($);break;case "fulfilled":(O.status==="error"||O.data!==$.value)&&me();break;case "rejected":(O.status!=="error"||O.error!==$.reason)&&me();break}}return O}updateResult(){let e=r(this,g),s=this.createResult(r(this,l),this.options);if(h(this,H,r(this,l).state),h(this,Z,this.options),r(this,H).data!==void 0&&h(this,te,r(this,l)),W(s,e))return;h(this,g,s);let i=()=>{if(!e)return true;let{notifyOnChangeProps:n}=this.options,o=typeof n=="function"?n():n;if(o==="all"||!o&&!r(this,se).size)return true;let a=new Set(o!=null?o:r(this,se));return this.options.throwOnError&&a.add("error"),Object.keys(r(this,g)).some(u=>{let c=u;return r(this,g)[c]!==e[c]&&a.has(c)})};p(this,d,mt).call(this,{listeners:i()});}onQueryUpdate(){this.updateResult(),this.hasListeners()&&p(this,d,Te).call(this);}},R=new WeakMap,l=new WeakMap,he=new WeakMap,g=new WeakMap,H=new WeakMap,Z=new WeakMap,j=new WeakMap,k=new WeakMap,ce=new WeakMap,ee=new WeakMap,te=new WeakMap,G=new WeakMap,z=new WeakMap,L=new WeakMap,se=new WeakMap,d=new WeakSet,ue=function(e){p(this,d,Le).call(this);let s=r(this,l).fetch(this.options,e);return e!=null&&e.throwOnError||(s=s.catch(D)),s},qe=function(){p(this,d,je).call(this);let e=oe(this.options.staleTime,r(this,l));if(F||r(this,g).isStale||!Ue(e))return;let i=rt(r(this,g).dataUpdatedAt,e)+1;h(this,G,setTimeout(()=>{r(this,g).isStale||this.updateResult();},i));},De=function(){var e;return (e=typeof this.options.refetchInterval=="function"?this.options.refetchInterval(r(this,l)):this.options.refetchInterval)!=null?e:false},Ie=function(e){p(this,d,ke).call(this),h(this,L,e),!(F||E(this.options.enabled,r(this,l))===false||!Ue(r(this,L))||r(this,L)===0)&&h(this,z,setInterval(()=>{(this.options.refetchIntervalInBackground||nt.isFocused())&&p(this,d,ue).call(this);},r(this,L)));},Te=function(){p(this,d,qe).call(this),p(this,d,Ie).call(this,p(this,d,De).call(this));},je=function(){r(this,G)&&(clearTimeout(r(this,G)),h(this,G,void 0));},ke=function(){r(this,z)&&(clearInterval(r(this,z)),h(this,z,void 0));},Le=function(){let e=r(this,R).getQueryCache().build(r(this,R),this.options);if(e===r(this,l))return;let s=r(this,l);h(this,l,e),h(this,he,e.state),this.hasListeners()&&(s==null||s.removeObserver(this),e.addObserver(this));},mt=function(e){A.batch(()=>{e.listeners&&this.listeners.forEach(s=>{s(r(this,g));}),r(this,R).getQueryCache().notify({query:r(this,l),type:"observerResultsUpdated"});});},pt);function Kt(t,e){return E(e.enabled,t)!==false&&t.state.data===void 0&&!(t.state.status==="error"&&e.retryOnMount===false)}function ft(t,e){return Kt(t,e)||t.state.data!==void 0&&Ke(t,e,e.refetchOnMount)}function Ke(t,e,s){if(E(e.enabled,t)!==false){let i=typeof s=="function"?s(t):s;return i==="always"||i!==false&&Ve(t,e)}return false}function dt(t,e,s,i){return (t!==e||E(i.enabled,t)===false)&&(!s.suspense||t.state.status!=="error")&&Ve(t,s)}function Ve(t,e){return E(e.enabled,t)!==false&&t.isStaleByTime(oe(e.staleTime,t))}function _t(t,e){return !W(t.getCurrentResult(),e)}var K,_,S,M,U,Re,Be,yt,Ne=(yt=class extends q{constructor(e,s){super();f(this,U);f(this,K);f(this,_);f(this,S);f(this,M);h(this,K,e),this.setOptions(s),this.bindMethods(),p(this,U,Re).call(this);}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this);}setOptions(e){var i;let s=this.options;this.options=r(this,K).defaultMutationOptions(e),W(this.options,s)||r(this,K).getMutationCache().notify({type:"observerOptionsUpdated",mutation:r(this,S),observer:this}),s!=null&&s.mutationKey&&this.options.mutationKey&&ge(s.mutationKey)!==ge(this.options.mutationKey)?this.reset():((i=r(this,S))==null?void 0:i.state.status)==="pending"&&r(this,S).setOptions(this.options);}onUnsubscribe(){var e;this.hasListeners()||(e=r(this,S))==null||e.removeObserver(this);}onMutationUpdate(e){p(this,U,Re).call(this),p(this,U,Be).call(this,e);}getCurrentResult(){return r(this,_)}reset(){var e;(e=r(this,S))==null||e.removeObserver(this),h(this,S,void 0),p(this,U,Re).call(this),p(this,U,Be).call(this);}mutate(e,s){var i;return h(this,M,s),(i=r(this,S))==null||i.removeObserver(this),h(this,S,r(this,K).getMutationCache().build(r(this,K),this.options)),r(this,S).addObserver(this),r(this,S).execute(e)}},K=new WeakMap,_=new WeakMap,S=new WeakMap,M=new WeakMap,U=new WeakSet,Re=function(){var s,i;let e=(i=(s=r(this,S))==null?void 0:s.state)!=null?i:lt();h(this,_,P(x({},e),{isPending:e.status==="pending",isSuccess:e.status==="success",isError:e.status==="error",isIdle:e.status==="idle",mutate:this.mutate,reset:this.reset}));},Be=function(e){A.batch(()=>{var s,i,n,o,a,u,c,y;if(r(this,M)&&this.hasListeners()){let v=r(this,_).variables,m=r(this,_).context;(e==null?void 0:e.type)==="success"?((i=(s=r(this,M)).onSuccess)==null||i.call(s,e.data,v,m),(o=(n=r(this,M)).onSettled)==null||o.call(n,e.data,null,v,m)):(e==null?void 0:e.type)==="error"&&((u=(a=r(this,M)).onError)==null||u.call(a,e.error,v,m),(y=(c=r(this,M)).onSettled)==null||y.call(c,void 0,e.error,v,m));}this.listeners.forEach(v=>{v(r(this,_));});});},yt);var Vt=Q__namespace.createContext(void 0),Se=t=>{let e=Q__namespace.useContext(Vt);if(!e)throw new Error("No QueryClient set, use QueryClientProvider to set one");return e};var vt=Q__namespace.createContext(false),bt=()=>Q__namespace.useContext(vt);vt.Provider;function Bt(){let t=false;return {clearReset:()=>{t=false;},reset:()=>{t=true;},isReset:()=>t}}var Nt=Q__namespace.createContext(Bt()),gt=()=>Q__namespace.useContext(Nt);var St=(t,e)=>{(t.suspense||t.throwOnError||t.experimental_prefetchInRender)&&(e.isReset()||(t.retryOnMount=false));},wt=t=>{Q__namespace.useEffect(()=>{t.clearReset();},[t]);},xt=({result:t,errorResetBoundary:e,throwOnError:s,query:i,suspense:n})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&(n&&t.data===void 0||ae(s,[t.error,i]));var Ct=t=>{let e=t.staleTime;t.suspense&&(t.staleTime=typeof e=="function"?(...s)=>Math.max(e(...s),1e3):Math.max(e!=null?e:1e3,1e3),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3)));},Et=(t,e)=>t.isLoading&&t.isFetching&&!e,Ot=(t,e)=>(t==null?void 0:t.suspense)&&e.isPending,He=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset();});function Ft(t,e,s){var m,re,b,ie,ne;if(process.env.NODE_ENV!=="production"&&(typeof t!="object"||Array.isArray(t)))throw new Error('Bad argument type. Starting with v5, only the "Object" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object');let i=Se(),n=bt(),o=gt(),a=i.defaultQueryOptions(t);(re=(m=i.getDefaultOptions().queries)==null?void 0:m._experimental_beforeQuery)==null||re.call(m,a),process.env.NODE_ENV!=="production"&&(a.queryFn||console.error(`[${a.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`)),a._optimisticResults=n?"isRestoring":"optimistic",Ct(a),St(a,o),wt(o);let u=!i.getQueryCache().get(a.queryHash),[c]=Q__namespace.useState(()=>new e(i,a)),y=c.getOptimisticResult(a),v=!n&&t.subscribed!==false;if(Q__namespace.useSyncExternalStore(Q__namespace.useCallback(w=>{let pe=v?c.subscribe(A.batchCalls(w)):D;return c.updateResult(),pe},[c,v]),()=>c.getCurrentResult(),()=>c.getCurrentResult()),Q__namespace.useEffect(()=>{c.setOptions(a);},[a,c]),Ot(a,y))throw He(a,c,o);if(xt({result:y,errorResetBoundary:o,throwOnError:a.throwOnError,query:i.getQueryCache().get(a.queryHash),suspense:a.suspense}))throw y.error;if((ie=(b=i.getDefaultOptions().queries)==null?void 0:b._experimental_afterQuery)==null||ie.call(b,a,y),a.experimental_prefetchInRender&&!F&&Et(y,n)){let w=u?He(a,c,o):(ne=i.getQueryCache().get(a.queryHash))==null?void 0:ne.promise;w==null||w.catch(D).finally(()=>{c.updateResult();});}return a.notifyOnChangeProps?y:c.trackResult(y)}function xe(t,e){return Ft(t,_e)}function Ce(t,e){let s=Se(),[i]=Q__namespace.useState(()=>new Ne(s,t));Q__namespace.useEffect(()=>{i.setOptions(t);},[i,t]);let n=Q__namespace.useSyncExternalStore(Q__namespace.useCallback(a=>i.subscribe(A.batchCalls(a)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),o=Q__namespace.useCallback((a,u)=>{i.mutate(a,u).catch(D);},[i]);if(n.error&&ae(i.options.throwOnError,[n.error]))throw n.error;return P(x({},n),{mutate:o,mutateAsync:n.mutate})}var At=Q.createContext({locale:"pt",user:{}});function Mt(){let t=Q.useContext(At);if(!t)throw new Error("useMirantesFoundation must be used within a MirantesFoundationProvider");return t}var de=()=>{let{user:t,assetsApiUrl:e}=Mt(),s=zt__default.default.create({baseURL:e!=null?e:""});return s.interceptors.request.use(i=>(t!=null&&t.accessToken&&(i.headers["x-access-token"]=t==null?void 0:t.accessToken),i)),{assetsApi:s}};function Ut(t,e){return B(this,null,function*(){let s=new FormData;s.append("file",e.file),s.append("owner_type",e.owner_type),s.append("is_public",String(e.is_public)),e.owner_id&&s.append("owner_id",e.owner_id);let{data:i}=yield t.post("/assets",s);return i})}function Qt(t,e){return B(this,null,function*(){let{data:s}=yield t.post("/assets/signed-url",e);return s})}function Ge(t,e){return B(this,null,function*(){if(!e)throw new Error("Missing assetId");let{data:s}=yield t.get(`/assets/${e}/versions`);return s})}function Pt(t){if(!t||!t.versions)return "medium";let e=t.versions,s=Object.entries(e).find(([i,n])=>n==null?void 0:n.recommended);if(s)return s[0];if(typeof window!="undefined"&&window.devicePixelRatio>=2&&e.large)return "large";if(typeof navigator!="undefined"){let i=navigator==null?void 0:navigator.connection,n=i==null?void 0:i.effectiveType;if(n&&["slow-2g","2g"].includes(n)&&e.small)return "small"}return "medium"}function $t(){let{assetsApi:t}=de(),{mutate:e,isPending:s}=Ce({mutationFn:i=>Ut(t,i)});return {uploadAssets:e,isUploadingAsset:s}}function Wt(){let{assetsApi:t}=de(),{mutate:e,isPending:s}=Ce({mutationFn:i=>Qt(t,i)});return {postSignedUrl:e,isPostingSignedUrl:s}}function Jt(t){let{assetsApi:e}=de(),{data:s,isLoading:i,error:n}=xe({queryKey:["asset-versions",t],queryFn:()=>Ge(e,t),enabled:!!t,staleTime:1e3*60*5});return {assetVersions:s,isGettingAssetVersions:i,error:n}}function Xt(t){let{assetsApi:e}=de(),{data:s,isLoading:i,error:n}=xe({queryKey:["asset-best-version",t],enabled:!!t,queryFn:()=>B(this,null,function*(){var u,c;let o=yield Ge(e,t);if(!(o!=null&&o.versions))return null;let a=Pt(o);return (c=(u=o.versions[a])==null?void 0:u.url)!=null?c:null}),staleTime:1e3*60*5});return {url:s,isGettingUrl:i,error:n}}
2
+ exports.useAssetVersions=Jt;exports.useBestAssetVersion=Xt;exports.useSignedUrl=Wt;exports.useUploadAsset=$t;//# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGFuc3RhY2srcXVlcnktY29yZUA1Ljc2LjAvbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL3NyYy9zdWJzY3JpYmFibGUudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHRhbnN0YWNrK3F1ZXJ5LWNvcmVANS43Ni4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9zcmMvdXRpbHMudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHRhbnN0YWNrK3F1ZXJ5LWNvcmVANS43Ni4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9zcmMvZm9jdXNNYW5hZ2VyLnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0YW5zdGFjaytxdWVyeS1jb3JlQDUuNzYuMC9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvc3JjL29ubGluZU1hbmFnZXIudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHRhbnN0YWNrK3F1ZXJ5LWNvcmVANS43Ni4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9zcmMvdGhlbmFibGUudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHRhbnN0YWNrK3F1ZXJ5LWNvcmVANS43Ni4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9zcmMvcmV0cnllci50cyIsIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGFuc3RhY2srcXVlcnktY29yZUA1Ljc2LjAvbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL3NyYy9ub3RpZnlNYW5hZ2VyLnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0YW5zdGFjaytxdWVyeS1jb3JlQDUuNzYuMC9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvc3JjL3F1ZXJ5LnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0YW5zdGFjaytxdWVyeS1jb3JlQDUuNzYuMC9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvc3JjL211dGF0aW9uLnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0YW5zdGFjaytxdWVyeS1jb3JlQDUuNzYuMC9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvc3JjL3F1ZXJ5T2JzZXJ2ZXIudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHRhbnN0YWNrK3F1ZXJ5LWNvcmVANS43Ni4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9zcmMvbXV0YXRpb25PYnNlcnZlci50cyIsIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGFuc3RhY2srcmVhY3QtcXVlcnlANS43Ni4xX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L3NyYy9RdWVyeUNsaWVudFByb3ZpZGVyLnRzeCIsIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGFuc3RhY2srcmVhY3QtcXVlcnlANS43Ni4xX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L3NyYy9Jc1Jlc3RvcmluZ1Byb3ZpZGVyLnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0YW5zdGFjaytyZWFjdC1xdWVyeUA1Ljc2LjFfcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvc3JjL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LnRzeCIsIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AdGFuc3RhY2srcmVhY3QtcXVlcnlANS43Ni4xX3JlYWN0QDE5LjEuMC9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L3NyYy9lcnJvckJvdW5kYXJ5VXRpbHMudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHRhbnN0YWNrK3JlYWN0LXF1ZXJ5QDUuNzYuMV9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9zcmMvc3VzcGVuc2UudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHRhbnN0YWNrK3JlYWN0LXF1ZXJ5QDUuNzYuMV9yZWFjdEAxOS4xLjAvbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9zcmMvdXNlQmFzZVF1ZXJ5LnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0YW5zdGFjaytyZWFjdC1xdWVyeUA1Ljc2LjFfcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvc3JjL3VzZVF1ZXJ5LnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B0YW5zdGFjaytyZWFjdC1xdWVyeUA1Ljc2LjFfcmVhY3RAMTkuMS4wL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvc3JjL3VzZU11dGF0aW9uLnRzIiwiLi4vLi4vc3JjL2NvbnRleHQvTWlyYW50ZXNGb3VuZGF0aW9uQ29udGV4dC50cyIsIi4uLy4uL3NyYy9jb250ZXh0L3VzZU1pcmFudGVzRm91bmRhdGlvbi50cyIsIi4uLy4uL3NyYy9taXJhbnRlcy11dGlscy91cGxvYWQvdXNlLWF4aW9zLnRzIiwiLi4vLi4vc3JjL21pcmFudGVzLXV0aWxzL3VwbG9hZC9hc3NldHMudHMiLCIuLi8uLi9zcmMvbWlyYW50ZXMtdXRpbHMvdXBsb2FkL3Jlc29sdmUtYXNzZXQtdmVyc2lvbi50cyIsIi4uLy4uL3NyYy9taXJhbnRlcy11dGlscy91cGxvYWQvdXNlLWFzc2V0cy50cyJdLCJuYW1lcyI6WyJTdWJzY3JpYmFibGUiLCJsaXN0ZW5lciIsImlzU2VydmVyIiwibm9vcCIsImlzVmFsaWRUaW1lb3V0IiwidmFsdWUiLCJ0aW1lVW50aWxTdGFsZSIsInVwZGF0ZWRBdCIsInN0YWxlVGltZSIsInJlc29sdmVTdGFsZVRpbWUiLCJxdWVyeSIsInJlc29sdmVFbmFibGVkIiwiZW5hYmxlZCIsImhhc2hLZXkiLCJxdWVyeUtleSIsIl8iLCJ2YWwiLCJpc1BsYWluT2JqZWN0IiwicmVzdWx0Iiwia2V5IiwicmVwbGFjZUVxdWFsRGVlcCIsImEiLCJiIiwiYXJyYXkiLCJpc1BsYWluQXJyYXkiLCJhSXRlbXMiLCJhU2l6ZSIsImJJdGVtcyIsImJTaXplIiwiY29weSIsImVxdWFsSXRlbXMiLCJpIiwic2hhbGxvd0VxdWFsT2JqZWN0cyIsIm8iLCJoYXNPYmplY3RQcm90b3R5cGUiLCJjdG9yIiwicHJvdCIsInJlcGxhY2VEYXRhIiwicHJldkRhdGEiLCJkYXRhIiwib3B0aW9ucyIsImVycm9yIiwic2hvdWxkVGhyb3dFcnJvciIsInRocm93T25FcnJvciIsInBhcmFtcyIsIkZvY3VzTWFuYWdlciIsIl9hIiwiX19wcml2YXRlQWRkIiwiX2ZvY3VzZWQiLCJfY2xlYW51cCIsIl9zZXR1cCIsIl9fcHJpdmF0ZVNldCIsIm9uRm9jdXMiLCJfX3ByaXZhdGVHZXQiLCJzZXR1cCIsImZvY3VzZWQiLCJpc0ZvY3VzZWQiLCJmb2N1c01hbmFnZXIiLCJPbmxpbmVNYW5hZ2VyIiwiX29ubGluZSIsIm9uT25saW5lIiwib25saW5lTGlzdGVuZXIiLCJvZmZsaW5lTGlzdGVuZXIiLCJvbmxpbmUiLCJvbmxpbmVNYW5hZ2VyIiwicGVuZGluZ1RoZW5hYmxlIiwicmVzb2x2ZSIsInJlamVjdCIsInRoZW5hYmxlIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwiZmluYWxpemUiLCJyZWFzb24iLCJjYW5GZXRjaCIsIm5ldHdvcmtNb2RlIiwiZGVmYXVsdFNjaGVkdWxlciIsImNiIiwiY3JlYXRlTm90aWZ5TWFuYWdlciIsInF1ZXVlIiwidHJhbnNhY3Rpb25zIiwibm90aWZ5Rm4iLCJjYWxsYmFjayIsImJhdGNoTm90aWZ5Rm4iLCJzY2hlZHVsZUZuIiwic2NoZWR1bGUiLCJmbHVzaCIsIm9yaWdpbmFsUXVldWUiLCJhcmdzIiwiZm4iLCJub3RpZnlNYW5hZ2VyIiwiZmV0Y2hTdGF0ZSIsIl9fc3ByZWFkVmFsdWVzIiwiZ2V0RGVmYXVsdFN0YXRlIiwiUXVlcnlPYnNlcnZlciIsIl9iIiwiY2xpZW50IiwiX1F1ZXJ5T2JzZXJ2ZXJfaW5zdGFuY2VzIiwiX2NsaWVudCIsIl9jdXJyZW50UXVlcnkiLCJfY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlIiwiX2N1cnJlbnRSZXN1bHQiLCJfY3VycmVudFJlc3VsdFN0YXRlIiwiX2N1cnJlbnRSZXN1bHRPcHRpb25zIiwiX2N1cnJlbnRUaGVuYWJsZSIsIl9zZWxlY3RFcnJvciIsIl9zZWxlY3RGbiIsIl9zZWxlY3RSZXN1bHQiLCJfbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhIiwiX3N0YWxlVGltZW91dElkIiwiX3JlZmV0Y2hJbnRlcnZhbElkIiwiX2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwiLCJfdHJhY2tlZFByb3BzIiwic2hvdWxkRmV0Y2hPbk1vdW50IiwiX19wcml2YXRlTWV0aG9kIiwiZXhlY3V0ZUZldGNoX2ZuIiwidXBkYXRlVGltZXJzX2ZuIiwic2hvdWxkRmV0Y2hPbiIsImNsZWFyU3RhbGVUaW1lb3V0X2ZuIiwiY2xlYXJSZWZldGNoSW50ZXJ2YWxfZm4iLCJwcmV2T3B0aW9ucyIsInByZXZRdWVyeSIsInVwZGF0ZVF1ZXJ5X2ZuIiwibW91bnRlZCIsInNob3VsZEZldGNoT3B0aW9uYWxseSIsInVwZGF0ZVN0YWxlVGltZW91dF9mbiIsIm5leHRSZWZldGNoSW50ZXJ2YWwiLCJjb21wdXRlUmVmZXRjaEludGVydmFsX2ZuIiwidXBkYXRlUmVmZXRjaEludGVydmFsX2ZuIiwic2hvdWxkQXNzaWduT2JzZXJ2ZXJDdXJyZW50UHJvcGVydGllcyIsIm9uUHJvcFRyYWNrZWQiLCJ0YXJnZXQiLCJfX29ialJlc3QiLCJkZWZhdWx0ZWRPcHRpb25zIiwiZmV0Y2hPcHRpb25zIiwiX19zcHJlYWRQcm9wcyIsInByZXZSZXN1bHQiLCJwcmV2UmVzdWx0U3RhdGUiLCJwcmV2UmVzdWx0T3B0aW9ucyIsInF1ZXJ5SW5pdGlhbFN0YXRlIiwic3RhdGUiLCJuZXdTdGF0ZSIsImlzUGxhY2Vob2xkZXJEYXRhIiwiZmV0Y2hPbk1vdW50IiwiZmV0Y2hPcHRpb25hbGx5IiwiZXJyb3JVcGRhdGVkQXQiLCJzdGF0dXMiLCJza2lwU2VsZWN0IiwicGxhY2Vob2xkZXJEYXRhIiwic2VsZWN0RXJyb3IiLCJpc0ZldGNoaW5nIiwiaXNQZW5kaW5nIiwiaXNFcnJvciIsImlzTG9hZGluZyIsImhhc0RhdGEiLCJuZXh0UmVzdWx0IiwiaXNTdGFsZSIsImZpbmFsaXplVGhlbmFibGVJZlBvc3NpYmxlIiwicmVjcmVhdGVUaGVuYWJsZSIsInBlbmRpbmciLCJwcmV2VGhlbmFibGUiLCJzaG91bGROb3RpZnlMaXN0ZW5lcnMiLCJub3RpZnlPbkNoYW5nZVByb3BzIiwibm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlIiwiaW5jbHVkZWRQcm9wcyIsInR5cGVkS2V5Iiwibm90aWZ5X2ZuIiwicHJvbWlzZSIsInRpbWVvdXQiLCJuZXh0SW50ZXJ2YWwiLCJub3RpZnlPcHRpb25zIiwic2hvdWxkTG9hZE9uTW91bnQiLCJmaWVsZCIsIm9ic2VydmVyIiwib3B0aW1pc3RpY1Jlc3VsdCIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJfTXV0YXRpb25PYnNlcnZlcl9pbnN0YW5jZXMiLCJfY3VycmVudE11dGF0aW9uIiwiX211dGF0ZU9wdGlvbnMiLCJ1cGRhdGVSZXN1bHRfZm4iLCJhY3Rpb24iLCJ2YXJpYWJsZXMiLCJjb250ZXh0IiwiX2QiLCJfYyIsIl9mIiwiX2UiLCJfaCIsIl9nIiwiUXVlcnlDbGllbnRDb250ZXh0IiwibGUiLCJ1c2VRdWVyeUNsaWVudCIsInF1ZXJ5Q2xpZW50IiwiSXNSZXN0b3JpbmdDb250ZXh0Iiwid2UiLCJ1c2VJc1Jlc3RvcmluZyIsImNyZWF0ZVZhbHVlIiwiaXNSZXNldCIsIlF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCIsImZlIiwidXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkiLCJlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5IiwiZXJyb3JSZXNldEJvdW5kYXJ5IiwidXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnkiLCJSdCIsImdldEhhc0Vycm9yIiwic3VzcGVuc2UiLCJlbnN1cmVTdXNwZW5zZVRpbWVycyIsIm9yaWdpbmFsU3RhbGVUaW1lIiwid2lsbEZldGNoIiwiaXNSZXN0b3JpbmciLCJzaG91bGRTdXNwZW5kIiwiZmV0Y2hPcHRpbWlzdGljIiwidXNlQmFzZVF1ZXJ5IiwiT2JzZXJ2ZXIiLCJpc05ld0NhY2hlRW50cnkiLCJWIiwic2hvdWxkU3Vic2NyaWJlIiwib25TdG9yZUNoYW5nZSIsInVuc3Vic2NyaWJlIiwidXNlUXVlcnkiLCJ1c2VNdXRhdGlvbiIsIlEiLCJtdXRhdGUiLCJtdXRhdGVPcHRpb25zIiwiTWlyYW50ZXNGb3VuZGF0aW9uQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VNaXJhbnRlc0ZvdW5kYXRpb24iLCJtaXJhbnRlc0NvbnRleHQiLCJ1c2VDb250ZXh0IiwidXNlQXhpb3NBcGkiLCJ1c2VyIiwiYXNzZXRzQXBpVXJsIiwiYXNzZXRzQXBpIiwiYXhpb3MiLCJjb25maWciLCJ1cGxvYWRBc3NldCIsImFwaSIsImlucHV0IiwiX19hc3luYyIsImZvcm0iLCJnZXRTaWduZWRVcmwiLCJnZXRBc3NldFZlcnNpb25zIiwiYXNzZXRJZCIsInJlc29sdmVCZXN0VmVyc2lvbiIsInZlcnNpb25zIiwicmVjb21tZW5kZWQiLCJ2IiwiY29ubmVjdGlvbiIsImVmZmVjdGl2ZVR5cGUiLCJ1c2VVcGxvYWRBc3NldCIsInVwbG9hZEFzc2V0cyIsImlzVXBsb2FkaW5nQXNzZXQiLCJ1c2VTaWduZWRVcmwiLCJwb3N0U2lnbmVkVXJsIiwiaXNQb3N0aW5nU2lnbmVkVXJsIiwidXNlQXNzZXRWZXJzaW9ucyIsImFzc2V0VmVyc2lvbnMiLCJpc0dldHRpbmdBc3NldFZlcnNpb25zIiwidXNlQmVzdEFzc2V0VmVyc2lvbiIsImJlc3RVcmwiLCJpc0dldHRpbmdVcmwiLCJiZXN0VmVyc2lvbiJdLCJtYXBwaW5ncyI6ImlqQkFBTyxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsZ0JBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEseUJBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEscUJBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsU0FBQSxDQUFBLGNBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxDQUFBLFNBQUEsQ0FBQSxvQkFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxJQUFBLENBQUEsSUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLElBQUEsSUFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLEVBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHlCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsbURBQUEsQ0FBQSxDQUFBLENBQUEsWUFBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsd0JBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLElBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxPQUFB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LENBQUFBLENBQU8sTUFBTTBNLEVBQUFBLENBQWlCVCxDQUFBQSxDQUFXVSxDQUFRLENBQUEsQ0FFdkQsR0FBSSxFQUFDM00sQ0FBQUEsRUFBQSxJQUFBLEVBQUFBLENBQUFBLENBQU0sUUFBQSxDQUFBLENBQVUsT0FBTyxJQUFBLENBRTVCLElBQU04TixDQUFBQSxDQUFjbEIsRUFBQUEsQ0FBbUI1TSxDQUFJLENBQUEsQ0FDM0MsT0FBQSxDQUFPdUQsQ0FBQUEsQ0FBQUEsQ0FBQWhELENBQUFBLENBQUFQLENBQUFBLENBQUssUUFBQSxDQUFTOE4sQ0FBVyxDQUFBLEdBQXpCLElBQUEsQ0FBQSxNQUFBLENBQUF2TixDQUFBQSxDQUE0QixHQUFBLEdBQTVCLEtBQUFnRCxDQUFBQSxDQUFtQyxJQUM1QyxDQUFBLENBQUEsQ0FDQSxTQUFBLENBQVcsR0FBQSxDQUFPLEVBQUEsQ0FBSyxDQUN6QixDQUFDLENBQUEsQ0FFRCxPQUFPLENBQ0wsR0FBQSxDQUFLcUssQ0FBQUEsQ0FDTCxZQUFBLENBQUFDLENBQUFBLENBQ0EsS0FBQSxDQUFBM04sQ0FDRixDQUNGIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN1YnNjcmliYWJsZTxUTGlzdGVuZXIgZXh0ZW5kcyBGdW5jdGlvbj4ge1xuICBwcm90ZWN0ZWQgbGlzdGVuZXJzID0gbmV3IFNldDxUTGlzdGVuZXI+KClcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN1YnNjcmliZSA9IHRoaXMuc3Vic2NyaWJlLmJpbmQodGhpcylcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogVExpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMuYWRkKGxpc3RlbmVyKVxuXG4gICAgdGhpcy5vblN1YnNjcmliZSgpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKVxuICAgICAgdGhpcy5vblVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cblxuICBoYXNMaXN0ZW5lcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLnNpemUgPiAwXG4gIH1cblxuICBwcm90ZWN0ZWQgb25TdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uVW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gIERlZmF1bHRFcnJvcixcbiAgRW5hYmxlZCxcbiAgRmV0Y2hTdGF0dXMsXG4gIE11dGF0aW9uS2V5LFxuICBNdXRhdGlvblN0YXR1cyxcbiAgUXVlcnlGdW5jdGlvbixcbiAgUXVlcnlLZXksXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgU3RhbGVUaW1lLFxufSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nXG5pbXBvcnQgdHlwZSB7IEZldGNoT3B0aW9ucywgUXVlcnkgfSBmcm9tICcuL3F1ZXJ5J1xuXG4vLyBUWVBFU1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5RmlsdGVyczxUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSA9IFF1ZXJ5S2V5PiB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgdG8gYWN0aXZlIHF1ZXJpZXMsIGluYWN0aXZlIHF1ZXJpZXMgb3IgYWxsIHF1ZXJpZXNcbiAgICovXG4gIHR5cGU/OiBRdWVyeVR5cGVGaWx0ZXJcbiAgLyoqXG4gICAqIE1hdGNoIHF1ZXJ5IGtleSBleGFjdGx5XG4gICAqL1xuICBleGFjdD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIEluY2x1ZGUgcXVlcmllcyBtYXRjaGluZyB0aGlzIHByZWRpY2F0ZSBmdW5jdGlvblxuICAgKi9cbiAgcHJlZGljYXRlPzogKHF1ZXJ5OiBRdWVyeSkgPT4gYm9vbGVhblxuICAvKipcbiAgICogSW5jbHVkZSBxdWVyaWVzIG1hdGNoaW5nIHRoaXMgcXVlcnkga2V5XG4gICAqL1xuICBxdWVyeUtleT86IFRRdWVyeUtleVxuICAvKipcbiAgICogSW5jbHVkZSBvciBleGNsdWRlIHN0YWxlIHF1ZXJpZXNcbiAgICovXG4gIHN0YWxlPzogYm9vbGVhblxuICAvKipcbiAgICogSW5jbHVkZSBxdWVyaWVzIG1hdGNoaW5nIHRoZWlyIGZldGNoU3RhdHVzXG4gICAqL1xuICBmZXRjaFN0YXR1cz86IEZldGNoU3RhdHVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXV0YXRpb25GaWx0ZXJzPFxuICBURGF0YSA9IHVua25vd24sXG4gIFRFcnJvciA9IERlZmF1bHRFcnJvcixcbiAgVFZhcmlhYmxlcyA9IHVua25vd24sXG4gIFRDb250ZXh0ID0gdW5rbm93bixcbj4ge1xuICAvKipcbiAgICogTWF0Y2ggbXV0YXRpb24ga2V5IGV4YWN0bHlcbiAgICovXG4gIGV4YWN0PzogYm9vbGVhblxuICAvKipcbiAgICogSW5jbHVkZSBtdXRhdGlvbnMgbWF0Y2hpbmcgdGhpcyBwcmVkaWNhdGUgZnVuY3Rpb25cbiAgICovXG4gIHByZWRpY2F0ZT86IChcbiAgICBtdXRhdGlvbjogTXV0YXRpb248VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+LFxuICApID0+IGJvb2xlYW5cbiAgLyoqXG4gICAqIEluY2x1ZGUgbXV0YXRpb25zIG1hdGNoaW5nIHRoaXMgbXV0YXRpb24ga2V5XG4gICAqL1xuICBtdXRhdGlvbktleT86IE11dGF0aW9uS2V5XG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbXV0YXRpb24gc3RhdHVzXG4gICAqL1xuICBzdGF0dXM/OiBNdXRhdGlvblN0YXR1c1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVyPFRJbnB1dCwgVE91dHB1dD4gPSBUT3V0cHV0IHwgKChpbnB1dDogVElucHV0KSA9PiBUT3V0cHV0KVxuXG5leHBvcnQgdHlwZSBRdWVyeVR5cGVGaWx0ZXIgPSAnYWxsJyB8ICdhY3RpdmUnIHwgJ2luYWN0aXZlJ1xuXG4vLyBVVElMU1xuXG5leHBvcnQgY29uc3QgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAnRGVubycgaW4gZ2xvYmFsVGhpc1xuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB1bmRlZmluZWRcbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge31cblxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGU8VElucHV0LCBUT3V0cHV0PihcbiAgdXBkYXRlcjogVXBkYXRlcjxUSW5wdXQsIFRPdXRwdXQ+LFxuICBpbnB1dDogVElucHV0LFxuKTogVE91dHB1dCB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gKHVwZGF0ZXIgYXMgKF86IFRJbnB1dCkgPT4gVE91dHB1dCkoaW5wdXQpXG4gICAgOiB1cGRhdGVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bWJlciB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVW50aWxTdGFsZSh1cGRhdGVkQXQ6IG51bWJlciwgc3RhbGVUaW1lPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVN0YWxlVGltZTxcbiAgVFF1ZXJ5Rm5EYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBURGF0YSA9IFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSBRdWVyeUtleSxcbj4oXG4gIHN0YWxlVGltZTogdW5kZWZpbmVkIHwgU3RhbGVUaW1lPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcbiAgcXVlcnk6IFF1ZXJ5PFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5Pixcbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2Ygc3RhbGVUaW1lID09PSAnZnVuY3Rpb24nID8gc3RhbGVUaW1lKHF1ZXJ5KSA6IHN0YWxlVGltZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVuYWJsZWQ8XG4gIFRRdWVyeUZuRGF0YSA9IHVua25vd24sXG4gIFRFcnJvciA9IERlZmF1bHRFcnJvcixcbiAgVERhdGEgPSBUUXVlcnlGbkRhdGEsXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5ID0gUXVlcnlLZXksXG4+KFxuICBlbmFibGVkOiB1bmRlZmluZWQgfCBFbmFibGVkPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcbiAgcXVlcnk6IFF1ZXJ5PFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5Pixcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIGVuYWJsZWQgPT09ICdmdW5jdGlvbicgPyBlbmFibGVkKHF1ZXJ5KSA6IGVuYWJsZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVlcnkoXG4gIGZpbHRlcnM6IFF1ZXJ5RmlsdGVycyxcbiAgcXVlcnk6IFF1ZXJ5PGFueSwgYW55LCBhbnksIGFueT4sXG4pOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIHR5cGUgPSAnYWxsJyxcbiAgICBleGFjdCxcbiAgICBmZXRjaFN0YXR1cyxcbiAgICBwcmVkaWNhdGUsXG4gICAgcXVlcnlLZXksXG4gICAgc3RhbGUsXG4gIH0gPSBmaWx0ZXJzXG5cbiAgaWYgKHF1ZXJ5S2V5KSB7XG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAocXVlcnkucXVlcnlIYXNoICE9PSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIHF1ZXJ5Lm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSAhPT0gJ2FsbCcpIHtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHF1ZXJ5LmlzQWN0aXZlKClcbiAgICBpZiAodHlwZSA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdpbmFjdGl2ZScgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhbGUgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc1N0YWxlKCkgIT09IHN0YWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoZmV0Y2hTdGF0dXMgJiYgZmV0Y2hTdGF0dXMgIT09IHF1ZXJ5LnN0YXRlLmZldGNoU3RhdHVzKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hNdXRhdGlvbihcbiAgZmlsdGVyczogTXV0YXRpb25GaWx0ZXJzLFxuICBtdXRhdGlvbjogTXV0YXRpb248YW55LCBhbnk+LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgZXhhY3QsIHN0YXR1cywgcHJlZGljYXRlLCBtdXRhdGlvbktleSB9ID0gZmlsdGVyc1xuICBpZiAobXV0YXRpb25LZXkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoS2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSwgbXV0YXRpb25LZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdHVzICYmIG11dGF0aW9uLnN0YXRlLnN0YXR1cyAhPT0gc3RhdHVzKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zPFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5ID0gUXVlcnlLZXk+KFxuICBxdWVyeUtleTogVFF1ZXJ5S2V5LFxuICBvcHRpb25zPzogUGljazxRdWVyeU9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55PiwgJ3F1ZXJ5S2V5SGFzaEZuJz4sXG4pOiBzdHJpbmcge1xuICBjb25zdCBoYXNoRm4gPSBvcHRpb25zPy5xdWVyeUtleUhhc2hGbiB8fCBoYXNoS2V5XG4gIHJldHVybiBoYXNoRm4ocXVlcnlLZXkpXG59XG5cbi8qKlxuICogRGVmYXVsdCBxdWVyeSAmIG11dGF0aW9uIGtleXMgaGFzaCBmdW5jdGlvbi5cbiAqIEhhc2hlcyB0aGUgdmFsdWUgaW50byBhIHN0YWJsZSBoYXNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEtleShxdWVyeUtleTogUXVlcnlLZXkgfCBNdXRhdGlvbktleSk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShxdWVyeUtleSwgKF8sIHZhbCkgPT5cbiAgICBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgID8gT2JqZWN0LmtleXModmFsKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgIH0sIHt9IGFzIGFueSlcbiAgICAgIDogdmFsLFxuICApXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbE1hdGNoS2V5KGE6IFF1ZXJ5S2V5LCBiOiBRdWVyeUtleSk6IGJvb2xlYW5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGIpLmV2ZXJ5KChrZXkpID0+IHBhcnRpYWxNYXRjaEtleShhW2tleV0sIGJba2V5XSkpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYGFgIGlmIGBiYCBpcyBkZWVwbHkgZXF1YWwuXG4gKiBJZiBub3QsIGl0IHdpbGwgcmVwbGFjZSBhbnkgZGVlcGx5IGVxdWFsIGNoaWxkcmVuIG9mIGBiYCB3aXRoIHRob3NlIG9mIGBhYC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHN0cnVjdHVyYWwgc2hhcmluZyBiZXR3ZWVuIEpTT04gdmFsdWVzIGZvciBleGFtcGxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcDxUPihhOiB1bmtub3duLCBiOiBUKTogVFxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYTogYW55LCBiOiBhbnkpOiBhbnkge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhXG4gIH1cblxuICBjb25zdCBhcnJheSA9IGlzUGxhaW5BcnJheShhKSAmJiBpc1BsYWluQXJyYXkoYilcblxuICBpZiAoYXJyYXkgfHwgKGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkpIHtcbiAgICBjb25zdCBhSXRlbXMgPSBhcnJheSA/IGEgOiBPYmplY3Qua2V5cyhhKVxuICAgIGNvbnN0IGFTaXplID0gYUl0ZW1zLmxlbmd0aFxuICAgIGNvbnN0IGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpXG4gICAgY29uc3QgYlNpemUgPSBiSXRlbXMubGVuZ3RoXG4gICAgY29uc3QgY29weTogYW55ID0gYXJyYXkgPyBbXSA6IHt9XG5cbiAgICBsZXQgZXF1YWxJdGVtcyA9IDBcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldXG4gICAgICBpZiAoXG4gICAgICAgICgoIWFycmF5ICYmIGFJdGVtcy5pbmNsdWRlcyhrZXkpKSB8fCBhcnJheSkgJiZcbiAgICAgICAgYVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYltrZXldID09PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBjb3B5W2tleV0gPSB1bmRlZmluZWRcbiAgICAgICAgZXF1YWxJdGVtcysrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5W2tleV0gPSByZXBsYWNlRXF1YWxEZWVwKGFba2V5XSwgYltrZXldKVxuICAgICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0gJiYgYVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlcXVhbEl0ZW1zKytcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weVxuICB9XG5cbiAgcmV0dXJuIGJcbn1cblxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBhOiBULFxuICBiOiBUIHwgdW5kZWZpbmVkLFxuKTogYm9vbGVhbiB7XG4gIGlmICghYiB8fCBPYmplY3Qua2V5cyhhKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gYSkge1xuICAgIGlmIChhW2tleV0gIT09IGJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5BcnJheSh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoXG59XG5cbi8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG86IGFueSk6IG8gaXMgT2JqZWN0IHtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUobykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIElmIGhhcyBubyBjb25zdHJ1Y3RvclxuICBjb25zdCBjdG9yID0gby5jb25zdHJ1Y3RvclxuICBpZiAoY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcbiAgY29uc3QgcHJvdCA9IGN0b3IucHJvdG90eXBlXG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIEhhbmRsZXMgT2JqZWN0cyBjcmVhdGVkIGJ5IE9iamVjdC5jcmVhdGUoPGFyYml0cmFyeSBwcm90b3R5cGU+KVxuICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBoYXNPYmplY3RQcm90b3R5cGUobzogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGE8XG4gIFREYXRhLFxuICBUT3B0aW9ucyBleHRlbmRzIFF1ZXJ5T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnk+LFxuPihwcmV2RGF0YTogVERhdGEgfCB1bmRlZmluZWQsIGRhdGE6IFREYXRhLCBvcHRpb25zOiBUT3B0aW9ucyk6IFREYXRhIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcocHJldkRhdGEsIGRhdGEpIGFzIFREYXRhXG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBTdHJ1Y3R1cmFsIHNoYXJpbmcgcmVxdWlyZXMgZGF0YSB0byBiZSBKU09OIHNlcmlhbGl6YWJsZS4gVG8gZml4IHRoaXMsIHR1cm4gb2ZmIHN0cnVjdHVyYWxTaGFyaW5nIG9yIHJldHVybiBKU09OLXNlcmlhbGl6YWJsZSBkYXRhIGZyb20geW91ciBxdWVyeUZuLiBbJHtvcHRpb25zLnF1ZXJ5SGFzaH1dOiAke2Vycm9yfWAsXG4gICAgICAgIClcblxuICAgICAgICAvLyBQcmV2ZW50IHRoZSByZXBsYWNlRXF1YWxEZWVwIGZyb20gYmVpbmcgY2FsbGVkIGFnYWluIGRvd24gYmVsb3cuXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICAgIC8vIFN0cnVjdHVyYWxseSBzaGFyZSBkYXRhIGJldHdlZW4gcHJldiBhbmQgbmV3IGRhdGEgaWYgbmVlZGVkXG4gICAgcmV0dXJuIHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpXG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGtlZXBQcmV2aW91c0RhdGE8VD4oXG4gIHByZXZpb3VzRGF0YTogVCB8IHVuZGVmaW5lZCxcbik6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcHJldmlvdXNEYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0VuZDxUPihpdGVtczogQXJyYXk8VD4sIGl0ZW06IFQsIG1heCA9IDApOiBBcnJheTxUPiB7XG4gIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zLCBpdGVtXVxuICByZXR1cm4gbWF4ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IG1heCA/IG5ld0l0ZW1zLnNsaWNlKDEpIDogbmV3SXRlbXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvU3RhcnQ8VD4oaXRlbXM6IEFycmF5PFQ+LCBpdGVtOiBULCBtYXggPSAwKTogQXJyYXk8VD4ge1xuICBjb25zdCBuZXdJdGVtcyA9IFtpdGVtLCAuLi5pdGVtc11cbiAgcmV0dXJuIG1heCAmJiBuZXdJdGVtcy5sZW5ndGggPiBtYXggPyBuZXdJdGVtcy5zbGljZSgwLCAtMSkgOiBuZXdJdGVtc1xufVxuXG5leHBvcnQgY29uc3Qgc2tpcFRva2VuID0gU3ltYm9sKClcbmV4cG9ydCB0eXBlIFNraXBUb2tlbiA9IHR5cGVvZiBza2lwVG9rZW5cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVF1ZXJ5Rm48XG4gIFRRdWVyeUZuRGF0YSA9IHVua25vd24sXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5ID0gUXVlcnlLZXksXG4+KFxuICBvcHRpb25zOiB7XG4gICAgcXVlcnlGbj86IFF1ZXJ5RnVuY3Rpb248VFF1ZXJ5Rm5EYXRhLCBUUXVlcnlLZXk+IHwgU2tpcFRva2VuXG4gICAgcXVlcnlIYXNoPzogc3RyaW5nXG4gIH0sXG4gIGZldGNoT3B0aW9ucz86IEZldGNoT3B0aW9uczxUUXVlcnlGbkRhdGE+LFxuKTogUXVlcnlGdW5jdGlvbjxUUXVlcnlGbkRhdGEsIFRRdWVyeUtleT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChvcHRpb25zLnF1ZXJ5Rm4gPT09IHNraXBUb2tlbikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEF0dGVtcHRlZCB0byBpbnZva2UgcXVlcnlGbiB3aGVuIHNldCB0byBza2lwVG9rZW4uIFRoaXMgaXMgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBlcnJvci4gUXVlcnkgaGFzaDogJyR7b3B0aW9ucy5xdWVyeUhhc2h9J2AsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgd2UgYXR0ZW1wdCB0byByZXRyeSBhIGZldGNoIHRoYXQgd2FzIHRyaWdnZXJlZCBmcm9tIGFuIGluaXRpYWxQcm9taXNlXG4gIC8vIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIHF1ZXJ5Rm4geWV0LCB3ZSBjYW4ndCByZXRyeSwgc28gd2UganVzdCByZXR1cm4gdGhlIGFscmVhZHkgcmVqZWN0ZWQgaW5pdGlhbFByb21pc2VcbiAgLy8gaWYgYW4gb2JzZXJ2ZXIgaGFzIGFscmVhZHkgbW91bnRlZCwgd2Ugd2lsbCBiZSBhYmxlIHRvIHJldHJ5IHdpdGggdGhhdCBxdWVyeUZuXG4gIGlmICghb3B0aW9ucy5xdWVyeUZuICYmIGZldGNoT3B0aW9ucz8uaW5pdGlhbFByb21pc2UpIHtcbiAgICByZXR1cm4gKCkgPT4gZmV0Y2hPcHRpb25zLmluaXRpYWxQcm9taXNlIVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnF1ZXJ5Rm4gfHwgb3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICByZXR1cm4gKCkgPT5cbiAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgTWlzc2luZyBxdWVyeUZuOiAnJHtvcHRpb25zLnF1ZXJ5SGFzaH0nYCkpXG4gIH1cblxuICByZXR1cm4gb3B0aW9ucy5xdWVyeUZuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRUaHJvd0Vycm9yPFQgZXh0ZW5kcyAoLi4uYXJnczogQXJyYXk8YW55PikgPT4gYm9vbGVhbj4oXG4gIHRocm93T25FcnJvcjogYm9vbGVhbiB8IFQgfCB1bmRlZmluZWQsXG4gIHBhcmFtczogUGFyYW1ldGVyczxUPixcbik6IGJvb2xlYW4ge1xuICAvLyBBbGxvdyB0aHJvd09uRXJyb3IgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhyb3dpbmcgYmVoYXZpb3Igb24gYSBwZXItZXJyb3IgYmFzaXNcbiAgaWYgKHR5cGVvZiB0aHJvd09uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhyb3dPbkVycm9yKC4uLnBhcmFtcylcbiAgfVxuXG4gIHJldHVybiAhIXRocm93T25FcnJvclxufVxuIiwiaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnXG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnXG5cbnR5cGUgTGlzdGVuZXIgPSAoZm9jdXNlZDogYm9vbGVhbikgPT4gdm9pZFxuXG50eXBlIFNldHVwRm4gPSAoXG4gIHNldEZvY3VzZWQ6IChmb2N1c2VkPzogYm9vbGVhbikgPT4gdm9pZCxcbikgPT4gKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCBjbGFzcyBGb2N1c01hbmFnZXIgZXh0ZW5kcyBTdWJzY3JpYmFibGU8TGlzdGVuZXI+IHtcbiAgI2ZvY3VzZWQ/OiBib29sZWFuXG4gICNjbGVhbnVwPzogKCkgPT4gdm9pZFxuXG4gICNzZXR1cDogU2V0dXBGblxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLiNzZXR1cCA9IChvbkZvY3VzKSA9PiB7XG4gICAgICAvLyBhZGRFdmVudExpc3RlbmVyIGRvZXMgbm90IGV4aXN0IGluIFJlYWN0IE5hdGl2ZSwgYnV0IHdpbmRvdyBkb2VzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9ICgpID0+IG9uRm9jdXMoKVxuICAgICAgICAvLyBMaXN0ZW4gdG8gdmlzaWJpbGl0eWNoYW5nZVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyLCBmYWxzZSlcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNjbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy4jc2V0dXApXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLiNjbGVhbnVwPy4oKVxuICAgICAgdGhpcy4jY2xlYW51cCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIHNldEV2ZW50TGlzdGVuZXIoc2V0dXA6IFNldHVwRm4pOiB2b2lkIHtcbiAgICB0aGlzLiNzZXR1cCA9IHNldHVwXG4gICAgdGhpcy4jY2xlYW51cD8uKClcbiAgICB0aGlzLiNjbGVhbnVwID0gc2V0dXAoKGZvY3VzZWQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNlZChmb2N1c2VkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc2V0Rm9jdXNlZChmb2N1c2VkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLiNmb2N1c2VkICE9PSBmb2N1c2VkXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuI2ZvY3VzZWQgPSBmb2N1c2VkXG4gICAgICB0aGlzLm9uRm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgaXNGb2N1c2VkID0gdGhpcy5pc0ZvY3VzZWQoKVxuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICBsaXN0ZW5lcihpc0ZvY3VzZWQpXG4gICAgfSlcbiAgfVxuXG4gIGlzRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuI2ZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuI2ZvY3VzZWRcbiAgICB9XG5cbiAgICAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuZG9jdW1lbnQ/LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbidcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpXG4iLCJpbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSdcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscydcblxudHlwZSBMaXN0ZW5lciA9IChvbmxpbmU6IGJvb2xlYW4pID0+IHZvaWRcbnR5cGUgU2V0dXBGbiA9IChzZXRPbmxpbmU6IExpc3RlbmVyKSA9PiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWRcblxuZXhwb3J0IGNsYXNzIE9ubGluZU1hbmFnZXIgZXh0ZW5kcyBTdWJzY3JpYmFibGU8TGlzdGVuZXI+IHtcbiAgI29ubGluZSA9IHRydWVcbiAgI2NsZWFudXA/OiAoKSA9PiB2b2lkXG5cbiAgI3NldHVwOiBTZXR1cEZuXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuI3NldHVwID0gKG9uT25saW5lKSA9PiB7XG4gICAgICAvLyBhZGRFdmVudExpc3RlbmVyIGRvZXMgbm90IGV4aXN0IGluIFJlYWN0IE5hdGl2ZSwgYnV0IHdpbmRvdyBkb2VzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBvbmxpbmVMaXN0ZW5lciA9ICgpID0+IG9uT25saW5lKHRydWUpXG4gICAgICAgIGNvbnN0IG9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IG9uT25saW5lKGZhbHNlKVxuICAgICAgICAvLyBMaXN0ZW4gdG8gb25saW5lXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBvbmxpbmVMaXN0ZW5lciwgZmFsc2UpXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgb2ZmbGluZUxpc3RlbmVyLCBmYWxzZSlcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgb25saW5lTGlzdGVuZXIpXG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBvZmZsaW5lTGlzdGVuZXIpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3Vic2NyaWJlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuI3NldHVwKVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jY2xlYW51cD8uKClcbiAgICAgIHRoaXMuI2NsZWFudXAgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBzZXRFdmVudExpc3RlbmVyKHNldHVwOiBTZXR1cEZuKTogdm9pZCB7XG4gICAgdGhpcy4jc2V0dXAgPSBzZXR1cFxuICAgIHRoaXMuI2NsZWFudXA/LigpXG4gICAgdGhpcy4jY2xlYW51cCA9IHNldHVwKHRoaXMuc2V0T25saW5lLmJpbmQodGhpcykpXG4gIH1cblxuICBzZXRPbmxpbmUob25saW5lOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI29ubGluZSAhPT0gb25saW5lXG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy4jb25saW5lID0gb25saW5lXG4gICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICBsaXN0ZW5lcihvbmxpbmUpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlzT25saW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNvbmxpbmVcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKClcbiIsIi8qKlxuICogVGhlbmFibGUgdHlwZXMgd2hpY2ggbWF0Y2hlcyBSZWFjdCdzIHR5cGVzIGZvciBwcm9taXNlc1xuICpcbiAqIFJlYWN0IHNlZW1pbmdseSB1c2VzIGAuc3RhdHVzYCwgYC52YWx1ZWAgYW5kIGAucmVhc29uYCBwcm9wZXJ0aWVzIG9uIGEgcHJvbWlzZXMgdG8gb3B0aW1pc3RpY2FsbHkgdW53cmFwIGRhdGEgZnJvbSBwcm9taXNlc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9zaGFyZWQvUmVhY3RUeXBlcy5qcyNMMTEyLUwxMzhcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvNGY2MDQ5NDE1NjlkMmU4OTQ3Y2UxNDYwYTBiMjk5N2U4MzVmMzdiOS9wYWNrYWdlcy9yZWFjdC1kZWJ1Zy10b29scy9zcmMvUmVhY3REZWJ1Z0hvb2tzLmpzI0wyMjQtTDIyN1xuICovXG5cbmludGVyZmFjZSBGdWxmaWxsZWQ8VD4ge1xuICBzdGF0dXM6ICdmdWxmaWxsZWQnXG4gIHZhbHVlOiBUXG59XG5pbnRlcmZhY2UgUmVqZWN0ZWQge1xuICBzdGF0dXM6ICdyZWplY3RlZCdcbiAgcmVhc29uOiB1bmtub3duXG59XG5pbnRlcmZhY2UgUGVuZGluZzxUPiB7XG4gIHN0YXR1czogJ3BlbmRpbmcnXG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCBhIHZhbHVlLlxuICAgKiBXaWxsIHJlbW92ZSB0aGUgYHJlc29sdmVgIGFuZCBgcmVqZWN0YCBwcm9wZXJ0aWVzIGZyb20gdGhlIHByb21pc2UuXG4gICAqL1xuICByZXNvbHZlOiAodmFsdWU6IFQpID0+IHZvaWRcbiAgLyoqXG4gICAqIFJlamVjdCB0aGUgcHJvbWlzZSB3aXRoIGEgcmVhc29uLlxuICAgKiBXaWxsIHJlbW92ZSB0aGUgYHJlc29sdmVgIGFuZCBgcmVqZWN0YCBwcm9wZXJ0aWVzIGZyb20gdGhlIHByb21pc2UuXG4gICAqL1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgRnVsZmlsbGVkVGhlbmFibGU8VD4gPSBQcm9taXNlPFQ+ICYgRnVsZmlsbGVkPFQ+XG5leHBvcnQgdHlwZSBSZWplY3RlZFRoZW5hYmxlPFQ+ID0gUHJvbWlzZTxUPiAmIFJlamVjdGVkXG5leHBvcnQgdHlwZSBQZW5kaW5nVGhlbmFibGU8VD4gPSBQcm9taXNlPFQ+ICYgUGVuZGluZzxUPlxuXG5leHBvcnQgdHlwZSBUaGVuYWJsZTxUPiA9XG4gIHwgRnVsZmlsbGVkVGhlbmFibGU8VD5cbiAgfCBSZWplY3RlZFRoZW5hYmxlPFQ+XG4gIHwgUGVuZGluZ1RoZW5hYmxlPFQ+XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW5kaW5nVGhlbmFibGU8VD4oKTogUGVuZGluZ1RoZW5hYmxlPFQ+IHtcbiAgbGV0IHJlc29sdmU6IFBlbmRpbmc8VD5bJ3Jlc29sdmUnXVxuICBsZXQgcmVqZWN0OiBQZW5kaW5nPFQ+WydyZWplY3QnXVxuICAvLyB0aGlzIGNvdWxkIHVzZSBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzKClgIGluIHRoZSBmdXR1cmVcbiAgY29uc3QgdGhlbmFibGUgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmVcbiAgICByZWplY3QgPSBfcmVqZWN0XG4gIH0pIGFzIFBlbmRpbmdUaGVuYWJsZTxUPlxuXG4gIHRoZW5hYmxlLnN0YXR1cyA9ICdwZW5kaW5nJ1xuICB0aGVuYWJsZS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gcHJldmVudCB1bmhhbmRsZWQgcmVqZWN0aW9uIGVycm9yc1xuICB9KVxuXG4gIGZ1bmN0aW9uIGZpbmFsaXplKGRhdGE6IEZ1bGZpbGxlZDxUPiB8IFJlamVjdGVkKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGVuYWJsZSwgZGF0YSlcblxuICAgIC8vIGNsZWFyIHBlbmRpbmcgcHJvcHMgcHJvcHMgdG8gYXZvaWQgY2FsbGluZyB0aGVtIHR3aWNlXG4gICAgZGVsZXRlICh0aGVuYWJsZSBhcyBQYXJ0aWFsPFBlbmRpbmdUaGVuYWJsZTxUPj4pLnJlc29sdmVcbiAgICBkZWxldGUgKHRoZW5hYmxlIGFzIFBhcnRpYWw8UGVuZGluZ1RoZW5hYmxlPFQ+PikucmVqZWN0XG4gIH1cblxuICB0aGVuYWJsZS5yZXNvbHZlID0gKHZhbHVlKSA9PiB7XG4gICAgZmluYWxpemUoe1xuICAgICAgc3RhdHVzOiAnZnVsZmlsbGVkJyxcbiAgICAgIHZhbHVlLFxuICAgIH0pXG5cbiAgICByZXNvbHZlKHZhbHVlKVxuICB9XG4gIHRoZW5hYmxlLnJlamVjdCA9IChyZWFzb24pID0+IHtcbiAgICBmaW5hbGl6ZSh7XG4gICAgICBzdGF0dXM6ICdyZWplY3RlZCcsXG4gICAgICByZWFzb24sXG4gICAgfSlcblxuICAgIHJlamVjdChyZWFzb24pXG4gIH1cblxuICByZXR1cm4gdGhlbmFibGVcbn1cbiIsImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJ1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcidcbmltcG9ydCB7IHBlbmRpbmdUaGVuYWJsZSB9IGZyb20gJy4vdGhlbmFibGUnXG5pbXBvcnQgeyBpc1NlcnZlciwgc2xlZXAgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYW5jZWxPcHRpb25zLCBEZWZhdWx0RXJyb3IsIE5ldHdvcmtNb2RlIH0gZnJvbSAnLi90eXBlcydcblxuLy8gVFlQRVNcblxuaW50ZXJmYWNlIFJldHJ5ZXJDb25maWc8VERhdGEgPSB1bmtub3duLCBURXJyb3IgPSBEZWZhdWx0RXJyb3I+IHtcbiAgZm46ICgpID0+IFREYXRhIHwgUHJvbWlzZTxURGF0YT5cbiAgaW5pdGlhbFByb21pc2U/OiBQcm9taXNlPFREYXRhPlxuICBhYm9ydD86ICgpID0+IHZvaWRcbiAgb25FcnJvcj86IChlcnJvcjogVEVycm9yKSA9PiB2b2lkXG4gIG9uU3VjY2Vzcz86IChkYXRhOiBURGF0YSkgPT4gdm9pZFxuICBvbkZhaWw/OiAoZmFpbHVyZUNvdW50OiBudW1iZXIsIGVycm9yOiBURXJyb3IpID0+IHZvaWRcbiAgb25QYXVzZT86ICgpID0+IHZvaWRcbiAgb25Db250aW51ZT86ICgpID0+IHZvaWRcbiAgcmV0cnk/OiBSZXRyeVZhbHVlPFRFcnJvcj5cbiAgcmV0cnlEZWxheT86IFJldHJ5RGVsYXlWYWx1ZTxURXJyb3I+XG4gIG5ldHdvcmtNb2RlOiBOZXR3b3JrTW9kZSB8IHVuZGVmaW5lZFxuICBjYW5SdW46ICgpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeWVyPFREYXRhID0gdW5rbm93bj4ge1xuICBwcm9taXNlOiBQcm9taXNlPFREYXRhPlxuICBjYW5jZWw6IChjYW5jZWxPcHRpb25zPzogQ2FuY2VsT3B0aW9ucykgPT4gdm9pZFxuICBjb250aW51ZTogKCkgPT4gUHJvbWlzZTx1bmtub3duPlxuICBjYW5jZWxSZXRyeTogKCkgPT4gdm9pZFxuICBjb250aW51ZVJldHJ5OiAoKSA9PiB2b2lkXG4gIGNhblN0YXJ0OiAoKSA9PiBib29sZWFuXG4gIHN0YXJ0OiAoKSA9PiBQcm9taXNlPFREYXRhPlxufVxuXG5leHBvcnQgdHlwZSBSZXRyeVZhbHVlPFRFcnJvcj4gPSBib29sZWFuIHwgbnVtYmVyIHwgU2hvdWxkUmV0cnlGdW5jdGlvbjxURXJyb3I+XG5cbnR5cGUgU2hvdWxkUmV0cnlGdW5jdGlvbjxURXJyb3IgPSBEZWZhdWx0RXJyb3I+ID0gKFxuICBmYWlsdXJlQ291bnQ6IG51bWJlcixcbiAgZXJyb3I6IFRFcnJvcixcbikgPT4gYm9vbGVhblxuXG5leHBvcnQgdHlwZSBSZXRyeURlbGF5VmFsdWU8VEVycm9yPiA9IG51bWJlciB8IFJldHJ5RGVsYXlGdW5jdGlvbjxURXJyb3I+XG5cbnR5cGUgUmV0cnlEZWxheUZ1bmN0aW9uPFRFcnJvciA9IERlZmF1bHRFcnJvcj4gPSAoXG4gIGZhaWx1cmVDb3VudDogbnVtYmVyLFxuICBlcnJvcjogVEVycm9yLFxuKSA9PiBudW1iZXJcblxuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50OiBudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgubWluKDEwMDAgKiAyICoqIGZhaWx1cmVDb3VudCwgMzAwMDApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5GZXRjaChuZXR3b3JrTW9kZTogTmV0d29ya01vZGUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChuZXR3b3JrTW9kZSA/PyAnb25saW5lJykgPT09ICdvbmxpbmUnXG4gICAgPyBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKClcbiAgICA6IHRydWVcbn1cblxuZXhwb3J0IGNsYXNzIENhbmNlbGxlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZXZlcnQ/OiBib29sZWFuXG4gIHNpbGVudD86IGJvb2xlYW5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENhbmNlbE9wdGlvbnMpIHtcbiAgICBzdXBlcignQ2FuY2VsbGVkRXJyb3InKVxuICAgIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucz8ucmV2ZXJ0XG4gICAgdGhpcy5zaWxlbnQgPSBvcHRpb25zPy5zaWxlbnRcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZTogYW55KTogdmFsdWUgaXMgQ2FuY2VsbGVkRXJyb3Ige1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmV0cnllcjxURGF0YSA9IHVua25vd24sIFRFcnJvciA9IERlZmF1bHRFcnJvcj4oXG4gIGNvbmZpZzogUmV0cnllckNvbmZpZzxURGF0YSwgVEVycm9yPixcbik6IFJldHJ5ZXI8VERhdGE+IHtcbiAgbGV0IGlzUmV0cnlDYW5jZWxsZWQgPSBmYWxzZVxuICBsZXQgZmFpbHVyZUNvdW50ID0gMFxuICBsZXQgaXNSZXNvbHZlZCA9IGZhbHNlXG4gIGxldCBjb250aW51ZUZuOiAoKHZhbHVlPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWRcblxuICBjb25zdCB0aGVuYWJsZSA9IHBlbmRpbmdUaGVuYWJsZTxURGF0YT4oKVxuXG4gIGNvbnN0IGNhbmNlbCA9IChjYW5jZWxPcHRpb25zPzogQ2FuY2VsT3B0aW9ucyk6IHZvaWQgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSlcblxuICAgICAgY29uZmlnLmFib3J0Py4oKVxuICAgIH1cbiAgfVxuICBjb25zdCBjYW5jZWxSZXRyeSA9ICgpID0+IHtcbiAgICBpc1JldHJ5Q2FuY2VsbGVkID0gdHJ1ZVxuICB9XG5cbiAgY29uc3QgY29udGludWVSZXRyeSA9ICgpID0+IHtcbiAgICBpc1JldHJ5Q2FuY2VsbGVkID0gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNhbkNvbnRpbnVlID0gKCkgPT5cbiAgICBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiZcbiAgICAoY29uZmlnLm5ldHdvcmtNb2RlID09PSAnYWx3YXlzJyB8fCBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpICYmXG4gICAgY29uZmlnLmNhblJ1bigpXG5cbiAgY29uc3QgY2FuU3RhcnQgPSAoKSA9PiBjYW5GZXRjaChjb25maWcubmV0d29ya01vZGUpICYmIGNvbmZpZy5jYW5SdW4oKVxuXG4gIGNvbnN0IHJlc29sdmUgPSAodmFsdWU6IGFueSkgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgaXNSZXNvbHZlZCA9IHRydWVcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3M/Lih2YWx1ZSlcbiAgICAgIGNvbnRpbnVlRm4/LigpXG4gICAgICB0aGVuYWJsZS5yZXNvbHZlKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlamVjdCA9ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICBpc1Jlc29sdmVkID0gdHJ1ZVxuICAgICAgY29uZmlnLm9uRXJyb3I/Lih2YWx1ZSlcbiAgICAgIGNvbnRpbnVlRm4/LigpXG4gICAgICB0aGVuYWJsZS5yZWplY3QodmFsdWUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGF1c2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChjb250aW51ZVJlc29sdmUpID0+IHtcbiAgICAgIGNvbnRpbnVlRm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVzb2x2ZWQgfHwgY2FuQ29udGludWUoKSkge1xuICAgICAgICAgIGNvbnRpbnVlUmVzb2x2ZSh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uZmlnLm9uUGF1c2U/LigpXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkXG4gICAgICBpZiAoIWlzUmVzb2x2ZWQpIHtcbiAgICAgICAgY29uZmlnLm9uQ29udGludWU/LigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vIENyZWF0ZSBsb29wIGZ1bmN0aW9uXG4gIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHByb21pc2VPclZhbHVlOiBhbnlcblxuICAgIC8vIHdlIGNhbiByZS11c2UgY29uZmlnLmluaXRpYWxQcm9taXNlIG9uIHRoZSBmaXJzdCBjYWxsIG9mIHJ1bigpXG4gICAgY29uc3QgaW5pdGlhbFByb21pc2UgPVxuICAgICAgZmFpbHVyZUNvdW50ID09PSAwID8gY29uZmlnLmluaXRpYWxQcm9taXNlIDogdW5kZWZpbmVkXG5cbiAgICAvLyBFeGVjdXRlIHF1ZXJ5XG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gaW5pdGlhbFByb21pc2UgPz8gY29uZmlnLmZuKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICB9XG5cbiAgICBQcm9taXNlLnJlc29sdmUocHJvbWlzZU9yVmFsdWUpXG4gICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAvLyBTdG9wIGlmIHRoZSBmZXRjaCBpcyBhbHJlYWR5IHJlc29sdmVkXG4gICAgICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHJldHJ5IHRoZSByZXF1ZXN0P1xuICAgICAgICBjb25zdCByZXRyeSA9IGNvbmZpZy5yZXRyeSA/PyAoaXNTZXJ2ZXIgPyAwIDogMylcbiAgICAgICAgY29uc3QgcmV0cnlEZWxheSA9IGNvbmZpZy5yZXRyeURlbGF5ID8/IGRlZmF1bHRSZXRyeURlbGF5XG4gICAgICAgIGNvbnN0IGRlbGF5ID1cbiAgICAgICAgICB0eXBlb2YgcmV0cnlEZWxheSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyByZXRyeURlbGF5KGZhaWx1cmVDb3VudCwgZXJyb3IpXG4gICAgICAgICAgICA6IHJldHJ5RGVsYXlcbiAgICAgICAgY29uc3Qgc2hvdWxkUmV0cnkgPVxuICAgICAgICAgIHJldHJ5ID09PSB0cnVlIHx8XG4gICAgICAgICAgKHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicgJiYgZmFpbHVyZUNvdW50IDwgcmV0cnkpIHx8XG4gICAgICAgICAgKHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShmYWlsdXJlQ291bnQsIGVycm9yKSlcblxuICAgICAgICBpZiAoaXNSZXRyeUNhbmNlbGxlZCB8fCAhc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZmFpbHVyZUNvdW50KytcblxuICAgICAgICAvLyBOb3RpZnkgb24gZmFpbFxuICAgICAgICBjb25maWcub25GYWlsPy4oZmFpbHVyZUNvdW50LCBlcnJvcilcblxuICAgICAgICAvLyBEZWxheVxuICAgICAgICBzbGVlcChkZWxheSlcbiAgICAgICAgICAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2FuQ29udGludWUoKSA/IHVuZGVmaW5lZCA6IHBhdXNlKClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1JldHJ5Q2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJ1bigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb21pc2U6IHRoZW5hYmxlLFxuICAgIGNhbmNlbCxcbiAgICBjb250aW51ZTogKCkgPT4ge1xuICAgICAgY29udGludWVGbj8uKClcbiAgICAgIHJldHVybiB0aGVuYWJsZVxuICAgIH0sXG4gICAgY2FuY2VsUmV0cnksXG4gICAgY29udGludWVSZXRyeSxcbiAgICBjYW5TdGFydCxcbiAgICBzdGFydDogKCkgPT4ge1xuICAgICAgLy8gU3RhcnQgbG9vcFxuICAgICAgaWYgKGNhblN0YXJ0KCkpIHtcbiAgICAgICAgcnVuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdXNlKCkudGhlbihydW4pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbmFibGVcbiAgICB9LFxuICB9XG59XG4iLCIvLyBUWVBFU1xuXG50eXBlIE5vdGlmeUNhbGxiYWNrID0gKCkgPT4gdm9pZFxuXG50eXBlIE5vdGlmeUZ1bmN0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB2b2lkXG5cbnR5cGUgQmF0Y2hOb3RpZnlGdW5jdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4gdm9pZFxuXG50eXBlIEJhdGNoQ2FsbHNDYWxsYmFjazxUIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4+ID0gKC4uLmFyZ3M6IFQpID0+IHZvaWRcblxudHlwZSBTY2hlZHVsZUZ1bmN0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB2b2lkXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2NoZWR1bGVyOiBTY2hlZHVsZUZ1bmN0aW9uID0gKGNiKSA9PiBzZXRUaW1lb3V0KGNiLCAwKVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm90aWZ5TWFuYWdlcigpIHtcbiAgbGV0IHF1ZXVlOiBBcnJheTxOb3RpZnlDYWxsYmFjaz4gPSBbXVxuICBsZXQgdHJhbnNhY3Rpb25zID0gMFxuICBsZXQgbm90aWZ5Rm46IE5vdGlmeUZ1bmN0aW9uID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgY2FsbGJhY2soKVxuICB9XG4gIGxldCBiYXRjaE5vdGlmeUZuOiBCYXRjaE5vdGlmeUZ1bmN0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgY2FsbGJhY2soKVxuICB9XG4gIGxldCBzY2hlZHVsZUZuID0gZGVmYXVsdFNjaGVkdWxlclxuXG4gIGNvbnN0IHNjaGVkdWxlID0gKGNhbGxiYWNrOiBOb3RpZnlDYWxsYmFjayk6IHZvaWQgPT4ge1xuICAgIGlmICh0cmFuc2FjdGlvbnMpIHtcbiAgICAgIHF1ZXVlLnB1c2goY2FsbGJhY2spXG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlRm4oKCkgPT4ge1xuICAgICAgICBub3RpZnlGbihjYWxsYmFjaylcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIGNvbnN0IGZsdXNoID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUXVldWUgPSBxdWV1ZVxuICAgIHF1ZXVlID0gW11cbiAgICBpZiAob3JpZ2luYWxRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlRm4oKCkgPT4ge1xuICAgICAgICBiYXRjaE5vdGlmeUZuKCgpID0+IHtcbiAgICAgICAgICBvcmlnaW5hbFF1ZXVlLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBub3RpZnlGbihjYWxsYmFjaylcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJhdGNoOiA8VD4oY2FsbGJhY2s6ICgpID0+IFQpOiBUID0+IHtcbiAgICAgIGxldCByZXN1bHRcbiAgICAgIHRyYW5zYWN0aW9ucysrXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjaygpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cmFuc2FjdGlvbnMtLVxuICAgICAgICBpZiAoIXRyYW5zYWN0aW9ucykge1xuICAgICAgICAgIGZsdXNoKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICAgKi9cbiAgICBiYXRjaENhbGxzOiA8VCBleHRlbmRzIEFycmF5PHVua25vd24+PihcbiAgICAgIGNhbGxiYWNrOiBCYXRjaENhbGxzQ2FsbGJhY2s8VD4sXG4gICAgKTogQmF0Y2hDYWxsc0NhbGxiYWNrPFQ+ID0+IHtcbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBzY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2soLi4uYXJncylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjaGVkdWxlLFxuICAgIC8qKlxuICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gbm90aWZ5IGZ1bmN0aW9uLlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICAgKi9cbiAgICBzZXROb3RpZnlGdW5jdGlvbjogKGZuOiBOb3RpZnlGdW5jdGlvbikgPT4ge1xuICAgICAgbm90aWZ5Rm4gPSBmblxuICAgIH0sXG4gICAgLyoqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAgICovXG4gICAgc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbjogKGZuOiBCYXRjaE5vdGlmeUZ1bmN0aW9uKSA9PiB7XG4gICAgICBiYXRjaE5vdGlmeUZuID0gZm5cbiAgICB9LFxuICAgIHNldFNjaGVkdWxlcjogKGZuOiBTY2hlZHVsZUZ1bmN0aW9uKSA9PiB7XG4gICAgICBzY2hlZHVsZUZuID0gZm5cbiAgICB9LFxuICB9IGFzIGNvbnN0XG59XG5cbi8vIFNJTkdMRVRPTlxuZXhwb3J0IGNvbnN0IG5vdGlmeU1hbmFnZXIgPSBjcmVhdGVOb3RpZnlNYW5hZ2VyKClcbiIsImltcG9ydCB7XG4gIGVuc3VyZVF1ZXJ5Rm4sXG4gIG5vb3AsXG4gIHJlcGxhY2VEYXRhLFxuICByZXNvbHZlRW5hYmxlZCxcbiAgc2tpcFRva2VuLFxuICB0aW1lVW50aWxTdGFsZSxcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInXG5pbXBvcnQgeyBjYW5GZXRjaCwgY3JlYXRlUmV0cnllciwgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcidcbmltcG9ydCB7IFJlbW92YWJsZSB9IGZyb20gJy4vcmVtb3ZhYmxlJ1xuaW1wb3J0IHR5cGUgeyBRdWVyeUNhY2hlIH0gZnJvbSAnLi9xdWVyeUNhY2hlJ1xuaW1wb3J0IHR5cGUgeyBRdWVyeUNsaWVudCB9IGZyb20gJy4vcXVlcnlDbGllbnQnXG5pbXBvcnQgdHlwZSB7XG4gIENhbmNlbE9wdGlvbnMsXG4gIERlZmF1bHRFcnJvcixcbiAgRmV0Y2hTdGF0dXMsXG4gIEluaXRpYWxEYXRhRnVuY3Rpb24sXG4gIE9taXRLZXlvZixcbiAgUXVlcnlGdW5jdGlvbixcbiAgUXVlcnlGdW5jdGlvbkNvbnRleHQsXG4gIFF1ZXJ5S2V5LFxuICBRdWVyeU1ldGEsXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlTdGF0dXMsXG4gIFNldERhdGFPcHRpb25zLFxufSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBRdWVyeU9ic2VydmVyIH0gZnJvbSAnLi9xdWVyeU9ic2VydmVyJ1xuaW1wb3J0IHR5cGUgeyBSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJ1xuXG4vLyBUWVBFU1xuXG5pbnRlcmZhY2UgUXVlcnlDb25maWc8XG4gIFRRdWVyeUZuRGF0YSxcbiAgVEVycm9yLFxuICBURGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSBRdWVyeUtleSxcbj4ge1xuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50XG4gIHF1ZXJ5S2V5OiBUUXVlcnlLZXlcbiAgcXVlcnlIYXNoOiBzdHJpbmdcbiAgb3B0aW9ucz86IFF1ZXJ5T3B0aW9uczxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVERhdGEsIFRRdWVyeUtleT5cbiAgZGVmYXVsdE9wdGlvbnM/OiBRdWVyeU9wdGlvbnM8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFREYXRhLCBUUXVlcnlLZXk+XG4gIHN0YXRlPzogUXVlcnlTdGF0ZTxURGF0YSwgVEVycm9yPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5U3RhdGU8VERhdGEgPSB1bmtub3duLCBURXJyb3IgPSBEZWZhdWx0RXJyb3I+IHtcbiAgZGF0YTogVERhdGEgfCB1bmRlZmluZWRcbiAgZGF0YVVwZGF0ZUNvdW50OiBudW1iZXJcbiAgZGF0YVVwZGF0ZWRBdDogbnVtYmVyXG4gIGVycm9yOiBURXJyb3IgfCBudWxsXG4gIGVycm9yVXBkYXRlQ291bnQ6IG51bWJlclxuICBlcnJvclVwZGF0ZWRBdDogbnVtYmVyXG4gIGZldGNoRmFpbHVyZUNvdW50OiBudW1iZXJcbiAgZmV0Y2hGYWlsdXJlUmVhc29uOiBURXJyb3IgfCBudWxsXG4gIGZldGNoTWV0YTogRmV0Y2hNZXRhIHwgbnVsbFxuICBpc0ludmFsaWRhdGVkOiBib29sZWFuXG4gIHN0YXR1czogUXVlcnlTdGF0dXNcbiAgZmV0Y2hTdGF0dXM6IEZldGNoU3RhdHVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hDb250ZXh0PFxuICBUUXVlcnlGbkRhdGEsXG4gIFRFcnJvcixcbiAgVERhdGEsXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5ID0gUXVlcnlLZXksXG4+IHtcbiAgZmV0Y2hGbjogKCkgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj5cbiAgZmV0Y2hPcHRpb25zPzogRmV0Y2hPcHRpb25zXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcbiAgb3B0aW9uczogUXVlcnlPcHRpb25zPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgYW55PlxuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50XG4gIHF1ZXJ5S2V5OiBUUXVlcnlLZXlcbiAgc3RhdGU6IFF1ZXJ5U3RhdGU8VERhdGEsIFRFcnJvcj5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUJlaGF2aW9yPFxuICBUUXVlcnlGbkRhdGEgPSB1bmtub3duLFxuICBURXJyb3IgPSBEZWZhdWx0RXJyb3IsXG4gIFREYXRhID0gVFF1ZXJ5Rm5EYXRhLFxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSA9IFF1ZXJ5S2V5LFxuPiB7XG4gIG9uRmV0Y2g6IChcbiAgICBjb250ZXh0OiBGZXRjaENvbnRleHQ8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFREYXRhLCBUUXVlcnlLZXk+LFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgKSA9PiB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIEZldGNoRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEZldGNoTWV0YSB7XG4gIGZldGNoTW9yZT86IHsgZGlyZWN0aW9uOiBGZXRjaERpcmVjdGlvbiB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hPcHRpb25zPFREYXRhID0gdW5rbm93bj4ge1xuICBjYW5jZWxSZWZldGNoPzogYm9vbGVhblxuICBtZXRhPzogRmV0Y2hNZXRhXG4gIGluaXRpYWxQcm9taXNlPzogUHJvbWlzZTxURGF0YT5cbn1cblxuaW50ZXJmYWNlIEZhaWxlZEFjdGlvbjxURXJyb3I+IHtcbiAgdHlwZTogJ2ZhaWxlZCdcbiAgZmFpbHVyZUNvdW50OiBudW1iZXJcbiAgZXJyb3I6IFRFcnJvclxufVxuXG5pbnRlcmZhY2UgRmV0Y2hBY3Rpb24ge1xuICB0eXBlOiAnZmV0Y2gnXG4gIG1ldGE/OiBGZXRjaE1ldGFcbn1cblxuaW50ZXJmYWNlIFN1Y2Nlc3NBY3Rpb248VERhdGE+IHtcbiAgZGF0YTogVERhdGEgfCB1bmRlZmluZWRcbiAgdHlwZTogJ3N1Y2Nlc3MnXG4gIGRhdGFVcGRhdGVkQXQ/OiBudW1iZXJcbiAgbWFudWFsPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgRXJyb3JBY3Rpb248VEVycm9yPiB7XG4gIHR5cGU6ICdlcnJvcidcbiAgZXJyb3I6IFRFcnJvclxufVxuXG5pbnRlcmZhY2UgSW52YWxpZGF0ZUFjdGlvbiB7XG4gIHR5cGU6ICdpbnZhbGlkYXRlJ1xufVxuXG5pbnRlcmZhY2UgUGF1c2VBY3Rpb24ge1xuICB0eXBlOiAncGF1c2UnXG59XG5cbmludGVyZmFjZSBDb250aW51ZUFjdGlvbiB7XG4gIHR5cGU6ICdjb250aW51ZSdcbn1cblxuaW50ZXJmYWNlIFNldFN0YXRlQWN0aW9uPFREYXRhLCBURXJyb3I+IHtcbiAgdHlwZTogJ3NldFN0YXRlJ1xuICBzdGF0ZTogUGFydGlhbDxRdWVyeVN0YXRlPFREYXRhLCBURXJyb3I+PlxuICBzZXRTdGF0ZU9wdGlvbnM/OiBTZXRTdGF0ZU9wdGlvbnNcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uPFREYXRhLCBURXJyb3I+ID1cbiAgfCBDb250aW51ZUFjdGlvblxuICB8IEVycm9yQWN0aW9uPFRFcnJvcj5cbiAgfCBGYWlsZWRBY3Rpb248VEVycm9yPlxuICB8IEZldGNoQWN0aW9uXG4gIHwgSW52YWxpZGF0ZUFjdGlvblxuICB8IFBhdXNlQWN0aW9uXG4gIHwgU2V0U3RhdGVBY3Rpb248VERhdGEsIFRFcnJvcj5cbiAgfCBTdWNjZXNzQWN0aW9uPFREYXRhPlxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFN0YXRlT3B0aW9ucyB7XG4gIG1ldGE/OiBhbnlcbn1cblxuLy8gQ0xBU1NcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5PFxuICBUUXVlcnlGbkRhdGEgPSB1bmtub3duLFxuICBURXJyb3IgPSBEZWZhdWx0RXJyb3IsXG4gIFREYXRhID0gVFF1ZXJ5Rm5EYXRhLFxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSA9IFF1ZXJ5S2V5LFxuPiBleHRlbmRzIFJlbW92YWJsZSB7XG4gIHF1ZXJ5S2V5OiBUUXVlcnlLZXlcbiAgcXVlcnlIYXNoOiBzdHJpbmdcbiAgb3B0aW9ucyE6IFF1ZXJ5T3B0aW9uczxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVERhdGEsIFRRdWVyeUtleT5cbiAgc3RhdGU6IFF1ZXJ5U3RhdGU8VERhdGEsIFRFcnJvcj5cblxuICAjaW5pdGlhbFN0YXRlOiBRdWVyeVN0YXRlPFREYXRhLCBURXJyb3I+XG4gICNyZXZlcnRTdGF0ZT86IFF1ZXJ5U3RhdGU8VERhdGEsIFRFcnJvcj5cbiAgI2NhY2hlOiBRdWVyeUNhY2hlXG4gICNjbGllbnQ6IFF1ZXJ5Q2xpZW50XG4gICNyZXRyeWVyPzogUmV0cnllcjxURGF0YT5cbiAgb2JzZXJ2ZXJzOiBBcnJheTxRdWVyeU9ic2VydmVyPGFueSwgYW55LCBhbnksIGFueSwgYW55Pj5cbiAgI2RlZmF1bHRPcHRpb25zPzogUXVlcnlPcHRpb25zPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PlxuICAjYWJvcnRTaWduYWxDb25zdW1lZDogYm9vbGVhblxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUXVlcnlDb25maWc8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFREYXRhLCBUUXVlcnlLZXk+KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy4jYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlXG4gICAgdGhpcy4jZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnNcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpXG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXVxuICAgIHRoaXMuI2NsaWVudCA9IGNvbmZpZy5jbGllbnRcbiAgICB0aGlzLiNjYWNoZSA9IHRoaXMuI2NsaWVudC5nZXRRdWVyeUNhY2hlKClcbiAgICB0aGlzLnF1ZXJ5S2V5ID0gY29uZmlnLnF1ZXJ5S2V5XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoXG4gICAgdGhpcy4jaW5pdGlhbFN0YXRlID0gZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucylcbiAgICB0aGlzLnN0YXRlID0gY29uZmlnLnN0YXRlID8/IHRoaXMuI2luaXRpYWxTdGF0ZVxuICAgIHRoaXMuc2NoZWR1bGVHYygpXG4gIH1cbiAgZ2V0IG1ldGEoKTogUXVlcnlNZXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1ldGFcbiAgfVxuXG4gIGdldCBwcm9taXNlKCk6IFByb21pc2U8VERhdGE+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jcmV0cnllcj8ucHJvbWlzZVxuICB9XG5cbiAgc2V0T3B0aW9ucyhcbiAgICBvcHRpb25zPzogUXVlcnlPcHRpb25zPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLiNkZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9XG5cbiAgICB0aGlzLnVwZGF0ZUdjVGltZSh0aGlzLm9wdGlvbnMuZ2NUaW1lKVxuICB9XG5cbiAgcHJvdGVjdGVkIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoICYmIHRoaXMuc3RhdGUuZmV0Y2hTdGF0dXMgPT09ICdpZGxlJykge1xuICAgICAgdGhpcy4jY2FjaGUucmVtb3ZlKHRoaXMpXG4gICAgfVxuICB9XG5cbiAgc2V0RGF0YShcbiAgICBuZXdEYXRhOiBURGF0YSxcbiAgICBvcHRpb25zPzogU2V0RGF0YU9wdGlvbnMgJiB7IG1hbnVhbDogYm9vbGVhbiB9LFxuICApOiBURGF0YSB7XG4gICAgY29uc3QgZGF0YSA9IHJlcGxhY2VEYXRhKHRoaXMuc3RhdGUuZGF0YSwgbmV3RGF0YSwgdGhpcy5vcHRpb25zKVxuXG4gICAgLy8gU2V0IGRhdGEgYW5kIG1hcmsgaXQgYXMgY2FjaGVkXG4gICAgdGhpcy4jZGlzcGF0Y2goe1xuICAgICAgZGF0YSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnM/LnVwZGF0ZWRBdCxcbiAgICAgIG1hbnVhbDogb3B0aW9ucz8ubWFudWFsLFxuICAgIH0pXG5cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgc2V0U3RhdGUoXG4gICAgc3RhdGU6IFBhcnRpYWw8UXVlcnlTdGF0ZTxURGF0YSwgVEVycm9yPj4sXG4gICAgc2V0U3RhdGVPcHRpb25zPzogU2V0U3RhdGVPcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6ICdzZXRTdGF0ZScsIHN0YXRlLCBzZXRTdGF0ZU9wdGlvbnMgfSlcbiAgfVxuXG4gIGNhbmNlbChvcHRpb25zPzogQ2FuY2VsT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLiNyZXRyeWVyPy5wcm9taXNlXG4gICAgdGhpcy4jcmV0cnllcj8uY2FuY2VsKG9wdGlvbnMpXG4gICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCkgOiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5kZXN0cm95KClcblxuICAgIHRoaXMuY2FuY2VsKHsgc2lsZW50OiB0cnVlIH0pXG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKVxuICAgIHRoaXMuc2V0U3RhdGUodGhpcy4jaW5pdGlhbFN0YXRlKVxuICB9XG5cbiAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLnNvbWUoXG4gICAgICAob2JzZXJ2ZXIpID0+IHJlc29sdmVFbmFibGVkKG9ic2VydmVyLm9wdGlvbnMuZW5hYmxlZCwgdGhpcykgIT09IGZhbHNlLFxuICAgIClcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZ2V0T2JzZXJ2ZXJzQ291bnQoKSA+IDApIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0FjdGl2ZSgpXG4gICAgfVxuICAgIC8vIGlmIGEgcXVlcnkgaGFzIG5vIG9ic2VydmVycywgaXQgc2hvdWxkIHN0aWxsIGJlIGNvbnNpZGVyZWQgZGlzYWJsZWQgaWYgaXQgbmV2ZXIgYXR0ZW1wdGVkIGEgZmV0Y2hcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vcHRpb25zLnF1ZXJ5Rm4gPT09IHNraXBUb2tlbiB8fFxuICAgICAgdGhpcy5zdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyB0aGlzLnN0YXRlLmVycm9yVXBkYXRlQ291bnQgPT09IDBcbiAgICApXG4gIH1cblxuICBpc1N0YWxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0T2JzZXJ2ZXJzQ291bnQoKSA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKFxuICAgICAgICAob2JzZXJ2ZXIpID0+IG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKS5pc1N0YWxlLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGEgPT09IHVuZGVmaW5lZFxuICB9XG5cbiAgaXNTdGFsZUJ5VGltZShzdGFsZVRpbWUgPSAwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fFxuICAgICAgdGhpcy5zdGF0ZS5kYXRhID09PSB1bmRlZmluZWQgfHxcbiAgICAgICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSlcbiAgICApXG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKSlcblxuICAgIG9ic2VydmVyPy5yZWZldGNoKHsgY2FuY2VsUmVmZXRjaDogZmFsc2UgfSlcblxuICAgIC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcbiAgICB0aGlzLiNyZXRyeWVyPy5jb250aW51ZSgpXG4gIH1cblxuICBvbk9ubGluZSgpOiB2b2lkIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoKHgpID0+IHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpKVxuXG4gICAgb2JzZXJ2ZXI/LnJlZmV0Y2goeyBjYW5jZWxSZWZldGNoOiBmYWxzZSB9KVxuXG4gICAgLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuICAgIHRoaXMuI3JldHJ5ZXI/LmNvbnRpbnVlKClcbiAgfVxuXG4gIGFkZE9ic2VydmVyKG9ic2VydmVyOiBRdWVyeU9ic2VydmVyPGFueSwgYW55LCBhbnksIGFueSwgYW55Pik6IHZvaWQge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKVxuXG4gICAgICAvLyBTdG9wIHRoZSBxdWVyeSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KClcblxuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgdHlwZTogJ29ic2VydmVyQWRkZWQnLCBxdWVyeTogdGhpcywgb2JzZXJ2ZXIgfSlcbiAgICB9XG4gIH1cblxuICByZW1vdmVPYnNlcnZlcihvYnNlcnZlcjogUXVlcnlPYnNlcnZlcjxhbnksIGFueSwgYW55LCBhbnksIGFueT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcigoeCkgPT4geCAhPT0gb2JzZXJ2ZXIpXG5cbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gd2UnbGwgbGV0IHRoZSBxdWVyeSBjb250aW51ZSBzbyB0aGUgcmVzdWx0IGNhbiBiZSBjYWNoZWRcbiAgICAgICAgaWYgKHRoaXMuI3JldHJ5ZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy4jYWJvcnRTaWduYWxDb25zdW1lZCkge1xuICAgICAgICAgICAgdGhpcy4jcmV0cnllci5jYW5jZWwoeyByZXZlcnQ6IHRydWUgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jcmV0cnllci5jYW5jZWxSZXRyeSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zY2hlZHVsZUdjKClcbiAgICAgIH1cblxuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgdHlwZTogJ29ic2VydmVyUmVtb3ZlZCcsIHF1ZXJ5OiB0aGlzLCBvYnNlcnZlciB9KVxuICAgIH1cbiAgfVxuXG4gIGdldE9ic2VydmVyc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aFxuICB9XG5cbiAgaW52YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiAnaW52YWxpZGF0ZScgfSlcbiAgICB9XG4gIH1cblxuICBmZXRjaChcbiAgICBvcHRpb25zPzogUXVlcnlPcHRpb25zPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcbiAgICBmZXRjaE9wdGlvbnM/OiBGZXRjaE9wdGlvbnM8VFF1ZXJ5Rm5EYXRhPixcbiAgKTogUHJvbWlzZTxURGF0YT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmZldGNoU3RhdHVzICE9PSAnaWRsZScpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiBmZXRjaE9wdGlvbnM/LmNhbmNlbFJlZmV0Y2gpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgY2FuY2VsIGN1cnJlbnQgZmV0Y2ggaWYgdGhlIHVzZXIgd2FudHMgdG8gY2FuY2VsIHJlZmV0Y2hcbiAgICAgICAgdGhpcy5jYW5jZWwoeyBzaWxlbnQ6IHRydWUgfSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jcmV0cnllcikge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZXRyaWVzIHRoYXQgd2VyZSBwb3RlbnRpYWxseSBjYW5jZWxsZWQgZHVlIHRvIHVubW91bnRzIGNhbiBjb250aW51ZVxuICAgICAgICB0aGlzLiNyZXRyeWVyLmNvbnRpbnVlUmV0cnkoKVxuICAgICAgICAvLyBSZXR1cm4gY3VycmVudCBwcm9taXNlIGlmIHdlIGFyZSBhbHJlYWR5IGZldGNoaW5nXG4gICAgICAgIHJldHVybiB0aGlzLiNyZXRyeWVyLnByb21pc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY29uZmlnIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIHRoZSBjb25maWcgZnJvbSB0aGUgbGFzdCBleGVjdXRpb24gaXMgdXNlZFxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIG9wdGlvbnMgZnJvbSB0aGUgZmlyc3Qgb2JzZXJ2ZXIgd2l0aCBhIHF1ZXJ5IGZ1bmN0aW9uIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBxdWVyeSBpcyBoeWRyYXRlZCBvciBjcmVhdGVkIHdpdGggc2V0UXVlcnlEYXRhLlxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5vcHRpb25zLnF1ZXJ5Rm4pXG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMucXVlcnlLZXkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYEFzIG9mIHY0LCBxdWVyeUtleSBuZWVkcyB0byBiZSBhbiBBcnJheS4gSWYgeW91IGFyZSB1c2luZyBhIHN0cmluZyBsaWtlICdyZXBvRGF0YScsIHBsZWFzZSBjaGFuZ2UgaXQgdG8gYW4gQXJyYXksIGUuZy4gWydyZXBvRGF0YSddYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgLy8gQWRkcyBhbiBlbnVtZXJhYmxlIHNpZ25hbCBwcm9wZXJ0eSB0byB0aGUgb2JqZWN0IHRoYXRcbiAgICAvLyB3aGljaCBzZXRzIGFib3J0U2lnbmFsQ29uc3VtZWQgdG8gdHJ1ZSB3aGVuIHRoZSBzaWduYWxcbiAgICAvLyBpcyByZWFkLlxuICAgIGNvbnN0IGFkZFNpZ25hbFByb3BlcnR5ID0gKG9iamVjdDogdW5rbm93bikgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJ3NpZ25hbCcsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWVcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgZmV0Y2ggZnVuY3Rpb25cbiAgICBjb25zdCBmZXRjaEZuID0gKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlGbiA9IGVuc3VyZVF1ZXJ5Rm4odGhpcy5vcHRpb25zLCBmZXRjaE9wdGlvbnMpXG5cbiAgICAgIC8vIENyZWF0ZSBxdWVyeSBmdW5jdGlvbiBjb250ZXh0XG4gICAgICBjb25zdCBxdWVyeUZuQ29udGV4dDogT21pdEtleW9mPFxuICAgICAgICBRdWVyeUZ1bmN0aW9uQ29udGV4dDxUUXVlcnlLZXk+LFxuICAgICAgICAnc2lnbmFsJ1xuICAgICAgPiA9IHtcbiAgICAgICAgY2xpZW50OiB0aGlzLiNjbGllbnQsXG4gICAgICAgIHF1ZXJ5S2V5OiB0aGlzLnF1ZXJ5S2V5LFxuICAgICAgICBtZXRhOiB0aGlzLm1ldGEsXG4gICAgICB9XG5cbiAgICAgIGFkZFNpZ25hbFByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0KVxuXG4gICAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVyc2lzdGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucGVyc2lzdGVyKFxuICAgICAgICAgIHF1ZXJ5Rm4gYXMgUXVlcnlGdW5jdGlvbjxhbnk+LFxuICAgICAgICAgIHF1ZXJ5Rm5Db250ZXh0IGFzIFF1ZXJ5RnVuY3Rpb25Db250ZXh0PFRRdWVyeUtleT4sXG4gICAgICAgICAgdGhpcyBhcyB1bmtub3duIGFzIFF1ZXJ5LFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0IGFzIFF1ZXJ5RnVuY3Rpb25Db250ZXh0PFRRdWVyeUtleT4pXG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBiZWhhdmlvciBob29rXG4gICAgY29uc3QgY29udGV4dDogT21pdEtleW9mPFxuICAgICAgRmV0Y2hDb250ZXh0PFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcbiAgICAgICdzaWduYWwnXG4gICAgPiA9IHtcbiAgICAgIGZldGNoT3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIHF1ZXJ5S2V5OiB0aGlzLnF1ZXJ5S2V5LFxuICAgICAgY2xpZW50OiB0aGlzLiNjbGllbnQsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIGZldGNoRm4sXG4gICAgfVxuXG4gICAgYWRkU2lnbmFsUHJvcGVydHkoY29udGV4dClcblxuICAgIHRoaXMub3B0aW9ucy5iZWhhdmlvcj8ub25GZXRjaChcbiAgICAgIGNvbnRleHQgYXMgRmV0Y2hDb250ZXh0PFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcbiAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBRdWVyeSxcbiAgICApXG5cbiAgICAvLyBTdG9yZSBzdGF0ZSBpbiBjYXNlIHRoZSBjdXJyZW50IGZldGNoIG5lZWRzIHRvIGJlIHJldmVydGVkXG4gICAgdGhpcy4jcmV2ZXJ0U3RhdGUgPSB0aGlzLnN0YXRlXG5cbiAgICAvLyBTZXQgdG8gZmV0Y2hpbmcgc3RhdGUgaWYgbm90IGFscmVhZHkgaW4gaXRcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLmZldGNoU3RhdHVzID09PSAnaWRsZScgfHxcbiAgICAgIHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSBjb250ZXh0LmZldGNoT3B0aW9ucz8ubWV0YVxuICAgICkge1xuICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiAnZmV0Y2gnLCBtZXRhOiBjb250ZXh0LmZldGNoT3B0aW9ucz8ubWV0YSB9KVxuICAgIH1cblxuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3I6IFRFcnJvciB8IHsgc2lsZW50PzogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPcHRpbWlzdGljYWxseSB1cGRhdGUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICBpZiAoIShpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5zaWxlbnQpKSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBhcyBURXJyb3IsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIHRoaXMuI2NhY2hlLmNvbmZpZy5vbkVycm9yPy4oXG4gICAgICAgICAgZXJyb3IgYXMgYW55LFxuICAgICAgICAgIHRoaXMgYXMgUXVlcnk8YW55LCBhbnksIGFueSwgYW55PixcbiAgICAgICAgKVxuICAgICAgICB0aGlzLiNjYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgIGVycm9yIGFzIGFueSxcbiAgICAgICAgICB0aGlzIGFzIFF1ZXJ5PGFueSwgYW55LCBhbnksIGFueT4sXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gU2NoZWR1bGUgcXVlcnkgZ2MgYWZ0ZXIgZmV0Y2hpbmdcbiAgICAgIHRoaXMuc2NoZWR1bGVHYygpXG4gICAgfVxuXG4gICAgLy8gVHJ5IHRvIGZldGNoIHRoZSBkYXRhXG4gICAgdGhpcy4jcmV0cnllciA9IGNyZWF0ZVJldHJ5ZXIoe1xuICAgICAgaW5pdGlhbFByb21pc2U6IGZldGNoT3B0aW9ucz8uaW5pdGlhbFByb21pc2UgYXNcbiAgICAgICAgfCBQcm9taXNlPFREYXRhPlxuICAgICAgICB8IHVuZGVmaW5lZCxcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4gYXMgKCkgPT4gUHJvbWlzZTxURGF0YT4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyLmFib3J0LmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgUXVlcnkgZGF0YSBjYW5ub3QgYmUgdW5kZWZpbmVkLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHJldHVybiBhIHZhbHVlIG90aGVyIHRoYW4gdW5kZWZpbmVkIGZyb20geW91ciBxdWVyeSBmdW5jdGlvbi4gQWZmZWN0ZWQgcXVlcnkga2V5OiAke3RoaXMucXVlcnlIYXNofWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uRXJyb3IobmV3IEVycm9yKGAke3RoaXMucXVlcnlIYXNofSBkYXRhIGlzIHVuZGVmaW5lZGApIGFzIGFueSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgb25FcnJvcihlcnJvciBhcyBURXJyb3IpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uU3VjY2Vzcz8uKGRhdGEsIHRoaXMgYXMgUXVlcnk8YW55LCBhbnksIGFueSwgYW55PilcbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5lcnJvciBhcyBhbnksXG4gICAgICAgICAgdGhpcyBhcyBRdWVyeTxhbnksIGFueSwgYW55LCBhbnk+LFxuICAgICAgICApXG5cbiAgICAgICAgLy8gU2NoZWR1bGUgcXVlcnkgZ2MgYWZ0ZXIgZmV0Y2hpbmdcbiAgICAgICAgdGhpcy5zY2hlZHVsZUdjKClcbiAgICAgIH0sXG4gICAgICBvbkVycm9yLFxuICAgICAgb25GYWlsOiAoZmFpbHVyZUNvdW50LCBlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6ICdmYWlsZWQnLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pXG4gICAgICB9LFxuICAgICAgb25QYXVzZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6ICdwYXVzZScgfSlcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogJ2NvbnRpbnVlJyB9KVxuICAgICAgfSxcbiAgICAgIHJldHJ5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnksXG4gICAgICByZXRyeURlbGF5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnlEZWxheSxcbiAgICAgIG5ldHdvcmtNb2RlOiBjb250ZXh0Lm9wdGlvbnMubmV0d29ya01vZGUsXG4gICAgICBjYW5SdW46ICgpID0+IHRydWUsXG4gICAgfSlcblxuICAgIHJldHVybiB0aGlzLiNyZXRyeWVyLnN0YXJ0KClcbiAgfVxuXG4gICNkaXNwYXRjaChhY3Rpb246IEFjdGlvbjxURGF0YSwgVEVycm9yPik6IHZvaWQge1xuICAgIGNvbnN0IHJlZHVjZXIgPSAoXG4gICAgICBzdGF0ZTogUXVlcnlTdGF0ZTxURGF0YSwgVEVycm9yPixcbiAgICApOiBRdWVyeVN0YXRlPFREYXRhLCBURXJyb3I+ID0+IHtcbiAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogYWN0aW9uLmZhaWx1cmVDb3VudCxcbiAgICAgICAgICAgIGZldGNoRmFpbHVyZVJlYXNvbjogYWN0aW9uLmVycm9yLFxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAncGF1c2UnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZldGNoU3RhdHVzOiAncGF1c2VkJyxcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBmZXRjaFN0YXR1czogJ2ZldGNoaW5nJyxcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAuLi5mZXRjaFN0YXRlKHN0YXRlLmRhdGEsIHRoaXMub3B0aW9ucyksXG4gICAgICAgICAgICBmZXRjaE1ldGE6IGFjdGlvbi5tZXRhID8/IG51bGwsXG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgICAgIGRhdGFVcGRhdGVDb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGRhdGFVcGRhdGVkQXQ6IGFjdGlvbi5kYXRhVXBkYXRlZEF0ID8/IERhdGUubm93KCksXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAuLi4oIWFjdGlvbi5tYW51YWwgJiYge1xuICAgICAgICAgICAgICBmZXRjaFN0YXR1czogJ2lkbGUnLFxuICAgICAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICAgICAgZmV0Y2hGYWlsdXJlUmVhc29uOiBudWxsLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBhY3Rpb24uZXJyb3JcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy4jcmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuI3JldmVydFN0YXRlLCBmZXRjaFN0YXR1czogJ2lkbGUnIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgICAgZXJyb3JVcGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlUmVhc29uOiBlcnJvcixcbiAgICAgICAgICAgIGZldGNoU3RhdHVzOiAnaWRsZScsXG4gICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdpbnZhbGlkYXRlJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBpc0ludmFsaWRhdGVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIC4uLmFjdGlvbi5zdGF0ZSxcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSlcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5vYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIub25RdWVyeVVwZGF0ZSgpXG4gICAgICB9KVxuXG4gICAgICB0aGlzLiNjYWNoZS5ub3RpZnkoeyBxdWVyeTogdGhpcywgdHlwZTogJ3VwZGF0ZWQnLCBhY3Rpb24gfSlcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaFN0YXRlPFxuICBUUXVlcnlGbkRhdGEsXG4gIFRFcnJvcixcbiAgVERhdGEsXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5LFxuPihcbiAgZGF0YTogVERhdGEgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IFF1ZXJ5T3B0aW9uczxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVERhdGEsIFRRdWVyeUtleT4sXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICBmZXRjaEZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgZmV0Y2hTdGF0dXM6IGNhbkZldGNoKG9wdGlvbnMubmV0d29ya01vZGUpID8gJ2ZldGNoaW5nJyA6ICdwYXVzZWQnLFxuICAgIC4uLihkYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICh7XG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgIH0gYXMgY29uc3QpKSxcbiAgfSBhcyBjb25zdFxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0U3RhdGU8XG4gIFRRdWVyeUZuRGF0YSxcbiAgVEVycm9yLFxuICBURGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXksXG4+KFxuICBvcHRpb25zOiBRdWVyeU9wdGlvbnM8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFREYXRhLCBUUXVlcnlLZXk+LFxuKTogUXVlcnlTdGF0ZTxURGF0YSwgVEVycm9yPiB7XG4gIGNvbnN0IGRhdGEgPVxuICAgIHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IChvcHRpb25zLmluaXRpYWxEYXRhIGFzIEluaXRpYWxEYXRhRnVuY3Rpb248VERhdGE+KSgpXG4gICAgICA6IG9wdGlvbnMuaW5pdGlhbERhdGFcblxuICBjb25zdCBoYXNEYXRhID0gZGF0YSAhPT0gdW5kZWZpbmVkXG5cbiAgY29uc3QgaW5pdGlhbERhdGFVcGRhdGVkQXQgPSBoYXNEYXRhXG4gICAgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAob3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCBhcyAoKSA9PiBudW1iZXIgfCB1bmRlZmluZWQpKClcbiAgICAgIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdFxuICAgIDogMFxuXG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IChpbml0aWFsRGF0YVVwZGF0ZWRBdCA/PyBEYXRlLm5vdygpKSA6IDAsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgZXJyb3JVcGRhdGVDb3VudDogMCxcbiAgICBlcnJvclVwZGF0ZWRBdDogMCxcbiAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICBmZXRjaEZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgZmV0Y2hNZXRhOiBudWxsLFxuICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogaGFzRGF0YSA/ICdzdWNjZXNzJyA6ICdwZW5kaW5nJyxcbiAgICBmZXRjaFN0YXR1czogJ2lkbGUnLFxuICB9XG59XG4iLCJpbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJ1xuaW1wb3J0IHsgUmVtb3ZhYmxlIH0gZnJvbSAnLi9yZW1vdmFibGUnXG5pbXBvcnQgeyBjcmVhdGVSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJ1xuaW1wb3J0IHR5cGUge1xuICBEZWZhdWx0RXJyb3IsXG4gIE11dGF0aW9uTWV0YSxcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblN0YXR1cyxcbn0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB0eXBlIHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSdcbmltcG9ydCB0eXBlIHsgTXV0YXRpb25PYnNlcnZlciB9IGZyb20gJy4vbXV0YXRpb25PYnNlcnZlcidcbmltcG9ydCB0eXBlIHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcidcblxuLy8gVFlQRVNcblxuaW50ZXJmYWNlIE11dGF0aW9uQ29uZmlnPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiB7XG4gIG11dGF0aW9uSWQ6IG51bWJlclxuICBtdXRhdGlvbkNhY2hlOiBNdXRhdGlvbkNhY2hlXG4gIG9wdGlvbnM6IE11dGF0aW9uT3B0aW9uczxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD5cbiAgc3RhdGU/OiBNdXRhdGlvblN0YXRlPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGF0aW9uU3RhdGU8XG4gIFREYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBUVmFyaWFibGVzID0gdW5rbm93bixcbiAgVENvbnRleHQgPSB1bmtub3duLFxuPiB7XG4gIGNvbnRleHQ6IFRDb250ZXh0IHwgdW5kZWZpbmVkXG4gIGRhdGE6IFREYXRhIHwgdW5kZWZpbmVkXG4gIGVycm9yOiBURXJyb3IgfCBudWxsXG4gIGZhaWx1cmVDb3VudDogbnVtYmVyXG4gIGZhaWx1cmVSZWFzb246IFRFcnJvciB8IG51bGxcbiAgaXNQYXVzZWQ6IGJvb2xlYW5cbiAgc3RhdHVzOiBNdXRhdGlvblN0YXR1c1xuICB2YXJpYWJsZXM6IFRWYXJpYWJsZXMgfCB1bmRlZmluZWRcbiAgc3VibWl0dGVkQXQ6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgRmFpbGVkQWN0aW9uPFRFcnJvcj4ge1xuICB0eXBlOiAnZmFpbGVkJ1xuICBmYWlsdXJlQ291bnQ6IG51bWJlclxuICBlcnJvcjogVEVycm9yIHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgUGVuZGluZ0FjdGlvbjxUVmFyaWFibGVzLCBUQ29udGV4dD4ge1xuICB0eXBlOiAncGVuZGluZydcbiAgaXNQYXVzZWQ6IGJvb2xlYW5cbiAgdmFyaWFibGVzPzogVFZhcmlhYmxlc1xuICBjb250ZXh0PzogVENvbnRleHRcbn1cblxuaW50ZXJmYWNlIFN1Y2Nlc3NBY3Rpb248VERhdGE+IHtcbiAgdHlwZTogJ3N1Y2Nlc3MnXG4gIGRhdGE6IFREYXRhXG59XG5cbmludGVyZmFjZSBFcnJvckFjdGlvbjxURXJyb3I+IHtcbiAgdHlwZTogJ2Vycm9yJ1xuICBlcnJvcjogVEVycm9yXG59XG5cbmludGVyZmFjZSBQYXVzZUFjdGlvbiB7XG4gIHR5cGU6ICdwYXVzZSdcbn1cblxuaW50ZXJmYWNlIENvbnRpbnVlQWN0aW9uIHtcbiAgdHlwZTogJ2NvbnRpbnVlJ1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb248VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+ID1cbiAgfCBDb250aW51ZUFjdGlvblxuICB8IEVycm9yQWN0aW9uPFRFcnJvcj5cbiAgfCBGYWlsZWRBY3Rpb248VEVycm9yPlxuICB8IFBlbmRpbmdBY3Rpb248VFZhcmlhYmxlcywgVENvbnRleHQ+XG4gIHwgUGF1c2VBY3Rpb25cbiAgfCBTdWNjZXNzQWN0aW9uPFREYXRhPlxuXG4vLyBDTEFTU1xuXG5leHBvcnQgY2xhc3MgTXV0YXRpb248XG4gIFREYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBUVmFyaWFibGVzID0gdW5rbm93bixcbiAgVENvbnRleHQgPSB1bmtub3duLFxuPiBleHRlbmRzIFJlbW92YWJsZSB7XG4gIHN0YXRlOiBNdXRhdGlvblN0YXRlPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PlxuICBvcHRpb25zITogTXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PlxuICByZWFkb25seSBtdXRhdGlvbklkOiBudW1iZXJcblxuICAjb2JzZXJ2ZXJzOiBBcnJheTxNdXRhdGlvbk9ic2VydmVyPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0Pj5cbiAgI211dGF0aW9uQ2FjaGU6IE11dGF0aW9uQ2FjaGVcbiAgI3JldHJ5ZXI/OiBSZXRyeWVyPFREYXRhPlxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTXV0YXRpb25Db25maWc8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWRcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGVcbiAgICB0aGlzLiNvYnNlcnZlcnMgPSBbXVxuICAgIHRoaXMuc3RhdGUgPSBjb25maWcuc3RhdGUgfHwgZ2V0RGVmYXVsdFN0YXRlKClcblxuICAgIHRoaXMuc2V0T3B0aW9ucyhjb25maWcub3B0aW9ucylcbiAgICB0aGlzLnNjaGVkdWxlR2MoKVxuICB9XG5cbiAgc2V0T3B0aW9ucyhcbiAgICBvcHRpb25zOiBNdXRhdGlvbk9wdGlvbnM8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICB0aGlzLnVwZGF0ZUdjVGltZSh0aGlzLm9wdGlvbnMuZ2NUaW1lKVxuICB9XG5cbiAgZ2V0IG1ldGEoKTogTXV0YXRpb25NZXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1ldGFcbiAgfVxuXG4gIGFkZE9ic2VydmVyKG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyPGFueSwgYW55LCBhbnksIGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI29ic2VydmVycy5pbmNsdWRlcyhvYnNlcnZlcikpIHtcbiAgICAgIHRoaXMuI29ic2VydmVycy5wdXNoKG9ic2VydmVyKVxuXG4gICAgICAvLyBTdG9wIHRoZSBtdXRhdGlvbiBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KClcblxuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJBZGRlZCcsXG4gICAgICAgIG11dGF0aW9uOiB0aGlzLFxuICAgICAgICBvYnNlcnZlcixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI8YW55LCBhbnksIGFueSwgYW55Pik6IHZvaWQge1xuICAgIHRoaXMuI29ic2VydmVycyA9IHRoaXMuI29ic2VydmVycy5maWx0ZXIoKHgpID0+IHggIT09IG9ic2VydmVyKVxuXG4gICAgdGhpcy5zY2hlZHVsZUdjKClcblxuICAgIHRoaXMuI211dGF0aW9uQ2FjaGUubm90aWZ5KHtcbiAgICAgIHR5cGU6ICdvYnNlcnZlclJlbW92ZWQnLFxuICAgICAgbXV0YXRpb246IHRoaXMsXG4gICAgICBvYnNlcnZlcixcbiAgICB9KVxuICB9XG5cbiAgcHJvdGVjdGVkIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy4jb2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzID09PSAncGVuZGluZycpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUdjKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI211dGF0aW9uQ2FjaGUucmVtb3ZlKHRoaXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udGludWUoKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI3JldHJ5ZXI/LmNvbnRpbnVlKCkgPz9cbiAgICAgIC8vIGNvbnRpbnVpbmcgYSBtdXRhdGlvbiBhc3N1bWVzIHRoYXQgdmFyaWFibGVzIGFyZSBzZXQsIG11dGF0aW9uIG11c3QgaGF2ZSBiZWVuIGRlaHlkcmF0ZWQgYmVmb3JlXG4gICAgICB0aGlzLmV4ZWN1dGUodGhpcy5zdGF0ZS52YXJpYWJsZXMhKVxuICAgIClcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGUodmFyaWFibGVzOiBUVmFyaWFibGVzKTogUHJvbWlzZTxURGF0YT4ge1xuICAgIGNvbnN0IG9uQ29udGludWUgPSAoKSA9PiB7XG4gICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6ICdjb250aW51ZScgfSlcbiAgICB9XG5cbiAgICB0aGlzLiNyZXRyeWVyID0gY3JlYXRlUmV0cnllcih7XG4gICAgICBmbjogKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignTm8gbXV0YXRpb25GbiBmb3VuZCcpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMubXV0YXRpb25Gbih2YXJpYWJsZXMpXG4gICAgICB9LFxuICAgICAgb25GYWlsOiAoZmFpbHVyZUNvdW50LCBlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6ICdmYWlsZWQnLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pXG4gICAgICB9LFxuICAgICAgb25QYXVzZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6ICdwYXVzZScgfSlcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlLFxuICAgICAgcmV0cnk6IHRoaXMub3B0aW9ucy5yZXRyeSA/PyAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgICBuZXR3b3JrTW9kZTogdGhpcy5vcHRpb25zLm5ldHdvcmtNb2RlLFxuICAgICAgY2FuUnVuOiAoKSA9PiB0aGlzLiNtdXRhdGlvbkNhY2hlLmNhblJ1bih0aGlzKSxcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzdG9yZWQgPSB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXG4gICAgY29uc3QgaXNQYXVzZWQgPSAhdGhpcy4jcmV0cnllci5jYW5TdGFydCgpXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHJlc3RvcmVkKSB7XG4gICAgICAgIC8vIERpc3BhdGNoIGNvbnRpbnVlIGFjdGlvbiB0byB1bnBhdXNlIHJlc3RvcmVkIG11dGF0aW9uXG4gICAgICAgIG9uQ29udGludWUoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiAncGVuZGluZycsIHZhcmlhYmxlcywgaXNQYXVzZWQgfSlcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlPy4oXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgIHRoaXMgYXMgTXV0YXRpb248dW5rbm93biwgdW5rbm93biwgdW5rbm93biwgdW5rbm93bj4sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMub3B0aW9ucy5vbk11dGF0ZT8uKHZhcmlhYmxlcylcbiAgICAgICAgaWYgKGNvbnRleHQgIT09IHRoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIHRoaXMuI2Rpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwZW5kaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBpc1BhdXNlZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jcmV0cnllci5zdGFydCgpXG5cbiAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzPy4oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzIGFzIE11dGF0aW9uPHVua25vd24sIHVua25vd24sIHVua25vd24sIHVua25vd24+LFxuICAgICAgKVxuXG4gICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCB0aGlzLnN0YXRlLmNvbnRleHQhKVxuXG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICBkYXRhLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzIGFzIE11dGF0aW9uPHVua25vd24sIHVua25vd24sIHVua25vd24sIHVua25vd24+LFxuICAgICAgKVxuXG4gICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25TZXR0bGVkPy4oZGF0YSwgbnVsbCwgdmFyaWFibGVzLCB0aGlzLnN0YXRlLmNvbnRleHQpXG5cbiAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogJ3N1Y2Nlc3MnLCBkYXRhIH0pXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yIGFzIGFueSxcbiAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICAgIHRoaXMgYXMgTXV0YXRpb248dW5rbm93biwgdW5rbm93biwgdW5rbm93biwgdW5rbm93bj4sXG4gICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yIGFzIFRFcnJvcixcbiAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICApXG5cbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBlcnJvciBhcyBhbnksXG4gICAgICAgICAgdGhpcy5zdGF0ZS52YXJpYWJsZXMsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICAgIHRoaXMgYXMgTXV0YXRpb248dW5rbm93biwgdW5rbm93biwgdW5rbm93biwgdW5rbm93bj4sXG4gICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25TZXR0bGVkPy4oXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGVycm9yIGFzIFRFcnJvcixcbiAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICApXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6ICdlcnJvcicsIGVycm9yOiBlcnJvciBhcyBURXJyb3IgfSlcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ydW5OZXh0KHRoaXMpXG4gICAgfVxuICB9XG5cbiAgI2Rpc3BhdGNoKGFjdGlvbjogQWN0aW9uPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0Pik6IHZvaWQge1xuICAgIGNvbnN0IHJlZHVjZXIgPSAoXG4gICAgICBzdGF0ZTogTXV0YXRpb25TdGF0ZTxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD4sXG4gICAgKTogTXV0YXRpb25TdGF0ZTxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD4gPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZhaWx1cmVDb3VudDogYWN0aW9uLmZhaWx1cmVDb3VudCxcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBpc1BhdXNlZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBjb250ZXh0OiBhY3Rpb24uY29udGV4dCxcbiAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGlzUGF1c2VkOiBhY3Rpb24uaXNQYXVzZWQsXG4gICAgICAgICAgICBzdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgICAgICAgIHZhcmlhYmxlczogYWN0aW9uLnZhcmlhYmxlcyxcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgICBmYWlsdXJlUmVhc29uOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogYWN0aW9uLmVycm9yLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSlcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jb2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKVxuICAgICAgfSlcbiAgICAgIHRoaXMuI211dGF0aW9uQ2FjaGUubm90aWZ5KHtcbiAgICAgICAgbXV0YXRpb246IHRoaXMsXG4gICAgICAgIHR5cGU6ICd1cGRhdGVkJyxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGU8XG4gIFREYXRhLFxuICBURXJyb3IsXG4gIFRWYXJpYWJsZXMsXG4gIFRDb250ZXh0LFxuPigpOiBNdXRhdGlvblN0YXRlPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiAnaWRsZScsXG4gICAgdmFyaWFibGVzOiB1bmRlZmluZWQsXG4gICAgc3VibWl0dGVkQXQ6IDAsXG4gIH1cbn1cbiIsImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJ1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcidcbmltcG9ydCB7IGZldGNoU3RhdGUgfSBmcm9tICcuL3F1ZXJ5J1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnXG5pbXBvcnQgeyBwZW5kaW5nVGhlbmFibGUgfSBmcm9tICcuL3RoZW5hYmxlJ1xuaW1wb3J0IHtcbiAgaXNTZXJ2ZXIsXG4gIGlzVmFsaWRUaW1lb3V0LFxuICBub29wLFxuICByZXBsYWNlRGF0YSxcbiAgcmVzb2x2ZUVuYWJsZWQsXG4gIHJlc29sdmVTdGFsZVRpbWUsXG4gIHNoYWxsb3dFcXVhbE9iamVjdHMsXG4gIHRpbWVVbnRpbFN0YWxlLFxufSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBGZXRjaE9wdGlvbnMsIFF1ZXJ5LCBRdWVyeVN0YXRlIH0gZnJvbSAnLi9xdWVyeSdcbmltcG9ydCB0eXBlIHsgUXVlcnlDbGllbnQgfSBmcm9tICcuL3F1ZXJ5Q2xpZW50J1xuaW1wb3J0IHR5cGUgeyBQZW5kaW5nVGhlbmFibGUsIFRoZW5hYmxlIH0gZnJvbSAnLi90aGVuYWJsZSdcbmltcG9ydCB0eXBlIHtcbiAgRGVmYXVsdEVycm9yLFxuICBEZWZhdWx0ZWRRdWVyeU9ic2VydmVyT3B0aW9ucyxcbiAgUGxhY2Vob2xkZXJEYXRhRnVuY3Rpb24sXG4gIFF1ZXJ5S2V5LFxuICBRdWVyeU9ic2VydmVyQmFzZVJlc3VsdCxcbiAgUXVlcnlPYnNlcnZlck9wdGlvbnMsXG4gIFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQsXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUmVmZXRjaE9wdGlvbnMsXG59IGZyb20gJy4vdHlwZXMnXG5cbnR5cGUgUXVlcnlPYnNlcnZlckxpc3RlbmVyPFREYXRhLCBURXJyb3I+ID0gKFxuICByZXN1bHQ6IFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQ8VERhdGEsIFRFcnJvcj4sXG4pID0+IHZvaWRcblxuaW50ZXJmYWNlIE9ic2VydmVyRmV0Y2hPcHRpb25zIGV4dGVuZHMgRmV0Y2hPcHRpb25zIHtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlPYnNlcnZlcjxcbiAgVFF1ZXJ5Rm5EYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBURGF0YSA9IFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5RGF0YSA9IFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSBRdWVyeUtleSxcbj4gZXh0ZW5kcyBTdWJzY3JpYmFibGU8UXVlcnlPYnNlcnZlckxpc3RlbmVyPFREYXRhLCBURXJyb3I+PiB7XG4gICNjbGllbnQ6IFF1ZXJ5Q2xpZW50XG4gICNjdXJyZW50UXVlcnk6IFF1ZXJ5PFRRdWVyeUZuRGF0YSwgVEVycm9yLCBUUXVlcnlEYXRhLCBUUXVlcnlLZXk+ID0gdW5kZWZpbmVkIVxuICAjY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlOiBRdWVyeVN0YXRlPFRRdWVyeURhdGEsIFRFcnJvcj4gPSB1bmRlZmluZWQhXG4gICNjdXJyZW50UmVzdWx0OiBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+ID0gdW5kZWZpbmVkIVxuICAjY3VycmVudFJlc3VsdFN0YXRlPzogUXVlcnlTdGF0ZTxUUXVlcnlEYXRhLCBURXJyb3I+XG4gICNjdXJyZW50UmVzdWx0T3B0aW9ucz86IFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zPFxuICAgIFRRdWVyeUZuRGF0YSxcbiAgICBURXJyb3IsXG4gICAgVERhdGEsXG4gICAgVFF1ZXJ5RGF0YSxcbiAgICBUUXVlcnlLZXlcbiAgPlxuICAjY3VycmVudFRoZW5hYmxlOiBUaGVuYWJsZTxURGF0YT5cbiAgI3NlbGVjdEVycm9yOiBURXJyb3IgfCBudWxsXG4gICNzZWxlY3RGbj86IChkYXRhOiBUUXVlcnlEYXRhKSA9PiBURGF0YVxuICAjc2VsZWN0UmVzdWx0PzogVERhdGFcbiAgLy8gVGhpcyBwcm9wZXJ0eSBrZWVwcyB0cmFjayBvZiB0aGUgbGFzdCBxdWVyeSB3aXRoIGRlZmluZWQgZGF0YS5cbiAgLy8gSXQgd2lsbCBiZSB1c2VkIHRvIHBhc3MgdGhlIHByZXZpb3VzIGRhdGEgYW5kIHF1ZXJ5IHRvIHRoZSBwbGFjZWhvbGRlciBmdW5jdGlvbiBiZXR3ZWVuIHJlbmRlcnMuXG4gICNsYXN0UXVlcnlXaXRoRGVmaW5lZERhdGE/OiBRdWVyeTxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVFF1ZXJ5RGF0YSwgVFF1ZXJ5S2V5PlxuICAjc3RhbGVUaW1lb3V0SWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PlxuICAjcmVmZXRjaEludGVydmFsSWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD5cbiAgI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWw/OiBudW1iZXIgfCBmYWxzZVxuICAjdHJhY2tlZFByb3BzID0gbmV3IFNldDxrZXlvZiBRdWVyeU9ic2VydmVyUmVzdWx0PigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xpZW50OiBRdWVyeUNsaWVudCxcbiAgICBwdWJsaWMgb3B0aW9uczogUXVlcnlPYnNlcnZlck9wdGlvbnM8XG4gICAgICBUUXVlcnlGbkRhdGEsXG4gICAgICBURXJyb3IsXG4gICAgICBURGF0YSxcbiAgICAgIFRRdWVyeURhdGEsXG4gICAgICBUUXVlcnlLZXlcbiAgICA+LFxuICApIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLiNjbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLiNzZWxlY3RFcnJvciA9IG51bGxcbiAgICB0aGlzLiNjdXJyZW50VGhlbmFibGUgPSBwZW5kaW5nVGhlbmFibGUoKVxuICAgIGlmICghdGhpcy5vcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgICB0aGlzLiNjdXJyZW50VGhlbmFibGUucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoJ2V4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyIGZlYXR1cmUgZmxhZyBpcyBub3QgZW5hYmxlZCcpLFxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuYmluZE1ldGhvZHMoKVxuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKVxuICB9XG5cbiAgcHJvdGVjdGVkIGJpbmRNZXRob2RzKCk6IHZvaWQge1xuICAgIHRoaXMucmVmZXRjaCA9IHRoaXMucmVmZXRjaC5iaW5kKHRoaXMpXG4gIH1cblxuICBwcm90ZWN0ZWQgb25TdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLnNpemUgPT09IDEpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRRdWVyeS5hZGRPYnNlcnZlcih0aGlzKVxuXG4gICAgICBpZiAoc2hvdWxkRmV0Y2hPbk1vdW50KHRoaXMuI2N1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVSZXN1bHQoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLiN1cGRhdGVUaW1lcnMoKVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICBzaG91bGRGZXRjaE9uUmVjb25uZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCxcbiAgICApXG4gIH1cblxuICBzaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24oXG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnksXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMucmVmZXRjaE9uV2luZG93Rm9jdXMsXG4gICAgKVxuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IG5ldyBTZXQoKVxuICAgIHRoaXMuI2NsZWFyU3RhbGVUaW1lb3V0KClcbiAgICB0aGlzLiNjbGVhclJlZmV0Y2hJbnRlcnZhbCgpXG4gICAgdGhpcy4jY3VycmVudFF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpXG4gIH1cblxuICBzZXRPcHRpb25zKFxuICAgIG9wdGlvbnM6IFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zPFxuICAgICAgVFF1ZXJ5Rm5EYXRhLFxuICAgICAgVEVycm9yLFxuICAgICAgVERhdGEsXG4gICAgICBUUXVlcnlEYXRhLFxuICAgICAgVFF1ZXJ5S2V5XG4gICAgPixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcbiAgICBjb25zdCBwcmV2UXVlcnkgPSB0aGlzLiNjdXJyZW50UXVlcnlcblxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuI2NsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09ICdib29sZWFuJyAmJlxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgcmVzb2x2ZUVuYWJsZWQodGhpcy5vcHRpb25zLmVuYWJsZWQsIHRoaXMuI2N1cnJlbnRRdWVyeSkgIT09XG4gICAgICAgICdib29sZWFuJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgZW5hYmxlZCB0byBiZSBhIGJvb2xlYW4gb3IgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYSBib29sZWFuJyxcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLiN1cGRhdGVRdWVyeSgpXG4gICAgdGhpcy4jY3VycmVudFF1ZXJ5LnNldE9wdGlvbnModGhpcy5vcHRpb25zKVxuXG4gICAgaWYgKFxuICAgICAgcHJldk9wdGlvbnMuX2RlZmF1bHRlZCAmJlxuICAgICAgIXNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5vcHRpb25zLCBwcmV2T3B0aW9ucylcbiAgICApIHtcbiAgICAgIHRoaXMuI2NsaWVudC5nZXRRdWVyeUNhY2hlKCkubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyT3B0aW9uc1VwZGF0ZWQnLFxuICAgICAgICBxdWVyeTogdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICBvYnNlcnZlcjogdGhpcyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKClcblxuICAgIC8vIEZldGNoIGlmIHRoZXJlIGFyZSBzdWJzY3JpYmVyc1xuICAgIGlmIChcbiAgICAgIG1vdW50ZWQgJiZcbiAgICAgIHNob3VsZEZldGNoT3B0aW9uYWxseShcbiAgICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICBwcmV2UXVlcnksXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgcHJldk9wdGlvbnMsXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSByZXN1bHRcbiAgICB0aGlzLnVwZGF0ZVJlc3VsdCgpXG5cbiAgICAvLyBVcGRhdGUgc3RhbGUgaW50ZXJ2YWwgaWYgbmVlZGVkXG4gICAgaWYgKFxuICAgICAgbW91bnRlZCAmJlxuICAgICAgKHRoaXMuI2N1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8XG4gICAgICAgIHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpICE9PVxuICAgICAgICAgIHJlc29sdmVFbmFibGVkKHByZXZPcHRpb25zLmVuYWJsZWQsIHRoaXMuI2N1cnJlbnRRdWVyeSkgfHxcbiAgICAgICAgcmVzb2x2ZVN0YWxlVGltZSh0aGlzLm9wdGlvbnMuc3RhbGVUaW1lLCB0aGlzLiNjdXJyZW50UXVlcnkpICE9PVxuICAgICAgICAgIHJlc29sdmVTdGFsZVRpbWUocHJldk9wdGlvbnMuc3RhbGVUaW1lLCB0aGlzLiNjdXJyZW50UXVlcnkpKVxuICAgICkge1xuICAgICAgdGhpcy4jdXBkYXRlU3RhbGVUaW1lb3V0KClcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0UmVmZXRjaEludGVydmFsID0gdGhpcy4jY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpXG5cbiAgICAvLyBVcGRhdGUgcmVmZXRjaCBpbnRlcnZhbCBpZiBuZWVkZWRcbiAgICBpZiAoXG4gICAgICBtb3VudGVkICYmXG4gICAgICAodGhpcy4jY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHxcbiAgICAgICAgcmVzb2x2ZUVuYWJsZWQodGhpcy5vcHRpb25zLmVuYWJsZWQsIHRoaXMuI2N1cnJlbnRRdWVyeSkgIT09XG4gICAgICAgICAgcmVzb2x2ZUVuYWJsZWQocHJldk9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSB8fFxuICAgICAgICBuZXh0UmVmZXRjaEludGVydmFsICE9PSB0aGlzLiNjdXJyZW50UmVmZXRjaEludGVydmFsKVxuICAgICkge1xuICAgICAgdGhpcy4jdXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRSZWZldGNoSW50ZXJ2YWwpXG4gICAgfVxuICB9XG5cbiAgZ2V0T3B0aW1pc3RpY1Jlc3VsdChcbiAgICBvcHRpb25zOiBEZWZhdWx0ZWRRdWVyeU9ic2VydmVyT3B0aW9uczxcbiAgICAgIFRRdWVyeUZuRGF0YSxcbiAgICAgIFRFcnJvcixcbiAgICAgIFREYXRhLFxuICAgICAgVFF1ZXJ5RGF0YSxcbiAgICAgIFRRdWVyeUtleVxuICAgID4sXG4gICk6IFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQ8VERhdGEsIFRFcnJvcj4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIG9wdGlvbnMpXG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNyZWF0ZVJlc3VsdChxdWVyeSwgb3B0aW9ucylcblxuICAgIGlmIChzaG91bGRBc3NpZ25PYnNlcnZlckN1cnJlbnRQcm9wZXJ0aWVzKHRoaXMsIHJlc3VsdCkpIHtcbiAgICAgIC8vIHRoaXMgYXNzaWducyB0aGUgb3B0aW1pc3RpYyByZXN1bHQgdG8gdGhlIGN1cnJlbnQgT2JzZXJ2ZXJcbiAgICAgIC8vIGJlY2F1c2UgaWYgdGhlIHF1ZXJ5IGZ1bmN0aW9uIGNoYW5nZXMsIHVzZVF1ZXJ5IHdpbGwgYmUgcGVyZm9ybWluZ1xuICAgICAgLy8gYW4gZWZmZWN0IHdoZXJlIGl0IHdvdWxkIGZldGNoIGFnYWluLlxuICAgICAgLy8gV2hlbiB0aGUgZmV0Y2ggZmluaXNoZXMsIHdlIHBlcmZvcm0gYSBkZWVwIGRhdGEgY2xvbmluZyBpbiBvcmRlclxuICAgICAgLy8gdG8gcmV1c2Ugb2JqZWN0cyByZWZlcmVuY2VzLiBUaGlzIGRlZXAgZGF0YSBjbG9uZSBpcyBwZXJmb3JtZWQgYWdhaW5zdFxuICAgICAgLy8gdGhlIGBvYnNlcnZlci5jdXJyZW50UmVzdWx0LmRhdGFgIHByb3BlcnR5XG4gICAgICAvLyBXaGVuIFF1ZXJ5S2V5IGNoYW5nZXMsIHdlIHJlZnJlc2ggdGhlIHF1ZXJ5IGFuZCBnZXQgbmV3IGBvcHRpbWlzdGljYFxuICAgICAgLy8gcmVzdWx0LCB3aGlsZSB3ZSBsZWF2ZSB0aGUgYG9ic2VydmVyLmN1cnJlbnRSZXN1bHRgLCBzbyB3aGVuIG5ldyBkYXRhXG4gICAgICAvLyBhcnJpdmVzLCBpdCBmaW5kcyB0aGUgb2xkIGBvYnNlcnZlci5jdXJyZW50UmVzdWx0YCB3aGljaCBpcyByZWxhdGVkXG4gICAgICAvLyB0byB0aGUgb2xkIFF1ZXJ5S2V5LiBXaGljaCBtZWFucyB0aGF0IGN1cnJlbnRSZXN1bHQgYW5kIHNlbGVjdERhdGEgYXJlXG4gICAgICAvLyBvdXQgb2Ygc3luYyBhbHJlYWR5LlxuICAgICAgLy8gVG8gc29sdmUgdGhpcywgd2UgbW92ZSB0aGUgY3Vyc29yIG9mIHRoZSBjdXJyZW50UmVzdWx0IGV2ZXJ5IHRpbWVcbiAgICAgIC8vIGFuIG9ic2VydmVyIHJlYWRzIGFuIG9wdGltaXN0aWMgdmFsdWUuXG5cbiAgICAgIC8vIFdoZW4ga2VlcGluZyB0aGUgcHJldmlvdXMgZGF0YSwgdGhlIHJlc3VsdCBkb2Vzbid0IGNoYW5nZSB1bnRpbCBuZXdcbiAgICAgIC8vIGRhdGEgYXJyaXZlcy5cbiAgICAgIHRoaXMuI2N1cnJlbnRSZXN1bHQgPSByZXN1bHRcbiAgICAgIHRoaXMuI2N1cnJlbnRSZXN1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zXG4gICAgICB0aGlzLiNjdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLiNjdXJyZW50UXVlcnkuc3RhdGVcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZ2V0Q3VycmVudFJlc3VsdCgpOiBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+IHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdFxuICB9XG5cbiAgdHJhY2tSZXN1bHQoXG4gICAgcmVzdWx0OiBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+LFxuICAgIG9uUHJvcFRyYWNrZWQ/OiAoa2V5OiBrZXlvZiBRdWVyeU9ic2VydmVyUmVzdWx0KSA9PiB2b2lkLFxuICApOiBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+IHtcbiAgICByZXR1cm4gbmV3IFByb3h5KHJlc3VsdCwge1xuICAgICAgZ2V0OiAodGFyZ2V0LCBrZXkpID0+IHtcbiAgICAgICAgdGhpcy50cmFja1Byb3Aoa2V5IGFzIGtleW9mIFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQpXG4gICAgICAgIG9uUHJvcFRyYWNrZWQ/LihrZXkgYXMga2V5b2YgUXVlcnlPYnNlcnZlclJlc3VsdClcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5KVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgdHJhY2tQcm9wKGtleToga2V5b2YgUXVlcnlPYnNlcnZlclJlc3VsdCkge1xuICAgIHRoaXMuI3RyYWNrZWRQcm9wcy5hZGQoa2V5KVxuICB9XG5cbiAgZ2V0Q3VycmVudFF1ZXJ5KCk6IFF1ZXJ5PFRRdWVyeUZuRGF0YSwgVEVycm9yLCBUUXVlcnlEYXRhLCBUUXVlcnlLZXk+IHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFF1ZXJ5XG4gIH1cblxuICByZWZldGNoKHsgLi4ub3B0aW9ucyB9OiBSZWZldGNoT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxcbiAgICBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+XG4gID4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSlcbiAgfVxuXG4gIGZldGNoT3B0aW1pc3RpYyhcbiAgICBvcHRpb25zOiBRdWVyeU9ic2VydmVyT3B0aW9uczxcbiAgICAgIFRRdWVyeUZuRGF0YSxcbiAgICAgIFRFcnJvcixcbiAgICAgIFREYXRhLFxuICAgICAgVFF1ZXJ5RGF0YSxcbiAgICAgIFRRdWVyeUtleVxuICAgID4sXG4gICk6IFByb21pc2U8UXVlcnlPYnNlcnZlclJlc3VsdDxURGF0YSwgVEVycm9yPj4ge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNjbGllbnRcbiAgICAgIC5nZXRRdWVyeUNhY2hlKClcbiAgICAgIC5idWlsZCh0aGlzLiNjbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpXG5cbiAgICByZXR1cm4gcXVlcnkuZmV0Y2goKS50aGVuKCgpID0+IHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKSlcbiAgfVxuXG4gIHByb3RlY3RlZCBmZXRjaChcbiAgICBmZXRjaE9wdGlvbnM6IE9ic2VydmVyRmV0Y2hPcHRpb25zLFxuICApOiBQcm9taXNlPFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQ8VERhdGEsIFRFcnJvcj4+IHtcbiAgICByZXR1cm4gdGhpcy4jZXhlY3V0ZUZldGNoKHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIGNhbmNlbFJlZmV0Y2g6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoID8/IHRydWUsXG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVJlc3VsdCgpXG4gICAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdFxuICAgIH0pXG4gIH1cblxuICAjZXhlY3V0ZUZldGNoKFxuICAgIGZldGNoT3B0aW9ucz86IE9taXQ8T2JzZXJ2ZXJGZXRjaE9wdGlvbnMsICdpbml0aWFsUHJvbWlzZSc+LFxuICApOiBQcm9taXNlPFRRdWVyeURhdGEgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBNYWtlIHN1cmUgd2UgcmVmZXJlbmNlIHRoZSBsYXRlc3QgcXVlcnkgYXMgdGhlIGN1cnJlbnQgb25lIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgdGhpcy4jdXBkYXRlUXVlcnkoKVxuXG4gICAgLy8gRmV0Y2hcbiAgICBsZXQgcHJvbWlzZTogUHJvbWlzZTxUUXVlcnlEYXRhIHwgdW5kZWZpbmVkPiA9IHRoaXMuI2N1cnJlbnRRdWVyeS5mZXRjaChcbiAgICAgIHRoaXMub3B0aW9ucyBhcyBRdWVyeU9wdGlvbnM8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFRRdWVyeURhdGEsIFRRdWVyeUtleT4sXG4gICAgICBmZXRjaE9wdGlvbnMsXG4gICAgKVxuXG4gICAgaWYgKCFmZXRjaE9wdGlvbnM/LnRocm93T25FcnJvcikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcClcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgI3VwZGF0ZVN0YWxlVGltZW91dCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjbGVhclN0YWxlVGltZW91dCgpXG4gICAgY29uc3Qgc3RhbGVUaW1lID0gcmVzb2x2ZVN0YWxlVGltZShcbiAgICAgIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUsXG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnksXG4gICAgKVxuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuI2N1cnJlbnRSZXN1bHQuaXNTdGFsZSB8fCAhaXNWYWxpZFRpbWVvdXQoc3RhbGVUaW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGltZSA9IHRpbWVVbnRpbFN0YWxlKHRoaXMuI2N1cnJlbnRSZXN1bHQuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKVxuXG4gICAgLy8gVGhlIHRpbWVvdXQgaXMgc29tZXRpbWVzIHRyaWdnZXJlZCAxIG1zIGJlZm9yZSB0aGUgc3RhbGUgdGltZSBleHBpcmF0aW9uLlxuICAgIC8vIFRvIG1pdGlnYXRlIHRoaXMgaXNzdWUgd2UgYWx3YXlzIGFkZCAxIG1zIHRvIHRoZSB0aW1lb3V0LlxuICAgIGNvbnN0IHRpbWVvdXQgPSB0aW1lICsgMVxuXG4gICAgdGhpcy4jc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy4jY3VycmVudFJlc3VsdC5pc1N0YWxlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUmVzdWx0KClcbiAgICAgIH1cbiAgICB9LCB0aW1lb3V0KVxuICB9XG5cbiAgI2NvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwodGhpcy4jY3VycmVudFF1ZXJ5KVxuICAgICAgICA6IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwpID8/IGZhbHNlXG4gICAgKVxuICB9XG5cbiAgI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0SW50ZXJ2YWw6IG51bWJlciB8IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy4jY2xlYXJSZWZldGNoSW50ZXJ2YWwoKVxuXG4gICAgdGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9IG5leHRJbnRlcnZhbFxuXG4gICAgaWYgKFxuICAgICAgaXNTZXJ2ZXIgfHxcbiAgICAgIHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpID09PSBmYWxzZSB8fFxuICAgICAgIWlzVmFsaWRUaW1lb3V0KHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwpIHx8XG4gICAgICB0aGlzLiNjdXJyZW50UmVmZXRjaEludGVydmFsID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCB8fFxuICAgICAgICBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKClcbiAgICAgICkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKVxuICAgICAgfVxuICAgIH0sIHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwpXG4gIH1cblxuICAjdXBkYXRlVGltZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZVN0YWxlVGltZW91dCgpXG4gICAgdGhpcy4jdXBkYXRlUmVmZXRjaEludGVydmFsKHRoaXMuI2NvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSlcbiAgfVxuXG4gICNjbGVhclN0YWxlVGltZW91dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jc3RhbGVUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNzdGFsZVRpbWVvdXRJZClcbiAgICAgIHRoaXMuI3N0YWxlVGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgI2NsZWFyUmVmZXRjaEludGVydmFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZClcbiAgICAgIHRoaXMuI3JlZmV0Y2hJbnRlcnZhbElkID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc3VsdChcbiAgICBxdWVyeTogUXVlcnk8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFRRdWVyeURhdGEsIFRRdWVyeUtleT4sXG4gICAgb3B0aW9uczogUXVlcnlPYnNlcnZlck9wdGlvbnM8XG4gICAgICBUUXVlcnlGbkRhdGEsXG4gICAgICBURXJyb3IsXG4gICAgICBURGF0YSxcbiAgICAgIFRRdWVyeURhdGEsXG4gICAgICBUUXVlcnlLZXlcbiAgICA+LFxuICApOiBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+IHtcbiAgICBjb25zdCBwcmV2UXVlcnkgPSB0aGlzLiNjdXJyZW50UXVlcnlcbiAgICBjb25zdCBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuICAgIGNvbnN0IHByZXZSZXN1bHQgPSB0aGlzLiNjdXJyZW50UmVzdWx0IGFzXG4gICAgICB8IFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQ8VERhdGEsIFRFcnJvcj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICAgY29uc3QgcHJldlJlc3VsdFN0YXRlID0gdGhpcy4jY3VycmVudFJlc3VsdFN0YXRlXG4gICAgY29uc3QgcHJldlJlc3VsdE9wdGlvbnMgPSB0aGlzLiNjdXJyZW50UmVzdWx0T3B0aW9uc1xuICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlID0gcXVlcnkgIT09IHByZXZRdWVyeVxuICAgIGNvbnN0IHF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnlDaGFuZ2VcbiAgICAgID8gcXVlcnkuc3RhdGVcbiAgICAgIDogdGhpcy4jY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlXG5cbiAgICBjb25zdCB7IHN0YXRlIH0gPSBxdWVyeVxuICAgIGxldCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuICAgIGxldCBpc1BsYWNlaG9sZGVyRGF0YSA9IGZhbHNlXG4gICAgbGV0IGRhdGE6IFREYXRhIHwgdW5kZWZpbmVkXG5cbiAgICAvLyBPcHRpbWlzdGljYWxseSBzZXQgcmVzdWx0IGluIGZldGNoaW5nIHN0YXRlIGlmIG5lZWRlZFxuICAgIGlmIChvcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgY29uc3QgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKClcblxuICAgICAgY29uc3QgZmV0Y2hPbk1vdW50ID0gIW1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKVxuXG4gICAgICBjb25zdCBmZXRjaE9wdGlvbmFsbHkgPVxuICAgICAgICBtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseShxdWVyeSwgcHJldlF1ZXJ5LCBvcHRpb25zLCBwcmV2T3B0aW9ucylcblxuICAgICAgaWYgKGZldGNoT25Nb3VudCB8fCBmZXRjaE9wdGlvbmFsbHkpIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgLi4uZmV0Y2hTdGF0ZShzdGF0ZS5kYXRhLCBxdWVyeS5vcHRpb25zKSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuX29wdGltaXN0aWNSZXN1bHRzID09PSAnaXNSZXN0b3JpbmcnKSB7XG4gICAgICAgIG5ld1N0YXRlLmZldGNoU3RhdHVzID0gJ2lkbGUnXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHsgZXJyb3IsIGVycm9yVXBkYXRlZEF0LCBzdGF0dXMgfSA9IG5ld1N0YXRlXG5cbiAgICAvLyBQZXIgZGVmYXVsdCwgdXNlIHF1ZXJ5IGRhdGFcbiAgICBkYXRhID0gbmV3U3RhdGUuZGF0YSBhcyB1bmtub3duIGFzIFREYXRhXG4gICAgbGV0IHNraXBTZWxlY3QgPSBmYWxzZVxuXG4gICAgLy8gdXNlIHBsYWNlaG9sZGVyRGF0YSBpZiBuZWVkZWRcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBkYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHN0YXR1cyA9PT0gJ3BlbmRpbmcnXG4gICAgKSB7XG4gICAgICBsZXQgcGxhY2Vob2xkZXJEYXRhXG5cbiAgICAgIC8vIE1lbW9pemUgcGxhY2Vob2xkZXIgZGF0YVxuICAgICAgaWYgKFxuICAgICAgICBwcmV2UmVzdWx0Py5pc1BsYWNlaG9sZGVyRGF0YSAmJlxuICAgICAgICBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gcHJldlJlc3VsdE9wdGlvbnM/LnBsYWNlaG9sZGVyRGF0YVxuICAgICAgKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHByZXZSZXN1bHQuZGF0YVxuICAgICAgICAvLyB3ZSBoYXZlIHRvIHNraXAgc2VsZWN0IHdoZW4gcmVhZGluZyB0aGlzIG1lbW9pemF0aW9uXG4gICAgICAgIC8vIGJlY2F1c2UgcHJldlJlc3VsdC5kYXRhIGlzIGFscmVhZHkgXCJzZWxlY3RlZFwiXG4gICAgICAgIHNraXBTZWxlY3QgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb21wdXRlIHBsYWNlaG9sZGVyRGF0YVxuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPVxuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgYXMgdW5rbm93biBhcyBQbGFjZWhvbGRlckRhdGFGdW5jdGlvbjxUUXVlcnlEYXRhPlxuICAgICAgICAgICAgICApKFxuICAgICAgICAgICAgICAgIHRoaXMuI2xhc3RRdWVyeVdpdGhEZWZpbmVkRGF0YT8uc3RhdGUuZGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLiNsYXN0UXVlcnlXaXRoRGVmaW5lZERhdGEgYXMgYW55LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhXG4gICAgICB9XG5cbiAgICAgIGlmIChwbGFjZWhvbGRlckRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGF0dXMgPSAnc3VjY2VzcydcbiAgICAgICAgZGF0YSA9IHJlcGxhY2VEYXRhKFxuICAgICAgICAgIHByZXZSZXN1bHQ/LmRhdGEsXG4gICAgICAgICAgcGxhY2Vob2xkZXJEYXRhIGFzIHVua25vd24sXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSBhcyBURGF0YVxuICAgICAgICBpc1BsYWNlaG9sZGVyRGF0YSA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWxlY3QgZGF0YSBpZiBuZWVkZWRcbiAgICAvLyB0aGlzIGFsc28gcnVucyBwbGFjZWhvbGRlckRhdGEgdGhyb3VnaCB0aGUgc2VsZWN0IGZ1bmN0aW9uXG4gICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIGRhdGEgIT09IHVuZGVmaW5lZCAmJiAhc2tpcFNlbGVjdCkge1xuICAgICAgLy8gTWVtb2l6ZSBzZWxlY3QgcmVzdWx0XG4gICAgICBpZiAoXG4gICAgICAgIHByZXZSZXN1bHQgJiZcbiAgICAgICAgZGF0YSA9PT0gcHJldlJlc3VsdFN0YXRlPy5kYXRhICYmXG4gICAgICAgIG9wdGlvbnMuc2VsZWN0ID09PSB0aGlzLiNzZWxlY3RGblxuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLiNzZWxlY3RSZXN1bHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0Rm4gPSBvcHRpb25zLnNlbGVjdFxuICAgICAgICAgIGRhdGEgPSBvcHRpb25zLnNlbGVjdChkYXRhIGFzIGFueSlcbiAgICAgICAgICBkYXRhID0gcmVwbGFjZURhdGEocHJldlJlc3VsdD8uZGF0YSwgZGF0YSwgb3B0aW9ucylcbiAgICAgICAgICB0aGlzLiNzZWxlY3RSZXN1bHQgPSBkYXRhXG4gICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsXG4gICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvciBhcyBURXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLiNzZWxlY3RFcnJvcikge1xuICAgICAgZXJyb3IgPSB0aGlzLiNzZWxlY3RFcnJvciBhcyBhbnlcbiAgICAgIGRhdGEgPSB0aGlzLiNzZWxlY3RSZXN1bHRcbiAgICAgIGVycm9yVXBkYXRlZEF0ID0gRGF0ZS5ub3coKVxuICAgICAgc3RhdHVzID0gJ2Vycm9yJ1xuICAgIH1cblxuICAgIGNvbnN0IGlzRmV0Y2hpbmcgPSBuZXdTdGF0ZS5mZXRjaFN0YXR1cyA9PT0gJ2ZldGNoaW5nJ1xuICAgIGNvbnN0IGlzUGVuZGluZyA9IHN0YXR1cyA9PT0gJ3BlbmRpbmcnXG4gICAgY29uc3QgaXNFcnJvciA9IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuXG4gICAgY29uc3QgaXNMb2FkaW5nID0gaXNQZW5kaW5nICYmIGlzRmV0Y2hpbmdcbiAgICBjb25zdCBoYXNEYXRhID0gZGF0YSAhPT0gdW5kZWZpbmVkXG5cbiAgICBjb25zdCByZXN1bHQ6IFF1ZXJ5T2JzZXJ2ZXJCYXNlUmVzdWx0PFREYXRhLCBURXJyb3I+ID0ge1xuICAgICAgc3RhdHVzLFxuICAgICAgZmV0Y2hTdGF0dXM6IG5ld1N0YXRlLmZldGNoU3RhdHVzLFxuICAgICAgaXNQZW5kaW5nLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0dXMgPT09ICdzdWNjZXNzJyxcbiAgICAgIGlzRXJyb3IsXG4gICAgICBpc0luaXRpYWxMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogbmV3U3RhdGUuZGF0YVVwZGF0ZWRBdCxcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JVcGRhdGVkQXQsXG4gICAgICBmYWlsdXJlQ291bnQ6IG5ld1N0YXRlLmZldGNoRmFpbHVyZUNvdW50LFxuICAgICAgZmFpbHVyZVJlYXNvbjogbmV3U3RhdGUuZmV0Y2hGYWlsdXJlUmVhc29uLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogbmV3U3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hlZDogbmV3U3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gMCB8fCBuZXdTdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gMCxcbiAgICAgIGlzRmV0Y2hlZEFmdGVyTW91bnQ6XG4gICAgICAgIG5ld1N0YXRlLmRhdGFVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmRhdGFVcGRhdGVDb3VudCB8fFxuICAgICAgICBuZXdTdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hpbmcsXG4gICAgICBpc1JlZmV0Y2hpbmc6IGlzRmV0Y2hpbmcgJiYgIWlzUGVuZGluZyxcbiAgICAgIGlzTG9hZGluZ0Vycm9yOiBpc0Vycm9yICYmICFoYXNEYXRhLFxuICAgICAgaXNQYXVzZWQ6IG5ld1N0YXRlLmZldGNoU3RhdHVzID09PSAncGF1c2VkJyxcbiAgICAgIGlzUGxhY2Vob2xkZXJEYXRhLFxuICAgICAgaXNSZWZldGNoRXJyb3I6IGlzRXJyb3IgJiYgaGFzRGF0YSxcbiAgICAgIGlzU3RhbGU6IGlzU3RhbGUocXVlcnksIG9wdGlvbnMpLFxuICAgICAgcmVmZXRjaDogdGhpcy5yZWZldGNoLFxuICAgICAgcHJvbWlzZTogdGhpcy4jY3VycmVudFRoZW5hYmxlLFxuICAgIH1cblxuICAgIGNvbnN0IG5leHRSZXN1bHQgPSByZXN1bHQgYXMgUXVlcnlPYnNlcnZlclJlc3VsdDxURGF0YSwgVEVycm9yPlxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5leHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlcikge1xuICAgICAgY29uc3QgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUgPSAodGhlbmFibGU6IFBlbmRpbmdUaGVuYWJsZTxURGF0YT4pID0+IHtcbiAgICAgICAgaWYgKG5leHRSZXN1bHQuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgdGhlbmFibGUucmVqZWN0KG5leHRSZXN1bHQuZXJyb3IpXG4gICAgICAgIH0gZWxzZSBpZiAobmV4dFJlc3VsdC5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGVuYWJsZS5yZXNvbHZlKG5leHRSZXN1bHQuZGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZSBhIG5ldyB0aGVuYWJsZSBhbmQgcmVzdWx0IHByb21pc2Ugd2hlbiB0aGUgcmVzdWx0cyBoYXZlIGNoYW5nZWRcbiAgICAgICAqL1xuICAgICAgY29uc3QgcmVjcmVhdGVUaGVuYWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcGVuZGluZyA9XG4gICAgICAgICAgKHRoaXMuI2N1cnJlbnRUaGVuYWJsZSA9XG4gICAgICAgICAgbmV4dFJlc3VsdC5wcm9taXNlID1cbiAgICAgICAgICAgIHBlbmRpbmdUaGVuYWJsZSgpKVxuXG4gICAgICAgIGZpbmFsaXplVGhlbmFibGVJZlBvc3NpYmxlKHBlbmRpbmcpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZUaGVuYWJsZSA9IHRoaXMuI2N1cnJlbnRUaGVuYWJsZVxuICAgICAgc3dpdGNoIChwcmV2VGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgIC8vIEZpbmFsaXplIHRoZSBwcmV2aW91cyB0aGVuYWJsZSBpZiBpdCB3YXMgcGVuZGluZ1xuICAgICAgICAgIC8vIGFuZCB3ZSBhcmUgc3RpbGwgb2JzZXJ2aW5nIHRoZSBzYW1lIHF1ZXJ5XG4gICAgICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCA9PT0gcHJldlF1ZXJ5LnF1ZXJ5SGFzaCkge1xuICAgICAgICAgICAgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUocHJldlRoZW5hYmxlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdmdWxmaWxsZWQnOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5leHRSZXN1bHQuc3RhdHVzID09PSAnZXJyb3InIHx8XG4gICAgICAgICAgICBuZXh0UmVzdWx0LmRhdGEgIT09IHByZXZUaGVuYWJsZS52YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JlamVjdGVkJzpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZXh0UmVzdWx0LnN0YXR1cyAhPT0gJ2Vycm9yJyB8fFxuICAgICAgICAgICAgbmV4dFJlc3VsdC5lcnJvciAhPT0gcHJldlRoZW5hYmxlLnJlYXNvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRSZXN1bHRcbiAgfVxuXG4gIHVwZGF0ZVJlc3VsdCgpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2UmVzdWx0ID0gdGhpcy4jY3VycmVudFJlc3VsdCBhc1xuICAgICAgfCBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+XG4gICAgICB8IHVuZGVmaW5lZFxuXG4gICAgY29uc3QgbmV4dFJlc3VsdCA9IHRoaXMuY3JlYXRlUmVzdWx0KHRoaXMuI2N1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKVxuXG4gICAgdGhpcy4jY3VycmVudFJlc3VsdFN0YXRlID0gdGhpcy4jY3VycmVudFF1ZXJ5LnN0YXRlXG4gICAgdGhpcy4jY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICAgIGlmICh0aGlzLiNjdXJyZW50UmVzdWx0U3RhdGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNsYXN0UXVlcnlXaXRoRGVmaW5lZERhdGEgPSB0aGlzLiNjdXJyZW50UXVlcnlcbiAgICB9XG5cbiAgICAvLyBPbmx5IG5vdGlmeSBhbmQgdXBkYXRlIHJlc3VsdCBpZiBzb21ldGhpbmcgaGFzIGNoYW5nZWRcbiAgICBpZiAoc2hhbGxvd0VxdWFsT2JqZWN0cyhuZXh0UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy4jY3VycmVudFJlc3VsdCA9IG5leHRSZXN1bHRcblxuICAgIGNvbnN0IHNob3VsZE5vdGlmeUxpc3RlbmVycyA9ICgpOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghcHJldlJlc3VsdCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG5vdGlmeU9uQ2hhbmdlUHJvcHMgfSA9IHRoaXMub3B0aW9uc1xuICAgICAgY29uc3Qgbm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlID1cbiAgICAgICAgdHlwZW9mIG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG5vdGlmeU9uQ2hhbmdlUHJvcHMoKVxuICAgICAgICAgIDogbm90aWZ5T25DaGFuZ2VQcm9wc1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSA9PT0gJ2FsbCcgfHxcbiAgICAgICAgKCFub3RpZnlPbkNoYW5nZVByb3BzVmFsdWUgJiYgIXRoaXMuI3RyYWNrZWRQcm9wcy5zaXplKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluY2x1ZGVkUHJvcHMgPSBuZXcgU2V0KFxuICAgICAgICBub3RpZnlPbkNoYW5nZVByb3BzVmFsdWUgPz8gdGhpcy4jdHJhY2tlZFByb3BzLFxuICAgICAgKVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgICBpbmNsdWRlZFByb3BzLmFkZCgnZXJyb3InKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jY3VycmVudFJlc3VsdCkuc29tZSgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5IGFzIGtleW9mIFF1ZXJ5T2JzZXJ2ZXJSZXN1bHRcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI2N1cnJlbnRSZXN1bHRbdHlwZWRLZXldICE9PSBwcmV2UmVzdWx0W3R5cGVkS2V5XVxuXG4gICAgICAgIHJldHVybiBjaGFuZ2VkICYmIGluY2x1ZGVkUHJvcHMuaGFzKHR5cGVkS2V5KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLiNub3RpZnkoeyBsaXN0ZW5lcnM6IHNob3VsZE5vdGlmeUxpc3RlbmVycygpIH0pXG4gIH1cblxuICAjdXBkYXRlUXVlcnkoKTogdm9pZCB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuI2NsaWVudCwgdGhpcy5vcHRpb25zKVxuXG4gICAgaWYgKHF1ZXJ5ID09PSB0aGlzLiNjdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHByZXZRdWVyeSA9IHRoaXMuI2N1cnJlbnRRdWVyeSBhc1xuICAgICAgfCBRdWVyeTxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVFF1ZXJ5RGF0YSwgVFF1ZXJ5S2V5PlxuICAgICAgfCB1bmRlZmluZWRcbiAgICB0aGlzLiNjdXJyZW50UXVlcnkgPSBxdWVyeVxuICAgIHRoaXMuI2N1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlXG5cbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgcHJldlF1ZXJ5Py5yZW1vdmVPYnNlcnZlcih0aGlzKVxuICAgICAgcXVlcnkuYWRkT2JzZXJ2ZXIodGhpcylcbiAgICB9XG4gIH1cblxuICBvblF1ZXJ5VXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlUmVzdWx0KClcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLiN1cGRhdGVUaW1lcnMoKVxuICAgIH1cbiAgfVxuXG4gICNub3RpZnkobm90aWZ5T3B0aW9uczogeyBsaXN0ZW5lcnM6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgLy8gRmlyc3QsIHRyaWdnZXIgdGhlIGxpc3RlbmVyc1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdClcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gVGhlbiB0aGUgY2FjaGUgbGlzdGVuZXJzXG4gICAgICB0aGlzLiNjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiNjdXJyZW50UXVlcnksXG4gICAgICAgIHR5cGU6ICdvYnNlcnZlclJlc3VsdHNVcGRhdGVkJyxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChcbiAgcXVlcnk6IFF1ZXJ5PGFueSwgYW55LCBhbnksIGFueT4sXG4gIG9wdGlvbnM6IFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zPGFueSwgYW55LCBhbnksIGFueT4sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICByZXNvbHZlRW5hYmxlZChvcHRpb25zLmVuYWJsZWQsIHF1ZXJ5KSAhPT0gZmFsc2UgJiZcbiAgICBxdWVyeS5zdGF0ZS5kYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBvcHRpb25zLnJldHJ5T25Nb3VudCA9PT0gZmFsc2UpXG4gIClcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbk1vdW50KFxuICBxdWVyeTogUXVlcnk8YW55LCBhbnksIGFueSwgYW55PixcbiAgb3B0aW9uczogUXVlcnlPYnNlcnZlck9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgc2hvdWxkTG9hZE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHx8XG4gICAgKHF1ZXJ5LnN0YXRlLmRhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgb3B0aW9ucy5yZWZldGNoT25Nb3VudCkpXG4gIClcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbihcbiAgcXVlcnk6IFF1ZXJ5PGFueSwgYW55LCBhbnksIGFueT4sXG4gIG9wdGlvbnM6IFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zPGFueSwgYW55LCBhbnksIGFueSwgYW55PixcbiAgZmllbGQ6ICh0eXBlb2Ygb3B0aW9ucylbJ3JlZmV0Y2hPbk1vdW50J10gJlxuICAgICh0eXBlb2Ygb3B0aW9ucylbJ3JlZmV0Y2hPbldpbmRvd0ZvY3VzJ10gJlxuICAgICh0eXBlb2Ygb3B0aW9ucylbJ3JlZmV0Y2hPblJlY29ubmVjdCddLFxuKSB7XG4gIGlmIChyZXNvbHZlRW5hYmxlZChvcHRpb25zLmVuYWJsZWQsIHF1ZXJ5KSAhPT0gZmFsc2UpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBmaWVsZCA9PT0gJ2Z1bmN0aW9uJyA/IGZpZWxkKHF1ZXJ5KSA6IGZpZWxkXG5cbiAgICByZXR1cm4gdmFsdWUgPT09ICdhbHdheXMnIHx8ICh2YWx1ZSAhPT0gZmFsc2UgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucykpXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT3B0aW9uYWxseShcbiAgcXVlcnk6IFF1ZXJ5PGFueSwgYW55LCBhbnksIGFueT4sXG4gIHByZXZRdWVyeTogUXVlcnk8YW55LCBhbnksIGFueSwgYW55PixcbiAgb3B0aW9uczogUXVlcnlPYnNlcnZlck9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICBwcmV2T3B0aW9uczogUXVlcnlPYnNlcnZlck9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKHF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHxcbiAgICAgIHJlc29sdmVFbmFibGVkKHByZXZPcHRpb25zLmVuYWJsZWQsIHF1ZXJ5KSA9PT0gZmFsc2UpICYmXG4gICAgKCFvcHRpb25zLnN1c3BlbnNlIHx8IHF1ZXJ5LnN0YXRlLnN0YXR1cyAhPT0gJ2Vycm9yJykgJiZcbiAgICBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKVxuICApXG59XG5cbmZ1bmN0aW9uIGlzU3RhbGUoXG4gIHF1ZXJ5OiBRdWVyeTxhbnksIGFueSwgYW55LCBhbnk+LFxuICBvcHRpb25zOiBRdWVyeU9ic2VydmVyT3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueT4sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICByZXNvbHZlRW5hYmxlZChvcHRpb25zLmVuYWJsZWQsIHF1ZXJ5KSAhPT0gZmFsc2UgJiZcbiAgICBxdWVyeS5pc1N0YWxlQnlUaW1lKHJlc29sdmVTdGFsZVRpbWUob3B0aW9ucy5zdGFsZVRpbWUsIHF1ZXJ5KSlcbiAgKVxufVxuXG4vLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIGRlY2lkZSBpZiB3ZSB3aWxsIHVwZGF0ZSB0aGUgb2JzZXJ2ZXIncyAnY3VycmVudCdcbi8vIHByb3BlcnRpZXMgYWZ0ZXIgYW4gb3B0aW1pc3RpYyByZWFkaW5nIHZpYSBnZXRPcHRpbWlzdGljUmVzdWx0XG5mdW5jdGlvbiBzaG91bGRBc3NpZ25PYnNlcnZlckN1cnJlbnRQcm9wZXJ0aWVzPFxuICBUUXVlcnlGbkRhdGEgPSB1bmtub3duLFxuICBURXJyb3IgPSB1bmtub3duLFxuICBURGF0YSA9IFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5RGF0YSA9IFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSBRdWVyeUtleSxcbj4oXG4gIG9ic2VydmVyOiBRdWVyeU9ic2VydmVyPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5RGF0YSwgVFF1ZXJ5S2V5PixcbiAgb3B0aW1pc3RpY1Jlc3VsdDogUXVlcnlPYnNlcnZlclJlc3VsdDxURGF0YSwgVEVycm9yPixcbikge1xuICAvLyBpZiB0aGUgbmV3bHkgY3JlYXRlZCByZXN1bHQgaXNuJ3Qgd2hhdCB0aGUgb2JzZXJ2ZXIgaXMgaG9sZGluZyBhcyBjdXJyZW50LFxuICAvLyB0aGVuIHdlJ2xsIG5lZWQgdG8gdXBkYXRlIHRoZSBwcm9wZXJ0aWVzIGFzIHdlbGxcbiAgaWYgKCFzaGFsbG93RXF1YWxPYmplY3RzKG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSwgb3B0aW1pc3RpY1Jlc3VsdCkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gYmFzaWNhbGx5LCBqdXN0IGtlZXAgcHJldmlvdXMgcHJvcGVydGllcyBpZiBub3RoaW5nIGNoYW5nZWRcbiAgcmV0dXJuIGZhbHNlXG59XG4iLCJpbXBvcnQgeyBnZXREZWZhdWx0U3RhdGUgfSBmcm9tICcuL211dGF0aW9uJ1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcidcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJ1xuaW1wb3J0IHsgaGFzaEtleSwgc2hhbGxvd0VxdWFsT2JqZWN0cyB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9xdWVyeUNsaWVudCdcbmltcG9ydCB0eXBlIHtcbiAgRGVmYXVsdEVycm9yLFxuICBNdXRhdGVPcHRpb25zLFxuICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyxcbiAgTXV0YXRpb25PYnNlcnZlclJlc3VsdCxcbn0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQWN0aW9uLCBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nXG5cbi8vIFRZUEVTXG5cbnR5cGUgTXV0YXRpb25PYnNlcnZlckxpc3RlbmVyPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiA9IChcbiAgcmVzdWx0OiBNdXRhdGlvbk9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PixcbikgPT4gdm9pZFxuXG4vLyBDTEFTU1xuXG5leHBvcnQgY2xhc3MgTXV0YXRpb25PYnNlcnZlcjxcbiAgVERhdGEgPSB1bmtub3duLFxuICBURXJyb3IgPSBEZWZhdWx0RXJyb3IsXG4gIFRWYXJpYWJsZXMgPSB2b2lkLFxuICBUQ29udGV4dCA9IHVua25vd24sXG4+IGV4dGVuZHMgU3Vic2NyaWJhYmxlPFxuICBNdXRhdGlvbk9ic2VydmVyTGlzdGVuZXI8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+XG4+IHtcbiAgb3B0aW9ucyE6IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PlxuXG4gICNjbGllbnQ6IFF1ZXJ5Q2xpZW50XG4gICNjdXJyZW50UmVzdWx0OiBNdXRhdGlvbk9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiA9XG4gICAgdW5kZWZpbmVkIVxuICAjY3VycmVudE11dGF0aW9uPzogTXV0YXRpb248VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+XG4gICNtdXRhdGVPcHRpb25zPzogTXV0YXRlT3B0aW9uczxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuICAgIG9wdGlvbnM6IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PixcbiAgKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy4jY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpXG4gICAgdGhpcy5iaW5kTWV0aG9kcygpXG4gICAgdGhpcy4jdXBkYXRlUmVzdWx0KClcbiAgfVxuXG4gIHByb3RlY3RlZCBiaW5kTWV0aG9kcygpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0ZSA9IHRoaXMubXV0YXRlLmJpbmQodGhpcylcbiAgICB0aGlzLnJlc2V0ID0gdGhpcy5yZXNldC5iaW5kKHRoaXMpXG4gIH1cblxuICBzZXRPcHRpb25zKFxuICAgIG9wdGlvbnM6IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PixcbiAgKSB7XG4gICAgY29uc3QgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgYXNcbiAgICAgIHwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+XG4gICAgICB8IHVuZGVmaW5lZFxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuI2NsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpXG4gICAgaWYgKCFzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNjbGllbnQuZ2V0TXV0YXRpb25DYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlck9wdGlvbnNVcGRhdGVkJyxcbiAgICAgICAgbXV0YXRpb246IHRoaXMuI2N1cnJlbnRNdXRhdGlvbixcbiAgICAgICAgb2JzZXJ2ZXI6IHRoaXMsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByZXZPcHRpb25zPy5tdXRhdGlvbktleSAmJlxuICAgICAgdGhpcy5vcHRpb25zLm11dGF0aW9uS2V5ICYmXG4gICAgICBoYXNoS2V5KHByZXZPcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaEtleSh0aGlzLm9wdGlvbnMubXV0YXRpb25LZXkpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlc2V0KClcbiAgICB9IGVsc2UgaWYgKHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8uc3RhdGUuc3RhdHVzID09PSAncGVuZGluZycpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbi5zZXRPcHRpb25zKHRoaXMub3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25VbnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8ucmVtb3ZlT2JzZXJ2ZXIodGhpcylcbiAgICB9XG4gIH1cblxuICBvbk11dGF0aW9uVXBkYXRlKGFjdGlvbjogQWN0aW9uPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0Pik6IHZvaWQge1xuICAgIHRoaXMuI3VwZGF0ZVJlc3VsdCgpXG5cbiAgICB0aGlzLiNub3RpZnkoYWN0aW9uKVxuICB9XG5cbiAgZ2V0Q3VycmVudFJlc3VsdCgpOiBNdXRhdGlvbk9ic2VydmVyUmVzdWx0PFxuICAgIFREYXRhLFxuICAgIFRFcnJvcixcbiAgICBUVmFyaWFibGVzLFxuICAgIFRDb250ZXh0XG4gID4ge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UmVzdWx0XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICAvLyByZXNldCBuZWVkcyB0byByZW1vdmUgdGhlIG9ic2VydmVyIGZyb20gdGhlIG11dGF0aW9uIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIFwiZ2V0IGl0IGJhY2tcIlxuICAgIC8vIGFub3RoZXIgbXV0YXRlIGNhbGwgd2lsbCB5aWVsZCBhIG5ldyBtdXRhdGlvbiFcbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24/LnJlbW92ZU9ic2VydmVyKHRoaXMpXG4gICAgdGhpcy4jY3VycmVudE11dGF0aW9uID0gdW5kZWZpbmVkXG4gICAgdGhpcy4jdXBkYXRlUmVzdWx0KClcbiAgICB0aGlzLiNub3RpZnkoKVxuICB9XG5cbiAgbXV0YXRlKFxuICAgIHZhcmlhYmxlczogVFZhcmlhYmxlcyxcbiAgICBvcHRpb25zPzogTXV0YXRlT3B0aW9uczxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD4sXG4gICk6IFByb21pc2U8VERhdGE+IHtcbiAgICB0aGlzLiNtdXRhdGVPcHRpb25zID0gb3B0aW9uc1xuXG4gICAgdGhpcy4jY3VycmVudE11dGF0aW9uPy5yZW1vdmVPYnNlcnZlcih0aGlzKVxuXG4gICAgdGhpcy4jY3VycmVudE11dGF0aW9uID0gdGhpcy4jY2xpZW50XG4gICAgICAuZ2V0TXV0YXRpb25DYWNoZSgpXG4gICAgICAuYnVpbGQodGhpcy4jY2xpZW50LCB0aGlzLm9wdGlvbnMpXG5cbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24uYWRkT2JzZXJ2ZXIodGhpcylcblxuICAgIHJldHVybiB0aGlzLiNjdXJyZW50TXV0YXRpb24uZXhlY3V0ZSh2YXJpYWJsZXMpXG4gIH1cblxuICAjdXBkYXRlUmVzdWx0KCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID1cbiAgICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8uc3RhdGUgPz9cbiAgICAgIGdldERlZmF1bHRTdGF0ZTxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD4oKVxuXG4gICAgdGhpcy4jY3VycmVudFJlc3VsdCA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgaXNQZW5kaW5nOiBzdGF0ZS5zdGF0dXMgPT09ICdwZW5kaW5nJyxcbiAgICAgIGlzU3VjY2Vzczogc3RhdGUuc3RhdHVzID09PSAnc3VjY2VzcycsXG4gICAgICBpc0Vycm9yOiBzdGF0ZS5zdGF0dXMgPT09ICdlcnJvcicsXG4gICAgICBpc0lkbGU6IHN0YXRlLnN0YXR1cyA9PT0gJ2lkbGUnLFxuICAgICAgbXV0YXRlOiB0aGlzLm11dGF0ZSxcbiAgICAgIHJlc2V0OiB0aGlzLnJlc2V0LFxuICAgIH0gYXMgTXV0YXRpb25PYnNlcnZlclJlc3VsdDxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD5cbiAgfVxuXG4gICNub3RpZnkoYWN0aW9uPzogQWN0aW9uPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0Pik6IHZvaWQge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgdHJpZ2dlciB0aGUgbXV0YXRlIGNhbGxiYWNrc1xuICAgICAgaWYgKHRoaXMuI211dGF0ZU9wdGlvbnMgJiYgdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLiNjdXJyZW50UmVzdWx0LnZhcmlhYmxlcyFcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuI2N1cnJlbnRSZXN1bHQuY29udGV4dFxuXG4gICAgICAgIGlmIChhY3Rpb24/LnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25TdWNjZXNzPy4oYWN0aW9uLmRhdGEsIHZhcmlhYmxlcywgY29udGV4dCEpXG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vblNldHRsZWQ/LihhY3Rpb24uZGF0YSwgbnVsbCwgdmFyaWFibGVzLCBjb250ZXh0KVxuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbj8udHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25FcnJvcj8uKGFjdGlvbi5lcnJvciwgdmFyaWFibGVzLCBjb250ZXh0KVxuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25TZXR0bGVkPy4oXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGVuIHRyaWdnZXIgdGhlIGxpc3RlbmVyc1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9xdWVyeS1jb3JlJ1xuXG5leHBvcnQgY29uc3QgUXVlcnlDbGllbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxRdWVyeUNsaWVudCB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZCxcbilcblxuZXhwb3J0IGNvbnN0IHVzZVF1ZXJ5Q2xpZW50ID0gKHF1ZXJ5Q2xpZW50PzogUXVlcnlDbGllbnQpID0+IHtcbiAgY29uc3QgY2xpZW50ID0gUmVhY3QudXNlQ29udGV4dChRdWVyeUNsaWVudENvbnRleHQpXG5cbiAgaWYgKHF1ZXJ5Q2xpZW50KSB7XG4gICAgcmV0dXJuIHF1ZXJ5Q2xpZW50XG4gIH1cblxuICBpZiAoIWNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lJylcbiAgfVxuXG4gIHJldHVybiBjbGllbnRcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDbGllbnRQcm92aWRlclByb3BzID0ge1xuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBjb25zdCBRdWVyeUNsaWVudFByb3ZpZGVyID0gKHtcbiAgY2xpZW50LFxuICBjaGlsZHJlbixcbn06IFF1ZXJ5Q2xpZW50UHJvdmlkZXJQcm9wcyk6IFJlYWN0LkpTWC5FbGVtZW50ID0+IHtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjbGllbnQubW91bnQoKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGllbnQudW5tb3VudCgpXG4gICAgfVxuICB9LCBbY2xpZW50XSlcblxuICByZXR1cm4gKFxuICAgIDxRdWVyeUNsaWVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NsaWVudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9RdWVyeUNsaWVudENvbnRleHQuUHJvdmlkZXI+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmNvbnN0IElzUmVzdG9yaW5nQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoZmFsc2UpXG5cbmV4cG9ydCBjb25zdCB1c2VJc1Jlc3RvcmluZyA9ICgpID0+IFJlYWN0LnVzZUNvbnRleHQoSXNSZXN0b3JpbmdDb250ZXh0KVxuZXhwb3J0IGNvbnN0IElzUmVzdG9yaW5nUHJvdmlkZXIgPSBJc1Jlc3RvcmluZ0NvbnRleHQuUHJvdmlkZXJcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbi8vIENPTlRFWFRcbmV4cG9ydCB0eXBlIFF1ZXJ5RXJyb3JSZXNldEZ1bmN0aW9uID0gKCkgPT4gdm9pZFxuZXhwb3J0IHR5cGUgUXVlcnlFcnJvcklzUmVzZXRGdW5jdGlvbiA9ICgpID0+IGJvb2xlYW5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXJyb3JDbGVhclJlc2V0RnVuY3Rpb24gPSAoKSA9PiB2b2lkXG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlWYWx1ZSB7XG4gIGNsZWFyUmVzZXQ6IFF1ZXJ5RXJyb3JDbGVhclJlc2V0RnVuY3Rpb25cbiAgaXNSZXNldDogUXVlcnlFcnJvcklzUmVzZXRGdW5jdGlvblxuICByZXNldDogUXVlcnlFcnJvclJlc2V0RnVuY3Rpb25cbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFsdWUoKTogUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlWYWx1ZSB7XG4gIGxldCBpc1Jlc2V0ID0gZmFsc2VcbiAgcmV0dXJuIHtcbiAgICBjbGVhclJlc2V0OiAoKSA9PiB7XG4gICAgICBpc1Jlc2V0ID0gZmFsc2VcbiAgICB9LFxuICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICBpc1Jlc2V0ID0gdHJ1ZVxuICAgIH0sXG4gICAgaXNSZXNldDogKCkgPT4ge1xuICAgICAgcmV0dXJuIGlzUmVzZXRcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoY3JlYXRlVmFsdWUoKSlcblxuLy8gSE9PS1xuXG5leHBvcnQgY29uc3QgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSAoKSA9PlxuICBSZWFjdC51c2VDb250ZXh0KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dClcblxuLy8gQ09NUE9ORU5UXG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5RnVuY3Rpb24gPSAoXG4gIHZhbHVlOiBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeVZhbHVlLFxuKSA9PiBSZWFjdC5SZWFjdE5vZGVcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeVByb3BzIHtcbiAgY2hpbGRyZW46IFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5RnVuY3Rpb24gfCBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGNvbnN0IFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gKHtcbiAgY2hpbGRyZW4sXG59OiBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeVByb3BzKSA9PiB7XG4gIGNvbnN0IFt2YWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBjcmVhdGVWYWx1ZSgpKVxuICByZXR1cm4gKFxuICAgIDxRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbih2YWx1ZSkgOiBjaGlsZHJlbn1cbiAgICA8L1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHNob3VsZFRocm93RXJyb3IgfSBmcm9tICdAdGFuc3RhY2svcXVlcnktY29yZSdcbmltcG9ydCB0eXBlIHtcbiAgRGVmYXVsdGVkUXVlcnlPYnNlcnZlck9wdGlvbnMsXG4gIFF1ZXJ5LFxuICBRdWVyeUtleSxcbiAgUXVlcnlPYnNlcnZlclJlc3VsdCxcbiAgVGhyb3dPbkVycm9yLFxufSBmcm9tICdAdGFuc3RhY2svcXVlcnktY29yZSdcbmltcG9ydCB0eXBlIHsgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlWYWx1ZSB9IGZyb20gJy4vUXVlcnlFcnJvclJlc2V0Qm91bmRhcnknXG5cbmV4cG9ydCBjb25zdCBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5ID0gPFxuICBUUXVlcnlGbkRhdGEsXG4gIFRFcnJvcixcbiAgVERhdGEsXG4gIFRRdWVyeURhdGEsXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5LFxuPihcbiAgb3B0aW9uczogRGVmYXVsdGVkUXVlcnlPYnNlcnZlck9wdGlvbnM8XG4gICAgVFF1ZXJ5Rm5EYXRhLFxuICAgIFRFcnJvcixcbiAgICBURGF0YSxcbiAgICBUUXVlcnlEYXRhLFxuICAgIFRRdWVyeUtleVxuICA+LFxuICBlcnJvclJlc2V0Qm91bmRhcnk6IFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5VmFsdWUsXG4pID0+IHtcbiAgaWYgKFxuICAgIG9wdGlvbnMuc3VzcGVuc2UgfHxcbiAgICBvcHRpb25zLnRocm93T25FcnJvciB8fFxuICAgIG9wdGlvbnMuZXhwZXJpbWVudGFsX3ByZWZldGNoSW5SZW5kZXJcbiAgKSB7XG4gICAgLy8gUHJldmVudCByZXRyeWluZyBmYWlsZWQgcXVlcnkgaWYgdGhlIGVycm9yIGJvdW5kYXJ5IGhhcyBub3QgYmVlbiByZXNldCB5ZXRcbiAgICBpZiAoIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkpIHtcbiAgICAgIG9wdGlvbnMucmV0cnlPbk1vdW50ID0gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5ID0gKFxuICBlcnJvclJlc2V0Qm91bmRhcnk6IFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5VmFsdWUsXG4pID0+IHtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpXG4gIH0sIFtlcnJvclJlc2V0Qm91bmRhcnldKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0SGFzRXJyb3IgPSA8XG4gIFREYXRhLFxuICBURXJyb3IsXG4gIFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5RGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXksXG4+KHtcbiAgcmVzdWx0LFxuICBlcnJvclJlc2V0Qm91bmRhcnksXG4gIHRocm93T25FcnJvcixcbiAgcXVlcnksXG4gIHN1c3BlbnNlLFxufToge1xuICByZXN1bHQ6IFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQ8VERhdGEsIFRFcnJvcj5cbiAgZXJyb3JSZXNldEJvdW5kYXJ5OiBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeVZhbHVlXG4gIHRocm93T25FcnJvcjogVGhyb3dPbkVycm9yPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBUUXVlcnlEYXRhLCBUUXVlcnlLZXk+XG4gIHF1ZXJ5OiBRdWVyeTxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVFF1ZXJ5RGF0YSwgVFF1ZXJ5S2V5PiB8IHVuZGVmaW5lZFxuICBzdXNwZW5zZTogYm9vbGVhbiB8IHVuZGVmaW5lZFxufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIHJlc3VsdC5pc0Vycm9yICYmXG4gICAgIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkgJiZcbiAgICAhcmVzdWx0LmlzRmV0Y2hpbmcgJiZcbiAgICBxdWVyeSAmJlxuICAgICgoc3VzcGVuc2UgJiYgcmVzdWx0LmRhdGEgPT09IHVuZGVmaW5lZCkgfHxcbiAgICAgIHNob3VsZFRocm93RXJyb3IodGhyb3dPbkVycm9yLCBbcmVzdWx0LmVycm9yLCBxdWVyeV0pKVxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gIERlZmF1bHRFcnJvcixcbiAgRGVmYXVsdGVkUXVlcnlPYnNlcnZlck9wdGlvbnMsXG4gIFF1ZXJ5LFxuICBRdWVyeUtleSxcbiAgUXVlcnlPYnNlcnZlcixcbiAgUXVlcnlPYnNlcnZlclJlc3VsdCxcbn0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgdHlwZSB7IFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5VmFsdWUgfSBmcm9tICcuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5J1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRocm93T25FcnJvciA9IDxcbiAgVFF1ZXJ5Rm5EYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBURGF0YSA9IFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSBRdWVyeUtleSxcbj4oXG4gIF9lcnJvcjogVEVycm9yLFxuICBxdWVyeTogUXVlcnk8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFREYXRhLCBUUXVlcnlLZXk+LFxuKSA9PiBxdWVyeS5zdGF0ZS5kYXRhID09PSB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IGVuc3VyZVN1c3BlbnNlVGltZXJzID0gKFxuICBkZWZhdWx0ZWRPcHRpb25zOiBEZWZhdWx0ZWRRdWVyeU9ic2VydmVyT3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueT4sXG4pID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxTdGFsZVRpbWUgPSBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlKSB7XG4gICAgLy8gSGFuZGxlIHN0YWxlVGltZSB0byBlbnN1cmUgbWluaW11bSAxMDAwbXMgaW4gU3VzcGVuc2UgbW9kZVxuICAgIC8vIFRoaXMgcHJldmVudHMgdW5uZWNlc3NhcnkgcmVmZXRjaGluZyB3aGVuIGNvbXBvbmVudHMgcmVtb3VudCBhZnRlciBzdXNwZW5kaW5nXG4gICAgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgPVxuICAgICAgdHlwZW9mIG9yaWdpbmFsU3RhbGVUaW1lID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gKC4uLmFyZ3MpID0+IE1hdGgubWF4KG9yaWdpbmFsU3RhbGVUaW1lKC4uLmFyZ3MpLCAxMDAwKVxuICAgICAgICA6IE1hdGgubWF4KG9yaWdpbmFsU3RhbGVUaW1lID8/IDEwMDAsIDEwMDApXG5cbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMuZ2NUaW1lID09PSAnbnVtYmVyJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5nY1RpbWUgPSBNYXRoLm1heChkZWZhdWx0ZWRPcHRpb25zLmdjVGltZSwgMTAwMClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHdpbGxGZXRjaCA9IChcbiAgcmVzdWx0OiBRdWVyeU9ic2VydmVyUmVzdWx0PGFueSwgYW55PixcbiAgaXNSZXN0b3Jpbmc6IGJvb2xlYW4sXG4pID0+IHJlc3VsdC5pc0xvYWRpbmcgJiYgcmVzdWx0LmlzRmV0Y2hpbmcgJiYgIWlzUmVzdG9yaW5nXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTdXNwZW5kID0gKFxuICBkZWZhdWx0ZWRPcHRpb25zOlxuICAgIHwgRGVmYXVsdGVkUXVlcnlPYnNlcnZlck9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnk+XG4gICAgfCB1bmRlZmluZWQsXG4gIHJlc3VsdDogUXVlcnlPYnNlcnZlclJlc3VsdDxhbnksIGFueT4sXG4pID0+IGRlZmF1bHRlZE9wdGlvbnM/LnN1c3BlbnNlICYmIHJlc3VsdC5pc1BlbmRpbmdcblxuZXhwb3J0IGNvbnN0IGZldGNoT3B0aW1pc3RpYyA9IDxcbiAgVFF1ZXJ5Rm5EYXRhLFxuICBURXJyb3IsXG4gIFREYXRhLFxuICBUUXVlcnlEYXRhLFxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSxcbj4oXG4gIGRlZmF1bHRlZE9wdGlvbnM6IERlZmF1bHRlZFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zPFxuICAgIFRRdWVyeUZuRGF0YSxcbiAgICBURXJyb3IsXG4gICAgVERhdGEsXG4gICAgVFF1ZXJ5RGF0YSxcbiAgICBUUXVlcnlLZXlcbiAgPixcbiAgb2JzZXJ2ZXI6IFF1ZXJ5T2JzZXJ2ZXI8VFF1ZXJ5Rm5EYXRhLCBURXJyb3IsIFREYXRhLCBUUXVlcnlEYXRhLCBUUXVlcnlLZXk+LFxuICBlcnJvclJlc2V0Qm91bmRhcnk6IFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5VmFsdWUsXG4pID0+XG4gIG9ic2VydmVyLmZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zKS5jYXRjaCgoKSA9PiB7XG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKVxuICB9KVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgaXNTZXJ2ZXIsIG5vb3AsIG5vdGlmeU1hbmFnZXIgfSBmcm9tICdAdGFuc3RhY2svcXVlcnktY29yZSdcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9RdWVyeUNsaWVudFByb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgfSBmcm9tICcuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5J1xuaW1wb3J0IHtcbiAgZW5zdXJlUHJldmVudEVycm9yQm91bmRhcnlSZXRyeSxcbiAgZ2V0SGFzRXJyb3IsXG4gIHVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5LFxufSBmcm9tICcuL2Vycm9yQm91bmRhcnlVdGlscydcbmltcG9ydCB7IHVzZUlzUmVzdG9yaW5nIH0gZnJvbSAnLi9Jc1Jlc3RvcmluZ1Byb3ZpZGVyJ1xuaW1wb3J0IHtcbiAgZW5zdXJlU3VzcGVuc2VUaW1lcnMsXG4gIGZldGNoT3B0aW1pc3RpYyxcbiAgc2hvdWxkU3VzcGVuZCxcbiAgd2lsbEZldGNoLFxufSBmcm9tICcuL3N1c3BlbnNlJ1xuaW1wb3J0IHR5cGUge1xuICBRdWVyeUNsaWVudCxcbiAgUXVlcnlLZXksXG4gIFF1ZXJ5T2JzZXJ2ZXIsXG4gIFF1ZXJ5T2JzZXJ2ZXJSZXN1bHQsXG59IGZyb20gJ0B0YW5zdGFjay9xdWVyeS1jb3JlJ1xuaW1wb3J0IHR5cGUgeyBVc2VCYXNlUXVlcnlPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2VRdWVyeTxcbiAgVFF1ZXJ5Rm5EYXRhLFxuICBURXJyb3IsXG4gIFREYXRhLFxuICBUUXVlcnlEYXRhLFxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSxcbj4oXG4gIG9wdGlvbnM6IFVzZUJhc2VRdWVyeU9wdGlvbnM8XG4gICAgVFF1ZXJ5Rm5EYXRhLFxuICAgIFRFcnJvcixcbiAgICBURGF0YSxcbiAgICBUUXVlcnlEYXRhLFxuICAgIFRRdWVyeUtleVxuICA+LFxuICBPYnNlcnZlcjogdHlwZW9mIFF1ZXJ5T2JzZXJ2ZXIsXG4gIHF1ZXJ5Q2xpZW50PzogUXVlcnlDbGllbnQsXG4pOiBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0JhZCBhcmd1bWVudCB0eXBlLiBTdGFydGluZyB3aXRoIHY1LCBvbmx5IHRoZSBcIk9iamVjdFwiIGZvcm0gaXMgYWxsb3dlZCB3aGVuIGNhbGxpbmcgcXVlcnkgcmVsYXRlZCBmdW5jdGlvbnMuIFBsZWFzZSB1c2UgdGhlIGVycm9yIHN0YWNrIHRvIGZpbmQgdGhlIGN1bHByaXQgY2FsbC4gTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vdGFuc3RhY2suY29tL3F1ZXJ5L2xhdGVzdC9kb2NzL3JlYWN0L2d1aWRlcy9taWdyYXRpbmctdG8tdjUjc3VwcG9ydHMtYS1zaW5nbGUtc2lnbmF0dXJlLW9uZS1vYmplY3QnLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KHF1ZXJ5Q2xpZW50KVxuICBjb25zdCBpc1Jlc3RvcmluZyA9IHVzZUlzUmVzdG9yaW5nKClcbiAgY29uc3QgZXJyb3JSZXNldEJvdW5kYXJ5ID0gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKVxuICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0gY2xpZW50LmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICA7KGNsaWVudC5nZXREZWZhdWx0T3B0aW9ucygpLnF1ZXJpZXMgYXMgYW55KT8uX2V4cGVyaW1lbnRhbF9iZWZvcmVRdWVyeT8uKFxuICAgIGRlZmF1bHRlZE9wdGlvbnMsXG4gIClcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgWyR7ZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2h9XTogTm8gcXVlcnlGbiB3YXMgcGFzc2VkIGFzIGFuIG9wdGlvbiwgYW5kIG5vIGRlZmF1bHQgcXVlcnlGbiB3YXMgZm91bmQuIFRoZSBxdWVyeUZuIHBhcmFtZXRlciBpcyBvbmx5IG9wdGlvbmFsIHdoZW4gdXNpbmcgYSBkZWZhdWx0IHF1ZXJ5Rm4uIE1vcmUgaW5mbyBoZXJlOiBodHRwczovL3RhbnN0YWNrLmNvbS9xdWVyeS9sYXRlc3QvZG9jcy9mcmFtZXdvcmsvcmVhY3QvZ3VpZGVzL2RlZmF1bHQtcXVlcnktZnVuY3Rpb25gLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSByZXN1bHRzIGFyZSBvcHRpbWlzdGljYWxseSBzZXQgaW4gZmV0Y2hpbmcgc3RhdGUgYmVmb3JlIHN1YnNjcmliaW5nIG9yIHVwZGF0aW5nIG9wdGlvbnNcbiAgZGVmYXVsdGVkT3B0aW9ucy5fb3B0aW1pc3RpY1Jlc3VsdHMgPSBpc1Jlc3RvcmluZ1xuICAgID8gJ2lzUmVzdG9yaW5nJ1xuICAgIDogJ29wdGltaXN0aWMnXG5cbiAgZW5zdXJlU3VzcGVuc2VUaW1lcnMoZGVmYXVsdGVkT3B0aW9ucylcbiAgZW5zdXJlUHJldmVudEVycm9yQm91bmRhcnlSZXRyeShkZWZhdWx0ZWRPcHRpb25zLCBlcnJvclJlc2V0Qm91bmRhcnkpXG5cbiAgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnkoZXJyb3JSZXNldEJvdW5kYXJ5KVxuXG4gIC8vIHRoaXMgbmVlZHMgdG8gYmUgaW52b2tlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIE9ic2VydmVyIGJlY2F1c2UgdGhhdCBjYW4gY3JlYXRlIGEgY2FjaGUgZW50cnlcbiAgY29uc3QgaXNOZXdDYWNoZUVudHJ5ID0gIWNsaWVudFxuICAgIC5nZXRRdWVyeUNhY2hlKClcbiAgICAuZ2V0KGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKVxuXG4gIGNvbnN0IFtvYnNlcnZlcl0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PlxuICAgICAgbmV3IE9ic2VydmVyPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5RGF0YSwgVFF1ZXJ5S2V5PihcbiAgICAgICAgY2xpZW50LFxuICAgICAgICBkZWZhdWx0ZWRPcHRpb25zLFxuICAgICAgKSxcbiAgKVxuXG4gIC8vIG5vdGU6IHRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzZVN5bmNFeHRlcm5hbFN0b3JlXG4gIGNvbnN0IHJlc3VsdCA9IG9ic2VydmVyLmdldE9wdGltaXN0aWNSZXN1bHQoZGVmYXVsdGVkT3B0aW9ucylcblxuICBjb25zdCBzaG91bGRTdWJzY3JpYmUgPSAhaXNSZXN0b3JpbmcgJiYgb3B0aW9ucy5zdWJzY3JpYmVkICE9PSBmYWxzZVxuICBSZWFjdC51c2VTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAgIChvblN0b3JlQ2hhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc2hvdWxkU3Vic2NyaWJlXG4gICAgICAgICAgPyBvYnNlcnZlci5zdWJzY3JpYmUobm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKG9uU3RvcmVDaGFuZ2UpKVxuICAgICAgICAgIDogbm9vcFxuXG4gICAgICAgIC8vIFVwZGF0ZSByZXN1bHQgdG8gbWFrZSBzdXJlIHdlIGRpZCBub3QgbWlzcyBhbnkgcXVlcnkgdXBkYXRlc1xuICAgICAgICAvLyBiZXR3ZWVuIGNyZWF0aW5nIHRoZSBvYnNlcnZlciBhbmQgc3Vic2NyaWJpbmcgdG8gaXQuXG4gICAgICAgIG9ic2VydmVyLnVwZGF0ZVJlc3VsdCgpXG5cbiAgICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlXG4gICAgICB9LFxuICAgICAgW29ic2VydmVyLCBzaG91bGRTdWJzY3JpYmVdLFxuICAgICksXG4gICAgKCkgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLFxuICAgICgpID0+IG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSxcbiAgKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb2JzZXJ2ZXIuc2V0T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zKVxuICB9LCBbZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXJdKVxuXG4gIC8vIEhhbmRsZSBzdXNwZW5zZVxuICBpZiAoc2hvdWxkU3VzcGVuZChkZWZhdWx0ZWRPcHRpb25zLCByZXN1bHQpKSB7XG4gICAgdGhyb3cgZmV0Y2hPcHRpbWlzdGljKGRlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyLCBlcnJvclJlc2V0Qm91bmRhcnkpXG4gIH1cblxuICAvLyBIYW5kbGUgZXJyb3IgYm91bmRhcnlcbiAgaWYgKFxuICAgIGdldEhhc0Vycm9yKHtcbiAgICAgIHJlc3VsdCxcbiAgICAgIGVycm9yUmVzZXRCb3VuZGFyeSxcbiAgICAgIHRocm93T25FcnJvcjogZGVmYXVsdGVkT3B0aW9ucy50aHJvd09uRXJyb3IsXG4gICAgICBxdWVyeTogY2xpZW50XG4gICAgICAgIC5nZXRRdWVyeUNhY2hlKClcbiAgICAgICAgLmdldDxcbiAgICAgICAgICBUUXVlcnlGbkRhdGEsXG4gICAgICAgICAgVEVycm9yLFxuICAgICAgICAgIFRRdWVyeURhdGEsXG4gICAgICAgICAgVFF1ZXJ5S2V5XG4gICAgICAgID4oZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2gpLFxuICAgICAgc3VzcGVuc2U6IGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UsXG4gICAgfSlcbiAgKSB7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yXG4gIH1cblxuICA7KGNsaWVudC5nZXREZWZhdWx0T3B0aW9ucygpLnF1ZXJpZXMgYXMgYW55KT8uX2V4cGVyaW1lbnRhbF9hZnRlclF1ZXJ5Py4oXG4gICAgZGVmYXVsdGVkT3B0aW9ucyxcbiAgICByZXN1bHQsXG4gIClcblxuICBpZiAoXG4gICAgZGVmYXVsdGVkT3B0aW9ucy5leHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlciAmJlxuICAgICFpc1NlcnZlciAmJlxuICAgIHdpbGxGZXRjaChyZXN1bHQsIGlzUmVzdG9yaW5nKVxuICApIHtcbiAgICBjb25zdCBwcm9taXNlID0gaXNOZXdDYWNoZUVudHJ5XG4gICAgICA/IC8vIEZldGNoIGltbWVkaWF0ZWx5IG9uIHJlbmRlciBpbiBvcmRlciB0byBlbnN1cmUgYC5wcm9taXNlYCBpcyByZXNvbHZlZCBldmVuIGlmIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkXG4gICAgICAgIGZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlciwgZXJyb3JSZXNldEJvdW5kYXJ5KVxuICAgICAgOiAvLyBzdWJzY3JpYmUgdG8gdGhlIFwiY2FjaGUgcHJvbWlzZVwiIHNvIHRoYXQgd2UgY2FuIGZpbmFsaXplIHRoZSBjdXJyZW50VGhlbmFibGUgb25jZSBkYXRhIGNvbWVzIGluXG4gICAgICAgIGNsaWVudC5nZXRRdWVyeUNhY2hlKCkuZ2V0KGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKT8ucHJvbWlzZVxuXG4gICAgcHJvbWlzZT8uY2F0Y2gobm9vcCkuZmluYWxseSgoKSA9PiB7XG4gICAgICAvLyBgLnVwZGF0ZVJlc3VsdCgpYCB3aWxsIHRyaWdnZXIgYC4jY3VycmVudFRoZW5hYmxlYCB0byBmaW5hbGl6ZVxuICAgICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KClcbiAgICB9KVxuICB9XG5cbiAgLy8gSGFuZGxlIHJlc3VsdCBwcm9wZXJ0eSB1c2FnZSB0cmFja2luZ1xuICByZXR1cm4gIWRlZmF1bHRlZE9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wc1xuICAgID8gb2JzZXJ2ZXIudHJhY2tSZXN1bHQocmVzdWx0KVxuICAgIDogcmVzdWx0XG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IFF1ZXJ5T2JzZXJ2ZXIgfSBmcm9tICdAdGFuc3RhY2svcXVlcnktY29yZSdcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gJy4vdXNlQmFzZVF1ZXJ5J1xuaW1wb3J0IHR5cGUge1xuICBEZWZhdWx0RXJyb3IsXG4gIE5vSW5mZXIsXG4gIFF1ZXJ5Q2xpZW50LFxuICBRdWVyeUtleSxcbn0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgdHlwZSB7XG4gIERlZmluZWRVc2VRdWVyeVJlc3VsdCxcbiAgVXNlUXVlcnlPcHRpb25zLFxuICBVc2VRdWVyeVJlc3VsdCxcbn0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgRGVmaW5lZEluaXRpYWxEYXRhT3B0aW9ucyxcbiAgVW5kZWZpbmVkSW5pdGlhbERhdGFPcHRpb25zLFxufSBmcm9tICcuL3F1ZXJ5T3B0aW9ucydcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5PFxuICBUUXVlcnlGbkRhdGEgPSB1bmtub3duLFxuICBURXJyb3IgPSBEZWZhdWx0RXJyb3IsXG4gIFREYXRhID0gVFF1ZXJ5Rm5EYXRhLFxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSA9IFF1ZXJ5S2V5LFxuPihcbiAgb3B0aW9uczogRGVmaW5lZEluaXRpYWxEYXRhT3B0aW9uczxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVERhdGEsIFRRdWVyeUtleT4sXG4gIHF1ZXJ5Q2xpZW50PzogUXVlcnlDbGllbnQsXG4pOiBEZWZpbmVkVXNlUXVlcnlSZXN1bHQ8Tm9JbmZlcjxURGF0YT4sIFRFcnJvcj5cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5PFxuICBUUXVlcnlGbkRhdGEgPSB1bmtub3duLFxuICBURXJyb3IgPSBEZWZhdWx0RXJyb3IsXG4gIFREYXRhID0gVFF1ZXJ5Rm5EYXRhLFxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSA9IFF1ZXJ5S2V5LFxuPihcbiAgb3B0aW9uczogVW5kZWZpbmVkSW5pdGlhbERhdGFPcHRpb25zPFRRdWVyeUZuRGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcbiAgcXVlcnlDbGllbnQ/OiBRdWVyeUNsaWVudCxcbik6IFVzZVF1ZXJ5UmVzdWx0PE5vSW5mZXI8VERhdGE+LCBURXJyb3I+XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeTxcbiAgVFF1ZXJ5Rm5EYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBURGF0YSA9IFRRdWVyeUZuRGF0YSxcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSBRdWVyeUtleSxcbj4oXG4gIG9wdGlvbnM6IFVzZVF1ZXJ5T3B0aW9uczxUUXVlcnlGbkRhdGEsIFRFcnJvciwgVERhdGEsIFRRdWVyeUtleT4sXG4gIHF1ZXJ5Q2xpZW50PzogUXVlcnlDbGllbnQsXG4pOiBVc2VRdWVyeVJlc3VsdDxOb0luZmVyPFREYXRhPiwgVEVycm9yPlxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUXVlcnkob3B0aW9uczogVXNlUXVlcnlPcHRpb25zLCBxdWVyeUNsaWVudD86IFF1ZXJ5Q2xpZW50KSB7XG4gIHJldHVybiB1c2VCYXNlUXVlcnkob3B0aW9ucywgUXVlcnlPYnNlcnZlciwgcXVlcnlDbGllbnQpXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PYnNlcnZlcixcbiAgbm9vcCxcbiAgbm90aWZ5TWFuYWdlcixcbiAgc2hvdWxkVGhyb3dFcnJvcixcbn0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gJy4vUXVlcnlDbGllbnRQcm92aWRlcidcbmltcG9ydCB0eXBlIHtcbiAgVXNlTXV0YXRlRnVuY3Rpb24sXG4gIFVzZU11dGF0aW9uT3B0aW9ucyxcbiAgVXNlTXV0YXRpb25SZXN1bHQsXG59IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRFcnJvciwgUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcXVlcnktY29yZSdcblxuLy8gSE9PS1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTXV0YXRpb248XG4gIFREYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBUVmFyaWFibGVzID0gdm9pZCxcbiAgVENvbnRleHQgPSB1bmtub3duLFxuPihcbiAgb3B0aW9uczogVXNlTXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PixcbiAgcXVlcnlDbGllbnQ/OiBRdWVyeUNsaWVudCxcbik6IFVzZU11dGF0aW9uUmVzdWx0PFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiB7XG4gIGNvbnN0IGNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KHF1ZXJ5Q2xpZW50KVxuXG4gIGNvbnN0IFtvYnNlcnZlcl0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PlxuICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXI8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+KFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApLFxuICApXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKG9wdGlvbnMpXG4gIH0sIFtvYnNlcnZlciwgb3B0aW9uc10pXG5cbiAgY29uc3QgcmVzdWx0ID0gUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAob25TdG9yZUNoYW5nZSkgPT5cbiAgICAgICAgb2JzZXJ2ZXIuc3Vic2NyaWJlKG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhvblN0b3JlQ2hhbmdlKSksXG4gICAgICBbb2JzZXJ2ZXJdLFxuICAgICksXG4gICAgKCkgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLFxuICAgICgpID0+IG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSxcbiAgKVxuXG4gIGNvbnN0IG11dGF0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrPFxuICAgIFVzZU11dGF0ZUZ1bmN0aW9uPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PlxuICA+KFxuICAgICh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIG9ic2VydmVyLm11dGF0ZSh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpLmNhdGNoKG5vb3ApXG4gICAgfSxcbiAgICBbb2JzZXJ2ZXJdLFxuICApXG5cbiAgaWYgKFxuICAgIHJlc3VsdC5lcnJvciAmJlxuICAgIHNob3VsZFRocm93RXJyb3Iob2JzZXJ2ZXIub3B0aW9ucy50aHJvd09uRXJyb3IsIFtyZXN1bHQuZXJyb3JdKVxuICApIHtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3JcbiAgfVxuXG4gIHJldHVybiB7IC4uLnJlc3VsdCwgbXV0YXRlLCBtdXRhdGVBc3luYzogcmVzdWx0Lm11dGF0ZSB9XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IElNaXJhbnRlc0ZvdW5kYXRpb25Db250ZXh0LCBVc2VyIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBNaXJhbnRlc0ZvdW5kYXRpb25Db250ZXh0ID1cclxuICBjcmVhdGVDb250ZXh0PElNaXJhbnRlc0ZvdW5kYXRpb25Db250ZXh0Pih7XHJcbiAgICBsb2NhbGU6IFwicHRcIixcclxuICAgIHVzZXI6IHt9IGFzIFVzZXIsXHJcbiAgfSk7XHJcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTWlyYW50ZXNGb3VuZGF0aW9uQ29udGV4dCB9IGZyb20gXCIuL01pcmFudGVzRm91bmRhdGlvbkNvbnRleHRcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1c2VNaXJhbnRlc0ZvdW5kYXRpb24oKSB7XHJcbiAgY29uc3QgbWlyYW50ZXNDb250ZXh0ID0gdXNlQ29udGV4dChNaXJhbnRlc0ZvdW5kYXRpb25Db250ZXh0KTtcclxuXHJcbiAgaWYgKCFtaXJhbnRlc0NvbnRleHQpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgXCJ1c2VNaXJhbnRlc0ZvdW5kYXRpb24gbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE1pcmFudGVzRm91bmRhdGlvblByb3ZpZGVyXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbWlyYW50ZXNDb250ZXh0O1xyXG59XHJcbiIsImltcG9ydCB7IHVzZU1pcmFudGVzRm91bmRhdGlvbiB9IGZyb20gXCIuLi8uLi9jb250ZXh0L3VzZU1pcmFudGVzRm91bmRhdGlvblwiXHJcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIlxyXG5cclxuZXhwb3J0IGNvbnN0IHVzZUF4aW9zQXBpID0gKCkgPT4ge1xyXG4gIGNvbnN0IHsgdXNlciwgYXNzZXRzQXBpVXJsIH0gPSB1c2VNaXJhbnRlc0ZvdW5kYXRpb24oKVxyXG5cclxuICBjb25zdCBhc3NldHNBcGkgPSBheGlvcy5jcmVhdGUoe1xyXG4gICAgYmFzZVVSTDogYXNzZXRzQXBpVXJsID8/IFwiXCIsXHJcbiAgfSlcclxuXHJcbiAgYXNzZXRzQXBpLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoY29uZmlnKSA9PiB7XHJcbiAgICBpZiAodXNlcj8uYWNjZXNzVG9rZW4pIHtcclxuICAgICAgY29uZmlnLmhlYWRlcnNbXCJ4LWFjY2Vzcy10b2tlblwiXSA9IHVzZXI/LmFjY2Vzc1Rva2VuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGFzc2V0c0FwaVxyXG4gIH1cclxufSIsImltcG9ydCB7IEF4aW9zSW5zdGFuY2UgfSBmcm9tIFwiYXhpb3NcIjtcclxuaW1wb3J0IHtcclxuICBBc3NldFVwbG9hZFJlcXVlc3QsXHJcbiAgQXNzZXRVcGxvYWRSZXNwb25zZSxcclxuICBBc3NldFZlcnNpb25zUmVzcG9uc2UsXHJcbiAgU2lnbmVkVXJsUmVxdWVzdCxcclxuICBTaWduZWRVcmxSZXNwb25zZSxcclxufSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwbG9hZEFzc2V0KGFwaTogQXhpb3NJbnN0YW5jZSwgaW5wdXQ6IEFzc2V0VXBsb2FkUmVxdWVzdCkge1xyXG4gIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcclxuICBmb3JtLmFwcGVuZChcImZpbGVcIiwgaW5wdXQuZmlsZSk7XHJcbiAgZm9ybS5hcHBlbmQoXCJvd25lcl90eXBlXCIsIGlucHV0Lm93bmVyX3R5cGUpO1xyXG4gIGZvcm0uYXBwZW5kKFwiaXNfcHVibGljXCIsIFN0cmluZyhpbnB1dC5pc19wdWJsaWMpKTtcclxuXHJcbiAgaWYgKGlucHV0Lm93bmVyX2lkKSB7XHJcbiAgICBmb3JtLmFwcGVuZChcIm93bmVyX2lkXCIsIGlucHV0Lm93bmVyX2lkKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXBpLnBvc3Q8QXNzZXRVcGxvYWRSZXNwb25zZT4oXCIvYXNzZXRzXCIsIGZvcm0pO1xyXG4gIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmVkVXJsKGFwaTogQXhpb3NJbnN0YW5jZSwgaW5wdXQ6IFNpZ25lZFVybFJlcXVlc3QpIHtcclxuICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGFwaS5wb3N0PFNpZ25lZFVybFJlc3BvbnNlPihcclxuICAgIFwiL2Fzc2V0cy9zaWduZWQtdXJsXCIsXHJcbiAgICBpbnB1dFxyXG4gICk7XHJcbiAgcmV0dXJuIGRhdGE7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBc3NldFZlcnNpb25zKGFwaTogQXhpb3NJbnN0YW5jZSwgYXNzZXRJZDogc3RyaW5nKSB7XHJcbiAgaWYgKCFhc3NldElkKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGFzc2V0SWRcIik7XHJcblxyXG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXBpLmdldDxBc3NldFZlcnNpb25zUmVzcG9uc2U+KFxyXG4gICAgYC9hc3NldHMvJHthc3NldElkfS92ZXJzaW9uc2BcclxuICApO1xyXG5cclxuICByZXR1cm4gZGF0YTtcclxufVxyXG4iLCJpbXBvcnQgeyBBc3NldFZlcnNpb25LZXksIEFzc2V0VmVyc2lvbnNSZXNwb25zZSB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG4vKipcclxuICogQ2hvb3NlIHRoZSBiZXN0IGFzc2V0IHZlcnNpb24gYmFzZWQgb246XHJcbiAqIDEuIEFQSSByZWNvbW1lbmRlZCBmaWVsZFxyXG4gKiAyLiBEZXZpY2UgcGl4ZWwgcmF0aW8gKGhpZ2ggRFBJIOKGkiBsYXJnZSlcclxuICogMy4gTmV0d29yayBzcGVlZCAoc2xvdyDihpIgc21hbGwpXHJcbiAqIDQuIERlZmF1bHQgdG8gbWVkaXVtXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJlc3RWZXJzaW9uKGRhdGE6IEFzc2V0VmVyc2lvbnNSZXNwb25zZSk6IEFzc2V0VmVyc2lvbktleSB7XHJcbiAgaWYgKCFkYXRhIHx8ICFkYXRhLnZlcnNpb25zKSByZXR1cm4gXCJtZWRpdW1cIjtcclxuXHJcbiAgY29uc3QgdmVyc2lvbnMgPSBkYXRhLnZlcnNpb25zO1xyXG5cclxuICAvLyAxLiBQcmVmZXIgdmVyc2lvbiBtYXJrZWQgYXMgcmVjb21tZW5kZWQgYnkgQVBJXHJcbiAgY29uc3QgcmVjb21tZW5kZWQgPSAoT2JqZWN0LmVudHJpZXModmVyc2lvbnMpIGFzIFtBc3NldFZlcnNpb25LZXksIGFueV1bXSlcclxuICAgIC5maW5kKChbXywgdl0pID0+IHY/LnJlY29tbWVuZGVkKTtcclxuICBpZiAocmVjb21tZW5kZWQpIHJldHVybiByZWNvbW1lbmRlZFswXTtcclxuXHJcbiAgLy8gMi4gSGlnaCBEUEkgZGlzcGxheXMg4oaSIGxhcmdlXHJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPj0gMikge1xyXG4gICAgaWYgKHZlcnNpb25zLmxhcmdlKSByZXR1cm4gXCJsYXJnZVwiO1xyXG4gIH1cclxuXHJcbiAgLy8gMy4gU2xvdyBuZXR3b3JrIOKGkiBzbWFsbFxyXG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBjb25zdCBjb25uZWN0aW9uID0gKG5hdmlnYXRvciBhcyBhbnkpPy5jb25uZWN0aW9uO1xyXG4gICAgY29uc3QgZWZmZWN0aXZlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gY29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZTtcclxuXHJcbiAgICBpZiAoZWZmZWN0aXZlVHlwZSAmJiBbXCJzbG93LTJnXCIsIFwiMmdcIl0uaW5jbHVkZXMoZWZmZWN0aXZlVHlwZSkpIHtcclxuICAgICAgaWYgKHZlcnNpb25zLnNtYWxsKSByZXR1cm4gXCJzbWFsbFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gNC4gRGVmYXVsdCDihpIgbWVkaXVtXHJcbiAgcmV0dXJuIFwibWVkaXVtXCI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHRyYWN0IGFzc2V0SWQgZnJvbSB0aGUgYXNzZXQgVVJMIHJldHVybmVkIGJ5IFBPU1QgL2Fzc2V0c1xyXG4gKiBFeGFtcGxlOlxyXG4gKiBodHRwczovL2Nkbi8uLi4vMTIzYWJjLmpwZyDihpIgXCIxMjNhYmNcIlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBc3NldElkKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gVVJMIHByb3ZpZGVkXCIpO1xyXG5cclxuICBjb25zdCBmaWxlTmFtZSA9IHVybC5zcGxpdChcIi9cIikucG9wKCk7XHJcbiAgY29uc3QgW2lkXSA9IGZpbGVOYW1lPy5zcGxpdChcIi5cIikgPz8gW107XHJcblxyXG4gIGlmICghaWQpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhc3NldCBVUkw6ICR7dXJsfWApO1xyXG5cclxuICByZXR1cm4gaWQ7XHJcbn1cclxuIiwiaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xyXG5pbXBvcnQgeyB1c2VBeGlvc0FwaSB9IGZyb20gXCIuL3VzZS1heGlvc1wiO1xyXG5pbXBvcnQge1xyXG4gIEFzc2V0VXBsb2FkUmVxdWVzdCxcclxuICBBc3NldFZlcnNpb25zUmVzcG9uc2UsXHJcbiAgU2lnbmVkVXJsUmVxdWVzdCxcclxufSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQge1xyXG4gIGdldEFzc2V0VmVyc2lvbnMsXHJcbiAgZ2V0U2lnbmVkVXJsLFxyXG4gIHVwbG9hZEFzc2V0LFxyXG59IGZyb20gXCIuL2Fzc2V0c1wiO1xyXG5pbXBvcnQgeyByZXNvbHZlQmVzdFZlcnNpb24gfSBmcm9tIFwiLi9yZXNvbHZlLWFzc2V0LXZlcnNpb25cIjtcclxuXHJcbi8qKiBQT1NUIC9hc3NldHMgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwbG9hZEFzc2V0KCkge1xyXG4gIGNvbnN0IHsgYXNzZXRzQXBpIH0gPSB1c2VBeGlvc0FwaSgpO1xyXG5cclxuICBjb25zdCB7IG11dGF0ZTogdXBsb2FkQXNzZXRzLCBpc1BlbmRpbmc6IGlzVXBsb2FkaW5nQXNzZXQgfSA9IHVzZU11dGF0aW9uKHtcclxuICAgIG11dGF0aW9uRm46IChpbnB1dDogQXNzZXRVcGxvYWRSZXF1ZXN0KSA9PiB1cGxvYWRBc3NldChhc3NldHNBcGksIGlucHV0KSxcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHVwbG9hZEFzc2V0cyxcclxuICAgIGlzVXBsb2FkaW5nQXNzZXQsXHJcbiAgfTtcclxufVxyXG5cclxuLyoqIFBPU1QgL2Fzc2V0cy9zaWduZWQtdXJsICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1c2VTaWduZWRVcmwoKSB7XHJcbiAgY29uc3QgeyBhc3NldHNBcGkgfSA9IHVzZUF4aW9zQXBpKCk7XHJcblxyXG4gIGNvbnN0IHsgbXV0YXRlOiBwb3N0U2lnbmVkVXJsLCBpc1BlbmRpbmc6IGlzUG9zdGluZ1NpZ25lZFVybCB9ID0gdXNlTXV0YXRpb24oe1xyXG4gICAgbXV0YXRpb25GbjogKGlucHV0OiBTaWduZWRVcmxSZXF1ZXN0KSA9PiBnZXRTaWduZWRVcmwoYXNzZXRzQXBpLCBpbnB1dCksXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBwb3N0U2lnbmVkVXJsLFxyXG4gICAgaXNQb3N0aW5nU2lnbmVkVXJsLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKiBHRVQgL2Fzc2V0cy86aWQvdmVyc2lvbnMgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZUFzc2V0VmVyc2lvbnMoYXNzZXRJZD86IHN0cmluZykge1xyXG4gIGNvbnN0IHsgYXNzZXRzQXBpIH0gPSB1c2VBeGlvc0FwaSgpO1xyXG5cclxuICBjb25zdCB7XHJcbiAgICBkYXRhOiBhc3NldFZlcnNpb25zLFxyXG4gICAgaXNMb2FkaW5nOiBpc0dldHRpbmdBc3NldFZlcnNpb25zLFxyXG4gICAgZXJyb3IsXHJcbiAgfSA9IHVzZVF1ZXJ5PEFzc2V0VmVyc2lvbnNSZXNwb25zZT4oe1xyXG4gICAgcXVlcnlLZXk6IFtcImFzc2V0LXZlcnNpb25zXCIsIGFzc2V0SWRdLFxyXG4gICAgcXVlcnlGbjogKCkgPT4gZ2V0QXNzZXRWZXJzaW9ucyhhc3NldHNBcGksIGFzc2V0SWQhKSxcclxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oYXNzZXRJZCksXHJcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDUsIC8vIDUgbWludXRlc1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgYXNzZXRWZXJzaW9ucyxcclxuICAgIGlzR2V0dGluZ0Fzc2V0VmVyc2lvbnMsXHJcbiAgICBlcnJvcixcclxuICB9O1xyXG59XHJcblxyXG4vKiogQXV0by1waWNrcyBiZXN0IHZlcnNpb24gKGxhcmdlL21lZGl1bS9zbWFsbCkgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZUJlc3RBc3NldFZlcnNpb24oYXNzZXRJZD86IHN0cmluZykge1xyXG4gIGNvbnN0IHsgYXNzZXRzQXBpIH0gPSB1c2VBeGlvc0FwaSgpO1xyXG5cclxuICBjb25zdCB7XHJcbiAgICBkYXRhOiBiZXN0VXJsLFxyXG4gICAgaXNMb2FkaW5nOiBpc0dldHRpbmdVcmwsXHJcbiAgICBlcnJvcixcclxuICB9ID0gdXNlUXVlcnkoe1xyXG4gICAgcXVlcnlLZXk6IFtcImFzc2V0LWJlc3QtdmVyc2lvblwiLCBhc3NldElkXSxcclxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oYXNzZXRJZCksXHJcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRBc3NldFZlcnNpb25zKGFzc2V0c0FwaSwgYXNzZXRJZCEpO1xyXG5cclxuICAgICAgaWYgKCFkYXRhPy52ZXJzaW9ucykgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBjb25zdCBiZXN0VmVyc2lvbiA9IHJlc29sdmVCZXN0VmVyc2lvbihkYXRhKTtcclxuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbnNbYmVzdFZlcnNpb25dPy51cmwgPz8gbnVsbDtcclxuICAgIH0sXHJcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDUsXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICB1cmw6IGJlc3RVcmwsXHJcbiAgICBpc0dldHRpbmdVcmwsXHJcbiAgICBlcnJvcixcclxuICB9O1xyXG59XHJcbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mirantes-micro/foundation-design-system",
3
3
  "description": "A scalable and customizable design system package featuring a collection of reusable React components, utility functions, and context providers. Built to enforce visual and functional consistency across applications, this package offers accessible, themeable UI elements, shared logic through utility helpers, and context-based providers for managing global state such as themes, modals, and user sessions.",
4
- "version": "1.2.60",
4
+ "version": "1.2.63",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Mirantes Frontend team"
@@ -27,7 +27,7 @@
27
27
  "scripts": {
28
28
  "dev": "webpack serve --mode development",
29
29
  "build": "webpack --mode production",
30
- "build:webpack": "tsup src/components/fromMirantes/index.ts --format cjs --minify",
30
+ "build:webpack": "tsup src/components/fromMirantes/index.ts src/mirantes-utils/index.ts --format cjs --minify",
31
31
  "release": "pnpm build:webpack && npm publish",
32
32
  "build:css": "npx tailwindcss -i ./src/styles/globals.css -o ./dist/styles.css --minify"
33
33
  },