@digitransit-component/digitransit-component-favourite-editing-modal 5.1.2 → 5.1.4

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,7 @@
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@hsl-fi/loading-indicators"),require("@hsl-fi/modal"),require("@digitransit-component/digitransit-component-icon"),require("@digitransit-component/digitransit-component-dialog-modal"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","react-sortablejs","@hsl-fi/loading-indicators","@hsl-fi/modal","@digitransit-component/digitransit-component-icon","@digitransit-component/digitransit-component-dialog-modal","i18next"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["@digitransit-component/digitransit-component-favourite-editing-modal"]={},t.PropTypes,t.React,t.reactI18next,t.reactSortablejs,t.LoadingIndicators,t.Modal,t.Icon,t.DialogModal,t.i18next)}(this,function(t,e,r,n,i,o,a,u,s,l){"use strict";function c(t){return t&&t.__esModule?t:{default:t}}var f=c(e),d=c(r),v=c(a),_=c(u),p=c(s);function y(t){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y(t)}function h(t){var e=function(t,e){if("object"!=y(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if("object"!=y(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==y(e)?e:e+""}function m(t,e,r){return(e=h(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function b(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var g,j={exports:{}};
2
+ /*!
3
+ Copyright (c) 2018 Jed Watson.
4
+ Licensed under the MIT License (MIT), see
5
+ http://jedwatson.github.io/classnames
6
+ */var w,x,O,S,U,E,I,A,k,q,P,F,D,M,R,z,N,T,C,L,J,B,H,$,W,G,V,Y,X,K,Z,Q,tt,et,rt,nt,it,ot,at,ut,st,lt,ct,ft,dt,vt,_t,pt,yt,ht,mt,bt,gt,jt,wt,xt,Ot,St,Ut,Et,It,At,kt,qt,Pt,Ft,Dt,Mt,Rt,zt,Nt,Tt,Ct,Lt,Jt,Bt,Ht,$t,Wt,Gt,Vt,Yt,Xt,Kt,Zt,Qt,te,ee,re,ne,ie,oe,ae,ue,se,le,ce,fe,de,ve,_e,pe,ye,he,me,be,ge,je,we,xe,Oe,Se,Ue,Ee,Ie,Ae,ke,qe,Pe,Fe,De,Me,Re,ze,Ne,Te,Ce,Le,Je,Be,He,$e,We,Ge,Ve,Ye,Xe,Ke,Ze,Qe,tr,er,rr,nr,ir=(g||(g=1,function(t){!function(){var e={}.hasOwnProperty;function r(){for(var t="",e=0;e<arguments.length;e++){var r=arguments[e];r&&(t=i(t,n(r)))}return t}function n(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return r.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var n="";for(var o in t)e.call(t,o)&&t[o]&&(n=i(n,o));return n}function i(t,e){return e?t?t+" "+e:t+e:t}t.exports?(r.default=r,t.exports=r):window.classNames=r}()}(j)),j.exports),or=b(ir);function ar(){if(x)return w;x=1;var t="object"==typeof global&&global&&global.Object===Object&&global;return w=t}function ur(){if(S)return O;S=1;var t=ar(),e="object"==typeof self&&self&&self.Object===Object&&self,r=t||e||Function("return this")();return O=r}function sr(){if(E)return U;E=1;var t=ur().Symbol;return U=t}function lr(){if(F)return P;F=1;var t=sr(),e=function(){if(A)return I;A=1;var t=sr(),e=Object.prototype,r=e.hasOwnProperty,n=e.toString,i=t?t.toStringTag:void 0;return I=function(t){var e=r.call(t,i),o=t[i];try{t[i]=void 0;var a=!0}catch(t){}var u=n.call(t);return a&&(e?t[i]=o:delete t[i]),u}}(),r=function(){if(q)return k;q=1;var t=Object.prototype.toString;return k=function(e){return t.call(e)}}(),n=t?t.toStringTag:void 0;return P=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":n&&n in Object(t)?e(t):r(t)}}function cr(){if(M)return D;return M=1,D=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}}function fr(){if(z)return R;z=1;var t=lr(),e=cr();return R=function(r){if(!e(r))return!1;var n=t(r);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}}function dr(){if(L)return C;L=1;var t,e=function(){if(T)return N;T=1;var t=ur()["__core-js_shared__"];return N=t}(),r=(t=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"";return C=function(t){return!!r&&r in t}}function vr(){if(B)return J;B=1;var t=Function.prototype.toString;return J=function(e){if(null!=e){try{return t.call(e)}catch(t){}try{return e+""}catch(t){}}return""}}function _r(){if(Y)return V;Y=1;var t=function(){if($)return H;$=1;var t=fr(),e=dr(),r=cr(),n=vr(),i=/^\[object .+?Constructor\]$/,o=Function.prototype,a=Object.prototype,u=o.toString,s=a.hasOwnProperty,l=RegExp("^"+u.call(s).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");return H=function(o){return!(!r(o)||e(o))&&(t(o)?l:i).test(n(o))}}(),e=G?W:(G=1,W=function(t,e){return null==t?void 0:t[e]});return V=function(r,n){var i=e(r,n);return t(i)?i:void 0}}function pr(){if(K)return X;K=1;var t=_r()(Object,"create");return X=t}function yr(){if(lt)return st;lt=1;var t=function(){if(Q)return Z;Q=1;var t=pr();return Z=function(){this.__data__=t?t(null):{},this.size=0}}(),e=et?tt:(et=1,tt=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}),r=function(){if(nt)return rt;nt=1;var t=pr(),e=Object.prototype.hasOwnProperty;return rt=function(r){var n=this.__data__;if(t){var i=n[r];return"__lodash_hash_undefined__"===i?void 0:i}return e.call(n,r)?n[r]:void 0}}(),n=function(){if(ot)return it;ot=1;var t=pr(),e=Object.prototype.hasOwnProperty;return it=function(r){var n=this.__data__;return t?void 0!==n[r]:e.call(n,r)}}(),i=function(){if(ut)return at;ut=1;var t=pr();return at=function(e,r){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=t&&void 0===r?"__lodash_hash_undefined__":r,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,st=o}function hr(){if(vt)return dt;return vt=1,dt=function(t,e){return t===e||t!=t&&e!=e}}function mr(){if(pt)return _t;pt=1;var t=hr();return _t=function(e,r){for(var n=e.length;n--;)if(t(e[n][0],r))return n;return-1}}function br(){if(St)return Ot;St=1;var t=ft?ct:(ft=1,ct=function(){this.__data__=[],this.size=0}),e=function(){if(ht)return yt;ht=1;var t=mr(),e=Array.prototype.splice;return yt=function(r){var n=this.__data__,i=t(n,r);return!(i<0||(i==n.length-1?n.pop():e.call(n,i,1),--this.size,0))},yt}(),r=function(){if(bt)return mt;bt=1;var t=mr();return mt=function(e){var r=this.__data__,n=t(r,e);return n<0?void 0:r[n][1]},mt}(),n=function(){if(jt)return gt;jt=1;var t=mr();return gt=function(e){return t(this.__data__,e)>-1}}(),i=function(){if(xt)return wt;xt=1;var t=mr();return wt=function(e,r){var n=this.__data__,i=t(n,e);return i<0?(++this.size,n.push([e,r])):n[i][1]=r,this},wt}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Ot=o}function gr(){if(Et)return Ut;Et=1;var t=_r()(ur(),"Map");return Ut=t}function jr(){if(Ft)return Pt;Ft=1;var t=qt?kt:(qt=1,kt=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t});return Pt=function(e,r){var n=e.__data__;return t(r)?n["string"==typeof r?"string":"hash"]:n.map}}function wr(){if(Bt)return Jt;Bt=1;var t=function(){if(At)return It;At=1;var t=yr(),e=br(),r=gr();return It=function(){this.size=0,this.__data__={hash:new t,map:new(r||e),string:new t}}}(),e=function(){if(Mt)return Dt;Mt=1;var t=jr();return Dt=function(e){var r=t(this,e).delete(e);return this.size-=r?1:0,r}}(),r=function(){if(zt)return Rt;zt=1;var t=jr();return Rt=function(e){return t(this,e).get(e)}}(),n=function(){if(Tt)return Nt;Tt=1;var t=jr();return Nt=function(e){return t(this,e).has(e)}}(),i=function(){if(Lt)return Ct;Lt=1;var t=jr();return Ct=function(e,r){var n=t(this,e),i=n.size;return n.set(e,r),this.size+=n.size==i?0:1,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Jt=o}function xr(){if(Yt)return Vt;Yt=1;var t=wr(),e=$t?Ht:($t=1,Ht=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}),r=Gt?Wt:(Gt=1,Wt=function(t){return this.__data__.has(t)});function n(e){var r=-1,n=null==e?0:e.length;for(this.__data__=new t;++r<n;)this.add(e[r])}return n.prototype.add=n.prototype.push=e,n.prototype.has=r,Vt=n}function Or(){if(ne)return re;ne=1;var t=(Kt||(Kt=1,Xt=function(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}),Xt),e=Qt?Zt:(Qt=1,Zt=function(t){return t!=t}),r=(ee||(ee=1,te=function(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}),te);return re=function(n,i,o){return i==i?r(n,i,o):t(n,e,o)}}function Sr(){if(oe)return ie;oe=1;var t=Or();return ie=function(e,r){return!!(null==e?0:e.length)&&t(e,r,0)>-1}}function Ur(){if(ue)return ae;return ue=1,ae=function(t,e,r){for(var n=-1,i=null==t?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1},ae}function Er(){if(le)return se;return le=1,se=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i},se}function Ir(){if(fe)return ce;return fe=1,ce=function(t){return function(e){return t(e)}}}function Ar(){if(ve)return de;return ve=1,de=function(t,e){return t.has(e)}}function kr(){if(he)return ye;return he=1,ye=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t},ye}function qr(){if(be)return me;return be=1,me=function(t){return null!=t&&"object"==typeof t}}function Pr(){if(xe)return we;xe=1;var t=function(){if(je)return ge;je=1;var t=lr(),e=qr();return ge=function(r){return e(r)&&"[object Arguments]"==t(r)}}(),e=qr(),r=Object.prototype,n=r.hasOwnProperty,i=r.propertyIsEnumerable,o=t(function(){return arguments}())?t:function(t){return e(t)&&n.call(t,"callee")&&!i.call(t,"callee")};return we=o}function Fr(){if(Se)return Oe;Se=1;var t=Array.isArray;return Oe=t}function Dr(){if(Ae)return Ie;Ae=1;var t=kr(),e=function(){if(Ee)return Ue;Ee=1;var t=sr(),e=Pr(),r=Fr(),n=t?t.isConcatSpreadable:void 0;return Ue=function(t){return r(t)||e(t)||!!(n&&t&&t[n])}}();return Ie=function r(n,i,o,a,u){var s=-1,l=n.length;for(o||(o=e),u||(u=[]);++s<l;){var c=n[s];i>0&&o(c)?i>1?r(c,i-1,o,a,u):t(u,c):a||(u[u.length]=c)}return u},Ie}function Mr(){if(qe)return ke;return qe=1,ke=function(t){return t}}function Rr(){if(Me)return De;Me=1;var t=Fe?Pe:(Fe=1,Pe=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}),e=Math.max;return De=function(r,n,i){return n=e(void 0===n?r.length-1:n,0),function(){for(var o=arguments,a=-1,u=e(o.length-n,0),s=Array(u);++a<u;)s[a]=o[n+a];a=-1;for(var l=Array(n+1);++a<n;)l[a]=o[a];return l[n]=i(s),t(r,this,l)}},De}function zr(){if(Te)return Ne;Te=1;var t=_r(),e=function(){try{var e=t(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();return Ne=e}function Nr(){if(Le)return Ce;Le=1;var t=ze?Re:(ze=1,Re=function(t){return function(){return t}}),e=zr(),r=Mr();return Ce=e?function(r,n){return e(r,"toString",{configurable:!0,enumerable:!1,value:t(n),writable:!0})}:r}function Tr(){if($e)return He;$e=1;var t=Nr(),e=function(){if(Be)return Je;Be=1;var t=Date.now;return Je=function(e){var r=0,n=0;return function(){var i=t(),o=16-(i-n);if(n=i,o>0){if(++r>=800)return arguments[0]}else r=0;return e.apply(void 0,arguments)}},Je}(),r=e(t);return He=r}function Cr(){if(Ye)return Ve;Ye=1;return Ve=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}}function Lr(){if(Ke)return Xe;Ke=1;var t=fr(),e=Cr();return Xe=function(r){return null!=r&&e(r.length)&&!t(r)}}function Jr(){if(er)return tr;return er=1,tr=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}}var Br,Hr,$r,Wr,Gr,Vr,Yr,Xr,Kr,Zr,Qr,tn,en,rn,nn,on,an,un,sn,ln,cn,fn,dn,vn,_n,pn,yn,hn,mn,bn,gn,jn,wn,xn,On=function(){if(nr)return rr;nr=1;var t=function(){if(pe)return _e;pe=1;var t=xr(),e=Sr(),r=Ur(),n=Er(),i=Ir(),o=Ar();return _e=function(a,u,s,l){var c=-1,f=e,d=!0,v=a.length,_=[],p=u.length;if(!v)return _;s&&(u=n(u,i(s))),l?(f=r,d=!1):u.length>=200&&(f=o,d=!1,u=new t(u));t:for(;++c<v;){var y=a[c],h=null==s?y:s(y);if(y=l||0!==y?y:0,d&&h==h){for(var m=p;m--;)if(u[m]===h)continue t;_.push(y)}else f(u,h,l)||_.push(y)}return _},_e}(),e=Dr(),r=function(){if(Ge)return We;Ge=1;var t=Mr(),e=Rr(),r=Tr();return We=function(n,i){return r(e(n,i,t),n+"")}}(),n=function(){if(Qe)return Ze;Qe=1;var t=Lr(),e=qr();return Ze=function(r){return e(r)&&t(r)}}(),i=Jr(),o=r(function(r,o){var a=i(o);return n(a)&&(a=void 0),n(r)?t(r,e(o,1,n,!0),void 0,a):[]});return rr=o}(),Sn=b(On);function Un(){if(tn)return Qr;tn=1;var t=br(),e=function(){if(Hr)return Br;Hr=1;var t=br();return Br=function(){this.__data__=new t,this.size=0}}(),r=Wr?$r:(Wr=1,$r=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}),n=Vr?Gr:(Vr=1,Gr=function(t){return this.__data__.get(t)}),i=Xr?Yr:(Xr=1,Yr=function(t){return this.__data__.has(t)}),o=function(){if(Zr)return Kr;Zr=1;var t=br(),e=gr(),r=wr();return Kr=function(n,i){var o=this.__data__;if(o instanceof t){var a=o.__data__;if(!e||a.length<199)return a.push([n,i]),this.size=++o.size,this;o=this.__data__=new r(a)}return o.set(n,i),this.size=o.size,this}}();function a(e){var r=this.__data__=new t(e);this.size=r.size}return a.prototype.clear=e,a.prototype.delete=r,a.prototype.get=n,a.prototype.has=i,a.prototype.set=o,Qr=a}function En(){if(on)return nn;on=1;var t=xr(),e=(rn||(rn=1,en=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}),en),r=Ar();return nn=function(n,i,o,a,u,s){var l=1&o,c=n.length,f=i.length;if(c!=f&&!(l&&f>c))return!1;var d=s.get(n),v=s.get(i);if(d&&v)return d==i&&v==n;var _=-1,p=!0,y=2&o?new t:void 0;for(s.set(n,i),s.set(i,n);++_<c;){var h=n[_],m=i[_];if(a)var b=l?a(m,h,_,i,n,s):a(h,m,_,n,i,s);if(void 0!==b){if(b)continue;p=!1;break}if(y){if(!e(i,function(t,e){if(!r(y,e)&&(h===t||u(h,t,o,a,s)))return y.push(e)})){p=!1;break}}else if(h!==m&&!u(h,m,o,a,s)){p=!1;break}}return s.delete(n),s.delete(i),p},nn}function In(){if(un)return an;un=1;var t=ur().Uint8Array;return an=t}function An(){if(fn)return cn;return fn=1,cn=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r},cn}function kn(){if(vn)return dn;vn=1;var t=sr(),e=In(),r=hr(),n=En(),i=(ln||(ln=1,sn=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}),sn),o=An(),a=t?t.prototype:void 0,u=a?a.valueOf:void 0;return dn=function(t,a,s,l,c,f,d){switch(s){case"[object DataView]":if(t.byteLength!=a.byteLength||t.byteOffset!=a.byteOffset)return!1;t=t.buffer,a=a.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=a.byteLength||!f(new e(t),new e(a)));case"[object Boolean]":case"[object Date]":case"[object Number]":return r(+t,+a);case"[object Error]":return t.name==a.name&&t.message==a.message;case"[object RegExp]":case"[object String]":return t==a+"";case"[object Map]":var v=i;case"[object Set]":var _=1&l;if(v||(v=o),t.size!=a.size&&!_)return!1;var p=d.get(t);if(p)return p==a;l|=2,d.set(t,a);var y=n(v(t),v(a),l,c,f,d);return d.delete(t),y;case"[object Symbol]":if(u)return u.call(t)==u.call(a)}return!1}}function qn(){if(pn)return _n;pn=1;var t=kr(),e=Fr();return _n=function(r,n,i){var o=n(r);return e(r)?o:t(o,i(r))}}function Pn(){if(bn)return mn;return bn=1,mn=function(){return[]}}function Fn(){if(jn)return gn;jn=1;var t=(hn||(hn=1,yn=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}),yn),e=Pn(),r=Object.prototype.propertyIsEnumerable,n=Object.getOwnPropertySymbols;return gn=n?function(e){return null==e?[]:(e=Object(e),t(n(e),function(t){return r.call(e,t)}))}:e}var Dn,Mn,Rn,zn,Nn,Tn,Cn,Ln={exports:{}};function Jn(){return Rn||(Rn=1,function(t,e){var r=ur(),n=Mn?Dn:(Mn=1,Dn=function(){return!1}),i=e&&!e.nodeType&&e,o=i&&t&&!t.nodeType&&t,a=o&&o.exports===i?r.Buffer:void 0,u=(a?a.isBuffer:void 0)||n;t.exports=u}(Ln,Ln.exports)),Ln.exports}var Bn,Hn,$n,Wn,Gn,Vn,Yn,Xn,Kn,Zn,Qn,ti,ei,ri,ni,ii,oi,ai,ui,si,li,ci,fi,di,vi,_i,pi,yi,hi,mi,bi,gi,ji,wi,xi,Oi={exports:{}};function Si(){return Bn||(Bn=1,function(t,e){var r=ar(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n&&r.process,a=function(){try{var t=i&&i.require&&i.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=a}(Oi,Oi.exports)),Oi.exports}function Ui(){if($n)return Hn;$n=1;var t=function(){if(Cn)return Tn;Cn=1;var t=lr(),e=Cr(),r=qr(),n={};return n["[object Float32Array]"]=n["[object Float64Array]"]=n["[object Int8Array]"]=n["[object Int16Array]"]=n["[object Int32Array]"]=n["[object Uint8Array]"]=n["[object Uint8ClampedArray]"]=n["[object Uint16Array]"]=n["[object Uint32Array]"]=!0,n["[object Arguments]"]=n["[object Array]"]=n["[object ArrayBuffer]"]=n["[object Boolean]"]=n["[object DataView]"]=n["[object Date]"]=n["[object Error]"]=n["[object Function]"]=n["[object Map]"]=n["[object Number]"]=n["[object Object]"]=n["[object RegExp]"]=n["[object Set]"]=n["[object String]"]=n["[object WeakMap]"]=!1,Tn=function(i){return r(i)&&e(i.length)&&!!n[t(i)]}}(),e=Ir(),r=Si(),n=r&&r.isTypedArray,i=n?e(n):t;return Hn=i}function Ei(){if(Gn)return Wn;Gn=1;var t=(xn||(xn=1,wn=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}),wn),e=Pr(),r=Fr(),n=Jn(),i=function(){if(Nn)return zn;Nn=1;var t=/^(?:0|[1-9]\d*)$/;return zn=function(e,r){var n=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&t.test(e))&&e>-1&&e%1==0&&e<r}}(),o=Ui(),a=Object.prototype.hasOwnProperty;return Wn=function(u,s){var l=r(u),c=!l&&e(u),f=!l&&!c&&n(u),d=!l&&!c&&!f&&o(u),v=l||c||f||d,_=v?t(u.length,String):[],p=_.length;for(var y in u)!s&&!a.call(u,y)||v&&("length"==y||f&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||i(y,p))||_.push(y);return _}}function Ii(){if(Yn)return Vn;Yn=1;var t=Object.prototype;return Vn=function(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||t)}}function Ai(){if(Kn)return Xn;return Kn=1,Xn=function(t,e){return function(r){return t(e(r))}}}function ki(){if(ei)return ti;ei=1;var t=Ii(),e=function(){if(Qn)return Zn;Qn=1;var t=Ai()(Object.keys,Object);return Zn=t}(),r=Object.prototype.hasOwnProperty;return ti=function(n){if(!t(n))return e(n);var i=[];for(var o in Object(n))r.call(n,o)&&"constructor"!=o&&i.push(o);return i}}function qi(){if(ni)return ri;ni=1;var t=Ei(),e=ki(),r=Lr();return ri=function(n){return r(n)?t(n):e(n)}}function Pi(){if(oi)return ii;oi=1;var t=qn(),e=Fn(),r=qi();return ii=function(n){return t(n,r,e)}}function Fi(){if(vi)return di;vi=1;var t=_r()(ur(),"Set");return di=t}function Di(){if(hi)return yi;hi=1;var t=function(){if(li)return si;li=1;var t=_r()(ur(),"DataView");return si=t}(),e=gr(),r=function(){if(fi)return ci;fi=1;var t=_r()(ur(),"Promise");return ci=t}(),n=Fi(),i=function(){if(pi)return _i;pi=1;var t=_r()(ur(),"WeakMap");return _i=t}(),o=lr(),a=vr(),u="[object Map]",s="[object Promise]",l="[object Set]",c="[object WeakMap]",f="[object DataView]",d=a(t),v=a(e),_=a(r),p=a(n),y=a(i),h=o;return(t&&h(new t(new ArrayBuffer(1)))!=f||e&&h(new e)!=u||r&&h(r.resolve())!=s||n&&h(new n)!=l||i&&h(new i)!=c)&&(h=function(t){var e=o(t),r="[object Object]"==e?t.constructor:void 0,n=r?a(r):"";if(n)switch(n){case d:return f;case v:return u;case _:return s;case p:return l;case y:return c}return e}),yi=h}function Mi(){if(bi)return mi;bi=1;var t=Un(),e=En(),r=kn(),n=function(){if(ui)return ai;ui=1;var t=Pi(),e=Object.prototype.hasOwnProperty;return ai=function(r,n,i,o,a,u){var s=1&i,l=t(r),c=l.length;if(c!=t(n).length&&!s)return!1;for(var f=c;f--;){var d=l[f];if(!(s?d in n:e.call(n,d)))return!1}var v=u.get(r),_=u.get(n);if(v&&_)return v==n&&_==r;var p=!0;u.set(r,n),u.set(n,r);for(var y=s;++f<c;){var h=r[d=l[f]],m=n[d];if(o)var b=s?o(m,h,d,n,r,u):o(h,m,d,r,n,u);if(!(void 0===b?h===m||a(h,m,i,o,u):b)){p=!1;break}y||(y="constructor"==d)}if(p&&!y){var g=r.constructor,j=n.constructor;g==j||!("constructor"in r)||!("constructor"in n)||"function"==typeof g&&g instanceof g&&"function"==typeof j&&j instanceof j||(p=!1)}return u.delete(r),u.delete(n),p},ai}(),i=Di(),o=Fr(),a=Jn(),u=Ui(),s="[object Arguments]",l="[object Array]",c="[object Object]",f=Object.prototype.hasOwnProperty;return mi=function(d,v,_,p,y,h){var m=o(d),b=o(v),g=m?l:i(d),j=b?l:i(v),w=(g=g==s?c:g)==c,x=(j=j==s?c:j)==c,O=g==j;if(O&&a(d)){if(!a(v))return!1;m=!0,w=!1}if(O&&!w)return h||(h=new t),m||u(d)?e(d,v,_,p,y,h):r(d,v,g,_,p,y,h);if(!(1&_)){var S=w&&f.call(d,"__wrapped__"),U=x&&f.call(v,"__wrapped__");if(S||U){var E=S?d.value():d,I=U?v.value():v;return h||(h=new t),y(E,I,_,p,h)}}return!!O&&(h||(h=new t),n(d,v,_,p,y,h))}}var Ri,zi,Ni=b(function(){if(xi)return wi;xi=1;var t=function(){if(ji)return gi;ji=1;var t=Mi(),e=qr();return gi=function r(n,i,o,a,u){return n===i||(null==n||null==i||!e(n)&&!e(i)?n!=n&&i!=i:t(n,i,o,a,r,u))},gi}();return wi=function(e,r){return t(e,r)}}());var Ti,Ci,Li,Ji,Bi,Hi,$i,Wi,Gi,Vi,Yi,Xi,Ki,Zi,Qi,to,eo,ro,no=function(){if(zi)return Ri;zi=1;var t=ki(),e=Di(),r=Pr(),n=Fr(),i=Lr(),o=Jn(),a=Ii(),u=Ui(),s=Object.prototype.hasOwnProperty;return Ri=function(l){if(null==l)return!0;if(i(l)&&(n(l)||"string"==typeof l||"function"==typeof l.splice||o(l)||u(l)||r(l)))return!l.length;var c=e(l);if("[object Map]"==c||"[object Set]"==c)return!l.size;if(a(l))return!t(l).length;for(var f in l)if(s.call(l,f))return!1;return!0}}(),io=b(no);function oo(){if(Ji)return Li;Ji=1;var t=zr();return Li=function(e,r,n){"__proto__"==r&&t?t(e,r,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[r]=n}}function ao(){if(Hi)return Bi;Hi=1;var t=oo(),e=hr(),r=Object.prototype.hasOwnProperty;return Bi=function(n,i,o){var a=n[i];r.call(n,i)&&e(a,o)&&(void 0!==o||i in n)||t(n,i,o)}}function uo(){if(Wi)return $i;Wi=1;var t=ao(),e=oo();return $i=function(r,n,i,o){var a=!i;i||(i={});for(var u=-1,s=n.length;++u<s;){var l=n[u],c=o?o(i[l],r[l],l,i,r):void 0;void 0===c&&(c=r[l]),a?e(i,l,c):t(i,l,c)}return i},$i}function so(){if(Zi)return Ki;Zi=1;var t=cr(),e=Ii(),r=Xi?Yi:(Xi=1,Yi=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}),n=Object.prototype.hasOwnProperty;return Ki=function(i){if(!t(i))return r(i);var o=e(i),a=[];for(var u in i)("constructor"!=u||!o&&n.call(i,u))&&a.push(u);return a}}function lo(){if(to)return Qi;to=1;var t=Ei(),e=so(),r=Lr();return Qi=function(n){return r(n)?t(n,!0):e(n)}}var co,fo,vo,_o,po,yo,ho,mo,bo,go,jo,wo,xo,Oo,So,Uo,Eo,Io,Ao,ko,qo,Po,Fo,Do,Mo,Ro,zo,No,To,Co,Lo,Jo,Bo,Ho,$o,Wo,Go,Vo,Yo,Xo,Ko,Zo,Qo,ta,ea,ra,na,ia,oa,aa,ua,sa,la,ca,fa,da,va,_a,pa,ya,ha,ma,ba,ga,ja,wa,xa,Oa,Sa,Ua,Ea,Ia,Aa,ka,qa,Pa,Fa,Da={exports:{}};function Ma(){if(ho)return yo;ho=1;var t=Ai()(Object.getPrototypeOf,Object);return yo=t}function Ra(){if(bo)return mo;bo=1;var t=kr(),e=Ma(),r=Fn(),n=Pn(),i=Object.getOwnPropertySymbols;return mo=i?function(n){for(var i=[];n;)t(i,r(n)),n=e(n);return i}:n}function za(){if(xo)return wo;xo=1;var t=qn(),e=Ra(),r=lo();return wo=function(n){return t(n,r,e)}}function Na(){if(Eo)return Uo;Eo=1;var t=In();return Uo=function(e){var r=new e.constructor(e.byteLength);return new t(r).set(new t(e)),r}}function Ta(){if(zo)return Ro;zo=1;var t=Na(),e=function(){if(Ao)return Io;Ao=1;var t=Na();return Io=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}}(),r=function(){if(qo)return ko;qo=1;var t=/\w*$/;return ko=function(e){var r=new e.constructor(e.source,t.exec(e));return r.lastIndex=e.lastIndex,r}}(),n=function(){if(Fo)return Po;Fo=1;var t=sr(),e=t?t.prototype:void 0,r=e?e.valueOf:void 0;return Po=function(t){return r?Object(r.call(t)):{}}}(),i=function(){if(Mo)return Do;Mo=1;var t=Na();return Do=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}}();return Ro=function(o,a,u){var s=o.constructor;switch(a){case"[object ArrayBuffer]":return t(o);case"[object Boolean]":case"[object Date]":return new s(+o);case"[object DataView]":return e(o,u);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return i(o,u);case"[object Map]":case"[object Set]":return new s;case"[object Number]":case"[object String]":return new s(o);case"[object RegExp]":return r(o);case"[object Symbol]":return n(o)}}}function Ca(){if(Lo)return Co;Lo=1;var t=function(){if(To)return No;To=1;var t=cr(),e=Object.create,r=function(){function r(){}return function(n){if(!t(n))return{};if(e)return e(n);r.prototype=n;var i=new r;return r.prototype=void 0,i}}();return No=r}(),e=Ma(),r=Ii();return Co=function(n){return"function"!=typeof n.constructor||r(n)?{}:t(e(n))}}function La(){if($o)return Ho;$o=1;var t=function(){if(Bo)return Jo;Bo=1;var t=Di(),e=qr();return Jo=function(r){return e(r)&&"[object Map]"==t(r)}}(),e=Ir(),r=Si(),n=r&&r.isMap,i=n?e(n):t;return Ho=i}function Ja(){if(Yo)return Vo;Yo=1;var t=function(){if(Go)return Wo;Go=1;var t=Di(),e=qr();return Wo=function(r){return e(r)&&"[object Set]"==t(r)}}(),e=Ir(),r=Si(),n=r&&r.isSet,i=n?e(n):t;return Vo=i}function Ba(){if(Ko)return Xo;Ko=1;var t=Un(),e=(Ci||(Ci=1,Ti=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}),Ti),r=ao(),n=function(){if(Vi)return Gi;Vi=1;var t=uo(),e=qi();return Gi=function(r,n){return r&&t(n,e(n),r)}}(),i=function(){if(ro)return eo;ro=1;var t=uo(),e=lo();return eo=function(r,n){return r&&t(n,e(n),r)}}(),o=(co||(co=1,function(t,e){var r=ur(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n?r.Buffer:void 0,a=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=a?a(r):new t.constructor(r);return t.copy(n),n}}(Da,Da.exports)),Da.exports),a=(vo||(vo=1,fo=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}),fo),u=function(){if(po)return _o;po=1;var t=uo(),e=Fn();return _o=function(r,n){return t(r,e(r),n)}}(),s=function(){if(jo)return go;jo=1;var t=uo(),e=Ra();return go=function(r,n){return t(r,e(r),n)}}(),l=Pi(),c=za(),f=Di(),d=function(){if(So)return Oo;So=1;var t=Object.prototype.hasOwnProperty;return Oo=function(e){var r=e.length,n=new e.constructor(r);return r&&"string"==typeof e[0]&&t.call(e,"index")&&(n.index=e.index,n.input=e.input),n}}(),v=Ta(),_=Ca(),p=Fr(),y=Jn(),h=La(),m=cr(),b=Ja(),g=qi(),j=lo(),w="[object Arguments]",x="[object Function]",O="[object Object]",S={};return S[w]=S["[object Array]"]=S["[object ArrayBuffer]"]=S["[object DataView]"]=S["[object Boolean]"]=S["[object Date]"]=S["[object Float32Array]"]=S["[object Float64Array]"]=S["[object Int8Array]"]=S["[object Int16Array]"]=S["[object Int32Array]"]=S["[object Map]"]=S["[object Number]"]=S[O]=S["[object RegExp]"]=S["[object Set]"]=S["[object String]"]=S["[object Symbol]"]=S["[object Uint8Array]"]=S["[object Uint8ClampedArray]"]=S["[object Uint16Array]"]=S["[object Uint32Array]"]=!0,S["[object Error]"]=S[x]=S["[object WeakMap]"]=!1,Xo=function U(E,I,A,k,q,P){var F,D=1&I,M=2&I,R=4&I;if(A&&(F=q?A(E,k,q,P):A(E)),void 0!==F)return F;if(!m(E))return E;var z=p(E);if(z){if(F=d(E),!D)return a(E,F)}else{var N=f(E),T=N==x||"[object GeneratorFunction]"==N;if(y(E))return o(E,D);if(N==O||N==w||T&&!q){if(F=M||T?{}:_(E),!D)return M?s(E,i(F,E)):u(E,n(F,E))}else{if(!S[N])return q?E:{};F=v(E,N,D)}}P||(P=new t);var C=P.get(E);if(C)return C;P.set(E,F),b(E)?E.forEach(function(t){F.add(U(t,I,A,t,E,P))}):h(E)&&E.forEach(function(t,e){F.set(e,U(t,I,A,e,E,P))});var L=z?void 0:(R?M?c:l:M?j:g)(E);return e(L||E,function(t,e){L&&(t=E[e=t]),r(F,e,U(t,I,A,e,E,P))}),F},Xo}function Ha(){if(Qo)return Zo;Qo=1;var t=lr(),e=qr();return Zo=function(r){return"symbol"==typeof r||e(r)&&"[object Symbol]"==t(r)}}function $a(){if(na)return ra;na=1;var t=wr();function e(r,n){if("function"!=typeof r||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var i=function(){var t=arguments,e=n?n.apply(this,t):t[0],o=i.cache;if(o.has(e))return o.get(e);var a=r.apply(this,t);return i.cache=o.set(e,a)||o,a};return i.cache=new(e.Cache||t),i}return e.Cache=t,ra=e}function Wa(){if(ua)return aa;ua=1;var t=function(){if(oa)return ia;oa=1;var t=$a();return ia=function(e){var r=t(e,function(t){return 500===n.size&&n.clear(),t}),n=r.cache;return r}}(),e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,n=t(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(""),t.replace(e,function(t,e,i,o){n.push(i?o.replace(r,"$1"):e||t)}),n});return aa=n}function Ga(){if(fa)return ca;fa=1;var t=function(){if(la)return sa;la=1;var t=sr(),e=Er(),r=Fr(),n=Ha(),i=t?t.prototype:void 0,o=i?i.toString:void 0;return sa=function t(i){if("string"==typeof i)return i;if(r(i))return e(i,t)+"";if(n(i))return o?o.call(i):"";var a=i+"";return"0"==a&&1/i==-1/0?"-0":a},sa}();return ca=function(e){return null==e?"":t(e)}}function Va(){if(va)return da;va=1;var t=Fr(),e=function(){if(ea)return ta;ea=1;var t=Fr(),e=Ha(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;return ta=function(i,o){if(t(i))return!1;var a=typeof i;return!("number"!=a&&"symbol"!=a&&"boolean"!=a&&null!=i&&!e(i))||n.test(i)||!r.test(i)||null!=o&&i in Object(o)}}(),r=Wa(),n=Ga();return da=function(i,o){return t(i)?i:e(i,o)?[i]:r(n(i))}}function Ya(){if(pa)return _a;pa=1;var t=Ha();return _a=function(e){if("string"==typeof e||t(e))return e;var r=e+"";return"0"==r&&1/e==-1/0?"-0":r}}function Xa(){if(ja)return ga;ja=1;var t=function(){if(ha)return ya;ha=1;var t=Va(),e=Ya();return ya=function(r,n){for(var i=0,o=(n=t(n,r)).length;null!=r&&i<o;)r=r[e(n[i++])];return i&&i==o?r:void 0},ya}(),e=(ba||(ba=1,ma=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}),ma);return ga=function(r,n){return n.length<2?r:t(r,e(n,0,-1))}}function Ka(){if(Ea)return Ua;Ea=1;var t=function(){if(Sa)return Oa;Sa=1;var t=lr(),e=Ma(),r=qr(),n=Function.prototype,i=Object.prototype,o=n.toString,a=i.hasOwnProperty,u=o.call(Object);return Oa=function(n){if(!r(n)||"[object Object]"!=t(n))return!1;var i=e(n);if(null===i)return!0;var s=a.call(i,"constructor")&&i.constructor;return"function"==typeof s&&s instanceof s&&o.call(s)==u}}();return Ua=function(e){return t(e)?void 0:e}}function Za(){if(qa)return ka;qa=1;var t=function(){if(Aa)return Ia;Aa=1;var t=Dr();return Ia=function(e){return null!=e&&e.length?t(e,1):[]}}(),e=Rr(),r=Tr();return ka=function(n){return r(e(n,void 0,t),n+"")}}var Qa,tu,eu,ru,nu,iu,ou,au,uu=function(){if(Fa)return Pa;Fa=1;var t=Er(),e=Ba(),r=function(){if(xa)return wa;xa=1;var t=Va(),e=Jr(),r=Xa(),n=Ya(),i=Object.prototype.hasOwnProperty;return wa=function(o,a){var u=-1,s=(a=t(a,o)).length;if(!s)return!0;for(;++u<s;){var l=n(a[u]);if("__proto__"===l&&!i.call(o,"__proto__"))return!1;if(("constructor"===l||"prototype"===l)&&u<s-1)return!1}var c=r(o,a);return null==c||delete c[n(e(a))]},wa}(),n=Va(),i=uo(),o=Ka(),a=Za(),u=za(),s=a(function(a,s){var l={};if(null==a)return l;var c=!1;s=t(s,function(t){return t=n(t,a),c||(c=t.length>1),t}),i(a,u(a),l),c&&(l=e(l,7,o));for(var f=s.length;f--;)r(l,s[f]);return l});return Pa=s}(),su=b(uu);function lu(){if(ru)return eu;ru=1;var t=Fi(),e=tu?Qa:(tu=1,Qa=function(){}),r=An(),n=t&&1/r(new t([,-0]))[1]==1/0?function(e){return new t(e)}:e;return eu=n}!function(){if(au)return ou;au=1;var t=function(){if(iu)return nu;iu=1;var t=xr(),e=Sr(),r=Ur(),n=Ar(),i=lu(),o=An();return nu=function(a,u,s){var l=-1,c=e,f=a.length,d=!0,v=[],_=v;if(s)d=!1,c=r;else if(f>=200){var p=u?null:i(a);if(p)return o(p);d=!1,c=n,_=new t}else _=u?[]:v;t:for(;++l<f;){var y=a[l],h=u?u(y):y;if(y=s||0!==y?y:0,d&&h==h){for(var m=_.length;m--;)if(_[m]===h)continue t;u&&_.push(h),v.push(y)}else c(_,h,s)||(_!==v&&_.push(h),v.push(y))}return v},nu}();ou=function(e,r){return r="function"==typeof r?r:void 0,e&&e.length?t(e,void 0,r):[]}}();var cu,fu,du=b($a());var vu,_u,pu=b(function(){if(fu)return cu;fu=1;var t=Ga(),e=/[\\^$.*+?()[\]{}|]/g,r=RegExp(e.source);return cu=function(n){return(n=t(n))&&r.test(n)?n.replace(e,"\\$&"):n}}());var yu=b(function(){if(_u)return vu;_u=1;var t=Ba();return vu=function(e){return t(e,5)}}());const hu=t=>t.localadmin||t.localadmin||t.address&&t.address.lastIndexOf(",")<t.address.length-2&&t.address.substring(t.address.lastIndexOf(",")+2)||"",mu=({id:t,code:e})=>e||(void 0!==t&&void 0!==t.indexOf&&-1!==t.indexOf("#")?t.substring(t.indexOf("#")+1):void 0),bu=(t,e)=>[t||e&&e.split(",")[0],"string"==typeof e?e.replace(new RegExp(`${pu(t)}([ ,]|$)+`),""):""];function gu(t,e){void 0===e&&(e={});var r=e.insertAt;if(t&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===r&&n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i),i.styleSheet?i.styleSheet.cssText=t:i.appendChild(document.createTextNode(t))}}du((t,e=!1)=>{switch(t.layer){case"currentPosition":return[t.labelId,t.address];case"selectFromMap":case"ownLocations":case"back":return[t.labelId];case"favouritePlace":return bu(t.name,t.address);case"favouriteVehicleRentalStation":case"bikestation":return[t.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!e&&t.shortName?[t.gtfsId,t.mode.toLowerCase(),t.longName]:[t.shortName,t.longName,t.agency?t.agency.name:void 0];case"venue":case"address":case"street":return[t.name,t.label.replace(new RegExp(`${pu(t.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return e?[t.name||t.label||t.address&&t.address.split(",")[0],hu(t)]:[t.name,t.id,mu(t),hu(t)];default:return[t.name||t.label||t.address&&t.address.split(",")[0],hu(t)]}},(t,e)=>{const r=yu(t);return r.plain=e,r});var ju="modal-content_favourite-edit-modal-content-container__JU5Rq",wu="modal-content_favourite-edit-modal-content-top__sRkw9",xu="modal-content_favourite-edit-modal-content-header__2X3vh";gu(".modal-content_favourite-edit-modal-content-container__JU5Rq {\n display: flex;\n flex-direction: column;\n}\n.modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid #ddd;\n margin-bottom: 31px;\n}\n@media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 {\n border-bottom: none;\n margin-bottom: 0;\n }\n}\n.modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 .modal-content_favourite-edit-modal-content-header__2X3vh {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: inherit;\n font-size: 18px;\n font-weight: var(--font-weight-medium);\n line-height: normal;\n letter-spacing: -0.6px;\n color: #333;\n margin-bottom: 34px;\n}\n@media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 .modal-content_favourite-edit-modal-content-header__2X3vh {\n justify-content: start;\n align-items: center;\n margin-bottom: 26px;\n line-height: 1.33;\n }\n}");const Ou=({headerText:t,renderList:e})=>d.default.createElement("div",{className:ju},d.default.createElement("div",{className:wu},d.default.createElement("div",{className:xu},t)),e());"production"!==process.env.NODE_ENV&&(Ou.propTypes={headerText:f.default.string.isRequired,renderList:f.default.func.isRequired});var Su={"favourite-edit-list-container":"styles_favourite-edit-list-container__vq7ll","favourite-edit-list":"styles_favourite-edit-list__UHS9t","favourite-edit-list-item":"styles_favourite-edit-list-item__EUJUv","favourite-edit-list-item-left":"styles_favourite-edit-list-item-left__IxlaI","favourite-edit-list-arrow-hidden":"styles_favourite-edit-list-arrow-hidden__qRiee","favourite-edit-list-item-drag":"styles_favourite-edit-list-item-drag__s5zvD","favourite-edit-list-item-ellipsis":"styles_favourite-edit-list-item-ellipsis__pOMf4","favourite-edit-list-item-icon":"styles_favourite-edit-list-item-icon__gwDvm",place:"styles_place__ymmqu",home:"styles_home__pPJsU",school:"styles_school__Gq5Lo",sport:"styles_sport__fBWhN",shopping:"styles_shopping__EFuXp",work:"styles_work__fs304","favourite-edit-list-item-content":"styles_favourite-edit-list-item-content__8sO3v","favourite-edit-list-item-name":"styles_favourite-edit-list-item-name__WsY-0","favourite-edit-list-item-address":"styles_favourite-edit-list-item-address__gRY2h","favourite-edit-list-item-right":"styles_favourite-edit-list-item-right__LB9Gt","favourite-edit-list-item-edit":"styles_favourite-edit-list-item-edit__8dTrk","favourite-edit-list-item-remove":"styles_favourite-edit-list-item-remove__61AmT","favourite-edit-list-overlay":"styles_favourite-edit-list-overlay__hKFGc"};gu(".styles_favourite-edit-list-container__vq7ll {\n display: flex;\n position: relative;\n width: 100%;\n}\n@media screen and (min-width: 768px) {\n .styles_favourite-edit-list-container__vq7ll {\n min-height: 286px;\n }\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv:not(:first-child) {\n margin-top: 9px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv {\n display: flex;\n flex-direction: row;\n align-items: center;\n background: white;\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 50px;\n border-radius: 5px;\n border: solid 1px #ddd;\n list-style: none;\n box-sizing: border-box;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI {\n display: flex;\n min-width: 69px;\n height: 100%;\n align-items: center;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-arrow-hidden__qRiee {\n z-index: -999;\n opacity: 0;\n width: 0;\n padding: 0;\n border: 0;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-arrow-hidden__qRiee:focus {\n font-weight: bold;\n z-index: 10;\n opacity: 1;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-drag__s5zvD {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 37px;\n height: 100%;\n cursor: move;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-drag__s5zvD .styles_favourite-edit-list-item-ellipsis__pOMf4 {\n height: 20px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-drag__s5zvD .styles_favourite-edit-list-item-ellipsis__pOMf4 svg {\n fill: #888;\n height: 20px;\n transform: rotate(90deg);\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 24px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm svg {\n position: relative;\n left: -3px;\n top: -1px;\n fill: var(--color);\n width: 22px;\n height: 22px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_place__ymmqu svg {\n fill: var(--color);\n width: 24px;\n height: 24px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_home__pPJsU svg, .styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_school__Gq5Lo svg, .styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_sport__fBWhN svg, .styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_shopping__EFuXp svg {\n fill: var(--color);\n width: 18px;\n height: 18px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_work__fs304 svg {\n fill: var(--color);\n width: 20px;\n height: 20px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v {\n display: flex;\n flex-direction: column;\n width: calc(100% - 69px - 86px);\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v .styles_favourite-edit-list-item-name__WsY-0 {\n margin: 0;\n font-weight: var(--font-weight-medium);\n color: #333;\n font-size: 15px;\n line-height: 1;\n letter-spacing: -0.6px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v .styles_favourite-edit-list-item-address__gRY2h {\n margin: 3px 0 0;\n color: #666;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.48px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v .styles_favourite-edit-list-item-address__gRY2h:empty {\n margin-top: 0;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt {\n display: flex;\n min-width: 86px;\n align-items: center;\n justify-content: space-evenly;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-edit__8dTrk {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 22px;\n height: 48px;\n cursor: pointer;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-edit__8dTrk svg {\n fill: #888;\n width: 22px;\n height: 22px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-remove__61AmT {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: 18px;\n height: 48px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-remove__61AmT svg {\n fill: #888;\n width: 18px;\n height: 20px;\n}\n.styles_favourite-edit-list-container__vq7ll > div {\n width: 100%;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list-overlay__hKFGc {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: #fff;\n}");const Uu=l.createInstance({fallbackLng:"fi",resources:{de:{translation:{cancel:"Abbrechen","choose-icon":"Wähle das Symbol für diesen Ort","close-modal":"Schließe den Dialog",delete:"Löschen","delete-place-header":"Wollen Sie den Favoriten löschen?","delete-place-name":"Lösche Favorit: {{favourite.name}}","edit-modal-on-open":"Favoriten bearbeiten.","edit-place-name":"Bearbeite Favorit: {{favourite.name}}","edit-places":"Bearbeite Favoriten","input-placeholder":"Wählen Sie einen Name für diesen Ort (optional)",save:"Speichern","save-place":"Favorit speichern"}},en:{translation:{cancel:"Cancel","choose-icon":"Select the place's icon","close-modal":"Close the modal",delete:"Delete","delete-place-header":"Do you want to delete the place?","delete-place-name":"Delete place: {{favourite.name}}",down:"Move favourite down","edit-modal-on-open":"Favourite editing modal.","edit-place-name":"Edit place: {{favourite.name}}","edit-places":"Edit places","input-placeholder":"Give the name a place (optional)",save:"Save","save-place":"Save place",up:"Move favourite up"}},fi:{translation:{cancel:"Peruuta","choose-icon":"Valitse paikan kuvake","close-modal":"Sulje modaali",delete:"Poista","delete-place-header":"Haluatko poistaa paikan?","delete-place-name":"Poista paikka: {{favourite.name}}",down:"Siirrä suosikkisijaintia alaspäin","edit-modal-on-open":"Suosikkien muokkaus modaali.","edit-place-name":"Muokkaa paikkaa: {{favourite.name}}","edit-places":"Muokkaa paikkoja","input-placeholder":"Anna paikalle nimi (vapaaehtoinen)",save:"Tallenna","save-place":"Tallenna paikka",up:"Siirrä suosikkisijaintia ylöpäin"}},pl:{translation:{cancel:"Anuluj","choose-icon":"Wybierz ikonę miejsca","close-modal":"Zamknij modal",delete:"Usuń","delete-place-header":"Czy na pewno chcesz usunąć to miejsce?","delete-place-name":"Usuń miejsce: {{favourite.name}}",down:"Przenieś ulubione niżej","edit-modal-on-open":"Modal edycji ulubionych.","edit-place-name":"Edytuj miejsce: {{favourite.name}}","edit-places":"Edytuj miejsca","input-placeholder":"Nadaj nazwę miejscu (opcjonalne)",save:"Zapisz","save-place":"Zapisz miejsce",up:"Przenieś ulubione wyżej"}},sv:{translation:{cancel:"Avbryt","choose-icon":"Välj platsens ikon","close-modal":"Stäng modalen",delete:"Ta bort","delete-place-header":"Vill du ta bort platsen?","delete-place-name":"Ta bort platsen: {{favourite.name}}",down:"Flytta favoriten nedåt","edit-modal-on-open":"Favourite editing modal.","edit-place-name":"Edit place: {{favourite.name}}","edit-places":"Redigera platser","input-placeholder":"Ange platsens namn (frivilligt)",save:"Spara","save-place":"Spara plats",up:"Flytta favoriten uppåt"}}},defaultNS:"translation",react:{useSuspense:!0}});function Eu(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}Uu.init();const Iu=t=>{const e=t&&(t.key||t.which||t.keyCode)||"";return!(!e||![13," ","Spacebar"].concat([32,"Enter"]).includes(e))&&(t.preventDefault(),!0)};class Au extends d.default.Component{constructor(t){super(t),m(this,"translate",(t,e)=>this.props.t(t,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Eu(Object(r),!0).forEach(function(e){m(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Eu(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}({lng:this.props.lang},e))),m(this,"moveFavourite",(t,e)=>{const{favourites:r}=this.state,n=[...r],i=n[t+e];n[t+e]=n[t],n[t]=i,this.setState({favourites:n})}),m(this,"renderFavouriteListItem",(t,e)=>{let r="place";if(t.selectedIconId){const e=t.selectedIconId.indexOf("icon_");e>0&&(r=t.selectedIconId.substring(e+5))}const[n,i]=bu(t.name,t.address);return d.default.createElement("li",{className:or(Su["favourite-edit-list-item"]),key:t.favouriteId},d.default.createElement("div",{className:Su["favourite-edit-list-item-left"]},e>0&&d.default.createElement("button",{className:Su["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("up"),onClick:()=>{this.moveFavourite(e,-1)}},"↑"),e<this.state.favourites.length-1&&d.default.createElement("button",{className:Su["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("down"),onClick:()=>{this.moveFavourite(e,1)}},"↓"),d.default.createElement("div",{className:Su["favourite-edit-list-item-drag"]},d.default.createElement("div",{className:Su["favourite-edit-list-item-ellipsis"]},d.default.createElement(_.default,{img:"ellipsis"}))),d.default.createElement("div",{className:or(Su["favourite-edit-list-item-icon"],Su[r])},d.default.createElement(_.default,{img:r,color:this.props.colors.primary}))),d.default.createElement("div",{className:Su["favourite-edit-list-item-content"]},d.default.createElement("p",{className:Su["favourite-edit-list-item-name"]},n),d.default.createElement("p",{className:Su["favourite-edit-list-item-address"]},i)),d.default.createElement("div",{className:Su["favourite-edit-list-item-right"]},d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("edit-place-name",{favourite:t}),className:Su["favourite-edit-list-item-edit"],onClick:()=>this.props.onEditSelected(t),onKeyDown:e=>{Iu(e)&&this.props.onEditSelected(t)}},d.default.createElement(_.default,{img:"edit"})),d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("delete-place-name",{favourite:t}),className:Su["favourite-edit-list-item-remove"],onClick:()=>this.setState({selectedFavourite:t,showDeletePlaceModal:!0}),onKeyDown:e=>{Iu(e)&&this.setState({selectedFavourite:t,showDeletePlaceModal:!0})}},d.default.createElement(_.default,{img:"trash"}))))}),m(this,"renderFavouriteList",()=>{const{isLoading:t}=this.props,{favourites:e}=this.state;return d.default.createElement("div",{className:Su["favourite-edit-list-container"]},d.default.createElement(i.ReactSortable,{className:Su["favourite-edit-list"],tag:"ul",list:e,setList:t=>this.setState({favourites:t}),animation:200,handle:`.${Su["favourite-edit-list-item-left"]}`},e.map((t,e)=>this.renderFavouriteListItem(t,e))),t&&d.default.createElement("div",{className:Su["favourite-edit-list-overlay"]},d.default.createElement(o.Spinner,null)))}),m(this,"renderDeleteFavouriteModal",t=>d.default.createElement(p.default,{headerText:this.translate("delete-place-header"),handleClose:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1},()=>this.props.handleClose()),isModalOpen:this.state.showDeletePlaceModal,dialogContent:t?`${t.name}: ${t.address}`:"",primaryButtonText:this.translate("delete"),primaryButtonOnClick:()=>{this.props.deleteFavourite(t),this.setState({selectedFavourite:null,showDeletePlaceModal:!1})},secondaryButtonText:this.translate("cancel"),secondaryButtonOnClick:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1}),lang:this.props.lang})),m(this,"closeModal",()=>{this.props.handleClose();const t=this.state.favourites.map(t=>su(t,["chosen","selected"]));Ni(t,this.props.favourites)||this.props.updateFavourites(t)}),m(this,"renderModalContent",()=>{const{fontWeights:t}=this.props,{primary:e,hover:r}=this.props.colors,n={headerText:this.translate("edit-places"),renderList:this.renderFavouriteList},i={"--color":e,"--hover-color":r,"--font-weight-medium":t.medium};return d.default.createElement("div",{style:i},d.default.createElement(Ou,n))}),this.state={favourites:t.favourites,showDeletePlaceModal:!1,selectedFavourite:null}}static getDerivedStateFromProps(t,e){const r=t.favourites,n=e.favourites;return io(Sn(r,n,Ni))&&io(Sn(n,r,Ni))?null:(io(r)&&t.handleClose(),{favourites:r})}render(){const{isMobile:t}=this.props,{showDeletePlaceModal:e,selectedFavourite:r}=this.state;return d.default.createElement(v.default,{appElement:this.props.appElement,contentLabel:this.translate("edit-modal-on-open"),closeButtonLabel:this.translate("close-modal"),variant:t?"large":"small",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),!e&&this.renderModalContent())}}m(Au,"defaultProps",{lang:"fi",isMobile:!1,colors:u.defaultColors,fontWeights:{medium:500}}),"production"!==process.env.NODE_ENV&&(Au.propTypes={handleClose:f.default.func.isRequired,updateFavourites:f.default.func.isRequired,deleteFavourite:f.default.func.isRequired,onEditSelected:f.default.func.isRequired,favourites:f.default.arrayOf(f.default.shape({type:f.default.string,address:f.default.string,gtfsId:f.default.string,gid:f.default.string,lat:f.default.number,lon:f.default.number,name:f.default.string,selectedIconId:f.default.string,favouriteId:f.default.string,layer:f.default.string})).isRequired,lang:f.default.string,t:f.default.func.isRequired,appElement:f.default.string.isRequired,isModalOpen:f.default.bool.isRequired,isMobile:f.default.bool,isLoading:f.default.bool.isRequired,colors:f.default.objectOf(f.default.string),fontWeights:f.default.shape({medium:f.default.number})});const ku=n.withTranslation()(Au);t.default=t=>d.default.createElement(n.I18nextProvider,{i18n:Uu},d.default.createElement(ku,t)),Object.defineProperty(t,"__esModule",{value:!0})});
7
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NvY0luZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbmRleE9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hTi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlc1dpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZsYXR0ZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXBwbHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RpZmZlcmVuY2VXaXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZURpZmZlcmVuY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQXJyYXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbERlZXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbE9iamVjdHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFbXB0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVCeVRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVJlZ0V4cC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lU3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNNYXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNsb25lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaW5nVG9QYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3VzdG9tT21pdENsb25lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZmxhdFJlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL29taXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3VuaXFXaXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuaXEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VzY2FwZVJlZ0V4cC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY2xvbmVEZWVwLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9Nb2RhbENvbnRlbnQuanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi9zcmMvaGVscGVycy9pMThuLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUlzTmFOID0gcmVxdWlyZSgnLi9fYmFzZUlzTmFOJyksXG4gICAgc3RyaWN0SW5kZXhPZiA9IHJlcXVpcmUoJy4vX3N0cmljdEluZGV4T2YnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0FycmF5TGlrZU9iamVjdCA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2VPYmplY3QnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0Jyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBvcmRlciBhbmRcbiAqIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yXG4gKiBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxXaXRoYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAqXG4gKiBfLmRpZmZlcmVuY2VXaXRoKG9iamVjdHMsIFt7ICd4JzogMSwgJ3knOiAyIH1dLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfV1cbiAqL1xudmFyIGRpZmZlcmVuY2VXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICB2YXIgY29tcGFyYXRvciA9IGxhc3QodmFsdWVzKTtcbiAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGNvbXBhcmF0b3IpKSB7XG4gICAgY29tcGFyYXRvciA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICA6IFtdO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZmVyZW5jZVdpdGg7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VEaWZmZXJlbmNlO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXM7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICogZXF1aXZhbGVudC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gKiBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWQgYXJyYXlzLiBgT2JqZWN0YCBvYmplY3RzIGFyZSBjb21wYXJlZFxuICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogb2JqZWN0ID09PSBvdGhlcjtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXF1YWw7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VtcHR5O1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduVmFsdWU7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5T2JqZWN0O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9sc0luO1xuIiwidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXNJbjtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAqL1xuZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURhdGFWaWV3O1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xuICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVJlZ0V4cDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lU3ltYm9sO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCJ2YXIgYmFzZUlzTWFwID0gcmVxdWlyZSgnLi9fYmFzZUlzTWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc01hcCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzTWFwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc01hcChuZXcgTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hcDtcbiIsInZhciBiYXNlSXNTZXQgPSByZXF1aXJlKCcuL19iYXNlSXNTZXQnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTZXQ7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ24nKSxcbiAgICBiYXNlQXNzaWduSW4gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduSW4nKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgY29weVN5bWJvbHMgPSByZXF1aXJlKCcuL19jb3B5U3ltYm9scycpLFxuICAgIGNvcHlTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19jb3B5U3ltYm9sc0luJyksXG4gICAgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpbml0Q2xvbmVBcnJheSA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUFycmF5JyksXG4gICAgaW5pdENsb25lQnlUYWcgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVCeVRhZycpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc01hcCA9IHJlcXVpcmUoJy4vaXNNYXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1NldCA9IHJlcXVpcmUoJy4vaXNTZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNsb25lO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ247XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbkluO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUFycmF5O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleTtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBmbGF0dGVuID0gcmVxdWlyZSgnLi9mbGF0dGVuJyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBmbGF0UmVzdChmdW5jKSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXRSZXN0O1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyksXG4gICAgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0JyksXG4gICAgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3VzdG9tT21pdENsb25lID0gcmVxdWlyZSgnLi9fY3VzdG9tT21pdENsb25lJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG52YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSk7XG4gIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gb21pdDtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIC8vIFByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvbjpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvc2VjdXJpdHkvYWR2aXNvcmllcy9HSFNBLXh4anItbW1qdi00Z3BnXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL3NlY3VyaXR5L2Fkdmlzb3JpZXMvR0hTQS1mMjNtLXIzcGYtNDJyaFxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG5cbiAgICAvLyBBbHdheXMgYmxvY2sgXCJfX3Byb3RvX19cIiBhbnl3aGVyZSBpbiB0aGUgcGF0aCBpZiBpdCdzIG5vdCBleHBlY3RlZFxuICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fcHJvdG9fXycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQmxvY2sgY29uc3RydWN0b3IvcHJvdG90eXBlIGFzIG5vbi10ZXJtaW5hbCB0cmF2ZXJzYWwga2V5cyB0byBwcmV2ZW50XG4gICAgLy8gZXNjYXBpbmcgdGhlIG9iamVjdCBncmFwaCBpbnRvIGJ1aWx0LWluIGNvbnN0cnVjdG9ycyBhbmQgcHJvdG90eXBlcy5cbiAgICBpZiAoKGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnKSAmJiBpbmRleCA8IGxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgb2JqID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmogPT0gbnVsbCB8fCBkZWxldGUgb2JqW3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIGJhc2VVbmlxID0gcmVxdWlyZSgnLi9fYmFzZVVuaXEnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LlRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gKlxuICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XVxuICovXG5mdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikge1xuICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdW5pcVdpdGg7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgIHJlSGFzUmVnRXhwQ2hhciA9IFJlZ0V4cChyZVJlZ0V4cENoYXIuc291cmNlKTtcblxuLyoqXG4gKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlUmVnRXhwO1xuIiwidmFyIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gKiBAc2VlIF8uY2xvbmVcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gKlxuICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKSB7XG4gIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVEZWVwO1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aC5qcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbC5qcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZS5qcyc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAuanMnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwLmpzJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsYWRtaW4gKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxhZG1pblxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGFkbWluID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vbW9kYWwtY29udGVudC5zY3NzJztcblxuY29uc3QgTW9kYWxDb250ZW50ID0gKHsgaGVhZGVyVGV4dCwgcmVuZGVyTGlzdCB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbW9kYWwtY29udGVudC1jb250YWluZXInXX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LXRvcCddfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbW9kYWwtY29udGVudC1oZWFkZXInXX0+XG4gICAgICAgICAge2hlYWRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7cmVuZGVyTGlzdCgpfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuTW9kYWxDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgaGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZW5kZXJMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxDb250ZW50O1xuIiwiLyogZXNsaW50IHNvcnQta2V5czogXCJlcnJvclwiICovXG5jb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgICAnY2hvb3NlLWljb24nOiAnV8OkaGxlIGRhcyBTeW1ib2wgZsO8ciBkaWVzZW4gT3J0JyxcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdTY2hsaWXDn2UgZGVuIERpYWxvZycsXG4gICAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdXb2xsZW4gU2llIGRlbiBGYXZvcml0ZW4gbMO2c2NoZW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdMw7ZzY2hlIEZhdm9yaXQ6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm9yaXRlbiBiZWFyYmVpdGVuLicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0JlYXJiZWl0ZSBGYXZvcml0OiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ0JlYXJiZWl0ZSBGYXZvcml0ZW4nLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ1fDpGhsZW4gU2llIGVpbmVuIE5hbWUgZsO8ciBkaWVzZW4gT3J0IChvcHRpb25hbCknLFxuICAgICAgc2F2ZTogJ1NwZWljaGVybicsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdGYXZvcml0IHNwZWljaGVybicsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgICdjaG9vc2UtaWNvbic6IFwiU2VsZWN0IHRoZSBwbGFjZSdzIGljb25cIixcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdDbG9zZSB0aGUgbW9kYWwnLFxuICAgICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcGxhY2U/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdEZWxldGUgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnTW92ZSBmYXZvdXJpdGUgZG93bicsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm91cml0ZSBlZGl0aW5nIG1vZGFsLicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnRWRpdCBwbGFjZXMnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0dpdmUgdGhlIG5hbWUgYSBwbGFjZSAob3B0aW9uYWwpJyxcbiAgICAgIHNhdmU6ICdTYXZlJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1NhdmUgcGxhY2UnLFxuICAgICAgdXA6ICdNb3ZlIGZhdm91cml0ZSB1cCcsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgICAnY2hvb3NlLWljb24nOiAnVmFsaXRzZSBwYWlrYW4ga3V2YWtlJyxcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdTdWxqZSBtb2RhYWxpJyxcbiAgICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdIYWx1YXRrbyBwb2lzdGFhIHBhaWthbj8nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ1BvaXN0YSBwYWlra2E6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnU2lpcnLDpCBzdW9zaWtraXNpamFpbnRpYSBhbGFzcMOkaW4nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdTdW9zaWtraWVuIG11b2trYXVzIG1vZGFhbGkuJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnTXVva2thYSBwYWlra2FhOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ011b2trYWEgcGFpa2tvamEnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0FubmEgcGFpa2FsbGUgbmltaSAodmFwYWFlaHRvaW5lbiknLFxuICAgICAgc2F2ZTogJ1RhbGxlbm5hJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1RhbGxlbm5hIHBhaWtrYScsXG4gICAgICB1cDogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgeWzDtnDDpGluJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1d5YmllcnogaWtvbsSZIG1pZWpzY2EnLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1phbWtuaWogbW9kYWwnLFxuICAgICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnQ3p5IG5hIHBld25vIGNoY2VzeiB1c3VuxIXEhyB0byBtaWVqc2NlPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVXN1xYQgbWllanNjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgIGRvd246ICdQcnplbmllxZsgdWx1YmlvbmUgbmnFvGVqJyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnTW9kYWwgZWR5Y2ppIHVsdWJpb255Y2guJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWR5dHVqIG1pZWpzY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnRWR5dHVqIG1pZWpzY2EnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ05hZGFqIG5henfEmSBtaWVqc2N1IChvcGNqb25hbG5lKScsXG4gICAgICBzYXZlOiAnWmFwaXN6JyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1phcGlzeiBtaWVqc2NlJyxcbiAgICAgIHVwOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIHd5xbxlaicsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICAgICdjaG9vc2UtaWNvbic6ICdWw6RsaiBwbGF0c2VucyBpa29uJyxcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdTdMOkbmcgbW9kYWxlbicsXG4gICAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ1ZpbGwgZHUgdGEgYm9ydCBwbGF0c2VuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVGEgYm9ydCBwbGF0c2VuOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgZG93bjogJ0ZseXR0YSBmYXZvcml0ZW4gbmVkw6V0JyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnRmF2b3VyaXRlIGVkaXRpbmcgbW9kYWwuJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWRpdCBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdSZWRpZ2VyYSBwbGF0c2VyJyxcbiAgICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdBbmdlIHBsYXRzZW5zIG5hbW4gKGZyaXZpbGxpZ3QpJyxcbiAgICAgIHNhdmU6ICdTcGFyYScsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdTcGFyYSBwbGF0cycsXG4gICAgICB1cDogJ0ZseXR0YSBmYXZvcml0ZW4gdXBww6V0JyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiaW1wb3J0IHsgY3JlYXRlSW5zdGFuY2UgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi90cmFuc2xhdGlvbnMnO1xuXG5jb25zdCBpMThuID0gY3JlYXRlSW5zdGFuY2Uoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgLy8gZGVidWc6IHRydWUsXG4gIHJlc291cmNlczogdHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TlM6ICd0cmFuc2xhdGlvbicsXG4gIHJlYWN0OiB7XG4gICAgdXNlU3VzcGVuc2U6IHRydWUsXG4gIH0sXG59KTtcblxuaTE4bi5pbml0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG47XG4iLCIvKiBlc2xpbnQgcmVhY3QvZm9yYmlkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSTE4bmV4dFByb3ZpZGVyLCB3aXRoVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFJlYWN0U29ydGFibGUgfSBmcm9tICdyZWFjdC1zb3J0YWJsZWpzJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBkaWZmZXJlbmNlV2l0aCBmcm9tICdsb2Rhc2gvZGlmZmVyZW5jZVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IG9taXQgZnJvbSAnbG9kYXNoL29taXQnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJ0Boc2wtZmkvbG9hZGluZy1pbmRpY2F0b3JzJztcbmltcG9ydCBNb2RhbCBmcm9tICdAaHNsLWZpL21vZGFsJztcbmltcG9ydCBJY29uLCB7XG4gIGRlZmF1bHRDb2xvcnMsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgeyBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IE1vZGFsQ29udGVudCBmcm9tICcuL2hlbHBlcnMvTW9kYWxDb250ZW50JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCBpMThuIGZyb20gJy4vaGVscGVycy9pMThuJztcblxuY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNsYXNzIEZhdm91cml0ZUVkaXRpbmdNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLyoqIFJlcXVpcmVkLiBDbG9zZSBtb2RhbC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgaGFuZGxlQ2xvc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICB1cGRhdGVGYXZvdXJpdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgZGVsZXRlRmF2b3VyaXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC4gRnVuY3Rpb24gdGhhdCB0YWtlcyBzZWxlY3RlZCBmYXZvdXJpdGUgb2JqZWN0IGFzIHBhcmFtZXRlci5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgb25FZGl0U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHthcnJheTxvYmplY3Q+fVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3NcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZ3Rmc0lkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGdpZFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsYXRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gbG9uXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2VsZWN0ZWRJY29uSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZmF2b3VyaXRlSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXJcbiAgICAgKi9cbiAgICBmYXZvdXJpdGVzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGd0ZnNJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZ2lkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGZhdm91cml0ZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIH0pLFxuICAgICkuaXNSZXF1aXJlZCxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGlzTW9kYWxPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgY29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgLyoqIE9wdGlvbmFsLiAqL1xuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqIERlZmF1bHQgdmFsdWUgaXMgNTAwLiAqL1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbGFuZzogJ2ZpJyxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JzLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBmYXZvdXJpdGVzOiBwcm9wcy5mYXZvdXJpdGVzLFxuICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICBjb25zdCBuZXh0RmF2b3VyaXRlcyA9IG5leHRQcm9wcy5mYXZvdXJpdGVzO1xuICAgIGNvbnN0IHByZXZGYXZvdXJpdGVzID0gcHJldlN0YXRlLmZhdm91cml0ZXM7XG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkoZGlmZmVyZW5jZVdpdGgobmV4dEZhdm91cml0ZXMsIHByZXZGYXZvdXJpdGVzLCBpc0VxdWFsKSkgfHxcbiAgICAgICFpc0VtcHR5KGRpZmZlcmVuY2VXaXRoKHByZXZGYXZvdXJpdGVzLCBuZXh0RmF2b3VyaXRlcywgaXNFcXVhbCkpXG4gICAgKSB7XG4gICAgICBpZiAoaXNFbXB0eShuZXh0RmF2b3VyaXRlcykpIHtcbiAgICAgICAgbmV4dFByb3BzLmhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmYXZvdXJpdGVzOiBuZXh0RmF2b3VyaXRlcyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJhbnNsYXRlID0gKGlkLCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudChpZCwge1xuICAgICAgbG5nOiB0aGlzLnByb3BzLmxhbmcsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9O1xuXG4gIG1vdmVGYXZvdXJpdGUgPSAoaSwgZGlyZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIC8vIEVkaXQgY29weSBvZiB0aGUgZmF2b3VyaXRlcyB0byBhdm9pZCBjaGFuZ2luZyB0aGUgcHJvcHMuZmF2b3VyaXRlcyB1c2VkIGZvciBzdGF0ZSBpbml0aWFsaXphdGlvblxuICAgIGNvbnN0IGZhdm91cml0ZXNDb3B5ID0gWy4uLmZhdm91cml0ZXNdO1xuXG4gICAgY29uc3QgdG1wID0gZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl07XG4gICAgZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl0gPSBmYXZvdXJpdGVzQ29weVtpXTtcbiAgICBmYXZvdXJpdGVzQ29weVtpXSA9IHRtcDtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBmYXZvdXJpdGVzOiBmYXZvdXJpdGVzQ29weSB9KTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0SXRlbSA9IChmYXZvdXJpdGUsIGluZGV4KSA9PiB7XG4gICAgbGV0IGljb25JZCA9ICdwbGFjZSc7XG4gICAgaWYgKGZhdm91cml0ZS5zZWxlY3RlZEljb25JZCkge1xuICAgICAgY29uc3QgcHJlZml4UG9zID0gZmF2b3VyaXRlLnNlbGVjdGVkSWNvbklkLmluZGV4T2YoJ2ljb25fJyk7XG4gICAgICBpZiAocHJlZml4UG9zID4gMCkge1xuICAgICAgICBpY29uSWQgPSBmYXZvdXJpdGUuc2VsZWN0ZWRJY29uSWQuc3Vic3RyaW5nKHByZWZpeFBvcyArIDUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBbbmFtZSwgYWRkcmVzc10gPSBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKFxuICAgICAgZmF2b3VyaXRlLm5hbWUsXG4gICAgICBmYXZvdXJpdGUuYWRkcmVzcyxcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsaVxuICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtJ10pfVxuICAgICAgICBrZXk9e2Zhdm91cml0ZS5mYXZvdXJpdGVJZH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWxlZnQnXX0+XG4gICAgICAgICAge2luZGV4ID4gMCAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWFycm93LWhpZGRlbiddfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy50cmFuc2xhdGUoJ3VwJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVGYXZvdXJpdGUoaW5kZXgsIC0xKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJnVhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpbmRleCA8IHRoaXMuc3RhdGUuZmF2b3VyaXRlcy5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtYXJyb3ctaGlkZGVuJ119XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZG93bicpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRmF2b3VyaXRlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJmRhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1kcmFnJ119PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVsbGlwc2lzJ119PlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJlbGxpcHNpc1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICBzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1pY29uJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1tpY29uSWRdLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2ljb25JZH0gY29sb3I9e3RoaXMucHJvcHMuY29sb3JzLnByaW1hcnl9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tY29udGVudCddfT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLW5hbWUnXX0+e25hbWV9PC9wPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tYWRkcmVzcyddfT5cbiAgICAgICAgICAgIHthZGRyZXNzfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yaWdodCddfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZWRpdC1wbGFjZS1uYW1lJywge1xuICAgICAgICAgICAgICBmYXZvdXJpdGUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tZWRpdCddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkVkaXRTZWxlY3RlZChmYXZvdXJpdGUpfVxuICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25FZGl0U2VsZWN0ZWQoZmF2b3VyaXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9XCJlZGl0XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZGVsZXRlLXBsYWNlLW5hbWUnLCB7XG4gICAgICAgICAgICAgIGZhdm91cml0ZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yZW1vdmUnXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBmYXZvdXJpdGUsXG4gICAgICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IHRydWUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogZmF2b3VyaXRlLFxuICAgICAgICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgaXNMb2FkaW5nIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZmF2b3VyaXRlcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1jb250YWluZXInXX0+XG4gICAgICAgIDxSZWFjdFNvcnRhYmxlXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QnXX1cbiAgICAgICAgICB0YWc9XCJ1bFwiXG4gICAgICAgICAgbGlzdD17ZmF2b3VyaXRlc31cbiAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB0aGlzLnNldFN0YXRlKHsgZmF2b3VyaXRlczogaXRlbXMgfSl9XG4gICAgICAgICAgYW5pbWF0aW9uPXsyMDB9XG4gICAgICAgICAgaGFuZGxlPXtgLiR7c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tbGVmdCddfWB9XG4gICAgICAgID5cbiAgICAgICAgICB7ZmF2b3VyaXRlcy5tYXAoKGZhdm91cml0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckZhdm91cml0ZUxpc3RJdGVtKGZhdm91cml0ZSwgaW5kZXgpO1xuICAgICAgICAgIH0pfVxuICAgICAgICA8L1JlYWN0U29ydGFibGU+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3Qtb3ZlcmxheSddfT5cbiAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckRlbGV0ZUZhdm91cml0ZU1vZGFsID0gZmF2b3VyaXRlID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGhlYWRlclRleHQ9e3RoaXMudHJhbnNsYXRlKCdkZWxldGUtcGxhY2UtaGVhZGVyJyl9XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7IHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLCBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UgfSxcbiAgICAgICAgICAgICgpID0+IHRoaXMucHJvcHMuaGFuZGxlQ2xvc2UoKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaXNNb2RhbE9wZW49e3RoaXMuc3RhdGUuc2hvd0RlbGV0ZVBsYWNlTW9kYWx9XG4gICAgICAgIGRpYWxvZ0NvbnRlbnQ9e1xuICAgICAgICAgIGZhdm91cml0ZSA/IGAke2Zhdm91cml0ZS5uYW1lfTogJHtmYXZvdXJpdGUuYWRkcmVzc31gIDogJydcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2RlbGV0ZScpfVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGVsZXRlRmF2b3VyaXRlKGZhdm91cml0ZSk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCxcbiAgICAgICAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2NhbmNlbCcpfVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLmhhbmRsZUNsb3NlKCk7XG4gICAgY29uc3Qgb21pdHRlZEZhdm91cml0ZXMgPSB0aGlzLnN0YXRlLmZhdm91cml0ZXMubWFwKGl0ZW0gPT5cbiAgICAgIG9taXQoaXRlbSwgWydjaG9zZW4nLCAnc2VsZWN0ZWQnXSksXG4gICAgKTtcbiAgICBpZiAoIWlzRXF1YWwob21pdHRlZEZhdm91cml0ZXMsIHRoaXMucHJvcHMuZmF2b3VyaXRlcykpIHtcbiAgICAgIHRoaXMucHJvcHMudXBkYXRlRmF2b3VyaXRlcyhvbWl0dGVkRmF2b3VyaXRlcyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlck1vZGFsQ29udGVudCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZvbnRXZWlnaHRzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgcHJpbWFyeSwgaG92ZXIgfSA9IHRoaXMucHJvcHMuY29sb3JzO1xuICAgIGNvbnN0IG1vZGFsUHJvcHMgPSB7XG4gICAgICBoZWFkZXJUZXh0OiB0aGlzLnRyYW5zbGF0ZSgnZWRpdC1wbGFjZXMnKSxcbiAgICAgIHJlbmRlckxpc3Q6IHRoaXMucmVuZGVyRmF2b3VyaXRlTGlzdCxcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgJy0tY29sb3InOiBwcmltYXJ5LFxuICAgICAgJy0taG92ZXItY29sb3InOiBob3ZlcixcbiAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxNb2RhbENvbnRlbnQgey4uLm1vZGFsUHJvcHN9IC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGlzTW9iaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2hvd0RlbGV0ZVBsYWNlTW9kYWwsIHNlbGVjdGVkRmF2b3VyaXRlIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICBjb250ZW50TGFiZWw9e3RoaXMudHJhbnNsYXRlKCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgY2xvc2VCdXR0b25MYWJlbD17dGhpcy50cmFuc2xhdGUoJ2Nsb3NlLW1vZGFsJyl9XG4gICAgICAgIHZhcmlhbnQ9e2lzTW9iaWxlID8gJ2xhcmdlJyA6ICdzbWFsbCd9XG4gICAgICAgIGlzT3Blbj17dGhpcy5wcm9wcy5pc01vZGFsT3Blbn1cbiAgICAgICAgb25Dcm9zc0NsaWNrPXt0aGlzLmNsb3NlTW9kYWx9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckRlbGV0ZUZhdm91cml0ZU1vZGFsKHNlbGVjdGVkRmF2b3VyaXRlKX1cbiAgICAgICAgeyFzaG93RGVsZXRlUGxhY2VNb2RhbCAmJiB0aGlzLnJlbmRlck1vZGFsQ29udGVudCgpfVxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEZhdm91cml0ZUVkaXRpbmdNb2RhbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKFxuICBGYXZvdXJpdGVFZGl0aW5nTW9kYWwsXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiAoXG4gIDxJMThuZXh0UHJvdmlkZXIgaTE4bj17aTE4bn0+XG4gICAgPEZhdm91cml0ZUVkaXRpbmdNb2RhbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gIDwvSTE4bmV4dFByb3ZpZGVyPlxuKTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiYXBwbHkiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwia2V5IiwibmV3Q2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCIsIndpbmRvdyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJfZnJlZUdsb2JhbCIsInJlcXVpcmUkJDAiLCJmcmVlU2VsZiIsInNlbGYiLCJyb290IiwiRnVuY3Rpb24iLCJfcm9vdCIsIl9TeW1ib2wiLCJnZXRSYXdUYWciLCJvYmplY3RQcm90byIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJ0b1N0cmluZ1RhZyIsInVuZGVmaW5lZCIsIl9nZXRSYXdUYWciLCJpc093biIsInRhZyIsInVubWFza2VkIiwicmVzdWx0IiwicmVxdWlyZSQkMSIsIm9iamVjdFRvU3RyaW5nIiwiX29iamVjdFRvU3RyaW5nIiwicmVxdWlyZSQkMiIsIl9iYXNlR2V0VGFnIiwiaXNPYmplY3RfMSIsInR5cGUiLCJiYXNlR2V0VGFnIiwiaXNPYmplY3QiLCJpc0Z1bmN0aW9uXzEiLCJ1aWQiLCJjb3JlSnNEYXRhIiwiX2NvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsImtleXMiLCJJRV9QUk9UTyIsIl9pc01hc2tlZCIsImZ1bmMiLCJmdW5jVG9TdHJpbmciLCJfdG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJpc0Z1bmN0aW9uIiwiaXNNYXNrZWQiLCJ0b1NvdXJjZSIsInJlcXVpcmUkJDMiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJyZUlzTmF0aXZlIiwiUmVnRXhwIiwicmVwbGFjZSIsIl9iYXNlSXNOYXRpdmUiLCJ0ZXN0IiwiZ2V0VmFsdWUiLCJfZ2V0VmFsdWUiLCJvYmplY3QiLCJfZ2V0TmF0aXZlIiwibmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiX25hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsIl9oYXNoQ2xlYXIiLCJ0aGlzIiwiX19kYXRhX18iLCJzaXplIiwiaGFzaERlbGV0ZSIsIl9oYXNoRGVsZXRlIiwiaGFzIiwiaGFzaEdldCIsIl9oYXNoR2V0IiwiZGF0YSIsImhhc2hIYXMiLCJfaGFzaEhhcyIsImhhc2hTZXQiLCJfaGFzaFNldCIsInJlcXVpcmUkJDQiLCJIYXNoIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsInNldCIsImdldCIsIl9IYXNoIiwiZXFfMSIsIm90aGVyIiwiZXEiLCJfYXNzb2NJbmRleE9mIiwiYXJyYXkiLCJsaXN0Q2FjaGVDbGVhciIsIl9saXN0Q2FjaGVDbGVhciIsImxpc3RDYWNoZURlbGV0ZSIsImFzc29jSW5kZXhPZiIsInNwbGljZSIsIl9saXN0Q2FjaGVEZWxldGUiLCJwb3AiLCJsaXN0Q2FjaGVHZXQiLCJfbGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwiX2xpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIl9saXN0Q2FjaGVTZXQiLCJwdXNoIiwiTGlzdENhY2hlIiwiX0xpc3RDYWNoZSIsIk1hcCIsIl9NYXAiLCJpc0tleWFibGUiLCJfaXNLZXlhYmxlIiwiX2dldE1hcERhdGEiLCJtYXAiLCJtYXBDYWNoZUNsZWFyIiwiX21hcENhY2hlQ2xlYXIiLCJoYXNoIiwic3RyaW5nIiwibWFwQ2FjaGVEZWxldGUiLCJnZXRNYXBEYXRhIiwiX21hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJfbWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIl9tYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiX21hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJfTWFwQ2FjaGUiLCJzZXRDYWNoZUFkZCIsIl9zZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiX3NldENhY2hlSGFzIiwiU2V0Q2FjaGUiLCJ2YWx1ZXMiLCJhZGQiLCJfU2V0Q2FjaGUiLCJiYXNlRmluZEluZGV4IiwiX2Jhc2VGaW5kSW5kZXgiLCJwcmVkaWNhdGUiLCJmcm9tSW5kZXgiLCJmcm9tUmlnaHQiLCJiYXNlSXNOYU4iLCJfYmFzZUlzTmFOIiwic3RyaWN0SW5kZXhPZiIsIl9zdHJpY3RJbmRleE9mIiwiX2Jhc2VJbmRleE9mIiwiYmFzZUluZGV4T2YiLCJfYXJyYXlJbmNsdWRlcyIsIl9hcnJheUluY2x1ZGVzV2l0aCIsImNvbXBhcmF0b3IiLCJfYXJyYXlNYXAiLCJpdGVyYXRlZSIsIl9iYXNlVW5hcnkiLCJfY2FjaGVIYXMiLCJjYWNoZSIsIl9hcnJheVB1c2giLCJvZmZzZXQiLCJpc09iamVjdExpa2VfMSIsImJhc2VJc0FyZ3VtZW50cyIsImlzT2JqZWN0TGlrZSIsIl9iYXNlSXNBcmd1bWVudHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHNfMSIsImlzQXJyYXlfMSIsImFycmF5UHVzaCIsImlzRmxhdHRlbmFibGUiLCJzcHJlYWRhYmxlU3ltYm9sIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiX2lzRmxhdHRlbmFibGUiLCJfYmFzZUZsYXR0ZW4iLCJiYXNlRmxhdHRlbiIsImRlcHRoIiwiaXNTdHJpY3QiLCJpZGVudGl0eV8xIiwiX2FwcGx5IiwidGhpc0FyZyIsImFyZ3MiLCJuYXRpdmVNYXgiLCJNYXRoIiwibWF4IiwiX292ZXJSZXN0Iiwic3RhcnQiLCJ0cmFuc2Zvcm0iLCJvdGhlckFyZ3MiLCJjb25zdGFudCIsImNvbnN0YW50XzEiLCJpZGVudGl0eSIsIl9iYXNlU2V0VG9TdHJpbmciLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsIm5hdGl2ZU5vdyIsIkRhdGUiLCJub3ciLCJfc2hvcnRPdXQiLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsInNldFRvU3RyaW5nIiwiX3NldFRvU3RyaW5nIiwiaXNMZW5ndGhfMSIsImlzTGVuZ3RoIiwiaXNBcnJheUxpa2VfMSIsImxhc3RfMSIsImJhc2VEaWZmZXJlbmNlIiwiYXJyYXlJbmNsdWRlcyIsImFycmF5SW5jbHVkZXNXaXRoIiwiYXJyYXlNYXAiLCJiYXNlVW5hcnkiLCJjYWNoZUhhcyIsInJlcXVpcmUkJDUiLCJfYmFzZURpZmZlcmVuY2UiLCJpc0NvbW1vbiIsInZhbHVlc0xlbmd0aCIsIm91dGVyIiwiY29tcHV0ZWQiLCJ2YWx1ZXNJbmRleCIsImJhc2VSZXN0Iiwib3ZlclJlc3QiLCJfYmFzZVJlc3QiLCJpc0FycmF5TGlrZU9iamVjdCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3RfMSIsImxhc3QiLCJkaWZmZXJlbmNlV2l0aCIsImRpZmZlcmVuY2VXaXRoXzEiLCJzdGFja0NsZWFyIiwiX3N0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsIl9zdGFja0RlbGV0ZSIsInN0YWNrR2V0IiwiX3N0YWNrR2V0Iiwic3RhY2tIYXMiLCJfc3RhY2tIYXMiLCJzdGFja1NldCIsIl9zdGFja1NldCIsInBhaXJzIiwiTEFSR0VfQVJSQVlfU0laRSIsIlN0YWNrIiwiX1N0YWNrIiwiYXJyYXlTb21lIiwiX2FycmF5U29tZSIsIl9lcXVhbEFycmF5cyIsImJpdG1hc2siLCJjdXN0b21pemVyIiwiZXF1YWxGdW5jIiwic3RhY2siLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsIlVpbnQ4QXJyYXkiLCJfVWludDhBcnJheSIsIl9zZXRUb0FycmF5IiwiZm9yRWFjaCIsImVxdWFsQXJyYXlzIiwibWFwVG9BcnJheSIsIl9tYXBUb0FycmF5Iiwic2V0VG9BcnJheSIsInN5bWJvbFByb3RvIiwic3ltYm9sVmFsdWVPZiIsInZhbHVlT2YiLCJfZXF1YWxCeVRhZyIsImJ5dGVMZW5ndGgiLCJieXRlT2Zmc2V0IiwiYnVmZmVyIiwibmFtZSIsIm1lc3NhZ2UiLCJjb252ZXJ0Iiwic3RhY2tlZCIsIl9iYXNlR2V0QWxsS2V5cyIsImtleXNGdW5jIiwic3ltYm9sc0Z1bmMiLCJzdHViQXJyYXlfMSIsImFycmF5RmlsdGVyIiwiX2FycmF5RmlsdGVyIiwicmVzSW5kZXgiLCJzdHViQXJyYXkiLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiX2dldFN5bWJvbHMiLCJzeW1ib2wiLCJzdHViRmFsc2UiLCJzdHViRmFsc2VfMSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJmcmVlUHJvY2VzcyIsInByb2Nlc3MiLCJub2RlVXRpbCIsInR5cGVzIiwicmVxdWlyZSIsImJpbmRpbmciLCJiYXNlSXNUeXBlZEFycmF5IiwidHlwZWRBcnJheVRhZ3MiLCJfYmFzZUlzVHlwZWRBcnJheSIsIm5vZGVJc1R5cGVkQXJyYXkiLCJpc1R5cGVkQXJyYXkiLCJpc1R5cGVkQXJyYXlfMSIsImJhc2VUaW1lcyIsIl9iYXNlVGltZXMiLCJuIiwiaXNJbmRleCIsInJlSXNVaW50IiwiX2lzSW5kZXgiLCJfYXJyYXlMaWtlS2V5cyIsImluaGVyaXRlZCIsImlzQXJyIiwiaXNBcmciLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsIl9pc1Byb3RvdHlwZSIsIkN0b3IiLCJfb3ZlckFyZyIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIm92ZXJBcmciLCJfbmF0aXZlS2V5cyIsIl9iYXNlS2V5cyIsImFycmF5TGlrZUtleXMiLCJiYXNlS2V5cyIsImtleXNfMSIsImJhc2VHZXRBbGxLZXlzIiwiZ2V0U3ltYm9scyIsIl9nZXRBbGxLZXlzIiwiU2V0IiwiX1NldCIsIkRhdGFWaWV3IiwiX0RhdGFWaWV3IiwiUHJvbWlzZSIsIl9Qcm9taXNlIiwiV2Vha01hcCIsIl9XZWFrTWFwIiwicmVxdWlyZSQkNiIsIm1hcFRhZyIsInByb21pc2VUYWciLCJzZXRUYWciLCJ3ZWFrTWFwVGFnIiwiZGF0YVZpZXdUYWciLCJkYXRhVmlld0N0b3JTdHJpbmciLCJtYXBDdG9yU3RyaW5nIiwicHJvbWlzZUN0b3JTdHJpbmciLCJzZXRDdG9yU3RyaW5nIiwid2Vha01hcEN0b3JTdHJpbmciLCJnZXRUYWciLCJBcnJheUJ1ZmZlciIsInJlc29sdmUiLCJjdG9yU3RyaW5nIiwiX2dldFRhZyIsImVxdWFsQnlUYWciLCJlcXVhbE9iamVjdHMiLCJnZXRBbGxLZXlzIiwiX2VxdWFsT2JqZWN0cyIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqVmFsdWUiLCJvYmpDdG9yIiwib3RoQ3RvciIsInJlcXVpcmUkJDciLCJhcmdzVGFnIiwiYXJyYXlUYWciLCJvYmplY3RUYWciLCJfYmFzZUlzRXF1YWxEZWVwIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJiYXNlSXNFcXVhbCIsImJhc2VJc0VxdWFsRGVlcCIsIl9iYXNlSXNFcXVhbCIsImlzRXF1YWxfMSIsImlzRW1wdHlfMSIsIl9iYXNlQXNzaWduVmFsdWUiLCJiYXNlQXNzaWduVmFsdWUiLCJfYXNzaWduVmFsdWUiLCJhc3NpZ25WYWx1ZSIsIl9jb3B5T2JqZWN0Iiwic291cmNlIiwicHJvcHMiLCJpc05ldyIsIm5ld1ZhbHVlIiwibmF0aXZlS2V5c0luIiwiX25hdGl2ZUtleXNJbiIsIl9iYXNlS2V5c0luIiwiaXNQcm90byIsImJhc2VLZXlzSW4iLCJrZXlzSW5fMSIsImdldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwiX2dldFByb3RvdHlwZSIsIl9nZXRTeW1ib2xzSW4iLCJnZXRTeW1ib2xzSW4iLCJrZXlzSW4iLCJfZ2V0QWxsS2V5c0luIiwiX2Nsb25lQXJyYXlCdWZmZXIiLCJhcnJheUJ1ZmZlciIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZURhdGFWaWV3IiwiX2Nsb25lRGF0YVZpZXciLCJkYXRhVmlldyIsImlzRGVlcCIsImNsb25lUmVnRXhwIiwicmVGbGFncyIsIl9jbG9uZVJlZ0V4cCIsInJlZ2V4cCIsImxhc3RJbmRleCIsImNsb25lU3ltYm9sIiwiX2Nsb25lU3ltYm9sIiwiY2xvbmVUeXBlZEFycmF5IiwiX2Nsb25lVHlwZWRBcnJheSIsInR5cGVkQXJyYXkiLCJfaW5pdENsb25lQnlUYWciLCJiYXNlQ3JlYXRlIiwib2JqZWN0Q3JlYXRlIiwiY3JlYXRlIiwicHJvdG8iLCJfYmFzZUNyZWF0ZSIsIl9pbml0Q2xvbmVPYmplY3QiLCJiYXNlSXNNYXAiLCJfYmFzZUlzTWFwIiwibm9kZUlzTWFwIiwiaXNNYXAiLCJpc01hcF8xIiwiYmFzZUlzU2V0IiwiX2Jhc2VJc1NldCIsIm5vZGVJc1NldCIsImlzU2V0IiwiaXNTZXRfMSIsImFycmF5RWFjaCIsIl9hcnJheUVhY2giLCJiYXNlQXNzaWduIiwiY29weU9iamVjdCIsIl9iYXNlQXNzaWduIiwiYmFzZUFzc2lnbkluIiwiX2Jhc2VBc3NpZ25JbiIsImNsb25lQnVmZmVyIiwiYWxsb2NVbnNhZmUiLCJzbGljZSIsImNvcHkiLCJjb3B5QXJyYXkiLCJfY29weUFycmF5IiwiY29weVN5bWJvbHMiLCJfY29weVN5bWJvbHMiLCJjb3B5U3ltYm9sc0luIiwiX2NvcHlTeW1ib2xzSW4iLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsImdldEFsbEtleXNJbiIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJpbml0Q2xvbmVBcnJheSIsIl9pbml0Q2xvbmVBcnJheSIsImlucHV0IiwicmVxdWlyZSQkMTIiLCJpbml0Q2xvbmVCeVRhZyIsInJlcXVpcmUkJDEzIiwiaW5pdENsb25lT2JqZWN0IiwicmVxdWlyZSQkMTQiLCJyZXF1aXJlJCQxNSIsInJlcXVpcmUkJDE2IiwicmVxdWlyZSQkMTciLCJyZXF1aXJlJCQxOCIsInJlcXVpcmUkJDE5IiwicmVxdWlyZSQkMjAiLCJyZXF1aXJlJCQyMSIsImZ1bmNUYWciLCJjbG9uZWFibGVUYWdzIiwiX2Jhc2VDbG9uZSIsImJhc2VDbG9uZSIsImlzRmxhdCIsImlzRnVsbCIsImlzRnVuYyIsInN1YlZhbHVlIiwiaXNTeW1ib2xfMSIsIm1lbW9pemUiLCJyZXNvbHZlciIsIm1lbW9pemVkIiwiQ2FjaGUiLCJtZW1vaXplXzEiLCJtZW1vaXplQ2FwcGVkIiwiX21lbW9pemVDYXBwZWQiLCJyZVByb3BOYW1lIiwicmVFc2NhcGVDaGFyIiwic3RyaW5nVG9QYXRoIiwiY2hhckNvZGVBdCIsIm1hdGNoIiwibnVtYmVyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJfc3RyaW5nVG9QYXRoIiwiYmFzZVRvU3RyaW5nIiwiaXNTeW1ib2wiLCJzeW1ib2xUb1N0cmluZyIsIl9iYXNlVG9TdHJpbmciLCJ0b1N0cmluZ18xIiwiaXNLZXkiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwiX2lzS2V5IiwiX2Nhc3RQYXRoIiwiX3RvS2V5IiwiSW5maW5pdHkiLCJiYXNlR2V0IiwiY2FzdFBhdGgiLCJ0b0tleSIsIl9iYXNlR2V0IiwicGF0aCIsImJhc2VTbGljZSIsIl9iYXNlU2xpY2UiLCJlbmQiLCJfcGFyZW50IiwiaXNQbGFpbk9iamVjdCIsIm9iamVjdEN0b3JTdHJpbmciLCJpc1BsYWluT2JqZWN0XzEiLCJfY3VzdG9tT21pdENsb25lIiwiZmxhdHRlbiIsImZsYXR0ZW5fMSIsIl9mbGF0UmVzdCIsImJhc2VVbnNldCIsInBhcmVudCIsIl9iYXNlVW5zZXQiLCJvYmoiLCJjdXN0b21PbWl0Q2xvbmUiLCJmbGF0UmVzdCIsIm9taXQiLCJwYXRocyIsIkNMT05FX0RFRVBfRkxBRyIsIm9taXRfMSIsIm5vb3AiLCJub29wXzEiLCJjcmVhdGVTZXQiLCJfY3JlYXRlU2V0IiwiYmFzZVVuaXEiLCJfYmFzZVVuaXEiLCJzZWVuSW5kZXgiLCJ1bmlxV2l0aF8xIiwicmVSZWdFeHBDaGFyIiwicmVIYXNSZWdFeHBDaGFyIiwiZXNjYXBlUmVnRXhwXzEiLCJjbG9uZURlZXBfMSIsImdldExvY2FsYWRtaW4iLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImFkZHJlc3MiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldFN0b3BDb2RlIiwiaWQiLCJjb2RlIiwiaW5kZXhPZiIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJzcGxpdCIsImVzY2FwZVJlZ0V4cCIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJwbGFpbiIsImxheWVyIiwibGFiZWxJZCIsInNob3J0TmFtZSIsImd0ZnNJZCIsIm1vZGUiLCJ0b0xvd2VyQ2FzZSIsImxvbmdOYW1lIiwiYWdlbmN5IiwibGFiZWwiLCJpdGVtIiwiY2xvbmVEZWVwIiwiTW9kYWxDb250ZW50IiwiaGVhZGVyVGV4dCIsInJlbmRlckxpc3QiLCJSZWFjdCIsImNsYXNzTmFtZSIsInN0eWxlcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsImkxOG4iLCJjcmVhdGVJbnN0YW5jZSIsImZhbGxiYWNrTG5nIiwicmVzb3VyY2VzIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImNhbmNlbCIsImRlbGV0ZSIsInNhdmUiLCJlbiIsImRvd24iLCJ1cCIsImZpIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJ3aGljaCIsImtleUNvZGUiLCJjb25jYXQiLCJwcmV2ZW50RGVmYXVsdCIsIkZhdm91cml0ZUVkaXRpbmdNb2RhbCIsIkNvbXBvbmVudCIsInN1cGVyIiwib3B0aW9ucyIsIl9vYmplY3RTcHJlYWQiLCJsbmciLCJsYW5nIiwiZGlyZWN0aW9uIiwiZmF2b3VyaXRlcyIsInN0YXRlIiwiZmF2b3VyaXRlc0NvcHkiLCJ0bXAiLCJzZXRTdGF0ZSIsImZhdm91cml0ZSIsImljb25JZCIsInNlbGVjdGVkSWNvbklkIiwicHJlZml4UG9zIiwiY3giLCJmYXZvdXJpdGVJZCIsInRyYW5zbGF0ZSIsIm9uQ2xpY2siLCJtb3ZlRmF2b3VyaXRlIiwiSWNvbiIsImltZyIsImNvbG9yIiwiY29sb3JzIiwicHJpbWFyeSIsInJvbGUiLCJ0YWJJbmRleCIsIm9uRWRpdFNlbGVjdGVkIiwib25LZXlEb3duIiwic2VsZWN0ZWRGYXZvdXJpdGUiLCJzaG93RGVsZXRlUGxhY2VNb2RhbCIsImlzTG9hZGluZyIsIlJlYWN0U29ydGFibGUiLCJsaXN0Iiwic2V0TGlzdCIsIml0ZW1zIiwiYW5pbWF0aW9uIiwiaGFuZGxlIiwicmVuZGVyRmF2b3VyaXRlTGlzdEl0ZW0iLCJTcGlubmVyIiwiRGlhbG9nTW9kYWwiLCJoYW5kbGVDbG9zZSIsImlzTW9kYWxPcGVuIiwiZGlhbG9nQ29udGVudCIsInByaW1hcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJkZWxldGVGYXZvdXJpdGUiLCJzZWNvbmRhcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsIm9taXR0ZWRGYXZvdXJpdGVzIiwiaXNFcXVhbCIsInVwZGF0ZUZhdm91cml0ZXMiLCJmb250V2VpZ2h0cyIsImhvdmVyIiwibW9kYWxQcm9wcyIsInJlbmRlckZhdm91cml0ZUxpc3QiLCJtZWRpdW0iLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJuZXh0UHJvcHMiLCJwcmV2U3RhdGUiLCJuZXh0RmF2b3VyaXRlcyIsInByZXZGYXZvdXJpdGVzIiwiaXNFbXB0eSIsInJlbmRlciIsImlzTW9iaWxlIiwiTW9kYWwiLCJhcHBFbGVtZW50IiwiY29udGVudExhYmVsIiwiY2xvc2VCdXR0b25MYWJlbCIsInZhcmlhbnQiLCJpc09wZW4iLCJvbkNyb3NzQ2xpY2siLCJjbG9zZU1vZGFsIiwicmVuZGVyRGVsZXRlRmF2b3VyaXRlTW9kYWwiLCJyZW5kZXJNb2RhbENvbnRlbnQiLCJkZWZhdWx0Q29sb3JzIiwiYXJyYXlPZiIsInNoYXBlIiwiZ2lkIiwibGF0IiwibG9uIiwiYm9vbCIsIm9iamVjdE9mIiwiRmF2b3VyaXRlRWRpdGluZ01vZGFsV2l0aFRyYW5zbGF0aW9uIiwid2l0aFRyYW5zbGF0aW9uIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoieWhDQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2hCLEVBQUksU0FBVUEsR0FDWixPQUFPQSxHQUFLLG1CQUFxQkMsUUFBVUQsRUFBRUcsY0FBZ0JGLFFBQVVELElBQU1DLE9BQU9HLFVBQVksZ0JBQWtCSixDQUNwSCxFQUFHRCxFQUFRQyxFQUNiLENDTkEsU0FBU0ssRUFBY0MsR0FDckIsSUFBSUMsRUNGTixTQUFxQkQsRUFBR0UsR0FDdEIsR0FBSSxVQUFZVCxFQUFRTyxLQUFPQSxFQUFHLE9BQU9BLEVBQ3pDLElBQUlHLEVBQUlILEVBQUVMLE9BQU9TLGFBQ2pCLFFBQUksSUFBV0QsRUFBRyxDQUNoQixJQUFJRixFQUFJRSxFQUFFRSxLQUFLTCxFQUFHRSxHQUNsQixHQUFJLFVBQVlULEVBQVFRLEdBQUksT0FBT0EsRUFDbkMsTUFBTSxJQUFJSyxVQUFVLCtDQUN0QixDQUNBLE9BQVEsV0FBYUosRUFBSUssT0FBU0MsUUFBUVIsRUFDNUMsQ0RQVUksQ0FBWUosRUFBRyxVQUN2QixNQUFPLFVBQVlQLEVBQVFRLEdBQUtBLEVBQUlBLEVBQUksRUFDMUMsQ0VKQSxTQUFTUSxFQUFnQk4sRUFBR0QsRUFBR0YsR0FDN0IsT0FBUUUsRUFBSUgsRUFBY0csTUFBT0MsRUFBSU8sT0FBT0MsZUFBZVIsRUFBR0QsRUFBRyxDQUMvRFUsTUFBT1osRUFDUGEsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLFVBQVUs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RSxFQUFBQSxRQUFVeGpCLEtBQUt5akIsV0FHaEN1RCxlQUFnQnhELEVBQUFBLFFBQVV4akIsS0FBS3lqQixXQWMvQmtDLFdBQVluQyxFQUFBQSxRQUFVeUcsUUFDcEJ6RyxFQUFBQSxRQUFVMEcsTUFBTSxDQUNkOXFCLEtBQU1va0IsRUFBQUEsUUFBVTVlLE9BQ2hCOGIsUUFBUzhDLEVBQUFBLFFBQVU1ZSxPQUNuQjJkLE9BQVFpQixFQUFBQSxRQUFVNWUsT0FDbEJ1bEIsSUFBSzNHLEVBQUFBLFFBQVU1ZSxPQUNmd2xCLElBQUs1RyxFQUFBQSxRQUFVdkcsT0FDZm9OLElBQUs3RyxFQUFBQSxRQUFVdkcsT0FDZnhPLEtBQU0rVSxFQUFBQSxRQUFVNWUsT0FDaEJzaEIsZUFBZ0IxQyxFQUFBQSxRQUFVNWUsT0FDMUJ5aEIsWUFBYTdDLEVBQUFBLFFBQVU1ZSxPQUN2QndkLE1BQU9vQixFQUFBQSxRQUFVNWUsVUFFbkI2ZSxXQUNGZ0MsS0FBTWpDLEVBQUFBLFFBQVU1ZSxPQUNoQnZKLEVBQUdtb0IsRUFBQUEsUUFBVXhqQixLQUFLeWpCLFdBQ2xCOEYsV0FBWS9GLEVBQUFBLFFBQVU1ZSxPQUFPNmUsV0FDN0JzRSxZQUFhdkUsRUFBQUEsUUFBVThHLEtBQUs3RyxXQUM1QjRGLFNBQVU3RixFQUFBQSxRQUFVOEcsS0FDcEJsRCxVQUFXNUQsRUFBQUEsUUFBVThHLEtBQUs3RyxXQUMxQm1ELE9BQVFwRCxFQUFBQSxRQUFVK0csU0FBUy9HLEVBQUFBLFFBQVU1ZSxRQUVyQzZqQixZQUFhakYsRUFBQUEsUUFBVTBHLE1BQU0sQ0FFM0JyQixPQUFRckYsRUFBQUEsUUFBVXZHLFdBbVJ4QixNQUFNdU4sR0FBdUNDLEVBQUFBLGlCQUFBQSxDQUMzQ3RGLGNBR2E5TyxHQUNiNk0sRUFBQUEsUUFBQXRCLGNBQUM4SSxrQkFBZSxDQUFDaEgsS0FBTUEsSUFDckJSLFVBQUF0QixjQUFDNEksR0FBeUNuVSIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcyXX0=