@asgardeo/auth-spa 0.4.13 → 0.4.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).AsgardeoAuth={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var l=function(e){return e&&e.Math==Math&&e},o=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof t&&t)||function(){return this}()||Function("return this")(),c=o,a=function(e){try{return!!e()}catch(e){return!0}},r=!a((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),d=r,s=Function.prototype,u=s.bind,Z=s.call,h=d&&u.bind(Z,Z),b=d?function(e){return e&&h(e)}:function(e){return e&&function(){return Z.apply(e,arguments)}},m=TypeError,p=function(e){if(null==e)throw m("Can't call method on "+e);return e},I=p,g=Object,y=function(e){return g(I(e))},G=y,X=b({}.hasOwnProperty),W=Object.hasOwn||function(e,t){return X(G(e),t)},C={},V={exports:{}},R=o,S=Object.defineProperty,v=function(e,t){try{S(R,e,{value:t,configurable:!0,writable:!0})}catch(i){R[e]=t}return t},f=v,Y="__core-js_shared__",K=o[Y]||f(Y,{}),N=K;(V.exports=function(e,t){return N[e]||(N[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.24.0",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE",source:"https://github.com/zloirock/core-js"});var J,H,L=b,k=0,A=Math.random(),U=L(1..toString),T=function(e){return"Symbol("+(void 0===e?"":e)+")_"+U(++k+A,36)},B=function(e){return"function"==typeof e},F=o,w=B,z=function(e){return w(e)?e:void 0},x=function(e,t){return arguments.length<2?z(F[e]):F[e]&&F[e][t]},P=x("navigator","userAgent")||"",j=o,Q=P,M=j.process,E=j.Deno,D=M&&M.versions||E&&E.version,O=D&&D.v8;O&&(H=(J=O.split("."))[0]>0&&J[0]<4?1:+(J[0]+J[1])),!H&&Q&&(!(J=Q.match(/Edge\/(\d+)/))||J[1]>=74)&&(J=Q.match(/Chrome\/(\d+)/))&&(H=+J[1]);var _=H,q=_,$=a,ee=!!Object.getOwnPropertySymbols&&!$((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&q&&q<41})),te=ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ie=o,ne=V.exports,le=W,oe=T,ce=ee,ae=te,re=ne("wks"),de=ie.Symbol,se=de&&de.for,ue=ae?de:de&&de.withoutSetter||oe,Ze=function(e){if(!le(re,e)||!ce&&"string"!=typeof re[e]){var t="Symbol."+e;ce&&le(de,e)?re[e]=de[e]:re[e]=ae&&se?se(t):ue(t)}return re[e]},he=Ze;C.f=he;var be={},me=!a((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),pe=B,Ie=function(e){return"object"==typeof e?null!==e:pe(e)},ge=Ie,ye=o.document,Ge=ge(ye)&&ge(ye.createElement),Xe=function(e){return Ge?ye.createElement(e):{}},We=Xe,Ce=!me&&!a((function(){return 7!=Object.defineProperty(We("div"),"a",{get:function(){return 7}}).a})),Ve=me&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Re=Ie,Se=String,ve=TypeError,fe=function(e){if(Re(e))return e;throw ve(Se(e)+" is not an object")},Ye=r,Ke=Function.prototype.call,Ne=Ye?Ke.bind(Ke):function(){return Ke.apply(Ke,arguments)},Je=b({}.isPrototypeOf),He=x,Le=B,ke=Je,Ae=Object,Ue=te?function(e){return"symbol"==typeof e}:function(e){var t=He("Symbol");return Le(t)&&ke(t.prototype,Ae(e))},Te=String,Be=function(e){try{return Te(e)}catch(e){return"Object"}},Fe=B,we=Be,ze=TypeError,xe=function(e){if(Fe(e))return e;throw ze(we(e)+" is not a function")},Pe=xe,je=function(e,t){var i=e[t];return null==i?void 0:Pe(i)},Qe=Ne,Me=B,Ee=Ie,De=TypeError,Oe=Ne,_e=Ie,qe=Ue,$e=je,et=function(e,t){var i,n;if("string"===t&&Me(i=e.toString)&&!Ee(n=Qe(i,e)))return n;if(Me(i=e.valueOf)&&!Ee(n=Qe(i,e)))return n;if("string"!==t&&Me(i=e.toString)&&!Ee(n=Qe(i,e)))return n;throw De("Can't convert object to primitive value")},tt=TypeError,it=Ze("toPrimitive"),nt=function(e,t){if(!_e(e)||qe(e))return e;var i,n=$e(e,it);if(n){if(void 0===t&&(t="default"),i=Oe(n,e,t),!_e(i)||qe(i))return i;throw tt("Can't convert object to primitive value")}return void 0===t&&(t="number"),et(e,t)},lt=nt,ot=Ue,ct=function(e){var t=lt(e,"string");return ot(t)?t:t+""},at=me,rt=Ce,dt=Ve,st=fe,ut=ct,Zt=TypeError,ht=Object.defineProperty,bt=Object.getOwnPropertyDescriptor,mt="enumerable",pt="configurable",It="writable";be.f=at?dt?function(e,t,i){if(st(e),t=ut(t),st(i),"function"==typeof e&&"prototype"===t&&"value"in i&&It in i&&!i.writable){var n=bt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:pt in i?i.configurable:n.configurable,enumerable:mt in i?i.enumerable:n.enumerable,writable:!1})}return ht(e,t,i)}:ht:function(e,t,i){if(st(e),t=ut(t),st(i),rt)try{return ht(e,t,i)}catch(e){}if("get"in i||"set"in i)throw Zt("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var gt=c,yt=W,Gt=C,Xt=be.f,Wt=function(e){var t=gt.Symbol||(gt.Symbol={});yt(t,e)||Xt(t,e,{value:Gt.f(e)})};Wt("matchAll");var Ct={},Vt={},Rt={}.propertyIsEnumerable,St=Object.getOwnPropertyDescriptor,vt=St&&!Rt.call({1:2},1);Vt.f=vt?function(e){var t=St(this,e);return!!t&&t.enumerable}:Rt;var ft=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Yt=b,Kt=Yt({}.toString),Nt=Yt("".slice),Jt=function(e){return Nt(Kt(e),8,-1)},Ht=a,Lt=Jt,kt=Object,At=b("".split),Ut=Ht((function(){return!kt("z").propertyIsEnumerable(0)}))?function(e){return"String"==Lt(e)?At(e,""):kt(e)}:kt,Tt=Ut,Bt=p,Ft=function(e){return Tt(Bt(e))},wt=me,zt=Ne,xt=Vt,Pt=ft,jt=Ft,Qt=ct,Mt=W,Et=Ce,Dt=Object.getOwnPropertyDescriptor;Ct.f=wt?Dt:function(e,t){if(e=jt(e),t=Qt(t),Et)try{return Dt(e,t)}catch(e){}if(Mt(e,t))return Pt(!zt(xt.f,e,t),e[t])};var Ot=be,_t=ft,qt=me?function(e,t,i){return Ot.f(e,t,_t(1,i))}:function(e,t,i){return e[t]=i,e},$t={exports:{}},ei=me,ti=W,ii=Function.prototype,ni=ei&&Object.getOwnPropertyDescriptor,li=ti(ii,"name"),oi={EXISTS:li,PROPER:li&&"something"===function(){}.name,CONFIGURABLE:li&&(!ei||ei&&ni(ii,"name").configurable)},ci=B,ai=K,ri=b(Function.toString);ci(ai.inspectSource)||(ai.inspectSource=function(e){return ri(e)});var di,si,ui,Zi=ai.inspectSource,hi=B,bi=Zi,mi=o.WeakMap,pi=hi(mi)&&/native code/.test(bi(mi)),Ii=V.exports,gi=T,yi=Ii("keys"),Gi=function(e){return yi[e]||(yi[e]=gi(e))},Xi={},Wi=pi,Ci=o,Vi=b,Ri=Ie,Si=qt,vi=W,fi=K,Yi=Gi,Ki=Xi,Ni="Object already initialized",Ji=Ci.TypeError,Hi=Ci.WeakMap;if(Wi||fi.state){var Li=fi.state||(fi.state=new Hi),ki=Vi(Li.get),Ai=Vi(Li.has),Ui=Vi(Li.set);di=function(e,t){if(Ai(Li,e))throw new Ji(Ni);return t.facade=e,Ui(Li,e,t),t},si=function(e){return ki(Li,e)||{}},ui=function(e){return Ai(Li,e)}}else{var Ti=Yi("state");Ki[Ti]=!0,di=function(e,t){if(vi(e,Ti))throw new Ji(Ni);return t.facade=e,Si(e,Ti,t),t},si=function(e){return vi(e,Ti)?e[Ti]:{}},ui=function(e){return vi(e,Ti)}}var Bi={set:di,get:si,has:ui,enforce:function(e){return ui(e)?si(e):di(e,{})},getterFor:function(e){return function(t){var i;if(!Ri(t)||(i=si(t)).type!==e)throw Ji("Incompatible receiver, "+e+" required");return i}}},Fi=a,wi=B,zi=W,xi=me,Pi=oi.CONFIGURABLE,ji=Zi,Qi=Bi.enforce,Mi=Bi.get,Ei=Object.defineProperty,Di=xi&&!Fi((function(){return 8!==Ei((function(){}),"length",{value:8}).length})),Oi=String(String).split("String"),_i=$t.exports=function(e,t,i){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!zi(e,"name")||Pi&&e.name!==t)&&(xi?Ei(e,"name",{value:t,configurable:!0}):e.name=t),Di&&i&&zi(i,"arity")&&e.length!==i.arity&&Ei(e,"length",{value:i.arity});try{i&&zi(i,"constructor")&&i.constructor?xi&&Ei(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Qi(e);return zi(n,"source")||(n.source=Oi.join("string"==typeof t?t:"")),e};Function.prototype.toString=_i((function(){return wi(this)&&Mi(this).source||ji(this)}),"toString");var qi=B,$i=be,en=$t.exports,tn=v,nn=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(qi(i)&&en(i,o,n),n.global)l?e[t]=i:tn(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:$i.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},ln={},on=Math.ceil,cn=Math.floor,an=Math.trunc||function(e){var t=+e;return(t>0?cn:on)(t)},rn=an,dn=function(e){var t=+e;return t!=t||0===t?0:rn(t)},sn=dn,un=Math.max,Zn=Math.min,hn=function(e,t){var i=sn(e);return i<0?un(i+t,0):Zn(i,t)},bn=dn,mn=Math.min,pn=function(e){return e>0?mn(bn(e),9007199254740991):0},In=pn,gn=function(e){return In(e.length)},yn=Ft,Gn=hn,Xn=gn,Wn=function(e){return function(t,i,n){var l,o=yn(t),c=Xn(o),a=Gn(n,c);if(e&&i!=i){for(;c>a;)if((l=o[a++])!=l)return!0}else for(;c>a;a++)if((e||a in o)&&o[a]===i)return e||a||0;return!e&&-1}},Cn={includes:Wn(!0),indexOf:Wn(!1)},Vn=W,Rn=Ft,Sn=Cn.indexOf,vn=Xi,fn=b([].push),Yn=function(e,t){var i,n=Rn(e),l=0,o=[];for(i in n)!Vn(vn,i)&&Vn(n,i)&&fn(o,i);for(;t.length>l;)Vn(n,i=t[l++])&&(~Sn(o,i)||fn(o,i));return o},Kn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Nn=Yn,Jn=Kn.concat("length","prototype");ln.f=Object.getOwnPropertyNames||function(e){return Nn(e,Jn)};var Hn={};Hn.f=Object.getOwnPropertySymbols;var Ln=x,kn=ln,An=Hn,Un=fe,Tn=b([].concat),Bn=Ln("Reflect","ownKeys")||function(e){var t=kn.f(Un(e)),i=An.f;return i?Tn(t,i(e)):t},Fn=W,wn=Bn,zn=Ct,xn=be,Pn=a,jn=B,Qn=/#|\.prototype\./,Mn=function(e,t){var i=Dn[En(e)];return i==_n||i!=On&&(jn(t)?Pn(t):!!t)},En=Mn.normalize=function(e){return String(e).replace(Qn,".").toLowerCase()},Dn=Mn.data={},On=Mn.NATIVE="N",_n=Mn.POLYFILL="P",qn=Mn,$n=o,el=Ct.f,tl=qt,il=nn,nl=v,ll=function(e,t,i){for(var n=wn(t),l=xn.f,o=zn.f,c=0;c<n.length;c++){var a=n[c];Fn(e,a)||i&&Fn(i,a)||l(e,a,o(t,a))}},ol=qn,cl=function(e,t){var i,n,l,o,c,a=e.target,r=e.global,d=e.stat;if(i=r?$n:d?$n[a]||nl(a,{}):($n[a]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(c=el(i,n))&&c.value:i[n],!ol(r?n:a+(d?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;ll(o,l)}(e.sham||l&&l.sham)&&tl(o,"sham",!0),il(i,n,o,e)}},al={},rl=Yn,dl=Kn,sl=Object.keys||function(e){return rl(e,dl)},ul=me,Zl=Ve,hl=be,bl=fe,ml=Ft,pl=sl;al.f=ul&&!Zl?Object.defineProperties:function(e,t){bl(e);for(var i,n=ml(t),l=pl(t),o=l.length,c=0;o>c;)hl.f(e,i=l[c++],n[i]);return e};var Il,gl=x("document","documentElement"),yl=fe,Gl=al,Xl=Kn,Wl=Xi,Cl=gl,Vl=Xe,Rl=Gi("IE_PROTO"),Sl=function(){},vl=function(e){return"<script>"+e+"</"+"script>"},fl=function(e){e.write(vl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Yl=function(){try{Il=new ActiveXObject("htmlfile")}catch(e){}var e,t;Yl="undefined"!=typeof document?document.domain&&Il?fl(Il):((t=Vl("iframe")).style.display="none",Cl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(vl("document.F=Object")),e.close(),e.F):fl(Il);for(var i=Xl.length;i--;)delete Yl.prototype[Xl[i]];return Yl()};Wl[Rl]=!0;var Kl=Object.create||function(e,t){var i;return null!==e?(Sl.prototype=yl(e),i=new Sl,Sl.prototype=null,i[Rl]=e):i=Yl(),void 0===t?i:Gl.f(i,t)},Nl=Ze,Jl=Kl,Hl=be.f,Ll=Nl("unscopables"),kl=Array.prototype;null==kl[Ll]&&Hl(kl,Ll,{configurable:!0,value:Jl(null)});var Al=function(e){kl[Ll][e]=!0},Ul=Cn.includes,Tl=Al;cl({target:"Array",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return Ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Tl("includes"),Al("flat"),Al("flatMap");var Bl={},Fl=xe,wl=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n})),this.resolve=Fl(t),this.reject=Fl(i)};Bl.f=function(e){return new wl(e)};var zl=xe,xl=r,Pl=b(b.bind),jl=function(e,t){return zl(e),void 0===t?e:xl?Pl(e,t):function(){return e.apply(t,arguments)}},Ql={},Ml=Ql,El=Ze("iterator"),Dl=Array.prototype,Ol=function(e){return void 0!==e&&(Ml.Array===e||Dl[El]===e)},_l={};_l[Ze("toStringTag")]="z";var ql="[object z]"===String(_l),$l=B,eo=Jt,to=Ze("toStringTag"),io=Object,no="Arguments"==eo(function(){return arguments}()),lo=ql?eo:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,t){try{return e[t]}catch(e){}}(t=io(e),to))?i:no?eo(t):"Object"==(n=eo(t))&&$l(t.callee)?"Arguments":n},oo=lo,co=je,ao=Ql,ro=Ze("iterator"),so=function(e){if(null!=e)return co(e,ro)||co(e,"@@iterator")||ao[oo(e)]},uo=Ne,Zo=xe,ho=fe,bo=Be,mo=so,po=TypeError,Io=function(e,t){var i=arguments.length<2?mo(e):t;if(Zo(i))return ho(uo(i,e));throw po(bo(e)+" is not iterable")},go=Ne,yo=fe,Go=je,Xo=function(e,t,i){var n,l;yo(e);try{if(!(n=Go(e,"return"))){if("throw"===t)throw i;return i}n=go(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return yo(n),i},Wo=jl,Co=Ne,Vo=fe,Ro=Be,So=Ol,vo=gn,fo=Je,Yo=Io,Ko=so,No=Xo,Jo=TypeError,Ho=function(e,t){this.stopped=e,this.result=t},Lo=Ho.prototype,ko=Ne,Ao=xe,Uo=Bl,To=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},Bo=function(e,t,i){var n,l,o,c,a,r,d,s=i&&i.that,u=!(!i||!i.AS_ENTRIES),Z=!(!i||!i.IS_RECORD),h=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=Wo(t,s),p=function(e){return n&&No(n,"normal",e),new Ho(!0,e)},I=function(e){return u?(Vo(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(Z)n=e.iterator;else if(h)n=e;else{if(!(l=Ko(e)))throw Jo(Ro(e)+" is not iterable");if(So(l)){for(o=0,c=vo(e);c>o;o++)if((a=I(e[o]))&&fo(Lo,a))return a;return new Ho(!1)}n=Yo(e,l)}for(r=Z?e.next:n.next;!(d=Co(r,n)).done;){try{a=I(d.value)}catch(e){No(n,"throw",e)}if("object"==typeof a&&a&&fo(Lo,a))return a}return new Ho(!1)};cl({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=Uo.f(t),n=i.resolve,l=i.reject,o=To((function(){var i=Ao(t.resolve),l=[],o=0,c=1;Bo(e,(function(e){var a=o++,r=!1;c++,ko(i,t,e).then((function(e){r||(r=!0,l[a]={status:"fulfilled",value:e},--c||n(l))}),(function(e){r||(r=!0,l[a]={status:"rejected",reason:e},--c||n(l))}))})),--c||n(l)}));return o.error&&l(o.value),i.promise}});var Fo=o.Promise,wo=b,zo=a,xo=B,Po=lo,jo=Zi,Qo=function(){},Mo=[],Eo=x("Reflect","construct"),Do=/^\s*(?:class|function)\b/,Oo=wo(Do.exec),_o=!Do.exec(Qo),qo=function(e){if(!xo(e))return!1;try{return Eo(Qo,Mo,e),!0}catch(e){return!1}},$o=function(e){if(!xo(e))return!1;switch(Po(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return _o||!!Oo(Do,jo(e))}catch(e){return!0}};$o.sham=!0;var ec=!Eo||zo((function(){var e;return qo(qo.call)||!qo(Object)||!qo((function(){e=!0}))||e}))?$o:qo,tc=ec,ic=Be,nc=TypeError,lc=function(e){if(tc(e))return e;throw nc(ic(e)+" is not a constructor")},oc=fe,cc=lc,ac=Ze("species"),rc=function(e,t){var i,n=oc(e).constructor;return void 0===n||null==(i=oc(n)[ac])?t:cc(i)},dc=fe,sc=Ie,uc=Bl,Zc=cl,hc=Fo,bc=a,mc=x,pc=B,Ic=rc,gc=function(e,t){if(dc(e),sc(t)&&t.constructor===e)return t;var i=uc.f(e);return(0,i.resolve)(t),i.promise},yc=nn,Gc=hc&&hc.prototype;if(Zc({target:"Promise",proto:!0,real:!0,forced:!!hc&&bc((function(){Gc.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=Ic(this,mc("Promise")),i=pc(e);return this.then(i?function(i){return gc(t,e()).then((function(){return i}))}:e,i?function(i){return gc(t,e()).then((function(){throw i}))}:e)}}),pc(hc)){var Xc=mc("Promise").prototype.finally;Gc.finally!==Xc&&yc(Gc,"finally",Xc,{unsafe:!0})}var Wc=$t.exports,Cc=be,Vc=function(e,t,i){return i.get&&Wc(i.get,t,{getter:!0}),i.set&&Wc(i.set,t,{setter:!0}),Cc.f(e,t,i)},Rc=fe,Sc=function(){var e=Rc(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},vc=me,fc=Vc,Yc=Sc,Kc=a,Nc=o.RegExp,Jc=Nc.prototype,Hc=vc&&Kc((function(){var e=!0;try{Nc(".","d")}catch(t){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",l=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},o={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var c in e&&(o.hasIndices="d"),o)l(c,o[c]);return Object.getOwnPropertyDescriptor(Jc,"flags").get.call(t)!==n||i!==n}));Hc&&fc(Jc,"flags",{configurable:!0,get:Yc});var Lc,kc,Ac,Uc=!a((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),Tc=W,Bc=B,Fc=y,wc=Uc,zc=Gi("IE_PROTO"),xc=Object,Pc=xc.prototype,jc=wc?xc.getPrototypeOf:function(e){var t=Fc(e);if(Tc(t,zc))return t[zc];var i=t.constructor;return Bc(i)&&t instanceof i?i.prototype:t instanceof xc?Pc:null},Qc=a,Mc=B,Ec=jc,Dc=nn,Oc=Ze("iterator"),_c=!1;[].keys&&("next"in(Ac=[].keys())?(kc=Ec(Ec(Ac)))!==Object.prototype&&(Lc=kc):_c=!0);var qc=null==Lc||Qc((function(){var e={};return Lc[Oc].call(e)!==e}));qc&&(Lc={}),Mc(Lc[Oc])||Dc(Lc,Oc,(function(){return this}));var $c,ea,ta={IteratorPrototype:Lc,BUGGY_SAFARI_ITERATORS:_c},ia=be.f,na=W,la=Ze("toStringTag"),oa=function(e,t,i){e&&!i&&(e=e.prototype),e&&!na(e,la)&&ia(e,la,{configurable:!0,value:t})},ca=ta.IteratorPrototype,aa=Kl,ra=ft,da=oa,sa=Ql,ua=function(){return this},Za=function(e,t,i,n){var l=t+" Iterator";return e.prototype=aa(ca,{next:ra(+!n,i)}),da(e,l,!1),sa[l]=ua,e},ha=lo,ba=String,ma=function(e){if("Symbol"===ha(e))throw TypeError("Cannot convert a Symbol value to a string");return ba(e)},pa=Ie,Ia=Jt,ga=Ze("match"),ya=Ne,Ga=W,Xa=Je,Wa=Sc,Ca=RegExp.prototype,Va=b,Ra=dn,Sa=ma,va=p,fa=Va("".charAt),Ya=Va("".charCodeAt),Ka=Va("".slice),Na=function(e){return function(t,i){var n,l,o=Sa(va(t)),c=Ra(i),a=o.length;return c<0||c>=a?e?"":void 0:(n=Ya(o,c))<55296||n>56319||c+1===a||(l=Ya(o,c+1))<56320||l>57343?e?fa(o,c):n:e?Ka(o,c,c+2):l-56320+(n-55296<<10)+65536}},Ja={codeAt:Na(!1),charAt:Na(!0)},Ha=Ja.charAt,La=function(e,t,i){return t+(i?Ha(e,t).length:1)},ka=a,Aa=o.RegExp,Ua=ka((function(){var e=Aa("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),Ta=Ua||ka((function(){return!Aa("a","y").sticky})),Ba={BROKEN_CARET:Ua||ka((function(){var e=Aa("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:Ta,UNSUPPORTED_Y:Ua},Fa=a,wa=o.RegExp,za=Fa((function(){var e=wa(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),xa=a,Pa=o.RegExp,ja=xa((function(){var e=Pa("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Qa=Ne,Ma=b,Ea=ma,Da=Sc,Oa=Ba,_a=V.exports,qa=Kl,$a=Bi.get,er=za,tr=ja,ir=_a("native-string-replace",String.prototype.replace),nr=RegExp.prototype.exec,lr=nr,or=Ma("".charAt),cr=Ma("".indexOf),ar=Ma("".replace),rr=Ma("".slice),dr=(ea=/b*/g,Qa(nr,$c=/a/,"a"),Qa(nr,ea,"a"),0!==$c.lastIndex||0!==ea.lastIndex),sr=Oa.BROKEN_CARET,ur=void 0!==/()??/.exec("")[1];(dr||ur||sr||er||tr)&&(lr=function(e){var t,i,n,l,o,c,a,r=this,d=$a(r),s=Ea(e),u=d.raw;if(u)return u.lastIndex=r.lastIndex,t=Qa(lr,u,s),r.lastIndex=u.lastIndex,t;var Z=d.groups,h=sr&&r.sticky,b=Qa(Da,r),m=r.source,p=0,I=s;if(h&&(b=ar(b,"y",""),-1===cr(b,"g")&&(b+="g"),I=rr(s,r.lastIndex),r.lastIndex>0&&(!r.multiline||r.multiline&&"\n"!==or(s,r.lastIndex-1))&&(m="(?: "+m+")",I=" "+I,p++),i=new RegExp("^(?:"+m+")",b)),ur&&(i=new RegExp("^"+m+"$(?!\\s)",b)),dr&&(n=r.lastIndex),l=Qa(nr,h?i:r,I),h?l?(l.input=rr(l.input,p),l[0]=rr(l[0],p),l.index=r.lastIndex,r.lastIndex+=l[0].length):r.lastIndex=0:dr&&l&&(r.lastIndex=r.global?l.index+l[0].length:n),ur&&l&&l.length>1&&Qa(ir,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&Z)for(l.groups=c=qa(null),o=0;o<Z.length;o++)c[(a=Z[o])[0]]=l[a[1]];return l});var Zr=lr,hr=Ne,br=fe,mr=B,pr=Jt,Ir=Zr,gr=TypeError,yr=function(e,t){var i=e.exec;if(mr(i)){var n=hr(i,e,t);return null!==n&&br(n),n}if("RegExp"===pr(e))return hr(Ir,e,t);throw gr("RegExp#exec called on incompatible receiver")},Gr=cl,Xr=Ne,Wr=b,Cr=Za,Vr=p,Rr=pn,Sr=ma,vr=fe,fr=function(e){var t;return pa(e)&&(void 0!==(t=e[ga])?!!t:"RegExp"==Ia(e))},Yr=function(e){var t=e.flags;return void 0!==t||"flags"in Ca||Ga(e,"flags")||!Xa(Ca,e)?t:ya(Wa,e)},Kr=je,Nr=nn,Jr=a,Hr=rc,Lr=La,kr=yr,Ar=Bi,Ur=Ze("matchAll"),Tr="RegExp String",Br="RegExp String Iterator",Fr=Ar.set,wr=Ar.getterFor(Br),zr=RegExp.prototype,xr=TypeError,Pr=Wr("".indexOf),jr=Wr("".matchAll),Qr=!!jr&&!Jr((function(){jr("a",/./)})),Mr=Cr((function(e,t,i,n){Fr(this,{type:Br,regexp:e,string:t,global:i,unicode:n,done:!1})}),Tr,(function(){var e=wr(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=kr(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===Sr(n[0])&&(t.lastIndex=Lr(i,Rr(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Er=function(e){var t,i,n,l=vr(this),o=Sr(e),c=Hr(l,RegExp),a=Sr(Yr(l));return t=new c(c===RegExp?l.source:l,a),i=!!~Pr(a,"g"),n=!!~Pr(a,"u"),t.lastIndex=Rr(l.lastIndex),new Mr(t,o,i,n)};Gr({target:"String",proto:!0,forced:Qr},{matchAll:function(e){var t,i,n,l=Vr(this);if(null!=e){if(fr(e)&&(t=Sr(Vr(Yr(e))),!~Pr(t,"g")))throw xr("`.matchAll` does not allow non-global regexes");if(Qr)return jr(l,e);if(n=Kr(e,Ur))return Xr(n,e,l)}else if(Qr)return jr(l,e);return i=Sr(l),new RegExp(e,"g")[Ur](i)}}),Ur in zr||Nr(zr,Ur,Er);var Dr=r,Or=Function.prototype,_r=Or.apply,qr=Or.call,$r="object"==typeof Reflect&&Reflect.apply||(Dr?qr.bind(_r):function(){return qr.apply(_r,arguments)});cl({target:"RegExp",proto:!0,forced:/./.exec!==Zr},{exec:Zr});var ed=b,td=nn,id=Zr,nd=a,ld=Ze,od=qt,cd=ld("species"),ad=RegExp.prototype,rd=b,dd=y,sd=Math.floor,ud=rd("".charAt),Zd=rd("".replace),hd=rd("".slice),bd=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,md=/\$([$&'`]|\d{1,2})/g,pd=$r,Id=Ne,gd=b,yd=function(e,t,i,n){var l=ld(e),o=!nd((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),c=o&&!nd((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[cd]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!c||i){var a=ed(/./[l]),r=t(l,""[e],(function(e,t,i,n,l){var c=ed(e),r=t.exec;return r===id||r===ad.exec?o&&!l?{done:!0,value:a(t,i,n)}:{done:!0,value:c(i,t,n)}:{done:!1}}));td(String.prototype,e,r[0]),td(ad,l,r[1])}n&&od(ad[l],"sham",!0)},Gd=a,Xd=fe,Wd=B,Cd=dn,Vd=pn,Rd=ma,Sd=p,vd=La,fd=je,Yd=function(e,t,i,n,l,o){var c=i+e.length,a=n.length,r=md;return void 0!==l&&(l=dd(l),r=bd),Zd(o,r,(function(o,r){var d;switch(ud(r,0)){case"$":return"$";case"&":return e;case"`":return hd(t,0,i);case"'":return hd(t,c);case"<":d=l[hd(r,1,-1)];break;default:var s=+r;if(0===s)return o;if(s>a){var u=sd(s/10);return 0===u?o:u<=a?void 0===n[u-1]?ud(r,1):n[u-1]+ud(r,1):o}d=n[s-1]}return void 0===d?"":d}))},Kd=yr,Nd=Ze("replace"),Jd=Math.max,Hd=Math.min,Ld=gd([].concat),kd=gd([].push),Ad=gd("".indexOf),Ud=gd("".slice),Td="$0"==="a".replace(/./,"$0"),Bd=!!/./[Nd]&&""===/./[Nd]("a","$0");yd("replace",(function(e,t,i){var n=Bd?"$":"$0";return[function(e,i){var n=Sd(this),l=null==e?void 0:fd(e,Nd);return l?Id(l,e,n,i):Id(t,Rd(n),e,i)},function(e,l){var o=Xd(this),c=Rd(e);if("string"==typeof l&&-1===Ad(l,n)&&-1===Ad(l,"$<")){var a=i(t,o,c,l);if(a.done)return a.value}var r=Wd(l);r||(l=Rd(l));var d=o.global;if(d){var s=o.unicode;o.lastIndex=0}for(var u=[];;){var Z=Kd(o,c);if(null===Z)break;if(kd(u,Z),!d)break;""===Rd(Z[0])&&(o.lastIndex=vd(c,Vd(o.lastIndex),s))}for(var h,b="",m=0,p=0;p<u.length;p++){for(var I=Rd((Z=u[p])[0]),g=Jd(Hd(Cd(Z.index),c.length),0),y=[],G=1;G<Z.length;G++)kd(y,void 0===(h=Z[G])?h:String(h));var X=Z.groups;if(r){var W=Ld([I],y,g,c);void 0!==X&&kd(W,X);var C=Rd(pd(l,void 0,W))}else C=Yd(I,c,g,y,X,l);g>=m&&(b+=Ud(c,m,g)+C,m=g+I.length)}return b+Ud(c,m)}]}),!!Gd((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!Td||Bd);var Fd={exports:{}},wd=Ze("iterator"),zd=!1;try{var xd=0,Pd={next:function(){return{done:!!xd++}},return:function(){zd=!0}};Pd[wd]=function(){return this},Array.from(Pd,(function(){throw 2}))}catch(e){}var jd,Qd,Md,Ed="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Dd=B,Od=String,_d=TypeError,qd=b,$d=fe,es=function(e){if("object"==typeof e||Dd(e))return e;throw _d("Can't set "+Od(e)+" as a prototype")},ts=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=qd(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return $d(i),es(n),t?e(i,n):i.__proto__=n,i}}():void 0),is=Ed,ns=me,ls=o,os=B,cs=Ie,as=W,rs=lo,ds=Be,ss=qt,us=nn,Zs=be.f,hs=Je,bs=jc,ms=ts,ps=Ze,Is=T,gs=Bi.enforce,ys=Bi.get,Gs=ls.Int8Array,Xs=Gs&&Gs.prototype,Ws=ls.Uint8ClampedArray,Cs=Ws&&Ws.prototype,Vs=Gs&&bs(Gs),Rs=Xs&&bs(Xs),Ss=Object.prototype,vs=ls.TypeError,fs=ps("toStringTag"),Ys=Is("TYPED_ARRAY_TAG"),Ks="TypedArrayConstructor",Ns=is&&!!ms&&"Opera"!==rs(ls.opera),Js=!1,Hs={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},Ls={BigInt64Array:8,BigUint64Array:8},ks=function(e){var t=bs(e);if(cs(t)){var i=ys(t);return i&&as(i,Ks)?i.TypedArrayConstructor:ks(t)}},As=function(e){if(!cs(e))return!1;var t=rs(e);return as(Hs,t)||as(Ls,t)};for(jd in Hs)(Md=(Qd=ls[jd])&&Qd.prototype)?gs(Md).TypedArrayConstructor=Qd:Ns=!1;for(jd in Ls)(Md=(Qd=ls[jd])&&Qd.prototype)&&(gs(Md).TypedArrayConstructor=Qd);if((!Ns||!os(Vs)||Vs===Function.prototype)&&(Vs=function(){throw vs("Incorrect invocation")},Ns))for(jd in Hs)ls[jd]&&ms(ls[jd],Vs);if((!Ns||!Rs||Rs===Ss)&&(Rs=Vs.prototype,Ns))for(jd in Hs)ls[jd]&&ms(ls[jd].prototype,Rs);if(Ns&&bs(Cs)!==Rs&&ms(Cs,Rs),ns&&!as(Rs,fs))for(jd in Js=!0,Zs(Rs,fs,{get:function(){return cs(this)?this[Ys]:void 0}}),Hs)ls[jd]&&ss(ls[jd],Ys,jd);var Us={NATIVE_ARRAY_BUFFER_VIEWS:Ns,TYPED_ARRAY_TAG:Js&&Ys,aTypedArray:function(e){if(As(e))return e;throw vs("Target is not a typed array")},aTypedArrayConstructor:function(e){if(os(e)&&(!ms||hs(Vs,e)))return e;throw vs(ds(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(ns){if(i)for(var l in Hs){var o=ls[l];if(o&&as(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}Rs[e]&&!i||us(Rs,e,i?t:Ns&&Xs[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(ns){if(ms){if(i)for(n in Hs)if((l=ls[n])&&as(l,e))try{delete l[e]}catch(e){}if(Vs[e]&&!i)return;try{return us(Vs,e,i?t:Ns&&Vs[e]||t)}catch(e){}}for(n in Hs)!(l=ls[n])||l[e]&&!i||us(l,e,t)}},getTypedArrayConstructor:ks,isView:function(e){if(!cs(e))return!1;var t=rs(e);return"DataView"===t||as(Hs,t)||as(Ls,t)},isTypedArray:As,TypedArray:Vs,TypedArrayPrototype:Rs},Ts=o,Bs=a,Fs=function(e,t){if(!t&&!zd)return!1;var i=!1;try{var n={};n[wd]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},ws=Us.NATIVE_ARRAY_BUFFER_VIEWS,zs=Ts.ArrayBuffer,xs=Ts.Int8Array,Ps=!ws||!Bs((function(){xs(1)}))||!Bs((function(){new xs(-1)}))||!Fs((function(e){new xs,new xs(null),new xs(1.5),new xs(e)}),!0)||Bs((function(){return 1!==new xs(new zs(2),1,void 0).length})),js=nn,Qs=function(e,t,i){for(var n in t)js(e,n,t[n],i);return e},Ms=Je,Es=TypeError,Ds=function(e,t){if(Ms(t,e))return e;throw Es("Incorrect invocation")},Os=dn,_s=pn,qs=RangeError,$s=function(e){if(void 0===e)return 0;var t=Os(e),i=_s(t);if(t!==i)throw qs("Wrong length or index");return i},eu=Array,tu=Math.abs,iu=Math.pow,nu=Math.floor,lu=Math.log,ou=Math.LN2,cu={pack:function(e,t,i){var n,l,o,c=eu(i),a=8*i-t-1,r=(1<<a)-1,d=r>>1,s=23===t?iu(2,-24)-iu(2,-77):0,u=e<0||0===e&&1/e<0?1:0,Z=0;for((e=tu(e))!=e||e===1/0?(l=e!=e?1:0,n=r):(n=nu(lu(e)/ou),e*(o=iu(2,-n))<1&&(n--,o*=2),(e+=n+d>=1?s/o:s*iu(2,1-d))*o>=2&&(n++,o/=2),n+d>=r?(l=0,n=r):n+d>=1?(l=(e*o-1)*iu(2,t),n+=d):(l=e*iu(2,d-1)*iu(2,t),n=0));t>=8;)c[Z++]=255&l,l/=256,t-=8;for(n=n<<t|l,a+=t;a>0;)c[Z++]=255&n,n/=256,a-=8;return c[--Z]|=128*u,c},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,c=o>>1,a=l-7,r=n-1,d=e[r--],s=127&d;for(d>>=7;a>0;)s=256*s+e[r--],a-=8;for(i=s&(1<<-a)-1,s>>=-a,a+=t;a>0;)i=256*i+e[r--],a-=8;if(0===s)s=1-c;else{if(s===o)return i?NaN:d?-1/0:1/0;i+=iu(2,t),s-=c}return(d?-1:1)*i*iu(2,s-t)}},au=y,ru=hn,du=gn,su=function(e){for(var t=au(this),i=du(t),n=arguments.length,l=ru(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,c=void 0===o?i:ru(o,i);c>l;)t[l++]=e;return t},uu=ct,Zu=be,hu=ft,bu=function(e,t,i){var n=uu(t);n in e?Zu.f(e,n,hu(0,i)):e[n]=i},mu=hn,pu=gn,Iu=bu,gu=Array,yu=Math.max,Gu=function(e,t,i){for(var n=pu(e),l=mu(t,n),o=mu(void 0===i?n:i,n),c=gu(yu(o-l,0)),a=0;l<o;l++,a++)Iu(c,a,e[l]);return c.length=a,c},Xu=o,Wu=b,Cu=me,Vu=Ed,Ru=oi,Su=qt,vu=Qs,fu=a,Yu=Ds,Ku=dn,Nu=pn,Ju=$s,Hu=cu,Lu=jc,ku=ts,Au=ln.f,Uu=be.f,Tu=su,Bu=Gu,Fu=oa,wu=Ru.PROPER,zu=Ru.CONFIGURABLE,xu=Bi.get,Pu=Bi.set,ju="ArrayBuffer",Qu="DataView",Mu="Wrong index",Eu=Xu.ArrayBuffer,Du=Eu,Ou=Du&&Du.prototype,_u=Xu.DataView,qu=_u&&_u.prototype,$u=Object.prototype,eZ=Xu.Array,tZ=Xu.RangeError,iZ=Wu(Tu),nZ=Wu([].reverse),lZ=Hu.pack,oZ=Hu.unpack,cZ=function(e){return[255&e]},aZ=function(e){return[255&e,e>>8&255]},rZ=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},dZ=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},sZ=function(e){return lZ(e,23,4)},uZ=function(e){return lZ(e,52,8)},ZZ=function(e,t){Uu(e.prototype,t,{get:function(){return xu(this)[t]}})},hZ=function(e,t,i,n){var l=Ju(i),o=xu(e);if(l+t>o.byteLength)throw tZ(Mu);var c=xu(o.buffer).bytes,a=l+o.byteOffset,r=Bu(c,a,a+t);return n?r:nZ(r)},bZ=function(e,t,i,n,l,o){var c=Ju(i),a=xu(e);if(c+t>a.byteLength)throw tZ(Mu);for(var r=xu(a.buffer).bytes,d=c+a.byteOffset,s=n(+l),u=0;u<t;u++)r[d+u]=s[o?u:t-u-1]};if(Vu){var mZ=wu&&Eu.name!==ju;if(fu((function(){Eu(1)}))&&fu((function(){new Eu(-1)}))&&!fu((function(){return new Eu,new Eu(1.5),new Eu(NaN),mZ&&!zu})))mZ&&zu&&Su(Eu,"name",ju);else{(Du=function(e){return Yu(this,Ou),new Eu(Ju(e))}).prototype=Ou;for(var pZ,IZ=Au(Eu),gZ=0;IZ.length>gZ;)(pZ=IZ[gZ++])in Du||Su(Du,pZ,Eu[pZ]);Ou.constructor=Du}ku&&Lu(qu)!==$u&&ku(qu,$u);var yZ=new _u(new Du(2)),GZ=Wu(qu.setInt8);yZ.setInt8(0,2147483648),yZ.setInt8(1,2147483649),!yZ.getInt8(0)&&yZ.getInt8(1)||vu(qu,{setInt8:function(e,t){GZ(this,e,t<<24>>24)},setUint8:function(e,t){GZ(this,e,t<<24>>24)}},{unsafe:!0})}else Du=function(e){Yu(this,Ou);var t=Ju(e);Pu(this,{bytes:iZ(eZ(t),0),byteLength:t}),Cu||(this.byteLength=t)},Ou=Du.prototype,_u=function(e,t,i){Yu(this,qu),Yu(e,Ou);var n=xu(e).byteLength,l=Ku(t);if(l<0||l>n)throw tZ("Wrong offset");if(l+(i=void 0===i?n-l:Nu(i))>n)throw tZ("Wrong length");Pu(this,{buffer:e,byteLength:i,byteOffset:l}),Cu||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},qu=_u.prototype,Cu&&(ZZ(Du,"byteLength"),ZZ(_u,"buffer"),ZZ(_u,"byteLength"),ZZ(_u,"byteOffset")),vu(qu,{getInt8:function(e){return hZ(this,1,e)[0]<<24>>24},getUint8:function(e){return hZ(this,1,e)[0]},getInt16:function(e){var t=hZ(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=hZ(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return dZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return dZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return oZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return oZ(hZ(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){bZ(this,1,e,cZ,t)},setUint8:function(e,t){bZ(this,1,e,cZ,t)},setInt16:function(e,t){bZ(this,2,e,aZ,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){bZ(this,2,e,aZ,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){bZ(this,4,e,rZ,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){bZ(this,4,e,rZ,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){bZ(this,4,e,sZ,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){bZ(this,8,e,uZ,t,arguments.length>2?arguments[2]:void 0)}});Fu(Du,ju),Fu(_u,Qu);var XZ={ArrayBuffer:Du,DataView:_u},WZ=Ie,CZ=Math.floor,VZ=Number.isInteger||function(e){return!WZ(e)&&isFinite(e)&&CZ(e)===e},RZ=dn,SZ=RangeError,vZ=function(e){var t=RZ(e);if(t<0)throw SZ("The argument can't be less than 0");return t},fZ=RangeError,YZ=function(e,t){var i=vZ(e);if(i%t)throw fZ("Wrong offset");return i},KZ=jl,NZ=Ne,JZ=lc,HZ=y,LZ=gn,kZ=Io,AZ=so,UZ=Ol,TZ=Us.aTypedArrayConstructor,BZ=function(e){var t,i,n,l,o,c,a=JZ(this),r=HZ(e),d=arguments.length,s=d>1?arguments[1]:void 0,u=void 0!==s,Z=AZ(r);if(Z&&!UZ(Z))for(c=(o=kZ(r,Z)).next,r=[];!(l=NZ(c,o)).done;)r.push(l.value);for(u&&d>2&&(s=KZ(s,arguments[2])),i=LZ(r),n=new(TZ(a))(i),t=0;i>t;t++)n[t]=u?s(r[t],t):r[t];return n},FZ=Jt,wZ=Array.isArray||function(e){return"Array"==FZ(e)},zZ=ec,xZ=Ie,PZ=Ze("species"),jZ=Array,QZ=function(e){var t;return wZ(e)&&(t=e.constructor,(zZ(t)&&(t===jZ||wZ(t.prototype))||xZ(t)&&null===(t=t[PZ]))&&(t=void 0)),void 0===t?jZ:t},MZ=jl,EZ=Ut,DZ=y,OZ=gn,_Z=function(e,t){return new(QZ(e))(0===t?0:t)},qZ=b([].push),$Z=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,c=7==e,a=5==e||o;return function(r,d,s,u){for(var Z,h,b=DZ(r),m=EZ(b),p=MZ(d,s),I=OZ(m),g=0,y=u||_Z,G=t?y(r,I):i||c?y(r,0):void 0;I>g;g++)if((a||g in m)&&(h=p(Z=m[g],g,b),e))if(t)G[g]=h;else if(h)switch(e){case 3:return!0;case 5:return Z;case 6:return g;case 2:qZ(G,Z)}else switch(e){case 4:return!1;case 7:qZ(G,Z)}return o?-1:n||l?l:G}},eh={forEach:$Z(0),map:$Z(1),filter:$Z(2),some:$Z(3),every:$Z(4),find:$Z(5),findIndex:$Z(6),filterReject:$Z(7)},th=x,ih=be,nh=me,lh=Ze("species"),oh=B,ch=Ie,ah=ts,rh=cl,dh=o,sh=Ne,uh=me,Zh=Ps,hh=Us,bh=XZ,mh=Ds,ph=ft,Ih=qt,gh=VZ,yh=pn,Gh=$s,Xh=YZ,Wh=ct,Ch=W,Vh=lo,Rh=Ie,Sh=Ue,vh=Kl,fh=Je,Yh=ts,Kh=ln.f,Nh=BZ,Jh=eh.forEach,Hh=function(e){var t=th(e),i=ih.f;nh&&t&&!t[lh]&&i(t,lh,{configurable:!0,get:function(){return this}})},Lh=be,kh=Ct,Ah=function(e,t,i){var n,l;return ah&&oh(n=t.constructor)&&n!==i&&ch(l=n.prototype)&&l!==i.prototype&&ah(e,l),e},Uh=Bi.get,Th=Bi.set,Bh=Bi.enforce,Fh=Lh.f,wh=kh.f,zh=Math.round,xh=dh.RangeError,Ph=bh.ArrayBuffer,jh=Ph.prototype,Qh=bh.DataView,Mh=hh.NATIVE_ARRAY_BUFFER_VIEWS,Eh=hh.TYPED_ARRAY_TAG,Dh=hh.TypedArray,Oh=hh.TypedArrayPrototype,_h=hh.aTypedArrayConstructor,qh=hh.isTypedArray,$h="BYTES_PER_ELEMENT",eb="Wrong length",tb=function(e,t){_h(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},ib=function(e,t){Fh(e,t,{get:function(){return Uh(this)[t]}})},nb=function(e){var t;return fh(jh,e)||"ArrayBuffer"==(t=Vh(e))||"SharedArrayBuffer"==t},lb=function(e,t){return qh(e)&&!Sh(t)&&t in e&&gh(+t)&&t>=0},ob=function(e,t){return t=Wh(t),lb(e,t)?ph(2,e[t]):wh(e,t)},cb=function(e,t,i){return t=Wh(t),!(lb(e,t)&&Rh(i)&&Ch(i,"value"))||Ch(i,"get")||Ch(i,"set")||i.configurable||Ch(i,"writable")&&!i.writable||Ch(i,"enumerable")&&!i.enumerable?Fh(e,t,i):(e[t]=i.value,e)};uh?(Mh||(kh.f=ob,Lh.f=cb,ib(Oh,"buffer"),ib(Oh,"byteOffset"),ib(Oh,"byteLength"),ib(Oh,"length")),rh({target:"Object",stat:!0,forced:!Mh},{getOwnPropertyDescriptor:ob,defineProperty:cb}),Fd.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,c="set"+e,a=dh[l],r=a,d=r&&r.prototype,s={},u=function(e,t){Fh(e,t,{get:function(){return function(e,t){var i=Uh(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=Uh(e);i&&(l=(l=zh(l))<0?0:l>255?255:255&l),o.view[c](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};Mh?Zh&&(r=t((function(e,t,i,l){return mh(e,d),Ah(Rh(t)?nb(t)?void 0!==l?new a(t,Xh(i,n),l):void 0!==i?new a(t,Xh(i,n)):new a(t):qh(t)?tb(r,t):sh(Nh,r,t):new a(Gh(t)),e,r)})),Yh&&Yh(r,Dh),Jh(Kh(a),(function(e){e in r||Ih(r,e,a[e])})),r.prototype=d):(r=t((function(e,t,i,l){mh(e,d);var o,c,a,s=0,Z=0;if(Rh(t)){if(!nb(t))return qh(t)?tb(r,t):sh(Nh,r,t);o=t,Z=Xh(i,n);var h=t.byteLength;if(void 0===l){if(h%n)throw xh(eb);if((c=h-Z)<0)throw xh(eb)}else if((c=yh(l)*n)+Z>h)throw xh(eb);a=c/n}else a=Gh(t),o=new Ph(c=a*n);for(Th(e,{buffer:o,byteOffset:Z,byteLength:c,length:a,view:new Qh(o)});s<a;)u(e,s++)})),Yh&&Yh(r,Dh),d=r.prototype=vh(Oh)),d.constructor!==r&&Ih(d,"constructor",r),Bh(d).TypedArrayConstructor=r,Eh&&Ih(d,Eh,l);var Z=r!=a;s[l]=r,rh({global:!0,constructor:!0,forced:Z,sham:!Mh},s),$h in r||Ih(r,$h,n),$h in d||Ih(d,$h,n),Hh(l)}):Fd.exports=function(){},(0,Fd.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Fd.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var ab=nt,rb=TypeError,db=su,sb=function(e){var t=ab(e,"number");if("number"==typeof t)throw rb("Can't convert number to bigint");return BigInt(t)},ub=lo,Zb=Ne,hb=a,bb=Us.aTypedArray,mb=Us.exportTypedArrayMethod,pb=b("".slice);mb("fill",(function(e){var t=arguments.length;bb(this);var i="Big"===pb(ub(this),0,3)?sb(e):+e;return Zb(db,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),hb((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,Us.exportTypedArrayStaticMethod)("from",BZ,Ps);var Ib=Us.aTypedArrayConstructor;(0,Us.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(Ib(this))(t);t>e;)i[e]=arguments[e++];return i}),Ps);var gb=o,yb=Ne,Gb=Us,Xb=gn,Wb=YZ,Cb=y,Vb=a,Rb=gb.RangeError,Sb=gb.Int8Array,vb=Sb&&Sb.prototype,fb=vb&&vb.set,Yb=Gb.aTypedArray,Kb=Gb.exportTypedArrayMethod,Nb=!Vb((function(){var e=new Uint8ClampedArray(2);return yb(fb,e,{length:1,0:3},1),3!==e[1]})),Jb=Nb&&Gb.NATIVE_ARRAY_BUFFER_VIEWS&&Vb((function(){var e=new Sb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Kb("set",(function(e){Yb(this);var t=Wb(arguments.length>1?arguments[1]:void 0,1),i=Cb(e);if(Nb)return yb(fb,this,i,t);var n=this.length,l=Xb(i),o=0;if(l+t>n)throw Rb("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!Nb||Jb);var Hb=Gu,Lb=Math.floor,kb=function(e,t){var i=e.length,n=Lb(i/2);return i<8?Ab(e,t):Ub(e,kb(Hb(e,0,n),t),kb(Hb(e,n),t),t)},Ab=function(e,t){for(var i,n,l=e.length,o=1;o<l;){for(n=o,i=e[o];n&&t(e[n-1],i)>0;)e[n]=e[--n];n!==o++&&(e[n]=i)}return e},Ub=function(e,t,i,n){for(var l=t.length,o=i.length,c=0,a=0;c<l||a<o;)e[c+a]=c<l&&a<o?n(t[c],i[a])<=0?t[c++]:i[a++]:c<l?t[c++]:i[a++];return e},Tb=kb,Bb=P.match(/firefox\/(\d+)/i),Fb=!!Bb&&+Bb[1],wb=/MSIE|Trident/.test(P),zb=P.match(/AppleWebKit\/(\d+)\./),xb=!!zb&&+zb[1],Pb=b,jb=a,Qb=xe,Mb=Tb,Eb=Fb,Db=wb,Ob=_,_b=xb,qb=Us.aTypedArray,$b=Us.exportTypedArrayMethod,em=o.Uint16Array,tm=em&&Pb(em.prototype.sort),im=!(!tm||jb((function(){tm(new em(2),null)}))&&jb((function(){tm(new em(2),{})}))),nm=!!tm&&!jb((function(){if(Ob)return Ob<74;if(Eb)return Eb<67;if(Db)return!0;if(_b)return _b<602;var e,t,i=new em(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(tm(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));$b("sort",(function(e){return void 0!==e&&Qb(e),nm?tm(this,e):Mb(qb(this),function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!=i?-1:t!=t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}}(e))}),!nm||im);var lm=Xe("span").classList,om=lm&&lm.constructor&&lm.constructor.prototype,cm=om===Object.prototype?void 0:om,am=cl,rm=Ne,dm=B,sm=Za,um=jc,Zm=ts,hm=oa,bm=qt,mm=nn,pm=Ql,Im=oi.PROPER,gm=oi.CONFIGURABLE,ym=ta.IteratorPrototype,Gm=ta.BUGGY_SAFARI_ITERATORS,Xm=Ze("iterator"),Wm="keys",Cm="values",Vm="entries",Rm=function(){return this},Sm=function(e,t,i,n,l,o,c){sm(i,t,n);var a,r,d,s=function(e){if(e===l&&m)return m;if(!Gm&&e in h)return h[e];switch(e){case Wm:case Cm:case Vm:return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",Z=!1,h=e.prototype,b=h[Xm]||h["@@iterator"]||l&&h[l],m=!Gm&&b||s(l),p="Array"==t&&h.entries||b;if(p&&(a=um(p.call(new e)))!==Object.prototype&&a.next&&(um(a)!==ym&&(Zm?Zm(a,ym):dm(a[Xm])||mm(a,Xm,Rm)),hm(a,u,!0)),Im&&l==Cm&&b&&b.name!==Cm&&(gm?bm(h,"name",Cm):(Z=!0,m=function(){return rm(b,this)})),l)if(r={values:s(Cm),keys:o?m:s(Wm),entries:s(Vm)},c)for(d in r)(Gm||Z||!(d in h))&&mm(h,d,r[d]);else am({target:t,proto:!0,forced:Gm||Z},r);return h[Xm]!==m&&mm(h,Xm,m,{name:l}),pm[t]=m,r},vm=Ft,fm=Al,Ym=Ql,Km=Bi,Nm=be.f,Jm=Sm,Hm=me,Lm="Array Iterator",km=Km.set,Am=Km.getterFor(Lm),Um=Jm(Array,"Array",(function(e,t){km(this,{type:Lm,target:vm(e),index:0,kind:t})}),(function(){var e=Am(this),t=e.target,i=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),Tm=Ym.Arguments=Ym.Array;if(fm("keys"),fm("values"),fm("entries"),Hm&&"values"!==Tm.name)try{Nm(Tm,"name",{value:"values"})}catch(e){}var Bm=o,Fm={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},wm=cm,zm=Um,xm=qt,Pm=Ze,jm=Pm("iterator"),Qm=Pm("toStringTag"),Mm=zm.values,Em=function(e,t){if(e){if(e[jm]!==Mm)try{xm(e,jm,Mm)}catch(t){e[jm]=Mm}if(e[Qm]||xm(e,Qm,t),Fm[t])for(var i in zm)if(e[i]!==zm[i])try{xm(e,i,zm[i])}catch(t){e[i]=zm[i]}}};for(var Dm in Fm)Em(Bm[Dm]&&Bm[Dm].prototype,Dm);Em(wm,"DOMTokenList");var Om,_m,qm,$m,ep=b([].slice),tp=TypeError,ip=function(e,t){if(e<t)throw tp("Not enough arguments");return e},np=/(?:ipad|iphone|ipod).*applewebkit/i.test(P),lp="process"==Jt(o.process),op=o,cp=$r,ap=jl,rp=B,dp=W,sp=a,up=gl,Zp=ep,hp=Xe,bp=ip,mp=np,pp=lp,Ip=op.setImmediate,gp=op.clearImmediate,yp=op.process,Gp=op.Dispatch,Xp=op.Function,Wp=op.MessageChannel,Cp=op.String,Vp=0,Rp={},Sp="onreadystatechange";try{Om=op.location}catch(e){}var vp=function(e){if(dp(Rp,e)){var t=Rp[e];delete Rp[e],t()}},fp=function(e){return function(){vp(e)}},Yp=function(e){vp(e.data)},Kp=function(e){op.postMessage(Cp(e),Om.protocol+"//"+Om.host)};Ip&&gp||(Ip=function(e){bp(arguments.length,1);var t=rp(e)?e:Xp(e),i=Zp(arguments,1);return Rp[++Vp]=function(){cp(t,void 0,i)},_m(Vp),Vp},gp=function(e){delete Rp[e]},pp?_m=function(e){yp.nextTick(fp(e))}:Gp&&Gp.now?_m=function(e){Gp.now(fp(e))}:Wp&&!mp?($m=(qm=new Wp).port2,qm.port1.onmessage=Yp,_m=ap($m.postMessage,$m)):op.addEventListener&&rp(op.postMessage)&&!op.importScripts&&Om&&"file:"!==Om.protocol&&!sp(Kp)?(_m=Kp,op.addEventListener("message",Yp,!1)):_m=Sp in hp("script")?function(e){up.appendChild(hp("script")).onreadystatechange=function(){up.removeChild(this),vp(e)}}:function(e){setTimeout(fp(e),0)});var Np={set:Ip,clear:gp},Jp=Np.clear;cl({global:!0,bind:!0,enumerable:!0,forced:o.clearImmediate!==Jp},{clearImmediate:Jp});var Hp=Np.set;cl({global:!0,bind:!0,enumerable:!0,forced:o.setImmediate!==Hp},{setImmediate:Hp});var Lp=Ja.charAt,kp=ma,Ap=Bi,Up=Sm,Tp="String Iterator",Bp=Ap.set,Fp=Ap.getterFor(Tp);Up(String,"String",(function(e){Bp(this,{type:Tp,string:kp(e),index:0})}),(function(){var e,t=Fp(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=Lp(i,n),t.index+=e.length,{value:e,done:!1})}));var wp=a,zp=Ze("iterator"),xp=!wp((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),i+=n+e})),!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[zp]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==i||"x"!==new URL("http://x",void 0).host})),Pp=me,jp=b,Qp=Ne,Mp=a,Ep=sl,Dp=Hn,Op=Vt,_p=y,qp=Ut,$p=Object.assign,eI=Object.defineProperty,tI=jp([].concat),iI=!$p||Mp((function(){if(Pp&&1!==$p({b:1},$p(eI({},"a",{enumerable:!0,get:function(){eI(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach((function(e){t[e]=e})),7!=$p({},e)[i]||Ep($p({},t)).join("")!=n}))?function(e,t){for(var i=_p(e),n=arguments.length,l=1,o=Dp.f,c=Op.f;n>l;)for(var a,r=qp(arguments[l++]),d=o?tI(Ep(r),o(r)):Ep(r),s=d.length,u=0;s>u;)a=d[u++],Pp&&!Qp(c,r,a)||(i[a]=r[a]);return i}:$p,nI=fe,lI=Xo,oI=jl,cI=Ne,aI=y,rI=function(e,t,i,n){try{return n?t(nI(i)[0],i[1]):t(i)}catch(t){lI(e,"throw",t)}},dI=Ol,sI=ec,uI=gn,ZI=bu,hI=Io,bI=so,mI=Array,pI=b,II=2147483647,gI=/[^\0-\u007E]/,yI=/[.\u3002\uFF0E\uFF61]/g,GI="Overflow: input needs wider integers to process",XI=RangeError,WI=pI(yI.exec),CI=Math.floor,VI=String.fromCharCode,RI=pI("".charCodeAt),SI=pI([].join),vI=pI([].push),fI=pI("".replace),YI=pI("".split),KI=pI("".toLowerCase),NI=function(e){return e+22+75*(e<26)},JI=function(e,t,i){var n=0;for(e=i?CI(e/700):e>>1,e+=CI(e/t);e>455;)e=CI(e/35),n+=36;return CI(n+36*e/(e+38))},HI=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=RI(e,i++);if(l>=55296&&l<=56319&&i<n){var o=RI(e,i++);56320==(64512&o)?vI(t,((1023&l)<<10)+(1023&o)+65536):(vI(t,l),i--)}else vI(t,l)}return t}(e);var i,n,l=e.length,o=128,c=0,a=72;for(i=0;i<e.length;i++)(n=e[i])<128&&vI(t,VI(n));var r=t.length,d=r;for(r&&vI(t,"-");d<l;){var s=II;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<s&&(s=n);var u=d+1;if(s-o>CI((II-c)/u))throw XI(GI);for(c+=(s-o)*u,o=s,i=0;i<e.length;i++){if((n=e[i])<o&&++c>II)throw XI(GI);if(n==o){for(var Z=c,h=36;;){var b=h<=a?1:h>=a+26?26:h-a;if(Z<b)break;var m=Z-b,p=36-b;vI(t,VI(NI(b+m%p))),Z=CI(m/p),h+=36}vI(t,VI(NI(Z))),a=JI(c,u,d==r),c=0,d++}}c++,o++}return SI(t,"")},LI=cl,kI=o,AI=Ne,UI=b,TI=me,BI=xp,FI=nn,wI=Qs,zI=oa,xI=Za,PI=Bi,jI=Ds,QI=B,MI=W,EI=jl,DI=lo,OI=fe,_I=Ie,qI=ma,$I=Kl,eg=ft,tg=Io,ig=so,ng=ip,lg=Tb,og=Ze("iterator"),cg="URLSearchParams",ag="URLSearchParamsIterator",rg=PI.set,dg=PI.getterFor(cg),sg=PI.getterFor(ag),ug=Object.getOwnPropertyDescriptor,Zg=function(e){if(!TI)return kI[e];var t=ug(kI,e);return t&&t.value},hg=Zg("fetch"),bg=Zg("Request"),mg=Zg("Headers"),pg=bg&&bg.prototype,Ig=mg&&mg.prototype,gg=kI.RegExp,yg=kI.TypeError,Gg=kI.decodeURIComponent,Xg=kI.encodeURIComponent,Wg=UI("".charAt),Cg=UI([].join),Vg=UI([].push),Rg=UI("".replace),Sg=UI([].shift),vg=UI([].splice),fg=UI("".split),Yg=UI("".slice),Kg=/\+/g,Ng=Array(4),Jg=function(e){return Ng[e-1]||(Ng[e-1]=gg("((?:%[\\da-f]{2}){"+e+"})","gi"))},Hg=function(e){try{return Gg(e)}catch(t){return e}},Lg=function(e){var t=Rg(e,Kg," "),i=4;try{return Gg(t)}catch(e){for(;i;)t=Rg(t,Jg(i--),Hg);return t}},kg=/[!'()~]|%20/g,Ag={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Ug=function(e){return Ag[e]},Tg=function(e){return Rg(Xg(e),kg,Ug)},Bg=xI((function(e,t){rg(this,{type:ag,iterator:tg(dg(e).entries),kind:t})}),"Iterator",(function(){var e=sg(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),Fg=function(e){this.entries=[],this.url=null,void 0!==e&&(_I(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===Wg(e,0)?Yg(e,1):e:qI(e)))};Fg.prototype={type:cg,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,c,a,r=ig(e);if(r)for(i=(t=tg(e,r)).next;!(n=AI(i,t)).done;){if(o=(l=tg(OI(n.value))).next,(c=AI(o,l)).done||(a=AI(o,l)).done||!AI(o,l).done)throw yg("Expected sequence with length 2");Vg(this.entries,{key:qI(c.value),value:qI(a.value)})}else for(var d in e)MI(e,d)&&Vg(this.entries,{key:d,value:qI(e[d])})},parseQuery:function(e){if(e)for(var t,i,n=fg(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=fg(t,"="),Vg(this.entries,{key:Lg(Sg(i)),value:Lg(Cg(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],Vg(i,Tg(e.key)+"="+Tg(e.value));return Cg(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var wg=function(){jI(this,zg);var e=arguments.length>0?arguments[0]:void 0;rg(this,new Fg(e))},zg=wg.prototype;if(wI(zg,{append:function(e,t){ng(arguments.length,2);var i=dg(this);Vg(i.entries,{key:qI(e),value:qI(t)}),i.updateURL()},delete:function(e){ng(arguments.length,1);for(var t=dg(this),i=t.entries,n=qI(e),l=0;l<i.length;)i[l].key===n?vg(i,l,1):l++;t.updateURL()},get:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=[],l=0;l<t.length;l++)t[l].key===i&&Vg(n,t[l].value);return n},has:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){ng(arguments.length,1);for(var i,n=dg(this),l=n.entries,o=!1,c=qI(e),a=qI(t),r=0;r<l.length;r++)(i=l[r]).key===c&&(o?vg(l,r--,1):(o=!0,i.value=a));o||Vg(l,{key:c,value:a}),n.updateURL()},sort:function(){var e=dg(this);lg(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=dg(this).entries,n=EI(e,arguments.length>1?arguments[1]:void 0),l=0;l<i.length;)n((t=i[l++]).value,t.key,this)},keys:function(){return new Bg(this,"keys")},values:function(){return new Bg(this,"values")},entries:function(){return new Bg(this,"entries")}},{enumerable:!0}),FI(zg,og,zg.entries,{name:"entries"}),FI(zg,"toString",(function(){return dg(this).serialize()}),{enumerable:!0}),zI(wg,cg),LI({global:!0,constructor:!0,forced:!BI},{URLSearchParams:wg}),!BI&&QI(mg)){var xg=UI(Ig.has),Pg=UI(Ig.set),jg=function(e){if(_I(e)){var t,i=e.body;if(DI(i)===cg)return t=e.headers?new mg(e.headers):new mg,xg(t,"content-type")||Pg(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),$I(e,{body:eg(0,qI(i)),headers:eg(0,t)})}return e};if(QI(hg)&&LI({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return hg(e,arguments.length>1?jg(arguments[1]):{})}}),QI(bg)){var Qg=function(e){return jI(this,pg),new bg(e,arguments.length>1?jg(arguments[1]):{})};pg.constructor=Qg,Qg.prototype=pg,LI({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Qg})}}var Mg,Eg=cl,Dg=me,Og=xp,_g=o,qg=jl,$g=b,ey=nn,ty=Vc,iy=Ds,ny=W,ly=iI,oy=function(e){var t=aI(e),i=sI(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=oI(l,n>2?arguments[2]:void 0));var c,a,r,d,s,u,Z=bI(t),h=0;if(!Z||this===mI&&dI(Z))for(c=uI(t),a=i?new this(c):mI(c);c>h;h++)u=o?l(t[h],h):t[h],ZI(a,h,u);else for(s=(d=hI(t,Z)).next,a=i?new this:[];!(r=cI(s,d)).done;h++)u=o?rI(d,l,[r.value,h],!0):r.value,ZI(a,h,u);return a.length=h,a},cy=Gu,ay=Ja.codeAt,ry=function(e){var t,i,n=[],l=YI(fI(KI(e),yI,"."),".");for(t=0;t<l.length;t++)i=l[t],vI(n,WI(gI,i)?"xn--"+HI(i):i);return SI(n,".")},dy=ma,sy=oa,uy=ip,Zy={URLSearchParams:wg,getState:dg},hy=Bi,by=hy.set,my=hy.getterFor("URL"),py=Zy.URLSearchParams,Iy=Zy.getState,gy=_g.URL,yy=_g.TypeError,Gy=_g.parseInt,Xy=Math.floor,Wy=Math.pow,Cy=$g("".charAt),Vy=$g(/./.exec),Ry=$g([].join),Sy=$g(1..toString),vy=$g([].pop),fy=$g([].push),Yy=$g("".replace),Ky=$g([].shift),Ny=$g("".split),Jy=$g("".slice),Hy=$g("".toLowerCase),Ly=$g([].unshift),ky="Invalid scheme",Ay="Invalid host",Uy="Invalid port",Ty=/[a-z]/i,By=/[\d+-.a-z]/i,Fy=/\d/,wy=/^0x/i,zy=/^[0-7]+$/,xy=/^\d+$/,Py=/^[\da-f]+$/i,jy=/[\0\t\n\r #%/:<>?@[\\\]^|]/,Qy=/[\0\t\n\r #/:<>?@[\\\]^|]/,My=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,Ey=/[\t\n\r]/g,Dy=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)Ly(t,e%256),e=Xy(e/256);return Ry(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,i=1,n=null,l=0,o=0;o<8;o++)0!==e[o]?(l>i&&(t=n,i=l),n=null,l=0):(null===n&&(n=o),++l);return l>i&&(t=n,i=l),t}(e),i=0;i<8;i++)l&&0===e[i]||(l&&(l=!1),n===i?(t+=i?":":"::",l=!0):(t+=Sy(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},Oy={},_y=ly({},Oy,{" ":1,'"':1,"<":1,">":1,"`":1}),qy=ly({},_y,{"#":1,"?":1,"{":1,"}":1}),$y=ly({},qy,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),eG=function(e,t){var i=ay(e,0);return i>32&&i<127&&!ny(t,e)?e:encodeURIComponent(e)},tG={ftp:21,file:null,http:80,https:443,ws:80,wss:443},iG=function(e,t){var i;return 2==e.length&&Vy(Ty,Cy(e,0))&&(":"==(i=Cy(e,1))||!t&&"|"==i)},nG=function(e){var t;return e.length>1&&iG(Jy(e,0,2))&&(2==e.length||"/"===(t=Cy(e,2))||"\\"===t||"?"===t||"#"===t)},lG=function(e){return"."===e||"%2e"===Hy(e)},oG={},cG={},aG={},rG={},dG={},sG={},uG={},ZG={},hG={},bG={},mG={},pG={},IG={},gG={},yG={},GG={},XG={},WG={},CG={},VG={},RG={},SG=function(e,t,i){var n,l,o,c=dy(e);if(t){if(l=this.parse(c))throw yy(l);this.searchParams=null}else{if(void 0!==i&&(n=new SG(i,!0)),l=this.parse(c,null,n))throw yy(l);(o=Iy(new py)).bindURL(this),this.searchParams=o}};SG.prototype={type:"URL",parse:function(e,t,i){var n,l,o,c,a,r=this,d=t||oG,s=0,u="",Z=!1,h=!1,b=!1;for(e=dy(e),t||(r.scheme="",r.username="",r.password="",r.host=null,r.port=null,r.path=[],r.query=null,r.fragment=null,r.cannotBeABaseURL=!1,e=Yy(e,My,"")),e=Yy(e,Ey,""),n=oy(e);s<=n.length;){switch(l=n[s],d){case oG:if(!l||!Vy(Ty,l)){if(t)return ky;d=aG;continue}u+=Hy(l),d=cG;break;case cG:if(l&&(Vy(By,l)||"+"==l||"-"==l||"."==l))u+=Hy(l);else{if(":"!=l){if(t)return ky;u="",d=aG,s=0;continue}if(t&&(r.isSpecial()!=ny(tG,u)||"file"==u&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=u,t)return void(r.isSpecial()&&tG[r.scheme]==r.port&&(r.port=null));u="","file"==r.scheme?d=gG:r.isSpecial()&&i&&i.scheme==r.scheme?d=rG:r.isSpecial()?d=ZG:"/"==n[s+1]?(d=dG,s++):(r.cannotBeABaseURL=!0,fy(r.path,""),d=CG)}break;case aG:if(!i||i.cannotBeABaseURL&&"#"!=l)return ky;if(i.cannotBeABaseURL&&"#"==l){r.scheme=i.scheme,r.path=cy(i.path),r.query=i.query,r.fragment="",r.cannotBeABaseURL=!0,d=RG;break}d="file"==i.scheme?gG:sG;continue;case rG:if("/"!=l||"/"!=n[s+1]){d=sG;continue}d=hG,s++;break;case dG:if("/"==l){d=bG;break}d=WG;continue;case sG:if(r.scheme=i.scheme,l==Mg)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.query=i.query;else if("/"==l||"\\"==l&&r.isSpecial())d=uG;else if("?"==l)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.query="",d=VG;else{if("#"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.path.length--,d=WG;continue}r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.query=i.query,r.fragment="",d=RG}break;case uG:if(!r.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,d=WG;continue}d=bG}else d=hG;break;case ZG:if(d=hG,"/"!=l||"/"!=Cy(u,s+1))continue;s++;break;case hG:if("/"!=l&&"\\"!=l){d=bG;continue}break;case bG:if("@"==l){Z&&(u="%40"+u),Z=!0,o=oy(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var I=eG(p,$y);b?r.password+=I:r.username+=I}else b=!0}u=""}else if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(Z&&""==u)return"Invalid authority";s-=oy(u).length+1,u="",d=mG}else u+=l;break;case mG:case pG:if(t&&"file"==r.scheme){d=GG;continue}if(":"!=l||h){if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(r.isSpecial()&&""==u)return Ay;if(t&&""==u&&(r.includesCredentials()||null!==r.port))return;if(c=r.parseHost(u))return c;if(u="",d=XG,t)return;continue}"["==l?h=!0:"]"==l&&(h=!1),u+=l}else{if(""==u)return Ay;if(c=r.parseHost(u))return c;if(u="",d=IG,t==pG)return}break;case IG:if(!Vy(Fy,l)){if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()||t){if(""!=u){var g=Gy(u,10);if(g>65535)return Uy;r.port=r.isSpecial()&&g===tG[r.scheme]?null:g,u=""}if(t)return;d=XG;continue}return Uy}u+=l;break;case gG:if(r.scheme="file","/"==l||"\\"==l)d=yG;else{if(!i||"file"!=i.scheme){d=WG;continue}if(l==Mg)r.host=i.host,r.path=cy(i.path),r.query=i.query;else if("?"==l)r.host=i.host,r.path=cy(i.path),r.query="",d=VG;else{if("#"!=l){nG(Ry(cy(n,s),""))||(r.host=i.host,r.path=cy(i.path),r.shortenPath()),d=WG;continue}r.host=i.host,r.path=cy(i.path),r.query=i.query,r.fragment="",d=RG}}break;case yG:if("/"==l||"\\"==l){d=GG;break}i&&"file"==i.scheme&&!nG(Ry(cy(n,s),""))&&(iG(i.path[0],!0)?fy(r.path,i.path[0]):r.host=i.host),d=WG;continue;case GG:if(l==Mg||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&iG(u))d=WG;else if(""==u){if(r.host="",t)return;d=XG}else{if(c=r.parseHost(u))return c;if("localhost"==r.host&&(r.host=""),t)return;u="",d=XG}continue}u+=l;break;case XG:if(r.isSpecial()){if(d=WG,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=Mg&&(d=WG,"/"!=l))continue}else r.fragment="",d=RG;else r.query="",d=VG;break;case WG:if(l==Mg||"/"==l||"\\"==l&&r.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(a=Hy(a=u))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==l||"\\"==l&&r.isSpecial()||fy(r.path,"")):lG(u)?"/"==l||"\\"==l&&r.isSpecial()||fy(r.path,""):("file"==r.scheme&&!r.path.length&&iG(u)&&(r.host&&(r.host=""),u=Cy(u,0)+":"),fy(r.path,u)),u="","file"==r.scheme&&(l==Mg||"?"==l||"#"==l))for(;r.path.length>1&&""===r.path[0];)Ky(r.path);"?"==l?(r.query="",d=VG):"#"==l&&(r.fragment="",d=RG)}else u+=eG(l,qy);break;case CG:"?"==l?(r.query="",d=VG):"#"==l?(r.fragment="",d=RG):l!=Mg&&(r.path[0]+=eG(l,Oy));break;case VG:t||"#"!=l?l!=Mg&&("'"==l&&r.isSpecial()?r.query+="%27":r.query+="#"==l?"%23":eG(l,Oy)):(r.fragment="",d=RG);break;case RG:l!=Mg&&(r.fragment+=eG(l,_y))}s++}},parseHost:function(e){var t,i,n;if("["==Cy(e,0)){if("]"!=Cy(e,e.length-1))return Ay;if(t=function(e){var t,i,n,l,o,c,a,r=[0,0,0,0,0,0,0,0],d=0,s=null,u=0,Z=function(){return Cy(e,u)};if(":"==Z()){if(":"!=Cy(e,1))return;u+=2,s=++d}for(;Z();){if(8==d)return;if(":"!=Z()){for(t=i=0;i<4&&Vy(Py,Z());)t=16*t+Gy(Z(),16),u++,i++;if("."==Z()){if(0==i)return;if(u-=i,d>6)return;for(n=0;Z();){if(l=null,n>0){if(!("."==Z()&&n<4))return;u++}if(!Vy(Fy,Z()))return;for(;Vy(Fy,Z());){if(o=Gy(Z(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}r[d]=256*r[d]+l,2!=++n&&4!=n||d++}if(4!=n)return;break}if(":"==Z()){if(u++,!Z())return}else if(Z())return;r[d++]=t}else{if(null!==s)return;u++,s=++d}}if(null!==s)for(c=d-s,d=7;0!=d&&c>0;)a=r[d],r[d--]=r[s+c-1],r[s+--c]=a;else if(8!=d)return;return r}(Jy(e,1,-1)),!t)return Ay;this.host=t}else if(this.isSpecial()){if(e=ry(e),Vy(jy,e))return Ay;if(t=function(e){var t,i,n,l,o,c,a,r=Ny(e,".");if(r.length&&""==r[r.length-1]&&r.length--,(t=r.length)>4)return e;for(i=[],n=0;n<t;n++){if(""==(l=r[n]))return e;if(o=10,l.length>1&&"0"==Cy(l,0)&&(o=Vy(wy,l)?16:8,l=Jy(l,8==o?1:2)),""===l)c=0;else{if(!Vy(10==o?xy:8==o?zy:Py,l))return e;c=Gy(l,o)}fy(i,c)}for(n=0;n<t;n++)if(c=i[n],n==t-1){if(c>=Wy(256,5-t))return null}else if(c>255)return null;for(a=vy(i),n=0;n<i.length;n++)a+=i[n]*Wy(256,3-n);return a}(e),null===t)return Ay;this.host=t}else{if(Vy(Qy,e))return Ay;for(t="",i=oy(e),n=0;n<i.length;n++)t+=eG(i[n],Oy);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return ny(tG,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&iG(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,i=e.username,n=e.password,l=e.host,o=e.port,c=e.path,a=e.query,r=e.fragment,d=t+":";return null!==l?(d+="//",e.includesCredentials()&&(d+=i+(n?":"+n:"")+"@"),d+=Dy(l),null!==o&&(d+=":"+o)):"file"==t&&(d+="//"),d+=e.cannotBeABaseURL?c[0]:c.length?"/"+Ry(c,"/"):"",null!==a&&(d+="?"+a),null!==r&&(d+="#"+r),d},setHref:function(e){var t=this.parse(e);if(t)throw yy(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new vG(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+Dy(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(dy(e)+":",oG)},getUsername:function(){return this.username},setUsername:function(e){var t=oy(dy(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=eG(t[i],$y)}},getPassword:function(){return this.password},setPassword:function(e){var t=oy(dy(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=eG(t[i],$y)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?Dy(e):Dy(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,mG)},getHostname:function(){var e=this.host;return null===e?"":Dy(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,pG)},getPort:function(){var e=this.port;return null===e?"":dy(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=dy(e))?this.port=null:this.parse(e,IG))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+Ry(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,XG))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=dy(e))?this.query=null:("?"==Cy(e,0)&&(e=Jy(e,1)),this.query="",this.parse(e,VG)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=dy(e))?("#"==Cy(e,0)&&(e=Jy(e,1)),this.fragment="",this.parse(e,RG)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var vG=function(e){var t=iy(this,fG),i=uy(arguments.length,1)>1?arguments[1]:void 0,n=by(t,new SG(e,!1,i));Dg||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},fG=vG.prototype,YG=function(e,t){return{get:function(){return my(this)[e]()},set:t&&function(e){return my(this)[t](e)},configurable:!0,enumerable:!0}};if(Dg&&(ty(fG,"href",YG("serialize","setHref")),ty(fG,"origin",YG("getOrigin")),ty(fG,"protocol",YG("getProtocol","setProtocol")),ty(fG,"username",YG("getUsername","setUsername")),ty(fG,"password",YG("getPassword","setPassword")),ty(fG,"host",YG("getHost","setHost")),ty(fG,"hostname",YG("getHostname","setHostname")),ty(fG,"port",YG("getPort","setPort")),ty(fG,"pathname",YG("getPathname","setPathname")),ty(fG,"search",YG("getSearch","setSearch")),ty(fG,"searchParams",YG("getSearchParams")),ty(fG,"hash",YG("getHash","setHash"))),ey(fG,"toJSON",(function(){return my(this).serialize()}),{enumerable:!0}),ey(fG,"toString",(function(){return my(this).serialize()}),{enumerable:!0}),gy){var KG=gy.createObjectURL,NG=gy.revokeObjectURL;KG&&ey(vG,"createObjectURL",qg(KG,gy)),NG&&ey(vG,"revokeObjectURL",qg(NG,gy))}sy(vG,"URL"),Eg({global:!0,constructor:!0,forced:!Og,sham:!Dg},{URL:vG});var JG=Ne;function HG(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}function LG(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}cl({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return JG(URL.prototype.toString,this)}}),e.ResponseMode=void 0,function(e){e.formPost="form_post",e.query="query"}(e.ResponseMode||(e.ResponseMode={}));e.Stores=void 0,function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(e.Stores||(e.Stores={}));const kG="refresh_token_timer",AG=["RS256","RS512","RS384","PS256"],UG="code",TG="session_state",BG="sign_out_url",FG="sign_out_success",wG="state";var zG;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(zG||(zG={}));class xG{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class PG{constructor(){}static filterClaimsFromIDTokenPayload(e){const t=Object.assign({},e);null==t||delete t.iss,null==t||delete t.aud,null==t||delete t.exp,null==t||delete t.iat,null==t||delete t.acr,null==t||delete t.amr,null==t||delete t.azp,null==t||delete t.auth_time,null==t||delete t.nonce,null==t||delete t.c_hash,null==t||delete t.at_hash,null==t||delete t.nbf,null==t||delete t.isk,null==t||delete t.sid;const i={};return Object.entries(t).forEach((e=>{let[t,n]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");i[l]=n})),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const i=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(i):"request_".concat(i)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}PG.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const i=e.sub.split(t);return i.length>2?i[i.length-1]:""};class jG{constructor(e,t){this._dataLayer=e,this._config=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return LG(this,void 0,void 0,(function*(){const t={},i=yield this._config();return i.endpoints&&Object.keys(i.endpoints).forEach((e=>{const n=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[n]=(null==i?void 0:i.endpoints)?i.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return LG(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"];if(!t.endpoints||!Object.keys(null==t?void 0:t.endpoints).every((e=>{const t=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));return i.includes(t)})))throw new xG("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");return t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return LG(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new xG("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""}));const n={authorization_endpoint:"".concat(i).concat("/oauth2/authorize"),end_session_endpoint:"".concat(i).concat("/oidc/logout"),issuer:"".concat(i).concat("/oauth2/token"),jwks_uri:"".concat(i).concat("/oauth2/jwks"),check_session_iframe:"".concat(i).concat("/oidc/checksession"),revocation_endpoint:"".concat(i).concat("/oauth2/revoke"),token_endpoint:"".concat(i).concat("/oauth2/token"),userinfo_endpoint:"".concat(i).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},n),e)}))}validateIdToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,i=yield this._config();if(!t||0===t.trim().length)throw new xG("JS_AUTH_HELPER-VIT-NF01","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.");let n;try{n=yield fetch(t,{credentials:i.sendCookiesInRequests?zG.Include:zG.SameOrigin})}catch(t){throw new xG("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=t?t:"The request sent to get the jwks from the server failed.")}if(200!==n.status||!n.ok)throw new xG("JS-AUTH_HELPER-VIT-HE03","Invalid response status received for jwks request (".concat(n.statusText,")."),yield n.json());const l=(yield this._oidcProviderMetaData()).issuer,{keys:o}=yield n.json(),c=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],o);return this._cryptoHelper.isValidIdToken(e,c,(yield this._config()).clientID,null!=l?l:"",this._cryptoHelper.decodeIDToken(e).sub,(yield this._config()).clockTolerance)}))}getAuthenticatedUserInfo(e){var t,i,n,l;const o=this._cryptoHelper.decodeIDToken(e),c=PG.getTenantDomainFromIdTokenPayload(o),a=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",r=null!==(i=o.given_name)&&void 0!==i?i:"",d=null!==(n=o.family_name)&&void 0!==n?n:"",s=r&&d?"".concat(r," ").concat(d):r||d||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:s;return Object.assign({displayName:u,tenantDomain:c,username:a},PG.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return LG(this,void 0,void 0,(function*(){let n="openid";const l=yield this._config(),o=yield this._dataLayer.getSessionData(t);return l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),n=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(i=l.clientSecret)&&void 0!==i?i:"")}))}clearUserSessionData(e){return LG(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return LG(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new xG("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const i=yield e.json();if(i.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(i.id_token).then((()=>LG(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(i,t);const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return Promise.resolve(e)}))));{const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return yield this._dataLayer.setSessionData(i,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return LG(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getTemporaryData(e),n=[];Object.keys(i).forEach((e=>{e.startsWith("pkce_code_verifier")&&n.push(e)}));const l=n.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class QG{constructor(e){this._cryptoUtils=e}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}getJWKForTheIdToken(e,t){const i=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(i.kid===e.kid)return e;throw new xG("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,i,n,l,o){return this._cryptoUtils.verifyJwt(e,t,AG,i,n,l,o).then((e=>e?Promise.resolve(!0):Promise.reject(new xG("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))))}decodeIDToken(e){try{const t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new xG("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class MG{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new QG(t),this._authenticationHelper=new jG(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(e,t){var i,n,l;return LG(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),c=yield this._config();if(!o||0===o.trim().length)throw new xG("JS-AUTH_CORE-GAU-NF01","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");const a=new URL(o),r=new Map;r.set("response_type","code"),r.set("client_id",c.clientID);let d="openid";c.scope&&c.scope.length>0&&(c.scope.includes("openid")||c.scope.push("openid"),d=c.scope.join(" ")),r.set("scope",d),r.set("redirect_uri",c.signInRedirectURL),c.responseMode&&r.set("response_mode",c.responseMode);const s=yield this._authenticationHelper.generatePKCEKey(t);if(c.enablePKCE){const e=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeVerifier(),l=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(e);yield this._dataLayer.setTemporaryDataParameter(s,e,t),r.set("code_challenge_method","S256"),r.set("code_challenge",l)}c.prompt&&r.set("prompt",c.prompt);const u=e;if(u)for(const[e,t]of Object.entries(u))if(""!=e&&""!=t&&"state"!==e){const i=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));r.set(i,t.toString())}r.set("state",PG.generateStateParamForRequestCorrelation(s,u?null===(l=u.state)||void 0===l?void 0:l.toString():""));for(const[e,t]of r.entries())a.searchParams.append(e,t);return a.toString()}))}requestAccessToken(e,t,i,n){return LG(this,void 0,void 0,(function*(){const l=(yield this._oidcProviderMetaData()).token_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new xG("JS-AUTH_CORE-RAT1-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");t&&(yield this._dataLayer.setSessionDataParameter("session_state",t,n));const c=[];c.push("client_id=".concat(o.clientID)),o.clientSecret&&o.clientSecret.trim().length>0&&c.push("client_secret=".concat(o.clientSecret));const a=e;let r;c.push("code=".concat(a)),c.push("grant_type=authorization_code"),c.push("redirect_uri=".concat(o.signInRedirectURL)),o.enablePKCE&&(c.push("code_verifier=".concat(yield this._dataLayer.getTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(i),n));try{r=yield fetch(l,{body:c.join("&"),credentials:o.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(PG.getTokenRequestHeaders()),method:"POST"})}catch(l){throw new xG("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=l?l:"The request to get the access token from the server failed.")}if(!r.ok)throw new xG("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(r.statusText),yield r.json());return yield this._authenticationHelper.handleTokenResponse(r,n)}))}refreshAccessToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config(),n=yield this._dataLayer.getSessionData(e);if(!n.refresh_token)throw new xG("JS-AUTH_CORE-RAT2-NF01","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled.");if(!t||0===t.trim().length)throw new xG("JS-AUTH_CORE-RAT2-NF02","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty.");const l=[];let o;l.push("client_id=".concat(i.clientID)),l.push("refresh_token=".concat(n.refresh_token)),l.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&l.push("client_secret=".concat(i.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:i.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(PG.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new xG("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t?t:"The request to refresh the access token failed.")}if(!o.ok)throw new xG("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with ".concat(o.statusText),yield o.json());return this._authenticationHelper.handleTokenResponse(o,e)}))}revokeAccessToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,i=yield this._config();if(!t||0===t.trim().length)throw new xG("JS-AUTH_CORE-RAT3-NF01","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty.");const n=[];let l;n.push("client_id=".concat(i.clientID)),n.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),n.push("token_type_hint=access_token");try{l=yield fetch(t,{body:n.join("&"),credentials:i.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(PG.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new xG("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t?t:"The request sent to revoke the access token failed.")}if(200!==l.status||!l.ok)throw new xG("JS-AUTH_CORE-RAT3-HE03","Invalid response status received for revoke access token request (".concat(l.statusText,")."),yield l.json());return this._authenticationHelper.clearUserSessionData(e),Promise.resolve(l)}))}requestCustomGrant(e,t){return LG(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData(),n=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:i.token_endpoint,!l||0===l.trim().length)throw new xG("JS-AUTH_CORE-RCG-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");const o=yield Promise.all(Object.entries(e.data).map((e=>{let[i,n]=e;return LG(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let c=Object.assign({},PG.getTokenRequestHeaders());e.attachToken&&(c=Object.assign(Object.assign({},c),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const a={body:o.join("&"),credentials:n.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(c),method:"POST"};let r;try{r=yield fetch(l,a)}catch(e){throw new xG("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=e?e:"The request sent to get the custom grant failed.")}if(200!==r.status||!r.ok)throw new xG("JS-AUTH_CORE-RCG-HE03","Invalid response status received for the custom grant request. (".concat(r.statusText,")"),yield r.json());return e.returnsSession?this._authenticationHelper.handleTokenResponse(r,t):Promise.resolve(yield r.json())}))}getBasicUserInfo(e){return LG(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),i=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let n={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(i).forEach((e=>{void 0!==i[e]&&""!==i[e]&&null!==i[e]||delete i[e]})),n=Object.assign(Object.assign({},n),i),n}))}getDecodedIDToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return LG(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return LG(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return LG(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const i=t.wellKnownEndpoint;if(i){let e;try{if(e=yield fetch(i),200!==e.status||!e.ok)throw new Error}catch(t){throw new xG("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.")}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(yield e.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(t.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(t){throw new xG("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly())}catch(t){throw new xG("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by explicitly failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var e,t,i,n,l,o,c,a,r,d;return LG(this,void 0,void 0,(function*(){const s=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=s.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=s.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=s.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=s.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=s.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=s.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(c=s.registration_endpoint)&&void 0!==c?c:"",revocationEndpoint:null!==(a=s.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=s.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(d=s.userinfo_endpoint)&&void 0!==d?d:""}}))}getSignOutURL(e){var t,i,n;return LG(this,void 0,void 0,(function*(){const l=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new xG("JS-AUTH_CORE-GSOU-NF01","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");const c=null===(i=yield this._dataLayer.getSessionData(e))||void 0===i?void 0:i.id_token;if(!c||0===c.trim().length)throw new xG("JS-AUTH_CORE-GSOU-NF02","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");const a=null!==(n=null==o?void 0:o.signOutRedirectURL)&&void 0!==n?n:null==o?void 0:o.signInRedirectURL;if(!a||0===a.trim().length)throw new xG("JS-AUTH_CORE-GSOU-NF03","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");return"".concat(l,"?id_token_hint=").concat(c,"&post_logout_redirect_uri=").concat(a,"&state=sign_out_success")}))}clearUserSessionData(e){return LG(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return LG(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.access_token}))}isAuthenticated(e){return LG(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken(e))}))}getPKCECode(e,t){return LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return LG(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return LG(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}class EG{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return LG(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign(Object.assign({},l),t),c=JSON.stringify(o);yield this._store.setData(e,c)}))}setValue(e,t,i){var n;return LG(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,o=l&&JSON.parse(l),c=Object.assign(Object.assign({},o),{[t]:i}),a=JSON.stringify(c);yield this._store.setData(e,a)}))}removeValue(e,t){var i;return LG(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign({},l);delete o[t];const c=JSON.stringify(o);yield this._store.setData(e,c)}))}_resolveKey(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}setConfigData(t){return LG(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t)}))}setOIDCProviderMetaData(t){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}setTemporaryData(t,i){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,i),t)}))}setSessionData(t,i){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.SessionData,i),t)}))}setCustomData(e,t,i){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var t;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var i;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,t)))&&void 0!==i?i:null)}))}getSessionData(t){var i;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.SessionData,t)))&&void 0!==i?i:null)}))}getCustomData(e,t){var i;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==i?i:null)}))}removeConfigData(){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.ConfigData))}))}removeOIDCProviderMetaData(){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData))}))}removeTemporaryData(t){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t))}))}removeSessionData(t){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.SessionData,t))}))}getConfigDataParameter(t){return LG(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.ConfigData));return i&&JSON.parse(i)[t]}))}getOIDCProviderMetaDataParameter(t){return LG(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));return i&&JSON.parse(i)[t]}))}getTemporaryDataParameter(t,i){return LG(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,i));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,i){return LG(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.SessionData,i));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.ConfigData),t,i)}))}setOIDCProviderMetaDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,i)}))}setTemporaryDataParameter(t,i,n){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.TemporaryData,n),t,i)}))}setSessionDataParameter(t,i,n){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.SessionData,n),t,i)}))}removeConfigDataParameter(t){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.TemporaryData,i),t)}))}removeSessionDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.SessionData,i),t)}))}}const DG={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class OG{
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).AsgardeoAuth={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var l=function(e){return e&&e.Math==Math&&e},o=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof t&&t)||function(){return this}()||Function("return this")(),c=o,a=function(e){try{return!!e()}catch(e){return!0}},r=!a((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),d=r,s=Function.prototype,u=s.bind,Z=s.call,h=d&&u.bind(Z,Z),b=d?function(e){return e&&h(e)}:function(e){return e&&function(){return Z.apply(e,arguments)}},m=TypeError,p=function(e){if(null==e)throw m("Can't call method on "+e);return e},I=p,g=Object,y=function(e){return g(I(e))},G=y,X=b({}.hasOwnProperty),W=Object.hasOwn||function(e,t){return X(G(e),t)},C={},V={exports:{}},R=o,S=Object.defineProperty,v=function(e,t){try{S(R,e,{value:t,configurable:!0,writable:!0})}catch(i){R[e]=t}return t},f=v,Y="__core-js_shared__",K=o[Y]||f(Y,{}),N=K;(V.exports=function(e,t){return N[e]||(N[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.24.0",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE",source:"https://github.com/zloirock/core-js"});var J,H,L=b,k=0,A=Math.random(),U=L(1..toString),T=function(e){return"Symbol("+(void 0===e?"":e)+")_"+U(++k+A,36)},B=function(e){return"function"==typeof e},F=o,w=B,z=function(e){return w(e)?e:void 0},x=function(e,t){return arguments.length<2?z(F[e]):F[e]&&F[e][t]},P=x("navigator","userAgent")||"",j=o,Q=P,M=j.process,E=j.Deno,D=M&&M.versions||E&&E.version,O=D&&D.v8;O&&(H=(J=O.split("."))[0]>0&&J[0]<4?1:+(J[0]+J[1])),!H&&Q&&(!(J=Q.match(/Edge\/(\d+)/))||J[1]>=74)&&(J=Q.match(/Chrome\/(\d+)/))&&(H=+J[1]);var _=H,q=_,$=a,ee=!!Object.getOwnPropertySymbols&&!$((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&q&&q<41})),te=ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ie=o,ne=V.exports,le=W,oe=T,ce=ee,ae=te,re=ne("wks"),de=ie.Symbol,se=de&&de.for,ue=ae?de:de&&de.withoutSetter||oe,Ze=function(e){if(!le(re,e)||!ce&&"string"!=typeof re[e]){var t="Symbol."+e;ce&&le(de,e)?re[e]=de[e]:re[e]=ae&&se?se(t):ue(t)}return re[e]},he=Ze;C.f=he;var be={},me=!a((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),pe=B,Ie=function(e){return"object"==typeof e?null!==e:pe(e)},ge=Ie,ye=o.document,Ge=ge(ye)&&ge(ye.createElement),Xe=function(e){return Ge?ye.createElement(e):{}},We=Xe,Ce=!me&&!a((function(){return 7!=Object.defineProperty(We("div"),"a",{get:function(){return 7}}).a})),Ve=me&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Re=Ie,Se=String,ve=TypeError,fe=function(e){if(Re(e))return e;throw ve(Se(e)+" is not an object")},Ye=r,Ke=Function.prototype.call,Ne=Ye?Ke.bind(Ke):function(){return Ke.apply(Ke,arguments)},Je=b({}.isPrototypeOf),He=x,Le=B,ke=Je,Ae=Object,Ue=te?function(e){return"symbol"==typeof e}:function(e){var t=He("Symbol");return Le(t)&&ke(t.prototype,Ae(e))},Te=String,Be=function(e){try{return Te(e)}catch(e){return"Object"}},Fe=B,we=Be,ze=TypeError,xe=function(e){if(Fe(e))return e;throw ze(we(e)+" is not a function")},Pe=xe,je=function(e,t){var i=e[t];return null==i?void 0:Pe(i)},Qe=Ne,Me=B,Ee=Ie,De=TypeError,Oe=Ne,_e=Ie,qe=Ue,$e=je,et=function(e,t){var i,n;if("string"===t&&Me(i=e.toString)&&!Ee(n=Qe(i,e)))return n;if(Me(i=e.valueOf)&&!Ee(n=Qe(i,e)))return n;if("string"!==t&&Me(i=e.toString)&&!Ee(n=Qe(i,e)))return n;throw De("Can't convert object to primitive value")},tt=TypeError,it=Ze("toPrimitive"),nt=function(e,t){if(!_e(e)||qe(e))return e;var i,n=$e(e,it);if(n){if(void 0===t&&(t="default"),i=Oe(n,e,t),!_e(i)||qe(i))return i;throw tt("Can't convert object to primitive value")}return void 0===t&&(t="number"),et(e,t)},lt=nt,ot=Ue,ct=function(e){var t=lt(e,"string");return ot(t)?t:t+""},at=me,rt=Ce,dt=Ve,st=fe,ut=ct,Zt=TypeError,ht=Object.defineProperty,bt=Object.getOwnPropertyDescriptor,mt="enumerable",pt="configurable",It="writable";be.f=at?dt?function(e,t,i){if(st(e),t=ut(t),st(i),"function"==typeof e&&"prototype"===t&&"value"in i&&It in i&&!i.writable){var n=bt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:pt in i?i.configurable:n.configurable,enumerable:mt in i?i.enumerable:n.enumerable,writable:!1})}return ht(e,t,i)}:ht:function(e,t,i){if(st(e),t=ut(t),st(i),rt)try{return ht(e,t,i)}catch(e){}if("get"in i||"set"in i)throw Zt("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var gt=c,yt=W,Gt=C,Xt=be.f,Wt=function(e){var t=gt.Symbol||(gt.Symbol={});yt(t,e)||Xt(t,e,{value:Gt.f(e)})};Wt("matchAll");var Ct={},Vt={},Rt={}.propertyIsEnumerable,St=Object.getOwnPropertyDescriptor,vt=St&&!Rt.call({1:2},1);Vt.f=vt?function(e){var t=St(this,e);return!!t&&t.enumerable}:Rt;var ft=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Yt=b,Kt=Yt({}.toString),Nt=Yt("".slice),Jt=function(e){return Nt(Kt(e),8,-1)},Ht=a,Lt=Jt,kt=Object,At=b("".split),Ut=Ht((function(){return!kt("z").propertyIsEnumerable(0)}))?function(e){return"String"==Lt(e)?At(e,""):kt(e)}:kt,Tt=Ut,Bt=p,Ft=function(e){return Tt(Bt(e))},wt=me,zt=Ne,xt=Vt,Pt=ft,jt=Ft,Qt=ct,Mt=W,Et=Ce,Dt=Object.getOwnPropertyDescriptor;Ct.f=wt?Dt:function(e,t){if(e=jt(e),t=Qt(t),Et)try{return Dt(e,t)}catch(e){}if(Mt(e,t))return Pt(!zt(xt.f,e,t),e[t])};var Ot=be,_t=ft,qt=me?function(e,t,i){return Ot.f(e,t,_t(1,i))}:function(e,t,i){return e[t]=i,e},$t={exports:{}},ei=me,ti=W,ii=Function.prototype,ni=ei&&Object.getOwnPropertyDescriptor,li=ti(ii,"name"),oi={EXISTS:li,PROPER:li&&"something"===function(){}.name,CONFIGURABLE:li&&(!ei||ei&&ni(ii,"name").configurable)},ci=B,ai=K,ri=b(Function.toString);ci(ai.inspectSource)||(ai.inspectSource=function(e){return ri(e)});var di,si,ui,Zi=ai.inspectSource,hi=B,bi=Zi,mi=o.WeakMap,pi=hi(mi)&&/native code/.test(bi(mi)),Ii=V.exports,gi=T,yi=Ii("keys"),Gi=function(e){return yi[e]||(yi[e]=gi(e))},Xi={},Wi=pi,Ci=o,Vi=b,Ri=Ie,Si=qt,vi=W,fi=K,Yi=Gi,Ki=Xi,Ni="Object already initialized",Ji=Ci.TypeError,Hi=Ci.WeakMap;if(Wi||fi.state){var Li=fi.state||(fi.state=new Hi),ki=Vi(Li.get),Ai=Vi(Li.has),Ui=Vi(Li.set);di=function(e,t){if(Ai(Li,e))throw new Ji(Ni);return t.facade=e,Ui(Li,e,t),t},si=function(e){return ki(Li,e)||{}},ui=function(e){return Ai(Li,e)}}else{var Ti=Yi("state");Ki[Ti]=!0,di=function(e,t){if(vi(e,Ti))throw new Ji(Ni);return t.facade=e,Si(e,Ti,t),t},si=function(e){return vi(e,Ti)?e[Ti]:{}},ui=function(e){return vi(e,Ti)}}var Bi={set:di,get:si,has:ui,enforce:function(e){return ui(e)?si(e):di(e,{})},getterFor:function(e){return function(t){var i;if(!Ri(t)||(i=si(t)).type!==e)throw Ji("Incompatible receiver, "+e+" required");return i}}},Fi=a,wi=B,zi=W,xi=me,Pi=oi.CONFIGURABLE,ji=Zi,Qi=Bi.enforce,Mi=Bi.get,Ei=Object.defineProperty,Di=xi&&!Fi((function(){return 8!==Ei((function(){}),"length",{value:8}).length})),Oi=String(String).split("String"),_i=$t.exports=function(e,t,i){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!zi(e,"name")||Pi&&e.name!==t)&&(xi?Ei(e,"name",{value:t,configurable:!0}):e.name=t),Di&&i&&zi(i,"arity")&&e.length!==i.arity&&Ei(e,"length",{value:i.arity});try{i&&zi(i,"constructor")&&i.constructor?xi&&Ei(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Qi(e);return zi(n,"source")||(n.source=Oi.join("string"==typeof t?t:"")),e};Function.prototype.toString=_i((function(){return wi(this)&&Mi(this).source||ji(this)}),"toString");var qi=B,$i=be,en=$t.exports,tn=v,nn=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(qi(i)&&en(i,o,n),n.global)l?e[t]=i:tn(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:$i.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},ln={},on=Math.ceil,cn=Math.floor,an=Math.trunc||function(e){var t=+e;return(t>0?cn:on)(t)},rn=an,dn=function(e){var t=+e;return t!=t||0===t?0:rn(t)},sn=dn,un=Math.max,Zn=Math.min,hn=function(e,t){var i=sn(e);return i<0?un(i+t,0):Zn(i,t)},bn=dn,mn=Math.min,pn=function(e){return e>0?mn(bn(e),9007199254740991):0},In=pn,gn=function(e){return In(e.length)},yn=Ft,Gn=hn,Xn=gn,Wn=function(e){return function(t,i,n){var l,o=yn(t),c=Xn(o),a=Gn(n,c);if(e&&i!=i){for(;c>a;)if((l=o[a++])!=l)return!0}else for(;c>a;a++)if((e||a in o)&&o[a]===i)return e||a||0;return!e&&-1}},Cn={includes:Wn(!0),indexOf:Wn(!1)},Vn=W,Rn=Ft,Sn=Cn.indexOf,vn=Xi,fn=b([].push),Yn=function(e,t){var i,n=Rn(e),l=0,o=[];for(i in n)!Vn(vn,i)&&Vn(n,i)&&fn(o,i);for(;t.length>l;)Vn(n,i=t[l++])&&(~Sn(o,i)||fn(o,i));return o},Kn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Nn=Yn,Jn=Kn.concat("length","prototype");ln.f=Object.getOwnPropertyNames||function(e){return Nn(e,Jn)};var Hn={};Hn.f=Object.getOwnPropertySymbols;var Ln=x,kn=ln,An=Hn,Un=fe,Tn=b([].concat),Bn=Ln("Reflect","ownKeys")||function(e){var t=kn.f(Un(e)),i=An.f;return i?Tn(t,i(e)):t},Fn=W,wn=Bn,zn=Ct,xn=be,Pn=a,jn=B,Qn=/#|\.prototype\./,Mn=function(e,t){var i=Dn[En(e)];return i==_n||i!=On&&(jn(t)?Pn(t):!!t)},En=Mn.normalize=function(e){return String(e).replace(Qn,".").toLowerCase()},Dn=Mn.data={},On=Mn.NATIVE="N",_n=Mn.POLYFILL="P",qn=Mn,$n=o,el=Ct.f,tl=qt,il=nn,nl=v,ll=function(e,t,i){for(var n=wn(t),l=xn.f,o=zn.f,c=0;c<n.length;c++){var a=n[c];Fn(e,a)||i&&Fn(i,a)||l(e,a,o(t,a))}},ol=qn,cl=function(e,t){var i,n,l,o,c,a=e.target,r=e.global,d=e.stat;if(i=r?$n:d?$n[a]||nl(a,{}):($n[a]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(c=el(i,n))&&c.value:i[n],!ol(r?n:a+(d?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;ll(o,l)}(e.sham||l&&l.sham)&&tl(o,"sham",!0),il(i,n,o,e)}},al={},rl=Yn,dl=Kn,sl=Object.keys||function(e){return rl(e,dl)},ul=me,Zl=Ve,hl=be,bl=fe,ml=Ft,pl=sl;al.f=ul&&!Zl?Object.defineProperties:function(e,t){bl(e);for(var i,n=ml(t),l=pl(t),o=l.length,c=0;o>c;)hl.f(e,i=l[c++],n[i]);return e};var Il,gl=x("document","documentElement"),yl=fe,Gl=al,Xl=Kn,Wl=Xi,Cl=gl,Vl=Xe,Rl=Gi("IE_PROTO"),Sl=function(){},vl=function(e){return"<script>"+e+"</"+"script>"},fl=function(e){e.write(vl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Yl=function(){try{Il=new ActiveXObject("htmlfile")}catch(e){}var e,t;Yl="undefined"!=typeof document?document.domain&&Il?fl(Il):((t=Vl("iframe")).style.display="none",Cl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(vl("document.F=Object")),e.close(),e.F):fl(Il);for(var i=Xl.length;i--;)delete Yl.prototype[Xl[i]];return Yl()};Wl[Rl]=!0;var Kl=Object.create||function(e,t){var i;return null!==e?(Sl.prototype=yl(e),i=new Sl,Sl.prototype=null,i[Rl]=e):i=Yl(),void 0===t?i:Gl.f(i,t)},Nl=Ze,Jl=Kl,Hl=be.f,Ll=Nl("unscopables"),kl=Array.prototype;null==kl[Ll]&&Hl(kl,Ll,{configurable:!0,value:Jl(null)});var Al=function(e){kl[Ll][e]=!0},Ul=Cn.includes,Tl=Al;cl({target:"Array",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return Ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Tl("includes"),Al("flat"),Al("flatMap");var Bl={},Fl=xe,wl=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n})),this.resolve=Fl(t),this.reject=Fl(i)};Bl.f=function(e){return new wl(e)};var zl=xe,xl=r,Pl=b(b.bind),jl=function(e,t){return zl(e),void 0===t?e:xl?Pl(e,t):function(){return e.apply(t,arguments)}},Ql={},Ml=Ql,El=Ze("iterator"),Dl=Array.prototype,Ol=function(e){return void 0!==e&&(Ml.Array===e||Dl[El]===e)},_l={};_l[Ze("toStringTag")]="z";var ql="[object z]"===String(_l),$l=B,eo=Jt,to=Ze("toStringTag"),io=Object,no="Arguments"==eo(function(){return arguments}()),lo=ql?eo:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,t){try{return e[t]}catch(e){}}(t=io(e),to))?i:no?eo(t):"Object"==(n=eo(t))&&$l(t.callee)?"Arguments":n},oo=lo,co=je,ao=Ql,ro=Ze("iterator"),so=function(e){if(null!=e)return co(e,ro)||co(e,"@@iterator")||ao[oo(e)]},uo=Ne,Zo=xe,ho=fe,bo=Be,mo=so,po=TypeError,Io=function(e,t){var i=arguments.length<2?mo(e):t;if(Zo(i))return ho(uo(i,e));throw po(bo(e)+" is not iterable")},go=Ne,yo=fe,Go=je,Xo=function(e,t,i){var n,l;yo(e);try{if(!(n=Go(e,"return"))){if("throw"===t)throw i;return i}n=go(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return yo(n),i},Wo=jl,Co=Ne,Vo=fe,Ro=Be,So=Ol,vo=gn,fo=Je,Yo=Io,Ko=so,No=Xo,Jo=TypeError,Ho=function(e,t){this.stopped=e,this.result=t},Lo=Ho.prototype,ko=Ne,Ao=xe,Uo=Bl,To=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},Bo=function(e,t,i){var n,l,o,c,a,r,d,s=i&&i.that,u=!(!i||!i.AS_ENTRIES),Z=!(!i||!i.IS_RECORD),h=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=Wo(t,s),p=function(e){return n&&No(n,"normal",e),new Ho(!0,e)},I=function(e){return u?(Vo(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(Z)n=e.iterator;else if(h)n=e;else{if(!(l=Ko(e)))throw Jo(Ro(e)+" is not iterable");if(So(l)){for(o=0,c=vo(e);c>o;o++)if((a=I(e[o]))&&fo(Lo,a))return a;return new Ho(!1)}n=Yo(e,l)}for(r=Z?e.next:n.next;!(d=Co(r,n)).done;){try{a=I(d.value)}catch(e){No(n,"throw",e)}if("object"==typeof a&&a&&fo(Lo,a))return a}return new Ho(!1)};cl({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=Uo.f(t),n=i.resolve,l=i.reject,o=To((function(){var i=Ao(t.resolve),l=[],o=0,c=1;Bo(e,(function(e){var a=o++,r=!1;c++,ko(i,t,e).then((function(e){r||(r=!0,l[a]={status:"fulfilled",value:e},--c||n(l))}),(function(e){r||(r=!0,l[a]={status:"rejected",reason:e},--c||n(l))}))})),--c||n(l)}));return o.error&&l(o.value),i.promise}});var Fo=o.Promise,wo=b,zo=a,xo=B,Po=lo,jo=Zi,Qo=function(){},Mo=[],Eo=x("Reflect","construct"),Do=/^\s*(?:class|function)\b/,Oo=wo(Do.exec),_o=!Do.exec(Qo),qo=function(e){if(!xo(e))return!1;try{return Eo(Qo,Mo,e),!0}catch(e){return!1}},$o=function(e){if(!xo(e))return!1;switch(Po(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return _o||!!Oo(Do,jo(e))}catch(e){return!0}};$o.sham=!0;var ec=!Eo||zo((function(){var e;return qo(qo.call)||!qo(Object)||!qo((function(){e=!0}))||e}))?$o:qo,tc=ec,ic=Be,nc=TypeError,lc=function(e){if(tc(e))return e;throw nc(ic(e)+" is not a constructor")},oc=fe,cc=lc,ac=Ze("species"),rc=function(e,t){var i,n=oc(e).constructor;return void 0===n||null==(i=oc(n)[ac])?t:cc(i)},dc=fe,sc=Ie,uc=Bl,Zc=cl,hc=Fo,bc=a,mc=x,pc=B,Ic=rc,gc=function(e,t){if(dc(e),sc(t)&&t.constructor===e)return t;var i=uc.f(e);return(0,i.resolve)(t),i.promise},yc=nn,Gc=hc&&hc.prototype;if(Zc({target:"Promise",proto:!0,real:!0,forced:!!hc&&bc((function(){Gc.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=Ic(this,mc("Promise")),i=pc(e);return this.then(i?function(i){return gc(t,e()).then((function(){return i}))}:e,i?function(i){return gc(t,e()).then((function(){throw i}))}:e)}}),pc(hc)){var Xc=mc("Promise").prototype.finally;Gc.finally!==Xc&&yc(Gc,"finally",Xc,{unsafe:!0})}var Wc=$t.exports,Cc=be,Vc=function(e,t,i){return i.get&&Wc(i.get,t,{getter:!0}),i.set&&Wc(i.set,t,{setter:!0}),Cc.f(e,t,i)},Rc=fe,Sc=function(){var e=Rc(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},vc=me,fc=Vc,Yc=Sc,Kc=a,Nc=o.RegExp,Jc=Nc.prototype,Hc=vc&&Kc((function(){var e=!0;try{Nc(".","d")}catch(t){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",l=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},o={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var c in e&&(o.hasIndices="d"),o)l(c,o[c]);return Object.getOwnPropertyDescriptor(Jc,"flags").get.call(t)!==n||i!==n}));Hc&&fc(Jc,"flags",{configurable:!0,get:Yc});var Lc,kc,Ac,Uc=!a((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),Tc=W,Bc=B,Fc=y,wc=Uc,zc=Gi("IE_PROTO"),xc=Object,Pc=xc.prototype,jc=wc?xc.getPrototypeOf:function(e){var t=Fc(e);if(Tc(t,zc))return t[zc];var i=t.constructor;return Bc(i)&&t instanceof i?i.prototype:t instanceof xc?Pc:null},Qc=a,Mc=B,Ec=jc,Dc=nn,Oc=Ze("iterator"),_c=!1;[].keys&&("next"in(Ac=[].keys())?(kc=Ec(Ec(Ac)))!==Object.prototype&&(Lc=kc):_c=!0);var qc=null==Lc||Qc((function(){var e={};return Lc[Oc].call(e)!==e}));qc&&(Lc={}),Mc(Lc[Oc])||Dc(Lc,Oc,(function(){return this}));var $c,ea,ta={IteratorPrototype:Lc,BUGGY_SAFARI_ITERATORS:_c},ia=be.f,na=W,la=Ze("toStringTag"),oa=function(e,t,i){e&&!i&&(e=e.prototype),e&&!na(e,la)&&ia(e,la,{configurable:!0,value:t})},ca=ta.IteratorPrototype,aa=Kl,ra=ft,da=oa,sa=Ql,ua=function(){return this},Za=function(e,t,i,n){var l=t+" Iterator";return e.prototype=aa(ca,{next:ra(+!n,i)}),da(e,l,!1),sa[l]=ua,e},ha=lo,ba=String,ma=function(e){if("Symbol"===ha(e))throw TypeError("Cannot convert a Symbol value to a string");return ba(e)},pa=Ie,Ia=Jt,ga=Ze("match"),ya=Ne,Ga=W,Xa=Je,Wa=Sc,Ca=RegExp.prototype,Va=b,Ra=dn,Sa=ma,va=p,fa=Va("".charAt),Ya=Va("".charCodeAt),Ka=Va("".slice),Na=function(e){return function(t,i){var n,l,o=Sa(va(t)),c=Ra(i),a=o.length;return c<0||c>=a?e?"":void 0:(n=Ya(o,c))<55296||n>56319||c+1===a||(l=Ya(o,c+1))<56320||l>57343?e?fa(o,c):n:e?Ka(o,c,c+2):l-56320+(n-55296<<10)+65536}},Ja={codeAt:Na(!1),charAt:Na(!0)},Ha=Ja.charAt,La=function(e,t,i){return t+(i?Ha(e,t).length:1)},ka=a,Aa=o.RegExp,Ua=ka((function(){var e=Aa("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),Ta=Ua||ka((function(){return!Aa("a","y").sticky})),Ba={BROKEN_CARET:Ua||ka((function(){var e=Aa("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:Ta,UNSUPPORTED_Y:Ua},Fa=a,wa=o.RegExp,za=Fa((function(){var e=wa(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),xa=a,Pa=o.RegExp,ja=xa((function(){var e=Pa("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Qa=Ne,Ma=b,Ea=ma,Da=Sc,Oa=Ba,_a=V.exports,qa=Kl,$a=Bi.get,er=za,tr=ja,ir=_a("native-string-replace",String.prototype.replace),nr=RegExp.prototype.exec,lr=nr,or=Ma("".charAt),cr=Ma("".indexOf),ar=Ma("".replace),rr=Ma("".slice),dr=(ea=/b*/g,Qa(nr,$c=/a/,"a"),Qa(nr,ea,"a"),0!==$c.lastIndex||0!==ea.lastIndex),sr=Oa.BROKEN_CARET,ur=void 0!==/()??/.exec("")[1];(dr||ur||sr||er||tr)&&(lr=function(e){var t,i,n,l,o,c,a,r=this,d=$a(r),s=Ea(e),u=d.raw;if(u)return u.lastIndex=r.lastIndex,t=Qa(lr,u,s),r.lastIndex=u.lastIndex,t;var Z=d.groups,h=sr&&r.sticky,b=Qa(Da,r),m=r.source,p=0,I=s;if(h&&(b=ar(b,"y",""),-1===cr(b,"g")&&(b+="g"),I=rr(s,r.lastIndex),r.lastIndex>0&&(!r.multiline||r.multiline&&"\n"!==or(s,r.lastIndex-1))&&(m="(?: "+m+")",I=" "+I,p++),i=new RegExp("^(?:"+m+")",b)),ur&&(i=new RegExp("^"+m+"$(?!\\s)",b)),dr&&(n=r.lastIndex),l=Qa(nr,h?i:r,I),h?l?(l.input=rr(l.input,p),l[0]=rr(l[0],p),l.index=r.lastIndex,r.lastIndex+=l[0].length):r.lastIndex=0:dr&&l&&(r.lastIndex=r.global?l.index+l[0].length:n),ur&&l&&l.length>1&&Qa(ir,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&Z)for(l.groups=c=qa(null),o=0;o<Z.length;o++)c[(a=Z[o])[0]]=l[a[1]];return l});var Zr=lr,hr=Ne,br=fe,mr=B,pr=Jt,Ir=Zr,gr=TypeError,yr=function(e,t){var i=e.exec;if(mr(i)){var n=hr(i,e,t);return null!==n&&br(n),n}if("RegExp"===pr(e))return hr(Ir,e,t);throw gr("RegExp#exec called on incompatible receiver")},Gr=cl,Xr=Ne,Wr=b,Cr=Za,Vr=p,Rr=pn,Sr=ma,vr=fe,fr=function(e){var t;return pa(e)&&(void 0!==(t=e[ga])?!!t:"RegExp"==Ia(e))},Yr=function(e){var t=e.flags;return void 0!==t||"flags"in Ca||Ga(e,"flags")||!Xa(Ca,e)?t:ya(Wa,e)},Kr=je,Nr=nn,Jr=a,Hr=rc,Lr=La,kr=yr,Ar=Bi,Ur=Ze("matchAll"),Tr="RegExp String",Br="RegExp String Iterator",Fr=Ar.set,wr=Ar.getterFor(Br),zr=RegExp.prototype,xr=TypeError,Pr=Wr("".indexOf),jr=Wr("".matchAll),Qr=!!jr&&!Jr((function(){jr("a",/./)})),Mr=Cr((function(e,t,i,n){Fr(this,{type:Br,regexp:e,string:t,global:i,unicode:n,done:!1})}),Tr,(function(){var e=wr(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=kr(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===Sr(n[0])&&(t.lastIndex=Lr(i,Rr(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Er=function(e){var t,i,n,l=vr(this),o=Sr(e),c=Hr(l,RegExp),a=Sr(Yr(l));return t=new c(c===RegExp?l.source:l,a),i=!!~Pr(a,"g"),n=!!~Pr(a,"u"),t.lastIndex=Rr(l.lastIndex),new Mr(t,o,i,n)};Gr({target:"String",proto:!0,forced:Qr},{matchAll:function(e){var t,i,n,l=Vr(this);if(null!=e){if(fr(e)&&(t=Sr(Vr(Yr(e))),!~Pr(t,"g")))throw xr("`.matchAll` does not allow non-global regexes");if(Qr)return jr(l,e);if(n=Kr(e,Ur))return Xr(n,e,l)}else if(Qr)return jr(l,e);return i=Sr(l),new RegExp(e,"g")[Ur](i)}}),Ur in zr||Nr(zr,Ur,Er);var Dr=r,Or=Function.prototype,_r=Or.apply,qr=Or.call,$r="object"==typeof Reflect&&Reflect.apply||(Dr?qr.bind(_r):function(){return qr.apply(_r,arguments)});cl({target:"RegExp",proto:!0,forced:/./.exec!==Zr},{exec:Zr});var ed=b,td=nn,id=Zr,nd=a,ld=Ze,od=qt,cd=ld("species"),ad=RegExp.prototype,rd=b,dd=y,sd=Math.floor,ud=rd("".charAt),Zd=rd("".replace),hd=rd("".slice),bd=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,md=/\$([$&'`]|\d{1,2})/g,pd=$r,Id=Ne,gd=b,yd=function(e,t,i,n){var l=ld(e),o=!nd((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),c=o&&!nd((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[cd]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!c||i){var a=ed(/./[l]),r=t(l,""[e],(function(e,t,i,n,l){var c=ed(e),r=t.exec;return r===id||r===ad.exec?o&&!l?{done:!0,value:a(t,i,n)}:{done:!0,value:c(i,t,n)}:{done:!1}}));td(String.prototype,e,r[0]),td(ad,l,r[1])}n&&od(ad[l],"sham",!0)},Gd=a,Xd=fe,Wd=B,Cd=dn,Vd=pn,Rd=ma,Sd=p,vd=La,fd=je,Yd=function(e,t,i,n,l,o){var c=i+e.length,a=n.length,r=md;return void 0!==l&&(l=dd(l),r=bd),Zd(o,r,(function(o,r){var d;switch(ud(r,0)){case"$":return"$";case"&":return e;case"`":return hd(t,0,i);case"'":return hd(t,c);case"<":d=l[hd(r,1,-1)];break;default:var s=+r;if(0===s)return o;if(s>a){var u=sd(s/10);return 0===u?o:u<=a?void 0===n[u-1]?ud(r,1):n[u-1]+ud(r,1):o}d=n[s-1]}return void 0===d?"":d}))},Kd=yr,Nd=Ze("replace"),Jd=Math.max,Hd=Math.min,Ld=gd([].concat),kd=gd([].push),Ad=gd("".indexOf),Ud=gd("".slice),Td="$0"==="a".replace(/./,"$0"),Bd=!!/./[Nd]&&""===/./[Nd]("a","$0");yd("replace",(function(e,t,i){var n=Bd?"$":"$0";return[function(e,i){var n=Sd(this),l=null==e?void 0:fd(e,Nd);return l?Id(l,e,n,i):Id(t,Rd(n),e,i)},function(e,l){var o=Xd(this),c=Rd(e);if("string"==typeof l&&-1===Ad(l,n)&&-1===Ad(l,"$<")){var a=i(t,o,c,l);if(a.done)return a.value}var r=Wd(l);r||(l=Rd(l));var d=o.global;if(d){var s=o.unicode;o.lastIndex=0}for(var u=[];;){var Z=Kd(o,c);if(null===Z)break;if(kd(u,Z),!d)break;""===Rd(Z[0])&&(o.lastIndex=vd(c,Vd(o.lastIndex),s))}for(var h,b="",m=0,p=0;p<u.length;p++){for(var I=Rd((Z=u[p])[0]),g=Jd(Hd(Cd(Z.index),c.length),0),y=[],G=1;G<Z.length;G++)kd(y,void 0===(h=Z[G])?h:String(h));var X=Z.groups;if(r){var W=Ld([I],y,g,c);void 0!==X&&kd(W,X);var C=Rd(pd(l,void 0,W))}else C=Yd(I,c,g,y,X,l);g>=m&&(b+=Ud(c,m,g)+C,m=g+I.length)}return b+Ud(c,m)}]}),!!Gd((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!Td||Bd);var Fd={exports:{}},wd=Ze("iterator"),zd=!1;try{var xd=0,Pd={next:function(){return{done:!!xd++}},return:function(){zd=!0}};Pd[wd]=function(){return this},Array.from(Pd,(function(){throw 2}))}catch(e){}var jd,Qd,Md,Ed="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Dd=B,Od=String,_d=TypeError,qd=b,$d=fe,es=function(e){if("object"==typeof e||Dd(e))return e;throw _d("Can't set "+Od(e)+" as a prototype")},ts=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=qd(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return $d(i),es(n),t?e(i,n):i.__proto__=n,i}}():void 0),is=Ed,ns=me,ls=o,os=B,cs=Ie,as=W,rs=lo,ds=Be,ss=qt,us=nn,Zs=be.f,hs=Je,bs=jc,ms=ts,ps=Ze,Is=T,gs=Bi.enforce,ys=Bi.get,Gs=ls.Int8Array,Xs=Gs&&Gs.prototype,Ws=ls.Uint8ClampedArray,Cs=Ws&&Ws.prototype,Vs=Gs&&bs(Gs),Rs=Xs&&bs(Xs),Ss=Object.prototype,vs=ls.TypeError,fs=ps("toStringTag"),Ys=Is("TYPED_ARRAY_TAG"),Ks="TypedArrayConstructor",Ns=is&&!!ms&&"Opera"!==rs(ls.opera),Js=!1,Hs={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},Ls={BigInt64Array:8,BigUint64Array:8},ks=function(e){var t=bs(e);if(cs(t)){var i=ys(t);return i&&as(i,Ks)?i.TypedArrayConstructor:ks(t)}},As=function(e){if(!cs(e))return!1;var t=rs(e);return as(Hs,t)||as(Ls,t)};for(jd in Hs)(Md=(Qd=ls[jd])&&Qd.prototype)?gs(Md).TypedArrayConstructor=Qd:Ns=!1;for(jd in Ls)(Md=(Qd=ls[jd])&&Qd.prototype)&&(gs(Md).TypedArrayConstructor=Qd);if((!Ns||!os(Vs)||Vs===Function.prototype)&&(Vs=function(){throw vs("Incorrect invocation")},Ns))for(jd in Hs)ls[jd]&&ms(ls[jd],Vs);if((!Ns||!Rs||Rs===Ss)&&(Rs=Vs.prototype,Ns))for(jd in Hs)ls[jd]&&ms(ls[jd].prototype,Rs);if(Ns&&bs(Cs)!==Rs&&ms(Cs,Rs),ns&&!as(Rs,fs))for(jd in Js=!0,Zs(Rs,fs,{get:function(){return cs(this)?this[Ys]:void 0}}),Hs)ls[jd]&&ss(ls[jd],Ys,jd);var Us={NATIVE_ARRAY_BUFFER_VIEWS:Ns,TYPED_ARRAY_TAG:Js&&Ys,aTypedArray:function(e){if(As(e))return e;throw vs("Target is not a typed array")},aTypedArrayConstructor:function(e){if(os(e)&&(!ms||hs(Vs,e)))return e;throw vs(ds(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(ns){if(i)for(var l in Hs){var o=ls[l];if(o&&as(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}Rs[e]&&!i||us(Rs,e,i?t:Ns&&Xs[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(ns){if(ms){if(i)for(n in Hs)if((l=ls[n])&&as(l,e))try{delete l[e]}catch(e){}if(Vs[e]&&!i)return;try{return us(Vs,e,i?t:Ns&&Vs[e]||t)}catch(e){}}for(n in Hs)!(l=ls[n])||l[e]&&!i||us(l,e,t)}},getTypedArrayConstructor:ks,isView:function(e){if(!cs(e))return!1;var t=rs(e);return"DataView"===t||as(Hs,t)||as(Ls,t)},isTypedArray:As,TypedArray:Vs,TypedArrayPrototype:Rs},Ts=o,Bs=a,Fs=function(e,t){if(!t&&!zd)return!1;var i=!1;try{var n={};n[wd]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},ws=Us.NATIVE_ARRAY_BUFFER_VIEWS,zs=Ts.ArrayBuffer,xs=Ts.Int8Array,Ps=!ws||!Bs((function(){xs(1)}))||!Bs((function(){new xs(-1)}))||!Fs((function(e){new xs,new xs(null),new xs(1.5),new xs(e)}),!0)||Bs((function(){return 1!==new xs(new zs(2),1,void 0).length})),js=nn,Qs=function(e,t,i){for(var n in t)js(e,n,t[n],i);return e},Ms=Je,Es=TypeError,Ds=function(e,t){if(Ms(t,e))return e;throw Es("Incorrect invocation")},Os=dn,_s=pn,qs=RangeError,$s=function(e){if(void 0===e)return 0;var t=Os(e),i=_s(t);if(t!==i)throw qs("Wrong length or index");return i},eu=Array,tu=Math.abs,iu=Math.pow,nu=Math.floor,lu=Math.log,ou=Math.LN2,cu={pack:function(e,t,i){var n,l,o,c=eu(i),a=8*i-t-1,r=(1<<a)-1,d=r>>1,s=23===t?iu(2,-24)-iu(2,-77):0,u=e<0||0===e&&1/e<0?1:0,Z=0;for((e=tu(e))!=e||e===1/0?(l=e!=e?1:0,n=r):(n=nu(lu(e)/ou),e*(o=iu(2,-n))<1&&(n--,o*=2),(e+=n+d>=1?s/o:s*iu(2,1-d))*o>=2&&(n++,o/=2),n+d>=r?(l=0,n=r):n+d>=1?(l=(e*o-1)*iu(2,t),n+=d):(l=e*iu(2,d-1)*iu(2,t),n=0));t>=8;)c[Z++]=255&l,l/=256,t-=8;for(n=n<<t|l,a+=t;a>0;)c[Z++]=255&n,n/=256,a-=8;return c[--Z]|=128*u,c},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,c=o>>1,a=l-7,r=n-1,d=e[r--],s=127&d;for(d>>=7;a>0;)s=256*s+e[r--],a-=8;for(i=s&(1<<-a)-1,s>>=-a,a+=t;a>0;)i=256*i+e[r--],a-=8;if(0===s)s=1-c;else{if(s===o)return i?NaN:d?-1/0:1/0;i+=iu(2,t),s-=c}return(d?-1:1)*i*iu(2,s-t)}},au=y,ru=hn,du=gn,su=function(e){for(var t=au(this),i=du(t),n=arguments.length,l=ru(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,c=void 0===o?i:ru(o,i);c>l;)t[l++]=e;return t},uu=ct,Zu=be,hu=ft,bu=function(e,t,i){var n=uu(t);n in e?Zu.f(e,n,hu(0,i)):e[n]=i},mu=hn,pu=gn,Iu=bu,gu=Array,yu=Math.max,Gu=function(e,t,i){for(var n=pu(e),l=mu(t,n),o=mu(void 0===i?n:i,n),c=gu(yu(o-l,0)),a=0;l<o;l++,a++)Iu(c,a,e[l]);return c.length=a,c},Xu=o,Wu=b,Cu=me,Vu=Ed,Ru=oi,Su=qt,vu=Qs,fu=a,Yu=Ds,Ku=dn,Nu=pn,Ju=$s,Hu=cu,Lu=jc,ku=ts,Au=ln.f,Uu=be.f,Tu=su,Bu=Gu,Fu=oa,wu=Ru.PROPER,zu=Ru.CONFIGURABLE,xu=Bi.get,Pu=Bi.set,ju="ArrayBuffer",Qu="DataView",Mu="Wrong index",Eu=Xu.ArrayBuffer,Du=Eu,Ou=Du&&Du.prototype,_u=Xu.DataView,qu=_u&&_u.prototype,$u=Object.prototype,eZ=Xu.Array,tZ=Xu.RangeError,iZ=Wu(Tu),nZ=Wu([].reverse),lZ=Hu.pack,oZ=Hu.unpack,cZ=function(e){return[255&e]},aZ=function(e){return[255&e,e>>8&255]},rZ=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},dZ=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},sZ=function(e){return lZ(e,23,4)},uZ=function(e){return lZ(e,52,8)},ZZ=function(e,t){Uu(e.prototype,t,{get:function(){return xu(this)[t]}})},hZ=function(e,t,i,n){var l=Ju(i),o=xu(e);if(l+t>o.byteLength)throw tZ(Mu);var c=xu(o.buffer).bytes,a=l+o.byteOffset,r=Bu(c,a,a+t);return n?r:nZ(r)},bZ=function(e,t,i,n,l,o){var c=Ju(i),a=xu(e);if(c+t>a.byteLength)throw tZ(Mu);for(var r=xu(a.buffer).bytes,d=c+a.byteOffset,s=n(+l),u=0;u<t;u++)r[d+u]=s[o?u:t-u-1]};if(Vu){var mZ=wu&&Eu.name!==ju;if(fu((function(){Eu(1)}))&&fu((function(){new Eu(-1)}))&&!fu((function(){return new Eu,new Eu(1.5),new Eu(NaN),mZ&&!zu})))mZ&&zu&&Su(Eu,"name",ju);else{(Du=function(e){return Yu(this,Ou),new Eu(Ju(e))}).prototype=Ou;for(var pZ,IZ=Au(Eu),gZ=0;IZ.length>gZ;)(pZ=IZ[gZ++])in Du||Su(Du,pZ,Eu[pZ]);Ou.constructor=Du}ku&&Lu(qu)!==$u&&ku(qu,$u);var yZ=new _u(new Du(2)),GZ=Wu(qu.setInt8);yZ.setInt8(0,2147483648),yZ.setInt8(1,2147483649),!yZ.getInt8(0)&&yZ.getInt8(1)||vu(qu,{setInt8:function(e,t){GZ(this,e,t<<24>>24)},setUint8:function(e,t){GZ(this,e,t<<24>>24)}},{unsafe:!0})}else Du=function(e){Yu(this,Ou);var t=Ju(e);Pu(this,{bytes:iZ(eZ(t),0),byteLength:t}),Cu||(this.byteLength=t)},Ou=Du.prototype,_u=function(e,t,i){Yu(this,qu),Yu(e,Ou);var n=xu(e).byteLength,l=Ku(t);if(l<0||l>n)throw tZ("Wrong offset");if(l+(i=void 0===i?n-l:Nu(i))>n)throw tZ("Wrong length");Pu(this,{buffer:e,byteLength:i,byteOffset:l}),Cu||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},qu=_u.prototype,Cu&&(ZZ(Du,"byteLength"),ZZ(_u,"buffer"),ZZ(_u,"byteLength"),ZZ(_u,"byteOffset")),vu(qu,{getInt8:function(e){return hZ(this,1,e)[0]<<24>>24},getUint8:function(e){return hZ(this,1,e)[0]},getInt16:function(e){var t=hZ(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=hZ(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return dZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return dZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return oZ(hZ(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return oZ(hZ(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){bZ(this,1,e,cZ,t)},setUint8:function(e,t){bZ(this,1,e,cZ,t)},setInt16:function(e,t){bZ(this,2,e,aZ,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){bZ(this,2,e,aZ,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){bZ(this,4,e,rZ,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){bZ(this,4,e,rZ,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){bZ(this,4,e,sZ,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){bZ(this,8,e,uZ,t,arguments.length>2?arguments[2]:void 0)}});Fu(Du,ju),Fu(_u,Qu);var XZ={ArrayBuffer:Du,DataView:_u},WZ=Ie,CZ=Math.floor,VZ=Number.isInteger||function(e){return!WZ(e)&&isFinite(e)&&CZ(e)===e},RZ=dn,SZ=RangeError,vZ=function(e){var t=RZ(e);if(t<0)throw SZ("The argument can't be less than 0");return t},fZ=RangeError,YZ=function(e,t){var i=vZ(e);if(i%t)throw fZ("Wrong offset");return i},KZ=jl,NZ=Ne,JZ=lc,HZ=y,LZ=gn,kZ=Io,AZ=so,UZ=Ol,TZ=Us.aTypedArrayConstructor,BZ=function(e){var t,i,n,l,o,c,a=JZ(this),r=HZ(e),d=arguments.length,s=d>1?arguments[1]:void 0,u=void 0!==s,Z=AZ(r);if(Z&&!UZ(Z))for(c=(o=kZ(r,Z)).next,r=[];!(l=NZ(c,o)).done;)r.push(l.value);for(u&&d>2&&(s=KZ(s,arguments[2])),i=LZ(r),n=new(TZ(a))(i),t=0;i>t;t++)n[t]=u?s(r[t],t):r[t];return n},FZ=Jt,wZ=Array.isArray||function(e){return"Array"==FZ(e)},zZ=ec,xZ=Ie,PZ=Ze("species"),jZ=Array,QZ=function(e){var t;return wZ(e)&&(t=e.constructor,(zZ(t)&&(t===jZ||wZ(t.prototype))||xZ(t)&&null===(t=t[PZ]))&&(t=void 0)),void 0===t?jZ:t},MZ=jl,EZ=Ut,DZ=y,OZ=gn,_Z=function(e,t){return new(QZ(e))(0===t?0:t)},qZ=b([].push),$Z=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,c=7==e,a=5==e||o;return function(r,d,s,u){for(var Z,h,b=DZ(r),m=EZ(b),p=MZ(d,s),I=OZ(m),g=0,y=u||_Z,G=t?y(r,I):i||c?y(r,0):void 0;I>g;g++)if((a||g in m)&&(h=p(Z=m[g],g,b),e))if(t)G[g]=h;else if(h)switch(e){case 3:return!0;case 5:return Z;case 6:return g;case 2:qZ(G,Z)}else switch(e){case 4:return!1;case 7:qZ(G,Z)}return o?-1:n||l?l:G}},eh={forEach:$Z(0),map:$Z(1),filter:$Z(2),some:$Z(3),every:$Z(4),find:$Z(5),findIndex:$Z(6),filterReject:$Z(7)},th=x,ih=be,nh=me,lh=Ze("species"),oh=B,ch=Ie,ah=ts,rh=cl,dh=o,sh=Ne,uh=me,Zh=Ps,hh=Us,bh=XZ,mh=Ds,ph=ft,Ih=qt,gh=VZ,yh=pn,Gh=$s,Xh=YZ,Wh=ct,Ch=W,Vh=lo,Rh=Ie,Sh=Ue,vh=Kl,fh=Je,Yh=ts,Kh=ln.f,Nh=BZ,Jh=eh.forEach,Hh=function(e){var t=th(e),i=ih.f;nh&&t&&!t[lh]&&i(t,lh,{configurable:!0,get:function(){return this}})},Lh=be,kh=Ct,Ah=function(e,t,i){var n,l;return ah&&oh(n=t.constructor)&&n!==i&&ch(l=n.prototype)&&l!==i.prototype&&ah(e,l),e},Uh=Bi.get,Th=Bi.set,Bh=Bi.enforce,Fh=Lh.f,wh=kh.f,zh=Math.round,xh=dh.RangeError,Ph=bh.ArrayBuffer,jh=Ph.prototype,Qh=bh.DataView,Mh=hh.NATIVE_ARRAY_BUFFER_VIEWS,Eh=hh.TYPED_ARRAY_TAG,Dh=hh.TypedArray,Oh=hh.TypedArrayPrototype,_h=hh.aTypedArrayConstructor,qh=hh.isTypedArray,$h="BYTES_PER_ELEMENT",eb="Wrong length",tb=function(e,t){_h(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},ib=function(e,t){Fh(e,t,{get:function(){return Uh(this)[t]}})},nb=function(e){var t;return fh(jh,e)||"ArrayBuffer"==(t=Vh(e))||"SharedArrayBuffer"==t},lb=function(e,t){return qh(e)&&!Sh(t)&&t in e&&gh(+t)&&t>=0},ob=function(e,t){return t=Wh(t),lb(e,t)?ph(2,e[t]):wh(e,t)},cb=function(e,t,i){return t=Wh(t),!(lb(e,t)&&Rh(i)&&Ch(i,"value"))||Ch(i,"get")||Ch(i,"set")||i.configurable||Ch(i,"writable")&&!i.writable||Ch(i,"enumerable")&&!i.enumerable?Fh(e,t,i):(e[t]=i.value,e)};uh?(Mh||(kh.f=ob,Lh.f=cb,ib(Oh,"buffer"),ib(Oh,"byteOffset"),ib(Oh,"byteLength"),ib(Oh,"length")),rh({target:"Object",stat:!0,forced:!Mh},{getOwnPropertyDescriptor:ob,defineProperty:cb}),Fd.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,c="set"+e,a=dh[l],r=a,d=r&&r.prototype,s={},u=function(e,t){Fh(e,t,{get:function(){return function(e,t){var i=Uh(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=Uh(e);i&&(l=(l=zh(l))<0?0:l>255?255:255&l),o.view[c](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};Mh?Zh&&(r=t((function(e,t,i,l){return mh(e,d),Ah(Rh(t)?nb(t)?void 0!==l?new a(t,Xh(i,n),l):void 0!==i?new a(t,Xh(i,n)):new a(t):qh(t)?tb(r,t):sh(Nh,r,t):new a(Gh(t)),e,r)})),Yh&&Yh(r,Dh),Jh(Kh(a),(function(e){e in r||Ih(r,e,a[e])})),r.prototype=d):(r=t((function(e,t,i,l){mh(e,d);var o,c,a,s=0,Z=0;if(Rh(t)){if(!nb(t))return qh(t)?tb(r,t):sh(Nh,r,t);o=t,Z=Xh(i,n);var h=t.byteLength;if(void 0===l){if(h%n)throw xh(eb);if((c=h-Z)<0)throw xh(eb)}else if((c=yh(l)*n)+Z>h)throw xh(eb);a=c/n}else a=Gh(t),o=new Ph(c=a*n);for(Th(e,{buffer:o,byteOffset:Z,byteLength:c,length:a,view:new Qh(o)});s<a;)u(e,s++)})),Yh&&Yh(r,Dh),d=r.prototype=vh(Oh)),d.constructor!==r&&Ih(d,"constructor",r),Bh(d).TypedArrayConstructor=r,Eh&&Ih(d,Eh,l);var Z=r!=a;s[l]=r,rh({global:!0,constructor:!0,forced:Z,sham:!Mh},s),$h in r||Ih(r,$h,n),$h in d||Ih(d,$h,n),Hh(l)}):Fd.exports=function(){},(0,Fd.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Fd.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var ab=nt,rb=TypeError,db=su,sb=function(e){var t=ab(e,"number");if("number"==typeof t)throw rb("Can't convert number to bigint");return BigInt(t)},ub=lo,Zb=Ne,hb=a,bb=Us.aTypedArray,mb=Us.exportTypedArrayMethod,pb=b("".slice);mb("fill",(function(e){var t=arguments.length;bb(this);var i="Big"===pb(ub(this),0,3)?sb(e):+e;return Zb(db,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),hb((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,Us.exportTypedArrayStaticMethod)("from",BZ,Ps);var Ib=Us.aTypedArrayConstructor;(0,Us.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(Ib(this))(t);t>e;)i[e]=arguments[e++];return i}),Ps);var gb=o,yb=Ne,Gb=Us,Xb=gn,Wb=YZ,Cb=y,Vb=a,Rb=gb.RangeError,Sb=gb.Int8Array,vb=Sb&&Sb.prototype,fb=vb&&vb.set,Yb=Gb.aTypedArray,Kb=Gb.exportTypedArrayMethod,Nb=!Vb((function(){var e=new Uint8ClampedArray(2);return yb(fb,e,{length:1,0:3},1),3!==e[1]})),Jb=Nb&&Gb.NATIVE_ARRAY_BUFFER_VIEWS&&Vb((function(){var e=new Sb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Kb("set",(function(e){Yb(this);var t=Wb(arguments.length>1?arguments[1]:void 0,1),i=Cb(e);if(Nb)return yb(fb,this,i,t);var n=this.length,l=Xb(i),o=0;if(l+t>n)throw Rb("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!Nb||Jb);var Hb=Gu,Lb=Math.floor,kb=function(e,t){var i=e.length,n=Lb(i/2);return i<8?Ab(e,t):Ub(e,kb(Hb(e,0,n),t),kb(Hb(e,n),t),t)},Ab=function(e,t){for(var i,n,l=e.length,o=1;o<l;){for(n=o,i=e[o];n&&t(e[n-1],i)>0;)e[n]=e[--n];n!==o++&&(e[n]=i)}return e},Ub=function(e,t,i,n){for(var l=t.length,o=i.length,c=0,a=0;c<l||a<o;)e[c+a]=c<l&&a<o?n(t[c],i[a])<=0?t[c++]:i[a++]:c<l?t[c++]:i[a++];return e},Tb=kb,Bb=P.match(/firefox\/(\d+)/i),Fb=!!Bb&&+Bb[1],wb=/MSIE|Trident/.test(P),zb=P.match(/AppleWebKit\/(\d+)\./),xb=!!zb&&+zb[1],Pb=b,jb=a,Qb=xe,Mb=Tb,Eb=Fb,Db=wb,Ob=_,_b=xb,qb=Us.aTypedArray,$b=Us.exportTypedArrayMethod,em=o.Uint16Array,tm=em&&Pb(em.prototype.sort),im=!(!tm||jb((function(){tm(new em(2),null)}))&&jb((function(){tm(new em(2),{})}))),nm=!!tm&&!jb((function(){if(Ob)return Ob<74;if(Eb)return Eb<67;if(Db)return!0;if(_b)return _b<602;var e,t,i=new em(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(tm(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));$b("sort",(function(e){return void 0!==e&&Qb(e),nm?tm(this,e):Mb(qb(this),function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!=i?-1:t!=t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}}(e))}),!nm||im);var lm=Xe("span").classList,om=lm&&lm.constructor&&lm.constructor.prototype,cm=om===Object.prototype?void 0:om,am=cl,rm=Ne,dm=B,sm=Za,um=jc,Zm=ts,hm=oa,bm=qt,mm=nn,pm=Ql,Im=oi.PROPER,gm=oi.CONFIGURABLE,ym=ta.IteratorPrototype,Gm=ta.BUGGY_SAFARI_ITERATORS,Xm=Ze("iterator"),Wm="keys",Cm="values",Vm="entries",Rm=function(){return this},Sm=function(e,t,i,n,l,o,c){sm(i,t,n);var a,r,d,s=function(e){if(e===l&&m)return m;if(!Gm&&e in h)return h[e];switch(e){case Wm:case Cm:case Vm:return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",Z=!1,h=e.prototype,b=h[Xm]||h["@@iterator"]||l&&h[l],m=!Gm&&b||s(l),p="Array"==t&&h.entries||b;if(p&&(a=um(p.call(new e)))!==Object.prototype&&a.next&&(um(a)!==ym&&(Zm?Zm(a,ym):dm(a[Xm])||mm(a,Xm,Rm)),hm(a,u,!0)),Im&&l==Cm&&b&&b.name!==Cm&&(gm?bm(h,"name",Cm):(Z=!0,m=function(){return rm(b,this)})),l)if(r={values:s(Cm),keys:o?m:s(Wm),entries:s(Vm)},c)for(d in r)(Gm||Z||!(d in h))&&mm(h,d,r[d]);else am({target:t,proto:!0,forced:Gm||Z},r);return h[Xm]!==m&&mm(h,Xm,m,{name:l}),pm[t]=m,r},vm=Ft,fm=Al,Ym=Ql,Km=Bi,Nm=be.f,Jm=Sm,Hm=me,Lm="Array Iterator",km=Km.set,Am=Km.getterFor(Lm),Um=Jm(Array,"Array",(function(e,t){km(this,{type:Lm,target:vm(e),index:0,kind:t})}),(function(){var e=Am(this),t=e.target,i=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),Tm=Ym.Arguments=Ym.Array;if(fm("keys"),fm("values"),fm("entries"),Hm&&"values"!==Tm.name)try{Nm(Tm,"name",{value:"values"})}catch(e){}var Bm=o,Fm={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},wm=cm,zm=Um,xm=qt,Pm=Ze,jm=Pm("iterator"),Qm=Pm("toStringTag"),Mm=zm.values,Em=function(e,t){if(e){if(e[jm]!==Mm)try{xm(e,jm,Mm)}catch(t){e[jm]=Mm}if(e[Qm]||xm(e,Qm,t),Fm[t])for(var i in zm)if(e[i]!==zm[i])try{xm(e,i,zm[i])}catch(t){e[i]=zm[i]}}};for(var Dm in Fm)Em(Bm[Dm]&&Bm[Dm].prototype,Dm);Em(wm,"DOMTokenList");var Om,_m,qm,$m,ep=b([].slice),tp=TypeError,ip=function(e,t){if(e<t)throw tp("Not enough arguments");return e},np=/(?:ipad|iphone|ipod).*applewebkit/i.test(P),lp="process"==Jt(o.process),op=o,cp=$r,ap=jl,rp=B,dp=W,sp=a,up=gl,Zp=ep,hp=Xe,bp=ip,mp=np,pp=lp,Ip=op.setImmediate,gp=op.clearImmediate,yp=op.process,Gp=op.Dispatch,Xp=op.Function,Wp=op.MessageChannel,Cp=op.String,Vp=0,Rp={},Sp="onreadystatechange";try{Om=op.location}catch(e){}var vp=function(e){if(dp(Rp,e)){var t=Rp[e];delete Rp[e],t()}},fp=function(e){return function(){vp(e)}},Yp=function(e){vp(e.data)},Kp=function(e){op.postMessage(Cp(e),Om.protocol+"//"+Om.host)};Ip&&gp||(Ip=function(e){bp(arguments.length,1);var t=rp(e)?e:Xp(e),i=Zp(arguments,1);return Rp[++Vp]=function(){cp(t,void 0,i)},_m(Vp),Vp},gp=function(e){delete Rp[e]},pp?_m=function(e){yp.nextTick(fp(e))}:Gp&&Gp.now?_m=function(e){Gp.now(fp(e))}:Wp&&!mp?($m=(qm=new Wp).port2,qm.port1.onmessage=Yp,_m=ap($m.postMessage,$m)):op.addEventListener&&rp(op.postMessage)&&!op.importScripts&&Om&&"file:"!==Om.protocol&&!sp(Kp)?(_m=Kp,op.addEventListener("message",Yp,!1)):_m=Sp in hp("script")?function(e){up.appendChild(hp("script")).onreadystatechange=function(){up.removeChild(this),vp(e)}}:function(e){setTimeout(fp(e),0)});var Np={set:Ip,clear:gp},Jp=Np.clear;cl({global:!0,bind:!0,enumerable:!0,forced:o.clearImmediate!==Jp},{clearImmediate:Jp});var Hp=Np.set;cl({global:!0,bind:!0,enumerable:!0,forced:o.setImmediate!==Hp},{setImmediate:Hp});var Lp=Ja.charAt,kp=ma,Ap=Bi,Up=Sm,Tp="String Iterator",Bp=Ap.set,Fp=Ap.getterFor(Tp);Up(String,"String",(function(e){Bp(this,{type:Tp,string:kp(e),index:0})}),(function(){var e,t=Fp(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=Lp(i,n),t.index+=e.length,{value:e,done:!1})}));var wp=a,zp=Ze("iterator"),xp=!wp((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),i+=n+e})),!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[zp]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==i||"x"!==new URL("http://x",void 0).host})),Pp=me,jp=b,Qp=Ne,Mp=a,Ep=sl,Dp=Hn,Op=Vt,_p=y,qp=Ut,$p=Object.assign,eI=Object.defineProperty,tI=jp([].concat),iI=!$p||Mp((function(){if(Pp&&1!==$p({b:1},$p(eI({},"a",{enumerable:!0,get:function(){eI(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach((function(e){t[e]=e})),7!=$p({},e)[i]||Ep($p({},t)).join("")!=n}))?function(e,t){for(var i=_p(e),n=arguments.length,l=1,o=Dp.f,c=Op.f;n>l;)for(var a,r=qp(arguments[l++]),d=o?tI(Ep(r),o(r)):Ep(r),s=d.length,u=0;s>u;)a=d[u++],Pp&&!Qp(c,r,a)||(i[a]=r[a]);return i}:$p,nI=fe,lI=Xo,oI=jl,cI=Ne,aI=y,rI=function(e,t,i,n){try{return n?t(nI(i)[0],i[1]):t(i)}catch(t){lI(e,"throw",t)}},dI=Ol,sI=ec,uI=gn,ZI=bu,hI=Io,bI=so,mI=Array,pI=b,II=2147483647,gI=/[^\0-\u007E]/,yI=/[.\u3002\uFF0E\uFF61]/g,GI="Overflow: input needs wider integers to process",XI=RangeError,WI=pI(yI.exec),CI=Math.floor,VI=String.fromCharCode,RI=pI("".charCodeAt),SI=pI([].join),vI=pI([].push),fI=pI("".replace),YI=pI("".split),KI=pI("".toLowerCase),NI=function(e){return e+22+75*(e<26)},JI=function(e,t,i){var n=0;for(e=i?CI(e/700):e>>1,e+=CI(e/t);e>455;)e=CI(e/35),n+=36;return CI(n+36*e/(e+38))},HI=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=RI(e,i++);if(l>=55296&&l<=56319&&i<n){var o=RI(e,i++);56320==(64512&o)?vI(t,((1023&l)<<10)+(1023&o)+65536):(vI(t,l),i--)}else vI(t,l)}return t}(e);var i,n,l=e.length,o=128,c=0,a=72;for(i=0;i<e.length;i++)(n=e[i])<128&&vI(t,VI(n));var r=t.length,d=r;for(r&&vI(t,"-");d<l;){var s=II;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<s&&(s=n);var u=d+1;if(s-o>CI((II-c)/u))throw XI(GI);for(c+=(s-o)*u,o=s,i=0;i<e.length;i++){if((n=e[i])<o&&++c>II)throw XI(GI);if(n==o){for(var Z=c,h=36;;){var b=h<=a?1:h>=a+26?26:h-a;if(Z<b)break;var m=Z-b,p=36-b;vI(t,VI(NI(b+m%p))),Z=CI(m/p),h+=36}vI(t,VI(NI(Z))),a=JI(c,u,d==r),c=0,d++}}c++,o++}return SI(t,"")},LI=cl,kI=o,AI=Ne,UI=b,TI=me,BI=xp,FI=nn,wI=Qs,zI=oa,xI=Za,PI=Bi,jI=Ds,QI=B,MI=W,EI=jl,DI=lo,OI=fe,_I=Ie,qI=ma,$I=Kl,eg=ft,tg=Io,ig=so,ng=ip,lg=Tb,og=Ze("iterator"),cg="URLSearchParams",ag="URLSearchParamsIterator",rg=PI.set,dg=PI.getterFor(cg),sg=PI.getterFor(ag),ug=Object.getOwnPropertyDescriptor,Zg=function(e){if(!TI)return kI[e];var t=ug(kI,e);return t&&t.value},hg=Zg("fetch"),bg=Zg("Request"),mg=Zg("Headers"),pg=bg&&bg.prototype,Ig=mg&&mg.prototype,gg=kI.RegExp,yg=kI.TypeError,Gg=kI.decodeURIComponent,Xg=kI.encodeURIComponent,Wg=UI("".charAt),Cg=UI([].join),Vg=UI([].push),Rg=UI("".replace),Sg=UI([].shift),vg=UI([].splice),fg=UI("".split),Yg=UI("".slice),Kg=/\+/g,Ng=Array(4),Jg=function(e){return Ng[e-1]||(Ng[e-1]=gg("((?:%[\\da-f]{2}){"+e+"})","gi"))},Hg=function(e){try{return Gg(e)}catch(t){return e}},Lg=function(e){var t=Rg(e,Kg," "),i=4;try{return Gg(t)}catch(e){for(;i;)t=Rg(t,Jg(i--),Hg);return t}},kg=/[!'()~]|%20/g,Ag={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Ug=function(e){return Ag[e]},Tg=function(e){return Rg(Xg(e),kg,Ug)},Bg=xI((function(e,t){rg(this,{type:ag,iterator:tg(dg(e).entries),kind:t})}),"Iterator",(function(){var e=sg(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),Fg=function(e){this.entries=[],this.url=null,void 0!==e&&(_I(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===Wg(e,0)?Yg(e,1):e:qI(e)))};Fg.prototype={type:cg,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,c,a,r=ig(e);if(r)for(i=(t=tg(e,r)).next;!(n=AI(i,t)).done;){if(o=(l=tg(OI(n.value))).next,(c=AI(o,l)).done||(a=AI(o,l)).done||!AI(o,l).done)throw yg("Expected sequence with length 2");Vg(this.entries,{key:qI(c.value),value:qI(a.value)})}else for(var d in e)MI(e,d)&&Vg(this.entries,{key:d,value:qI(e[d])})},parseQuery:function(e){if(e)for(var t,i,n=fg(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=fg(t,"="),Vg(this.entries,{key:Lg(Sg(i)),value:Lg(Cg(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],Vg(i,Tg(e.key)+"="+Tg(e.value));return Cg(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var wg=function(){jI(this,zg);var e=arguments.length>0?arguments[0]:void 0;rg(this,new Fg(e))},zg=wg.prototype;if(wI(zg,{append:function(e,t){ng(arguments.length,2);var i=dg(this);Vg(i.entries,{key:qI(e),value:qI(t)}),i.updateURL()},delete:function(e){ng(arguments.length,1);for(var t=dg(this),i=t.entries,n=qI(e),l=0;l<i.length;)i[l].key===n?vg(i,l,1):l++;t.updateURL()},get:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=[],l=0;l<t.length;l++)t[l].key===i&&Vg(n,t[l].value);return n},has:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){ng(arguments.length,1);for(var i,n=dg(this),l=n.entries,o=!1,c=qI(e),a=qI(t),r=0;r<l.length;r++)(i=l[r]).key===c&&(o?vg(l,r--,1):(o=!0,i.value=a));o||Vg(l,{key:c,value:a}),n.updateURL()},sort:function(){var e=dg(this);lg(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=dg(this).entries,n=EI(e,arguments.length>1?arguments[1]:void 0),l=0;l<i.length;)n((t=i[l++]).value,t.key,this)},keys:function(){return new Bg(this,"keys")},values:function(){return new Bg(this,"values")},entries:function(){return new Bg(this,"entries")}},{enumerable:!0}),FI(zg,og,zg.entries,{name:"entries"}),FI(zg,"toString",(function(){return dg(this).serialize()}),{enumerable:!0}),zI(wg,cg),LI({global:!0,constructor:!0,forced:!BI},{URLSearchParams:wg}),!BI&&QI(mg)){var xg=UI(Ig.has),Pg=UI(Ig.set),jg=function(e){if(_I(e)){var t,i=e.body;if(DI(i)===cg)return t=e.headers?new mg(e.headers):new mg,xg(t,"content-type")||Pg(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),$I(e,{body:eg(0,qI(i)),headers:eg(0,t)})}return e};if(QI(hg)&&LI({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return hg(e,arguments.length>1?jg(arguments[1]):{})}}),QI(bg)){var Qg=function(e){return jI(this,pg),new bg(e,arguments.length>1?jg(arguments[1]):{})};pg.constructor=Qg,Qg.prototype=pg,LI({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Qg})}}var Mg,Eg=cl,Dg=me,Og=xp,_g=o,qg=jl,$g=b,ey=nn,ty=Vc,iy=Ds,ny=W,ly=iI,oy=function(e){var t=aI(e),i=sI(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=oI(l,n>2?arguments[2]:void 0));var c,a,r,d,s,u,Z=bI(t),h=0;if(!Z||this===mI&&dI(Z))for(c=uI(t),a=i?new this(c):mI(c);c>h;h++)u=o?l(t[h],h):t[h],ZI(a,h,u);else for(s=(d=hI(t,Z)).next,a=i?new this:[];!(r=cI(s,d)).done;h++)u=o?rI(d,l,[r.value,h],!0):r.value,ZI(a,h,u);return a.length=h,a},cy=Gu,ay=Ja.codeAt,ry=function(e){var t,i,n=[],l=YI(fI(KI(e),yI,"."),".");for(t=0;t<l.length;t++)i=l[t],vI(n,WI(gI,i)?"xn--"+HI(i):i);return SI(n,".")},dy=ma,sy=oa,uy=ip,Zy={URLSearchParams:wg,getState:dg},hy=Bi,by=hy.set,my=hy.getterFor("URL"),py=Zy.URLSearchParams,Iy=Zy.getState,gy=_g.URL,yy=_g.TypeError,Gy=_g.parseInt,Xy=Math.floor,Wy=Math.pow,Cy=$g("".charAt),Vy=$g(/./.exec),Ry=$g([].join),Sy=$g(1..toString),vy=$g([].pop),fy=$g([].push),Yy=$g("".replace),Ky=$g([].shift),Ny=$g("".split),Jy=$g("".slice),Hy=$g("".toLowerCase),Ly=$g([].unshift),ky="Invalid scheme",Ay="Invalid host",Uy="Invalid port",Ty=/[a-z]/i,By=/[\d+-.a-z]/i,Fy=/\d/,wy=/^0x/i,zy=/^[0-7]+$/,xy=/^\d+$/,Py=/^[\da-f]+$/i,jy=/[\0\t\n\r #%/:<>?@[\\\]^|]/,Qy=/[\0\t\n\r #/:<>?@[\\\]^|]/,My=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,Ey=/[\t\n\r]/g,Dy=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)Ly(t,e%256),e=Xy(e/256);return Ry(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,i=1,n=null,l=0,o=0;o<8;o++)0!==e[o]?(l>i&&(t=n,i=l),n=null,l=0):(null===n&&(n=o),++l);return l>i&&(t=n,i=l),t}(e),i=0;i<8;i++)l&&0===e[i]||(l&&(l=!1),n===i?(t+=i?":":"::",l=!0):(t+=Sy(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},Oy={},_y=ly({},Oy,{" ":1,'"':1,"<":1,">":1,"`":1}),qy=ly({},_y,{"#":1,"?":1,"{":1,"}":1}),$y=ly({},qy,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),eG=function(e,t){var i=ay(e,0);return i>32&&i<127&&!ny(t,e)?e:encodeURIComponent(e)},tG={ftp:21,file:null,http:80,https:443,ws:80,wss:443},iG=function(e,t){var i;return 2==e.length&&Vy(Ty,Cy(e,0))&&(":"==(i=Cy(e,1))||!t&&"|"==i)},nG=function(e){var t;return e.length>1&&iG(Jy(e,0,2))&&(2==e.length||"/"===(t=Cy(e,2))||"\\"===t||"?"===t||"#"===t)},lG=function(e){return"."===e||"%2e"===Hy(e)},oG={},cG={},aG={},rG={},dG={},sG={},uG={},ZG={},hG={},bG={},mG={},pG={},IG={},gG={},yG={},GG={},XG={},WG={},CG={},VG={},RG={},SG=function(e,t,i){var n,l,o,c=dy(e);if(t){if(l=this.parse(c))throw yy(l);this.searchParams=null}else{if(void 0!==i&&(n=new SG(i,!0)),l=this.parse(c,null,n))throw yy(l);(o=Iy(new py)).bindURL(this),this.searchParams=o}};SG.prototype={type:"URL",parse:function(e,t,i){var n,l,o,c,a,r=this,d=t||oG,s=0,u="",Z=!1,h=!1,b=!1;for(e=dy(e),t||(r.scheme="",r.username="",r.password="",r.host=null,r.port=null,r.path=[],r.query=null,r.fragment=null,r.cannotBeABaseURL=!1,e=Yy(e,My,"")),e=Yy(e,Ey,""),n=oy(e);s<=n.length;){switch(l=n[s],d){case oG:if(!l||!Vy(Ty,l)){if(t)return ky;d=aG;continue}u+=Hy(l),d=cG;break;case cG:if(l&&(Vy(By,l)||"+"==l||"-"==l||"."==l))u+=Hy(l);else{if(":"!=l){if(t)return ky;u="",d=aG,s=0;continue}if(t&&(r.isSpecial()!=ny(tG,u)||"file"==u&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=u,t)return void(r.isSpecial()&&tG[r.scheme]==r.port&&(r.port=null));u="","file"==r.scheme?d=gG:r.isSpecial()&&i&&i.scheme==r.scheme?d=rG:r.isSpecial()?d=ZG:"/"==n[s+1]?(d=dG,s++):(r.cannotBeABaseURL=!0,fy(r.path,""),d=CG)}break;case aG:if(!i||i.cannotBeABaseURL&&"#"!=l)return ky;if(i.cannotBeABaseURL&&"#"==l){r.scheme=i.scheme,r.path=cy(i.path),r.query=i.query,r.fragment="",r.cannotBeABaseURL=!0,d=RG;break}d="file"==i.scheme?gG:sG;continue;case rG:if("/"!=l||"/"!=n[s+1]){d=sG;continue}d=hG,s++;break;case dG:if("/"==l){d=bG;break}d=WG;continue;case sG:if(r.scheme=i.scheme,l==Mg)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.query=i.query;else if("/"==l||"\\"==l&&r.isSpecial())d=uG;else if("?"==l)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.query="",d=VG;else{if("#"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.path.length--,d=WG;continue}r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cy(i.path),r.query=i.query,r.fragment="",d=RG}break;case uG:if(!r.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,d=WG;continue}d=bG}else d=hG;break;case ZG:if(d=hG,"/"!=l||"/"!=Cy(u,s+1))continue;s++;break;case hG:if("/"!=l&&"\\"!=l){d=bG;continue}break;case bG:if("@"==l){Z&&(u="%40"+u),Z=!0,o=oy(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var I=eG(p,$y);b?r.password+=I:r.username+=I}else b=!0}u=""}else if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(Z&&""==u)return"Invalid authority";s-=oy(u).length+1,u="",d=mG}else u+=l;break;case mG:case pG:if(t&&"file"==r.scheme){d=GG;continue}if(":"!=l||h){if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(r.isSpecial()&&""==u)return Ay;if(t&&""==u&&(r.includesCredentials()||null!==r.port))return;if(c=r.parseHost(u))return c;if(u="",d=XG,t)return;continue}"["==l?h=!0:"]"==l&&(h=!1),u+=l}else{if(""==u)return Ay;if(c=r.parseHost(u))return c;if(u="",d=IG,t==pG)return}break;case IG:if(!Vy(Fy,l)){if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()||t){if(""!=u){var g=Gy(u,10);if(g>65535)return Uy;r.port=r.isSpecial()&&g===tG[r.scheme]?null:g,u=""}if(t)return;d=XG;continue}return Uy}u+=l;break;case gG:if(r.scheme="file","/"==l||"\\"==l)d=yG;else{if(!i||"file"!=i.scheme){d=WG;continue}if(l==Mg)r.host=i.host,r.path=cy(i.path),r.query=i.query;else if("?"==l)r.host=i.host,r.path=cy(i.path),r.query="",d=VG;else{if("#"!=l){nG(Ry(cy(n,s),""))||(r.host=i.host,r.path=cy(i.path),r.shortenPath()),d=WG;continue}r.host=i.host,r.path=cy(i.path),r.query=i.query,r.fragment="",d=RG}}break;case yG:if("/"==l||"\\"==l){d=GG;break}i&&"file"==i.scheme&&!nG(Ry(cy(n,s),""))&&(iG(i.path[0],!0)?fy(r.path,i.path[0]):r.host=i.host),d=WG;continue;case GG:if(l==Mg||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&iG(u))d=WG;else if(""==u){if(r.host="",t)return;d=XG}else{if(c=r.parseHost(u))return c;if("localhost"==r.host&&(r.host=""),t)return;u="",d=XG}continue}u+=l;break;case XG:if(r.isSpecial()){if(d=WG,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=Mg&&(d=WG,"/"!=l))continue}else r.fragment="",d=RG;else r.query="",d=VG;break;case WG:if(l==Mg||"/"==l||"\\"==l&&r.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(a=Hy(a=u))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==l||"\\"==l&&r.isSpecial()||fy(r.path,"")):lG(u)?"/"==l||"\\"==l&&r.isSpecial()||fy(r.path,""):("file"==r.scheme&&!r.path.length&&iG(u)&&(r.host&&(r.host=""),u=Cy(u,0)+":"),fy(r.path,u)),u="","file"==r.scheme&&(l==Mg||"?"==l||"#"==l))for(;r.path.length>1&&""===r.path[0];)Ky(r.path);"?"==l?(r.query="",d=VG):"#"==l&&(r.fragment="",d=RG)}else u+=eG(l,qy);break;case CG:"?"==l?(r.query="",d=VG):"#"==l?(r.fragment="",d=RG):l!=Mg&&(r.path[0]+=eG(l,Oy));break;case VG:t||"#"!=l?l!=Mg&&("'"==l&&r.isSpecial()?r.query+="%27":r.query+="#"==l?"%23":eG(l,Oy)):(r.fragment="",d=RG);break;case RG:l!=Mg&&(r.fragment+=eG(l,_y))}s++}},parseHost:function(e){var t,i,n;if("["==Cy(e,0)){if("]"!=Cy(e,e.length-1))return Ay;if(t=function(e){var t,i,n,l,o,c,a,r=[0,0,0,0,0,0,0,0],d=0,s=null,u=0,Z=function(){return Cy(e,u)};if(":"==Z()){if(":"!=Cy(e,1))return;u+=2,s=++d}for(;Z();){if(8==d)return;if(":"!=Z()){for(t=i=0;i<4&&Vy(Py,Z());)t=16*t+Gy(Z(),16),u++,i++;if("."==Z()){if(0==i)return;if(u-=i,d>6)return;for(n=0;Z();){if(l=null,n>0){if(!("."==Z()&&n<4))return;u++}if(!Vy(Fy,Z()))return;for(;Vy(Fy,Z());){if(o=Gy(Z(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}r[d]=256*r[d]+l,2!=++n&&4!=n||d++}if(4!=n)return;break}if(":"==Z()){if(u++,!Z())return}else if(Z())return;r[d++]=t}else{if(null!==s)return;u++,s=++d}}if(null!==s)for(c=d-s,d=7;0!=d&&c>0;)a=r[d],r[d--]=r[s+c-1],r[s+--c]=a;else if(8!=d)return;return r}(Jy(e,1,-1)),!t)return Ay;this.host=t}else if(this.isSpecial()){if(e=ry(e),Vy(jy,e))return Ay;if(t=function(e){var t,i,n,l,o,c,a,r=Ny(e,".");if(r.length&&""==r[r.length-1]&&r.length--,(t=r.length)>4)return e;for(i=[],n=0;n<t;n++){if(""==(l=r[n]))return e;if(o=10,l.length>1&&"0"==Cy(l,0)&&(o=Vy(wy,l)?16:8,l=Jy(l,8==o?1:2)),""===l)c=0;else{if(!Vy(10==o?xy:8==o?zy:Py,l))return e;c=Gy(l,o)}fy(i,c)}for(n=0;n<t;n++)if(c=i[n],n==t-1){if(c>=Wy(256,5-t))return null}else if(c>255)return null;for(a=vy(i),n=0;n<i.length;n++)a+=i[n]*Wy(256,3-n);return a}(e),null===t)return Ay;this.host=t}else{if(Vy(Qy,e))return Ay;for(t="",i=oy(e),n=0;n<i.length;n++)t+=eG(i[n],Oy);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return ny(tG,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&iG(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,i=e.username,n=e.password,l=e.host,o=e.port,c=e.path,a=e.query,r=e.fragment,d=t+":";return null!==l?(d+="//",e.includesCredentials()&&(d+=i+(n?":"+n:"")+"@"),d+=Dy(l),null!==o&&(d+=":"+o)):"file"==t&&(d+="//"),d+=e.cannotBeABaseURL?c[0]:c.length?"/"+Ry(c,"/"):"",null!==a&&(d+="?"+a),null!==r&&(d+="#"+r),d},setHref:function(e){var t=this.parse(e);if(t)throw yy(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new vG(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+Dy(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(dy(e)+":",oG)},getUsername:function(){return this.username},setUsername:function(e){var t=oy(dy(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=eG(t[i],$y)}},getPassword:function(){return this.password},setPassword:function(e){var t=oy(dy(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=eG(t[i],$y)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?Dy(e):Dy(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,mG)},getHostname:function(){var e=this.host;return null===e?"":Dy(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,pG)},getPort:function(){var e=this.port;return null===e?"":dy(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=dy(e))?this.port=null:this.parse(e,IG))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+Ry(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,XG))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=dy(e))?this.query=null:("?"==Cy(e,0)&&(e=Jy(e,1)),this.query="",this.parse(e,VG)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=dy(e))?("#"==Cy(e,0)&&(e=Jy(e,1)),this.fragment="",this.parse(e,RG)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var vG=function(e){var t=iy(this,fG),i=uy(arguments.length,1)>1?arguments[1]:void 0,n=by(t,new SG(e,!1,i));Dg||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},fG=vG.prototype,YG=function(e,t){return{get:function(){return my(this)[e]()},set:t&&function(e){return my(this)[t](e)},configurable:!0,enumerable:!0}};if(Dg&&(ty(fG,"href",YG("serialize","setHref")),ty(fG,"origin",YG("getOrigin")),ty(fG,"protocol",YG("getProtocol","setProtocol")),ty(fG,"username",YG("getUsername","setUsername")),ty(fG,"password",YG("getPassword","setPassword")),ty(fG,"host",YG("getHost","setHost")),ty(fG,"hostname",YG("getHostname","setHostname")),ty(fG,"port",YG("getPort","setPort")),ty(fG,"pathname",YG("getPathname","setPathname")),ty(fG,"search",YG("getSearch","setSearch")),ty(fG,"searchParams",YG("getSearchParams")),ty(fG,"hash",YG("getHash","setHash"))),ey(fG,"toJSON",(function(){return my(this).serialize()}),{enumerable:!0}),ey(fG,"toString",(function(){return my(this).serialize()}),{enumerable:!0}),gy){var KG=gy.createObjectURL,NG=gy.revokeObjectURL;KG&&ey(vG,"createObjectURL",qg(KG,gy)),NG&&ey(vG,"revokeObjectURL",qg(NG,gy))}sy(vG,"URL"),Eg({global:!0,constructor:!0,forced:!Og,sham:!Dg},{URL:vG});var JG=Ne;function HG(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}function LG(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}cl({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return JG(URL.prototype.toString,this)}}),e.ResponseMode=void 0,function(e){e.formPost="form_post",e.query="query"}(e.ResponseMode||(e.ResponseMode={}));e.Stores=void 0,function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(e.Stores||(e.Stores={}));const kG="refresh_token_timer",AG=["RS256","RS512","RS384","PS256"],UG="code",TG="session_state",BG="sign_out_url",FG="sign_out_success",wG="state";var zG;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(zG||(zG={}));class xG{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class PG{constructor(){}static filterClaimsFromIDTokenPayload(e){const t=Object.assign({},e);null==t||delete t.iss,null==t||delete t.aud,null==t||delete t.exp,null==t||delete t.iat,null==t||delete t.acr,null==t||delete t.amr,null==t||delete t.azp,null==t||delete t.auth_time,null==t||delete t.nonce,null==t||delete t.c_hash,null==t||delete t.at_hash,null==t||delete t.nbf,null==t||delete t.isk,null==t||delete t.sid;const i={};return Object.entries(t).forEach((e=>{let[t,n]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");i[l]=n})),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const i=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(i):"request_".concat(i)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}PG.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const i=e.sub.split(t);return i.length>2?i[i.length-1]:""};class jG{constructor(e,t){this._dataLayer=e,this._config=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return LG(this,void 0,void 0,(function*(){const t={},i=yield this._config();return i.endpoints&&Object.keys(i.endpoints).forEach((e=>{const n=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[n]=(null==i?void 0:i.endpoints)?i.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return LG(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"];if(!t.endpoints||!Object.keys(null==t?void 0:t.endpoints).every((e=>{const t=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));return i.includes(t)})))throw new xG("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");return t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return LG(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new xG("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""}));const n={authorization_endpoint:"".concat(i).concat("/oauth2/authorize"),end_session_endpoint:"".concat(i).concat("/oidc/logout"),issuer:"".concat(i).concat("/oauth2/token"),jwks_uri:"".concat(i).concat("/oauth2/jwks"),check_session_iframe:"".concat(i).concat("/oidc/checksession"),revocation_endpoint:"".concat(i).concat("/oauth2/revoke"),token_endpoint:"".concat(i).concat("/oauth2/token"),userinfo_endpoint:"".concat(i).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},n),e)}))}validateIdToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,i=yield this._config();if(!t||0===t.trim().length)throw new xG("JS_AUTH_HELPER-VIT-NF01","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.");let n;try{n=yield fetch(t,{credentials:i.sendCookiesInRequests?zG.Include:zG.SameOrigin})}catch(t){throw new xG("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=t?t:"The request sent to get the jwks from the server failed.")}if(200!==n.status||!n.ok)throw new xG("JS-AUTH_HELPER-VIT-HE03","Invalid response status received for jwks request (".concat(n.statusText,")."),yield n.json());const l=(yield this._oidcProviderMetaData()).issuer,{keys:o}=yield n.json(),c=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],o);return this._cryptoHelper.isValidIdToken(e,c,(yield this._config()).clientID,null!=l?l:"",this._cryptoHelper.decodeIDToken(e).sub,(yield this._config()).clockTolerance)}))}getAuthenticatedUserInfo(e){var t,i,n,l;const o=this._cryptoHelper.decodeIDToken(e),c=PG.getTenantDomainFromIdTokenPayload(o),a=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",r=null!==(i=o.given_name)&&void 0!==i?i:"",d=null!==(n=o.family_name)&&void 0!==n?n:"",s=r&&d?"".concat(r," ").concat(d):r||d||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:s;return Object.assign({displayName:u,tenantDomain:c,username:a},PG.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return LG(this,void 0,void 0,(function*(){let n="openid";const l=yield this._config(),o=yield this._dataLayer.getSessionData(t);return l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),n=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(i=l.clientSecret)&&void 0!==i?i:"")}))}clearUserSessionData(e){return LG(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return LG(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new xG("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const i=yield e.json();if(i.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(i.id_token).then((()=>LG(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(i,t);const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return Promise.resolve(e)}))));{const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return yield this._dataLayer.setSessionData(i,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return LG(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getTemporaryData(e),n=[];Object.keys(i).forEach((e=>{e.startsWith("pkce_code_verifier")&&n.push(e)}));const l=n.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class QG{constructor(e){this._cryptoUtils=e}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}getJWKForTheIdToken(e,t){const i=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(i.kid===e.kid)return e;throw new xG("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,i,n,l,o){return this._cryptoUtils.verifyJwt(e,t,AG,i,n,l,o).then((e=>e?Promise.resolve(!0):Promise.reject(new xG("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))))}decodeIDToken(e){try{const t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new xG("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class MG{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new QG(t),this._authenticationHelper=new jG(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(e,t){var i,n,l;return LG(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),c=yield this._config();if(!o||0===o.trim().length)throw new xG("JS-AUTH_CORE-GAU-NF01","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");const a=new URL(o),r=new Map;r.set("response_type","code"),r.set("client_id",c.clientID);let d="openid";c.scope&&c.scope.length>0&&(c.scope.includes("openid")||c.scope.push("openid"),d=c.scope.join(" ")),r.set("scope",d),r.set("redirect_uri",c.signInRedirectURL),c.responseMode&&r.set("response_mode",c.responseMode);const s=yield this._authenticationHelper.generatePKCEKey(t);if(c.enablePKCE){const e=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeVerifier(),l=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(e);yield this._dataLayer.setTemporaryDataParameter(s,e,t),r.set("code_challenge_method","S256"),r.set("code_challenge",l)}c.prompt&&r.set("prompt",c.prompt);const u=e;if(u)for(const[e,t]of Object.entries(u))if(""!=e&&""!=t&&"state"!==e){const i=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));r.set(i,t.toString())}r.set("state",PG.generateStateParamForRequestCorrelation(s,u?null===(l=u.state)||void 0===l?void 0:l.toString():""));for(const[e,t]of r.entries())a.searchParams.append(e,t);return a.toString()}))}requestAccessToken(e,t,i,n){return LG(this,void 0,void 0,(function*(){const l=(yield this._oidcProviderMetaData()).token_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new xG("JS-AUTH_CORE-RAT1-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");t&&(yield this._dataLayer.setSessionDataParameter("session_state",t,n));const c=[];c.push("client_id=".concat(o.clientID)),o.clientSecret&&o.clientSecret.trim().length>0&&c.push("client_secret=".concat(o.clientSecret));const a=e;let r;c.push("code=".concat(a)),c.push("grant_type=authorization_code"),c.push("redirect_uri=".concat(o.signInRedirectURL)),o.enablePKCE&&(c.push("code_verifier=".concat(yield this._dataLayer.getTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(i),n));try{r=yield fetch(l,{body:c.join("&"),credentials:o.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(PG.getTokenRequestHeaders()),method:"POST"})}catch(l){throw new xG("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=l?l:"The request to get the access token from the server failed.")}if(!r.ok)throw new xG("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(r.statusText),yield r.json());return yield this._authenticationHelper.handleTokenResponse(r,n)}))}refreshAccessToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config(),n=yield this._dataLayer.getSessionData(e);if(!n.refresh_token)throw new xG("JS-AUTH_CORE-RAT2-NF01","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled.");if(!t||0===t.trim().length)throw new xG("JS-AUTH_CORE-RAT2-NF02","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty.");const l=[];let o;l.push("client_id=".concat(i.clientID)),l.push("refresh_token=".concat(n.refresh_token)),l.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&l.push("client_secret=".concat(i.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:i.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(PG.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new xG("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t?t:"The request to refresh the access token failed.")}if(!o.ok)throw new xG("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with ".concat(o.statusText),yield o.json());return this._authenticationHelper.handleTokenResponse(o,e)}))}revokeAccessToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,i=yield this._config();if(!t||0===t.trim().length)throw new xG("JS-AUTH_CORE-RAT3-NF01","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty.");const n=[];let l;n.push("client_id=".concat(i.clientID)),n.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),n.push("token_type_hint=access_token");try{l=yield fetch(t,{body:n.join("&"),credentials:i.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(PG.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new xG("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t?t:"The request sent to revoke the access token failed.")}if(200!==l.status||!l.ok)throw new xG("JS-AUTH_CORE-RAT3-HE03","Invalid response status received for revoke access token request (".concat(l.statusText,")."),yield l.json());return this._authenticationHelper.clearUserSessionData(e),Promise.resolve(l)}))}requestCustomGrant(e,t){return LG(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData(),n=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:i.token_endpoint,!l||0===l.trim().length)throw new xG("JS-AUTH_CORE-RCG-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");const o=yield Promise.all(Object.entries(e.data).map((e=>{let[i,n]=e;return LG(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let c=Object.assign({},PG.getTokenRequestHeaders());e.attachToken&&(c=Object.assign(Object.assign({},c),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const a={body:o.join("&"),credentials:n.sendCookiesInRequests?zG.Include:zG.SameOrigin,headers:new Headers(c),method:"POST"};let r;try{r=yield fetch(l,a)}catch(e){throw new xG("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=e?e:"The request sent to get the custom grant failed.")}if(200!==r.status||!r.ok)throw new xG("JS-AUTH_CORE-RCG-HE03","Invalid response status received for the custom grant request. (".concat(r.statusText,")"),yield r.json());return e.returnsSession?this._authenticationHelper.handleTokenResponse(r,t):Promise.resolve(yield r.json())}))}getBasicUserInfo(e){return LG(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),i=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let n={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(i).forEach((e=>{void 0!==i[e]&&""!==i[e]&&null!==i[e]||delete i[e]})),n=Object.assign(Object.assign({},n),i),n}))}getDecodedIDToken(e){return LG(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return LG(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return LG(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return LG(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const i=t.wellKnownEndpoint;if(i){let e;try{if(e=yield fetch(i),200!==e.status||!e.ok)throw new Error}catch(t){throw new xG("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.")}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(yield e.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(t.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(t){throw new xG("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly())}catch(t){throw new xG("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by explicitly failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var e,t,i,n,l,o,c,a,r,d;return LG(this,void 0,void 0,(function*(){const s=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=s.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=s.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=s.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=s.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=s.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=s.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(c=s.registration_endpoint)&&void 0!==c?c:"",revocationEndpoint:null!==(a=s.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=s.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(d=s.userinfo_endpoint)&&void 0!==d?d:""}}))}getSignOutURL(e){var t,i,n;return LG(this,void 0,void 0,(function*(){const l=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new xG("JS-AUTH_CORE-GSOU-NF01","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");const c=null!==(i=null==o?void 0:o.signOutRedirectURL)&&void 0!==i?i:null==o?void 0:o.signInRedirectURL;if(!c||0===c.trim().length)throw new xG("JS-AUTH_CORE-GSOU-NF03","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");let a="client_id=".concat(o.clientID);if(o.sendIdTokenInLogoutRequest){const t=null===(n=yield this._dataLayer.getSessionData(e))||void 0===n?void 0:n.id_token;if(!t||0===t.trim().length)throw new xG("JS-AUTH_CORE-GSOU-NF02","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");a="id_token_hint=".concat(t)}return"".concat(l,"?")+a+"&post_logout_redirect_uri=".concat(c,"&state=sign_out_success")}))}clearUserSessionData(e){return LG(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return LG(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.access_token}))}isAuthenticated(e){return LG(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken(e))}))}getPKCECode(e,t){return LG(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return LG(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(PG.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return LG(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}class EG{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return LG(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign(Object.assign({},l),t),c=JSON.stringify(o);yield this._store.setData(e,c)}))}setValue(e,t,i){var n;return LG(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,o=l&&JSON.parse(l),c=Object.assign(Object.assign({},o),{[t]:i}),a=JSON.stringify(c);yield this._store.setData(e,a)}))}removeValue(e,t){var i;return LG(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign({},l);delete o[t];const c=JSON.stringify(o);yield this._store.setData(e,c)}))}_resolveKey(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}setConfigData(t){return LG(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t)}))}setOIDCProviderMetaData(t){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}setTemporaryData(t,i){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,i),t)}))}setSessionData(t,i){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.SessionData,i),t)}))}setCustomData(e,t,i){return LG(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var t;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var i;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,t)))&&void 0!==i?i:null)}))}getSessionData(t){var i;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.SessionData,t)))&&void 0!==i?i:null)}))}getCustomData(e,t){var i;return LG(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==i?i:null)}))}removeConfigData(){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.ConfigData))}))}removeOIDCProviderMetaData(){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData))}))}removeTemporaryData(t){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t))}))}removeSessionData(t){return LG(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.SessionData,t))}))}getConfigDataParameter(t){return LG(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.ConfigData));return i&&JSON.parse(i)[t]}))}getOIDCProviderMetaDataParameter(t){return LG(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));return i&&JSON.parse(i)[t]}))}getTemporaryDataParameter(t,i){return LG(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,i));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,i){return LG(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.SessionData,i));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.ConfigData),t,i)}))}setOIDCProviderMetaDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,i)}))}setTemporaryDataParameter(t,i,n){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.TemporaryData,n),t,i)}))}setSessionDataParameter(t,i,n){return LG(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.SessionData,n),t,i)}))}removeConfigDataParameter(t){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.TemporaryData,i),t)}))}removeSessionDataParameter(t,i){return LG(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.SessionData,i),t)}))}}const DG={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class OG{
2
2
  /**
3
3
  * This is the constructor method that returns an instance of the .
4
4
  *
@@ -428,7 +428,7 @@ constructor(e,t){OG._instanceID?OG._instanceID+=1:OG._instanceID=0,this._dataLay
428
428
  * @memberof AsgardeoAuthClient
429
429
  *
430
430
  * @preserve
431
- */updateConfig(e){return LG(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return LG(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function _G(e,t,i){var n=void 0===t?null:t,l=function(e,t){var i=atob(e);if(t){for(var n=new Uint8Array(i.length),l=0,o=i.length;l<o;++l)n[l]=i.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(e,void 0!==i&&i),o=l.indexOf("\n",10)+1,c=l.substring(o)+(n?"//# sourceMappingURL="+n:""),a=new Blob([c],{type:"application/javascript"});return URL.createObjectURL(a)}var qG,$G,eX,tX,iX=(qG="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGU9PntsZXRbdCxyXT1lO2NvbnN0IGk9dC5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO25baV09cn0pKSxufXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fXN0YXRpYyBnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZSx0KXtjb25zdCBuPXBhcnNlSW50KGUuc3BsaXQoIiMiKVsxXSk7cmV0dXJuIHQ/IiIuY29uY2F0KHQsIl9yZXF1ZXN0XyIpLmNvbmNhdChuKToicmVxdWVzdF8iLmNvbmNhdChuKX1zdGF0aWMgZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIjtjb25zdCBuPWUuc3ViLnNwbGl0KHQpO3JldHVybiBuLmxlbmd0aD4yP25bbi5sZW5ndGgtMV06IiJ9O2NsYXNzIGx7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9bn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLG49WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7cmV0dXJuIG4uaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKG49Pntjb25zdCByPW4ucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7ZVtyXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW25dOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLG49dC5iYXNlVXJsO2lmKCFuKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKG49Pntjb25zdCByPW4ucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7ZVtyXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW25dOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi9hdXRob3JpemUiKSxlbmRfc2Vzc2lvbl9lbmRwb2ludDoiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9sb2dvdXQiKSxpc3N1ZXI6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLGp3a3NfdXJpOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvandrcyIpLGNoZWNrX3Nlc3Npb25faWZyYW1lOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vaWRjL2NoZWNrc2Vzc2lvbiIpLHJldm9jYXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi9yZXZva2UiKSx0b2tlbl9lbmRwb2ludDoiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL3Rva2VuIiksdXNlcmluZm9fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi91c2VyaW5mbyIpfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHIpLGUpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpKS5qd2tzX3VyaSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKU19BVVRIX0hFTFBFUi1WSVQtTkYwMSIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtsZXQgcjt0cnl7cj15aWVsZCBmZXRjaCh0LHtjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2lufSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVZJVC1ORTAyIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZigyMDAhPT1yLnN0YXR1c3x8IXIub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVZJVC1IRTAzIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdCAoIi5jb25jYXQoci5zdGF0dXNUZXh0LCIpLiIpLHlpZWxkIHIuanNvbigpKTtjb25zdCBpPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5pc3N1ZXIse2tleXM6b309eWllbGQgci5qc29uKCkscz15aWVsZCB0aGlzLl9jcnlwdG9IZWxwZXIuZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sbyk7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5pc1ZhbGlkSWRUb2tlbihlLHMsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbGllbnRJRCxudWxsIT1pP2k6IiIsdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkuc3ViLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xvY2tUb2xlcmFuY2UpfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIixjPW51bGwhPT0obj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1uP246IiIsbD1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixkPWMmJmw/IiIuY29uY2F0KGMsIiAiKS5jb25jYXQobCk6Y3x8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx1LmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgcj15aWVsZCBlLmpzb24oKTtpZihyLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKHIuaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbik7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpyLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6ci5jcmVhdGVkX2F0LGV4cGlyZXNJbjpyLmV4cGlyZXNfaW4saWRUb2tlbjpyLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpyLnJlZnJlc2hfdG9rZW4sc2NvcGU6ci5zY29wZSx0b2tlblR5cGU6ci50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbiksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLHI9W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJnIucHVzaChlKX0pKTtjb25zdCBpPXIuc29ydCgpLnBvcCgpO3JldHVybiJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxKX0pKX19Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihuLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBjKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQsbixyLGkscyl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLnZlcmlmeUp3dChlLHQsbyxuLHIsaSxzKS50aGVuKChlPT5lP1Byb21pc2UucmVzb2x2ZSghMCk6UHJvbWlzZS5yZWplY3QobmV3IGMoIkpTLUNSWVBUT19IRUxQRVItSVZJVC1JVjAxIiwiSW52YWxpZCBJRCB0b2tlbi4iLCJJRCB0b2tlbiB2YWxpZGF0aW9uIHJldHVybmVkIGZhbHNlIikpKSl9ZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD10aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZS5zcGxpdCgiLiIpWzFdKTtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtRElULUlWMDEiLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGh7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9jcnlwdG9VdGlscz1uLHRoaXMuX2NyeXB0b0hlbHBlcj1uZXcgZChuKSx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgbChlLHRoaXMuX2NyeXB0b0hlbHBlciksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCl9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3ZhciByLGksbztyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBhPW5ldyBVUkwodCksbD1uZXcgTWFwO2wuc2V0KCJyZXNwb25zZV90eXBlIiwiY29kZSIpLGwuc2V0KCJjbGllbnRfaWQiLHMuY2xpZW50SUQpO2xldCBkPSJvcGVuaWQiO3Muc2NvcGUmJnMuc2NvcGUubGVuZ3RoPjAmJihzLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8cy5zY29wZS5wdXNoKCJvcGVuaWQiKSxkPXMuc2NvcGUuam9pbigiICIpKSxsLnNldCgic2NvcGUiLGQpLGwuc2V0KCJyZWRpcmVjdF91cmkiLHMuc2lnbkluUmVkaXJlY3RVUkwpLHMucmVzcG9uc2VNb2RlJiZsLnNldCgicmVzcG9uc2VfbW9kZSIscy5yZXNwb25zZU1vZGUpO2NvbnN0IGg9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KG4pO2lmKHMuZW5hYmxlUEtDRSl7Y29uc3QgZT1udWxsPT09KHI9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXRDb2RlVmVyaWZpZXIoKSx0PW51bGw9PT0oaT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaCxlLG4pLGwuc2V0KCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2IiksbC5zZXQoImNvZGVfY2hhbGxlbmdlIix0KX1zLnByb21wdCYmbC5zZXQoInByb21wdCIscy5wcm9tcHQpO2NvbnN0IGY9ZTtpZihmKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMoZikpaWYoIiIhPWUmJiIiIT10JiYic3RhdGUiIT09ZSl7Y29uc3Qgbj1lLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2wuc2V0KG4sdC50b1N0cmluZygpKX1sLnNldCgic3RhdGUiLHUuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGgsZj9udWxsPT09KG89Zi5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpO2Zvcihjb25zdFtlLHRdb2YgbC5lbnRyaWVzKCkpYS5zZWFyY2hQYXJhbXMuYXBwZW5kKGUsdCk7cmV0dXJuIGEudG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO24mJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLG4saSkpO2NvbnN0IHM9W107cy5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoby5jbGllbnRJRCkpLG8uY2xpZW50U2VjcmV0JiZvLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJnMucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChvLmNsaWVudFNlY3JldCkpO2NvbnN0IGw9ZTtsZXQgZDtzLnB1c2goImNvZGU9Ii5jb25jYXQobCkpLHMucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxzLnB1c2goInJlZGlyZWN0X3VyaT0iLmNvbmNhdChvLnNpZ25JblJlZGlyZWN0VVJMKSksby5lbmFibGVQS0NFJiYocy5wdXNoKCJjb2RlX3ZlcmlmaWVyPSIuY29uY2F0KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSk7dHJ5e2Q9eWllbGQgZmV0Y2godCx7Ym9keTpzLmpvaW4oIiYiKSxjcmVkZW50aWFsczpvLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkUwMiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKCFkLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1IRTAzIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggIi5jb25jYXQoZC5zdGF0dXNUZXh0KSx5aWVsZCBkLmpzb24oKSk7cmV0dXJuIHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxpKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2lmKCFyLnJlZnJlc2hfdG9rZW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDEiLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBBc2dhcmRlbyBkb2Vzbid0IHJldHVybiBhIHJlZnJlc2ggdG9rZW4gaWYgdGhlIHJlZnJlc2ggdG9rZW4gZ3JhbnQgaXMgbm90IGVuYWJsZWQuIik7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDIiLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBpPVtdO2xldCBvO2kucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxpLnB1c2goInJlZnJlc2hfdG9rZW49Ii5jb25jYXQoci5yZWZyZXNoX3Rva2VuKSksaS5wdXNoKCJncmFudF90eXBlPXJlZnJlc2hfdG9rZW4iKSxuLmNsaWVudFNlY3JldCYmbi5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZpLnB1c2goImNsaWVudF9zZWNyZXQ9Ii5jb25jYXQobi5jbGllbnRTZWNyZXQpKTt0cnl7bz15aWVsZCBmZXRjaCh0LHtib2R5Omkuam9pbigiJiIpLGNyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1OUjAzIiwiUmVmcmVzaCBhY2Nlc3MgdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoIW8ub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLUhFMDQiLCJSZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChvLnN0YXR1c1RleHQpLHlpZWxkIG8uanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShvLGUpfSkpfXJldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkucmV2b2NhdGlvbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1ORjAxIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcj1bXTtsZXQgaTtyLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChuLmNsaWVudElEKSksci5wdXNoKCJ0b2tlbj0iLmNvbmNhdCgoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW4pKSxyLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKTt0cnl7aT15aWVsZCBmZXRjaCh0LHtib2R5OnIuam9pbigiJiIpLGNyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1ORTAyIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gcmV2b2tlIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKDIwMCE9PWkuc3RhdHVzfHwhaS5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciByZXZva2UgYWNjZXNzIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGkuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBpLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLFByb21pc2UucmVzb2x2ZShpKX0pKX1yZXF1ZXN0Q3VzdG9tR3JhbnQoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBvO2lmKG89ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnIudG9rZW5fZW5kcG9pbnQsIW98fDA9PT1vLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPXlpZWxkIFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGUuZGF0YSkubWFwKChlPT57bGV0W3IsaV09ZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGksbik7cmV0dXJuIiIuY29uY2F0KHIsIj0iKS5jb25jYXQoZSl9KSl9KSkpO2xldCBsPU9iamVjdC5hc3NpZ24oe30sdS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpO2UuYXR0YWNoVG9rZW4mJihsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEobikpLmFjY2Vzc190b2tlbil9KSk7Y29uc3QgZD17Ym9keTpzLmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMobCksbWV0aG9kOiJQT1NUIn07bGV0IGg7dHJ5e2g9eWllbGQgZmV0Y2gobyxkKX1jYXRjaChlKXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJDRy1ORTAyIiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPWU/ZToiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIil9aWYoMjAwIT09aC5zdGF0dXN8fCFoLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoIi5jb25jYXQoaC5zdGF0dXNUZXh0LCIpIikseWllbGQgaC5qc29uKCkpO3JldHVybiBlLnJldHVybnNTZXNzaW9uP3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoaCxuKTpQcm9taXNlLnJlc29sdmUoeWllbGQgaC5qc29uKCkpfSkpfWdldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSxuPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT10P3ZvaWQgMDp0LmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChlPT57dm9pZCAwIT09bltlXSYmIiIhPT1uW2VdJiZudWxsIT09bltlXXx8ZGVsZXRlIG5bZV19KSkscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sciksbikscn0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW47cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHQpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlcn0pKX1nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW59KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IG49dC53ZWxsS25vd25FbmRwb2ludDtpZihuKXtsZXQgZTt0cnl7aWYoZT15aWVsZCBmZXRjaChuKSwyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IEVycm9yfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR09QTUQtSEUwMSIsIkludmFsaWQgd2VsbC1rbm93biByZXNwb25zZSIsIlRoZSB3ZWxsIGtub3duIGVuZHBvaW50IHJlc3BvbnNlIGhhcyBiZWVuIGZhaWxlZCB3aXRoIGFuIGVycm9yLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh5aWVsZCBlLmpzb24oKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9aWYodC5iYXNlVXJsKXt0cnl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAyIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgYmFzZSB1cmwgZmFpbGVkLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfXRyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0V4cGxpY2l0bHkoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAzIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgZXhwbGljaXRseSBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXt2YXIgZSxuLHIsaSxvLHMsYSxjLHUsbDtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50Om51bGwhPT0oZT10LmF1dGhvcml6YXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1lP2U6IiIsY2hlY2tTZXNzaW9uSWZyYW1lOm51bGwhPT0obj10LmNoZWNrX3Nlc3Npb25faWZyYW1lKSYmdm9pZCAwIT09bj9uOiIiLGVuZFNlc3Npb25FbmRwb2ludDpudWxsIT09KHI9dC5lbmRfc2Vzc2lvbl9lbmRwb2ludCkmJnZvaWQgMCE9PXI/cjoiIixpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6bnVsbCE9PShpPXQuaW50cm9zcGVjdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWk/aToiIixpc3N1ZXI6bnVsbCE9PShvPXQuaXNzdWVyKSYmdm9pZCAwIT09bz9vOiIiLGp3a3NVcmk6bnVsbCE9PShzPXQuandrc191cmkpJiZ2b2lkIDAhPT1zP3M6IiIscmVnaXN0cmF0aW9uRW5kcG9pbnQ6bnVsbCE9PShhPXQucmVnaXN0cmF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09YT9hOiIiLHJldm9jYXRpb25FbmRwb2ludDpudWxsIT09KGM9dC5yZXZvY2F0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09Yz9jOiIiLHRva2VuRW5kcG9pbnQ6bnVsbCE9PSh1PXQudG9rZW5fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdXNlcmluZm9FbmRwb2ludDpudWxsIT09KGw9dC51c2VyaW5mb19lbmRwb2ludCkmJnZvaWQgMCE9PWw/bDoiIn19KSl9Z2V0U2lnbk91dFVSTChlKXt2YXIgbixyLGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGw9PT0obj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5lbmRfc2Vzc2lvbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAxIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWRfdG9rZW47aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7Y29uc3QgYT1udWxsIT09KGk9bnVsbD09bz92b2lkIDA6by5zaWduT3V0UmVkaXJlY3RVUkwpJiZ2b2lkIDAhPT1pP2k6bnVsbD09bz92b2lkIDA6by5zaWduSW5SZWRpcmVjdFVSTDtpZighYXx8MD09PWEudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMyIsIk5vIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBmb3VuZC4iLCJUaGUgc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGNhbm5vdCBiZSBmb3VuZCBvciB0aGUgVVJMIHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiBObyBzaWduLWluIHJlZGlyZWN0IFVSTCBoYXMgYmVlbiBmb3VuZCBlaXRoZXIuICIpO3JldHVybiIiLmNvbmNhdCh0LCI/aWRfdG9rZW5faGludD0iKS5jb25jYXQocywiJnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0iKS5jb25jYXQoYSwiJnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3MiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfWdldEFjY2Vzc1Rva2VuKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGw9PT0obj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmFjY2Vzc190b2tlbn0pKX1pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gQm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKGUpKX0pKX1nZXRQS0NFQ29kZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKSxuKX0pKX1zZXRQS0NFQ29kZShlLG4scil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUscil9KSl9dXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoZSkseWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCl9KSl9fWNsYXNzIGZ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9pZD1lLHRoaXMuX3N0b3JlPXR9c2V0RGF0YUluQnVsayhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSxuKSxzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1zZXRWYWx1ZShlLG4scil7dmFyIGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0oaT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09aT9pOm51bGwsbz10JiZKU09OLnBhcnNlKHQpLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtbbl06cn0pLGE9SlNPTi5zdHJpbmdpZnkocyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLGEpfSkpfXJlbW92ZVZhbHVlKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT10JiZKU09OLnBhcnNlKHQpLG89T2JqZWN0LmFzc2lnbih7fSxpKTtkZWxldGUgb1tuXTtjb25zdCBzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1fcmVzb2x2ZUtleShlLHQpe3JldHVybiB0PyIiLmNvbmNhdChlLCItIikuY29uY2F0KHRoaXMuX2lkLCItIikuY29uY2F0KHQpOiIiLmNvbmNhdChlLCItIikuY29uY2F0KHRoaXMuX2lkKX1zZXRDb25maWdEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1zZXRTZXNzaW9uRGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX1zZXRDdXN0b21EYXRhKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KGUsciksbil9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0Q3VzdG9tRGF0YShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShlLG4pKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1yZW1vdmVDb25maWdEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsZSkpfSkpfXJlbW92ZVNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsZSkpfSkpfWdldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1zZXRDb25maWdEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlLG4pfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSxuKX0pKX1zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsaSksZSxuKX0pKX1zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxpKSxlLG4pfSkpfXJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pLGUpfSkpfXJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX19Y29uc3QgcD17Y2xvY2tUb2xlcmFuY2U6MzAwLGVuYWJsZVBLQ0U6ITAscmVzcG9uc2VNb2RlOm4ucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfTtjbGFzcyBnewovKioKICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi8KY29uc3RydWN0b3IoZSx0KXtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgZigiaW5zdGFuY2VfIi5jb25jYXQoZy5faW5zdGFuY2VJRCksZSksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcix0KSxnLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAgICoKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLGUpLHtzY29wZTpbLi4ubnVsbCE9PShuPXAuc2NvcGUpJiZ2b2lkIDAhPT1uP246W10sLi4ubnVsbCE9PShpPW51bGw9PT0ocj1lLnNjb3BlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1wP3ZvaWQgMDpwLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBEYXRhTGF5ZXJgIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gYWNjZXNzIGF1dGhlbnRpY2F0aW9uIGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGF0YUxheWVyCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbikpKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpKSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCB1c2VySW5mbyA9IGF3YWl0IGF1dGguZ2V0QmFzaWNVc2VySW5mbygpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm8KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNyeXB0byBoZWxwZXIgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjcnlwdG9IZWxwZXIgPSBhd2FpdCBhdXRoLkNyeXB0b0hlbHBlcigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldENyeXB0b0hlbHBlcgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXZva2VzIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSByZXNwb25zZSBvZiB0aGUgcmV2b2tlLWFjY2Vzcy10b2tlbiByZXF1ZXN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGFjY2VzcwogICAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgICAqICAgZGF0YTogewogICAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICAgKiAgIH0sCiAgICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovaXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIC0gVGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHBrY2UgPSBhd2FpdCBnZXRQS0NFQ29kZSgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFBLQ0VDb2RlCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQS0NFIGNvZGUgdG8gdGhlIGRhdGEgc3RvcmUuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIC0gVGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaXMgc3VjY2Vzc2Z1bCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzU2lnbk91dFN1Y2Nlc3NmdWwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBoYXMgZmFpbGVkIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZGlkU2lnbk91dEZhaWwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgd2FzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluc3RhbnRpYXRpbmcgdGhpcyBjbGFzcy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3VwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9c3RhdGljIGNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfX1jb25zdCB2PSJpbml0Ijt2YXIgeSxtOyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oeXx8KHk9e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50IixlLlNpZ25PdXRGYWlsZWQ9InNpZ24tb3V0LWZhaWxlZCJ9KG18fChtPXt9KSk7Y29uc3Qgdz0icHJvbXB0Tm9uZVJlcXVlc3RTZW50IixfPSJlcnJvciIsUz0iZXJyb3JfZGVzY3JpcHRpb24iLGI9ImN1c3RvbV9ncmFudF9jb25maWciLGs9IkFjY2VzcyB0b2tlbiBpcyBpbnZhbGlkIjt2YXIgRT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX1mdW5jdGlvbiBSKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfSkpLHR9dmFyIEE9e2V4cG9ydHM6e319LEM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZS5hcHBseSh0LG4pfX0sUD1DLEQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBJKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gVShlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09RC5jYWxsKGUpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gSChlKXtpZigiW29iamVjdCBPYmplY3RdIiE9PUQuY2FsbChlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBNKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1ELmNhbGwoZSl9ZnVuY3Rpb24gcShlLHQpe2lmKG51bGwhPWUpaWYoIm9iamVjdCIhPXR5cGVvZiBlJiYoZT1bZV0pLEkoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQuY2FsbChudWxsLGVbbl0sbixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGo9e2lzQXJyYXk6SSxpc0FycmF5QnVmZmVyOlUsaXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhTyhlKSYmbnVsbCE9PWUuY29uc3RydWN0b3ImJiFPKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGb3JtRGF0YV0iPT09RC5jYWxsKGUpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGUpOmUmJmUuYnVmZmVyJiZVKGUuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9LGlzT2JqZWN0OkwsaXNQbGFpbk9iamVjdDpILGlzVW5kZWZpbmVkOk8saXNEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PUQuY2FsbChlKX0saXNGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZpbGVdIj09PUQuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PUQuY2FsbChlKX0saXNGdW5jdGlvbjpNLGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBMKGUpJiZNKGUucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10iPT09RC5jYWxsKGUpfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOnEsbWVyZ2U6ZnVuY3Rpb24gZSgpe3ZhciB0PXt9O2Z1bmN0aW9uIG4obixyKXtIKHRbcl0pJiZIKG4pP3Rbcl09ZSh0W3JdLG4pOkgobik/dFtyXT1lKHt9LG4pOkkobik/dFtyXT1uLnNsaWNlKCk6dFtyXT1ufWZvcih2YXIgcj0wLGk9YXJndW1lbnRzLmxlbmd0aDtyPGk7cisrKXEoYXJndW1lbnRzW3JdLG4pO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxKHQsKGZ1bmN0aW9uKHQscil7ZVtyXT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9QKHQsbik6dH0pKSxlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9LHN0cmlwQk9NOmZ1bmN0aW9uKGUpe3JldHVybiA2NTI3OT09PWUuY2hhckNvZGVBdCgwKSYmKGU9ZS5zbGljZSgxKSksZX19LE49ajtmdW5jdGlvbiB4KGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXZhciBLPWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4gZTt2YXIgcjtpZihuKXI9bih0KTtlbHNlIGlmKE4uaXNVUkxTZWFyY2hQYXJhbXModCkpcj10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgaT1bXTtOLmZvckVhY2godCwoZnVuY3Rpb24oZSx0KXtudWxsIT1lJiYoTi5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sTi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe04uaXNEYXRlKGUpP2U9ZS50b0lTT1N0cmluZygpOk4uaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2goeCh0KSsiPSIreChlKSl9KSkpfSkpLHI9aS5qb2luKCImIil9aWYocil7dmFyIG89ZS5pbmRleE9mKCIjIik7LTEhPT1vJiYoZT1lLnNsaWNlKDAsbykpLGUrPSgtMT09PWUuaW5kZXhPZigiPyIpPyI/IjoiJiIpK3J9cmV0dXJuIGV9LEI9ajtmdW5jdGlvbiBKKCl7dGhpcy5oYW5kbGVycz1bXX1KLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFuJiZuLnN5bmNocm9ub3VzLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LEoucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfSxKLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe0IuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIEY9SixXPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e307ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIFkoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBWPXosRz1ZO2Z1bmN0aW9uIFgoZSl7aWYoVj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoVj09PXp8fCFWKSYmc2V0VGltZW91dClyZXR1cm4gVj1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIFYoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFYuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIFYuY2FsbCh0aGlzLGUsMCl9fX0iZnVuY3Rpb24iPT10eXBlb2YgVy5zZXRUaW1lb3V0JiYoVj1zZXRUaW1lb3V0KSwiZnVuY3Rpb24iPT10eXBlb2YgVy5jbGVhclRpbWVvdXQmJihHPWNsZWFyVGltZW91dCk7dmFyICQsWj1bXSxRPSExLGVlPS0xO2Z1bmN0aW9uIHRlKCl7USYmJCYmKFE9ITEsJC5sZW5ndGg/Wj0kLmNvbmNhdChaKTplZT0tMSxaLmxlbmd0aCYmbmUoKSl9ZnVuY3Rpb24gbmUoKXtpZighUSl7dmFyIGU9WCh0ZSk7UT0hMDtmb3IodmFyIHQ9Wi5sZW5ndGg7dDspe2ZvcigkPVosWj1bXTsrK2VlPHQ7KSQmJiRbZWVdLnJ1bigpO2VlPS0xLHQ9Wi5sZW5ndGh9JD1udWxsLFE9ITEsZnVuY3Rpb24oZSl7aWYoRz09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChHPT09WXx8IUcpJiZjbGVhclRpbWVvdXQpcmV0dXJuIEc9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7RyhlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIEcuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBHLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcmUoZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1yZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX07ZnVuY3Rpb24gaWUoKXt9dmFyIG9lPWllLHNlPWllLGFlPWllLGNlPWllLHVlPWllLGxlPWllLGRlPWllO3ZhciBoZT1XLnBlcmZvcm1hbmNlfHx7fSxmZT1oZS5ub3d8fGhlLm1vek5vd3x8aGUubXNOb3d8fGhlLm9Ob3d8fGhlLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyIHBlPW5ldyBEYXRlO3ZhciBnZT17bmV4dFRpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtaLnB1c2gobmV3IHJlKGUsdCkpLDEhPT1aLmxlbmd0aHx8UXx8WChuZSl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246b2UsYWRkTGlzdGVuZXI6c2Usb25jZTphZSxvZmY6Y2UscmVtb3ZlTGlzdGVuZXI6dWUscmVtb3ZlQWxsTGlzdGVuZXJzOmxlLGVtaXQ6ZGUsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqZmUuY2FsbChoZSksbj1NYXRoLmZsb29yKHQpLHI9TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKG4tPWVbMF0sKHItPWVbMV0pPDAmJihuLS0scis9MWU5KSksW24scl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtcGUpLzFlM319LHZlPWdlLHllPWosbWU9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gZS5jb25maWc9dCxuJiYoZS5jb2RlPW4pLGUucmVxdWVzdD1yLGUucmVzcG9uc2U9aSxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHdlPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxfZT1tZSxTZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gX2Uobyx0LG4scixpKX0sYmU9U2Usa2U9aixFZT1rZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksa2UuaXNOdW1iZXIobikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKG4pLnRvR01UU3RyaW5nKCkpLGtlLmlzU3RyaW5nKHIpJiZzLnB1c2goInBhdGg9IityKSxrZS5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFRlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LFJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LEFlPWosQ2U9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxQZT1qLERlPVBlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gcihlKXt2YXIgcj1lO3JldHVybiB0JiYobi5zZXRBdHRyaWJ1dGUoImhyZWYiLHIpLHI9bi5ocmVmKSxuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikse2hyZWY6bi5ocmVmLHByb3RvY29sOm4ucHJvdG9jb2w/bi5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6bi5ob3N0LHNlYXJjaDpuLnNlYXJjaD9uLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOm4uaGFzaD9uLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpuLmhvc3RuYW1lLHBvcnQ6bi5wb3J0LHBhdGhuYW1lOiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApP24ucGF0aG5hbWU6Ii8iK24ucGF0aG5hbWV9fXJldHVybiBlPXIod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciBuPVBlLmlzU3RyaW5nKHQpP3IodCk6dDtyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZnVuY3Rpb24gSWUoZSl7dGhpcy5tZXNzYWdlPWV9SWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LEllLnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBPZT1JZSxVZT1qLExlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztuLnN0YXR1cyYmciYmIXIobi5zdGF0dXMpP3QoYmUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIituLnN0YXR1cyxuLmNvbmZpZyxudWxsLG4ucmVxdWVzdCxuKSk6ZShuKX0sSGU9RWUsTWU9SyxxZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhVGUodCk/UmUoZSx0KTp0fSxqZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT17fTtyZXR1cm4gZT8oQWUuZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihyPWUuaW5kZXhPZigiOiIpLHQ9QWUudHJpbShlLnN1YnN0cigwLHIpKS50b0xvd2VyQ2FzZSgpLG49QWUudHJpbShlLnN1YnN0cihyKzEpKSx0KXtpZihpW3RdJiZDZS5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtuXSk6aVt0XT9pW3RdKyIsICIrbjpufX0pKSxpKTppfSxOZT1EZSx4ZT1TZSxLZT13ZSxCZT1PZSxKZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7dmFyIHIsaT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShyKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpfVVlLmlzRm9ybURhdGEoaSkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgdT1lLmF1dGgudXNlcm5hbWV8fCIiLGw9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYSh1KyI6IitsKX12YXIgZD1xZShlLmJhc2VVUkwsZS51cmwpO2Z1bmN0aW9uIGgoKXtpZihjKXt2YXIgcj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/amUoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOnMmJiJ0ZXh0IiE9PXMmJiJqc29uIiE9PXM/Yy5yZXNwb25zZTpjLnJlc3BvbnNlVGV4dCxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpyLGNvbmZpZzplLHJlcXVlc3Q6Y307TGUoKGZ1bmN0aW9uKGUpe3QoZSksYSgpfSksKGZ1bmN0aW9uKGUpe24oZSksYSgpfSksaSksYz1udWxsfX1pZihjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxNZShkLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPWg6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjJiY0PT09Yy5yZWFkeVN0YXRlJiYoMCE9PWMuc3RhdHVzfHxjLnJlc3BvbnNlVVJMJiYwPT09Yy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChoKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKG4oeGUoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7bih4ZSgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHI9ZS50cmFuc2l0aW9uYWx8fEtlO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxuKHhlKHQsZSxyLmNsYXJpZnlUaW1lb3V0RXJyb3I/IkVUSU1FRE9VVCI6IkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbH0sVWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGY9KGUud2l0aENyZWRlbnRpYWxzfHxOZShkKSkmJmUueHNyZkNvb2tpZU5hbWU/SGUucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZiYmKG9bZS54c3JmSGVhZGVyTmFtZV09Zil9InNldFJlcXVlc3RIZWFkZXIiaW4gYyYmVWUuZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOmMuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFVlLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJihjLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihyPWZ1bmN0aW9uKGUpe2MmJihuKCFlfHxlJiZlLnR5cGU/bmV3IEJlKCJjYW5jZWxlZCIpOmUpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShyKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/cigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixyKSkpLGl8fChpPW51bGwpLGMuc2VuZChpKX0pKX0sRmU9aixXZT1mdW5jdGlvbihlLHQpe3llLmZvckVhY2goZSwoZnVuY3Rpb24obixyKXtyIT09dCYmci50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1uLGRlbGV0ZSBlW3JdKX0pKX0semU9bWUsWWU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBWZShlLHQpeyFGZS5pc1VuZGVmaW5lZChlKSYmRmUuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyIEdlLFhlPXt0cmFuc2l0aW9uYWw6d2UsYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PXZlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmUpKSYmKEdlPUplKSxHZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2UodCwiQWNjZXB0IiksV2UodCwiQ29udGVudC1UeXBlIiksRmUuaXNGb3JtRGF0YShlKXx8RmUuaXNBcnJheUJ1ZmZlcihlKXx8RmUuaXNCdWZmZXIoZSl8fEZlLmlzU3RyZWFtKGUpfHxGZS5pc0ZpbGUoZSl8fEZlLmlzQmxvYihlKT9lOkZlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkZlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhWZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6RmUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhWZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LG4pe2lmKEZlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksRmUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKG58fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fFhlLnRyYW5zaXRpb25hbCxuPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9IW4mJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKGl8fHImJkZlLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYoaSl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyB6ZShlLHRoaXMsIkVfSlNPTl9QQVJTRSIpO3Rocm93IGV9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0ZlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe1hlLmhlYWRlcnNbZV09e319KSksRmUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtYZS5oZWFkZXJzW2VdPUZlLm1lcmdlKFllKX0pKTt2YXIgJGU9WGUsWmU9aixRZT0kZSxldD1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sdHQ9aixudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpc3x8UWU7cmV0dXJuIFplLmZvckVhY2gobiwoZnVuY3Rpb24obil7ZT1uLmNhbGwocixlLHQpfSkpLGV9LHJ0PWV0LGl0PSRlLG90PU9lO2Z1bmN0aW9uIHN0KGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBvdCgiY2FuY2VsZWQiKX12YXIgYXQ9aixjdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49e307ZnVuY3Rpb24gcihlLHQpe3JldHVybiBhdC5pc1BsYWluT2JqZWN0KGUpJiZhdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKGUsdCk6YXQuaXNQbGFpbk9iamVjdCh0KT9hdC5tZXJnZSh7fSx0KTphdC5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkobil7cmV0dXJuIGF0LmlzVW5kZWZpbmVkKHRbbl0pP2F0LmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKGVbbl0sdFtuXSl9ZnVuY3Rpb24gbyhlKXtpZighYXQuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIHIodm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMobil7cmV0dXJuIGF0LmlzVW5kZWZpbmVkKHRbbl0pP2F0LmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKHZvaWQgMCx0W25dKX1mdW5jdGlvbiBhKG4pe3JldHVybiBuIGluIHQ/cihlW25dLHRbbl0pOm4gaW4gZT9yKHZvaWQgMCxlW25dKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGF0LmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxyPXQoZSk7YXQuaXNVbmRlZmluZWQocikmJnQhPT1hfHwobltlXT1yKX0pKSxufSx1dD0iMC4yNi4xIixsdD11dCxkdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ZHRbZV09ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciBodD17fTtkdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2x0KyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihuLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihyKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIWh0W2ldJiYoaHRbaV09ITAsY29uc29sZS53YXJuKHIoaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShuLGksbyl9fTt2YXIgZnQ9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LG4pe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLGk9ci5sZW5ndGg7aS0tID4wOyl7dmFyIG89cltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK2MpfWVsc2UgaWYoITAhPT1uKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczpkdH0scHQ9aixndD1LLHZ0PUYseXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHN0KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1udC5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz10dC5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLHR0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8aXQuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHN0KGUpLHQuZGF0YT1udC5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBydCh0KXx8KHN0KGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9bnQuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sbXQ9Y3Qsd3Q9ZnQsX3Q9d3QudmFsaWRhdG9ycztmdW5jdGlvbiBTdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHZ0LHJlc3BvbnNlOm5ldyB2dH19U3QucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9bXQodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgbj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1uJiZ3dC5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpfdC50cmFuc2l0aW9uYWwoX3QuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpfdC50cmFuc2l0aW9uYWwoX3QuYm9vbGVhbil9LCExKTt2YXIgcj1bXSxpPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fChpPWkmJmUuc3luY2hyb25vdXMsci51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgbyxzPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhaSl7dmFyIGE9W3l0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsciksYT1hLmNvbmNhdChzKSxvPVByb21pc2UucmVzb2x2ZSh0KTthLmxlbmd0aDspbz1vLnRoZW4oYS5zaGlmdCgpLGEuc2hpZnQoKSk7cmV0dXJuIG99Zm9yKHZhciBjPXQ7ci5sZW5ndGg7KXt2YXIgdT1yLnNoaWZ0KCksbD1yLnNoaWZ0KCk7dHJ5e2M9dShjKX1jYXRjaChlKXtsKGUpO2JyZWFrfX10cnl7bz15dChjKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtzLmxlbmd0aDspbz1vLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIG99LFN0LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bXQodGhpcy5kZWZhdWx0cyxlKSxndChlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxwdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7U3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdChtdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToobnx8e30pLmRhdGF9KSl9fSkpLHB0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7U3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOm59KSl9fSkpO3ZhciBidD1TdCxrdD1PZTtmdW5jdGlvbiBFdChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIG49dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYobi5fbGlzdGVuZXJzKXt2YXIgdCxyPW4uX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PHI7dCsrKW4uX2xpc3RlbmVyc1t0XShlKTtuLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIHIuY2FuY2VsPWZ1bmN0aW9uKCl7bi51bnN1YnNjcmliZSh0KX0scn0sZSgoZnVuY3Rpb24oZSl7bi5yZWFzb258fChuLnJlYXNvbj1uZXcga3QoZSksdChuLnJlYXNvbikpfSkpfUV0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LEV0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dGhpcy5yZWFzb24/ZSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LEV0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sRXQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgRXQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBUdD1FdCxSdD1qLEF0PWosQ3Q9QyxQdD1idCxEdD1jdDt2YXIgSXQ9ZnVuY3Rpb24gZSh0KXt2YXIgbj1uZXcgUHQodCkscj1DdChQdC5wcm90b3R5cGUucmVxdWVzdCxuKTtyZXR1cm4gQXQuZXh0ZW5kKHIsUHQucHJvdG90eXBlLG4pLEF0LmV4dGVuZChyLG4pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBlKER0KHQsbikpfSxyfSgkZSk7SXQuQXhpb3M9UHQsSXQuQ2FuY2VsPU9lLEl0LkNhbmNlbFRva2VuPVR0LEl0LmlzQ2FuY2VsPWV0LEl0LlZFUlNJT049dXQsSXQuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sSXQuc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sSXQuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBSdC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sQS5leHBvcnRzPUl0LEEuZXhwb3J0cy5kZWZhdWx0PUl0O3ZhciBPdCxVdD1BLmV4cG9ydHM7bGV0IEx0PU90PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVV0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IE90KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1VdC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1VdC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLG49bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntuLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1ufXJldHVybiB0LnN0YXJ0VGltZUluTXM9KG5ldyBEYXRlKS5nZXRUaW1lKCksT3QuaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgT3QuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIE90LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPdC5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1ufSkpfWVuYWJsZUhhbmRsZXIoKXtPdC5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOk90LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e090LmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07THQuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsTHQ9T3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxuLHMpOmkodCxuKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scyksc30oW2U9Pnt9XSxMdCk7Y2xhc3MgSHR7Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxuKX0pKX1nZXREYXRhKHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0obj10aGlzLl9kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCkpJiZ2b2lkIDAhPT1yP3I6Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNsYXNzIE10e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWNsYXNzIHF0e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyByZW1vdmVBdXRob3JpemF0aW9uQ29kZSgpe2NvbnN0IGU9bG9jYXRpb24uaHJlZjtoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlLnJlcGxhY2UoL1w/Y29kZT0uKiQvLCIiKSl9c3RhdGljIGdldFBLQ0UoZSl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGUpKSYmdm9pZCAwIT09dD90OiIifXN0YXRpYyBzZXRQS0NFKGUsdCl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlLHQpfXN0YXRpYyBzZXRTaWduT3V0VVJMKGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0ocyxlKX1zdGF0aWMgZ2V0U2lnbk91dFVSTCgpe3ZhciBlO3JldHVybiBudWxsIT09KGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzKSkmJnZvaWQgMCE9PWU/ZToiIn1zdGF0aWMgcmVtb3ZlUEtDRShlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfXN0YXRpYyBjYW5Db250aW51ZVNpZ25JbihlLHQpe3JldHVybiEoZSYmIXF0Lmhhc0Vycm9ySW5VUkwoKSYmIXF0Lmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gcXQuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpfXN0YXRpYyB3YXNTaWduSW5DYWxsZWQoKXtyZXR1cm4hKCFxdC5oYXNFcnJvckluVVJMKCkmJiFxdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoXyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoUykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KF8pJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh3KTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0odyxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fXF0LnVudGlsPWZ1bmN0aW9uKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo1MDA7Y29uc3Qgbj1yPT5lKCk/cigpOnNldFRpbWVvdXQoKCgpPT5uKHIpKSx0KTtyZXR1cm4gbmV3IFByb21pc2Uobil9O3ZhciBqdD1bXSxOdD1bXSx4dD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxLdD0hMTtmdW5jdGlvbiBCdCgpe0t0PSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClqdFt0XT1lW3RdLE50W2UuY2hhckNvZGVBdCh0KV09dDtOdFsiLSIuY2hhckNvZGVBdCgwKV09NjIsTnRbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIEp0KGUsdCxuKXtmb3IodmFyIHIsaSxvPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNikrKGVbcysxXTw8OCkrZVtzKzJdLG8ucHVzaChqdFsoaT1yKT4+MTgmNjNdK2p0W2k+PjEyJjYzXStqdFtpPj42JjYzXStqdFs2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gRnQoZSl7dmFyIHQ7S3R8fEJ0KCk7Zm9yKHZhciBuPWUubGVuZ3RoLHI9biUzLGk9IiIsbz1bXSxzPTE2MzgzLGE9MCxjPW4tcjthPGM7YSs9cylvLnB1c2goSnQoZSxhLGErcz5jP2M6YStzKSk7cmV0dXJuIDE9PT1yPyh0PWVbbi0xXSxpKz1qdFt0Pj4yXSxpKz1qdFt0PDw0JjYzXSxpKz0iPT0iKToyPT09ciYmKHQ9KGVbbi0yXTw8OCkrZVtuLTFdLGkrPWp0W3Q+PjEwXSxpKz1qdFt0Pj40JjYzXSxpKz1qdFt0PDwyJjYzXSxpKz0iPSIpLG8ucHVzaChpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIFd0KGUsdCxuLHIsaSl7dmFyIG8scyxhPTgqaS1yLTEsYz0oMTw8YSktMSx1PWM+PjEsbD0tNyxkPW4/aS0xOjAsaD1uPy0xOjEsZj1lW3QrZF07Zm9yKGQrPWgsbz1mJigxPDwtbCktMSxmPj49LWwsbCs9YTtsPjA7bz0yNTYqbytlW3QrZF0sZCs9aCxsLT04KTtmb3Iocz1vJigxPDwtbCktMSxvPj49LWwsbCs9cjtsPjA7cz0yNTYqcytlW3QrZF0sZCs9aCxsLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1jKXJldHVybiBzP05hTjoxLzAqKGY/LTE6MSk7cys9TWF0aC5wb3coMixyKSxvLT11fXJldHVybihmPy0xOjEpKnMqTWF0aC5wb3coMixvLXIpfWZ1bmN0aW9uIHp0KGUsdCxuLHIsaSxvKXt2YXIgcyxhLGMsdT04Km8taS0xLGw9KDE8PHUpLTEsZD1sPj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxmPXI/MDpvLTEscD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9bCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooYz1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSxjKj0yKSwodCs9cytkPj0xP2gvYzpoKk1hdGgucG93KDIsMS1kKSkqYz49MiYmKHMrKyxjLz0yKSxzK2Q+PWw/KGE9MCxzPWwpOnMrZD49MT8oYT0odCpjLTEpKk1hdGgucG93KDIsaSkscys9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbbitmXT0yNTUmYSxmKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsdSs9aTt1PjA7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHUtPTgpO2VbbitmLXBdfD0xMjgqZ312YXIgWXQ9e30udG9TdHJpbmcsVnQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09WXQuY2FsbChlKX07WnQuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT1XLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFcuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgR3Q9WHQoKTtmdW5jdGlvbiBYdCgpe3JldHVybiBadC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiAkdChlLHQpe2lmKFh0KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPVp0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBadCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBadChlLHQsbil7aWYoIShadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgWnQpKXJldHVybiBuZXcgWnQoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gdG4odGhpcyxlKX1yZXR1cm4gUXQodGhpcyxlLHQsbil9ZnVuY3Rpb24gUXQoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PW4mJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LG4pOm5ldyBVaW50OEFycmF5KHQsbixyKTtadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6ZT1ubihlLHQpO3JldHVybiBlfShlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG4peyJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpO2lmKCFadC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8c24odCxuKSxpPShlPSR0KGUscikpLndyaXRlKHQsbik7aSE9PXImJihlPWUuc2xpY2UoMCxpKSk7cmV0dXJuIGV9KGUsdCxuKTpmdW5jdGlvbihlLHQpe2lmKG9uKHQpKXt2YXIgbj0wfHJuKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPSR0KGUsbikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG4pLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj8kdChlLDApOm5uKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJlZ0KHQuZGF0YSkpcmV0dXJuIG5uKGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gZW4oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB0bihlLHQpe2lmKGVuKHQpLGU9JHQoZSx0PDA/MDowfHJuKHQpKSwhWnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBubihlLHQpe3ZhciBuPXQubGVuZ3RoPDA/MDowfHJuKHQubGVuZ3RoKTtlPSR0KGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBybihlKXtpZihlPj1YdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitYdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gc24oZSx0KXtpZihvbihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gVW4oZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBMbihlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBVbihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBhbihlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBibih0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gbW4odGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBfbih0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gU24odGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4geW4odGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4ga24odGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gY24oZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiB1bihlLHQsbixyLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPWk/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIWkpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9WnQuZnJvbSh0LHIpKSxvbih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOmxuKGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsWnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG4pOmxuKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBsbihlLHQsbixyLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixjLz0yLG4vPTJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGw9LTE7Zm9yKG89bjtvPGE7bysrKWlmKHUoZSxvKT09PXUodCwtMT09PWw/MDpvLWwpKXtpZigtMT09PWwmJihsPW8pLG8tbCsxPT09YylyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihvLT1vLWwpLGw9LTF9ZWxzZSBmb3IobitjPmEmJihuPWEtYyksbz1uO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsaD0wO2g8YztoKyspaWYodShlLG8raCkhPT11KHQsaCkpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBkbihlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgaT1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5pJiYocj1pKTpyPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgcz0wO3M8cjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtuK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gaG4oZSx0LG4scil7cmV0dXJuIEhuKFVuKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIHBuKGUsdCxuLHIpe3JldHVybiBmbihlLHQsbixyKX1mdW5jdGlvbiBnbihlLHQsbixyKXtyZXR1cm4gSG4oTG4odCksZSxuLHIpfWZ1bmN0aW9uIHZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKXI9KG49ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHluKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9GdChlKTpGdChlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIG1uKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8scyxhLGMsdT1lW2ldLGw9bnVsbCxkPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStkPD1uKXN3aXRjaChkKXtjYXNlIDE6dTwxMjgmJihsPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihjPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihsPWMpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGM9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYobD1jKTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKGM9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmYzwxMTE0MTEyJiYobD1jKX1udWxsPT09bD8obD02NTUzMyxkPTEpOmw+NjU1MzUmJihsLT02NTUzNixyLnB1c2gobD4+PjEwJjEwMjN8NTUyOTYpLGw9NTYzMjB8MTAyMyZsKSxyLnB1c2gobCksaSs9ZH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9d24pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBuPSIiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPXduKSk7cmV0dXJuIG59KHIpfVp0LnBvb2xTaXplPTgxOTIsWnQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPVp0LnByb3RvdHlwZSxlfSxadC5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUXQobnVsbCxlLHQsbil9LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihadC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLFp0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxadC5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlbih0KSx0PD0wPyR0KGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/JHQoZSx0KS5maWxsKG4scik6JHQoZSx0KS5maWxsKG4pOiR0KGUsdCl9KG51bGwsZSx0LG4pfSxadC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB0bihudWxsLGUpfSxadC5pc0J1ZmZlcj1NbixadC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIW9uKGUpfHwhb24odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKG4scik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LFp0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFp0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFWdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBadC5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO3ZhciByPVp0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgbz1lW25dO2lmKCFvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KHIsaSksaSs9by5sZW5ndGh9cmV0dXJuIHJ9LFp0LmJ5dGVMZW5ndGg9c24sWnQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxadC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWNuKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWNuKHRoaXMsdCx0KzMpLGNuKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpY24odGhpcyx0LHQrNyksY24odGhpcyx0KzEsdCs2KSxjbih0aGlzLHQrMix0KzUpLGNuKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP21uKHRoaXMsMCxlKTphbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFp0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1adC5jb21wYXJlKHRoaXMsZSl9LFp0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LFp0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49aSYmdD49bilyZXR1cm4gMDtpZihyPj1pKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLHM9KG4+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShyLGkpLHU9ZS5zbGljZSh0LG4pLGw9MDtsPGE7KytsKWlmKGNbbF0hPT11W2xdKXtvPWNbbF0scz11W2xdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sWnQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LFp0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdW4odGhpcyxlLHQsbiwhMCl9LFp0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITEpfSxadC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5pKSYmKG49aSksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIGRuKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGhuKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBmbih0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBwbih0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIGduKHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdm4odGhpcyxlLHQsbik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxvPSEwfX0sWnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIHduPTQwOTY7ZnVuY3Rpb24gX24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYm4oZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1PbihlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBrbihlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEVuKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBUbihlLHQsbixyLGksbyl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBSbihlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gQW4oZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO2k8bzsrK2kpZVtuK2ldPXQ+Pj44KihyP2k6My1pKSYyNTV9ZnVuY3Rpb24gQ24oZSx0LG4scixpLG8pe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw0KSx6dChlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBEbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw4KSx6dChlLHQsbixyLDUyLDgpLG4rOH1adC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVCkobj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7bj1uZXcgWnQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pbltvXT10aGlzW28rZV19cmV0dXJuIG59LFp0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LFp0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LFp0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxadC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHI+PShpKj0xMjgpJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxadC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxpPTEsbz10aGlzW2UrLS1yXTtyPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1yXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sWnQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LFp0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sWnQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSwyMyw0KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMCw1Miw4KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSw1Miw4KX0sWnQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8VG4odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMjU1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpSbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpBbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMSwxMjcsLTEyOCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOlJuKHRoaXMsZSx0LCEwKSx0KzJ9LFp0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpBbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMCxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbiYmKHI9ZS5sZW5ndGgtdCtuKTt2YXIgaSxvPXItbjtpZih0aGlzPT09ZSYmbjx0JiZ0PHIpZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krbl07ZWxzZSBpZihvPDFlM3x8IVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxadC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8ocj10LHQ9MCxuPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiByJiYhWnQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9b24oZSk/ZTpVbihuZXcgWnQoZSxyKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBJbj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPbihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gVW4oZSx0KXt2YXIgbjt0PXR8fDEvMDtmb3IodmFyIHI9ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8cjsrK3Mpe2lmKChuPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09cil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1uO2NvbnRpbnVlfW49NjU1MzYrKGktNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIExuKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM7S3R8fEJ0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IHh0KDMqYS80LW8pLHI9bz4wP2EtNDphO3ZhciBjPTA7Zm9yKHQ9MCxuPTA7dDxyO3QrPTQsbis9MylpPU50W2UuY2hhckNvZGVBdCh0KV08PDE4fE50W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8TnRbZS5jaGFyQ29kZUF0KHQrMildPDw2fE50W2UuY2hhckNvZGVBdCh0KzMpXSxzW2MrK109aT4+MTYmMjU1LHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPU50W2UuY2hhckNvZGVBdCh0KV08PDJ8TnRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbYysrXT0yNTUmaSk6MT09PW8mJihpPU50W2UuY2hhckNvZGVBdCh0KV08PDEwfE50W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxOdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShJbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gSG4oZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxxbihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZxbihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gcW4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgam49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOlp0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLFp0LmFsbG9jKCtlKX0saXNCdWZmZXI6TW4sa01heExlbmd0aDpHdH0pLE5uPXtleHBvcnRzOnt9fSx4bj17fSxLbj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEtuLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10JTQ7aWYoIW4pcmV0dXJuIGU7dmFyIHI9dCxpPTQtbixvPXQraSxzPVp0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIscisrKTtyZXR1cm4gcy50b1N0cmluZygpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCbj1LbjtmdW5jdGlvbiBKbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmlzQnVmZmVyKGUpP1duKGUudG9TdHJpbmcoImJhc2U2NCIpKTpXbihadC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksQm4uZGVmYXVsdChlKS5yZXBsYWNlKC9cLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIil9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfXZhciB6bixZbj1KbjtZbi5lbmNvZGU9Sm4sWW4uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksWnQuZnJvbShGbihlKSwiYmFzZTY0IikudG9TdHJpbmcodCl9LFluLnRvQmFzZTY0PUZuLFluLmZyb21CYXNlNjQ9V24sWW4udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0LmZyb20oRm4oZSksImJhc2U2NCIpfSx4bi5kZWZhdWx0PVluLCh6bj1ObikuZXhwb3J0cz14bi5kZWZhdWx0LHpuLmV4cG9ydHMuZGVmYXVsdD16bi5leHBvcnRzO3ZhciBWbj1Obi5leHBvcnRzLEduPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQsbil7dmFyIHI9e307IWZ1bmN0aW9uKGUpe2UuX19lc01vZHVsZT0hMCxlLmRpZ2VzdExlbmd0aD0zMixlLmJsb2NrU2l6ZT02NDt2YXIgdD1uZXcgVWludDMyQXJyYXkoWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pO2Z1bmN0aW9uIG4oZSxuLHIsaSxvKXtmb3IodmFyIHMsYSxjLHUsbCxkLGgsZixwLGcsdix5LG07bz49NjQ7KXtmb3Iocz1uWzBdLGE9blsxXSxjPW5bMl0sdT1uWzNdLGw9bls0XSxkPW5bNV0saD1uWzZdLGY9bls3XSxnPTA7ZzwxNjtnKyspdj1pKzQqZyxlW2ddPSgyNTUmclt2XSk8PDI0fCgyNTUmclt2KzFdKTw8MTZ8KDI1NSZyW3YrMl0pPDw4fDI1NSZyW3YrM107Zm9yKGc9MTY7Zzw2NDtnKyspeT0oKHA9ZVtnLTJdKT4+PjE3fHA8PDE1KV4ocD4+PjE5fHA8PDEzKV5wPj4+MTAsbT0oKHA9ZVtnLTE1XSk+Pj43fHA8PDI1KV4ocD4+PjE4fHA8PDE0KV5wPj4+MyxlW2ddPSh5K2VbZy03XXwwKSsobStlW2ctMTZdfDApO2ZvcihnPTA7Zzw2NDtnKyspeT0oKChsPj4+NnxsPDwyNileKGw+Pj4xMXxsPDwyMSleKGw+Pj4yNXxsPDw3KSkrKGwmZF5+bCZoKXwwKSsoZisodFtnXStlW2ddfDApfDApfDAsbT0oKHM+Pj4yfHM8PDMwKV4ocz4+PjEzfHM8PDE5KV4ocz4+PjIyfHM8PDEwKSkrKHMmYV5zJmNeYSZjKXwwLGY9aCxoPWQsZD1sLGw9dSt5fDAsdT1jLGM9YSxhPXMscz15K218MDtuWzBdKz1zLG5bMV0rPWEsblsyXSs9YyxuWzNdKz11LG5bNF0rPWwsbls1XSs9ZCxuWzZdKz1oLG5bN10rPWYsaSs9NjQsby09NjR9cmV0dXJuIGl9dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5kaWdlc3RMZW5ndGg9ZS5kaWdlc3RMZW5ndGgsdGhpcy5ibG9ja1NpemU9ZS5ibG9ja1NpemUsdGhpcy5zdGF0ZT1uZXcgSW50MzJBcnJheSg4KSx0aGlzLnRlbXA9bmV3IEludDMyQXJyYXkoNjQpLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDEyOCksdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzLnJlc2V0KCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVbMF09MTc3OTAzMzcwMyx0aGlzLnN0YXRlWzFdPTMxNDQxMzQyNzcsdGhpcy5zdGF0ZVsyXT0xMDEzOTA0MjQyLHRoaXMuc3RhdGVbM109Mjc3MzQ4MDc2Mix0aGlzLnN0YXRlWzRdPTEzNTk4OTMxMTksdGhpcy5zdGF0ZVs1XT0yNjAwODIyOTI0LHRoaXMuc3RhdGVbNl09NTI4NzM0NjM1LHRoaXMuc3RhdGVbN109MTU0MTQ1OTIyNSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXN9LHQucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmJ1ZmZlci5sZW5ndGg7ZSsrKXRoaXMuYnVmZmVyW2VdPTA7Zm9yKGU9MDtlPHRoaXMudGVtcC5sZW5ndGg7ZSsrKXRoaXMudGVtcFtlXT0wO3RoaXMucmVzZXQoKX0sdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ZS5sZW5ndGgpLHRoaXMuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJTSEEyNTY6IGNhbid0IHVwZGF0ZSBiZWNhdXNlIGhhc2ggd2FzIGZpbmlzaGVkLiIpO3ZhciByPTA7aWYodGhpcy5ieXRlc0hhc2hlZCs9dCx0aGlzLmJ1ZmZlckxlbmd0aD4wKXtmb3IoO3RoaXMuYnVmZmVyTGVuZ3RoPDY0JiZ0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbcisrXSx0LS07NjQ9PT10aGlzLmJ1ZmZlckxlbmd0aCYmKG4odGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCw2NCksdGhpcy5idWZmZXJMZW5ndGg9MCl9Zm9yKHQ+PTY0JiYocj1uKHRoaXMudGVtcCx0aGlzLnN0YXRlLGUscix0KSx0JT02NCk7dD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZmluaXNoZWQpe3ZhciB0PXRoaXMuYnl0ZXNIYXNoZWQscj10aGlzLmJ1ZmZlckxlbmd0aCxpPXQvNTM2ODcwOTEyfDAsbz10PDwzLHM9dCU2NDw1Nj82NDoxMjg7dGhpcy5idWZmZXJbcl09MTI4O2Zvcih2YXIgYT1yKzE7YTxzLTg7YSsrKXRoaXMuYnVmZmVyW2FdPTA7dGhpcy5idWZmZXJbcy04XT1pPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtN109aT4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTZdPWk+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTVdPWk+Pj4wJjI1NSx0aGlzLmJ1ZmZlcltzLTRdPW8+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy0zXT1vPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtMl09bz4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtMV09bz4+PjAmMjU1LG4odGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCxzKSx0aGlzLmZpbmlzaGVkPSEwfWZvcihhPTA7YTw4O2ErKyllWzQqYSswXT10aGlzLnN0YXRlW2FdPj4+MjQmMjU1LGVbNCphKzFdPXRoaXMuc3RhdGVbYV0+Pj4xNiYyNTUsZVs0KmErMl09dGhpcy5zdGF0ZVthXT4+PjgmMjU1LGVbNCphKzNdPXRoaXMuc3RhdGVbYV0+Pj4wJjI1NTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSx0LnByb3RvdHlwZS5fc2F2ZVN0YXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5zdGF0ZS5sZW5ndGg7dCsrKWVbdF09dGhpcy5zdGF0ZVt0XX0sdC5wcm90b3R5cGUuX3Jlc3RvcmVTdGF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dGhpcy5zdGF0ZS5sZW5ndGg7bisrKXRoaXMuc3RhdGVbbl09ZVtuXTt0aGlzLmJ5dGVzSGFzaGVkPXQsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmJ1ZmZlckxlbmd0aD0wfSx0fSgpO2UuSGFzaD1yO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmlubmVyPW5ldyByLHRoaXMub3V0ZXI9bmV3IHIsdGhpcy5ibG9ja1NpemU9dGhpcy5pbm5lci5ibG9ja1NpemUsdGhpcy5kaWdlc3RMZW5ndGg9dGhpcy5pbm5lci5kaWdlc3RMZW5ndGg7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja1NpemUpO2lmKGUubGVuZ3RoPnRoaXMuYmxvY2tTaXplKShuZXcgcikudXBkYXRlKGUpLmZpbmlzaCh0KS5jbGVhbigpO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdFtuXT1lW25dO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49NTQ7dGhpcy5pbm5lci51cGRhdGUodCk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dXj0xMDY7dGhpcy5vdXRlci51cGRhdGUodCksdGhpcy5pc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMub3N0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLmlubmVyLl9zYXZlU3RhdGUodGhpcy5pc3RhdGUpLHRoaXMub3V0ZXIuX3NhdmVTdGF0ZSh0aGlzLm9zdGF0ZSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dPTB9cmV0dXJuIGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLmlzdGF0ZSx0aGlzLmlubmVyLmJsb2NrU2l6ZSksdGhpcy5vdXRlci5fcmVzdG9yZVN0YXRlKHRoaXMub3N0YXRlLHRoaXMub3V0ZXIuYmxvY2tTaXplKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5pc3RhdGUubGVuZ3RoO2UrKyl0aGlzLm9zdGF0ZVtlXT10aGlzLmlzdGF0ZVtlXT0wO3RoaXMuaW5uZXIuY2xlYW4oKSx0aGlzLm91dGVyLmNsZWFuKCl9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoZSksdGhpc30sZS5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm91dGVyLmZpbmlzaGVkP3RoaXMub3V0ZXIuZmluaXNoKGUpOih0aGlzLmlubmVyLmZpbmlzaChlKSx0aGlzLm91dGVyLnVwZGF0ZShlLHRoaXMuZGlnZXN0TGVuZ3RoKS5maW5pc2goZSkpLHRoaXN9LGUucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sZX0oKTtmdW5jdGlvbiBvKGUpe3ZhciB0PShuZXcgcikudXBkYXRlKGUpLG49dC5kaWdlc3QoKTtyZXR1cm4gdC5jbGVhbigpLG59ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPW5ldyBpKGUpLnVwZGF0ZSh0KSxyPW4uZGlnZXN0KCk7cmV0dXJuIG4uY2xlYW4oKSxyfWZ1bmN0aW9uIGEoZSx0LG4scil7dmFyIGk9clswXTtpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoImhrZGY6IGNhbm5vdCBleHBhbmQgbW9yZSIpO3QucmVzZXQoKSxpPjEmJnQudXBkYXRlKGUpLG4mJnQudXBkYXRlKG4pLHQudXBkYXRlKHIpLHQuZmluaXNoKGUpLHJbMF0rK31lLkhNQUM9aSxlLmhhc2g9byxlLmRlZmF1bHQ9byxlLmhtYWM9czt2YXIgYz1uZXcgVWludDhBcnJheShlLmRpZ2VzdExlbmd0aCk7ZnVuY3Rpb24gdShlLHQsbixyKXt2b2lkIDA9PT10JiYodD1jKSx2b2lkIDA9PT1yJiYocj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksdT1zKHQsZSksbD1uZXcgaSh1KSxkPW5ldyBVaW50OEFycmF5KGwuZGlnZXN0TGVuZ3RoKSxoPWQubGVuZ3RoLGY9bmV3IFVpbnQ4QXJyYXkocikscD0wO3A8cjtwKyspaD09PWQubGVuZ3RoJiYoYShkLGwsbixvKSxoPTApLGZbcF09ZFtoKytdO3JldHVybiBsLmNsZWFuKCksZC5maWxsKDApLG8uZmlsbCgwKSxmfWZ1bmN0aW9uIGwoZSx0LG4scil7Zm9yKHZhciBvPW5ldyBpKGUpLHM9by5kaWdlc3RMZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KSxjPW5ldyBVaW50OEFycmF5KHMpLHU9bmV3IFVpbnQ4QXJyYXkocyksbD1uZXcgVWludDhBcnJheShyKSxkPTA7ZCpzPHI7ZCsrKXt2YXIgaD1kKzE7YVswXT1oPj4+MjQmMjU1LGFbMV09aD4+PjE2JjI1NSxhWzJdPWg+Pj44JjI1NSxhWzNdPWg+Pj4wJjI1NSxvLnJlc2V0KCksby51cGRhdGUodCksby51cGRhdGUoYSksby5maW5pc2godSk7Zm9yKHZhciBmPTA7ZjxzO2YrKyljW2ZdPXVbZl07Zm9yKGY9MjtmPD1uO2YrKyl7by5yZXNldCgpLG8udXBkYXRlKHUpLmZpbmlzaCh1KTtmb3IodmFyIHA9MDtwPHM7cCsrKWNbcF1ePXVbcF19Zm9yKGY9MDtmPHMmJmQqcytmPHI7ZisrKWxbZCpzK2ZdPWNbZl19Zm9yKGQ9MDtkPHM7ZCsrKWNbZF09dVtkXT0wO2ZvcihkPTA7ZDw0O2QrKylhW2RdPTA7cmV0dXJuIG8uY2xlYW4oKSxsfWUuaGtkZj11LGUucGJrZGYyPWx9KHIpO3ZhciBpPXIuZGVmYXVsdDtmb3IodmFyIG8gaW4gcilpW29dPXJbb107ZS5leHBvcnRzPWl9KCl9KEduKTt2YXIgWG49VChHbi5leHBvcnRzKSwkbj1jcnlwdG87Y29uc3QgWm49ZT0+ZSBpbnN0YW5jZW9mIENyeXB0b0tleSxRbj1uZXcgVGV4dEVuY29kZXIsZXI9bmV3IFRleHREZWNvZGVyO2NvbnN0IHRyPWU9PntsZXQgdD1lO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1lci5kZWNvZGUodCkpLHQ9dC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKTt0cnl7cmV0dXJuKGU9Pntjb25zdCB0PWF0b2IoZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59KSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIil9fTtjbGFzcyBuciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pPU0VfR0VORVJJQyIsdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSxudWxsPT09KHQ9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpfHx2b2lkIDA9PT10fHx0LmNhbGwoRXJyb3IsdGhpcyx0aGlzLmNvbnN0cnVjdG9yKX1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfR0VORVJJQyJ9fWNsYXNzIHJyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIn19Y2xhc3MgaXIgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9FWFBJUkVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9FWFBJUkVEIn19Y2xhc3Mgb3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBzciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn19Y2xhc3MgYXIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX0lOVkFMSUQifX1jbGFzcyBjciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1RfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfSU5WQUxJRCJ9fWNsYXNzIHVyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX0lOVkFMSUQifX1jbGFzcyBsciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX05PX01BVENISU5HX0tFWSIsdGhpcy5tZXNzYWdlPSJubyBhcHBsaWNhYmxlIGtleSBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX05PX01BVENISU5HX0tFWSJ9fWNsYXNzIGRyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyIsdGhpcy5tZXNzYWdlPSJtdWx0aXBsZSBtYXRjaGluZyBrZXlzIGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyJ9fWNsYXNzIGhyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCIsdGhpcy5tZXNzYWdlPSJzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQifX1mdW5jdGlvbiBmcigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJTb2NrZXRQYWlyfWZ1bmN0aW9uIHByKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYWxnb3JpdGhtLm5hbWUiO3JldHVybiBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICIuY29uY2F0KHQsIiBtdXN0IGJlICIpLmNvbmNhdChlKSl9ZnVuY3Rpb24gZ3IoZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiB2cihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiB5cihlKXtzd2l0Y2goZSl7Y2FzZSJFUzI1NiI6cmV0dXJuIlAtMjU2IjtjYXNlIkVTMzg0IjpyZXR1cm4iUC0zODQiO2Nhc2UiRVM1MTIiOnJldHVybiJQLTUyMSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fWZ1bmN0aW9uIG1yKGUsdCl7aWYodC5sZW5ndGgmJiF0LnNvbWUoKHQ9PmUudXNhZ2VzLmluY2x1ZGVzKHQpKSkpe2xldCBlPSJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzIHVzYWdlcyBtdXN0IGluY2x1ZGUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBuPXQucG9wKCk7ZSs9Im9uZSBvZiAiLmNvbmNhdCh0LmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KG4sIi4iKX1lbHNlIDI9PT10Lmxlbmd0aD9lKz0ib25lIG9mICIuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSwiLiIpOmUrPSIiLmNvbmNhdCh0WzBdLCIuIik7dGhyb3cgbmV3IFR5cGVFcnJvcihlKX19dmFyIHdyPWZ1bmN0aW9uKGUpe2xldCB0PSJLZXkgbXVzdCBiZSAiO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtpZihyLmxlbmd0aD4yKXtjb25zdCBlPXIucG9wKCk7dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KHIuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQoZSwiLiIpfWVsc2UgMj09PXIubGVuZ3RoP3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChyWzBdLCIgb3IgIikuY29uY2F0KHJbMV0sIi4iKTp0Kz0ib2YgdHlwZSAiLmNvbmNhdChyWzBdLCIuIik7cmV0dXJuIG51bGw9PWU/dCs9IiBSZWNlaXZlZCAiLmNvbmNhdChlKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5uYW1lP3QrPSIgUmVjZWl2ZWQgZnVuY3Rpb24gIi5jb25jYXQoZS5uYW1lKToib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZSYmKHQrPSIgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgIi5jb25jYXQoZS5jb25zdHJ1Y3Rvci5uYW1lKSksdH0sX3I9ZT0+Wm4oZSk7Y29uc3QgU3I9WyJDcnlwdG9LZXkiXTtmdW5jdGlvbiBicihlKXtpZigib2JqZWN0IiE9dHlwZW9mKHQ9ZSl8fG51bGw9PT10fHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTt2YXIgdDtpZihudWxsPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiEwO2xldCBuPWU7Zm9yKDtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pOyluPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bn1jb25zdCBrcj1hc3luYyBlPT57dmFyIHQsbjtjb25zdHthbGdvcml0aG06cixrZXlVc2FnZXM6aX09ZnVuY3Rpb24oZSl7bGV0IHQsbjtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0Ijpzd2l0Y2goZS5hbGcpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnQ9e25hbWU6IkhNQUMiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBzcigiIi5jb25jYXQoZS5hbGcsIiBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzIikpO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxuPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxuPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LG49WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTQS1PQUVQIjpjYXNlIlJTQS1PQUVQLTI1NiI6Y2FzZSJSU0EtT0FFUC0zODQiOmNhc2UiUlNBLU9BRVAtNTEyIjp0PXtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLSIuY29uY2F0KHBhcnNlSW50KGUuYWxnLnNsaWNlKC0zKSwxMCl8fDEpfSxuPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTMzg0Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVM1MTIiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTUyMSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxuPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSBmcigpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtpZigiRWQyNTUxOSIhPT1lLmNydil0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJjcnYiIChTdWJ0eXBlIG9mIEtleSBQYWlyKSBQYXJhbWV0ZXIgdmFsdWUnKTt0PXtuYW1lOiJOT0RFLUVEMjU1MTkiLG5hbWVkQ3VydmU6Ik5PREUtRUQyNTUxOSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpufX0oZSksbz1bcixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0obj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1uP246aV07aWYoIlBCS0RGMiI9PT1yLm5hbWUpcmV0dXJuICRuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdHIoZS5rKSwuLi5vKTtjb25zdCBzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCRuLnN1YnRsZS5pbXBvcnRLZXkoImp3ayIscywuLi5vKX07Y29uc3QgRXI9KGUsdCxuKT0+e2Uuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fC9eQVxkezN9KD86R0NNKT9LVyQvLnRlc3QoZSk/KGU9PntpZighKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl7aWYoIV9yKGUpKXRocm93IG5ldyBUeXBlRXJyb3Iod3IoZSwuLi5TciwiVWludDhBcnJheSIpKTtpZigic2VjcmV0IiE9PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKX19KSh0KTooKGUsdCk9PntpZighX3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcih3cihlLC4uLlNyKSk7aWYoInNlY3JldCI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKTtpZigic2lnbiI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZigiZGVjcnlwdCI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZihlLmFsZ29yaXRobSYmInZlcmlmeSI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpO2lmKGUuYWxnb3JpdGhtJiYiZW5jcnlwdCI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKX0pKHQsbil9O2Z1bmN0aW9uIFRyKGUsdCxuKXtpZihabih0KSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IHByKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWdyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IHByKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodnIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHByKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IHByKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIGZyKCkmJiJFZERTQSI6aWYoIWdyKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBwcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBwcigiRUNEU0EiKTtjb25zdCBuPXlyKHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IHByKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfWZvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+Mj9uLTI6MCksaT0yO2k8bjtpKyspcltpLTJdPWFyZ3VtZW50c1tpXTttcihlLHIpfSh0LGUsbiksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKHdyKHQsLi4uU3IpKTtyZXR1cm4gJG4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOiJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpLG5hbWU6IkhNQUMifSwhMSxbbl0pfXRocm93IG5ldyBUeXBlRXJyb3Iod3IodCwuLi5TciwiVWludDhBcnJheSIpKX1jb25zdCBScj1hc3luYyhlLHQsbixyKT0+e2NvbnN0IGk9YXdhaXQgVHIoZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpufT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIG58fG48MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlciIpKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCBuPSJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZSBmcigpJiYiRWREU0EiOmNvbnN0e25hbWVkQ3VydmU6cn09dDtyZXR1cm57bmFtZTpyLG5hbWVkQ3VydmU6cn07ZGVmYXVsdDp0aHJvdyBuZXcgc3IoImFsZyAiLmNvbmNhdChlLCIgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIgYnkgSk9TRSBvciB5b3VyIGphdmFzY3JpcHQgcnVudGltZSIpKX19KGUsaS5hbGdvcml0aG0pO3RyeXtyZXR1cm4gYXdhaXQgJG4uc3VidGxlLnZlcmlmeShvLGksbixyKX1jYXRjaChlKXtyZXR1cm4hMX19O2FzeW5jIGZ1bmN0aW9uIEFyKGUsdCxuKXt2YXIgcjtpZighYnIoZSkpdGhyb3cgbmV3IGFyKCJGbGF0dGVuZWQgSldTIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodm9pZCAwPT09ZS5wcm90ZWN0ZWQmJnZvaWQgMD09PWUuaGVhZGVyKXRocm93IG5ldyBhcignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7aWYodm9pZCAwIT09ZS5wcm90ZWN0ZWQmJiJzdHJpbmciIT10eXBlb2YgZS5wcm90ZWN0ZWQpdGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMD09PWUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG1pc3NpbmciKTtpZigic3RyaW5nIiE9dHlwZW9mIGUuc2lnbmF0dXJlKXRocm93IG5ldyBhcigiSldTIFNpZ25hdHVyZSBtaXNzaW5nIG9yIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwIT09ZS5oZWFkZXImJiFicihlLmhlYWRlcikpdGhyb3cgbmV3IGFyKCJKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7bGV0IGk9e307aWYoZS5wcm90ZWN0ZWQpe2NvbnN0IHQ9dHIoZS5wcm90ZWN0ZWQpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGlzIGludmFsaWQiKX19aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Y29uc3Qgcj10LmZpbHRlcihCb29sZWFuKTtpZigwPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aClyZXR1cm4hMDtsZXQgaTtmb3IoY29uc3QgZSBvZiByKXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKGkmJjAhPT1pLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoaS5oYXMoZSkpcmV0dXJuITE7aS5hZGQoZSl9ZWxzZSBpPW5ldyBTZXQodCl9cmV0dXJuITB9KGksZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBhbmQgSldTIFVucHJvdGVjdGVkIEhlYWRlciBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBkaXNqb2ludCIpO2NvbnN0IG89ey4uLmksLi4uZS5oZWFkZXJ9LHM9ZnVuY3Rpb24oZSx0LG4scixpKXtpZih2b2lkIDAhPT1pLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2xldCBvO289dm9pZCAwIT09bj9uZXcgTWFwKFsuLi5PYmplY3QuZW50cmllcyhuKSwuLi50LmVudHJpZXMoKV0pOnQ7Zm9yKGNvbnN0IHQgb2Ygci5jcml0KXtpZighby5oYXModCkpdGhyb3cgbmV3IHNyKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBub3QgcmVjb2duaXplZCcpKTtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBtaXNzaW5nJykpO2lmKG8uZ2V0KHQpJiZ2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKSl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0oYXIsbmV3IE1hcChbWyJiNjQiLCEwXV0pLG51bGw9PW4/dm9pZCAwOm4uY3JpdCxpLG8pO2xldCBhPSEwO2lmKHMuaGFzKCJiNjQiKSYmKGE9aS5iNjQsImJvb2xlYW4iIT10eXBlb2YgYSkpdGhyb3cgbmV3IGFyKCdUaGUgImI2NCIgKGJhc2U2NHVybC1lbmNvZGUgcGF5bG9hZCkgSGVhZGVyIFBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbicpO2NvbnN0e2FsZzpjfT1vO2lmKCJzdHJpbmciIT10eXBlb2YgY3x8IWMpdGhyb3cgbmV3IGFyKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjb25zdCB1PW4mJigoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcignIicuY29uY2F0KGUsJyIgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkoImFsZ29yaXRobXMiLG4uYWxnb3JpdGhtcyk7aWYodSYmIXUuaGFzKGMpKXRocm93IG5ldyBvcignImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBub3QgYWxsb3dlZCcpO2lmKGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyIpfWVsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQmJiEoZS5wYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtsZXQgbD0hMTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9YXdhaXQgdChpLGUpLGw9ITApLEVyKGMsdCwidmVyaWZ5Iik7Y29uc3QgZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2NvbnN0IHI9dC5yZWR1Y2UoKChlLHQpPT57bGV0e2xlbmd0aDpufT10O3JldHVybiBlK259KSwwKSxpPW5ldyBVaW50OEFycmF5KHIpO2xldCBvPTA7cmV0dXJuIHQuZm9yRWFjaCgoZT0+e2kuc2V0KGUsbyksbys9ZS5sZW5ndGh9KSksaX0oUW4uZW5jb2RlKG51bGwhPT0ocj1lLnByb3RlY3RlZCkmJnZvaWQgMCE9PXI/cjoiIiksUW4uZW5jb2RlKCIuIiksInN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/UW4uZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkKSxoPXRyKGUuc2lnbmF0dXJlKTtpZighYXdhaXQgUnIoYyx0LGgsZCkpdGhyb3cgbmV3IGhyO2xldCBmO2Y9YT90cihlLnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZDtjb25zdCBwPXtwYXlsb2FkOmZ9O3JldHVybiB2b2lkIDAhPT1lLnByb3RlY3RlZCYmKHAucHJvdGVjdGVkSGVhZGVyPWkpLHZvaWQgMCE9PWUuaGVhZGVyJiYocC51bnByb3RlY3RlZEhlYWRlcj1lLmhlYWRlciksbD97Li4ucCxrZXk6dH06cH12YXIgQ3I9ZT0+TWF0aC5mbG9vcihlLmdldFRpbWUoKS8xZTMpO2NvbnN0IFByPTg2NDAwLERyPS9eKFxkK3xcZCtcLlxkKykgPyhzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpJC9pO3ZhciBJcj1lPT57Y29uc3QgdD1Eci5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7Y29uc3Qgbj1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCh0WzJdLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2VjIjpjYXNlInNlY3MiOmNhc2Uic2Vjb25kIjpjYXNlInNlY29uZHMiOmNhc2UicyI6cmV0dXJuIE1hdGgucm91bmQobik7Y2FzZSJtaW51dGUiOmNhc2UibWludXRlcyI6Y2FzZSJtaW4iOmNhc2UibWlucyI6Y2FzZSJtIjpyZXR1cm4gTWF0aC5yb3VuZCg2MCpuKTtjYXNlImhvdXIiOmNhc2UiaG91cnMiOmNhc2UiaHIiOmNhc2UiaHJzIjpjYXNlImgiOnJldHVybiBNYXRoLnJvdW5kKDM2MDAqbik7Y2FzZSJkYXkiOmNhc2UiZGF5cyI6Y2FzZSJkIjpyZXR1cm4gTWF0aC5yb3VuZChuKlByKTtjYXNlIndlZWsiOmNhc2Uid2Vla3MiOmNhc2UidyI6cmV0dXJuIE1hdGgucm91bmQoNjA0ODAwKm4pO2RlZmF1bHQ6cmV0dXJuIE1hdGgucm91bmQoMzE1NTc2MDAqbil9fTtjb25zdCBPcj1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKSxVcj0oZSx0KT0+InN0cmluZyI9PXR5cGVvZiBlP3QuaW5jbHVkZXMoZSk6ISFBcnJheS5pc0FycmF5KGUpJiZ0LnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KGUpKSk7YXN5bmMgZnVuY3Rpb24gTHIoZSx0LG4pe3ZhciByO2NvbnN0IGk9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT1lci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgYXIoIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6ciwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IGFyKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBBcih7cGF5bG9hZDppLHByb3RlY3RlZDpyLHNpZ25hdHVyZTpvfSx0LG4pLGM9e3BheWxvYWQ6YS5wYXlsb2FkLHByb3RlY3RlZEhlYWRlcjphLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLmMsa2V5OmEua2V5fTpjfShlLHQsbik7aWYoKG51bGw9PT0ocj1pLnByb3RlY3RlZEhlYWRlci5jcml0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5pbmNsdWRlcygiYjY0IikpJiYhMT09PWkucHJvdGVjdGVkSGVhZGVyLmI2NCl0aHJvdyBuZXcgY3IoIkpXVHMgTVVTVCBOT1QgdXNlIHVuZW5jb2RlZCBwYXlsb2FkIik7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdHt0eXA6cn09bjtpZihyJiYoInN0cmluZyIhPXR5cGVvZiBlLnR5cHx8T3IoZS50eXApIT09T3IocikpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAidHlwIiBKV1QgaGVhZGVyIHZhbHVlJywidHlwIiwiY2hlY2tfZmFpbGVkIik7bGV0IGk7dHJ5e2k9SlNPTi5wYXJzZShlci5kZWNvZGUodCkpfWNhdGNoKGUpe31pZighYnIoaSkpdGhyb3cgbmV3IGNyKCJKV1QgQ2xhaW1zIFNldCBtdXN0IGJlIGEgdG9wLWxldmVsIEpTT04gb2JqZWN0Iik7Y29uc3R7aXNzdWVyOm99PW47aWYobyYmIShBcnJheS5pc0FycmF5KG8pP286W29dKS5pbmNsdWRlcyhpLmlzcykpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7c3ViamVjdDpzfT1uO2lmKHMmJmkuc3ViIT09cyl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTtjb25zdHthdWRpZW5jZTphfT1uO2lmKGEmJiFVcihpLmF1ZCwic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO2xldCBjO3N3aXRjaCh0eXBlb2Ygbi5jbG9ja1RvbGVyYW5jZSl7Y2FzZSJzdHJpbmciOmM9SXIobi5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmM9bi5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6Yz0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfWNvbnN0e2N1cnJlbnREYXRlOnV9PW4sbD1Dcih1fHxuZXcgRGF0ZSk7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IHJyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmwrYyl0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgcnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWwtYyl0aHJvdyBuZXcgaXIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWwtaS5pYXQ7aWYoZS1jPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTpJcihuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IGlyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1jKXRocm93IG5ldyBycignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfShpLnByb3RlY3RlZEhlYWRlcixpLnBheWxvYWQsbikscz17cGF5bG9hZDpvLHByb3RlY3RlZEhlYWRlcjppLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLnMsa2V5Omkua2V5fTpzfWZ1bmN0aW9uIEhyKGUpe3JldHVybiBicihlKX1jbGFzcyBNcntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLl9jYWNoZWQ9bmV3IFdlYWtNYXAsIWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJkFycmF5LmlzQXJyYXkoZS5rZXlzKSYmZS5rZXlzLmV2ZXJ5KEhyKX0oZSkpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1hbGZvcm1lZCIpO3ZhciB0O3RoaXMuX2p3a3M9KHQ9ZSwiZnVuY3Rpb24iPT10eXBlb2Ygc3RydWN0dXJlZENsb25lP3N0cnVjdHVyZWRDbG9uZSh0KTpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSl9YXN5bmMgZ2V0S2V5KGUsdCl7Y29uc3R7YWxnOm4sa2lkOnJ9PXsuLi5lLC4uLnQuaGVhZGVyfSxpPWZ1bmN0aW9uKGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIGUmJmUuc2xpY2UoMCwyKSl7Y2FzZSJSUyI6Y2FzZSJQUyI6cmV0dXJuIlJTQSI7Y2FzZSJFUyI6cmV0dXJuIkVDIjtjYXNlIkVkIjpyZXR1cm4iT0tQIjtkZWZhdWx0OnRocm93IG5ldyBzcignVW5zdXBwb3J0ZWQgImFsZyIgdmFsdWUgZm9yIGEgSlNPTiBXZWIgS2V5IFNldCcpfX0obiksbz10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9aT09PWUua3R5O2lmKHQmJiJzdHJpbmciPT10eXBlb2YgciYmKHQ9cj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1uPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PW4mJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKG4pe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6cyxsZW5ndGg6YX09bztpZigwPT09YSl0aHJvdyBuZXcgbHI7aWYoMSE9PWEpdGhyb3cgbmV3IGRyO2NvbnN0IGM9dGhpcy5fY2FjaGVkLmdldChzKXx8dGhpcy5fY2FjaGVkLnNldChzLHt9KS5nZXQocyk7aWYodm9pZCAwPT09Y1tuXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoIWJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPW58fChuPSEwIT09ZS5leHQpLG4/a3Ioey4uLmUsYWxnOnQsZXh0OiExfSk6dHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHNyKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIGtyKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ucyxleHQ6ITB9LG4pO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgdXIoIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7Y1tuXT1lfXJldHVybiBjW25dfX12YXIgcXI9e2V4cG9ydHM6e319LGpyPXtleHBvcnRzOnt9fSxOcj1SKGpuKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciBuPU5yLHI9bi5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooaShuLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkocixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1yKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9pLmZpbGwodCxuKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0oanIsanIuZXhwb3J0cyk7dmFyIHhyPTY1NTM2LEtyPTQyOTQ5NjcyOTU7dmFyIEJyPWpyLmV4cG9ydHMuQnVmZmVyLEpyPUUuY3J5cHRvfHxFLm1zQ3J5cHRvO0pyJiZKci5nZXRSYW5kb21WYWx1ZXM/cXIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+S3IpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbj1Cci5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT54cilmb3IodmFyIHI9MDtyPGU7cis9eHIpSnIuZ2V0UmFuZG9tVmFsdWVzKG4uc2xpY2UocixyK3hyKSk7ZWxzZSBKci5nZXRSYW5kb21WYWx1ZXMobik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHZlLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06cXIuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIEZyPXFyLmV4cG9ydHM7Y2xhc3MgV3J7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBWbi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gVm4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gWnQuZnJvbShYbigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBGcihlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyl7cmV0dXJuIExyKGUsKGE9e2tleXM6W3RdfSxNci5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IE1yKGEpKSkse2FsZ29yaXRobXM6bixhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOnMsaXNzdWVyOmksc3ViamVjdDpvfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+e3ZhciB0O3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUNSWVBUTy1VVElMUy1WSi1JVjAxIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5yZWFzb24pJiZ2b2lkIDAhPT10P3Q6SlNPTi5zdHJpbmdpZnkoZSksIiIuY29uY2F0KG51bGw9PWU/dm9pZCAwOmUuY29kZSwiICIpLmNvbmNhdChudWxsPT1lP3ZvaWQgMDplLmNsYWltKSkpfSkpO3ZhciBhfX1vcmlnaW4seS5TZXNzaW9uU3RvcmFnZTtjbGFzcyB6cntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHQpe3ZhciBuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYobnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnBlcmlvZGljVG9rZW5SZWZyZXNoKXtjb25zdCBuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKG4ucmVmcmVzaF90b2tlbil7Y29uc3Qgcj1wYXJzZUludChuLmV4cGlyZXNfaW4pLG89c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKHI8PTEwP3I6ci0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkobykpfX19KSl9Z2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKT9KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTotMX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXJldHVybiB2b2lkIGNsZWFyVGltZW91dCh0KTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpOy0xIT09ZSYmY2xlYXJUaW1lb3V0KGUpfSkpfX1jbGFzcyBZcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpLHRoaXMuX3NwYUhlbHBlcj10LHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExfWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIsSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1NQUlOX1RIUkVBRF9DTElFTlQtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYik7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCk7cmV0dXJuIGUmJih5aWVsZCB0aGlzLnJlcXVlc3RDdXN0b21HcmFudChlLHQpKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX0pKX1yZXRyeUZhaWxlZFJlcXVlc3RzKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT10Lmh0dHBDbGllbnQsbj10LnJlcXVlc3RDb25maWcscj10LmlzSHR0cEhhbmRsZXJFbmFibGVkLGk9dC5odHRwRXJyb3JDYWxsYmFjayxvPXQuaHR0cEZpbmlzaENhbGxiYWNrO3lpZWxkIHF0LnVudGlsKCgoKT0+IXRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nKSk7dHJ5e2NvbnN0IHQ9eWllbGQgZS5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUodCl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX0pKX1odHRwUmVxdWVzdCh0LG4scixpLG8scyl7dmFyIGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSExO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGE9eWllbGQgbnVsbD09ZD92b2lkIDA6ZC5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihlJiYobnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4udXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha31yZXR1cm4gbD90LnJlcXVlc3QobikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSx1LGw7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpKXtpZih0aGlzLl9pc1Rva2VuUmVmcmVzaGluZylyZXR1cm4gdGhpcy5yZXRyeUZhaWxlZFJlcXVlc3RzKHtlbmFibGVSZXRyaWV2aW5nU2lnbk91dFVSTEZyb21TZXNzaW9uOnMsaHR0cENsaWVudDp0LGh0dHBFcnJvckNhbGxiYWNrOmksaHR0cEZpbmlzaENhbGxiYWNrOm8saXNIdHRwSGFuZGxlckVuYWJsZWQ6cixyZXF1ZXN0Q29uZmlnOm59KTtsZXQgZTt0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMDt0cnl7ZT15aWVsZCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbihzKSx0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMX1jYXRjaChlKXt0aHJvdyB0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMSxyJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLVNFMDEiLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT11P3U6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGw9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bD9sOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSl0cnl7Y29uc3QgZT15aWVsZCB0LnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGEpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChhKX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWh0dHBSZXF1ZXN0QWxsKHQsbixyLGksbyl7dmFyIHMsYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITA7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBuIG9mWy4uLm51bGwhPT0oYT1udWxsPT09KHM9eWllbGQgZCl8fHZvaWQgMD09PXM/dm9pZCAwOnMucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYobiYmKG51bGw9PT0odT1lLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChuKSkpe3Q9ITA7YnJlYWt9aWYoIXQpe2w9ITE7YnJlYWt9fWNvbnN0IGg9W107aWYobClyZXR1cm4gdC5mb3JFYWNoKChlPT57aC5wdXNoKG4ucmVxdWVzdChlKSl9KSksKG51bGw9PW4/dm9pZCAwOm4uYWxsKSYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcyxhLHU7aWYoNDAxPT09KG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09cz92b2lkIDA6cy5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgczt0cnl7cz15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1TRTAxIixudWxsIT09KGE9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09YT9hOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PXU/dToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKHMpcmV0dXJuIG4uYWxsJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpfXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpO3Rocm93IG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbih0LG4scixpLG8pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHMuc3RvcmFnZT09PXkuQnJvd3Nlck1lbW9yeSYmcy5lbmFibGVQS0NFJiZuKXtjb25zdCBlPXF0LmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBzLnN0b3JhZ2U9PT15LldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIikudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5zdG9yYWdlIT09eS5XZWJXb3JrZXI/KHF0LnNldFNpZ25PdXRVUkwoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0U2lnbk91dFVSTCgpKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyKXt2YXIgaTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHF0LmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSlyZXR1cm4geWllbGQgci5yZWNlaXZlUHJvbXB0Tm9uZVJlc3BvbnNlKCksUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7Y29uc3Qgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxzPW51bGw9PT0oaT1udWxsPT1vP3ZvaWQgMDpvLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKTt0cnl7Y29uc3QgZT15aWVsZCB0KCk7cy5zcmM9ZX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIG5ldyBQcm9taXNlKCgodCxyKT0+e2NvbnN0IGk9c2V0VGltZW91dCgoKCk9Pnt0KCExKX0pLDFlNCksbz1zPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsYSxjLHU7Y29uc3QgbD1zLmRhdGE7ImNoZWNrX3Nlc3Npb25fc2lnbmVkX291dCI9PShudWxsPT1sP3ZvaWQgMDpsLnR5cGUpJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLGNsZWFyVGltZW91dChpKSx0KCExKSksImNoZWNrX3Nlc3Npb25fc2lnbmVkX2luIj09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJihudWxsPT09KGU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jb2RlKSYmbihudWxsPT09KGE9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09YT92b2lkIDA6YS5jb2RlLG51bGw9PT0oYz1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnNlc3Npb25TdGF0ZSxudWxsPT09KHU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGF0ZSkudGhlbigoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSx0KGUpfSkpLmNhdGNoKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoZSl9KSkuZmluYWxseSgoKCk9PntjbGVhclRpbWVvdXQoaSl9KSl9KSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pfSkpfSkpfWhhbmRsZVNpZ25Jbih0LG4scil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoeWllbGQgdCgpKXJldHVybiBQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtpZihlLnN0b3JhZ2UhPT15LldlYldvcmtlciYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSlyZXR1cm4gdGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLGUuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZuKCksUHJvbWlzZS5yZXNvbHZlKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y29uc3QgaT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChTKTtpZihpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Rocm93IGUuc2VhcmNoUGFyYW1zLmRlbGV0ZShfKSxlLnNlYXJjaFBhcmFtcy5kZWxldGUoUyksaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxkb2N1bWVudC50aXRsZSxlLnRvU3RyaW5nKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItU0ktU0UwMSIsaSxudWxsIT1vP286IiIpfWlmKGUuc3RvcmFnZT09PXkuV2ViV29ya2VyJiZyKXtjb25zdCBlPXlpZWxkIHIoKTtpZihlKXJldHVybiBlfX0pKX1hdHRhY2hUb2tlblRvUmVxdWVzdENvbmZpZyh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9T2JqZWN0LmFzc2lnbih7YXR0YWNoVG9rZW46ITB9LHQpO2UuYXR0YWNoVG9rZW4mJihlLnNob3VsZEF0dGFjaElEUEFjY2Vzc1Rva2VuP3QuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KHlpZWxkIHRoaXMuZ2V0SURQQWNjZXNzVG9rZW4oKSl9KTp0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246IkJlYXJlciAiLmNvbmNhdCh5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfSkpfWdldEJhc2ljVXNlckluZm8oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Z2V0RGVjb2RlZElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldERlY29kZWRJRFBJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXRDcnlwdG9IZWxwZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRDcnlwdG9IZWxwZXIoKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SURUb2tlbigpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX1nZXRBY2Nlc3NUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCl9KSl9Z2V0SURQQWNjZXNzVG9rZW4oKXt2YXIgdDtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmFjY2Vzc190b2tlbn0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWlzQXV0aGVudGljYXRlZCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpfSkpfX0odD0+e2NvbnN0IG49c2VsZjtsZXQgcjtuLm9ubWVzc2FnZT1uPT57bGV0e2RhdGE6YSxwb3J0czp1fT1uO3JldHVybiBlKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixsLGQsaCxmLHA7Y29uc3QgeT11WzBdO2lmKGEudHlwZT09PXZ8fHIpc3dpdGNoKGEudHlwZSl7Y2FzZSB2OnRyeXtjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sYS5kYXRhKTtyPXlpZWxkKCh0LG4pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBIdCxpPW5ldyBXcixvPW5ldyBnKHIsaSk7eWllbGQgby5pbml0aWFsaXplKHQpO2NvbnN0IHM9bmV3IHpyKG8pLGE9bihvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSx1PUx0LmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXU/dm9pZCAwOnUuaW5pdCkmJih5aWVsZCB1LmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIGEuYXR0YWNoVG9rZW5Ub1JlcXVlc3RDb25maWcodCl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShuLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpyLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09YT92b2lkIDA6YS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6ci5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGw9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zZXNzaW9uU3RhdGUsbnVsbD09PShkPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucGtjZSxudWxsPT09KGg9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zdGF0ZSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijp7Y29uc3QgZT1hLmRhdGEsdD1udWxsPT1lP3ZvaWQgMDplLmRhdGE7aWYoITA9PT0obnVsbD09PShwPW51bGw9PT0oZj1hLmRhdGEpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmRhdGEpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmZvcm1EYXRhKSl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0IGUgaW4gdCkiZm9ybURhdGEiIT09ZSYmbi5hcHBlbmQoZSx0W2VdKTtlLmRhdGE9bn1yLmh0dHBSZXF1ZXN0KGUpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVha31jYXNlImh0dHAtcmVxdWVzdC1hbGwiOnIuaHR0cFJlcXVlc3RBbGwoYS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnNpZ25PdXQoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZXF1ZXN0LWN1c3RvbS1ncmFudCI6ci5yZXF1ZXN0Q3VzdG9tR3JhbnQoYS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpyLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1iYXNpYy11c2VyLWluZm8iOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1jcnlwdG8taGVscGVyIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q3J5cHRvSGVscGVyKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2lkX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOnIuZW5hYmxlSHR0cEhhbmRsZXIoKSx5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6ci5kaXNhYmxlSHR0cEhhbmRsZXIoKSx5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnJlZnJlc2hBY2Nlc3NUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShyLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2V0U2Vzc2lvblN0YXRlKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnVwZGF0ZUNvbmZpZyhudWxsPT1hP3ZvaWQgMDphLmRhdGEpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT15fHx5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGMoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIiwiVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgIi5jb25jYXQoYS50eXBlLCIsIGlzIGludmFsaWQuIikpKSl9ZWxzZSB5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGMoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpfTtjb25zdCBpPSgpPT57bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0sbz1lPT57bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scz0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3QtZmluaXNoIn0pfX0pKCgoZSx0KT0+bmV3IFlyKGUsdCkpKTtyZXR1cm57fX0oKTsKCg==",$G=null,eX=!1,function(e){return tX=tX||_G(qG,$G,eX),new Worker(tX,e)});const nX="init",lX="sign-out",oX="http-request",cX="http-request-all",aX="request-custom-grant",rX="revoke-access-token",dX="request-start",sX="request-success",uX="request-finish",ZX="get-oidc-service-endpoints",hX="get-basic-user-info",bX="get-decoded-id-token",mX="get-crypto-helper",pX="enable_http_handler",IX="disable_http_handler",gX="get_auth_url",yX="request_get_token",GX="is_authenticated",XX="get_sign_out_url",WX="refresh_access-token",CX="set_session_state",VX="start_auto_refresh_token",RX="update_config",SX="get_id_token",vX="check_session_signed_in",fX="check_session_signed_out",YX="get_config_data",KX="set_session_state_from_iframe";var NX,JX;e.Storage=void 0,(NX=e.Storage||(e.Storage={})).LocalStorage="localStorage",NX.SessionStorage="sessionStorage",NX.WebWorker="webWorker",NX.BrowserMemory="browserMemory",e.Hooks=void 0,(JX=e.Hooks||(e.Hooks={})).SignIn="sign-in",JX.SignOut="sign-out",JX.Initialize="initialize",JX.HttpRequestStart="http-request-start",JX.HttpRequestFinish="http-request-finish",JX.HttpRequestError="http-request-error",JX.HttpRequestSuccess="http-request-success",JX.RevokeAccessToken="revoke-access-token",JX.CustomGrant="custom-grant",JX.SignOutFailed="sign-out-failed";const HX="rpIFrame",LX="promptNoneIFrame",kX="Y2hlY2tTZXNzaW9u",AX="sign-in-silently",UX="initialized-silent-sign-in",TX="promptNoneRequestSent",BX="error",FX="error_description",wX="custom_grant_config",zX="state",xX="Access token is invalid";class PX{constructor(e,t){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=t,this._isTokenRefreshing=!1}enableHttpHandler(e){(null==e?void 0:e.enableHandler)&&e.enableHandler()}disableHttpHandler(e){(null==e?void 0:e.disableHandler)&&e.disableHandler()}initializeSessionManger(e,t,i,n,l){var o,c,a;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(c=e.checkSessionInterval)&&void 0!==c?c:3,null!==(a=e.sessionRefreshInterval)&&void 0!==a?a:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return HG(this,void 0,void 0,(function*(){let o=!0,c=!1;if(null==e?void 0:e.tokenEndpoint){o=!1;for(const t of[...null!==(n=null===(i=yield this._dataLayer.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],e.baseUrl])if(t&&(null===(l=e.tokenEndpoint)||void 0===l?void 0:l.startsWith(t))){c=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter(wX,JSON.stringify(e)),o||c?this._authenticationClient.requestCustomGrant(e).then((i=>HG(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):i})))).catch((e=>Promise.reject(e))):Promise.reject(new xG("SPA-MAIN_THREAD_CLIENT-RCG-IV01","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))}))}getCustomGrantConfigData(){return HG(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter(wX);return e?JSON.parse(e):null}))}refreshAccessToken(e){return HG(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const t=yield this.getCustomGrantConfigData();return t&&(yield this.requestCustomGrant(t,e)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(e){return Promise.reject(e)}}))}retryFailedRequests(e){return HG(this,void 0,void 0,(function*(){const t=e.httpClient,i=e.requestConfig,n=e.isHttpHandlerEnabled,l=e.httpErrorCallback,o=e.httpFinishCallback;yield MX.until((()=>!this._isTokenRefreshing));try{const e=yield t.request(i);return Promise.resolve(e)}catch(e){return n&&("function"==typeof l&&(yield l(e)),"function"==typeof o&&o()),Promise.reject(e)}}))}httpRequest(e,t,i,n,l,o){var c,a;return HG(this,void 0,void 0,(function*(){let r=!1;const d=yield this._dataLayer.getConfigData();for(const e of[...null!==(c=yield null==d?void 0:d.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(e&&(null===(a=null==t?void 0:t.url)||void 0===a?void 0:a.startsWith(e))){r=!0;break}return r?e.request(t).then((e=>Promise.resolve(e))).catch((c=>HG(this,void 0,void 0,(function*(){var a,r,d;if(401===(null===(a=null==c?void 0:c.response)||void 0===a?void 0:a.status)||!(null==c?void 0:c.response)){if(this._isTokenRefreshing)return this.retryFailedRequests({enableRetrievingSignOutURLFromSession:o,httpClient:e,httpErrorCallback:n,httpFinishCallback:l,isHttpHandlerEnabled:i,requestConfig:t});let a;this._isTokenRefreshing=!0;try{a=yield this.refreshAccessToken(o),this._isTokenRefreshing=!1}catch(e){throw this._isTokenRefreshing=!1,i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},c),{code:xX}))),"function"==typeof l&&l()),new xG("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==e?void 0:e.name)&&void 0!==r?r:"Refresh token request failed.",null!==(d=null==e?void 0:e.message)&&void 0!==d?d:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(a)try{const i=yield e.request(t);return Promise.resolve(i)}catch(e){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}}return i&&("function"==typeof n&&(yield n(c)),"function"==typeof l&&l()),Promise.reject(c)})))):Promise.reject(new xG("SPA-AUTH_HELPER-HR-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))}))}httpRequestAll(e,t,i,n,l){var o,c,a;return HG(this,void 0,void 0,(function*(){let r=!0;const d=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(c=null===(o=yield d)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(i&&(null===(a=t.url)||void 0===a?void 0:a.startsWith(i))){e=!0;break}if(!e){r=!1;break}}const s=[];if(r)return e.forEach((e=>{s.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>HG(this,void 0,void 0,(function*(){var o,c,a;if(401===(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.status)||!(null==e?void 0:e.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(t){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},e),{code:xX}))),"function"==typeof l&&l()),new xG("SPA-AUTH_HELPER-HRA-SE01",null!==(c=null==t?void 0:t.name)&&void 0!==c?c:"Refresh token request failed.",null!==(a=null==t?void 0:t.message)&&void 0!==a?a:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>HG(this,void 0,void 0,(function*(){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new xG("SPA-AUTH_HELPER-HRA-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")}))}requestAccessToken(t,i,n,l,o){return HG(this,void 0,void 0,(function*(){const c=yield this._dataLayer.getConfigData();if(c.storage===e.Storage.BrowserMemory&&c.enablePKCE&&i){const e=MX.getPKCE(PG.extractPKCEKeyFromStateParam(i));yield this._authenticationClient.setPKCECode(PG.extractPKCEKeyFromStateParam(i),e)}else c.storage===e.Storage.WebWorker&&l&&(yield this._authenticationClient.setPKCECode(l,null!=o?o:""));return t?this._authenticationClient.requestAccessToken(t,null!=i?i:"",null!=o?o:"").then((()=>HG(this,void 0,void 0,(function*(){return c.storage!==e.Storage.WebWorker?(MX.setSignOutURL(yield this._authenticationClient.getSignOutURL()),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&c.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new xG("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i){var n;return HG(this,void 0,void 0,(function*(){if(MX.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const l=document.getElementById(HX),o=null===(n=null==l?void 0:l.contentDocument)||void 0===n?void 0:n.getElementById(LX);try{const t=yield e();o.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),l=o=>HG(this,void 0,void 0,(function*(){var c,a,r,d;const s=o.data;(null==s?void 0:s.type)==fX&&(window.removeEventListener("message",l),clearTimeout(n),e(!1)),(null==s?void 0:s.type)==vX&&(null===(c=null==s?void 0:s.data)||void 0===c?void 0:c.code)&&t(null===(a=null==s?void 0:s.data)||void 0===a?void 0:a.code,null===(r=null==s?void 0:s.data)||void 0===r?void 0:r.sessionState,null===(d=null==s?void 0:s.data)||void 0===d?void 0:d.state).then((t=>{window.removeEventListener("message",l),e(t)})).catch((e=>{window.removeEventListener("message",l),i(e)})).finally((()=>{clearTimeout(n)}))}));window.addEventListener("message",l)}))}))}handleSignIn(t,i,n){return HG(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(l.storage!==e.Storage.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&i(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const o=new URL(window.location.href).searchParams.get(BX),c=new URL(window.location.href).searchParams.get(FX);if(o){const e=new URL(window.location.href);throw e.searchParams.delete(BX),e.searchParams.delete(FX),history.pushState(null,document.title,e.toString()),new xG("SPA-AUTH_HELPER-SI-SE01",o,null!=c?c:"")}if(l.storage===e.Storage.WebWorker&&n){const e=yield n();if(e)return e}}))}attachTokenToRequestConfig(e){return HG(this,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getAccessToken())}))}))}getBasicUserInfo(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return HG(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData())||void 0===e?void 0:e.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class jX{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){var t;return HG(this,void 0,void 0,(function*(){if(null===(t=yield this._dataLayer.getConfigData())||void 0===t?void 0:t.periodicTokenRefresh){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const i=parseInt(t.expires_in),n=setTimeout((()=>HG(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(i<=10?i:i-10));yield this._dataLayer.setTemporaryDataParameter(kG,JSON.stringify(n))}}}))}getRefreshTimeoutTimer(){return HG(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(kG))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(kG)):-1}))}clearRefreshTokenTimeout(e){return HG(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}class QX{constructor(){}static generateSuccessMessage(e){return{blob:(null==e?void 0:e.data)instanceof Blob?null==e?void 0:e.data:null,data:JSON.stringify(null!=e?e:""),success:!0}}static generateFailureMessage(e){return(null==e?void 0:e.toJSON)&&delete e.toJSON,{error:JSON.stringify(null!=e?e:""),success:!1}}}class MX{constructor(){}static removeAuthorizationCode(){const e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}static getPKCE(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}static setPKCE(e,t){sessionStorage.setItem(e,t)}static setSignOutURL(e){sessionStorage.setItem(BG,e)}static getSignOutURL(){var e;return null!==(e=sessionStorage.getItem(BG))&&void 0!==e?e:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!MX.hasErrorInURL()&&!MX.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return MX.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!MX.hasErrorInURL()&&!MX.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem(UX),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return HG(this,void 0,void 0,(function*(){if(OG.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield OG.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(OG.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get(BX),i=e.searchParams.get(FX),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=i?i:"",error:null!=t?t:""}}return!1}static isSilentStatePresentInURL(){var e;const t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes(AX))&&void 0!==e&&e}static hasAuthSearchParamsInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return/[?&]code=[^&]+/.test(e)}static hasErrorInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const t=new URL(e);return!!t.searchParams.get(BX)&&t.searchParams.get(zX)!==FG}static canSendPromptNoneRequest(){const e=sessionStorage.getItem(TX);return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem(TX,JSON.stringify(e))}static waitTillPageRedirect(e){return HG(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}MX.until=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;const i=n=>e()?n():setTimeout((()=>i(n)),t);return new Promise(i)};const EX=(()=>{let t,i,n,l,o,c,a,r,d,s,u;const Z=(e,a,r,d,s,Z,b)=>{t=e,i=a,n=r,l=d,o=Z,c=s,u=b,l>-1&&h(),c>-1&&(s=setInterval((()=>{p()}),1e3*c))},h=()=>HG(void 0,void 0,void 0,(function*(){var e;if(!i||!t||!o)return;const c="opIFrame";const a=document.getElementById(HX);(null===(e=null==a?void 0:a.contentDocument)||void 0===e?void 0:e.getElementById(c)).src=i+"?client_id="+t+"&redirect_uri="+o,r=setInterval((function(){var e;return HG(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n="".concat(t," ").concat(l),o=document.getElementById(HX),a=(null===(e=null==o?void 0:o.contentDocument)||void 0===e?void 0:e.getElementById(c)).contentWindow;null==a||a.postMessage(n,i)}}))}),1e3*l),m()})),b=()=>{clearInterval(r),clearInterval(undefined)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var t;return HG(this,void 0,void 0,(function*(){const n=i;!n||(null==n?void 0:n.indexOf(e.origin))<0||(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===KX||"unchanged"===e.data||("error"===e.data?window.location.href=yield a():"changed"===e.data&&p())}))}),!1)},p=()=>HG(void 0,void 0,void 0,(function*(){var t;const i=document.getElementById(HX),n=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(LX);if(MX.canSendPromptNoneRequest()){MX.setPromptNoneRequestSent(!0);const t=e=>{var i,n,l;(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)===KX&&(s(null!==(l=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",t))};d!==e.Storage.BrowserMemory&&d!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const i=yield u({prompt:"none",responseMode:"query",state:kX});n.src=i}})),I=t=>HG(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get(zX),o=new URL(window.location.href).searchParams.get(TG),c=window.parent.parent;if(null!==l&&(l.includes(kX)||l.includes(AX))){const r=new URL(window.location.href).searchParams.get("code");if(null!==r&&0!==r.length){if(l.includes(AX)){const e={data:{code:r,sessionState:null!=o?o:"",state:l},type:vX};return sessionStorage.setItem(UX,"false"),c.postMessage(e,c.origin),MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}const a=new URL(window.location.href).searchParams.get("session_state");if(d===e.Storage.LocalStorage||d===e.Storage.SessionStorage)t&&(yield t(a));else{const e={data:null!=a?a:"",type:KX};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(e)}return MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}{if(l.includes(AX)){const e={type:fX};return window.parent.parent.postMessage(e,c.origin),MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}MX.setPromptNoneRequestSent(!1);const e=yield a();return yield OG.clearUserSessionData(),c.location.href=e,window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>HG(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id",HX),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById(HX);const c=null==l?void 0:l.contentDocument,a=null==c?void 0:c.createElement("iframe");a&&(a.setAttribute("id","opIFrame"),a.style.display="none");const r=null==c?void 0:c.createElement("iframe");r&&(r.setAttribute("id",LX),r.style.display="none"),a&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(a)),r&&(null===(n=null===(i=null==l?void 0:l.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(r)),o=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(l),a=e,d=t,s=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:Z,receivePromptNoneResponse:I,reset:b}}))})();var DX={exports:{}},OX=function(e,t){return function(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];return e.apply(t,i)}},_X=OX,qX=Object.prototype.toString;function $X(e){return Array.isArray(e)}function eW(e){return void 0===e}function tW(e){return"[object ArrayBuffer]"===qX.call(e)}function iW(e){return null!==e&&"object"==typeof e}function nW(e){if("[object Object]"!==qX.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function lW(e){return"[object Function]"===qX.call(e)}function oW(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),$X(e))for(var i=0,n=e.length;i<n;i++)t.call(null,e[i],i,e);else for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&t.call(null,e[l],l,e)}var cW={isArray:$X,isArrayBuffer:tW,isBuffer:function(e){return null!==e&&!eW(e)&&null!==e.constructor&&!eW(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===qX.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&tW(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:iW,isPlainObject:nW,isUndefined:eW,isDate:function(e){return"[object Date]"===qX.call(e)},isFile:function(e){return"[object File]"===qX.call(e)},isBlob:function(e){return"[object Blob]"===qX.call(e)},isFunction:lW,isStream:function(e){return iW(e)&&lW(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===qX.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:oW,merge:function e(){var t={};function i(i,n){nW(t[n])&&nW(i)?t[n]=e(t[n],i):nW(i)?t[n]=e({},i):$X(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)oW(arguments[n],i);return t},extend:function(e,t,i){return oW(t,(function(t,n){e[n]=i&&"function"==typeof t?_X(t,i):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}},aW=cW;function rW(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var dW=function(e,t,i){if(!t)return e;var n;if(i)n=i(t);else if(aW.isURLSearchParams(t))n=t.toString();else{var l=[];aW.forEach(t,(function(e,t){null!=e&&(aW.isArray(e)?t+="[]":e=[e],aW.forEach(e,(function(e){aW.isDate(e)?e=e.toISOString():aW.isObject(e)&&(e=JSON.stringify(e)),l.push(rW(t)+"="+rW(e))})))})),n=l.join("&")}if(n){var o=e.indexOf("#");-1!==o&&(e=e.slice(0,o)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e},sW=cW;function uW(){this.handlers=[]}uW.prototype.use=function(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},uW.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},uW.prototype.forEach=function(e){sW.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var ZW=uW,hW="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function bW(){throw new Error("setTimeout has not been defined")}function mW(){throw new Error("clearTimeout has not been defined")}var pW=bW,IW=mW;function gW(e){if(pW===setTimeout)return setTimeout(e,0);if((pW===bW||!pW)&&setTimeout)return pW=setTimeout,setTimeout(e,0);try{return pW(e,0)}catch(t){try{return pW.call(null,e,0)}catch(t){return pW.call(this,e,0)}}}"function"==typeof hW.setTimeout&&(pW=setTimeout),"function"==typeof hW.clearTimeout&&(IW=clearTimeout);var yW,GW=[],XW=!1,WW=-1;function CW(){XW&&yW&&(XW=!1,yW.length?GW=yW.concat(GW):WW=-1,GW.length&&VW())}function VW(){if(!XW){var e=gW(CW);XW=!0;for(var t=GW.length;t;){for(yW=GW,GW=[];++WW<t;)yW&&yW[WW].run();WW=-1,t=GW.length}yW=null,XW=!1,function(e){if(IW===clearTimeout)return clearTimeout(e);if((IW===mW||!IW)&&clearTimeout)return IW=clearTimeout,clearTimeout(e);try{IW(e)}catch(t){try{return IW.call(null,e)}catch(t){return IW.call(this,e)}}}(e)}}function RW(e,t){this.fun=e,this.array=t}RW.prototype.run=function(){this.fun.apply(null,this.array)};function SW(){}var vW=SW,fW=SW,YW=SW,KW=SW,NW=SW,JW=SW,HW=SW;var LW=hW.performance||{},kW=LW.now||LW.mozNow||LW.msNow||LW.oNow||LW.webkitNow||function(){return(new Date).getTime()};var AW=new Date;var UW={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];GW.push(new RW(e,t)),1!==GW.length||XW||gW(VW)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:vW,addListener:fW,once:YW,off:KW,removeListener:NW,removeAllListeners:JW,emit:HW,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*kW.call(LW),i=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(i-=e[0],(n-=e[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-AW)/1e3}},TW=UW,BW=cW,FW=function(e,t,i,n,l){return e.config=t,i&&(e.code=i),e.request=n,e.response=l,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e},wW={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},zW=FW,xW=function(e,t,i,n,l){var o=new Error(e);return zW(o,t,i,n,l)},PW=xW,jW=cW,QW=jW.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var c=[];c.push(e+"="+encodeURIComponent(t)),jW.isNumber(i)&&c.push("expires="+new Date(i).toGMTString()),jW.isString(n)&&c.push("path="+n),jW.isString(l)&&c.push("domain="+l),!0===o&&c.push("secure"),document.cookie=c.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},MW=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},EW=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e},DW=cW,OW=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],_W=cW,qW=_W.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(e){var n=e;return t&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=n(window.location.href),function(t){var i=_W.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0};function $W(e){this.message=e}$W.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},$W.prototype.__CANCEL__=!0;var eC=$W,tC=cW,iC=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(PW("Request failed with status code "+i.status,i.config,null,i.request,i)):e(i)},nC=QW,lC=dW,oC=function(e,t){return e&&!MW(t)?EW(e,t):t},cC=function(e){var t,i,n,l={};return e?(DW.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=DW.trim(e.substr(0,n)).toLowerCase(),i=DW.trim(e.substr(n+1)),t){if(l[t]&&OW.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},aC=qW,rC=xW,dC=wW,sC=eC,uC=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,c=e.responseType;function a(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}tC.isFormData(l)&&delete o["Content-Type"];var r=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",s=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(d+":"+s)}var u=oC(e.baseURL,e.url);function Z(){if(r){var n="getAllResponseHeaders"in r?cC(r.getAllResponseHeaders()):null,l={data:c&&"text"!==c&&"json"!==c?r.response:r.responseText,status:r.status,statusText:r.statusText,headers:n,config:e,request:r};iC((function(e){t(e),a()}),(function(e){i(e),a()}),l),r=null}}if(r.open(e.method.toUpperCase(),lC(u,e.params,e.paramsSerializer),!0),r.timeout=e.timeout,"onloadend"in r?r.onloadend=Z:r.onreadystatechange=function(){r&&4===r.readyState&&(0!==r.status||r.responseURL&&0===r.responseURL.indexOf("file:"))&&setTimeout(Z)},r.onabort=function(){r&&(i(rC("Request aborted",e,"ECONNABORTED",r)),r=null)},r.onerror=function(){i(rC("Network Error",e,null,r)),r=null},r.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||dC;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(rC(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},tC.isStandardBrowserEnv()){var h=(e.withCredentials||aC(u))&&e.xsrfCookieName?nC.read(e.xsrfCookieName):void 0;h&&(o[e.xsrfHeaderName]=h)}"setRequestHeader"in r&&tC.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:r.setRequestHeader(t,e)})),tC.isUndefined(e.withCredentials)||(r.withCredentials=!!e.withCredentials),c&&"json"!==c&&(r.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&r.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&r.upload&&r.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(e){r&&(i(!e||e&&e.type?new sC("canceled"):e),r.abort(),r=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),l||(l=null),r.send(l)}))},ZC=cW,hC=function(e,t){BW.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},bC=FW,mC={"Content-Type":"application/x-www-form-urlencoded"};function pC(e,t){!ZC.isUndefined(e)&&ZC.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var IC,gC={transitional:wW,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==TW&&"[object process]"===Object.prototype.toString.call(TW))&&(IC=uC),IC),transformRequest:[function(e,t){return hC(t,"Accept"),hC(t,"Content-Type"),ZC.isFormData(e)||ZC.isArrayBuffer(e)||ZC.isBuffer(e)||ZC.isStream(e)||ZC.isFile(e)||ZC.isBlob(e)?e:ZC.isArrayBufferView(e)?e.buffer:ZC.isURLSearchParams(e)?(pC(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):ZC.isObject(e)||t&&"application/json"===t["Content-Type"]?(pC(t,"application/json"),function(e,t,i){if(ZC.isString(e))try{return(t||JSON.parse)(e),ZC.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||gC.transitional,i=t&&t.silentJSONParsing,n=t&&t.forcedJSONParsing,l=!i&&"json"===this.responseType;if(l||n&&ZC.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(l){if("SyntaxError"===e.name)throw bC(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};ZC.forEach(["delete","get","head"],(function(e){gC.headers[e]={}})),ZC.forEach(["post","put","patch"],(function(e){gC.headers[e]=ZC.merge(mC)}));var yC=gC,GC=cW,XC=yC,WC=function(e){return!(!e||!e.__CANCEL__)},CC=cW,VC=function(e,t,i){var n=this||XC;return GC.forEach(i,(function(i){e=i.call(n,e,t)})),e},RC=WC,SC=yC,vC=eC;function fC(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new vC("canceled")}var YC=cW,KC=function(e,t){t=t||{};var i={};function n(e,t){return YC.isPlainObject(e)&&YC.isPlainObject(t)?YC.merge(e,t):YC.isPlainObject(t)?YC.merge({},t):YC.isArray(t)?t.slice():t}function l(i){return YC.isUndefined(t[i])?YC.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!YC.isUndefined(t[e]))return n(void 0,t[e])}function c(i){return YC.isUndefined(t[i])?YC.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function a(i){return i in t?n(e[i],t[i]):i in e?n(void 0,e[i]):void 0}var r={url:o,method:o,data:o,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:a};return YC.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=r[e]||l,n=t(e);YC.isUndefined(n)&&t!==a||(i[e]=n)})),i},NC="0.26.1",JC=NC,HC={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){HC[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var LC={};HC.transitional=function(e,t,i){function n(e,t){return"[Axios v"+JC+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new Error(n(l," has been removed"+(t?" in "+t:"")));return t&&!LC[l]&&(LC[l]=!0,console.warn(n(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,l,o)}};var kC={assertOptions:function(e,t,i){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],c=t[o];if(c){var a=e[o],r=void 0===a||c(a,o,e);if(!0!==r)throw new TypeError("option "+o+" must be "+r)}else if(!0!==i)throw Error("Unknown option "+o)}},validators:HC},AC=cW,UC=dW,TC=ZW,BC=function(e){return fC(e),e.headers=e.headers||{},e.data=VC.call(e,e.data,e.headers,e.transformRequest),e.headers=CC.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),CC.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||SC.adapter)(e).then((function(t){return fC(e),t.data=VC.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return RC(t)||(fC(e),t&&t.response&&(t.response.data=VC.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},FC=KC,wC=kC,zC=wC.validators;function xC(e){this.defaults=e,this.interceptors={request:new TC,response:new TC}}xC.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=FC(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var i=t.transitional;void 0!==i&&wC.assertOptions(i,{silentJSONParsing:zC.transitional(zC.boolean),forcedJSONParsing:zC.transitional(zC.boolean),clarifyTimeoutError:zC.transitional(zC.boolean)},!1);var n=[],l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!l){var a=[BC,void 0];for(Array.prototype.unshift.apply(a,n),a=a.concat(c),o=Promise.resolve(t);a.length;)o=o.then(a.shift(),a.shift());return o}for(var r=t;n.length;){var d=n.shift(),s=n.shift();try{r=d(r)}catch(e){s(e);break}}try{o=BC(r)}catch(e){return Promise.reject(e)}for(;c.length;)o=o.then(c.shift(),c.shift());return o},xC.prototype.getUri=function(e){return e=FC(this.defaults,e),UC(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},AC.forEach(["delete","get","head","options"],(function(e){xC.prototype[e]=function(t,i){return this.request(FC(i||{},{method:e,url:t,data:(i||{}).data}))}})),AC.forEach(["post","put","patch"],(function(e){xC.prototype[e]=function(t,i,n){return this.request(FC(n||{},{method:e,url:t,data:i}))}}));var PC=xC,jC=eC;function QC(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var i=this;this.promise.then((function(e){if(i._listeners){var t,n=i._listeners.length;for(t=0;t<n;t++)i._listeners[t](e);i._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){i.subscribe(e),t=e})).then(e);return n.cancel=function(){i.unsubscribe(t)},n},e((function(e){i.reason||(i.reason=new jC(e),t(i.reason))}))}QC.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},QC.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},QC.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},QC.source=function(){var e,t=new QC((function(t){e=t}));return{token:t,cancel:e}};var MC=QC,EC=cW,DC=cW,OC=OX,_C=PC,qC=KC;var $C=function e(t){var i=new _C(t),n=OC(_C.prototype.request,i);return DC.extend(n,_C.prototype,i),DC.extend(n,i),n.create=function(i){return e(qC(t,i))},n}(yC);$C.Axios=_C,$C.Cancel=eC,$C.CancelToken=MC,$C.isCancel=WC,$C.VERSION=NC,$C.all=function(e){return Promise.all(e)},$C.spread=function(e){return function(t){return e.apply(null,t)}},$C.isAxiosError=function(e){return EC.isObject(e)&&!0===e.isAxiosError},DX.exports=$C,DX.exports.default=$C;var eV,tV=DX.exports;let iV=eV=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=tV.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new eV),this.axiosInstance.interceptors.request.use((e=>HG(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(e)})))),this.axiosInstance.interceptors.response.use((e=>this.clientInstance.successHandler(e)),(e=>this.clientInstance.errorHandler(e))),this.axiosInstance.all=tV.all,this.axiosInstance.spread=tV.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(e){return HG(this,void 0,void 0,(function*(){if(yield this.attachToken(e),null==e?void 0:e.shouldEncodeToFormData){const t=null==e?void 0:e.data,i=new FormData;Object.keys(t).forEach((e=>{i.append(e,t[e])})),e.data=i}return e.startTimeInMs=(new Date).getTime(),eV.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw eV.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return eV.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}init(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return HG(this,void 0,void 0,(function*(){eV.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){eV.isHandlerEnabled=!0}disableHandler(){eV.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:eV.DEFAULT_HANDLER_DISABLE_TIMEOUT;eV.isHandlerEnabled=!1,setTimeout((()=>{eV.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};iV.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,iV=eV=function(e,t,i,n){var l,o=arguments.length,c=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(l=e[a])&&(c=(o<3?l(c):o>3?l(t,i,c):l(t,i))||c);return o>3&&c&&Object.defineProperty(t,i,c),c}([e=>{}],iV);class nV{setData(e,t){return HG(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return HG(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return HG(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class lV{constructor(){this._data=new Map}setData(e,t){return HG(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return HG(this,void 0,void 0,(function*(){return null!==(i=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==i?i:"{}"}))}removeData(e){return HG(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class oV{setData(e,t){return HG(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return HG(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return HG(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var cV=[],aV=[],rV="undefined"!=typeof Uint8Array?Uint8Array:Array,dV=!1;function sV(){dV=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)cV[t]=e[t],aV[e.charCodeAt(t)]=t;aV["-".charCodeAt(0)]=62,aV["_".charCodeAt(0)]=63}function uV(e,t,i){for(var n,l,o=[],c=t;c<i;c+=3)n=(e[c]<<16)+(e[c+1]<<8)+e[c+2],o.push(cV[(l=n)>>18&63]+cV[l>>12&63]+cV[l>>6&63]+cV[63&l]);return o.join("")}function ZV(e){var t;dV||sV();for(var i=e.length,n=i%3,l="",o=[],c=16383,a=0,r=i-n;a<r;a+=c)o.push(uV(e,a,a+c>r?r:a+c));return 1===n?(t=e[i-1],l+=cV[t>>2],l+=cV[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=cV[t>>10],l+=cV[t>>4&63],l+=cV[t<<2&63],l+="="),o.push(l),o.join("")}function hV(e,t,i,n,l){var o,c,a=8*l-n-1,r=(1<<a)-1,d=r>>1,s=-7,u=i?l-1:0,Z=i?-1:1,h=e[t+u];for(u+=Z,o=h&(1<<-s)-1,h>>=-s,s+=a;s>0;o=256*o+e[t+u],u+=Z,s-=8);for(c=o&(1<<-s)-1,o>>=-s,s+=n;s>0;c=256*c+e[t+u],u+=Z,s-=8);if(0===o)o=1-d;else{if(o===r)return c?NaN:1/0*(h?-1:1);c+=Math.pow(2,n),o-=d}return(h?-1:1)*c*Math.pow(2,o-n)}function bV(e,t,i,n,l,o){var c,a,r,d=8*o-l-1,s=(1<<d)-1,u=s>>1,Z=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:o-1,b=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,c=s):(c=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-c))<1&&(c--,r*=2),(t+=c+u>=1?Z/r:Z*Math.pow(2,1-u))*r>=2&&(c++,r/=2),c+u>=s?(a=0,c=s):c+u>=1?(a=(t*r-1)*Math.pow(2,l),c+=u):(a=t*Math.pow(2,u-1)*Math.pow(2,l),c=0));l>=8;e[i+h]=255&a,h+=b,a/=256,l-=8);for(c=c<<l|a,d+=l;d>0;e[i+h]=255&c,h+=b,c/=256,d-=8);e[i+h-b]|=128*m}var mV={}.toString,pV=Array.isArray||function(e){return"[object Array]"==mV.call(e)};GV.TYPED_ARRAY_SUPPORT=void 0===hW.TYPED_ARRAY_SUPPORT||hW.TYPED_ARRAY_SUPPORT;var IV=gV();function gV(){return GV.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function yV(e,t){if(gV()<t)throw new RangeError("Invalid typed array length");return GV.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=GV.prototype:(null===e&&(e=new GV(t)),e.length=t),e}function GV(e,t,i){if(!(GV.TYPED_ARRAY_SUPPORT||this instanceof GV))return new GV(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return CV(this,e)}return XV(this,e,t,i)}function XV(e,t,i,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,n){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,i):new Uint8Array(t,i,n);GV.TYPED_ARRAY_SUPPORT?(e=t).__proto__=GV.prototype:e=VV(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!GV.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|vV(t,i),l=(e=yV(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(SV(t)){var i=0|RV(t.length);return 0===(e=yV(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?yV(e,0):VV(e,t);if("Buffer"===t.type&&pV(t.data))return VV(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function WV(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function CV(e,t){if(WV(t),e=yV(e,t<0?0:0|RV(t)),!GV.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function VV(e,t){var i=t.length<0?0:0|RV(t.length);e=yV(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function RV(e){if(e>=gV())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+gV().toString(16)+" bytes");return 0|e}function SV(e){return!(null==e||!e._isBuffer)}function vV(e,t){if(SV(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return eR(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return tR(e).length;default:if(n)return eR(e).length;t=(""+t).toLowerCase(),n=!0}}function fV(e,t,i){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return xV(this,t,i);case"utf8":case"utf-8":return BV(this,t,i);case"ascii":return wV(this,t,i);case"latin1":case"binary":return zV(this,t,i);case"base64":return TV(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return PV(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function YV(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function KV(e,t,i,n,l){if(0===e.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=l?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(l)return-1;i=e.length-1}else if(i<0){if(!l)return-1;i=0}if("string"==typeof t&&(t=GV.from(t,n)),SV(t))return 0===t.length?-1:NV(e,t,i,n,l);if("number"==typeof t)return t&=255,GV.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):NV(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function NV(e,t,i,n,l){var o,c=1,a=e.length,r=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;c=2,a/=2,r/=2,i/=2}function d(e,t){return 1===c?e[t]:e.readUInt16BE(t*c)}if(l){var s=-1;for(o=i;o<a;o++)if(d(e,o)===d(t,-1===s?0:o-s)){if(-1===s&&(s=o),o-s+1===r)return s*c}else-1!==s&&(o-=o-s),s=-1}else for(i+r>a&&(i=a-r),o=i;o>=0;o--){for(var u=!0,Z=0;Z<r;Z++)if(d(e,o+Z)!==d(t,Z)){u=!1;break}if(u)return o}return-1}function JV(e,t,i,n){i=Number(i)||0;var l=e.length-i;n?(n=Number(n))>l&&(n=l):n=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var c=0;c<n;++c){var a=parseInt(t.substr(2*c,2),16);if(isNaN(a))return c;e[i+c]=a}return c}function HV(e,t,i,n){return iR(eR(t,e.length-i),e,i,n)}function LV(e,t,i,n){return iR(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function kV(e,t,i,n){return LV(e,t,i,n)}function AV(e,t,i,n){return iR(tR(t),e,i,n)}function UV(e,t,i,n){return iR(function(e,t){for(var i,n,l,o=[],c=0;c<e.length&&!((t-=2)<0);++c)n=(i=e.charCodeAt(c))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function TV(e,t,i){return 0===t&&i===e.length?ZV(e):ZV(e.slice(t,i))}function BV(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,c,a,r,d=e[l],s=null,u=d>239?4:d>223?3:d>191?2:1;if(l+u<=i)switch(u){case 1:d<128&&(s=d);break;case 2:128==(192&(o=e[l+1]))&&(r=(31&d)<<6|63&o)>127&&(s=r);break;case 3:o=e[l+1],c=e[l+2],128==(192&o)&&128==(192&c)&&(r=(15&d)<<12|(63&o)<<6|63&c)>2047&&(r<55296||r>57343)&&(s=r);break;case 4:o=e[l+1],c=e[l+2],a=e[l+3],128==(192&o)&&128==(192&c)&&128==(192&a)&&(r=(15&d)<<18|(63&o)<<12|(63&c)<<6|63&a)>65535&&r<1114112&&(s=r)}null===s?(s=65533,u=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),l+=u}return function(e){var t=e.length;if(t<=FV)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=FV));return i}(n)}GV.poolSize=8192,GV._augment=function(e){return e.__proto__=GV.prototype,e},GV.from=function(e,t,i){return XV(null,e,t,i)},GV.TYPED_ARRAY_SUPPORT&&(GV.prototype.__proto__=Uint8Array.prototype,GV.__proto__=Uint8Array),GV.alloc=function(e,t,i){return function(e,t,i,n){return WV(t),t<=0?yV(e,t):void 0!==i?"string"==typeof n?yV(e,t).fill(i,n):yV(e,t).fill(i):yV(e,t)}(null,e,t,i)},GV.allocUnsafe=function(e){return CV(null,e)},GV.allocUnsafeSlow=function(e){return CV(null,e)},GV.isBuffer=nR,GV.compare=function(e,t){if(!SV(e)||!SV(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,n=t.length,l=0,o=Math.min(i,n);l<o;++l)if(e[l]!==t[l]){i=e[l],n=t[l];break}return i<n?-1:n<i?1:0},GV.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},GV.concat=function(e,t){if(!pV(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return GV.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=GV.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!SV(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},GV.byteLength=vV,GV.prototype._isBuffer=!0,GV.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)YV(this,t,t+1);return this},GV.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)YV(this,t,t+3),YV(this,t+1,t+2);return this},GV.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)YV(this,t,t+7),YV(this,t+1,t+6),YV(this,t+2,t+5),YV(this,t+3,t+4);return this},GV.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?BV(this,0,e):fV.apply(this,arguments)},GV.prototype.equals=function(e){if(!SV(e))throw new TypeError("Argument must be a Buffer");return this===e||0===GV.compare(this,e)},GV.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},GV.prototype.compare=function(e,t,i,n,l){if(!SV(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===l&&(l=this.length),t<0||i>e.length||n<0||l>this.length)throw new RangeError("out of range index");if(n>=l&&t>=i)return 0;if(n>=l)return-1;if(t>=i)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(n>>>=0),c=(i>>>=0)-(t>>>=0),a=Math.min(o,c),r=this.slice(n,l),d=e.slice(t,i),s=0;s<a;++s)if(r[s]!==d[s]){o=r[s],c=d[s];break}return o<c?-1:c<o?1:0},GV.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},GV.prototype.indexOf=function(e,t,i){return KV(this,e,t,i,!0)},GV.prototype.lastIndexOf=function(e,t,i){return KV(this,e,t,i,!1)},GV.prototype.write=function(e,t,i,n){if(void 0===t)n="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)n=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var l=this.length-t;if((void 0===i||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return JV(this,e,t,i);case"utf8":case"utf-8":return HV(this,e,t,i);case"ascii":return LV(this,e,t,i);case"latin1":case"binary":return kV(this,e,t,i);case"base64":return AV(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return UV(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},GV.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var FV=4096;function wV(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(127&e[l]);return n}function zV(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(e[l]);return n}function xV(e,t,i){var n=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>n)&&(i=n);for(var l="",o=t;o<i;++o)l+=$V(e[o]);return l}function PV(e,t,i){for(var n=e.slice(t,i),l="",o=0;o<n.length;o+=2)l+=String.fromCharCode(n[o]+256*n[o+1]);return l}function jV(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function QV(e,t,i,n,l,o){if(!SV(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>l||t<o)throw new RangeError('"value" argument is out of bounds');if(i+n>e.length)throw new RangeError("Index out of range")}function MV(e,t,i,n){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-i,2);l<o;++l)e[i+l]=(t&255<<8*(n?l:1-l))>>>8*(n?l:1-l)}function EV(e,t,i,n){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-i,4);l<o;++l)e[i+l]=t>>>8*(n?l:3-l)&255}function DV(e,t,i,n,l,o){if(i+n>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function OV(e,t,i,n,l){return l||DV(e,0,i,4),bV(e,t,i,n,23,4),i+4}function _V(e,t,i,n,l){return l||DV(e,0,i,8),bV(e,t,i,n,52,8),i+8}GV.prototype.slice=function(e,t){var i,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),GV.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=GV.prototype;else{var l=t-e;i=new GV(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},GV.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},GV.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},GV.prototype.readUInt8=function(e,t){return t||jV(e,1,this.length),this[e]},GV.prototype.readUInt16LE=function(e,t){return t||jV(e,2,this.length),this[e]|this[e+1]<<8},GV.prototype.readUInt16BE=function(e,t){return t||jV(e,2,this.length),this[e]<<8|this[e+1]},GV.prototype.readUInt32LE=function(e,t){return t||jV(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},GV.prototype.readUInt32BE=function(e,t){return t||jV(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},GV.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n>=(l*=128)&&(n-=Math.pow(2,8*t)),n},GV.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=t,l=1,o=this[e+--n];n>0&&(l*=256);)o+=this[e+--n]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},GV.prototype.readInt8=function(e,t){return t||jV(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},GV.prototype.readInt16LE=function(e,t){t||jV(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},GV.prototype.readInt16BE=function(e,t){t||jV(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},GV.prototype.readInt32LE=function(e,t){return t||jV(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},GV.prototype.readInt32BE=function(e,t){return t||jV(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},GV.prototype.readFloatLE=function(e,t){return t||jV(e,4,this.length),hV(this,e,!0,23,4)},GV.prototype.readFloatBE=function(e,t){return t||jV(e,4,this.length),hV(this,e,!1,23,4)},GV.prototype.readDoubleLE=function(e,t){return t||jV(e,8,this.length),hV(this,e,!0,52,8)},GV.prototype.readDoubleBE=function(e,t){return t||jV(e,8,this.length),hV(this,e,!1,52,8)},GV.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||QV(this,e,t,i,Math.pow(2,8*i)-1,0);var l=1,o=0;for(this[t]=255&e;++o<i&&(l*=256);)this[t+o]=e/l&255;return t+i},GV.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||QV(this,e,t,i,Math.pow(2,8*i)-1,0);var l=i-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+i},GV.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,1,255,0),GV.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},GV.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,65535,0),GV.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):MV(this,e,t,!0),t+2},GV.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,65535,0),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):MV(this,e,t,!1),t+2},GV.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,4294967295,0),GV.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):EV(this,e,t,!0),t+4},GV.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,4294967295,0),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):EV(this,e,t,!1),t+4},GV.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);QV(this,e,t,i,l-1,-l)}var o=0,c=1,a=0;for(this[t]=255&e;++o<i&&(c*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},GV.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);QV(this,e,t,i,l-1,-l)}var o=i-1,c=1,a=0;for(this[t+o]=255&e;--o>=0&&(c*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},GV.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,1,127,-128),GV.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},GV.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,32767,-32768),GV.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):MV(this,e,t,!0),t+2},GV.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,32767,-32768),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):MV(this,e,t,!1),t+2},GV.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,2147483647,-2147483648),GV.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):EV(this,e,t,!0),t+4},GV.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):EV(this,e,t,!1),t+4},GV.prototype.writeFloatLE=function(e,t,i){return OV(this,e,t,!0,i)},GV.prototype.writeFloatBE=function(e,t,i){return OV(this,e,t,!1,i)},GV.prototype.writeDoubleLE=function(e,t,i){return _V(this,e,t,!0,i)},GV.prototype.writeDoubleBE=function(e,t,i){return _V(this,e,t,!1,i)},GV.prototype.copy=function(e,t,i,n){if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);var l,o=n-i;if(this===e&&i<t&&t<n)for(l=o-1;l>=0;--l)e[l+t]=this[l+i];else if(o<1e3||!GV.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+o),t);return o},GV.prototype.fill=function(e,t,i,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!GV.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var o;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(o=t;o<i;++o)this[o]=e;else{var c=SV(e)?e:eR(new GV(e,n).toString()),a=c.length;for(o=0;o<i-t;++o)this[o+t]=c[o%a]}return this};var qV=/[^+\/0-9A-Za-z-_]/g;function $V(e){return e<16?"0"+e.toString(16):e.toString(16)}function eR(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],c=0;c<n;++c){if((i=e.charCodeAt(c))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(c+1===n){(t-=3)>-1&&o.push(239,191,189);continue}l=i;continue}if(i<56320){(t-=3)>-1&&o.push(239,191,189),l=i;continue}i=65536+(l-55296<<10|i-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,i<128){if((t-=1)<0)break;o.push(i)}else if(i<2048){if((t-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function tR(e){return function(e){var t,i,n,l,o,c;dV||sV();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[a-2]?2:"="===e[a-1]?1:0,c=new rV(3*a/4-o),n=o>0?a-4:a;var r=0;for(t=0,i=0;t<n;t+=4,i+=3)l=aV[e.charCodeAt(t)]<<18|aV[e.charCodeAt(t+1)]<<12|aV[e.charCodeAt(t+2)]<<6|aV[e.charCodeAt(t+3)],c[r++]=l>>16&255,c[r++]=l>>8&255,c[r++]=255&l;return 2===o?(l=aV[e.charCodeAt(t)]<<2|aV[e.charCodeAt(t+1)]>>4,c[r++]=255&l):1===o&&(l=aV[e.charCodeAt(t)]<<10|aV[e.charCodeAt(t+1)]<<4|aV[e.charCodeAt(t+2)]>>2,c[r++]=l>>8&255,c[r++]=255&l),c}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(qV,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function iR(e,t,i,n){for(var l=0;l<n&&!(l+i>=t.length||l>=e.length);++l)t[l+i]=e[l];return l}function nR(e){return null!=e&&(!!e._isBuffer||lR(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&lR(e.slice(0,0))}(e))}function lR(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var oR=Object.freeze({__proto__:null,Buffer:GV,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),GV.alloc(+e)},isBuffer:nR,kMaxLength:IV}),cR={exports:{}},aR={},rR={};Object.defineProperty(rR,"__esModule",{value:!0}),rR.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,c=GV.alloc(o);for(c.write(e);l--;)c.write("=",n++);return c.toString()},Object.defineProperty(aR,"__esModule",{value:!0});var dR=rR;function sR(e,t){return void 0===t&&(t="utf8"),GV.isBuffer(e)?ZR(e.toString("base64")):ZR(GV.from(e,t).toString("base64"))}function uR(e){return e=e.toString(),dR.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function ZR(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var hR=sR;hR.encode=sR,hR.decode=function(e,t){return void 0===t&&(t="utf8"),GV.from(uR(e),"base64").toString(t)},hR.toBase64=uR,hR.fromBase64=ZR,hR.toBuffer=function(e){return GV.from(uR(e),"base64")},aR.default=hR,function(e){e.exports=aR.default,e.exports.default=e.exports}(cR);var bR=cR.exports,mR={exports:{}};!function(e){!function(t,i){var n={};!function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function i(e,i,n,l,o){for(var c,a,r,d,s,u,Z,h,b,m,p,I,g;o>=64;){for(c=i[0],a=i[1],r=i[2],d=i[3],s=i[4],u=i[5],Z=i[6],h=i[7],m=0;m<16;m++)p=l+4*m,e[m]=(255&n[p])<<24|(255&n[p+1])<<16|(255&n[p+2])<<8|255&n[p+3];for(m=16;m<64;m++)I=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,g=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(I+e[m-7]|0)+(g+e[m-16]|0);for(m=0;m<64;m++)I=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&u^~s&Z)|0)+(h+(t[m]+e[m]|0)|0)|0,g=((c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10))+(c&a^c&r^a&r)|0,h=Z,Z=u,u=s,s=d+I|0,d=r,r=a,a=c,c=I+g|0;i[0]+=c,i[1]+=a,i[2]+=r,i[3]+=d,i[4]+=s,i[5]+=u,i[6]+=Z,i[7]+=h,l+=64,o-=64}return l}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=i(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,l=t/536870912|0,o=t<<3,c=t%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<c-8;a++)this.buffer[a]=0;this.buffer[c-8]=l>>>24&255,this.buffer[c-7]=l>>>16&255,this.buffer[c-6]=l>>>8&255,this.buffer[c-5]=l>>>0&255,this.buffer[c-4]=o>>>24&255,this.buffer[c-3]=o>>>16&255,this.buffer[c-2]=o>>>8&255,this.buffer[c-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,c),this.finished=!0}for(a=0;a<8;a++)e[4*a+0]=this.state[a]>>>24&255,e[4*a+1]=this.state[a]>>>16&255,e[4*a+2]=this.state[a]>>>8&255,e[4*a+3]=this.state[a]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var i=0;i<this.state.length;i++)this.state[i]=e[i];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var l=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var i=0;i<e.length;i++)t[i]=e[i];for(i=0;i<t.length;i++)t[i]^=54;this.inner.update(t);for(i=0;i<t.length;i++)t[i]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(i=0;i<t.length;i++)t[i]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function o(e){var t=(new n).update(e),i=t.digest();return t.clean(),i}function c(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function a(e,t,i,n){var l=n[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),i&&t.update(i),t.update(n),t.finish(e),n[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=c;var r=new Uint8Array(e.digestLength);function d(e,t,i,n){void 0===t&&(t=r),void 0===n&&(n=32);for(var o=new Uint8Array([1]),d=c(t,e),s=new l(d),u=new Uint8Array(s.digestLength),Z=u.length,h=new Uint8Array(n),b=0;b<n;b++)Z===u.length&&(a(u,s,i,o),Z=0),h[b]=u[Z++];return s.clean(),u.fill(0),o.fill(0),h}function s(e,t,i,n){for(var o=new l(e),c=o.digestLength,a=new Uint8Array(4),r=new Uint8Array(c),d=new Uint8Array(c),s=new Uint8Array(n),u=0;u*c<n;u++){var Z=u+1;a[0]=Z>>>24&255,a[1]=Z>>>16&255,a[2]=Z>>>8&255,a[3]=Z>>>0&255,o.reset(),o.update(t),o.update(a),o.finish(d);for(var h=0;h<c;h++)r[h]=d[h];for(h=2;h<=i;h++){o.reset(),o.update(d).finish(d);for(var b=0;b<c;b++)r[b]^=d[b]}for(h=0;h<c&&u*c+h<n;h++)s[u*c+h]=r[h]}for(u=0;u<c;u++)r[u]=d[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),s}e.hkdf=d,e.pbkdf2=s}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(mR);var pR=i(mR.exports),IR=crypto;const gR=e=>e instanceof CryptoKey,yR=new TextEncoder,GR=new TextDecoder;const XR=e=>{let t=e;t instanceof Uint8Array&&(t=GR.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);return i})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class WR extends Error{constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class CR extends WR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class VR extends WR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_EXPIRED"}}class RR extends WR{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class SR extends WR{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class vR extends WR{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class fR extends WR{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class YR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class KR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_NO_MATCHING_KEY",this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}class NR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}class JR extends WR{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function HR(){return"function"==typeof WebSocketPair}function LR(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(t," must be ").concat(e))}function kR(e,t){return e.name===t}function AR(e){return parseInt(e.name.slice(4),10)}function UR(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function TR(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const i=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(i,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var BR=function(e){let t="Key must be ";for(var i=arguments.length,n=new Array(i>1?i-1:0),l=1;l<i;l++)n[l-1]=arguments[l];if(n.length>2){const e=n.pop();t+="one of type ".concat(n.join(", "),", or ").concat(e,".")}else 2===n.length?t+="one of type ".concat(n[0]," or ").concat(n[1],"."):t+="of type ".concat(n[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"==typeof e&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},FR=e=>gR(e);const wR=["CryptoKey"];function zR(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let i=e;for(;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(e)===i}const xR=async e=>{var t,i;const{algorithm:n,keyUsages:l}=function(e){let t,i;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new SR("".concat(e.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":t={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},i=["deriveBits"];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(e.alg.slice(-3),10)||1)},i=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},i=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},i=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},i=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},i=e.d?["deriveBits"]:[];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case HR()&&"OKP":if("EdDSA"!==e.alg)throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new SR('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},i=e.d?["sign"]:["verify"];break;default:throw new SR('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:i}}(e),o=[n,null!==(t=e.ext)&&void 0!==t&&t,null!==(i=e.key_ops)&&void 0!==i?i:l];if("PBKDF2"===n.name)return IR.subtle.importKey("raw",XR(e.k),...o);const c={...e};return delete c.alg,IR.subtle.importKey("jwk",c,...o)};const PR=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!FR(e))throw new TypeError(BR(e,...wR,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(wR.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!FR(e))throw new TypeError(BR(e,...wR));if("secret"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function jR(e,t,i){if(gR(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!kR(e.algorithm,"HMAC"))throw LR("HMAC");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!kR(e.algorithm,"RSASSA-PKCS1-v1_5"))throw LR("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!kR(e.algorithm,"RSA-PSS"))throw LR("RSA-PSS");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case HR()&&"EdDSA":if(!kR(e.algorithm,"NODE-ED25519"))throw LR("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!kR(e.algorithm,"ECDSA"))throw LR("ECDSA");const i=UR(t);if(e.algorithm.namedCurve!==i)throw LR(i,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var i=arguments.length,n=new Array(i>2?i-2:0),l=2;l<i;l++)n[l-2]=arguments[l];TR(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(BR(t,...wR));return IR.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(BR(t,...wR,"Uint8Array"))}const QR=async(e,t,i,n)=>{const l=await jR(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:i}=t.algorithm;if("number"!=typeof i||i<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const i="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:i,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:i,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:i,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:i,name:"ECDSA",namedCurve:t.namedCurve};case HR()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new SR("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await IR.subtle.verify(o,l,i,n)}catch(e){return!1}};async function MR(e,t,i){var n;if(!zR(e))throw new vR("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new vR('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new vR("JWS Protected Header incorrect type");if(void 0===e.payload)throw new vR("JWS Payload missing");if("string"!=typeof e.signature)throw new vR("JWS Signature missing or incorrect type");if(void 0!==e.header&&!zR(e.header))throw new vR("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=XR(e.protected);try{l=JSON.parse(GR.decode(t))}catch(e){throw new vR("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const e of n){const t=Object.keys(e);if(l&&0!==l.size)for(const e of t){if(l.has(e))return!1;l.add(e)}else l=new Set(t)}return!0}(l,e.header))throw new vR("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},c=function(e,t,i,n,l){if(void 0!==l.crit&&void 0===n.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let o;o=void 0!==i?new Map([...Object.entries(i),...t.entries()]):t;for(const t of n.crit){if(!o.has(t))throw new SR('Extension Header Parameter "'.concat(t,'" is not recognized'));if(void 0===l[t])throw new e('Extension Header Parameter "'.concat(t,'" is missing'));if(o.get(t)&&void 0===n[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(n.crit)}(vR,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let a=!0;if(c.has("b64")&&(a=l.b64,"boolean"!=typeof a))throw new vR('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=o;if("string"!=typeof r||!r)throw new vR('JWS "alg" (Algorithm) Header Parameter missing or invalid');const d=i&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)})("algorithms",i.algorithms);if(d&&!d.has(r))throw new RR('"alg" (Algorithm) Header Parameter not allowed');if(a){if("string"!=typeof e.payload)throw new vR("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new vR("JWS Payload must be a string or an Uint8Array instance");let s=!1;"function"==typeof t&&(t=await t(l,e),s=!0),PR(r,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.reduce(((e,t)=>{let{length:i}=t;return e+i}),0),l=new Uint8Array(n);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(yR.encode(null!==(n=e.protected)&&void 0!==n?n:""),yR.encode("."),"string"==typeof e.payload?yR.encode(e.payload):e.payload),Z=XR(e.signature);if(!await QR(r,t,Z,u))throw new JR;let h;h=a?XR(e.payload):"string"==typeof e.payload?yR.encode(e.payload):e.payload;const b={payload:h};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),s?{...b,key:t}:b}var ER=e=>Math.floor(e.getTime()/1e3);const DR=86400,OR=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var _R=e=>{const t=OR.exec(e);if(!t)throw new TypeError("Invalid time period format");const i=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(i*DR);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const qR=e=>e.toLowerCase().replace(/^application\//,""),$R=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function eS(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=GR.decode(e)),"string"!=typeof e)throw new vR("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:c}=e.split(".");if(3!==c)throw new vR("Invalid Compact JWS");const a=await MR({payload:l,protected:n,signature:o},t,i),r={payload:a.payload,protectedHeader:a.protectedHeader};return"function"==typeof t?{...r,key:a.key}:r}(e,t,i);if((null===(n=l.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===l.protectedHeader.b64)throw new fR("JWTs MUST NOT use unencoded payload");const o=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:n}=i;if(n&&("string"!=typeof e.typ||qR(e.typ)!==qR(n)))throw new CR('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(GR.decode(t))}catch(e){}if(!zR(l))throw new fR("JWT Claims Set must be a top-level JSON object");const{issuer:o}=i;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new CR('unexpected "iss" claim value',"iss","check_failed");const{subject:c}=i;if(c&&l.sub!==c)throw new CR('unexpected "sub" claim value',"sub","check_failed");const{audience:a}=i;if(a&&!$R(l.aud,"string"==typeof a?[a]:a))throw new CR('unexpected "aud" claim value',"aud","check_failed");let r;switch(typeof i.clockTolerance){case"string":r=_R(i.clockTolerance);break;case"number":r=i.clockTolerance;break;case"undefined":r=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:d}=i,s=ER(d||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new CR('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new CR('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>s+r)throw new CR('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new CR('"exp" claim must be a number',"exp","invalid");if(l.exp<=s-r)throw new VR('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=s-l.iat;if(e-r>("number"==typeof i.maxTokenAge?i.maxTokenAge:_R(i.maxTokenAge)))throw new VR('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-r)throw new CR('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),c={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...c,key:l.key}:c}function tS(e){return zR(e)}class iS{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(tS)}(e))throw new YR("JSON Web Key Set malformed");var t;this._jwks=(t=e,"function"==typeof structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t)))}async getKey(e,t){const{alg:i,kid:n}={...e,...t.header},l=function(e){switch("string"==typeof e&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new SR('Unsupported "alg" value for a JSON Web Key Set')}}(i),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof n&&(t=n===e.kid),t&&"string"==typeof e.alg&&(t=i===e.alg),t&&"string"==typeof e.use&&(t="sig"===e.use),t&&Array.isArray(e.key_ops)&&(t=e.key_ops.includes("verify")),t&&"EdDSA"===i&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(i){case"ES256":t="P-256"===e.crv;break;case"ES256K":t="secp256k1"===e.crv;break;case"ES384":t="P-384"===e.crv;break;case"ES512":t="P-521"===e.crv}return t})),{0:c,length:a}=o;if(0===a)throw new KR;if(1!==a)throw new NR;const r=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===r[i]){const e=await async function(e,t,i){if(!zR(e))throw new TypeError("JWK must be an object");if(t||(t=e.alg),"string"!=typeof t||!t)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(e.kty){case"oct":if("string"!=typeof e.k||!e.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==e.ext),i?xR({...e,alg:t,ext:!1}):XR(e.k);case"RSA":if(void 0!==e.oth)throw new SR('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return xR({...e,alg:t});default:throw new SR('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new YR("JSON Web Key Set members must be public keys");r[i]=e}return r[i]}}var nS={exports:{}},lS={exports:{}},oS=n(oR);
431
+ */updateConfig(e){return LG(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return LG(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function _G(e,t,i){var n=void 0===t?null:t,l=function(e,t){var i=atob(e);if(t){for(var n=new Uint8Array(i.length),l=0,o=i.length;l<o;++l)n[l]=i.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(e,void 0!==i&&i),o=l.indexOf("\n",10)+1,c=l.substring(o)+(n?"//# sourceMappingURL="+n:""),a=new Blob([c],{type:"application/javascript"});return URL.createObjectURL(a)}var qG,$G,eX,tX,iX=(qG="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGU9PntsZXRbdCxyXT1lO2NvbnN0IGk9dC5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO25baV09cn0pKSxufXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fXN0YXRpYyBnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZSx0KXtjb25zdCBuPXBhcnNlSW50KGUuc3BsaXQoIiMiKVsxXSk7cmV0dXJuIHQ/IiIuY29uY2F0KHQsIl9yZXF1ZXN0XyIpLmNvbmNhdChuKToicmVxdWVzdF8iLmNvbmNhdChuKX1zdGF0aWMgZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIjtjb25zdCBuPWUuc3ViLnNwbGl0KHQpO3JldHVybiBuLmxlbmd0aD4yP25bbi5sZW5ndGgtMV06IiJ9O2NsYXNzIGx7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9bn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLG49WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7cmV0dXJuIG4uaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKG49Pntjb25zdCByPW4ucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7ZVtyXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW25dOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLG49dC5iYXNlVXJsO2lmKCFuKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKG49Pntjb25zdCByPW4ucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7ZVtyXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW25dOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi9hdXRob3JpemUiKSxlbmRfc2Vzc2lvbl9lbmRwb2ludDoiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9sb2dvdXQiKSxpc3N1ZXI6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLGp3a3NfdXJpOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvandrcyIpLGNoZWNrX3Nlc3Npb25faWZyYW1lOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vaWRjL2NoZWNrc2Vzc2lvbiIpLHJldm9jYXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi9yZXZva2UiKSx0b2tlbl9lbmRwb2ludDoiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL3Rva2VuIiksdXNlcmluZm9fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi91c2VyaW5mbyIpfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHIpLGUpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpKS5qd2tzX3VyaSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKU19BVVRIX0hFTFBFUi1WSVQtTkYwMSIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtsZXQgcjt0cnl7cj15aWVsZCBmZXRjaCh0LHtjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2lufSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVZJVC1ORTAyIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZigyMDAhPT1yLnN0YXR1c3x8IXIub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVZJVC1IRTAzIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdCAoIi5jb25jYXQoci5zdGF0dXNUZXh0LCIpLiIpLHlpZWxkIHIuanNvbigpKTtjb25zdCBpPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5pc3N1ZXIse2tleXM6b309eWllbGQgci5qc29uKCkscz15aWVsZCB0aGlzLl9jcnlwdG9IZWxwZXIuZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sbyk7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5pc1ZhbGlkSWRUb2tlbihlLHMsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbGllbnRJRCxudWxsIT1pP2k6IiIsdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkuc3ViLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xvY2tUb2xlcmFuY2UpfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIixjPW51bGwhPT0obj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1uP246IiIsbD1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixkPWMmJmw/IiIuY29uY2F0KGMsIiAiKS5jb25jYXQobCk6Y3x8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx1LmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgcj15aWVsZCBlLmpzb24oKTtpZihyLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKHIuaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbik7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpyLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6ci5jcmVhdGVkX2F0LGV4cGlyZXNJbjpyLmV4cGlyZXNfaW4saWRUb2tlbjpyLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpyLnJlZnJlc2hfdG9rZW4sc2NvcGU6ci5zY29wZSx0b2tlblR5cGU6ci50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbiksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLHI9W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJnIucHVzaChlKX0pKTtjb25zdCBpPXIuc29ydCgpLnBvcCgpO3JldHVybiJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxKX0pKX19Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihuLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBjKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQsbixyLGkscyl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLnZlcmlmeUp3dChlLHQsbyxuLHIsaSxzKS50aGVuKChlPT5lP1Byb21pc2UucmVzb2x2ZSghMCk6UHJvbWlzZS5yZWplY3QobmV3IGMoIkpTLUNSWVBUT19IRUxQRVItSVZJVC1JVjAxIiwiSW52YWxpZCBJRCB0b2tlbi4iLCJJRCB0b2tlbiB2YWxpZGF0aW9uIHJldHVybmVkIGZhbHNlIikpKSl9ZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD10aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZS5zcGxpdCgiLiIpWzFdKTtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtRElULUlWMDEiLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGh7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9jcnlwdG9VdGlscz1uLHRoaXMuX2NyeXB0b0hlbHBlcj1uZXcgZChuKSx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgbChlLHRoaXMuX2NyeXB0b0hlbHBlciksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCl9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3ZhciByLGksbztyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBhPW5ldyBVUkwodCksbD1uZXcgTWFwO2wuc2V0KCJyZXNwb25zZV90eXBlIiwiY29kZSIpLGwuc2V0KCJjbGllbnRfaWQiLHMuY2xpZW50SUQpO2xldCBkPSJvcGVuaWQiO3Muc2NvcGUmJnMuc2NvcGUubGVuZ3RoPjAmJihzLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8cy5zY29wZS5wdXNoKCJvcGVuaWQiKSxkPXMuc2NvcGUuam9pbigiICIpKSxsLnNldCgic2NvcGUiLGQpLGwuc2V0KCJyZWRpcmVjdF91cmkiLHMuc2lnbkluUmVkaXJlY3RVUkwpLHMucmVzcG9uc2VNb2RlJiZsLnNldCgicmVzcG9uc2VfbW9kZSIscy5yZXNwb25zZU1vZGUpO2NvbnN0IGg9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KG4pO2lmKHMuZW5hYmxlUEtDRSl7Y29uc3QgZT1udWxsPT09KHI9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXRDb2RlVmVyaWZpZXIoKSx0PW51bGw9PT0oaT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaCxlLG4pLGwuc2V0KCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2IiksbC5zZXQoImNvZGVfY2hhbGxlbmdlIix0KX1zLnByb21wdCYmbC5zZXQoInByb21wdCIscy5wcm9tcHQpO2NvbnN0IGY9ZTtpZihmKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMoZikpaWYoIiIhPWUmJiIiIT10JiYic3RhdGUiIT09ZSl7Y29uc3Qgbj1lLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2wuc2V0KG4sdC50b1N0cmluZygpKX1sLnNldCgic3RhdGUiLHUuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGgsZj9udWxsPT09KG89Zi5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpO2Zvcihjb25zdFtlLHRdb2YgbC5lbnRyaWVzKCkpYS5zZWFyY2hQYXJhbXMuYXBwZW5kKGUsdCk7cmV0dXJuIGEudG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO24mJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLG4saSkpO2NvbnN0IHM9W107cy5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoby5jbGllbnRJRCkpLG8uY2xpZW50U2VjcmV0JiZvLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJnMucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChvLmNsaWVudFNlY3JldCkpO2NvbnN0IGw9ZTtsZXQgZDtzLnB1c2goImNvZGU9Ii5jb25jYXQobCkpLHMucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxzLnB1c2goInJlZGlyZWN0X3VyaT0iLmNvbmNhdChvLnNpZ25JblJlZGlyZWN0VVJMKSksby5lbmFibGVQS0NFJiYocy5wdXNoKCJjb2RlX3ZlcmlmaWVyPSIuY29uY2F0KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSk7dHJ5e2Q9eWllbGQgZmV0Y2godCx7Ym9keTpzLmpvaW4oIiYiKSxjcmVkZW50aWFsczpvLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkUwMiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKCFkLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1IRTAzIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggIi5jb25jYXQoZC5zdGF0dXNUZXh0KSx5aWVsZCBkLmpzb24oKSk7cmV0dXJuIHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxpKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2lmKCFyLnJlZnJlc2hfdG9rZW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDEiLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBBc2dhcmRlbyBkb2Vzbid0IHJldHVybiBhIHJlZnJlc2ggdG9rZW4gaWYgdGhlIHJlZnJlc2ggdG9rZW4gZ3JhbnQgaXMgbm90IGVuYWJsZWQuIik7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDIiLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBpPVtdO2xldCBvO2kucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxpLnB1c2goInJlZnJlc2hfdG9rZW49Ii5jb25jYXQoci5yZWZyZXNoX3Rva2VuKSksaS5wdXNoKCJncmFudF90eXBlPXJlZnJlc2hfdG9rZW4iKSxuLmNsaWVudFNlY3JldCYmbi5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZpLnB1c2goImNsaWVudF9zZWNyZXQ9Ii5jb25jYXQobi5jbGllbnRTZWNyZXQpKTt0cnl7bz15aWVsZCBmZXRjaCh0LHtib2R5Omkuam9pbigiJiIpLGNyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1OUjAzIiwiUmVmcmVzaCBhY2Nlc3MgdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoIW8ub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLUhFMDQiLCJSZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChvLnN0YXR1c1RleHQpLHlpZWxkIG8uanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShvLGUpfSkpfXJldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkucmV2b2NhdGlvbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1ORjAxIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcj1bXTtsZXQgaTtyLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChuLmNsaWVudElEKSksci5wdXNoKCJ0b2tlbj0iLmNvbmNhdCgoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW4pKSxyLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKTt0cnl7aT15aWVsZCBmZXRjaCh0LHtib2R5OnIuam9pbigiJiIpLGNyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1ORTAyIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gcmV2b2tlIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKDIwMCE9PWkuc3RhdHVzfHwhaS5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciByZXZva2UgYWNjZXNzIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGkuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBpLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLFByb21pc2UucmVzb2x2ZShpKX0pKX1yZXF1ZXN0Q3VzdG9tR3JhbnQoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBvO2lmKG89ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnIudG9rZW5fZW5kcG9pbnQsIW98fDA9PT1vLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPXlpZWxkIFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGUuZGF0YSkubWFwKChlPT57bGV0W3IsaV09ZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGksbik7cmV0dXJuIiIuY29uY2F0KHIsIj0iKS5jb25jYXQoZSl9KSl9KSkpO2xldCBsPU9iamVjdC5hc3NpZ24oe30sdS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpO2UuYXR0YWNoVG9rZW4mJihsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEobikpLmFjY2Vzc190b2tlbil9KSk7Y29uc3QgZD17Ym9keTpzLmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMobCksbWV0aG9kOiJQT1NUIn07bGV0IGg7dHJ5e2g9eWllbGQgZmV0Y2gobyxkKX1jYXRjaChlKXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJDRy1ORTAyIiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPWU/ZToiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIil9aWYoMjAwIT09aC5zdGF0dXN8fCFoLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoIi5jb25jYXQoaC5zdGF0dXNUZXh0LCIpIikseWllbGQgaC5qc29uKCkpO3JldHVybiBlLnJldHVybnNTZXNzaW9uP3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoaCxuKTpQcm9taXNlLnJlc29sdmUoeWllbGQgaC5qc29uKCkpfSkpfWdldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSxuPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT10P3ZvaWQgMDp0LmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChlPT57dm9pZCAwIT09bltlXSYmIiIhPT1uW2VdJiZudWxsIT09bltlXXx8ZGVsZXRlIG5bZV19KSkscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sciksbikscn0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW47cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHQpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlcn0pKX1nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW59KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IG49dC53ZWxsS25vd25FbmRwb2ludDtpZihuKXtsZXQgZTt0cnl7aWYoZT15aWVsZCBmZXRjaChuKSwyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IEVycm9yfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR09QTUQtSEUwMSIsIkludmFsaWQgd2VsbC1rbm93biByZXNwb25zZSIsIlRoZSB3ZWxsIGtub3duIGVuZHBvaW50IHJlc3BvbnNlIGhhcyBiZWVuIGZhaWxlZCB3aXRoIGFuIGVycm9yLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh5aWVsZCBlLmpzb24oKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9aWYodC5iYXNlVXJsKXt0cnl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAyIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgYmFzZSB1cmwgZmFpbGVkLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfXRyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0V4cGxpY2l0bHkoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAzIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgZXhwbGljaXRseSBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXt2YXIgZSxuLHIsaSxvLHMsYSxjLHUsbDtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50Om51bGwhPT0oZT10LmF1dGhvcml6YXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1lP2U6IiIsY2hlY2tTZXNzaW9uSWZyYW1lOm51bGwhPT0obj10LmNoZWNrX3Nlc3Npb25faWZyYW1lKSYmdm9pZCAwIT09bj9uOiIiLGVuZFNlc3Npb25FbmRwb2ludDpudWxsIT09KHI9dC5lbmRfc2Vzc2lvbl9lbmRwb2ludCkmJnZvaWQgMCE9PXI/cjoiIixpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6bnVsbCE9PShpPXQuaW50cm9zcGVjdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWk/aToiIixpc3N1ZXI6bnVsbCE9PShvPXQuaXNzdWVyKSYmdm9pZCAwIT09bz9vOiIiLGp3a3NVcmk6bnVsbCE9PShzPXQuandrc191cmkpJiZ2b2lkIDAhPT1zP3M6IiIscmVnaXN0cmF0aW9uRW5kcG9pbnQ6bnVsbCE9PShhPXQucmVnaXN0cmF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09YT9hOiIiLHJldm9jYXRpb25FbmRwb2ludDpudWxsIT09KGM9dC5yZXZvY2F0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09Yz9jOiIiLHRva2VuRW5kcG9pbnQ6bnVsbCE9PSh1PXQudG9rZW5fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdXNlcmluZm9FbmRwb2ludDpudWxsIT09KGw9dC51c2VyaW5mb19lbmRwb2ludCkmJnZvaWQgMCE9PWw/bDoiIn19KSl9Z2V0U2lnbk91dFVSTChlKXt2YXIgbixyLGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGw9PT0obj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5lbmRfc2Vzc2lvbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAxIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9bnVsbCE9PShyPW51bGw9PW8/dm9pZCAwOm8uc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09cj9yOm51bGw9PW8/dm9pZCAwOm8uc2lnbkluUmVkaXJlY3RVUkw7aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDMiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtsZXQgYT0iY2xpZW50X2lkPSIuY29uY2F0KG8uY2xpZW50SUQpO2lmKG8uc2VuZElkVG9rZW5JbkxvZ291dFJlcXVlc3Qpe2NvbnN0IHQ9bnVsbD09PShpPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWRfdG9rZW47aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7YT0iaWRfdG9rZW5faGludD0iLmNvbmNhdCh0KX1yZXR1cm4iIi5jb25jYXQodCwiPyIpK2ErIiZwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9Ii5jb25jYXQocywiJnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3MiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfWdldEFjY2Vzc1Rva2VuKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGw9PT0obj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmFjY2Vzc190b2tlbn0pKX1pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gQm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKGUpKX0pKX1nZXRQS0NFQ29kZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKSxuKX0pKX1zZXRQS0NFQ29kZShlLG4scil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUscil9KSl9dXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoZSkseWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCl9KSl9fWNsYXNzIGZ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9pZD1lLHRoaXMuX3N0b3JlPXR9c2V0RGF0YUluQnVsayhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSxuKSxzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1zZXRWYWx1ZShlLG4scil7dmFyIGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0oaT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09aT9pOm51bGwsbz10JiZKU09OLnBhcnNlKHQpLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtbbl06cn0pLGE9SlNPTi5zdHJpbmdpZnkocyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLGEpfSkpfXJlbW92ZVZhbHVlKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT10JiZKU09OLnBhcnNlKHQpLG89T2JqZWN0LmFzc2lnbih7fSxpKTtkZWxldGUgb1tuXTtjb25zdCBzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1fcmVzb2x2ZUtleShlLHQpe3JldHVybiB0PyIiLmNvbmNhdChlLCItIikuY29uY2F0KHRoaXMuX2lkLCItIikuY29uY2F0KHQpOiIiLmNvbmNhdChlLCItIikuY29uY2F0KHRoaXMuX2lkKX1zZXRDb25maWdEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1zZXRTZXNzaW9uRGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX1zZXRDdXN0b21EYXRhKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KGUsciksbil9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0Q3VzdG9tRGF0YShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShlLG4pKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1yZW1vdmVDb25maWdEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsZSkpfSkpfXJlbW92ZVNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsZSkpfSkpfWdldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1zZXRDb25maWdEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlLG4pfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSxuKX0pKX1zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsaSksZSxuKX0pKX1zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxpKSxlLG4pfSkpfXJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pLGUpfSkpfXJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX19Y29uc3QgcD17Y2xvY2tUb2xlcmFuY2U6MzAwLGVuYWJsZVBLQ0U6ITAscmVzcG9uc2VNb2RlOm4ucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfTtjbGFzcyBnewovKioKICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi8KY29uc3RydWN0b3IoZSx0KXtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgZigiaW5zdGFuY2VfIi5jb25jYXQoZy5faW5zdGFuY2VJRCksZSksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcix0KSxnLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAgICoKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLGUpLHtzY29wZTpbLi4ubnVsbCE9PShuPXAuc2NvcGUpJiZ2b2lkIDAhPT1uP246W10sLi4ubnVsbCE9PShpPW51bGw9PT0ocj1lLnNjb3BlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1wP3ZvaWQgMDpwLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBEYXRhTGF5ZXJgIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gYWNjZXNzIGF1dGhlbnRpY2F0aW9uIGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGF0YUxheWVyCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbikpKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpKSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCB1c2VySW5mbyA9IGF3YWl0IGF1dGguZ2V0QmFzaWNVc2VySW5mbygpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm8KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNyeXB0byBoZWxwZXIgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjcnlwdG9IZWxwZXIgPSBhd2FpdCBhdXRoLkNyeXB0b0hlbHBlcigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldENyeXB0b0hlbHBlcgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXZva2VzIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSByZXNwb25zZSBvZiB0aGUgcmV2b2tlLWFjY2Vzcy10b2tlbiByZXF1ZXN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGFjY2VzcwogICAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgICAqICAgZGF0YTogewogICAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICAgKiAgIH0sCiAgICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovaXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIC0gVGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHBrY2UgPSBhd2FpdCBnZXRQS0NFQ29kZSgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFBLQ0VDb2RlCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQS0NFIGNvZGUgdG8gdGhlIGRhdGEgc3RvcmUuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIC0gVGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaXMgc3VjY2Vzc2Z1bCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzU2lnbk91dFN1Y2Nlc3NmdWwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBoYXMgZmFpbGVkIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZGlkU2lnbk91dEZhaWwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgd2FzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluc3RhbnRpYXRpbmcgdGhpcyBjbGFzcy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3VwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9c3RhdGljIGNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfX1jb25zdCB2PSJpbml0Ijt2YXIgeSxtOyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oeXx8KHk9e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50IixlLlNpZ25PdXRGYWlsZWQ9InNpZ24tb3V0LWZhaWxlZCJ9KG18fChtPXt9KSk7Y29uc3Qgdz0icHJvbXB0Tm9uZVJlcXVlc3RTZW50IixfPSJlcnJvciIsUz0iZXJyb3JfZGVzY3JpcHRpb24iLGI9ImN1c3RvbV9ncmFudF9jb25maWciLGs9IkFjY2VzcyB0b2tlbiBpcyBpbnZhbGlkIjt2YXIgRT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX1mdW5jdGlvbiBSKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfSkpLHR9dmFyIEE9e2V4cG9ydHM6e319LEM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZS5hcHBseSh0LG4pfX0sUD1DLEQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBJKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gVShlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09RC5jYWxsKGUpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gSChlKXtpZigiW29iamVjdCBPYmplY3RdIiE9PUQuY2FsbChlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBNKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1ELmNhbGwoZSl9ZnVuY3Rpb24gcShlLHQpe2lmKG51bGwhPWUpaWYoIm9iamVjdCIhPXR5cGVvZiBlJiYoZT1bZV0pLEkoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQuY2FsbChudWxsLGVbbl0sbixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGo9e2lzQXJyYXk6SSxpc0FycmF5QnVmZmVyOlUsaXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhTyhlKSYmbnVsbCE9PWUuY29uc3RydWN0b3ImJiFPKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGb3JtRGF0YV0iPT09RC5jYWxsKGUpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGUpOmUmJmUuYnVmZmVyJiZVKGUuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9LGlzT2JqZWN0OkwsaXNQbGFpbk9iamVjdDpILGlzVW5kZWZpbmVkOk8saXNEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PUQuY2FsbChlKX0saXNGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZpbGVdIj09PUQuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PUQuY2FsbChlKX0saXNGdW5jdGlvbjpNLGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBMKGUpJiZNKGUucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10iPT09RC5jYWxsKGUpfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOnEsbWVyZ2U6ZnVuY3Rpb24gZSgpe3ZhciB0PXt9O2Z1bmN0aW9uIG4obixyKXtIKHRbcl0pJiZIKG4pP3Rbcl09ZSh0W3JdLG4pOkgobik/dFtyXT1lKHt9LG4pOkkobik/dFtyXT1uLnNsaWNlKCk6dFtyXT1ufWZvcih2YXIgcj0wLGk9YXJndW1lbnRzLmxlbmd0aDtyPGk7cisrKXEoYXJndW1lbnRzW3JdLG4pO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxKHQsKGZ1bmN0aW9uKHQscil7ZVtyXT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9QKHQsbik6dH0pKSxlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9LHN0cmlwQk9NOmZ1bmN0aW9uKGUpe3JldHVybiA2NTI3OT09PWUuY2hhckNvZGVBdCgwKSYmKGU9ZS5zbGljZSgxKSksZX19LE49ajtmdW5jdGlvbiB4KGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXZhciBLPWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4gZTt2YXIgcjtpZihuKXI9bih0KTtlbHNlIGlmKE4uaXNVUkxTZWFyY2hQYXJhbXModCkpcj10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgaT1bXTtOLmZvckVhY2godCwoZnVuY3Rpb24oZSx0KXtudWxsIT1lJiYoTi5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sTi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe04uaXNEYXRlKGUpP2U9ZS50b0lTT1N0cmluZygpOk4uaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2goeCh0KSsiPSIreChlKSl9KSkpfSkpLHI9aS5qb2luKCImIil9aWYocil7dmFyIG89ZS5pbmRleE9mKCIjIik7LTEhPT1vJiYoZT1lLnNsaWNlKDAsbykpLGUrPSgtMT09PWUuaW5kZXhPZigiPyIpPyI/IjoiJiIpK3J9cmV0dXJuIGV9LEI9ajtmdW5jdGlvbiBKKCl7dGhpcy5oYW5kbGVycz1bXX1KLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFuJiZuLnN5bmNocm9ub3VzLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LEoucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfSxKLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe0IuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIEY9SixXPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e307ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIFkoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBWPXosRz1ZO2Z1bmN0aW9uIFgoZSl7aWYoVj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoVj09PXp8fCFWKSYmc2V0VGltZW91dClyZXR1cm4gVj1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIFYoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFYuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIFYuY2FsbCh0aGlzLGUsMCl9fX0iZnVuY3Rpb24iPT10eXBlb2YgVy5zZXRUaW1lb3V0JiYoVj1zZXRUaW1lb3V0KSwiZnVuY3Rpb24iPT10eXBlb2YgVy5jbGVhclRpbWVvdXQmJihHPWNsZWFyVGltZW91dCk7dmFyICQsWj1bXSxRPSExLGVlPS0xO2Z1bmN0aW9uIHRlKCl7USYmJCYmKFE9ITEsJC5sZW5ndGg/Wj0kLmNvbmNhdChaKTplZT0tMSxaLmxlbmd0aCYmbmUoKSl9ZnVuY3Rpb24gbmUoKXtpZighUSl7dmFyIGU9WCh0ZSk7UT0hMDtmb3IodmFyIHQ9Wi5sZW5ndGg7dDspe2ZvcigkPVosWj1bXTsrK2VlPHQ7KSQmJiRbZWVdLnJ1bigpO2VlPS0xLHQ9Wi5sZW5ndGh9JD1udWxsLFE9ITEsZnVuY3Rpb24oZSl7aWYoRz09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChHPT09WXx8IUcpJiZjbGVhclRpbWVvdXQpcmV0dXJuIEc9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7RyhlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIEcuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBHLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcmUoZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1yZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX07ZnVuY3Rpb24gaWUoKXt9dmFyIG9lPWllLHNlPWllLGFlPWllLGNlPWllLHVlPWllLGxlPWllLGRlPWllO3ZhciBoZT1XLnBlcmZvcm1hbmNlfHx7fSxmZT1oZS5ub3d8fGhlLm1vek5vd3x8aGUubXNOb3d8fGhlLm9Ob3d8fGhlLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyIHBlPW5ldyBEYXRlO3ZhciBnZT17bmV4dFRpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtaLnB1c2gobmV3IHJlKGUsdCkpLDEhPT1aLmxlbmd0aHx8UXx8WChuZSl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246b2UsYWRkTGlzdGVuZXI6c2Usb25jZTphZSxvZmY6Y2UscmVtb3ZlTGlzdGVuZXI6dWUscmVtb3ZlQWxsTGlzdGVuZXJzOmxlLGVtaXQ6ZGUsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqZmUuY2FsbChoZSksbj1NYXRoLmZsb29yKHQpLHI9TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKG4tPWVbMF0sKHItPWVbMV0pPDAmJihuLS0scis9MWU5KSksW24scl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtcGUpLzFlM319LHZlPWdlLHllPWosbWU9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gZS5jb25maWc9dCxuJiYoZS5jb2RlPW4pLGUucmVxdWVzdD1yLGUucmVzcG9uc2U9aSxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHdlPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxfZT1tZSxTZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gX2Uobyx0LG4scixpKX0sYmU9U2Usa2U9aixFZT1rZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksa2UuaXNOdW1iZXIobikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKG4pLnRvR01UU3RyaW5nKCkpLGtlLmlzU3RyaW5nKHIpJiZzLnB1c2goInBhdGg9IityKSxrZS5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFRlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LFJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LEFlPWosQ2U9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxQZT1qLERlPVBlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gcihlKXt2YXIgcj1lO3JldHVybiB0JiYobi5zZXRBdHRyaWJ1dGUoImhyZWYiLHIpLHI9bi5ocmVmKSxuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikse2hyZWY6bi5ocmVmLHByb3RvY29sOm4ucHJvdG9jb2w/bi5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6bi5ob3N0LHNlYXJjaDpuLnNlYXJjaD9uLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOm4uaGFzaD9uLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpuLmhvc3RuYW1lLHBvcnQ6bi5wb3J0LHBhdGhuYW1lOiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApP24ucGF0aG5hbWU6Ii8iK24ucGF0aG5hbWV9fXJldHVybiBlPXIod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciBuPVBlLmlzU3RyaW5nKHQpP3IodCk6dDtyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZnVuY3Rpb24gSWUoZSl7dGhpcy5tZXNzYWdlPWV9SWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LEllLnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBPZT1JZSxVZT1qLExlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztuLnN0YXR1cyYmciYmIXIobi5zdGF0dXMpP3QoYmUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIituLnN0YXR1cyxuLmNvbmZpZyxudWxsLG4ucmVxdWVzdCxuKSk6ZShuKX0sSGU9RWUsTWU9SyxxZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhVGUodCk/UmUoZSx0KTp0fSxqZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT17fTtyZXR1cm4gZT8oQWUuZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihyPWUuaW5kZXhPZigiOiIpLHQ9QWUudHJpbShlLnN1YnN0cigwLHIpKS50b0xvd2VyQ2FzZSgpLG49QWUudHJpbShlLnN1YnN0cihyKzEpKSx0KXtpZihpW3RdJiZDZS5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtuXSk6aVt0XT9pW3RdKyIsICIrbjpufX0pKSxpKTppfSxOZT1EZSx4ZT1TZSxLZT13ZSxCZT1PZSxKZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7dmFyIHIsaT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShyKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpfVVlLmlzRm9ybURhdGEoaSkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgdT1lLmF1dGgudXNlcm5hbWV8fCIiLGw9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYSh1KyI6IitsKX12YXIgZD1xZShlLmJhc2VVUkwsZS51cmwpO2Z1bmN0aW9uIGgoKXtpZihjKXt2YXIgcj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/amUoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOnMmJiJ0ZXh0IiE9PXMmJiJqc29uIiE9PXM/Yy5yZXNwb25zZTpjLnJlc3BvbnNlVGV4dCxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpyLGNvbmZpZzplLHJlcXVlc3Q6Y307TGUoKGZ1bmN0aW9uKGUpe3QoZSksYSgpfSksKGZ1bmN0aW9uKGUpe24oZSksYSgpfSksaSksYz1udWxsfX1pZihjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxNZShkLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPWg6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjJiY0PT09Yy5yZWFkeVN0YXRlJiYoMCE9PWMuc3RhdHVzfHxjLnJlc3BvbnNlVVJMJiYwPT09Yy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChoKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKG4oeGUoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7bih4ZSgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHI9ZS50cmFuc2l0aW9uYWx8fEtlO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxuKHhlKHQsZSxyLmNsYXJpZnlUaW1lb3V0RXJyb3I/IkVUSU1FRE9VVCI6IkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbH0sVWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGY9KGUud2l0aENyZWRlbnRpYWxzfHxOZShkKSkmJmUueHNyZkNvb2tpZU5hbWU/SGUucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZiYmKG9bZS54c3JmSGVhZGVyTmFtZV09Zil9InNldFJlcXVlc3RIZWFkZXIiaW4gYyYmVWUuZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOmMuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFVlLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJihjLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihyPWZ1bmN0aW9uKGUpe2MmJihuKCFlfHxlJiZlLnR5cGU/bmV3IEJlKCJjYW5jZWxlZCIpOmUpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShyKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/cigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixyKSkpLGl8fChpPW51bGwpLGMuc2VuZChpKX0pKX0sRmU9aixXZT1mdW5jdGlvbihlLHQpe3llLmZvckVhY2goZSwoZnVuY3Rpb24obixyKXtyIT09dCYmci50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1uLGRlbGV0ZSBlW3JdKX0pKX0semU9bWUsWWU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBWZShlLHQpeyFGZS5pc1VuZGVmaW5lZChlKSYmRmUuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyIEdlLFhlPXt0cmFuc2l0aW9uYWw6d2UsYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PXZlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmUpKSYmKEdlPUplKSxHZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2UodCwiQWNjZXB0IiksV2UodCwiQ29udGVudC1UeXBlIiksRmUuaXNGb3JtRGF0YShlKXx8RmUuaXNBcnJheUJ1ZmZlcihlKXx8RmUuaXNCdWZmZXIoZSl8fEZlLmlzU3RyZWFtKGUpfHxGZS5pc0ZpbGUoZSl8fEZlLmlzQmxvYihlKT9lOkZlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkZlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhWZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6RmUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhWZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LG4pe2lmKEZlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksRmUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKG58fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fFhlLnRyYW5zaXRpb25hbCxuPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9IW4mJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKGl8fHImJkZlLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYoaSl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyB6ZShlLHRoaXMsIkVfSlNPTl9QQVJTRSIpO3Rocm93IGV9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0ZlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe1hlLmhlYWRlcnNbZV09e319KSksRmUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtYZS5oZWFkZXJzW2VdPUZlLm1lcmdlKFllKX0pKTt2YXIgJGU9WGUsWmU9aixRZT0kZSxldD1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sdHQ9aixudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpc3x8UWU7cmV0dXJuIFplLmZvckVhY2gobiwoZnVuY3Rpb24obil7ZT1uLmNhbGwocixlLHQpfSkpLGV9LHJ0PWV0LGl0PSRlLG90PU9lO2Z1bmN0aW9uIHN0KGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBvdCgiY2FuY2VsZWQiKX12YXIgYXQ9aixjdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49e307ZnVuY3Rpb24gcihlLHQpe3JldHVybiBhdC5pc1BsYWluT2JqZWN0KGUpJiZhdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKGUsdCk6YXQuaXNQbGFpbk9iamVjdCh0KT9hdC5tZXJnZSh7fSx0KTphdC5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkobil7cmV0dXJuIGF0LmlzVW5kZWZpbmVkKHRbbl0pP2F0LmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKGVbbl0sdFtuXSl9ZnVuY3Rpb24gbyhlKXtpZighYXQuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIHIodm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMobil7cmV0dXJuIGF0LmlzVW5kZWZpbmVkKHRbbl0pP2F0LmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKHZvaWQgMCx0W25dKX1mdW5jdGlvbiBhKG4pe3JldHVybiBuIGluIHQ/cihlW25dLHRbbl0pOm4gaW4gZT9yKHZvaWQgMCxlW25dKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGF0LmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxyPXQoZSk7YXQuaXNVbmRlZmluZWQocikmJnQhPT1hfHwobltlXT1yKX0pKSxufSx1dD0iMC4yNi4xIixsdD11dCxkdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ZHRbZV09ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciBodD17fTtkdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2x0KyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihuLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihyKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIWh0W2ldJiYoaHRbaV09ITAsY29uc29sZS53YXJuKHIoaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShuLGksbyl9fTt2YXIgZnQ9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LG4pe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLGk9ci5sZW5ndGg7aS0tID4wOyl7dmFyIG89cltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK2MpfWVsc2UgaWYoITAhPT1uKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczpkdH0scHQ9aixndD1LLHZ0PUYseXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHN0KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1udC5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz10dC5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLHR0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8aXQuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHN0KGUpLHQuZGF0YT1udC5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBydCh0KXx8KHN0KGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9bnQuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sbXQ9Y3Qsd3Q9ZnQsX3Q9d3QudmFsaWRhdG9ycztmdW5jdGlvbiBTdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHZ0LHJlc3BvbnNlOm5ldyB2dH19U3QucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9bXQodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgbj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1uJiZ3dC5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpfdC50cmFuc2l0aW9uYWwoX3QuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpfdC50cmFuc2l0aW9uYWwoX3QuYm9vbGVhbil9LCExKTt2YXIgcj1bXSxpPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fChpPWkmJmUuc3luY2hyb25vdXMsci51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgbyxzPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhaSl7dmFyIGE9W3l0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsciksYT1hLmNvbmNhdChzKSxvPVByb21pc2UucmVzb2x2ZSh0KTthLmxlbmd0aDspbz1vLnRoZW4oYS5zaGlmdCgpLGEuc2hpZnQoKSk7cmV0dXJuIG99Zm9yKHZhciBjPXQ7ci5sZW5ndGg7KXt2YXIgdT1yLnNoaWZ0KCksbD1yLnNoaWZ0KCk7dHJ5e2M9dShjKX1jYXRjaChlKXtsKGUpO2JyZWFrfX10cnl7bz15dChjKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtzLmxlbmd0aDspbz1vLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIG99LFN0LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bXQodGhpcy5kZWZhdWx0cyxlKSxndChlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxwdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7U3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdChtdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToobnx8e30pLmRhdGF9KSl9fSkpLHB0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7U3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOm59KSl9fSkpO3ZhciBidD1TdCxrdD1PZTtmdW5jdGlvbiBFdChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIG49dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYobi5fbGlzdGVuZXJzKXt2YXIgdCxyPW4uX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PHI7dCsrKW4uX2xpc3RlbmVyc1t0XShlKTtuLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIHIuY2FuY2VsPWZ1bmN0aW9uKCl7bi51bnN1YnNjcmliZSh0KX0scn0sZSgoZnVuY3Rpb24oZSl7bi5yZWFzb258fChuLnJlYXNvbj1uZXcga3QoZSksdChuLnJlYXNvbikpfSkpfUV0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LEV0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dGhpcy5yZWFzb24/ZSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LEV0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sRXQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgRXQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBUdD1FdCxSdD1qLEF0PWosQ3Q9QyxQdD1idCxEdD1jdDt2YXIgSXQ9ZnVuY3Rpb24gZSh0KXt2YXIgbj1uZXcgUHQodCkscj1DdChQdC5wcm90b3R5cGUucmVxdWVzdCxuKTtyZXR1cm4gQXQuZXh0ZW5kKHIsUHQucHJvdG90eXBlLG4pLEF0LmV4dGVuZChyLG4pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBlKER0KHQsbikpfSxyfSgkZSk7SXQuQXhpb3M9UHQsSXQuQ2FuY2VsPU9lLEl0LkNhbmNlbFRva2VuPVR0LEl0LmlzQ2FuY2VsPWV0LEl0LlZFUlNJT049dXQsSXQuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sSXQuc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sSXQuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBSdC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sQS5leHBvcnRzPUl0LEEuZXhwb3J0cy5kZWZhdWx0PUl0O3ZhciBPdCxVdD1BLmV4cG9ydHM7bGV0IEx0PU90PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVV0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IE90KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1VdC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1VdC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLG49bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntuLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1ufXJldHVybiB0LnN0YXJ0VGltZUluTXM9KG5ldyBEYXRlKS5nZXRUaW1lKCksT3QuaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgT3QuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIE90LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPdC5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1ufSkpfWVuYWJsZUhhbmRsZXIoKXtPdC5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOk90LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e090LmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07THQuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsTHQ9T3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxuLHMpOmkodCxuKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scyksc30oW2U9Pnt9XSxMdCk7Y2xhc3MgSHR7Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxuKX0pKX1nZXREYXRhKHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0obj10aGlzLl9kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCkpJiZ2b2lkIDAhPT1yP3I6Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNsYXNzIE10e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWNsYXNzIHF0e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyByZW1vdmVBdXRob3JpemF0aW9uQ29kZSgpe2NvbnN0IGU9bG9jYXRpb24uaHJlZjtoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlLnJlcGxhY2UoL1w/Y29kZT0uKiQvLCIiKSl9c3RhdGljIGdldFBLQ0UoZSl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGUpKSYmdm9pZCAwIT09dD90OiIifXN0YXRpYyBzZXRQS0NFKGUsdCl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlLHQpfXN0YXRpYyBzZXRTaWduT3V0VVJMKGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0ocyxlKX1zdGF0aWMgZ2V0U2lnbk91dFVSTCgpe3ZhciBlO3JldHVybiBudWxsIT09KGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzKSkmJnZvaWQgMCE9PWU/ZToiIn1zdGF0aWMgcmVtb3ZlUEtDRShlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfXN0YXRpYyBjYW5Db250aW51ZVNpZ25JbihlLHQpe3JldHVybiEoZSYmIXF0Lmhhc0Vycm9ySW5VUkwoKSYmIXF0Lmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gcXQuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpfXN0YXRpYyB3YXNTaWduSW5DYWxsZWQoKXtyZXR1cm4hKCFxdC5oYXNFcnJvckluVVJMKCkmJiFxdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoXyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoUykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KF8pJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh3KTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0odyxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fXF0LnVudGlsPWZ1bmN0aW9uKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo1MDA7Y29uc3Qgbj1yPT5lKCk/cigpOnNldFRpbWVvdXQoKCgpPT5uKHIpKSx0KTtyZXR1cm4gbmV3IFByb21pc2Uobil9O3ZhciBqdD1bXSxOdD1bXSx4dD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxLdD0hMTtmdW5jdGlvbiBCdCgpe0t0PSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClqdFt0XT1lW3RdLE50W2UuY2hhckNvZGVBdCh0KV09dDtOdFsiLSIuY2hhckNvZGVBdCgwKV09NjIsTnRbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIEp0KGUsdCxuKXtmb3IodmFyIHIsaSxvPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNikrKGVbcysxXTw8OCkrZVtzKzJdLG8ucHVzaChqdFsoaT1yKT4+MTgmNjNdK2p0W2k+PjEyJjYzXStqdFtpPj42JjYzXStqdFs2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gRnQoZSl7dmFyIHQ7S3R8fEJ0KCk7Zm9yKHZhciBuPWUubGVuZ3RoLHI9biUzLGk9IiIsbz1bXSxzPTE2MzgzLGE9MCxjPW4tcjthPGM7YSs9cylvLnB1c2goSnQoZSxhLGErcz5jP2M6YStzKSk7cmV0dXJuIDE9PT1yPyh0PWVbbi0xXSxpKz1qdFt0Pj4yXSxpKz1qdFt0PDw0JjYzXSxpKz0iPT0iKToyPT09ciYmKHQ9KGVbbi0yXTw8OCkrZVtuLTFdLGkrPWp0W3Q+PjEwXSxpKz1qdFt0Pj40JjYzXSxpKz1qdFt0PDwyJjYzXSxpKz0iPSIpLG8ucHVzaChpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIFd0KGUsdCxuLHIsaSl7dmFyIG8scyxhPTgqaS1yLTEsYz0oMTw8YSktMSx1PWM+PjEsbD0tNyxkPW4/aS0xOjAsaD1uPy0xOjEsZj1lW3QrZF07Zm9yKGQrPWgsbz1mJigxPDwtbCktMSxmPj49LWwsbCs9YTtsPjA7bz0yNTYqbytlW3QrZF0sZCs9aCxsLT04KTtmb3Iocz1vJigxPDwtbCktMSxvPj49LWwsbCs9cjtsPjA7cz0yNTYqcytlW3QrZF0sZCs9aCxsLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1jKXJldHVybiBzP05hTjoxLzAqKGY/LTE6MSk7cys9TWF0aC5wb3coMixyKSxvLT11fXJldHVybihmPy0xOjEpKnMqTWF0aC5wb3coMixvLXIpfWZ1bmN0aW9uIHp0KGUsdCxuLHIsaSxvKXt2YXIgcyxhLGMsdT04Km8taS0xLGw9KDE8PHUpLTEsZD1sPj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxmPXI/MDpvLTEscD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9bCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooYz1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSxjKj0yKSwodCs9cytkPj0xP2gvYzpoKk1hdGgucG93KDIsMS1kKSkqYz49MiYmKHMrKyxjLz0yKSxzK2Q+PWw/KGE9MCxzPWwpOnMrZD49MT8oYT0odCpjLTEpKk1hdGgucG93KDIsaSkscys9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbbitmXT0yNTUmYSxmKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsdSs9aTt1PjA7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHUtPTgpO2VbbitmLXBdfD0xMjgqZ312YXIgWXQ9e30udG9TdHJpbmcsVnQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09WXQuY2FsbChlKX07WnQuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT1XLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFcuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgR3Q9WHQoKTtmdW5jdGlvbiBYdCgpe3JldHVybiBadC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiAkdChlLHQpe2lmKFh0KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPVp0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBadCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBadChlLHQsbil7aWYoIShadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgWnQpKXJldHVybiBuZXcgWnQoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gdG4odGhpcyxlKX1yZXR1cm4gUXQodGhpcyxlLHQsbil9ZnVuY3Rpb24gUXQoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PW4mJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LG4pOm5ldyBVaW50OEFycmF5KHQsbixyKTtadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6ZT1ubihlLHQpO3JldHVybiBlfShlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG4peyJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpO2lmKCFadC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8c24odCxuKSxpPShlPSR0KGUscikpLndyaXRlKHQsbik7aSE9PXImJihlPWUuc2xpY2UoMCxpKSk7cmV0dXJuIGV9KGUsdCxuKTpmdW5jdGlvbihlLHQpe2lmKG9uKHQpKXt2YXIgbj0wfHJuKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPSR0KGUsbikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG4pLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj8kdChlLDApOm5uKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJlZ0KHQuZGF0YSkpcmV0dXJuIG5uKGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gZW4oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB0bihlLHQpe2lmKGVuKHQpLGU9JHQoZSx0PDA/MDowfHJuKHQpKSwhWnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBubihlLHQpe3ZhciBuPXQubGVuZ3RoPDA/MDowfHJuKHQubGVuZ3RoKTtlPSR0KGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBybihlKXtpZihlPj1YdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitYdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gc24oZSx0KXtpZihvbihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gVW4oZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBMbihlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBVbihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBhbihlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBibih0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gbW4odGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBfbih0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gU24odGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4geW4odGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4ga24odGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gY24oZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiB1bihlLHQsbixyLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPWk/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIWkpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9WnQuZnJvbSh0LHIpKSxvbih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOmxuKGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsWnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG4pOmxuKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBsbihlLHQsbixyLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixjLz0yLG4vPTJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGw9LTE7Zm9yKG89bjtvPGE7bysrKWlmKHUoZSxvKT09PXUodCwtMT09PWw/MDpvLWwpKXtpZigtMT09PWwmJihsPW8pLG8tbCsxPT09YylyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihvLT1vLWwpLGw9LTF9ZWxzZSBmb3IobitjPmEmJihuPWEtYyksbz1uO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsaD0wO2g8YztoKyspaWYodShlLG8raCkhPT11KHQsaCkpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBkbihlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgaT1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5pJiYocj1pKTpyPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgcz0wO3M8cjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtuK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gaG4oZSx0LG4scil7cmV0dXJuIEhuKFVuKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIHBuKGUsdCxuLHIpe3JldHVybiBmbihlLHQsbixyKX1mdW5jdGlvbiBnbihlLHQsbixyKXtyZXR1cm4gSG4oTG4odCksZSxuLHIpfWZ1bmN0aW9uIHZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKXI9KG49ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHluKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9GdChlKTpGdChlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIG1uKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8scyxhLGMsdT1lW2ldLGw9bnVsbCxkPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStkPD1uKXN3aXRjaChkKXtjYXNlIDE6dTwxMjgmJihsPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihjPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihsPWMpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGM9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYobD1jKTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKGM9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmYzwxMTE0MTEyJiYobD1jKX1udWxsPT09bD8obD02NTUzMyxkPTEpOmw+NjU1MzUmJihsLT02NTUzNixyLnB1c2gobD4+PjEwJjEwMjN8NTUyOTYpLGw9NTYzMjB8MTAyMyZsKSxyLnB1c2gobCksaSs9ZH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9d24pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBuPSIiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPXduKSk7cmV0dXJuIG59KHIpfVp0LnBvb2xTaXplPTgxOTIsWnQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPVp0LnByb3RvdHlwZSxlfSxadC5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUXQobnVsbCxlLHQsbil9LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihadC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLFp0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxadC5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlbih0KSx0PD0wPyR0KGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/JHQoZSx0KS5maWxsKG4scik6JHQoZSx0KS5maWxsKG4pOiR0KGUsdCl9KG51bGwsZSx0LG4pfSxadC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB0bihudWxsLGUpfSxadC5pc0J1ZmZlcj1NbixadC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIW9uKGUpfHwhb24odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKG4scik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LFp0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFp0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFWdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBadC5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO3ZhciByPVp0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgbz1lW25dO2lmKCFvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KHIsaSksaSs9by5sZW5ndGh9cmV0dXJuIHJ9LFp0LmJ5dGVMZW5ndGg9c24sWnQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxadC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWNuKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWNuKHRoaXMsdCx0KzMpLGNuKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpY24odGhpcyx0LHQrNyksY24odGhpcyx0KzEsdCs2KSxjbih0aGlzLHQrMix0KzUpLGNuKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP21uKHRoaXMsMCxlKTphbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFp0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1adC5jb21wYXJlKHRoaXMsZSl9LFp0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LFp0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49aSYmdD49bilyZXR1cm4gMDtpZihyPj1pKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLHM9KG4+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShyLGkpLHU9ZS5zbGljZSh0LG4pLGw9MDtsPGE7KytsKWlmKGNbbF0hPT11W2xdKXtvPWNbbF0scz11W2xdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sWnQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LFp0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdW4odGhpcyxlLHQsbiwhMCl9LFp0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITEpfSxadC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5pKSYmKG49aSksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIGRuKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGhuKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBmbih0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBwbih0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIGduKHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdm4odGhpcyxlLHQsbik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxvPSEwfX0sWnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIHduPTQwOTY7ZnVuY3Rpb24gX24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYm4oZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1PbihlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBrbihlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEVuKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBUbihlLHQsbixyLGksbyl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBSbihlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gQW4oZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO2k8bzsrK2kpZVtuK2ldPXQ+Pj44KihyP2k6My1pKSYyNTV9ZnVuY3Rpb24gQ24oZSx0LG4scixpLG8pe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw0KSx6dChlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBEbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw4KSx6dChlLHQsbixyLDUyLDgpLG4rOH1adC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVCkobj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7bj1uZXcgWnQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pbltvXT10aGlzW28rZV19cmV0dXJuIG59LFp0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LFp0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LFp0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxadC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHI+PShpKj0xMjgpJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxadC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxpPTEsbz10aGlzW2UrLS1yXTtyPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1yXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sWnQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LFp0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sWnQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSwyMyw0KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMCw1Miw4KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSw1Miw4KX0sWnQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8VG4odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMjU1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpSbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpBbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMSwxMjcsLTEyOCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOlJuKHRoaXMsZSx0LCEwKSx0KzJ9LFp0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpBbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMCxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbiYmKHI9ZS5sZW5ndGgtdCtuKTt2YXIgaSxvPXItbjtpZih0aGlzPT09ZSYmbjx0JiZ0PHIpZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krbl07ZWxzZSBpZihvPDFlM3x8IVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxadC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8ocj10LHQ9MCxuPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiByJiYhWnQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9b24oZSk/ZTpVbihuZXcgWnQoZSxyKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBJbj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPbihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gVW4oZSx0KXt2YXIgbjt0PXR8fDEvMDtmb3IodmFyIHI9ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8cjsrK3Mpe2lmKChuPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09cil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1uO2NvbnRpbnVlfW49NjU1MzYrKGktNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIExuKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM7S3R8fEJ0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IHh0KDMqYS80LW8pLHI9bz4wP2EtNDphO3ZhciBjPTA7Zm9yKHQ9MCxuPTA7dDxyO3QrPTQsbis9MylpPU50W2UuY2hhckNvZGVBdCh0KV08PDE4fE50W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8TnRbZS5jaGFyQ29kZUF0KHQrMildPDw2fE50W2UuY2hhckNvZGVBdCh0KzMpXSxzW2MrK109aT4+MTYmMjU1LHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPU50W2UuY2hhckNvZGVBdCh0KV08PDJ8TnRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbYysrXT0yNTUmaSk6MT09PW8mJihpPU50W2UuY2hhckNvZGVBdCh0KV08PDEwfE50W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxOdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShJbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gSG4oZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxxbihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZxbihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gcW4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgam49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOlp0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLFp0LmFsbG9jKCtlKX0saXNCdWZmZXI6TW4sa01heExlbmd0aDpHdH0pLE5uPXtleHBvcnRzOnt9fSx4bj17fSxLbj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEtuLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10JTQ7aWYoIW4pcmV0dXJuIGU7dmFyIHI9dCxpPTQtbixvPXQraSxzPVp0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIscisrKTtyZXR1cm4gcy50b1N0cmluZygpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCbj1LbjtmdW5jdGlvbiBKbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmlzQnVmZmVyKGUpP1duKGUudG9TdHJpbmcoImJhc2U2NCIpKTpXbihadC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksQm4uZGVmYXVsdChlKS5yZXBsYWNlKC9cLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIil9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfXZhciB6bixZbj1KbjtZbi5lbmNvZGU9Sm4sWW4uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksWnQuZnJvbShGbihlKSwiYmFzZTY0IikudG9TdHJpbmcodCl9LFluLnRvQmFzZTY0PUZuLFluLmZyb21CYXNlNjQ9V24sWW4udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0LmZyb20oRm4oZSksImJhc2U2NCIpfSx4bi5kZWZhdWx0PVluLCh6bj1ObikuZXhwb3J0cz14bi5kZWZhdWx0LHpuLmV4cG9ydHMuZGVmYXVsdD16bi5leHBvcnRzO3ZhciBWbj1Obi5leHBvcnRzLEduPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQsbil7dmFyIHI9e307IWZ1bmN0aW9uKGUpe2UuX19lc01vZHVsZT0hMCxlLmRpZ2VzdExlbmd0aD0zMixlLmJsb2NrU2l6ZT02NDt2YXIgdD1uZXcgVWludDMyQXJyYXkoWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pO2Z1bmN0aW9uIG4oZSxuLHIsaSxvKXtmb3IodmFyIHMsYSxjLHUsbCxkLGgsZixwLGcsdix5LG07bz49NjQ7KXtmb3Iocz1uWzBdLGE9blsxXSxjPW5bMl0sdT1uWzNdLGw9bls0XSxkPW5bNV0saD1uWzZdLGY9bls3XSxnPTA7ZzwxNjtnKyspdj1pKzQqZyxlW2ddPSgyNTUmclt2XSk8PDI0fCgyNTUmclt2KzFdKTw8MTZ8KDI1NSZyW3YrMl0pPDw4fDI1NSZyW3YrM107Zm9yKGc9MTY7Zzw2NDtnKyspeT0oKHA9ZVtnLTJdKT4+PjE3fHA8PDE1KV4ocD4+PjE5fHA8PDEzKV5wPj4+MTAsbT0oKHA9ZVtnLTE1XSk+Pj43fHA8PDI1KV4ocD4+PjE4fHA8PDE0KV5wPj4+MyxlW2ddPSh5K2VbZy03XXwwKSsobStlW2ctMTZdfDApO2ZvcihnPTA7Zzw2NDtnKyspeT0oKChsPj4+NnxsPDwyNileKGw+Pj4xMXxsPDwyMSleKGw+Pj4yNXxsPDw3KSkrKGwmZF5+bCZoKXwwKSsoZisodFtnXStlW2ddfDApfDApfDAsbT0oKHM+Pj4yfHM8PDMwKV4ocz4+PjEzfHM8PDE5KV4ocz4+PjIyfHM8PDEwKSkrKHMmYV5zJmNeYSZjKXwwLGY9aCxoPWQsZD1sLGw9dSt5fDAsdT1jLGM9YSxhPXMscz15K218MDtuWzBdKz1zLG5bMV0rPWEsblsyXSs9YyxuWzNdKz11LG5bNF0rPWwsbls1XSs9ZCxuWzZdKz1oLG5bN10rPWYsaSs9NjQsby09NjR9cmV0dXJuIGl9dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5kaWdlc3RMZW5ndGg9ZS5kaWdlc3RMZW5ndGgsdGhpcy5ibG9ja1NpemU9ZS5ibG9ja1NpemUsdGhpcy5zdGF0ZT1uZXcgSW50MzJBcnJheSg4KSx0aGlzLnRlbXA9bmV3IEludDMyQXJyYXkoNjQpLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDEyOCksdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzLnJlc2V0KCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVbMF09MTc3OTAzMzcwMyx0aGlzLnN0YXRlWzFdPTMxNDQxMzQyNzcsdGhpcy5zdGF0ZVsyXT0xMDEzOTA0MjQyLHRoaXMuc3RhdGVbM109Mjc3MzQ4MDc2Mix0aGlzLnN0YXRlWzRdPTEzNTk4OTMxMTksdGhpcy5zdGF0ZVs1XT0yNjAwODIyOTI0LHRoaXMuc3RhdGVbNl09NTI4NzM0NjM1LHRoaXMuc3RhdGVbN109MTU0MTQ1OTIyNSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXN9LHQucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmJ1ZmZlci5sZW5ndGg7ZSsrKXRoaXMuYnVmZmVyW2VdPTA7Zm9yKGU9MDtlPHRoaXMudGVtcC5sZW5ndGg7ZSsrKXRoaXMudGVtcFtlXT0wO3RoaXMucmVzZXQoKX0sdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ZS5sZW5ndGgpLHRoaXMuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJTSEEyNTY6IGNhbid0IHVwZGF0ZSBiZWNhdXNlIGhhc2ggd2FzIGZpbmlzaGVkLiIpO3ZhciByPTA7aWYodGhpcy5ieXRlc0hhc2hlZCs9dCx0aGlzLmJ1ZmZlckxlbmd0aD4wKXtmb3IoO3RoaXMuYnVmZmVyTGVuZ3RoPDY0JiZ0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbcisrXSx0LS07NjQ9PT10aGlzLmJ1ZmZlckxlbmd0aCYmKG4odGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCw2NCksdGhpcy5idWZmZXJMZW5ndGg9MCl9Zm9yKHQ+PTY0JiYocj1uKHRoaXMudGVtcCx0aGlzLnN0YXRlLGUscix0KSx0JT02NCk7dD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZmluaXNoZWQpe3ZhciB0PXRoaXMuYnl0ZXNIYXNoZWQscj10aGlzLmJ1ZmZlckxlbmd0aCxpPXQvNTM2ODcwOTEyfDAsbz10PDwzLHM9dCU2NDw1Nj82NDoxMjg7dGhpcy5idWZmZXJbcl09MTI4O2Zvcih2YXIgYT1yKzE7YTxzLTg7YSsrKXRoaXMuYnVmZmVyW2FdPTA7dGhpcy5idWZmZXJbcy04XT1pPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtN109aT4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTZdPWk+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTVdPWk+Pj4wJjI1NSx0aGlzLmJ1ZmZlcltzLTRdPW8+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy0zXT1vPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtMl09bz4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtMV09bz4+PjAmMjU1LG4odGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCxzKSx0aGlzLmZpbmlzaGVkPSEwfWZvcihhPTA7YTw4O2ErKyllWzQqYSswXT10aGlzLnN0YXRlW2FdPj4+MjQmMjU1LGVbNCphKzFdPXRoaXMuc3RhdGVbYV0+Pj4xNiYyNTUsZVs0KmErMl09dGhpcy5zdGF0ZVthXT4+PjgmMjU1LGVbNCphKzNdPXRoaXMuc3RhdGVbYV0+Pj4wJjI1NTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSx0LnByb3RvdHlwZS5fc2F2ZVN0YXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5zdGF0ZS5sZW5ndGg7dCsrKWVbdF09dGhpcy5zdGF0ZVt0XX0sdC5wcm90b3R5cGUuX3Jlc3RvcmVTdGF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dGhpcy5zdGF0ZS5sZW5ndGg7bisrKXRoaXMuc3RhdGVbbl09ZVtuXTt0aGlzLmJ5dGVzSGFzaGVkPXQsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmJ1ZmZlckxlbmd0aD0wfSx0fSgpO2UuSGFzaD1yO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmlubmVyPW5ldyByLHRoaXMub3V0ZXI9bmV3IHIsdGhpcy5ibG9ja1NpemU9dGhpcy5pbm5lci5ibG9ja1NpemUsdGhpcy5kaWdlc3RMZW5ndGg9dGhpcy5pbm5lci5kaWdlc3RMZW5ndGg7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja1NpemUpO2lmKGUubGVuZ3RoPnRoaXMuYmxvY2tTaXplKShuZXcgcikudXBkYXRlKGUpLmZpbmlzaCh0KS5jbGVhbigpO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdFtuXT1lW25dO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49NTQ7dGhpcy5pbm5lci51cGRhdGUodCk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dXj0xMDY7dGhpcy5vdXRlci51cGRhdGUodCksdGhpcy5pc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMub3N0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLmlubmVyLl9zYXZlU3RhdGUodGhpcy5pc3RhdGUpLHRoaXMub3V0ZXIuX3NhdmVTdGF0ZSh0aGlzLm9zdGF0ZSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dPTB9cmV0dXJuIGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLmlzdGF0ZSx0aGlzLmlubmVyLmJsb2NrU2l6ZSksdGhpcy5vdXRlci5fcmVzdG9yZVN0YXRlKHRoaXMub3N0YXRlLHRoaXMub3V0ZXIuYmxvY2tTaXplKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5pc3RhdGUubGVuZ3RoO2UrKyl0aGlzLm9zdGF0ZVtlXT10aGlzLmlzdGF0ZVtlXT0wO3RoaXMuaW5uZXIuY2xlYW4oKSx0aGlzLm91dGVyLmNsZWFuKCl9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoZSksdGhpc30sZS5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm91dGVyLmZpbmlzaGVkP3RoaXMub3V0ZXIuZmluaXNoKGUpOih0aGlzLmlubmVyLmZpbmlzaChlKSx0aGlzLm91dGVyLnVwZGF0ZShlLHRoaXMuZGlnZXN0TGVuZ3RoKS5maW5pc2goZSkpLHRoaXN9LGUucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sZX0oKTtmdW5jdGlvbiBvKGUpe3ZhciB0PShuZXcgcikudXBkYXRlKGUpLG49dC5kaWdlc3QoKTtyZXR1cm4gdC5jbGVhbigpLG59ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPW5ldyBpKGUpLnVwZGF0ZSh0KSxyPW4uZGlnZXN0KCk7cmV0dXJuIG4uY2xlYW4oKSxyfWZ1bmN0aW9uIGEoZSx0LG4scil7dmFyIGk9clswXTtpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoImhrZGY6IGNhbm5vdCBleHBhbmQgbW9yZSIpO3QucmVzZXQoKSxpPjEmJnQudXBkYXRlKGUpLG4mJnQudXBkYXRlKG4pLHQudXBkYXRlKHIpLHQuZmluaXNoKGUpLHJbMF0rK31lLkhNQUM9aSxlLmhhc2g9byxlLmRlZmF1bHQ9byxlLmhtYWM9czt2YXIgYz1uZXcgVWludDhBcnJheShlLmRpZ2VzdExlbmd0aCk7ZnVuY3Rpb24gdShlLHQsbixyKXt2b2lkIDA9PT10JiYodD1jKSx2b2lkIDA9PT1yJiYocj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksdT1zKHQsZSksbD1uZXcgaSh1KSxkPW5ldyBVaW50OEFycmF5KGwuZGlnZXN0TGVuZ3RoKSxoPWQubGVuZ3RoLGY9bmV3IFVpbnQ4QXJyYXkocikscD0wO3A8cjtwKyspaD09PWQubGVuZ3RoJiYoYShkLGwsbixvKSxoPTApLGZbcF09ZFtoKytdO3JldHVybiBsLmNsZWFuKCksZC5maWxsKDApLG8uZmlsbCgwKSxmfWZ1bmN0aW9uIGwoZSx0LG4scil7Zm9yKHZhciBvPW5ldyBpKGUpLHM9by5kaWdlc3RMZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KSxjPW5ldyBVaW50OEFycmF5KHMpLHU9bmV3IFVpbnQ4QXJyYXkocyksbD1uZXcgVWludDhBcnJheShyKSxkPTA7ZCpzPHI7ZCsrKXt2YXIgaD1kKzE7YVswXT1oPj4+MjQmMjU1LGFbMV09aD4+PjE2JjI1NSxhWzJdPWg+Pj44JjI1NSxhWzNdPWg+Pj4wJjI1NSxvLnJlc2V0KCksby51cGRhdGUodCksby51cGRhdGUoYSksby5maW5pc2godSk7Zm9yKHZhciBmPTA7ZjxzO2YrKyljW2ZdPXVbZl07Zm9yKGY9MjtmPD1uO2YrKyl7by5yZXNldCgpLG8udXBkYXRlKHUpLmZpbmlzaCh1KTtmb3IodmFyIHA9MDtwPHM7cCsrKWNbcF1ePXVbcF19Zm9yKGY9MDtmPHMmJmQqcytmPHI7ZisrKWxbZCpzK2ZdPWNbZl19Zm9yKGQ9MDtkPHM7ZCsrKWNbZF09dVtkXT0wO2ZvcihkPTA7ZDw0O2QrKylhW2RdPTA7cmV0dXJuIG8uY2xlYW4oKSxsfWUuaGtkZj11LGUucGJrZGYyPWx9KHIpO3ZhciBpPXIuZGVmYXVsdDtmb3IodmFyIG8gaW4gcilpW29dPXJbb107ZS5leHBvcnRzPWl9KCl9KEduKTt2YXIgWG49VChHbi5leHBvcnRzKSwkbj1jcnlwdG87Y29uc3QgWm49ZT0+ZSBpbnN0YW5jZW9mIENyeXB0b0tleSxRbj1uZXcgVGV4dEVuY29kZXIsZXI9bmV3IFRleHREZWNvZGVyO2NvbnN0IHRyPWU9PntsZXQgdD1lO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1lci5kZWNvZGUodCkpLHQ9dC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKTt0cnl7cmV0dXJuKGU9Pntjb25zdCB0PWF0b2IoZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59KSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIil9fTtjbGFzcyBuciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pPU0VfR0VORVJJQyIsdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSxudWxsPT09KHQ9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpfHx2b2lkIDA9PT10fHx0LmNhbGwoRXJyb3IsdGhpcyx0aGlzLmNvbnN0cnVjdG9yKX1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfR0VORVJJQyJ9fWNsYXNzIHJyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIn19Y2xhc3MgaXIgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9FWFBJUkVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9FWFBJUkVEIn19Y2xhc3Mgb3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBzciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn19Y2xhc3MgYXIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX0lOVkFMSUQifX1jbGFzcyBjciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1RfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfSU5WQUxJRCJ9fWNsYXNzIHVyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX0lOVkFMSUQifX1jbGFzcyBsciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX05PX01BVENISU5HX0tFWSIsdGhpcy5tZXNzYWdlPSJubyBhcHBsaWNhYmxlIGtleSBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX05PX01BVENISU5HX0tFWSJ9fWNsYXNzIGRyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyIsdGhpcy5tZXNzYWdlPSJtdWx0aXBsZSBtYXRjaGluZyBrZXlzIGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyJ9fWNsYXNzIGhyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCIsdGhpcy5tZXNzYWdlPSJzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQifX1mdW5jdGlvbiBmcigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJTb2NrZXRQYWlyfWZ1bmN0aW9uIHByKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYWxnb3JpdGhtLm5hbWUiO3JldHVybiBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICIuY29uY2F0KHQsIiBtdXN0IGJlICIpLmNvbmNhdChlKSl9ZnVuY3Rpb24gZ3IoZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiB2cihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiB5cihlKXtzd2l0Y2goZSl7Y2FzZSJFUzI1NiI6cmV0dXJuIlAtMjU2IjtjYXNlIkVTMzg0IjpyZXR1cm4iUC0zODQiO2Nhc2UiRVM1MTIiOnJldHVybiJQLTUyMSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fWZ1bmN0aW9uIG1yKGUsdCl7aWYodC5sZW5ndGgmJiF0LnNvbWUoKHQ9PmUudXNhZ2VzLmluY2x1ZGVzKHQpKSkpe2xldCBlPSJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzIHVzYWdlcyBtdXN0IGluY2x1ZGUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBuPXQucG9wKCk7ZSs9Im9uZSBvZiAiLmNvbmNhdCh0LmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KG4sIi4iKX1lbHNlIDI9PT10Lmxlbmd0aD9lKz0ib25lIG9mICIuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSwiLiIpOmUrPSIiLmNvbmNhdCh0WzBdLCIuIik7dGhyb3cgbmV3IFR5cGVFcnJvcihlKX19dmFyIHdyPWZ1bmN0aW9uKGUpe2xldCB0PSJLZXkgbXVzdCBiZSAiO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtpZihyLmxlbmd0aD4yKXtjb25zdCBlPXIucG9wKCk7dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KHIuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQoZSwiLiIpfWVsc2UgMj09PXIubGVuZ3RoP3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChyWzBdLCIgb3IgIikuY29uY2F0KHJbMV0sIi4iKTp0Kz0ib2YgdHlwZSAiLmNvbmNhdChyWzBdLCIuIik7cmV0dXJuIG51bGw9PWU/dCs9IiBSZWNlaXZlZCAiLmNvbmNhdChlKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5uYW1lP3QrPSIgUmVjZWl2ZWQgZnVuY3Rpb24gIi5jb25jYXQoZS5uYW1lKToib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZSYmKHQrPSIgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgIi5jb25jYXQoZS5jb25zdHJ1Y3Rvci5uYW1lKSksdH0sX3I9ZT0+Wm4oZSk7Y29uc3QgU3I9WyJDcnlwdG9LZXkiXTtmdW5jdGlvbiBicihlKXtpZigib2JqZWN0IiE9dHlwZW9mKHQ9ZSl8fG51bGw9PT10fHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTt2YXIgdDtpZihudWxsPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiEwO2xldCBuPWU7Zm9yKDtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pOyluPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bn1jb25zdCBrcj1hc3luYyBlPT57dmFyIHQsbjtjb25zdHthbGdvcml0aG06cixrZXlVc2FnZXM6aX09ZnVuY3Rpb24oZSl7bGV0IHQsbjtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0Ijpzd2l0Y2goZS5hbGcpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnQ9e25hbWU6IkhNQUMiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBzcigiIi5jb25jYXQoZS5hbGcsIiBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzIikpO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxuPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxuPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LG49WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTQS1PQUVQIjpjYXNlIlJTQS1PQUVQLTI1NiI6Y2FzZSJSU0EtT0FFUC0zODQiOmNhc2UiUlNBLU9BRVAtNTEyIjp0PXtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLSIuY29uY2F0KHBhcnNlSW50KGUuYWxnLnNsaWNlKC0zKSwxMCl8fDEpfSxuPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTMzg0Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVM1MTIiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTUyMSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxuPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSBmcigpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtpZigiRWQyNTUxOSIhPT1lLmNydil0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJjcnYiIChTdWJ0eXBlIG9mIEtleSBQYWlyKSBQYXJhbWV0ZXIgdmFsdWUnKTt0PXtuYW1lOiJOT0RFLUVEMjU1MTkiLG5hbWVkQ3VydmU6Ik5PREUtRUQyNTUxOSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpufX0oZSksbz1bcixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0obj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1uP246aV07aWYoIlBCS0RGMiI9PT1yLm5hbWUpcmV0dXJuICRuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdHIoZS5rKSwuLi5vKTtjb25zdCBzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCRuLnN1YnRsZS5pbXBvcnRLZXkoImp3ayIscywuLi5vKX07Y29uc3QgRXI9KGUsdCxuKT0+e2Uuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fC9eQVxkezN9KD86R0NNKT9LVyQvLnRlc3QoZSk/KGU9PntpZighKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl7aWYoIV9yKGUpKXRocm93IG5ldyBUeXBlRXJyb3Iod3IoZSwuLi5TciwiVWludDhBcnJheSIpKTtpZigic2VjcmV0IiE9PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKX19KSh0KTooKGUsdCk9PntpZighX3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcih3cihlLC4uLlNyKSk7aWYoInNlY3JldCI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKTtpZigic2lnbiI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZigiZGVjcnlwdCI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZihlLmFsZ29yaXRobSYmInZlcmlmeSI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpO2lmKGUuYWxnb3JpdGhtJiYiZW5jcnlwdCI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKX0pKHQsbil9O2Z1bmN0aW9uIFRyKGUsdCxuKXtpZihabih0KSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IHByKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWdyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IHByKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodnIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHByKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IHByKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIGZyKCkmJiJFZERTQSI6aWYoIWdyKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBwcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBwcigiRUNEU0EiKTtjb25zdCBuPXlyKHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IHByKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfWZvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+Mj9uLTI6MCksaT0yO2k8bjtpKyspcltpLTJdPWFyZ3VtZW50c1tpXTttcihlLHIpfSh0LGUsbiksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKHdyKHQsLi4uU3IpKTtyZXR1cm4gJG4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOiJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpLG5hbWU6IkhNQUMifSwhMSxbbl0pfXRocm93IG5ldyBUeXBlRXJyb3Iod3IodCwuLi5TciwiVWludDhBcnJheSIpKX1jb25zdCBScj1hc3luYyhlLHQsbixyKT0+e2NvbnN0IGk9YXdhaXQgVHIoZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpufT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIG58fG48MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlciIpKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCBuPSJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZSBmcigpJiYiRWREU0EiOmNvbnN0e25hbWVkQ3VydmU6cn09dDtyZXR1cm57bmFtZTpyLG5hbWVkQ3VydmU6cn07ZGVmYXVsdDp0aHJvdyBuZXcgc3IoImFsZyAiLmNvbmNhdChlLCIgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIgYnkgSk9TRSBvciB5b3VyIGphdmFzY3JpcHQgcnVudGltZSIpKX19KGUsaS5hbGdvcml0aG0pO3RyeXtyZXR1cm4gYXdhaXQgJG4uc3VidGxlLnZlcmlmeShvLGksbixyKX1jYXRjaChlKXtyZXR1cm4hMX19O2FzeW5jIGZ1bmN0aW9uIEFyKGUsdCxuKXt2YXIgcjtpZighYnIoZSkpdGhyb3cgbmV3IGFyKCJGbGF0dGVuZWQgSldTIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodm9pZCAwPT09ZS5wcm90ZWN0ZWQmJnZvaWQgMD09PWUuaGVhZGVyKXRocm93IG5ldyBhcignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7aWYodm9pZCAwIT09ZS5wcm90ZWN0ZWQmJiJzdHJpbmciIT10eXBlb2YgZS5wcm90ZWN0ZWQpdGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMD09PWUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG1pc3NpbmciKTtpZigic3RyaW5nIiE9dHlwZW9mIGUuc2lnbmF0dXJlKXRocm93IG5ldyBhcigiSldTIFNpZ25hdHVyZSBtaXNzaW5nIG9yIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwIT09ZS5oZWFkZXImJiFicihlLmhlYWRlcikpdGhyb3cgbmV3IGFyKCJKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7bGV0IGk9e307aWYoZS5wcm90ZWN0ZWQpe2NvbnN0IHQ9dHIoZS5wcm90ZWN0ZWQpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGlzIGludmFsaWQiKX19aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Y29uc3Qgcj10LmZpbHRlcihCb29sZWFuKTtpZigwPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aClyZXR1cm4hMDtsZXQgaTtmb3IoY29uc3QgZSBvZiByKXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKGkmJjAhPT1pLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoaS5oYXMoZSkpcmV0dXJuITE7aS5hZGQoZSl9ZWxzZSBpPW5ldyBTZXQodCl9cmV0dXJuITB9KGksZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBhbmQgSldTIFVucHJvdGVjdGVkIEhlYWRlciBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBkaXNqb2ludCIpO2NvbnN0IG89ey4uLmksLi4uZS5oZWFkZXJ9LHM9ZnVuY3Rpb24oZSx0LG4scixpKXtpZih2b2lkIDAhPT1pLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2xldCBvO289dm9pZCAwIT09bj9uZXcgTWFwKFsuLi5PYmplY3QuZW50cmllcyhuKSwuLi50LmVudHJpZXMoKV0pOnQ7Zm9yKGNvbnN0IHQgb2Ygci5jcml0KXtpZighby5oYXModCkpdGhyb3cgbmV3IHNyKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBub3QgcmVjb2duaXplZCcpKTtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBtaXNzaW5nJykpO2lmKG8uZ2V0KHQpJiZ2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKSl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0oYXIsbmV3IE1hcChbWyJiNjQiLCEwXV0pLG51bGw9PW4/dm9pZCAwOm4uY3JpdCxpLG8pO2xldCBhPSEwO2lmKHMuaGFzKCJiNjQiKSYmKGE9aS5iNjQsImJvb2xlYW4iIT10eXBlb2YgYSkpdGhyb3cgbmV3IGFyKCdUaGUgImI2NCIgKGJhc2U2NHVybC1lbmNvZGUgcGF5bG9hZCkgSGVhZGVyIFBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbicpO2NvbnN0e2FsZzpjfT1vO2lmKCJzdHJpbmciIT10eXBlb2YgY3x8IWMpdGhyb3cgbmV3IGFyKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjb25zdCB1PW4mJigoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcignIicuY29uY2F0KGUsJyIgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkoImFsZ29yaXRobXMiLG4uYWxnb3JpdGhtcyk7aWYodSYmIXUuaGFzKGMpKXRocm93IG5ldyBvcignImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBub3QgYWxsb3dlZCcpO2lmKGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyIpfWVsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQmJiEoZS5wYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtsZXQgbD0hMTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9YXdhaXQgdChpLGUpLGw9ITApLEVyKGMsdCwidmVyaWZ5Iik7Y29uc3QgZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2NvbnN0IHI9dC5yZWR1Y2UoKChlLHQpPT57bGV0e2xlbmd0aDpufT10O3JldHVybiBlK259KSwwKSxpPW5ldyBVaW50OEFycmF5KHIpO2xldCBvPTA7cmV0dXJuIHQuZm9yRWFjaCgoZT0+e2kuc2V0KGUsbyksbys9ZS5sZW5ndGh9KSksaX0oUW4uZW5jb2RlKG51bGwhPT0ocj1lLnByb3RlY3RlZCkmJnZvaWQgMCE9PXI/cjoiIiksUW4uZW5jb2RlKCIuIiksInN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/UW4uZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkKSxoPXRyKGUuc2lnbmF0dXJlKTtpZighYXdhaXQgUnIoYyx0LGgsZCkpdGhyb3cgbmV3IGhyO2xldCBmO2Y9YT90cihlLnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZDtjb25zdCBwPXtwYXlsb2FkOmZ9O3JldHVybiB2b2lkIDAhPT1lLnByb3RlY3RlZCYmKHAucHJvdGVjdGVkSGVhZGVyPWkpLHZvaWQgMCE9PWUuaGVhZGVyJiYocC51bnByb3RlY3RlZEhlYWRlcj1lLmhlYWRlciksbD97Li4ucCxrZXk6dH06cH12YXIgQ3I9ZT0+TWF0aC5mbG9vcihlLmdldFRpbWUoKS8xZTMpO2NvbnN0IFByPTg2NDAwLERyPS9eKFxkK3xcZCtcLlxkKykgPyhzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpJC9pO3ZhciBJcj1lPT57Y29uc3QgdD1Eci5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7Y29uc3Qgbj1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCh0WzJdLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2VjIjpjYXNlInNlY3MiOmNhc2Uic2Vjb25kIjpjYXNlInNlY29uZHMiOmNhc2UicyI6cmV0dXJuIE1hdGgucm91bmQobik7Y2FzZSJtaW51dGUiOmNhc2UibWludXRlcyI6Y2FzZSJtaW4iOmNhc2UibWlucyI6Y2FzZSJtIjpyZXR1cm4gTWF0aC5yb3VuZCg2MCpuKTtjYXNlImhvdXIiOmNhc2UiaG91cnMiOmNhc2UiaHIiOmNhc2UiaHJzIjpjYXNlImgiOnJldHVybiBNYXRoLnJvdW5kKDM2MDAqbik7Y2FzZSJkYXkiOmNhc2UiZGF5cyI6Y2FzZSJkIjpyZXR1cm4gTWF0aC5yb3VuZChuKlByKTtjYXNlIndlZWsiOmNhc2Uid2Vla3MiOmNhc2UidyI6cmV0dXJuIE1hdGgucm91bmQoNjA0ODAwKm4pO2RlZmF1bHQ6cmV0dXJuIE1hdGgucm91bmQoMzE1NTc2MDAqbil9fTtjb25zdCBPcj1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKSxVcj0oZSx0KT0+InN0cmluZyI9PXR5cGVvZiBlP3QuaW5jbHVkZXMoZSk6ISFBcnJheS5pc0FycmF5KGUpJiZ0LnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KGUpKSk7YXN5bmMgZnVuY3Rpb24gTHIoZSx0LG4pe3ZhciByO2NvbnN0IGk9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT1lci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgYXIoIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6ciwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IGFyKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBBcih7cGF5bG9hZDppLHByb3RlY3RlZDpyLHNpZ25hdHVyZTpvfSx0LG4pLGM9e3BheWxvYWQ6YS5wYXlsb2FkLHByb3RlY3RlZEhlYWRlcjphLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLmMsa2V5OmEua2V5fTpjfShlLHQsbik7aWYoKG51bGw9PT0ocj1pLnByb3RlY3RlZEhlYWRlci5jcml0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5pbmNsdWRlcygiYjY0IikpJiYhMT09PWkucHJvdGVjdGVkSGVhZGVyLmI2NCl0aHJvdyBuZXcgY3IoIkpXVHMgTVVTVCBOT1QgdXNlIHVuZW5jb2RlZCBwYXlsb2FkIik7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdHt0eXA6cn09bjtpZihyJiYoInN0cmluZyIhPXR5cGVvZiBlLnR5cHx8T3IoZS50eXApIT09T3IocikpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAidHlwIiBKV1QgaGVhZGVyIHZhbHVlJywidHlwIiwiY2hlY2tfZmFpbGVkIik7bGV0IGk7dHJ5e2k9SlNPTi5wYXJzZShlci5kZWNvZGUodCkpfWNhdGNoKGUpe31pZighYnIoaSkpdGhyb3cgbmV3IGNyKCJKV1QgQ2xhaW1zIFNldCBtdXN0IGJlIGEgdG9wLWxldmVsIEpTT04gb2JqZWN0Iik7Y29uc3R7aXNzdWVyOm99PW47aWYobyYmIShBcnJheS5pc0FycmF5KG8pP286W29dKS5pbmNsdWRlcyhpLmlzcykpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7c3ViamVjdDpzfT1uO2lmKHMmJmkuc3ViIT09cyl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTtjb25zdHthdWRpZW5jZTphfT1uO2lmKGEmJiFVcihpLmF1ZCwic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO2xldCBjO3N3aXRjaCh0eXBlb2Ygbi5jbG9ja1RvbGVyYW5jZSl7Y2FzZSJzdHJpbmciOmM9SXIobi5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmM9bi5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6Yz0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfWNvbnN0e2N1cnJlbnREYXRlOnV9PW4sbD1Dcih1fHxuZXcgRGF0ZSk7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IHJyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmwrYyl0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgcnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWwtYyl0aHJvdyBuZXcgaXIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWwtaS5pYXQ7aWYoZS1jPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTpJcihuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IGlyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1jKXRocm93IG5ldyBycignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfShpLnByb3RlY3RlZEhlYWRlcixpLnBheWxvYWQsbikscz17cGF5bG9hZDpvLHByb3RlY3RlZEhlYWRlcjppLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLnMsa2V5Omkua2V5fTpzfWZ1bmN0aW9uIEhyKGUpe3JldHVybiBicihlKX1jbGFzcyBNcntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLl9jYWNoZWQ9bmV3IFdlYWtNYXAsIWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJkFycmF5LmlzQXJyYXkoZS5rZXlzKSYmZS5rZXlzLmV2ZXJ5KEhyKX0oZSkpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1hbGZvcm1lZCIpO3ZhciB0O3RoaXMuX2p3a3M9KHQ9ZSwiZnVuY3Rpb24iPT10eXBlb2Ygc3RydWN0dXJlZENsb25lP3N0cnVjdHVyZWRDbG9uZSh0KTpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSl9YXN5bmMgZ2V0S2V5KGUsdCl7Y29uc3R7YWxnOm4sa2lkOnJ9PXsuLi5lLC4uLnQuaGVhZGVyfSxpPWZ1bmN0aW9uKGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIGUmJmUuc2xpY2UoMCwyKSl7Y2FzZSJSUyI6Y2FzZSJQUyI6cmV0dXJuIlJTQSI7Y2FzZSJFUyI6cmV0dXJuIkVDIjtjYXNlIkVkIjpyZXR1cm4iT0tQIjtkZWZhdWx0OnRocm93IG5ldyBzcignVW5zdXBwb3J0ZWQgImFsZyIgdmFsdWUgZm9yIGEgSlNPTiBXZWIgS2V5IFNldCcpfX0obiksbz10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9aT09PWUua3R5O2lmKHQmJiJzdHJpbmciPT10eXBlb2YgciYmKHQ9cj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1uPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PW4mJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKG4pe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6cyxsZW5ndGg6YX09bztpZigwPT09YSl0aHJvdyBuZXcgbHI7aWYoMSE9PWEpdGhyb3cgbmV3IGRyO2NvbnN0IGM9dGhpcy5fY2FjaGVkLmdldChzKXx8dGhpcy5fY2FjaGVkLnNldChzLHt9KS5nZXQocyk7aWYodm9pZCAwPT09Y1tuXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoIWJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPW58fChuPSEwIT09ZS5leHQpLG4/a3Ioey4uLmUsYWxnOnQsZXh0OiExfSk6dHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHNyKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIGtyKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ucyxleHQ6ITB9LG4pO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgdXIoIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7Y1tuXT1lfXJldHVybiBjW25dfX12YXIgcXI9e2V4cG9ydHM6e319LGpyPXtleHBvcnRzOnt9fSxOcj1SKGpuKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciBuPU5yLHI9bi5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooaShuLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkocixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1yKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9pLmZpbGwodCxuKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0oanIsanIuZXhwb3J0cyk7dmFyIHhyPTY1NTM2LEtyPTQyOTQ5NjcyOTU7dmFyIEJyPWpyLmV4cG9ydHMuQnVmZmVyLEpyPUUuY3J5cHRvfHxFLm1zQ3J5cHRvO0pyJiZKci5nZXRSYW5kb21WYWx1ZXM/cXIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+S3IpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbj1Cci5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT54cilmb3IodmFyIHI9MDtyPGU7cis9eHIpSnIuZ2V0UmFuZG9tVmFsdWVzKG4uc2xpY2UocixyK3hyKSk7ZWxzZSBKci5nZXRSYW5kb21WYWx1ZXMobik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHZlLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06cXIuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIEZyPXFyLmV4cG9ydHM7Y2xhc3MgV3J7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBWbi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gVm4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gWnQuZnJvbShYbigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBGcihlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyl7cmV0dXJuIExyKGUsKGE9e2tleXM6W3RdfSxNci5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IE1yKGEpKSkse2FsZ29yaXRobXM6bixhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOnMsaXNzdWVyOmksc3ViamVjdDpvfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+e3ZhciB0O3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUNSWVBUTy1VVElMUy1WSi1JVjAxIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5yZWFzb24pJiZ2b2lkIDAhPT10P3Q6SlNPTi5zdHJpbmdpZnkoZSksIiIuY29uY2F0KG51bGw9PWU/dm9pZCAwOmUuY29kZSwiICIpLmNvbmNhdChudWxsPT1lP3ZvaWQgMDplLmNsYWltKSkpfSkpO3ZhciBhfX1vcmlnaW4seS5TZXNzaW9uU3RvcmFnZTtjbGFzcyB6cntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHQpe3ZhciBuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYobnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnBlcmlvZGljVG9rZW5SZWZyZXNoKXtjb25zdCBuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKG4ucmVmcmVzaF90b2tlbil7Y29uc3Qgcj1wYXJzZUludChuLmV4cGlyZXNfaW4pLG89c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKHI8PTEwP3I6ci0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkobykpfX19KSl9Z2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKT9KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTotMX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXJldHVybiB2b2lkIGNsZWFyVGltZW91dCh0KTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpOy0xIT09ZSYmY2xlYXJUaW1lb3V0KGUpfSkpfX1jbGFzcyBZcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpLHRoaXMuX3NwYUhlbHBlcj10LHRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nPSExfWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIsSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1NQUlOX1RIUkVBRF9DTElFTlQtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYik7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCk7cmV0dXJuIGUmJih5aWVsZCB0aGlzLnJlcXVlc3RDdXN0b21HcmFudChlLHQpKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX0pKX1yZXRyeUZhaWxlZFJlcXVlc3RzKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT10Lmh0dHBDbGllbnQsbj10LnJlcXVlc3RDb25maWcscj10LmlzSHR0cEhhbmRsZXJFbmFibGVkLGk9dC5odHRwRXJyb3JDYWxsYmFjayxvPXQuaHR0cEZpbmlzaENhbGxiYWNrO3lpZWxkIHF0LnVudGlsKCgoKT0+IXRoaXMuX2lzVG9rZW5SZWZyZXNoaW5nKSk7dHJ5e2NvbnN0IHQ9eWllbGQgZS5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUodCl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX0pKX1odHRwUmVxdWVzdCh0LG4scixpLG8scyl7dmFyIGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSExO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGE9eWllbGQgbnVsbD09ZD92b2lkIDA6ZC5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihlJiYobnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4udXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha31yZXR1cm4gbD90LnJlcXVlc3QobikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSx1LGw7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpKXtpZih0aGlzLl9pc1Rva2VuUmVmcmVzaGluZylyZXR1cm4gdGhpcy5yZXRyeUZhaWxlZFJlcXVlc3RzKHtlbmFibGVSZXRyaWV2aW5nU2lnbk91dFVSTEZyb21TZXNzaW9uOnMsaHR0cENsaWVudDp0LGh0dHBFcnJvckNhbGxiYWNrOmksaHR0cEZpbmlzaENhbGxiYWNrOm8saXNIdHRwSGFuZGxlckVuYWJsZWQ6cixyZXF1ZXN0Q29uZmlnOm59KTtsZXQgZTt0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMDt0cnl7ZT15aWVsZCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbihzKSx0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMX1jYXRjaChlKXt0aHJvdyB0aGlzLl9pc1Rva2VuUmVmcmVzaGluZz0hMSxyJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLVNFMDEiLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT11P3U6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGw9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bD9sOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSl0cnl7Y29uc3QgZT15aWVsZCB0LnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGEpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChhKX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWh0dHBSZXF1ZXN0QWxsKHQsbixyLGksbyl7dmFyIHMsYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITA7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBuIG9mWy4uLm51bGwhPT0oYT1udWxsPT09KHM9eWllbGQgZCl8fHZvaWQgMD09PXM/dm9pZCAwOnMucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYobiYmKG51bGw9PT0odT1lLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChuKSkpe3Q9ITA7YnJlYWt9aWYoIXQpe2w9ITE7YnJlYWt9fWNvbnN0IGg9W107aWYobClyZXR1cm4gdC5mb3JFYWNoKChlPT57aC5wdXNoKG4ucmVxdWVzdChlKSl9KSksKG51bGw9PW4/dm9pZCAwOm4uYWxsKSYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcyxhLHU7aWYoNDAxPT09KG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09cz92b2lkIDA6cy5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgczt0cnl7cz15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1TRTAxIixudWxsIT09KGE9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09YT9hOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PXU/dToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKHMpcmV0dXJuIG4uYWxsJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpfXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpO3Rocm93IG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbih0LG4scixpLG8pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHMuc3RvcmFnZT09PXkuQnJvd3Nlck1lbW9yeSYmcy5lbmFibGVQS0NFJiZuKXtjb25zdCBlPXF0LmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBzLnN0b3JhZ2U9PT15LldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIikudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5zdG9yYWdlIT09eS5XZWJXb3JrZXI/KHF0LnNldFNpZ25PdXRVUkwoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0U2lnbk91dFVSTCgpKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyKXt2YXIgaTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHF0LmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSlyZXR1cm4geWllbGQgci5yZWNlaXZlUHJvbXB0Tm9uZVJlc3BvbnNlKCksUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7Y29uc3Qgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxzPW51bGw9PT0oaT1udWxsPT1vP3ZvaWQgMDpvLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKTt0cnl7Y29uc3QgZT15aWVsZCB0KCk7cy5zcmM9ZX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIG5ldyBQcm9taXNlKCgodCxyKT0+e2NvbnN0IGk9c2V0VGltZW91dCgoKCk9Pnt0KCExKX0pLDFlNCksbz1zPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsYSxjLHU7Y29uc3QgbD1zLmRhdGE7ImNoZWNrX3Nlc3Npb25fc2lnbmVkX291dCI9PShudWxsPT1sP3ZvaWQgMDpsLnR5cGUpJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLGNsZWFyVGltZW91dChpKSx0KCExKSksImNoZWNrX3Nlc3Npb25fc2lnbmVkX2luIj09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJihudWxsPT09KGU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jb2RlKSYmbihudWxsPT09KGE9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09YT92b2lkIDA6YS5jb2RlLG51bGw9PT0oYz1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnNlc3Npb25TdGF0ZSxudWxsPT09KHU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGF0ZSkudGhlbigoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSx0KGUpfSkpLmNhdGNoKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoZSl9KSkuZmluYWxseSgoKCk9PntjbGVhclRpbWVvdXQoaSl9KSl9KSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pfSkpfSkpfWhhbmRsZVNpZ25Jbih0LG4scil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoeWllbGQgdCgpKXJldHVybiBQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtpZihlLnN0b3JhZ2UhPT15LldlYldvcmtlciYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSlyZXR1cm4gdGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLGUuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZuKCksUHJvbWlzZS5yZXNvbHZlKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y29uc3QgaT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChTKTtpZihpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Rocm93IGUuc2VhcmNoUGFyYW1zLmRlbGV0ZShfKSxlLnNlYXJjaFBhcmFtcy5kZWxldGUoUyksaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxkb2N1bWVudC50aXRsZSxlLnRvU3RyaW5nKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItU0ktU0UwMSIsaSxudWxsIT1vP286IiIpfWlmKGUuc3RvcmFnZT09PXkuV2ViV29ya2VyJiZyKXtjb25zdCBlPXlpZWxkIHIoKTtpZihlKXJldHVybiBlfX0pKX1hdHRhY2hUb2tlblRvUmVxdWVzdENvbmZpZyh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9T2JqZWN0LmFzc2lnbih7YXR0YWNoVG9rZW46ITB9LHQpO2UuYXR0YWNoVG9rZW4mJihlLnNob3VsZEF0dGFjaElEUEFjY2Vzc1Rva2VuP3QuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KHlpZWxkIHRoaXMuZ2V0SURQQWNjZXNzVG9rZW4oKSl9KTp0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246IkJlYXJlciAiLmNvbmNhdCh5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfSkpfWdldEJhc2ljVXNlckluZm8oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Z2V0RGVjb2RlZElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldERlY29kZWRJRFBJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXRDcnlwdG9IZWxwZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRDcnlwdG9IZWxwZXIoKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SURUb2tlbigpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX1nZXRBY2Nlc3NUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCl9KSl9Z2V0SURQQWNjZXNzVG9rZW4oKXt2YXIgdDtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmFjY2Vzc190b2tlbn0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWlzQXV0aGVudGljYXRlZCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpfSkpfX0odD0+e2NvbnN0IG49c2VsZjtsZXQgcjtuLm9ubWVzc2FnZT1uPT57bGV0e2RhdGE6YSxwb3J0czp1fT1uO3JldHVybiBlKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixsLGQsaCxmLHA7Y29uc3QgeT11WzBdO2lmKGEudHlwZT09PXZ8fHIpc3dpdGNoKGEudHlwZSl7Y2FzZSB2OnRyeXtjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sYS5kYXRhKTtyPXlpZWxkKCh0LG4pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBIdCxpPW5ldyBXcixvPW5ldyBnKHIsaSk7eWllbGQgby5pbml0aWFsaXplKHQpO2NvbnN0IHM9bmV3IHpyKG8pLGE9bihvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSx1PUx0LmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXU/dm9pZCAwOnUuaW5pdCkmJih5aWVsZCB1LmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIGEuYXR0YWNoVG9rZW5Ub1JlcXVlc3RDb25maWcodCl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShuLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpyLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09YT92b2lkIDA6YS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6ci5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGw9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zZXNzaW9uU3RhdGUsbnVsbD09PShkPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucGtjZSxudWxsPT09KGg9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zdGF0ZSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijp7Y29uc3QgZT1hLmRhdGEsdD1udWxsPT1lP3ZvaWQgMDplLmRhdGE7aWYoITA9PT0obnVsbD09PShwPW51bGw9PT0oZj1hLmRhdGEpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmRhdGEpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmZvcm1EYXRhKSl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0IGUgaW4gdCkiZm9ybURhdGEiIT09ZSYmbi5hcHBlbmQoZSx0W2VdKTtlLmRhdGE9bn1yLmh0dHBSZXF1ZXN0KGUpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVha31jYXNlImh0dHAtcmVxdWVzdC1hbGwiOnIuaHR0cFJlcXVlc3RBbGwoYS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnNpZ25PdXQoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZXF1ZXN0LWN1c3RvbS1ncmFudCI6ci5yZXF1ZXN0Q3VzdG9tR3JhbnQoYS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpyLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1iYXNpYy11c2VyLWluZm8iOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1jcnlwdG8taGVscGVyIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q3J5cHRvSGVscGVyKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2lkX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOnIuZW5hYmxlSHR0cEhhbmRsZXIoKSx5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6ci5kaXNhYmxlSHR0cEhhbmRsZXIoKSx5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnJlZnJlc2hBY2Nlc3NUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShyLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2V0U2Vzc2lvblN0YXRlKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnVwZGF0ZUNvbmZpZyhudWxsPT1hP3ZvaWQgMDphLmRhdGEpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT15fHx5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGMoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIiwiVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgIi5jb25jYXQoYS50eXBlLCIsIGlzIGludmFsaWQuIikpKSl9ZWxzZSB5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGMoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpfTtjb25zdCBpPSgpPT57bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0sbz1lPT57bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scz0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3QtZmluaXNoIn0pfX0pKCgoZSx0KT0+bmV3IFlyKGUsdCkpKTtyZXR1cm57fX0oKTsKCg==",$G=null,eX=!1,function(e){return tX=tX||_G(qG,$G,eX),new Worker(tX,e)});const nX="init",lX="sign-out",oX="http-request",cX="http-request-all",aX="request-custom-grant",rX="revoke-access-token",dX="request-start",sX="request-success",uX="request-finish",ZX="get-oidc-service-endpoints",hX="get-basic-user-info",bX="get-decoded-id-token",mX="get-crypto-helper",pX="enable_http_handler",IX="disable_http_handler",gX="get_auth_url",yX="request_get_token",GX="is_authenticated",XX="get_sign_out_url",WX="refresh_access-token",CX="set_session_state",VX="start_auto_refresh_token",RX="update_config",SX="get_id_token",vX="check_session_signed_in",fX="check_session_signed_out",YX="get_config_data",KX="set_session_state_from_iframe";var NX,JX;e.Storage=void 0,(NX=e.Storage||(e.Storage={})).LocalStorage="localStorage",NX.SessionStorage="sessionStorage",NX.WebWorker="webWorker",NX.BrowserMemory="browserMemory",e.Hooks=void 0,(JX=e.Hooks||(e.Hooks={})).SignIn="sign-in",JX.SignOut="sign-out",JX.Initialize="initialize",JX.HttpRequestStart="http-request-start",JX.HttpRequestFinish="http-request-finish",JX.HttpRequestError="http-request-error",JX.HttpRequestSuccess="http-request-success",JX.RevokeAccessToken="revoke-access-token",JX.CustomGrant="custom-grant",JX.SignOutFailed="sign-out-failed";const HX="rpIFrame",LX="promptNoneIFrame",kX="Y2hlY2tTZXNzaW9u",AX="sign-in-silently",UX="initialized-silent-sign-in",TX="promptNoneRequestSent",BX="error",FX="error_description",wX="custom_grant_config",zX="state",xX="Access token is invalid";class PX{constructor(e,t){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=t,this._isTokenRefreshing=!1}enableHttpHandler(e){(null==e?void 0:e.enableHandler)&&e.enableHandler()}disableHttpHandler(e){(null==e?void 0:e.disableHandler)&&e.disableHandler()}initializeSessionManger(e,t,i,n,l){var o,c,a;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(c=e.checkSessionInterval)&&void 0!==c?c:3,null!==(a=e.sessionRefreshInterval)&&void 0!==a?a:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return HG(this,void 0,void 0,(function*(){let o=!0,c=!1;if(null==e?void 0:e.tokenEndpoint){o=!1;for(const t of[...null!==(n=null===(i=yield this._dataLayer.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],e.baseUrl])if(t&&(null===(l=e.tokenEndpoint)||void 0===l?void 0:l.startsWith(t))){c=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter(wX,JSON.stringify(e)),o||c?this._authenticationClient.requestCustomGrant(e).then((i=>HG(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):i})))).catch((e=>Promise.reject(e))):Promise.reject(new xG("SPA-MAIN_THREAD_CLIENT-RCG-IV01","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))}))}getCustomGrantConfigData(){return HG(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter(wX);return e?JSON.parse(e):null}))}refreshAccessToken(e){return HG(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const t=yield this.getCustomGrantConfigData();return t&&(yield this.requestCustomGrant(t,e)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(e){return Promise.reject(e)}}))}retryFailedRequests(e){return HG(this,void 0,void 0,(function*(){const t=e.httpClient,i=e.requestConfig,n=e.isHttpHandlerEnabled,l=e.httpErrorCallback,o=e.httpFinishCallback;yield MX.until((()=>!this._isTokenRefreshing));try{const e=yield t.request(i);return Promise.resolve(e)}catch(e){return n&&("function"==typeof l&&(yield l(e)),"function"==typeof o&&o()),Promise.reject(e)}}))}httpRequest(e,t,i,n,l,o){var c,a;return HG(this,void 0,void 0,(function*(){let r=!1;const d=yield this._dataLayer.getConfigData();for(const e of[...null!==(c=yield null==d?void 0:d.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(e&&(null===(a=null==t?void 0:t.url)||void 0===a?void 0:a.startsWith(e))){r=!0;break}return r?e.request(t).then((e=>Promise.resolve(e))).catch((c=>HG(this,void 0,void 0,(function*(){var a,r,d;if(401===(null===(a=null==c?void 0:c.response)||void 0===a?void 0:a.status)||!(null==c?void 0:c.response)){if(this._isTokenRefreshing)return this.retryFailedRequests({enableRetrievingSignOutURLFromSession:o,httpClient:e,httpErrorCallback:n,httpFinishCallback:l,isHttpHandlerEnabled:i,requestConfig:t});let a;this._isTokenRefreshing=!0;try{a=yield this.refreshAccessToken(o),this._isTokenRefreshing=!1}catch(e){throw this._isTokenRefreshing=!1,i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},c),{code:xX}))),"function"==typeof l&&l()),new xG("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==e?void 0:e.name)&&void 0!==r?r:"Refresh token request failed.",null!==(d=null==e?void 0:e.message)&&void 0!==d?d:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(a)try{const i=yield e.request(t);return Promise.resolve(i)}catch(e){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}}return i&&("function"==typeof n&&(yield n(c)),"function"==typeof l&&l()),Promise.reject(c)})))):Promise.reject(new xG("SPA-AUTH_HELPER-HR-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))}))}httpRequestAll(e,t,i,n,l){var o,c,a;return HG(this,void 0,void 0,(function*(){let r=!0;const d=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(c=null===(o=yield d)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(i&&(null===(a=t.url)||void 0===a?void 0:a.startsWith(i))){e=!0;break}if(!e){r=!1;break}}const s=[];if(r)return e.forEach((e=>{s.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>HG(this,void 0,void 0,(function*(){var o,c,a;if(401===(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.status)||!(null==e?void 0:e.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(t){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},e),{code:xX}))),"function"==typeof l&&l()),new xG("SPA-AUTH_HELPER-HRA-SE01",null!==(c=null==t?void 0:t.name)&&void 0!==c?c:"Refresh token request failed.",null!==(a=null==t?void 0:t.message)&&void 0!==a?a:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>HG(this,void 0,void 0,(function*(){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new xG("SPA-AUTH_HELPER-HRA-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")}))}requestAccessToken(t,i,n,l,o){return HG(this,void 0,void 0,(function*(){const c=yield this._dataLayer.getConfigData();if(c.storage===e.Storage.BrowserMemory&&c.enablePKCE&&i){const e=MX.getPKCE(PG.extractPKCEKeyFromStateParam(i));yield this._authenticationClient.setPKCECode(PG.extractPKCEKeyFromStateParam(i),e)}else c.storage===e.Storage.WebWorker&&l&&(yield this._authenticationClient.setPKCECode(l,null!=o?o:""));return t?this._authenticationClient.requestAccessToken(t,null!=i?i:"",null!=o?o:"").then((()=>HG(this,void 0,void 0,(function*(){return c.storage!==e.Storage.WebWorker?(MX.setSignOutURL(yield this._authenticationClient.getSignOutURL()),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&c.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new xG("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i){var n;return HG(this,void 0,void 0,(function*(){if(MX.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const l=document.getElementById(HX),o=null===(n=null==l?void 0:l.contentDocument)||void 0===n?void 0:n.getElementById(LX);try{const t=yield e();o.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),l=o=>HG(this,void 0,void 0,(function*(){var c,a,r,d;const s=o.data;(null==s?void 0:s.type)==fX&&(window.removeEventListener("message",l),clearTimeout(n),e(!1)),(null==s?void 0:s.type)==vX&&(null===(c=null==s?void 0:s.data)||void 0===c?void 0:c.code)&&t(null===(a=null==s?void 0:s.data)||void 0===a?void 0:a.code,null===(r=null==s?void 0:s.data)||void 0===r?void 0:r.sessionState,null===(d=null==s?void 0:s.data)||void 0===d?void 0:d.state).then((t=>{window.removeEventListener("message",l),e(t)})).catch((e=>{window.removeEventListener("message",l),i(e)})).finally((()=>{clearTimeout(n)}))}));window.addEventListener("message",l)}))}))}handleSignIn(t,i,n){return HG(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(l.storage!==e.Storage.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&i(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const o=new URL(window.location.href).searchParams.get(BX),c=new URL(window.location.href).searchParams.get(FX);if(o){const e=new URL(window.location.href);throw e.searchParams.delete(BX),e.searchParams.delete(FX),history.pushState(null,document.title,e.toString()),new xG("SPA-AUTH_HELPER-SI-SE01",o,null!=c?c:"")}if(l.storage===e.Storage.WebWorker&&n){const e=yield n();if(e)return e}}))}attachTokenToRequestConfig(e){return HG(this,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getAccessToken())}))}))}getBasicUserInfo(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return HG(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData())||void 0===e?void 0:e.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return HG(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class jX{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){var t;return HG(this,void 0,void 0,(function*(){if(null===(t=yield this._dataLayer.getConfigData())||void 0===t?void 0:t.periodicTokenRefresh){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const i=parseInt(t.expires_in),n=setTimeout((()=>HG(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(i<=10?i:i-10));yield this._dataLayer.setTemporaryDataParameter(kG,JSON.stringify(n))}}}))}getRefreshTimeoutTimer(){return HG(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(kG))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(kG)):-1}))}clearRefreshTokenTimeout(e){return HG(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}class QX{constructor(){}static generateSuccessMessage(e){return{blob:(null==e?void 0:e.data)instanceof Blob?null==e?void 0:e.data:null,data:JSON.stringify(null!=e?e:""),success:!0}}static generateFailureMessage(e){return(null==e?void 0:e.toJSON)&&delete e.toJSON,{error:JSON.stringify(null!=e?e:""),success:!1}}}class MX{constructor(){}static removeAuthorizationCode(){const e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}static getPKCE(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}static setPKCE(e,t){sessionStorage.setItem(e,t)}static setSignOutURL(e){sessionStorage.setItem(BG,e)}static getSignOutURL(){var e;return null!==(e=sessionStorage.getItem(BG))&&void 0!==e?e:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!MX.hasErrorInURL()&&!MX.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return MX.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!MX.hasErrorInURL()&&!MX.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem(UX),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return HG(this,void 0,void 0,(function*(){if(OG.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield OG.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(OG.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get(BX),i=e.searchParams.get(FX),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=i?i:"",error:null!=t?t:""}}return!1}static isSilentStatePresentInURL(){var e;const t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes(AX))&&void 0!==e&&e}static hasAuthSearchParamsInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return/[?&]code=[^&]+/.test(e)}static hasErrorInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const t=new URL(e);return!!t.searchParams.get(BX)&&t.searchParams.get(zX)!==FG}static canSendPromptNoneRequest(){const e=sessionStorage.getItem(TX);return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem(TX,JSON.stringify(e))}static waitTillPageRedirect(e){return HG(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}MX.until=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;const i=n=>e()?n():setTimeout((()=>i(n)),t);return new Promise(i)};const EX=(()=>{let t,i,n,l,o,c,a,r,d,s,u;const Z=(e,a,r,d,s,Z,b)=>{t=e,i=a,n=r,l=d,o=Z,c=s,u=b,l>-1&&h(),c>-1&&(s=setInterval((()=>{p()}),1e3*c))},h=()=>HG(void 0,void 0,void 0,(function*(){var e;if(!i||!t||!o)return;const c="opIFrame";const a=document.getElementById(HX);(null===(e=null==a?void 0:a.contentDocument)||void 0===e?void 0:e.getElementById(c)).src=i+"?client_id="+t+"&redirect_uri="+o,r=setInterval((function(){var e;return HG(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n="".concat(t," ").concat(l),o=document.getElementById(HX),a=(null===(e=null==o?void 0:o.contentDocument)||void 0===e?void 0:e.getElementById(c)).contentWindow;null==a||a.postMessage(n,i)}}))}),1e3*l),m()})),b=()=>{clearInterval(r),clearInterval(undefined)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var t;return HG(this,void 0,void 0,(function*(){const n=i;!n||(null==n?void 0:n.indexOf(e.origin))<0||(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===KX||"unchanged"===e.data||("error"===e.data?window.location.href=yield a():"changed"===e.data&&p())}))}),!1)},p=()=>HG(void 0,void 0,void 0,(function*(){var t;const i=document.getElementById(HX),n=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(LX);if(MX.canSendPromptNoneRequest()){MX.setPromptNoneRequestSent(!0);const t=e=>{var i,n,l;(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)===KX&&(s(null!==(l=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",t))};d!==e.Storage.BrowserMemory&&d!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const i=yield u({prompt:"none",responseMode:"query",state:kX});n.src=i}})),I=t=>HG(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get(zX),o=new URL(window.location.href).searchParams.get(TG),c=window.parent.parent;if(null!==l&&(l.includes(kX)||l.includes(AX))){const r=new URL(window.location.href).searchParams.get("code");if(null!==r&&0!==r.length){if(l.includes(AX)){const e={data:{code:r,sessionState:null!=o?o:"",state:l},type:vX};return sessionStorage.setItem(UX,"false"),c.postMessage(e,c.origin),MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}const a=new URL(window.location.href).searchParams.get("session_state");if(d===e.Storage.LocalStorage||d===e.Storage.SessionStorage)t&&(yield t(a));else{const e={data:null!=a?a:"",type:KX};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(e)}return MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}{if(l.includes(AX)){const e={type:fX};return window.parent.parent.postMessage(e,c.origin),MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}MX.setPromptNoneRequestSent(!1);const e=yield a();return yield OG.clearUserSessionData(),c.location.href=e,window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>HG(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id",HX),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById(HX);const c=null==l?void 0:l.contentDocument,a=null==c?void 0:c.createElement("iframe");a&&(a.setAttribute("id","opIFrame"),a.style.display="none");const r=null==c?void 0:c.createElement("iframe");r&&(r.setAttribute("id",LX),r.style.display="none"),a&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(a)),r&&(null===(n=null===(i=null==l?void 0:l.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(r)),o=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(l),a=e,d=t,s=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:Z,receivePromptNoneResponse:I,reset:b}}))})();var DX={exports:{}},OX=function(e,t){return function(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];return e.apply(t,i)}},_X=OX,qX=Object.prototype.toString;function $X(e){return Array.isArray(e)}function eW(e){return void 0===e}function tW(e){return"[object ArrayBuffer]"===qX.call(e)}function iW(e){return null!==e&&"object"==typeof e}function nW(e){if("[object Object]"!==qX.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function lW(e){return"[object Function]"===qX.call(e)}function oW(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),$X(e))for(var i=0,n=e.length;i<n;i++)t.call(null,e[i],i,e);else for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&t.call(null,e[l],l,e)}var cW={isArray:$X,isArrayBuffer:tW,isBuffer:function(e){return null!==e&&!eW(e)&&null!==e.constructor&&!eW(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===qX.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&tW(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:iW,isPlainObject:nW,isUndefined:eW,isDate:function(e){return"[object Date]"===qX.call(e)},isFile:function(e){return"[object File]"===qX.call(e)},isBlob:function(e){return"[object Blob]"===qX.call(e)},isFunction:lW,isStream:function(e){return iW(e)&&lW(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===qX.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:oW,merge:function e(){var t={};function i(i,n){nW(t[n])&&nW(i)?t[n]=e(t[n],i):nW(i)?t[n]=e({},i):$X(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)oW(arguments[n],i);return t},extend:function(e,t,i){return oW(t,(function(t,n){e[n]=i&&"function"==typeof t?_X(t,i):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}},aW=cW;function rW(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var dW=function(e,t,i){if(!t)return e;var n;if(i)n=i(t);else if(aW.isURLSearchParams(t))n=t.toString();else{var l=[];aW.forEach(t,(function(e,t){null!=e&&(aW.isArray(e)?t+="[]":e=[e],aW.forEach(e,(function(e){aW.isDate(e)?e=e.toISOString():aW.isObject(e)&&(e=JSON.stringify(e)),l.push(rW(t)+"="+rW(e))})))})),n=l.join("&")}if(n){var o=e.indexOf("#");-1!==o&&(e=e.slice(0,o)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e},sW=cW;function uW(){this.handlers=[]}uW.prototype.use=function(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},uW.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},uW.prototype.forEach=function(e){sW.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var ZW=uW,hW="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function bW(){throw new Error("setTimeout has not been defined")}function mW(){throw new Error("clearTimeout has not been defined")}var pW=bW,IW=mW;function gW(e){if(pW===setTimeout)return setTimeout(e,0);if((pW===bW||!pW)&&setTimeout)return pW=setTimeout,setTimeout(e,0);try{return pW(e,0)}catch(t){try{return pW.call(null,e,0)}catch(t){return pW.call(this,e,0)}}}"function"==typeof hW.setTimeout&&(pW=setTimeout),"function"==typeof hW.clearTimeout&&(IW=clearTimeout);var yW,GW=[],XW=!1,WW=-1;function CW(){XW&&yW&&(XW=!1,yW.length?GW=yW.concat(GW):WW=-1,GW.length&&VW())}function VW(){if(!XW){var e=gW(CW);XW=!0;for(var t=GW.length;t;){for(yW=GW,GW=[];++WW<t;)yW&&yW[WW].run();WW=-1,t=GW.length}yW=null,XW=!1,function(e){if(IW===clearTimeout)return clearTimeout(e);if((IW===mW||!IW)&&clearTimeout)return IW=clearTimeout,clearTimeout(e);try{IW(e)}catch(t){try{return IW.call(null,e)}catch(t){return IW.call(this,e)}}}(e)}}function RW(e,t){this.fun=e,this.array=t}RW.prototype.run=function(){this.fun.apply(null,this.array)};function SW(){}var vW=SW,fW=SW,YW=SW,KW=SW,NW=SW,JW=SW,HW=SW;var LW=hW.performance||{},kW=LW.now||LW.mozNow||LW.msNow||LW.oNow||LW.webkitNow||function(){return(new Date).getTime()};var AW=new Date;var UW={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];GW.push(new RW(e,t)),1!==GW.length||XW||gW(VW)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:vW,addListener:fW,once:YW,off:KW,removeListener:NW,removeAllListeners:JW,emit:HW,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*kW.call(LW),i=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(i-=e[0],(n-=e[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-AW)/1e3}},TW=UW,BW=cW,FW=function(e,t,i,n,l){return e.config=t,i&&(e.code=i),e.request=n,e.response=l,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e},wW={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},zW=FW,xW=function(e,t,i,n,l){var o=new Error(e);return zW(o,t,i,n,l)},PW=xW,jW=cW,QW=jW.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var c=[];c.push(e+"="+encodeURIComponent(t)),jW.isNumber(i)&&c.push("expires="+new Date(i).toGMTString()),jW.isString(n)&&c.push("path="+n),jW.isString(l)&&c.push("domain="+l),!0===o&&c.push("secure"),document.cookie=c.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},MW=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},EW=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e},DW=cW,OW=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],_W=cW,qW=_W.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(e){var n=e;return t&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=n(window.location.href),function(t){var i=_W.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0};function $W(e){this.message=e}$W.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},$W.prototype.__CANCEL__=!0;var eC=$W,tC=cW,iC=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(PW("Request failed with status code "+i.status,i.config,null,i.request,i)):e(i)},nC=QW,lC=dW,oC=function(e,t){return e&&!MW(t)?EW(e,t):t},cC=function(e){var t,i,n,l={};return e?(DW.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=DW.trim(e.substr(0,n)).toLowerCase(),i=DW.trim(e.substr(n+1)),t){if(l[t]&&OW.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},aC=qW,rC=xW,dC=wW,sC=eC,uC=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,c=e.responseType;function a(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}tC.isFormData(l)&&delete o["Content-Type"];var r=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",s=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(d+":"+s)}var u=oC(e.baseURL,e.url);function Z(){if(r){var n="getAllResponseHeaders"in r?cC(r.getAllResponseHeaders()):null,l={data:c&&"text"!==c&&"json"!==c?r.response:r.responseText,status:r.status,statusText:r.statusText,headers:n,config:e,request:r};iC((function(e){t(e),a()}),(function(e){i(e),a()}),l),r=null}}if(r.open(e.method.toUpperCase(),lC(u,e.params,e.paramsSerializer),!0),r.timeout=e.timeout,"onloadend"in r?r.onloadend=Z:r.onreadystatechange=function(){r&&4===r.readyState&&(0!==r.status||r.responseURL&&0===r.responseURL.indexOf("file:"))&&setTimeout(Z)},r.onabort=function(){r&&(i(rC("Request aborted",e,"ECONNABORTED",r)),r=null)},r.onerror=function(){i(rC("Network Error",e,null,r)),r=null},r.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||dC;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(rC(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},tC.isStandardBrowserEnv()){var h=(e.withCredentials||aC(u))&&e.xsrfCookieName?nC.read(e.xsrfCookieName):void 0;h&&(o[e.xsrfHeaderName]=h)}"setRequestHeader"in r&&tC.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:r.setRequestHeader(t,e)})),tC.isUndefined(e.withCredentials)||(r.withCredentials=!!e.withCredentials),c&&"json"!==c&&(r.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&r.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&r.upload&&r.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(e){r&&(i(!e||e&&e.type?new sC("canceled"):e),r.abort(),r=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),l||(l=null),r.send(l)}))},ZC=cW,hC=function(e,t){BW.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},bC=FW,mC={"Content-Type":"application/x-www-form-urlencoded"};function pC(e,t){!ZC.isUndefined(e)&&ZC.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var IC,gC={transitional:wW,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==TW&&"[object process]"===Object.prototype.toString.call(TW))&&(IC=uC),IC),transformRequest:[function(e,t){return hC(t,"Accept"),hC(t,"Content-Type"),ZC.isFormData(e)||ZC.isArrayBuffer(e)||ZC.isBuffer(e)||ZC.isStream(e)||ZC.isFile(e)||ZC.isBlob(e)?e:ZC.isArrayBufferView(e)?e.buffer:ZC.isURLSearchParams(e)?(pC(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):ZC.isObject(e)||t&&"application/json"===t["Content-Type"]?(pC(t,"application/json"),function(e,t,i){if(ZC.isString(e))try{return(t||JSON.parse)(e),ZC.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||gC.transitional,i=t&&t.silentJSONParsing,n=t&&t.forcedJSONParsing,l=!i&&"json"===this.responseType;if(l||n&&ZC.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(l){if("SyntaxError"===e.name)throw bC(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};ZC.forEach(["delete","get","head"],(function(e){gC.headers[e]={}})),ZC.forEach(["post","put","patch"],(function(e){gC.headers[e]=ZC.merge(mC)}));var yC=gC,GC=cW,XC=yC,WC=function(e){return!(!e||!e.__CANCEL__)},CC=cW,VC=function(e,t,i){var n=this||XC;return GC.forEach(i,(function(i){e=i.call(n,e,t)})),e},RC=WC,SC=yC,vC=eC;function fC(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new vC("canceled")}var YC=cW,KC=function(e,t){t=t||{};var i={};function n(e,t){return YC.isPlainObject(e)&&YC.isPlainObject(t)?YC.merge(e,t):YC.isPlainObject(t)?YC.merge({},t):YC.isArray(t)?t.slice():t}function l(i){return YC.isUndefined(t[i])?YC.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!YC.isUndefined(t[e]))return n(void 0,t[e])}function c(i){return YC.isUndefined(t[i])?YC.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function a(i){return i in t?n(e[i],t[i]):i in e?n(void 0,e[i]):void 0}var r={url:o,method:o,data:o,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:a};return YC.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=r[e]||l,n=t(e);YC.isUndefined(n)&&t!==a||(i[e]=n)})),i},NC="0.26.1",JC=NC,HC={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){HC[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var LC={};HC.transitional=function(e,t,i){function n(e,t){return"[Axios v"+JC+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new Error(n(l," has been removed"+(t?" in "+t:"")));return t&&!LC[l]&&(LC[l]=!0,console.warn(n(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,l,o)}};var kC={assertOptions:function(e,t,i){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],c=t[o];if(c){var a=e[o],r=void 0===a||c(a,o,e);if(!0!==r)throw new TypeError("option "+o+" must be "+r)}else if(!0!==i)throw Error("Unknown option "+o)}},validators:HC},AC=cW,UC=dW,TC=ZW,BC=function(e){return fC(e),e.headers=e.headers||{},e.data=VC.call(e,e.data,e.headers,e.transformRequest),e.headers=CC.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),CC.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||SC.adapter)(e).then((function(t){return fC(e),t.data=VC.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return RC(t)||(fC(e),t&&t.response&&(t.response.data=VC.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},FC=KC,wC=kC,zC=wC.validators;function xC(e){this.defaults=e,this.interceptors={request:new TC,response:new TC}}xC.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=FC(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var i=t.transitional;void 0!==i&&wC.assertOptions(i,{silentJSONParsing:zC.transitional(zC.boolean),forcedJSONParsing:zC.transitional(zC.boolean),clarifyTimeoutError:zC.transitional(zC.boolean)},!1);var n=[],l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!l){var a=[BC,void 0];for(Array.prototype.unshift.apply(a,n),a=a.concat(c),o=Promise.resolve(t);a.length;)o=o.then(a.shift(),a.shift());return o}for(var r=t;n.length;){var d=n.shift(),s=n.shift();try{r=d(r)}catch(e){s(e);break}}try{o=BC(r)}catch(e){return Promise.reject(e)}for(;c.length;)o=o.then(c.shift(),c.shift());return o},xC.prototype.getUri=function(e){return e=FC(this.defaults,e),UC(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},AC.forEach(["delete","get","head","options"],(function(e){xC.prototype[e]=function(t,i){return this.request(FC(i||{},{method:e,url:t,data:(i||{}).data}))}})),AC.forEach(["post","put","patch"],(function(e){xC.prototype[e]=function(t,i,n){return this.request(FC(n||{},{method:e,url:t,data:i}))}}));var PC=xC,jC=eC;function QC(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var i=this;this.promise.then((function(e){if(i._listeners){var t,n=i._listeners.length;for(t=0;t<n;t++)i._listeners[t](e);i._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){i.subscribe(e),t=e})).then(e);return n.cancel=function(){i.unsubscribe(t)},n},e((function(e){i.reason||(i.reason=new jC(e),t(i.reason))}))}QC.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},QC.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},QC.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},QC.source=function(){var e,t=new QC((function(t){e=t}));return{token:t,cancel:e}};var MC=QC,EC=cW,DC=cW,OC=OX,_C=PC,qC=KC;var $C=function e(t){var i=new _C(t),n=OC(_C.prototype.request,i);return DC.extend(n,_C.prototype,i),DC.extend(n,i),n.create=function(i){return e(qC(t,i))},n}(yC);$C.Axios=_C,$C.Cancel=eC,$C.CancelToken=MC,$C.isCancel=WC,$C.VERSION=NC,$C.all=function(e){return Promise.all(e)},$C.spread=function(e){return function(t){return e.apply(null,t)}},$C.isAxiosError=function(e){return EC.isObject(e)&&!0===e.isAxiosError},DX.exports=$C,DX.exports.default=$C;var eV,tV=DX.exports;let iV=eV=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=tV.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new eV),this.axiosInstance.interceptors.request.use((e=>HG(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(e)})))),this.axiosInstance.interceptors.response.use((e=>this.clientInstance.successHandler(e)),(e=>this.clientInstance.errorHandler(e))),this.axiosInstance.all=tV.all,this.axiosInstance.spread=tV.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(e){return HG(this,void 0,void 0,(function*(){if(yield this.attachToken(e),null==e?void 0:e.shouldEncodeToFormData){const t=null==e?void 0:e.data,i=new FormData;Object.keys(t).forEach((e=>{i.append(e,t[e])})),e.data=i}return e.startTimeInMs=(new Date).getTime(),eV.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw eV.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return eV.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}init(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return HG(this,void 0,void 0,(function*(){eV.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){eV.isHandlerEnabled=!0}disableHandler(){eV.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:eV.DEFAULT_HANDLER_DISABLE_TIMEOUT;eV.isHandlerEnabled=!1,setTimeout((()=>{eV.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};iV.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,iV=eV=function(e,t,i,n){var l,o=arguments.length,c=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(l=e[a])&&(c=(o<3?l(c):o>3?l(t,i,c):l(t,i))||c);return o>3&&c&&Object.defineProperty(t,i,c),c}([e=>{}],iV);class nV{setData(e,t){return HG(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return HG(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return HG(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class lV{constructor(){this._data=new Map}setData(e,t){return HG(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return HG(this,void 0,void 0,(function*(){return null!==(i=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==i?i:"{}"}))}removeData(e){return HG(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class oV{setData(e,t){return HG(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return HG(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return HG(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var cV=[],aV=[],rV="undefined"!=typeof Uint8Array?Uint8Array:Array,dV=!1;function sV(){dV=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)cV[t]=e[t],aV[e.charCodeAt(t)]=t;aV["-".charCodeAt(0)]=62,aV["_".charCodeAt(0)]=63}function uV(e,t,i){for(var n,l,o=[],c=t;c<i;c+=3)n=(e[c]<<16)+(e[c+1]<<8)+e[c+2],o.push(cV[(l=n)>>18&63]+cV[l>>12&63]+cV[l>>6&63]+cV[63&l]);return o.join("")}function ZV(e){var t;dV||sV();for(var i=e.length,n=i%3,l="",o=[],c=16383,a=0,r=i-n;a<r;a+=c)o.push(uV(e,a,a+c>r?r:a+c));return 1===n?(t=e[i-1],l+=cV[t>>2],l+=cV[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=cV[t>>10],l+=cV[t>>4&63],l+=cV[t<<2&63],l+="="),o.push(l),o.join("")}function hV(e,t,i,n,l){var o,c,a=8*l-n-1,r=(1<<a)-1,d=r>>1,s=-7,u=i?l-1:0,Z=i?-1:1,h=e[t+u];for(u+=Z,o=h&(1<<-s)-1,h>>=-s,s+=a;s>0;o=256*o+e[t+u],u+=Z,s-=8);for(c=o&(1<<-s)-1,o>>=-s,s+=n;s>0;c=256*c+e[t+u],u+=Z,s-=8);if(0===o)o=1-d;else{if(o===r)return c?NaN:1/0*(h?-1:1);c+=Math.pow(2,n),o-=d}return(h?-1:1)*c*Math.pow(2,o-n)}function bV(e,t,i,n,l,o){var c,a,r,d=8*o-l-1,s=(1<<d)-1,u=s>>1,Z=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:o-1,b=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,c=s):(c=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-c))<1&&(c--,r*=2),(t+=c+u>=1?Z/r:Z*Math.pow(2,1-u))*r>=2&&(c++,r/=2),c+u>=s?(a=0,c=s):c+u>=1?(a=(t*r-1)*Math.pow(2,l),c+=u):(a=t*Math.pow(2,u-1)*Math.pow(2,l),c=0));l>=8;e[i+h]=255&a,h+=b,a/=256,l-=8);for(c=c<<l|a,d+=l;d>0;e[i+h]=255&c,h+=b,c/=256,d-=8);e[i+h-b]|=128*m}var mV={}.toString,pV=Array.isArray||function(e){return"[object Array]"==mV.call(e)};GV.TYPED_ARRAY_SUPPORT=void 0===hW.TYPED_ARRAY_SUPPORT||hW.TYPED_ARRAY_SUPPORT;var IV=gV();function gV(){return GV.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function yV(e,t){if(gV()<t)throw new RangeError("Invalid typed array length");return GV.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=GV.prototype:(null===e&&(e=new GV(t)),e.length=t),e}function GV(e,t,i){if(!(GV.TYPED_ARRAY_SUPPORT||this instanceof GV))return new GV(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return CV(this,e)}return XV(this,e,t,i)}function XV(e,t,i,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,n){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,i):new Uint8Array(t,i,n);GV.TYPED_ARRAY_SUPPORT?(e=t).__proto__=GV.prototype:e=VV(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!GV.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|vV(t,i),l=(e=yV(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(SV(t)){var i=0|RV(t.length);return 0===(e=yV(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?yV(e,0):VV(e,t);if("Buffer"===t.type&&pV(t.data))return VV(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function WV(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function CV(e,t){if(WV(t),e=yV(e,t<0?0:0|RV(t)),!GV.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function VV(e,t){var i=t.length<0?0:0|RV(t.length);e=yV(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function RV(e){if(e>=gV())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+gV().toString(16)+" bytes");return 0|e}function SV(e){return!(null==e||!e._isBuffer)}function vV(e,t){if(SV(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return eR(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return tR(e).length;default:if(n)return eR(e).length;t=(""+t).toLowerCase(),n=!0}}function fV(e,t,i){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return xV(this,t,i);case"utf8":case"utf-8":return BV(this,t,i);case"ascii":return wV(this,t,i);case"latin1":case"binary":return zV(this,t,i);case"base64":return TV(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return PV(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function YV(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function KV(e,t,i,n,l){if(0===e.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=l?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(l)return-1;i=e.length-1}else if(i<0){if(!l)return-1;i=0}if("string"==typeof t&&(t=GV.from(t,n)),SV(t))return 0===t.length?-1:NV(e,t,i,n,l);if("number"==typeof t)return t&=255,GV.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):NV(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function NV(e,t,i,n,l){var o,c=1,a=e.length,r=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;c=2,a/=2,r/=2,i/=2}function d(e,t){return 1===c?e[t]:e.readUInt16BE(t*c)}if(l){var s=-1;for(o=i;o<a;o++)if(d(e,o)===d(t,-1===s?0:o-s)){if(-1===s&&(s=o),o-s+1===r)return s*c}else-1!==s&&(o-=o-s),s=-1}else for(i+r>a&&(i=a-r),o=i;o>=0;o--){for(var u=!0,Z=0;Z<r;Z++)if(d(e,o+Z)!==d(t,Z)){u=!1;break}if(u)return o}return-1}function JV(e,t,i,n){i=Number(i)||0;var l=e.length-i;n?(n=Number(n))>l&&(n=l):n=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var c=0;c<n;++c){var a=parseInt(t.substr(2*c,2),16);if(isNaN(a))return c;e[i+c]=a}return c}function HV(e,t,i,n){return iR(eR(t,e.length-i),e,i,n)}function LV(e,t,i,n){return iR(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function kV(e,t,i,n){return LV(e,t,i,n)}function AV(e,t,i,n){return iR(tR(t),e,i,n)}function UV(e,t,i,n){return iR(function(e,t){for(var i,n,l,o=[],c=0;c<e.length&&!((t-=2)<0);++c)n=(i=e.charCodeAt(c))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function TV(e,t,i){return 0===t&&i===e.length?ZV(e):ZV(e.slice(t,i))}function BV(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,c,a,r,d=e[l],s=null,u=d>239?4:d>223?3:d>191?2:1;if(l+u<=i)switch(u){case 1:d<128&&(s=d);break;case 2:128==(192&(o=e[l+1]))&&(r=(31&d)<<6|63&o)>127&&(s=r);break;case 3:o=e[l+1],c=e[l+2],128==(192&o)&&128==(192&c)&&(r=(15&d)<<12|(63&o)<<6|63&c)>2047&&(r<55296||r>57343)&&(s=r);break;case 4:o=e[l+1],c=e[l+2],a=e[l+3],128==(192&o)&&128==(192&c)&&128==(192&a)&&(r=(15&d)<<18|(63&o)<<12|(63&c)<<6|63&a)>65535&&r<1114112&&(s=r)}null===s?(s=65533,u=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),l+=u}return function(e){var t=e.length;if(t<=FV)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=FV));return i}(n)}GV.poolSize=8192,GV._augment=function(e){return e.__proto__=GV.prototype,e},GV.from=function(e,t,i){return XV(null,e,t,i)},GV.TYPED_ARRAY_SUPPORT&&(GV.prototype.__proto__=Uint8Array.prototype,GV.__proto__=Uint8Array),GV.alloc=function(e,t,i){return function(e,t,i,n){return WV(t),t<=0?yV(e,t):void 0!==i?"string"==typeof n?yV(e,t).fill(i,n):yV(e,t).fill(i):yV(e,t)}(null,e,t,i)},GV.allocUnsafe=function(e){return CV(null,e)},GV.allocUnsafeSlow=function(e){return CV(null,e)},GV.isBuffer=nR,GV.compare=function(e,t){if(!SV(e)||!SV(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,n=t.length,l=0,o=Math.min(i,n);l<o;++l)if(e[l]!==t[l]){i=e[l],n=t[l];break}return i<n?-1:n<i?1:0},GV.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},GV.concat=function(e,t){if(!pV(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return GV.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=GV.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!SV(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},GV.byteLength=vV,GV.prototype._isBuffer=!0,GV.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)YV(this,t,t+1);return this},GV.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)YV(this,t,t+3),YV(this,t+1,t+2);return this},GV.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)YV(this,t,t+7),YV(this,t+1,t+6),YV(this,t+2,t+5),YV(this,t+3,t+4);return this},GV.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?BV(this,0,e):fV.apply(this,arguments)},GV.prototype.equals=function(e){if(!SV(e))throw new TypeError("Argument must be a Buffer");return this===e||0===GV.compare(this,e)},GV.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},GV.prototype.compare=function(e,t,i,n,l){if(!SV(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===l&&(l=this.length),t<0||i>e.length||n<0||l>this.length)throw new RangeError("out of range index");if(n>=l&&t>=i)return 0;if(n>=l)return-1;if(t>=i)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(n>>>=0),c=(i>>>=0)-(t>>>=0),a=Math.min(o,c),r=this.slice(n,l),d=e.slice(t,i),s=0;s<a;++s)if(r[s]!==d[s]){o=r[s],c=d[s];break}return o<c?-1:c<o?1:0},GV.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},GV.prototype.indexOf=function(e,t,i){return KV(this,e,t,i,!0)},GV.prototype.lastIndexOf=function(e,t,i){return KV(this,e,t,i,!1)},GV.prototype.write=function(e,t,i,n){if(void 0===t)n="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)n=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var l=this.length-t;if((void 0===i||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return JV(this,e,t,i);case"utf8":case"utf-8":return HV(this,e,t,i);case"ascii":return LV(this,e,t,i);case"latin1":case"binary":return kV(this,e,t,i);case"base64":return AV(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return UV(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},GV.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var FV=4096;function wV(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(127&e[l]);return n}function zV(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(e[l]);return n}function xV(e,t,i){var n=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>n)&&(i=n);for(var l="",o=t;o<i;++o)l+=$V(e[o]);return l}function PV(e,t,i){for(var n=e.slice(t,i),l="",o=0;o<n.length;o+=2)l+=String.fromCharCode(n[o]+256*n[o+1]);return l}function jV(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function QV(e,t,i,n,l,o){if(!SV(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>l||t<o)throw new RangeError('"value" argument is out of bounds');if(i+n>e.length)throw new RangeError("Index out of range")}function MV(e,t,i,n){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-i,2);l<o;++l)e[i+l]=(t&255<<8*(n?l:1-l))>>>8*(n?l:1-l)}function EV(e,t,i,n){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-i,4);l<o;++l)e[i+l]=t>>>8*(n?l:3-l)&255}function DV(e,t,i,n,l,o){if(i+n>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function OV(e,t,i,n,l){return l||DV(e,0,i,4),bV(e,t,i,n,23,4),i+4}function _V(e,t,i,n,l){return l||DV(e,0,i,8),bV(e,t,i,n,52,8),i+8}GV.prototype.slice=function(e,t){var i,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),GV.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=GV.prototype;else{var l=t-e;i=new GV(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},GV.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},GV.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},GV.prototype.readUInt8=function(e,t){return t||jV(e,1,this.length),this[e]},GV.prototype.readUInt16LE=function(e,t){return t||jV(e,2,this.length),this[e]|this[e+1]<<8},GV.prototype.readUInt16BE=function(e,t){return t||jV(e,2,this.length),this[e]<<8|this[e+1]},GV.prototype.readUInt32LE=function(e,t){return t||jV(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},GV.prototype.readUInt32BE=function(e,t){return t||jV(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},GV.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n>=(l*=128)&&(n-=Math.pow(2,8*t)),n},GV.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||jV(e,t,this.length);for(var n=t,l=1,o=this[e+--n];n>0&&(l*=256);)o+=this[e+--n]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},GV.prototype.readInt8=function(e,t){return t||jV(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},GV.prototype.readInt16LE=function(e,t){t||jV(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},GV.prototype.readInt16BE=function(e,t){t||jV(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},GV.prototype.readInt32LE=function(e,t){return t||jV(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},GV.prototype.readInt32BE=function(e,t){return t||jV(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},GV.prototype.readFloatLE=function(e,t){return t||jV(e,4,this.length),hV(this,e,!0,23,4)},GV.prototype.readFloatBE=function(e,t){return t||jV(e,4,this.length),hV(this,e,!1,23,4)},GV.prototype.readDoubleLE=function(e,t){return t||jV(e,8,this.length),hV(this,e,!0,52,8)},GV.prototype.readDoubleBE=function(e,t){return t||jV(e,8,this.length),hV(this,e,!1,52,8)},GV.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||QV(this,e,t,i,Math.pow(2,8*i)-1,0);var l=1,o=0;for(this[t]=255&e;++o<i&&(l*=256);)this[t+o]=e/l&255;return t+i},GV.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||QV(this,e,t,i,Math.pow(2,8*i)-1,0);var l=i-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+i},GV.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,1,255,0),GV.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},GV.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,65535,0),GV.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):MV(this,e,t,!0),t+2},GV.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,65535,0),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):MV(this,e,t,!1),t+2},GV.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,4294967295,0),GV.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):EV(this,e,t,!0),t+4},GV.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,4294967295,0),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):EV(this,e,t,!1),t+4},GV.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);QV(this,e,t,i,l-1,-l)}var o=0,c=1,a=0;for(this[t]=255&e;++o<i&&(c*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},GV.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);QV(this,e,t,i,l-1,-l)}var o=i-1,c=1,a=0;for(this[t+o]=255&e;--o>=0&&(c*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},GV.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,1,127,-128),GV.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},GV.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,32767,-32768),GV.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):MV(this,e,t,!0),t+2},GV.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,2,32767,-32768),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):MV(this,e,t,!1),t+2},GV.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,2147483647,-2147483648),GV.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):EV(this,e,t,!0),t+4},GV.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||QV(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),GV.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):EV(this,e,t,!1),t+4},GV.prototype.writeFloatLE=function(e,t,i){return OV(this,e,t,!0,i)},GV.prototype.writeFloatBE=function(e,t,i){return OV(this,e,t,!1,i)},GV.prototype.writeDoubleLE=function(e,t,i){return _V(this,e,t,!0,i)},GV.prototype.writeDoubleBE=function(e,t,i){return _V(this,e,t,!1,i)},GV.prototype.copy=function(e,t,i,n){if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);var l,o=n-i;if(this===e&&i<t&&t<n)for(l=o-1;l>=0;--l)e[l+t]=this[l+i];else if(o<1e3||!GV.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+o),t);return o},GV.prototype.fill=function(e,t,i,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!GV.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var o;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(o=t;o<i;++o)this[o]=e;else{var c=SV(e)?e:eR(new GV(e,n).toString()),a=c.length;for(o=0;o<i-t;++o)this[o+t]=c[o%a]}return this};var qV=/[^+\/0-9A-Za-z-_]/g;function $V(e){return e<16?"0"+e.toString(16):e.toString(16)}function eR(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],c=0;c<n;++c){if((i=e.charCodeAt(c))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(c+1===n){(t-=3)>-1&&o.push(239,191,189);continue}l=i;continue}if(i<56320){(t-=3)>-1&&o.push(239,191,189),l=i;continue}i=65536+(l-55296<<10|i-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,i<128){if((t-=1)<0)break;o.push(i)}else if(i<2048){if((t-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function tR(e){return function(e){var t,i,n,l,o,c;dV||sV();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[a-2]?2:"="===e[a-1]?1:0,c=new rV(3*a/4-o),n=o>0?a-4:a;var r=0;for(t=0,i=0;t<n;t+=4,i+=3)l=aV[e.charCodeAt(t)]<<18|aV[e.charCodeAt(t+1)]<<12|aV[e.charCodeAt(t+2)]<<6|aV[e.charCodeAt(t+3)],c[r++]=l>>16&255,c[r++]=l>>8&255,c[r++]=255&l;return 2===o?(l=aV[e.charCodeAt(t)]<<2|aV[e.charCodeAt(t+1)]>>4,c[r++]=255&l):1===o&&(l=aV[e.charCodeAt(t)]<<10|aV[e.charCodeAt(t+1)]<<4|aV[e.charCodeAt(t+2)]>>2,c[r++]=l>>8&255,c[r++]=255&l),c}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(qV,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function iR(e,t,i,n){for(var l=0;l<n&&!(l+i>=t.length||l>=e.length);++l)t[l+i]=e[l];return l}function nR(e){return null!=e&&(!!e._isBuffer||lR(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&lR(e.slice(0,0))}(e))}function lR(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var oR=Object.freeze({__proto__:null,Buffer:GV,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),GV.alloc(+e)},isBuffer:nR,kMaxLength:IV}),cR={exports:{}},aR={},rR={};Object.defineProperty(rR,"__esModule",{value:!0}),rR.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,c=GV.alloc(o);for(c.write(e);l--;)c.write("=",n++);return c.toString()},Object.defineProperty(aR,"__esModule",{value:!0});var dR=rR;function sR(e,t){return void 0===t&&(t="utf8"),GV.isBuffer(e)?ZR(e.toString("base64")):ZR(GV.from(e,t).toString("base64"))}function uR(e){return e=e.toString(),dR.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function ZR(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var hR=sR;hR.encode=sR,hR.decode=function(e,t){return void 0===t&&(t="utf8"),GV.from(uR(e),"base64").toString(t)},hR.toBase64=uR,hR.fromBase64=ZR,hR.toBuffer=function(e){return GV.from(uR(e),"base64")},aR.default=hR,function(e){e.exports=aR.default,e.exports.default=e.exports}(cR);var bR=cR.exports,mR={exports:{}};!function(e){!function(t,i){var n={};!function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function i(e,i,n,l,o){for(var c,a,r,d,s,u,Z,h,b,m,p,I,g;o>=64;){for(c=i[0],a=i[1],r=i[2],d=i[3],s=i[4],u=i[5],Z=i[6],h=i[7],m=0;m<16;m++)p=l+4*m,e[m]=(255&n[p])<<24|(255&n[p+1])<<16|(255&n[p+2])<<8|255&n[p+3];for(m=16;m<64;m++)I=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,g=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(I+e[m-7]|0)+(g+e[m-16]|0);for(m=0;m<64;m++)I=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&u^~s&Z)|0)+(h+(t[m]+e[m]|0)|0)|0,g=((c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10))+(c&a^c&r^a&r)|0,h=Z,Z=u,u=s,s=d+I|0,d=r,r=a,a=c,c=I+g|0;i[0]+=c,i[1]+=a,i[2]+=r,i[3]+=d,i[4]+=s,i[5]+=u,i[6]+=Z,i[7]+=h,l+=64,o-=64}return l}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=i(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,l=t/536870912|0,o=t<<3,c=t%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<c-8;a++)this.buffer[a]=0;this.buffer[c-8]=l>>>24&255,this.buffer[c-7]=l>>>16&255,this.buffer[c-6]=l>>>8&255,this.buffer[c-5]=l>>>0&255,this.buffer[c-4]=o>>>24&255,this.buffer[c-3]=o>>>16&255,this.buffer[c-2]=o>>>8&255,this.buffer[c-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,c),this.finished=!0}for(a=0;a<8;a++)e[4*a+0]=this.state[a]>>>24&255,e[4*a+1]=this.state[a]>>>16&255,e[4*a+2]=this.state[a]>>>8&255,e[4*a+3]=this.state[a]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var i=0;i<this.state.length;i++)this.state[i]=e[i];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var l=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var i=0;i<e.length;i++)t[i]=e[i];for(i=0;i<t.length;i++)t[i]^=54;this.inner.update(t);for(i=0;i<t.length;i++)t[i]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(i=0;i<t.length;i++)t[i]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function o(e){var t=(new n).update(e),i=t.digest();return t.clean(),i}function c(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function a(e,t,i,n){var l=n[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),i&&t.update(i),t.update(n),t.finish(e),n[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=c;var r=new Uint8Array(e.digestLength);function d(e,t,i,n){void 0===t&&(t=r),void 0===n&&(n=32);for(var o=new Uint8Array([1]),d=c(t,e),s=new l(d),u=new Uint8Array(s.digestLength),Z=u.length,h=new Uint8Array(n),b=0;b<n;b++)Z===u.length&&(a(u,s,i,o),Z=0),h[b]=u[Z++];return s.clean(),u.fill(0),o.fill(0),h}function s(e,t,i,n){for(var o=new l(e),c=o.digestLength,a=new Uint8Array(4),r=new Uint8Array(c),d=new Uint8Array(c),s=new Uint8Array(n),u=0;u*c<n;u++){var Z=u+1;a[0]=Z>>>24&255,a[1]=Z>>>16&255,a[2]=Z>>>8&255,a[3]=Z>>>0&255,o.reset(),o.update(t),o.update(a),o.finish(d);for(var h=0;h<c;h++)r[h]=d[h];for(h=2;h<=i;h++){o.reset(),o.update(d).finish(d);for(var b=0;b<c;b++)r[b]^=d[b]}for(h=0;h<c&&u*c+h<n;h++)s[u*c+h]=r[h]}for(u=0;u<c;u++)r[u]=d[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),s}e.hkdf=d,e.pbkdf2=s}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(mR);var pR=i(mR.exports),IR=crypto;const gR=e=>e instanceof CryptoKey,yR=new TextEncoder,GR=new TextDecoder;const XR=e=>{let t=e;t instanceof Uint8Array&&(t=GR.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);return i})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class WR extends Error{constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class CR extends WR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class VR extends WR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_EXPIRED"}}class RR extends WR{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class SR extends WR{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class vR extends WR{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class fR extends WR{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class YR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class KR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_NO_MATCHING_KEY",this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}class NR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}class JR extends WR{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function HR(){return"function"==typeof WebSocketPair}function LR(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(t," must be ").concat(e))}function kR(e,t){return e.name===t}function AR(e){return parseInt(e.name.slice(4),10)}function UR(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function TR(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const i=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(i,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var BR=function(e){let t="Key must be ";for(var i=arguments.length,n=new Array(i>1?i-1:0),l=1;l<i;l++)n[l-1]=arguments[l];if(n.length>2){const e=n.pop();t+="one of type ".concat(n.join(", "),", or ").concat(e,".")}else 2===n.length?t+="one of type ".concat(n[0]," or ").concat(n[1],"."):t+="of type ".concat(n[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"==typeof e&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},FR=e=>gR(e);const wR=["CryptoKey"];function zR(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let i=e;for(;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(e)===i}const xR=async e=>{var t,i;const{algorithm:n,keyUsages:l}=function(e){let t,i;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new SR("".concat(e.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":t={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},i=["deriveBits"];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(e.alg.slice(-3),10)||1)},i=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},i=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},i=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},i=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},i=e.d?["deriveBits"]:[];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case HR()&&"OKP":if("EdDSA"!==e.alg)throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new SR('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},i=e.d?["sign"]:["verify"];break;default:throw new SR('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:i}}(e),o=[n,null!==(t=e.ext)&&void 0!==t&&t,null!==(i=e.key_ops)&&void 0!==i?i:l];if("PBKDF2"===n.name)return IR.subtle.importKey("raw",XR(e.k),...o);const c={...e};return delete c.alg,IR.subtle.importKey("jwk",c,...o)};const PR=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!FR(e))throw new TypeError(BR(e,...wR,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(wR.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!FR(e))throw new TypeError(BR(e,...wR));if("secret"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function jR(e,t,i){if(gR(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!kR(e.algorithm,"HMAC"))throw LR("HMAC");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!kR(e.algorithm,"RSASSA-PKCS1-v1_5"))throw LR("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!kR(e.algorithm,"RSA-PSS"))throw LR("RSA-PSS");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case HR()&&"EdDSA":if(!kR(e.algorithm,"NODE-ED25519"))throw LR("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!kR(e.algorithm,"ECDSA"))throw LR("ECDSA");const i=UR(t);if(e.algorithm.namedCurve!==i)throw LR(i,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var i=arguments.length,n=new Array(i>2?i-2:0),l=2;l<i;l++)n[l-2]=arguments[l];TR(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(BR(t,...wR));return IR.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(BR(t,...wR,"Uint8Array"))}const QR=async(e,t,i,n)=>{const l=await jR(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:i}=t.algorithm;if("number"!=typeof i||i<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const i="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:i,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:i,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:i,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:i,name:"ECDSA",namedCurve:t.namedCurve};case HR()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new SR("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await IR.subtle.verify(o,l,i,n)}catch(e){return!1}};async function MR(e,t,i){var n;if(!zR(e))throw new vR("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new vR('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new vR("JWS Protected Header incorrect type");if(void 0===e.payload)throw new vR("JWS Payload missing");if("string"!=typeof e.signature)throw new vR("JWS Signature missing or incorrect type");if(void 0!==e.header&&!zR(e.header))throw new vR("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=XR(e.protected);try{l=JSON.parse(GR.decode(t))}catch(e){throw new vR("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const e of n){const t=Object.keys(e);if(l&&0!==l.size)for(const e of t){if(l.has(e))return!1;l.add(e)}else l=new Set(t)}return!0}(l,e.header))throw new vR("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},c=function(e,t,i,n,l){if(void 0!==l.crit&&void 0===n.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let o;o=void 0!==i?new Map([...Object.entries(i),...t.entries()]):t;for(const t of n.crit){if(!o.has(t))throw new SR('Extension Header Parameter "'.concat(t,'" is not recognized'));if(void 0===l[t])throw new e('Extension Header Parameter "'.concat(t,'" is missing'));if(o.get(t)&&void 0===n[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(n.crit)}(vR,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let a=!0;if(c.has("b64")&&(a=l.b64,"boolean"!=typeof a))throw new vR('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=o;if("string"!=typeof r||!r)throw new vR('JWS "alg" (Algorithm) Header Parameter missing or invalid');const d=i&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)})("algorithms",i.algorithms);if(d&&!d.has(r))throw new RR('"alg" (Algorithm) Header Parameter not allowed');if(a){if("string"!=typeof e.payload)throw new vR("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new vR("JWS Payload must be a string or an Uint8Array instance");let s=!1;"function"==typeof t&&(t=await t(l,e),s=!0),PR(r,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.reduce(((e,t)=>{let{length:i}=t;return e+i}),0),l=new Uint8Array(n);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(yR.encode(null!==(n=e.protected)&&void 0!==n?n:""),yR.encode("."),"string"==typeof e.payload?yR.encode(e.payload):e.payload),Z=XR(e.signature);if(!await QR(r,t,Z,u))throw new JR;let h;h=a?XR(e.payload):"string"==typeof e.payload?yR.encode(e.payload):e.payload;const b={payload:h};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),s?{...b,key:t}:b}var ER=e=>Math.floor(e.getTime()/1e3);const DR=86400,OR=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var _R=e=>{const t=OR.exec(e);if(!t)throw new TypeError("Invalid time period format");const i=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(i*DR);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const qR=e=>e.toLowerCase().replace(/^application\//,""),$R=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function eS(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=GR.decode(e)),"string"!=typeof e)throw new vR("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:c}=e.split(".");if(3!==c)throw new vR("Invalid Compact JWS");const a=await MR({payload:l,protected:n,signature:o},t,i),r={payload:a.payload,protectedHeader:a.protectedHeader};return"function"==typeof t?{...r,key:a.key}:r}(e,t,i);if((null===(n=l.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===l.protectedHeader.b64)throw new fR("JWTs MUST NOT use unencoded payload");const o=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:n}=i;if(n&&("string"!=typeof e.typ||qR(e.typ)!==qR(n)))throw new CR('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(GR.decode(t))}catch(e){}if(!zR(l))throw new fR("JWT Claims Set must be a top-level JSON object");const{issuer:o}=i;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new CR('unexpected "iss" claim value',"iss","check_failed");const{subject:c}=i;if(c&&l.sub!==c)throw new CR('unexpected "sub" claim value',"sub","check_failed");const{audience:a}=i;if(a&&!$R(l.aud,"string"==typeof a?[a]:a))throw new CR('unexpected "aud" claim value',"aud","check_failed");let r;switch(typeof i.clockTolerance){case"string":r=_R(i.clockTolerance);break;case"number":r=i.clockTolerance;break;case"undefined":r=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:d}=i,s=ER(d||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new CR('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new CR('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>s+r)throw new CR('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new CR('"exp" claim must be a number',"exp","invalid");if(l.exp<=s-r)throw new VR('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=s-l.iat;if(e-r>("number"==typeof i.maxTokenAge?i.maxTokenAge:_R(i.maxTokenAge)))throw new VR('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-r)throw new CR('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),c={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...c,key:l.key}:c}function tS(e){return zR(e)}class iS{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(tS)}(e))throw new YR("JSON Web Key Set malformed");var t;this._jwks=(t=e,"function"==typeof structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t)))}async getKey(e,t){const{alg:i,kid:n}={...e,...t.header},l=function(e){switch("string"==typeof e&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new SR('Unsupported "alg" value for a JSON Web Key Set')}}(i),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof n&&(t=n===e.kid),t&&"string"==typeof e.alg&&(t=i===e.alg),t&&"string"==typeof e.use&&(t="sig"===e.use),t&&Array.isArray(e.key_ops)&&(t=e.key_ops.includes("verify")),t&&"EdDSA"===i&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(i){case"ES256":t="P-256"===e.crv;break;case"ES256K":t="secp256k1"===e.crv;break;case"ES384":t="P-384"===e.crv;break;case"ES512":t="P-521"===e.crv}return t})),{0:c,length:a}=o;if(0===a)throw new KR;if(1!==a)throw new NR;const r=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===r[i]){const e=await async function(e,t,i){if(!zR(e))throw new TypeError("JWK must be an object");if(t||(t=e.alg),"string"!=typeof t||!t)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(e.kty){case"oct":if("string"!=typeof e.k||!e.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==e.ext),i?xR({...e,alg:t,ext:!1}):XR(e.k);case"RSA":if(void 0!==e.oth)throw new SR('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return xR({...e,alg:t});default:throw new SR('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new YR("JSON Web Key Set members must be public keys");r[i]=e}return r[i]}}var nS={exports:{}},lS={exports:{}},oS=n(oR);
432
432
  /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
433
433
  !function(e,t){var i=oS,n=i.Buffer;function l(e,t){for(var i in e)t[i]=e[i]}function o(e,t,i){return n(e,t,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=i:(l(i,t),t.Buffer=o),o.prototype=Object.create(n.prototype),l(n,o),o.from=function(e,t,i){if("number"==typeof e)throw new TypeError("Argument must not be a number");return n(e,t,i)},o.alloc=function(e,t,i){if("number"!=typeof e)throw new TypeError("Argument must be a number");var l=n(e);return void 0!==t?"string"==typeof i?l.fill(t,i):l.fill(t):l.fill(0),l},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}}(lS,lS.exports);var cS=65536,aS=4294967295;var rS=lS.exports.Buffer,dS=t.crypto||t.msCrypto;dS&&dS.getRandomValues?nS.exports=function(e,t){if(e>aS)throw new RangeError("requested too many random bytes");var i=rS.allocUnsafe(e);if(e>0)if(e>cS)for(var n=0;n<e;n+=cS)dS.getRandomValues(i.slice(n,n+cS));else dS.getRandomValues(i);if("function"==typeof t)return TW.nextTick((function(){t(null,i)}));return i}:nS.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var sS=nS.exports;class uS{base64URLEncode(e){return bR.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return bR.decode(e).toString()}hashSha256(e){return GV.from(pR((new TextEncoder).encode(e)))}generateRandomBytes(e){return sS(e)}verifyJwt(e,t,i,n,l,o,c){return eS(e,(a={keys:[t]},iS.prototype.getKey.bind(new iS(a))),{algorithms:i,audience:n,clockTolerance:c,issuer:l,subject:o}).then((()=>Promise.resolve(!0))).catch((e=>{var t;return Promise.reject(new xG("SPA-CRYPTO-UTILS-VJ-IV01",null!==(t=null==e?void 0:e.reason)&&void 0!==t?t:JSON.stringify(e),"".concat(null==e?void 0:e.code," ").concat(null==e?void 0:e.claim)))}));var a}}const ZS=(t,i)=>HG(void 0,void 0,void 0,(function*(){var n;const l=(t=>{switch(t){case e.Storage.LocalStorage:return new nV;case e.Storage.SessionStorage:return new oV;case e.Storage.BrowserMemory:return new lV;default:return new oV}})(t.storage),o=new uS,c=new OG(l,o);yield c.initialize(t);const a=new jX(c),r=c.getDataLayer(),d=yield EX((()=>HG(void 0,void 0,void 0,(function*(){return c.getSignOutURL()}))),null!==(n=t.storage)&&void 0!==n?n:e.Storage.SessionStorage,(e=>r.setSessionDataParameter(TG,null!=e?e:""))),s=i(c,a);let u=!1;const Z=iV.getInstance();let h,b,m=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,(e=>HG(void 0,void 0,void 0,(function*(){yield s.attachTokenToRequestConfig(e)})))));const p=()=>HG(void 0,void 0,void 0,(function*(){const e=yield c.getOIDCServiceEndpoints(),t=yield r.getConfigData();s.initializeSessionManger(t,e,(()=>HG(void 0,void 0,void 0,(function*(){return(yield c.getBasicUserInfo()).sessionState}))),(e=>HG(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(e)}))),d)})),I=()=>HG(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>HG(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(TG,null!=e?e:"")}))))})),g=e=>{e.preventSignOutURLUpdate&&(u=!0)},y=(e,t,i)=>HG(void 0,void 0,void 0,(function*(){return yield s.requestAccessToken(e,t,p,void 0,i)})),G=()=>HG(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=yield c.getAuthorizationURL({prompt:"none",state:AX}),n=new URL(i);n.searchParams.set("response_mode","query");const l=n.toString();if(t.storage===e.Storage.BrowserMemory&&t.enablePKCE){const e=n.searchParams.get(wG);MX.setPKCE(PG.extractPKCEKeyFromStateParam(null!=e?e:""),yield c.getPKCECode(null!=e?e:""))}return l}));return{disableHttpHandler:()=>(s.disableHttpHandler(Z),m=!1,!0),enableHttpHandler:()=>(s.enableHttpHandler(Z),m=!0,!0),getAccessToken:()=>HG(void 0,void 0,void 0,(function*(){return s.getAccessToken()})),getBasicUserInfo:()=>HG(void 0,void 0,void 0,(function*(){return s.getBasicUserInfo()})),getCryptoHelper:()=>HG(void 0,void 0,void 0,(function*(){return s.getCryptoHelper()})),getDataLayer:()=>HG(void 0,void 0,void 0,(function*(){return s.getDataLayer()})),getDecodedIDToken:()=>HG(void 0,void 0,void 0,(function*(){return s.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>HG(void 0,void 0,void 0,(function*(){return s.getIDToken()})),getOIDCServiceEndpoints:()=>HG(void 0,void 0,void 0,(function*(){return s.getOIDCServiceEndpoints()})),httpRequest:e=>HG(void 0,void 0,void 0,(function*(){return yield s.httpRequest(Z,e,m,h,b)})),httpRequestAll:e=>HG(void 0,void 0,void 0,(function*(){return yield s.httpRequestAll(e,Z,m,h,b)})),isAuthenticated:()=>HG(void 0,void 0,void 0,(function*(){return s.isAuthenticated()})),refreshAccessToken:()=>HG(void 0,void 0,void 0,(function*(){try{return yield s.refreshAccessToken(g)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>HG(void 0,void 0,void 0,(function*(){return yield s.requestCustomGrant(e,g)})),revokeAccessToken:()=>HG(void 0,void 0,void 0,(function*(){const e=yield a.getRefreshTimeoutTimer();return c.revokeAccessToken().then((()=>(d.reset(),a.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{h=e},setHttpRequestFinishCallback:e=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(e)},signIn:(i,n,l,o)=>HG(void 0,void 0,void 0,(function*(){var a,r,d;const u=yield s.handleSignIn(I,p);if(u)return u;{let s,u,Z;return(null==t?void 0:t.responseMode)===e.ResponseMode.formPost&&n?(s=n,u=null!=l?l:"",Z=null!=o?o:""):(s=null!==(a=new URL(window.location.href).searchParams.get(UG))&&void 0!==a?a:"",u=null!==(r=new URL(window.location.href).searchParams.get(TG))&&void 0!==r?r:"",Z=null!==(d=new URL(window.location.href).searchParams.get(wG))&&void 0!==d?d:"",MX.removeAuthorizationCode()),s&&Z?y(s,u,Z):c.getAuthorizationURL(i).then((i=>HG(void 0,void 0,void 0,(function*(){if(t.storage===e.Storage.BrowserMemory&&t.enablePKCE){const e=PG.extractPKCEKeyFromStateParam(Z);MX.setPKCE(e,yield c.getPKCECode(Z))}return location.href=i,yield MX.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}})),signOut:()=>HG(void 0,void 0,void 0,(function*(){return(yield c.isAuthenticated())&&!u?location.href=yield c.getSignOutURL():location.href=MX.getSignOutURL(),a.clearRefreshTokenTimeout(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData(),yield MX.waitTillPageRedirect(),!0})),trySignInSilently:()=>HG(void 0,void 0,void 0,(function*(){return yield s.trySignInSilently(G,y,d)})),updateConfig:e=>HG(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e);yield c.updateConfig(n),n.enableOIDCSessionManagement&&i&&(d.reset(),p())}))}})),hS=(t,i,n)=>HG(void 0,void 0,void 0,(function*(){var l;let o;const c=null!==(l=null==t?void 0:t.requestTimeout)&&void 0!==l?l:6e4;let a=!0,r=!1;const d=(t=>{switch(t){case e.Storage.LocalStorage:return new nV;case e.Storage.SessionStorage:return new oV;case e.Storage.BrowserMemory:return new lV;default:return new oV}})(t.storage),s=new uS,u=new OG(d,s);yield u.initialize(t);const Z=new jX(u),h=yield EX((()=>HG(void 0,void 0,void 0,(function*(){const e={type:lX};try{return yield p(e)}catch(e){return MX.getSignOutURL()}}))),t.storage,(e=>I(e))),b=n(u,Z),m=new i,p=e=>{const t=new MessageChannel;return m.postMessage(e,[t.port2]),new Promise(((e,i)=>{const n=setTimeout((()=>{i(new xG("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+c/1e3+" since dispatching the request"))}),c);return t.port1.onmessage=l=>{let{data:o}=l;if(clearTimeout(n),t.port1.close(),t.port2.close(),null==o?void 0:o.success){const t=(null==o?void 0:o.data)?JSON.parse(null==o?void 0:o.data):null;(null==o?void 0:o.blob)&&(t.data=null==o?void 0:o.blob),e(t)}else i(o.error?JSON.parse(o.error):null)}}))},I=e=>p({data:e,type:CX}),g=()=>p({type:VX}),y=()=>HG(void 0,void 0,void 0,(function*(){const e=yield R(),t=yield S();b.initializeSessionManger(t,e,(()=>HG(void 0,void 0,void 0,(function*(){return(yield v()).sessionState}))),(e=>HG(void 0,void 0,void 0,(function*(){return(yield X(e)).authorizationURL}))),h)})),G=()=>HG(void 0,void 0,void 0,(function*(){var e;const t=yield S(),i={data:{prompt:"none",state:AX},type:gX},n=yield p(i),l=PG.extractPKCEKeyFromStateParam(null!==(e=new URL(n.authorizationURL).searchParams.get(wG))&&void 0!==e?e:"");n.pkce&&t.enablePKCE&&MX.setPKCE(l,n.pkce);const o=n.authorizationURL,c=new URL(o);c.searchParams.set("response_mode","query");return c.toString()})),X=e=>HG(void 0,void 0,void 0,(function*(){const t=yield S();return p({data:e,type:gX}).then((e=>HG(void 0,void 0,void 0,(function*(){var i;if(e.pkce&&t.enablePKCE){const t=PG.extractPKCEKeyFromStateParam(null!==(i=new URL(e.authorizationURL).searchParams.get(wG))&&void 0!==i?i:"");MX.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),W=(e,t,i)=>HG(void 0,void 0,void 0,(function*(){const n=yield S(),l=PG.extractPKCEKeyFromStateParam(i),o={data:{code:e,pkce:n.enablePKCE?MX.getPKCE(l):void 0,sessionState:t,state:i},type:yX};return n.enablePKCE&&MX.removePKCE(l),p(o).then((e=>p({type:XX}).then((t=>(MX.setSignOutURL(t),n.enableOIDCSessionManagement&&y(),g(),Promise.resolve(e)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),C=()=>HG(void 0,void 0,void 0,(function*(){return yield h.receivePromptNoneResponse((e=>HG(void 0,void 0,void 0,(function*(){return I(e)}))))})),V=()=>HG(void 0,void 0,void 0,(function*(){if(yield f())return yield g(),t.enableOIDCSessionManagement&&y(),v()})),R=()=>p({type:ZX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),S=()=>p({type:YX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),v=()=>p({type:hX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),f=()=>p({type:GX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>p({type:IX}).then((()=>(a=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>p({type:pX}).then((()=>(a=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:v,getCryptoHelper:()=>p({type:mX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>p({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>p({type:bX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>p({type:SX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:R,httpRequest:e=>{(null==e?void 0:e.data)&&(null==e?void 0:e.data)instanceof FormData&&(e.data=Object.assign(Object.assign({},Object.fromEntries(null==e?void 0:e.data.entries())),{formData:!0}));return p({data:e,type:oX}).then((e=>Promise.resolve(e))).catch((e=>HG(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)}))))},httpRequestAll:e=>p({data:e,type:cX}).then((e=>Promise.resolve(e))).catch((e=>HG(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)})))),initialize:()=>{o||(o={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),m.onmessage=e=>{let{data:t}=e;switch(t.type){case uX:(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case dX:(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case sX:(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return p({data:t,type:nX}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:f,refreshAccessToken:()=>p({type:WX}),requestCustomGrant:e=>p({data:e,type:aX}).then((t=>(e.preventSignOutURLUpdate&&(r=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>p({type:rX}).then((e=>(h.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(o.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(o.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(o.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(o.requestSuccessCallback=e)},signIn:(i,n,l,o)=>HG(void 0,void 0,void 0,(function*(){var c,a,r;const d=yield b.handleSignIn(C,y,V);if(d)return d;{let d,s,u;return(null==t?void 0:t.responseMode)===e.ResponseMode.formPost&&n?(d=n,s=null!=l?l:"",u=null!=o?o:""):(d=null!==(c=new URL(window.location.href).searchParams.get(UG))&&void 0!==c?c:"",s=null!==(a=new URL(window.location.href).searchParams.get(TG))&&void 0!==a?a:"",u=null!==(r=new URL(window.location.href).searchParams.get(wG))&&void 0!==r?r:"",MX.removeAuthorizationCode()),d&&u?W(d,s,u):X(i).then((e=>HG(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield MX.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>f().then((e=>HG(void 0,void 0,void 0,(function*(){if(e&&!r){return p({type:lX}).then((e=>HG(void 0,void 0,void 0,(function*(){return window.location.href=e,yield MX.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e)))}return window.location.href=MX.getSignOutURL(),yield MX.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e))),trySignInSilently:()=>HG(void 0,void 0,void 0,(function*(){return yield b.trySignInSilently(G,W,h)})),updateConfig:e=>HG(void 0,void 0,void 0,(function*(){const t=yield S(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e),l={data:n,type:RX};yield p(l),n.enableOIDCSessionManagement&&i&&(h.reset(),y())}))}})),bS={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,periodicTokenRefresh:!1,sessionRefreshInterval:300,storage:e.Storage.SessionStorage},mS="primaryInstance";class pS{constructor(e){this._authHelper=PX,this._worker=iX,this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onSignOutFailedCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=e}instantiateAuthHelper(e){this._authHelper=e||PX}instantiateWorker(e){this._worker=e||iX}_isInitialized(){return HG(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let e=0;for(;!this._initialized;)1e4===e&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise((e=>setTimeout(e,1))),e++;return!0}))}_validateMethod(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return HG(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!(e&&!(yield this.isAuthenticated()))||Promise.reject(new xG("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new xG("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}
434
434
  /**